Отсортировать строки фамилия-номер по убыванию номеров - Free Pascal
Формулировка задачи:
Здравствуйте.
Задача состоит в доделывании данной проги
Надо прочитать список 10 фамилий и моб. номеров к ним, отсортировать строки фамилия-номер по убыванию номеров
и вывести в другой файл.
Буду благодарен за обьяснение и готовую прогу.
Спойлер с входными данными не делаю, потому что пробелы стираются
Символ, с которого начинается номер - 16
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.
Решение задачи: «Отсортировать строки фамилия-номер по убыванию номеров»
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.
Объяснение кода листинга программы
- Объявлены константы m=10, n=24, p=16 и переменные i, j, k типа Integer и t, a типа Char.
- Заполняется массив a символами ' '.
- Открываются файлы input и output для чтения и записи соответственно.
- В цикле while с условием not EoF и (i<m) происходит чтение строк из файла input по одному символу в массив a.
- В цикле for i:=m downto 2 выполняется перестановка строк в массиве a, начиная с i=m и заканчивая i=2.
- В цикле for j:=2 to i происходит поиск номера строки, которую нужно поменять местами с предыдущей.
- Если найденная строка с меньшим номером имеет больший символ в последней позиции, то происходит перестановка строк в массиве a, начиная с k=1 и заканчивая k=n.
- В цикле for i:=1 to m выполняется запись строк из массива a в файл output.
- Закрываются файлы input и output.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д