Вопрос: Сведения о результатах сессии содержат следующую информацию: Фамилия, имя студента, номер группы, его оценки по итогам 3 экзаменов. Получить отдельные списки отличников, хорошистов, троечников и двоечников в алфавитном порядке. (  Фамилия, имя студента, номер группы)..
Категория: школьный раздел
Ответы:
PROGRAM Student;
Uses crt;
 Type data=record
           family:string[20];
           name:string[15];
           nomer:integer;
           exz1,exz2,exz3:2..5
          end;
 var spisok:array[1..50] of data;
     spisok1: data;
     n,k,i,j,l:integer; v:integer;
     s,s1:string;
begin
      writeln(‘Введите количество студентов');
      readln(n);
      writeln(‘Введите информацию о студенте по форме');
      Writeln(‘Фамилия имя номер_группы 1экзамен 2 экзамен 3 экзамен');
{Ввод данных}
      For i:=1 to n do
      begin
       readln(s);
        k:=pos(' ',s); {считаем длину 1 слова до пробела}
        spisok[i].family:=copy(s,1,k-1);{копируем из сроки 1слово}
        delete(s,1,k);{удаляем из строки 1 слово}
         k:=pos(' ',s); spisok[i].name:=copy(s,1,k-1);
         delete(s,1,k);
         k:=pos(' ',s);
         s1:=copy(s,1,k-1);
         val(s1,v);{переводим символ s1 в число}
         spisok[i].nomer:=v;
         delete(s,1,k);
         k:=pos(' ',s);
         s1:=copy(s,1,k-1);
         val(s1,v);
         spisok[i].exz1:=v;
         delete(s,1,k);
k:=pos(' ',s);
         s1:=copy(s,1,k-1);
         val(s1,v);
         spisok[i].exz2:=v ;
         delete(s,1,k);
         val(s,v);
         spisok[i].exz3:=v;
      end;
 {Сортируем списки по возрастанию}
       For i:=1 to n do
      for j:=1 to n-i do
    if spisok[j].family > spisok[j+1].family then
          begin
            spisok1.family:=spisok[j].family;
            spisok1.name:=spisok[j].name;
            spisok1.nomer:=spisok[j].nomer;
            spisok1.exz1:=spisok[j].exz1;
            spisok1.exz2:=spisok[j].exz2;
            spisok1.exz3:=spisok[j].exz3;                                  
      spisok[j].family:=spisok[j+1].family;
      spisok[j].name:=spisok[j+1].name;                
      spisok[j].nomer:=spisok[j+1].nomer;
spisok[j].exz1:=spisok[j+1].exz1;
              spisok[j].exz2:=spisok[j+1].exz2;
              spisok[j].exz3:=spisok[j+1].exz3;
            spisok[j+1].family:=spisok1.family;
            spisok[j+1].name:=spisok1.name;
            spisok[j+1].nomer:=spisok1.nomer;
            spisok[j+1].exz1:=spisok1.exz1;
            spisok[j+1].exz2:=spisok1.exz2;
            spisok[j+1].exz3:=spisok1.exz3;
          end;
          Clrscr;
{Выбираем отличников}
       Writeln(‘Отличники');l:=0;
      For i:=1 to n do
        With spisok[i] do
        if (exz1=5) and (exz2=5) and (exz3=5) then
begin
           Writeln(family,' ',name,' ', nomer);l:=l+1;
         end;
        if l=0 then writeln (Отличников нет');
        Writeln;
        Writeln(‘Хорошисты');l:=0;
{Выбираем хорошистов}
      For i:=1 to n do
        With spisok[i] do
        if ((exz1=4) and (exz2>=4) and (exz3>=4) or  (exz1>=4) and (exz2=4) and (exz3>=4) or  (exz1>=4) and (exz2>=4) and (exz3=4)) then
         begin
           Writeln(family,' ',name,' ',   
               nomer);l:=l+1;
         end;
          if l=0 then writeln (‘Хорошистов нет');
Writeln;
        Writeln(‘Троечники');l:=0;
{Выбираем троечников}
      For i:=1 to n do
        With spisok[i] do
        if ((exz1=3) and (exz2>=3) and (exz3>=3) or (exz1>=3) and (exz2=3) and (exz3>=3) or  (exz1>=3) and (exz2>=3) and (exz3=3)) then
         begin
          Writeln(family,' ',name,' ',nomer);  
          l:=l+1;
         end;
         if l=0 then writeln (‘Троечников нет');
      readkey
end.