стеки в Паскаль

Ответить
misha_beginner
Сообщения: 20
Зарегистрирован: 13 окт 2013, 22:33

15 апр 2014, 16:35

всем привет. Прошу вашей помощи: вводиться Фамилии студентов и оценки к ним. Нужно в табличной форме вывести тех студентов средняя оценка которых больше за 4, всё это должно быть в в виде СТЕКА . Вот мой код:

Код: Выделить всё

uses crt;
type ptr=^item;
     item=record
       data:string;
       next :p tr;
       end;
    masiv=array[1..1] of integer;
    matrix=array[1..1] of string;
    mas=^masiv; mat=^matrix;
var head,current :p tr;
    str:string;
    n,i:integer;
    key:char;
    ma,pr,oc,ag:mas; prz:mat;
    a,b,c,d:real;
 
 
 
 
 
procedure enter(val:string);
 begin
  new(current);
  current^.data:=val;
  current^.next:=head;
  head:=current;
 end;
 
 
 
 
procedure entmas(var v:mas);
 begin
  getmem(v,n*sizeof(integer));
  writeln('‚vvedite ocenki');
  for i:=1 to n do readln(v^[i]);
end;
procedure del(var val:string);
 begin
  current:=head;
  val:=head^.data;
  head:=current^.next;
  dispose(current);
  end;
 
 
 
procedure lin;
 var i:integer;
 begin for i:=1 to 64 do write('_');
 writeln; end;
 
 
 
 
procedure lin2;
 var i:integer;
 begin for i:=1 to 64 do write('=');
 writeln;
  end;
 
 
 
function rah(h:mas):real;
var i,s:integer;
 begin s:=0;
 for i:=1 to n do begin
  s:=s+h^[i];
  end;
 rah:=s/n;
  end;
BEGIN
 
clrscr;
head:=nil;
repeat
clrscr;
writeln('1. vvod');
writeln('2. vivod');
writeln('3. ‚sortirovka stydentov');
writeln('4. vixod);
key:=readkey;
case key of
 '1':begin
     writeln('vvedi kilkist stydentiv');
     readln(n);
     for i:=1 to n do begin
      writeln('vvedi prizv stydenta');
      readln(str);
      enter(str); end;
      writeln('vvedite ocenki');
      entmas(ma); entmas(pr); entmas(oc); entmas(ag);
     end;
 
 
 
 '2':begin
     lin2;
     getmem(pr,n*sizeof(integer));
     write('||   Familiya    || ');
     for i:=1 to n do begin
      del(str); prz^[i]:=str;
      end;
 
      for i:=n downto 1 do begin write(prz^[i]:12);
      write(' | ');
      end;
 
      writeln('seredne');
 
 
     writeln;
     lin;
     write('||  matanaliz  ||');
     for i:=1 to n do begin
      write(ma^[i]:12,' | ');
 
     end;
 
      write(' ',rah(ma):3:2,' |');
 
     writeln;
     lin;
     write('|| programirovaie ||');
     for i:=1 to n do begin
      write(pr^[i]:12,' | ');
     end;
 
      write(' ',rah(pr):3:2,' |');
 
     writeln;
     lin;
     write('||       Os      ||');
     for i:=1 to n do begin
      write(oc^[i]:12,' | ');
     end;
 
       write(' ',rah(oc):2:2,' |');
     writeln;
     lin;
     write('||    Algebra    ||');
     for i:=1  to n do write('             | ');
     writeln;
     write('||  i geometria  ||');
     for i:=1 to n do begin
      write(ag^[i]:12,' | ');
 
 
 
     end;
 
       write(' ',rah(ag):3:2,' |');
 
     readln;
     end;
 
'3': begin
 
...
....
....
end;
 
until key='4';
 
END.
помогите плиз сделать норм сортировку под клавишу 3 (я поставил три точки потому что не знаю как реализовать) чтобы сортировало тех студентов средний бал которых выше 4, плиз. (пункты меню 1 и 2 работает норм в программе.)? осталось только под номер 3 пункт сделать вывод сортиовки. Спасибо заранее!
Ответить