Исключить из файла массивы, сумма элементов которых является наименьшей - Turbo Pascal (29690)
Формулировка задачи:
Задание состояло в том, чтобы создать файл с массивами из вещественных чисел. Это получилось, как ни странно.
Далее нужно было составить программу, которая показывает непосредственно сами введенные элементы. Это тоже получилось
Вот только никак не пойму, как исключить из файла массивы, сумма элементов которых является наименьшей. Плиз хелп,гуру Паскаля
Решение задачи: «Исключить из файла массивы, сумма элементов которых является наименьшей»
textual
Листинг программы
uses crt; const nmax=3; type tmas=array[1..nmax] of real; fail=file of tmas; function Summa(k:tmas;x:integer):real; var i:integer; s:real; begin s:=0; for i:=1 to x do s:=s+k[i]; Summa:=s; end; var f:fail; a,b:tmas; m,n,i,j:byte; mn,sm:real; begin assign(f,'a.dat'); reset(f); writeln ('Содержание исходного файла F:'); WHILE NOT EOF(f)do begin read(f,a); mn:=Summa(a,n); for i:=1 to n do write(a[i]:5:2); write(' Сумма=',mn:0:2); end; writeln; while not eof(f) do begin read(f,a); for i:=1 to n do write(a[i]:5:2); write(' Сумма=',Summa(a,n):0:2); if Summa(a,n)<mn then mn:=Summa(a,n); writeln; end; writeln; writeln('Минимальная сумма=',mn:0:2); i:=0; while i<filesize(f) do begin seek(f,i); read(f,a); if Summa(a,n)= mn then begin if i=filesize(f)-1 then begin seek(f,filesize(f)-1); truncate(f); end else begin for j:=i to filesize(f)-2 do begin seek(f,j+1); read(f,b); seek(f,j); write(f,b); end; seek(f,filesize(f)-1); truncate(f); end; end else i:=i+1; end; if filesize(f)=0 then write('Все компоненты удалены') else begin writeln('Удаление компонент с минимальной суммой:'); seek(f,0); while not eof(f) do begin read(f,a); for i:=1 to n do write(a[i]:5:2); write(' Сумма=',Summa(a,n):0:2); writeln; end; end; close(f); readln end.
Объяснение кода листинга программы
- Создаётся объект типа
fail
, который представляет собой файл. - Задаются константы:
nmax
- максимальное количество элементов в массиве,f
- имя файла, в котором будут обрабатываться данные. - Определяются функции:
Summa
- принимает два аргумента: массив и количество элементов в нем, и возвращает сумму элементов этого массива. - Объявляются переменные:
a
,b
,m
,n
,i
,j
,mn
,sm
- они будут использоваться для чтения и записи данных в файл. - Открывается файл с помощью функции
assign
иreset
. - Выводится информация о содержимом исходного файла.
- Запускается цикл, в котором происходит чтение данных из файла и запись их в переменную
a
. - Вычисляется сумма элементов массива
a
с помощью функцииSumma
. - Если сумма текущего массива меньше текущей минимальной суммы, то обновляется значение минимальной суммы.
- Проверяется, если текущая сумма равна минимальной сумме, то удаляются все предыдущие строки в файле до этой строки.
- Если количество строк в файле равно 0, то выводится сообщение о том, что все компоненты были удалены.
- Иначе, выводится сообщение о том, что удаляются только компоненты с минимальной суммой.
- Восстанавливается позиция чтения файла в начало.
- Закрывается файл с помощью функции
close
. - Выводится сообщение о завершении работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д