Исключить из файла массивы, сумма элементов которых является наименьшей - Turbo Pascal (29690)
Формулировка задачи:
Задание состояло в том, чтобы создать файл с массивами из вещественных чисел. Это получилось, как ни странно.
Далее нужно было составить программу, которая показывает непосредственно сами введенные элементы. Это тоже получилось
Вот только никак не пойму, как исключить из файла массивы, сумма элементов которых является наименьшей. Плиз хелп,гуру Паскаля
Листинг программы
- program abc;
- const nmax=3;
- type tmas=array[1..nmax] of real;
- var
- x:tmas;
- f:file of tmas;
- i,j,n,q:integer;
- Begin
- q:=1;
- Assign(f,'a.dat');
- rewrite(f);
- writeln('введите количество массивов,n=');
- readln(n);
- writeln('элементов в массивах=',nmax);
- writeln;
- for i:=1 to n do
- begin
- writeln('введите данные массива-',q );
- for j:=1 to nmax do
- readln(x[j]);
- write(f,x);
- q:=q+1;
- end;
- write('Файл создан');
- close(f);
- end.
Листинг программы
- program abc2;
- const nmax=3;
- type tmas=array[1..nmax] of real;
- var
- f:file of tmas;
- x:tmas;
- begin
- assign(f,'a.dat');
- reset(f);
- writeln('cодержание исходного файла');
- while not eof(f) do
- Begin
- read(f,x);
- write(x,'');
- end;
- close(f);
- end.
Решение задачи: «Исключить из файла массивы, сумма элементов которых является наименьшей»
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
. - Выводится сообщение о завершении работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д