print1. Сортировка и поиск

printРазбор задачи 1126. ICQ

Объявление структур данных
type info=
  record 
    fam:string; { фамилия }
    icq:integer; { номер ICQ }
  end;
var 
  a:array[1..100] of info; { информация по ученикам }
  t:info; { временная переменная для обмена } 
  n,k,i,j:integer;
  s:string; { строка для ввода информации по ученику }
  flg:boolean; { флаг, что массив упорядочен }
Ввод информации
  readln(n,k);
  for i:=1 to n do
  begin
    readln(s); { так как в одной строке содержатся текст и число,
                 необходимо ввести эту информацию одной строкой,
                 а затем разбить на части }           
    a[i].fam:=copy(s,1,pos(' ',s)-1); { выделяем фамилию до пробела }
    val(copy(s,pos(' ',s)+1,20),a[i].icq,j); { строку после пробела преобразуем в число }
  end;
Сортировка по ICQ
  repeat
    flg:=true; { массив упорядочен }
    for i:=1 to n-1 do
      { сравниваем соседние элементы }
      if a[i].icq>a[i+1].icq then { найден беспорядок }
      begin
        t:=a[i]; { меняем местами i и i+1 элементы }
        a[i]:=a[i+1];
        a[i+1]:=t;
        flg:=false; { массив не упорядочен }
      end;
  until flg; { пока массив не будет упорядочен }
Сортировка первых `K` учеников по фамилии, выполняется аналогично
  repeat
    flg:=true;
    for i:=1 to k-1 do
      if a[i].fam>a[i+1].fam then
      begin
        t:=a[i];
        a[i]:=a[i+1];
        a[i+1]:=t;
        flg:=false;
      end;
  until flg;
Вывод результата
  for i:=1 to k do
    writeln(a[i].fam);
loading