Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 29.05.2014, 15:45   #1 (permalink)
Demon11101995
Member
 
Регистрация: 14.12.2013
Сообщений: 18
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Angry Непонятная ошибка

есть две программы первая создает массив вещественных чисел вводимые с клавиатуры,а другая должна из файла который создался удалить сумму минимальных элементов массива.не могу понять в чем ошибка я как то неправильно открываю файл во второй программе!
ПЕРВАЯ ПРОГРАММА
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.
Demon11101995 вне форума   Ответить с цитированием

Старый 29.05.2014, 15:45
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Эти ссылки могут раскрыть глаза на решение проблемы

Непонятная ошибка
Непонятная ошибка Оперы
Непонятная ошибка
Непонятная иконка

Старый 29.05.2014, 15:59   #2 (permalink)
Demon11101995
Member
 
Регистрация: 14.12.2013
Сообщений: 18
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

А если быть точнее то необходимо мне разделить вот эту прогу на две!чтобы первая создавала массив вещ.чисел вводимых с клавиатуры,а другая прога исключала из фала,суммы элементов которых являются наименьшей.
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.
Demon11101995 вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 21:05.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.