Сортировка содержимого файла - Pascal ABC
Формулировка задачи:
Помогите с заданием
1 Входной файл f1 содержит данные сосотоящие из целых и строковых чисел
2 Эти данные записаны в столбец
3 Строчные данные содержат любые символы, без пробелов
4 Выходной файл f2 должен быть результат отсортированным по возрастанию
5 Методом Сортировки вставки
6 Входной файл f1 содержит символов не более 50
Пример
f1.txt
58
5
u
1
9
f2.txt
1
5
9
58
u
Решение задачи: «Сортировка содержимого файла»
textual
Листинг программы
- const max=50;
- var a:array[1..max] of integer;//массив строк-чисел
- s:array[1..50] of string; //массив прочих строк
- n,m,i,j,x:integer;
- y:string;
- f:text;
- begin
- assign(f,'input.txt');//файл в папке с программой
- reset(f);
- n:=0;
- m:=0;
- while not seekeof(f) do
- begin
- readln(f,y);
- val(y,x,i);
- if i=0 then
- begin
- n:=n+1;
- a[n]:=strtoint(y)
- end
- else
- begin
- m:=m+1;
- s[m]:=y;
- end;
- end;
- close(f);
- //сортируем числа
- for i:=2 to n do
- begin
- x:=a[i];
- j:=i-1;
- while (j>=1) and (a[j]>x) do
- begin
- a[j+1]:=a[j];
- j:=j-1;
- end;
- a[j+1]:=x;
- end;
- //сортируем строки
- for i:=2 to m do
- begin
- y:=s[i];
- j:=i-1;
- while (j>=1) and (s[j]>y) do
- begin
- s[j+1]:=s[j];
- j:=j-1;
- end;
- s[j+1]:=y;
- end;
- //записываем в новый файл
- assign(f,'output.txt');
- rewrite(f);
- for i:=1 to n do
- writeln(f,a[i]);
- for i:=1 to m do
- writeln(f,s[i]);
- close(f);
- writeln('Файл input.txt прочитан, отсортирован, результат записан в файл output.txt')
- end.
Объяснение кода листинга программы
- Создается переменная
max
со значением 50, которая будет использоваться для определения размера массива. - Создается два массива:
a
иs
. Массивa
предназначен для хранения чисел, а массивs
- для хранения строк. Оба массива имеют размер 50 элементов. - Создаются три переменные:
n
,m
,i
,j
,x
. Переменнаяn
будет использоваться для отслеживания количества чисел в массивеa
, а переменнаяm
- для отслеживания количества строк в массивеs
. Переменныеi
,j
иx
будут использоваться для работы с числами и строками соответственно. - Открывается файл
input.txt
с помощью функцииassign
и устанавливается режим чтения с помощью функцииreset
. - Запускается цикл
while
до тех пор, пока не будет достигнут конец файла с помощью функцииseekeof
. Внутри цикла считывается строка из файла с помощью функцииreadln
и присваивается переменнойy
. - Проверяется, является ли строка пустой. Если да, то увеличивается значение переменной
n
на единицу и присваивается элементу массиваa
значение строки, прочитанной из файла, с помощью функцииstrtoint
. - Если строка не является пустой, то увеличивается значение переменной
m
на единицу и присваивается элементу массиваs
значение строки, прочитанной из файла. - После завершения цикла
while
закрывается файл с помощью функцииclose
. - Запускается цикл
for
для сортировки чисел в массивеa
. Внутри цикла сравниваются два элемента массиваa
. Если второй элемент больше первого, то они меняются местами с помощью функцийa[j+1]:=a[j]
иa[j]:=x
. - Запускается цикл
for
для сортировки строк в массивеs
. Внутри цикла сравниваются два элемента массиваs
. Если второй элемент больше первого, то они меняются местами с помощью функцийs[j+1]:=s[j]
иs[j]:=y
. - Создается новый файл
output.txt
с помощью функцииassign
и устанавливается режим записи с помощью функцииrewrite
. - Запускается цикл
for
для записи чисел из массиваa
в новый файл. Каждый элемент массиваa
записывается в файл с помощью функцииwriteln
. - Запускается цикл
for
для записи строк из массиваs
в новый файл. Каждый элемент массиваs
записывается в файл с помощью функцииwriteln
. - Закрывается файл с помощью функции
close
. - Выводится сообщение о завершении работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д