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