Исключить из файла массивы, сумма элементов которых является наименьшей - 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.

Объяснение кода листинга программы

  1. Создаётся объект типа fail, который представляет собой файл.
  2. Задаются константы: nmax - максимальное количество элементов в массиве, f - имя файла, в котором будут обрабатываться данные.
  3. Определяются функции: Summa - принимает два аргумента: массив и количество элементов в нем, и возвращает сумму элементов этого массива.
  4. Объявляются переменные: a, b, m, n, i, j, mn, sm - они будут использоваться для чтения и записи данных в файл.
  5. Открывается файл с помощью функции assign и reset.
  6. Выводится информация о содержимом исходного файла.
  7. Запускается цикл, в котором происходит чтение данных из файла и запись их в переменную a.
  8. Вычисляется сумма элементов массива a с помощью функции Summa.
  9. Если сумма текущего массива меньше текущей минимальной суммы, то обновляется значение минимальной суммы.
  10. Проверяется, если текущая сумма равна минимальной сумме, то удаляются все предыдущие строки в файле до этой строки.
  11. Если количество строк в файле равно 0, то выводится сообщение о том, что все компоненты были удалены.
  12. Иначе, выводится сообщение о том, что удаляются только компоненты с минимальной суммой.
  13. Восстанавливается позиция чтения файла в начало.
  14. Закрывается файл с помощью функции close.
  15. Выводится сообщение о завершении работы программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.9 из 5
Похожие ответы