Сортировка содержимого файла - 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. - Выводится сообщение о завершении работы программы.