Отсортировать строки фамилия-номер по убыванию номеров - 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д