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

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

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

Здравствуйте. Задача состоит в доделывании данной проги Надо прочитать список 10 фамилий и моб. номеров к ним, отсортировать строки фамилия-номер по убыванию номеров и вывести в другой файл. Буду благодарен за обьяснение и готовую прогу.
Листинг программы
  1. program pr1;
  2. type t=array [1..24] of char;
  3. tt=array [1..10] of t;
  4. var a:tt; i,j:byte;
  5. begin
  6. assign(input,'dan1.inp');
  7. reset(input);
  8. assign(output,'res1.out');
  9. rewrite(output);
  10. for i:=1 to 10 do
  11. begin
  12. for j:=1 to 24 do
  13. begin
  14. read(a[i,j]);
  15. write(a[i,j]);
  16. end;
  17. readln;
  18. writeln;
  19. end;
  20. close(input);
  21. close(output)
  22. end.
Спойлер с входными данными не делаю, потому что пробелы стираются Символ, с которого начинается номер - 16

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

textual
Листинг программы
  1. const m=10; n=24; p=16;
  2. var
  3.   a: array [1..m,1..n] of Char;
  4.   i, j, k: Integer; t: Char;
  5. begin
  6.   FillChar(a,SizeOf(a),' ');
  7.   Assign(input,'dan1.inp'); Reset(input);
  8.   Assign(output,'res1.out'); Rewrite(output);
  9.   while not EoF and (i<m) do begin
  10.     Inc(i); j:=0;
  11.     while not EoLn and (j<n) do begin
  12.       Inc(j); Read(a[i,j]);
  13.     end; ReadLn;
  14.   end;
  15.   for i:=m downto 2 do for j:=2 to i do begin
  16.     k:=p; while (k<=n) and (a[j-1,k]=a[j,k]) do Inc(k);
  17.     if (k<=n) and (a[j-1,k]<a[j,k]) then
  18.       for k:=1 to n do begin
  19.         t:=a[j-1,k]; a[j-1,k]:=a[j,k]; a[j,k]:=t;
  20.       end;
  21.   end;
  22.   for i:=1 to m do begin
  23.     for j:=1 to n do Write(a[i,j]); WriteLn;
  24.   end;
  25.   Close(input); Close(output);
  26. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы