Непонятная ошибка
есть две программы первая создает массив вещественных чисел вводимые с клавиатуры,а другая должна из файла который создался удалить сумму минимальных элементов массива.не могу понять в чем ошибка я как то неправильно открываю файл во второй программе!
ПЕРВАЯ ПРОГРАММА uses crt; const nmax=10; type mas=array[1..nmax] of real; fail=file of mas; function Summa(k:mas;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:mas; m,n,i,j:byte; mn:real; begin clrscr; assign(f,'filef'); rewrite(f); repeat write('Количество компонент в файле до ',nmax,' m='); readln(m); until m in [1..nmax]; repeat write('Размер компонент до ',nmax,' n='); readln(n); until n in [1..nmax]; for i:=1 to m do begin writeln('Введите элементы компоненты ',i); for j:=1 to n do begin write('el[',j,']='); readln(a[j]); end; write(f,a); end; writeln('Содержание исходного файла F:'); {открываем} reset(f); read(f,a);{читаем первую компоненту-массив} mn:=Summa(a,n);{пока эта сумма минимальная} for i:=1 to n do write(a[i]:5:2); write(' Сумма=',mn:0:2); 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); readkey; i:=0; while i<filesize(f) do end. ВТОРАЯ ПРОГРАММА uses crt; const nmax=10; type mas=array[1..nmax] of real; fail=file of mas; function Summa(k:mas;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:mas; m,n,i,j:byte; mn,sm:real; begin clrscr; assign(f,'filef'); rewrite(f); writeln('Содержание исходного файла F:'); {открываем} reset(f); read(f,a);{читаем первую компоненту-массив} mn:=Summa(a,n);{пока эта сумма минимальная} for i:=1 to n do write(a[i]:5:2); write(' Сумма=',mn:0:2); 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); readkey; {задержка до нажатия клавиши для просмотра} {начнем удалять} 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{сдвигаем конец файла на 1 вверх} 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.tehno036 |
А если быть точнее то необходимо мне разделить вот эту прогу на две!чтобы первая создавала массив вещ.чисел вводимых с клавиатуры,а другая прога исключала из фала,суммы элементов которых являются наименьшей.
uses crt; const nmax=10; type mas=array[1..nmax] of real; fail=file of mas; function Summa(k:mas;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:mas; m,n,i,j:byte; mn,sm:real; begin clrscr; assign(f,'filef'); rewrite(f); repeat write('Количество компонент в файле до ',nmax,' m='); readln(m); until m in [1..nmax]; repeat write('Размер компонент до ',nmax,' n='); readln(n); until n in [1..nmax]; for i:=1 to m do begin writeln('Введите элементы компоненты ',i); for j:=1 to n do begin write('el[',j,']='); readln(a[j]); end; write(f,a); end; writeln('Содержание исходного файла F:'); {открываем} reset(f); read(f,a);{читаем первую компоненту-массив} mn:=Summa(a,n);{пока эта сумма минимальная} for i:=1 to n do write(a[i]:5:2); write(' Сумма=',mn:0:2); 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); readkey; {задержка до нажатия клавиши для просмотра} {начнем удалять} 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{сдвигаем конец файла на 1 вверх} 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. |
Часовой пояс GMT +4, время: 20:27. |
Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.