Исключить из файла массивы, сумма элементов которых является наименьшей - Turbo Pascal (29690)

Узнай цену своей работы

Формулировка задачи:

Задание состояло в том, чтобы создать файл с массивами из вещественных чисел. Это получилось, как ни странно.
Листинг программы
  1. program abc;
  2. const nmax=3;
  3. type tmas=array[1..nmax] of real;
  4. var
  5. x:tmas;
  6. f:file of tmas;
  7. i,j,n,q:integer;
  8. Begin
  9. q:=1;
  10. Assign(f,'a.dat');
  11. rewrite(f);
  12. writeln('введите количество массивов,n=');
  13. readln(n);
  14. writeln('элементов в массивах=',nmax);
  15. writeln;
  16. for i:=1 to n do
  17. begin
  18. writeln('введите данные массива-',q );
  19. for j:=1 to nmax do
  20. readln(x[j]);
  21. write(f,x);
  22. q:=q+1;
  23. end;
  24. write('Файл создан');
  25. close(f);
  26. end.
Далее нужно было составить программу, которая показывает непосредственно сами введенные элементы. Это тоже получилось
Листинг программы
  1. program abc2;
  2. const nmax=3;
  3. type tmas=array[1..nmax] of real;
  4. var
  5. f:file of tmas;
  6. x:tmas;
  7. begin
  8. assign(f,'a.dat');
  9. reset(f);
  10. writeln('cодержание исходного файла');
  11. while not eof(f) do
  12. Begin
  13. read(f,x);
  14. write(x,'');
  15. end;
  16. close(f);
  17. end.
Вот только никак не пойму, как исключить из файла массивы, сумма элементов которых является наименьшей. Плиз хелп,гуру Паскаля

Решение задачи: «Исключить из файла массивы, сумма элементов которых является наименьшей»

textual
Листинг программы
  1. uses crt;
  2. const nmax=3;
  3. type tmas=array[1..nmax] of real;
  4.      fail=file of tmas;
  5. function Summa(k:tmas;x:integer):real;
  6. var i:integer;
  7.     s:real;
  8. begin
  9. s:=0;
  10. for i:=1 to x do
  11. s:=s+k[i];
  12. Summa:=s;
  13. end;
  14. var f:fail;
  15.     a,b:tmas;
  16.     m,n,i,j:byte;
  17.     mn,sm:real;
  18. begin
  19. assign(f,'a.dat');
  20. reset(f);
  21. writeln ('Содержание исходного файла F:');
  22.  
  23. WHILE NOT EOF(f)do
  24. begin
  25. read(f,a);
  26. mn:=Summa(a,n);
  27. for i:=1 to n do
  28. write(a[i]:5:2);
  29. write('  Сумма=',mn:0:2);
  30. end;
  31. writeln;
  32. while not eof(f) do
  33.  begin
  34.   read(f,a);
  35.   for i:=1 to n do
  36.   write(a[i]:5:2);
  37.   write('  Сумма=',Summa(a,n):0:2);
  38.   if Summa(a,n)<mn then mn:=Summa(a,n);
  39.   writeln;
  40.  end;
  41. writeln;
  42. writeln('Минимальная сумма=',mn:0:2);
  43.  
  44. i:=0;
  45. while i<filesize(f) do
  46.  begin
  47.   seek(f,i);
  48.   read(f,a);
  49.   if Summa(a,n)= mn then
  50.    begin
  51.     if i=filesize(f)-1 then
  52.      begin
  53.       seek(f,filesize(f)-1);
  54.       truncate(f);
  55.      end
  56.     else
  57.      begin
  58.       for j:=i to filesize(f)-2 do
  59.        begin
  60.         seek(f,j+1);
  61.         read(f,b);
  62.         seek(f,j);
  63.         write(f,b);
  64.        end;
  65.       seek(f,filesize(f)-1);
  66.       truncate(f);
  67.      end;
  68.    end
  69.   else i:=i+1;
  70.  end;
  71. if filesize(f)=0 then write('Все компоненты удалены')
  72. else
  73.  begin
  74.   writeln('Удаление компонент с минимальной суммой:');
  75.   seek(f,0);
  76.   while not eof(f) do
  77.    begin
  78.     read(f,a);
  79.     for i:=1 to n do
  80.     write(a[i]:5:2);
  81.     write('  Сумма=',Summa(a,n):0:2);
  82.     writeln;
  83.    end;
  84.  end;
  85. close(f);
  86. readln
  87. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы