Отсортировать строки фамилия-номер по убыванию номеров - Free Pascal

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Задача состоит в доделывании данной проги Надо прочитать список 10 фамилий и моб. номеров к ним, отсортировать строки фамилия-номер по убыванию номеров и вывести в другой файл. Буду благодарен за обьяснение и готовую прогу.
program pr1;
 type t=array [1..24] of char;
 tt=array [1..10] of t;
 var a:tt; i,j:byte;
begin
 assign(input,'dan1.inp');
 reset(input);
 assign(output,'res1.out');
 rewrite(output);
  for i:=1 to 10 do
  begin
   for j:=1 to 24 do
   begin
    read(a[i,j]);
    write(a[i,j]);
   end;
    readln;
    writeln;
  end;
  close(input);
  close(output)
end.
Спойлер с входными данными не делаю, потому что пробелы стираются Символ, с которого начинается номер - 16

Решение задачи: «Отсортировать строки фамилия-номер по убыванию номеров»

textual
Листинг программы
const m=10; n=24; p=16;
var
  a: array [1..m,1..n] of Char;
  i, j, k: Integer; t: Char;
begin
  FillChar(a,SizeOf(a),' ');
  Assign(input,'dan1.inp'); Reset(input);
  Assign(output,'res1.out'); Rewrite(output);
  while not EoF and (i<m) do begin
    Inc(i); j:=0;
    while not EoLn and (j<n) do begin
      Inc(j); Read(a[i,j]);
    end; ReadLn;
  end;
  for i:=m downto 2 do for j:=2 to i do begin
    k:=p; while (k<=n) and (a[j-1,k]=a[j,k]) do Inc(k);
    if (k<=n) and (a[j-1,k]<a[j,k]) then
      for k:=1 to n do begin
        t:=a[j-1,k]; a[j-1,k]:=a[j,k]; a[j,k]:=t;
      end;
  end;
  for i:=1 to m do begin
    for j:=1 to n do Write(a[i,j]); WriteLn;
  end;
  Close(input); Close(output);
end.

Объяснение кода листинга программы

  1. Объявлены константы m=10, n=24, p=16 и переменные i, j, k типа Integer и t, a типа Char.
  2. Заполняется массив a символами ' '.
  3. Открываются файлы input и output для чтения и записи соответственно.
  4. В цикле while с условием not EoF и (i<m) происходит чтение строк из файла input по одному символу в массив a.
  5. В цикле for i:=m downto 2 выполняется перестановка строк в массиве a, начиная с i=m и заканчивая i=2.
  6. В цикле for j:=2 to i происходит поиск номера строки, которую нужно поменять местами с предыдущей.
  7. Если найденная строка с меньшим номером имеет больший символ в последней позиции, то происходит перестановка строк в массиве a, начиная с k=1 и заканчивая k=n.
  8. В цикле for i:=1 to m выполняется запись строк из массива a в файл output.
  9. Закрываются файлы input и output.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.273 из 5
Похожие ответы