Помощь - Поиск - Пользователи - Календарь
Полная версия: Компонента
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Анна
Нужна помошь. Задание:
Код
Создать компонентный файл компонентами которого являются действительные числа.
Найти сумму компонент файла и сумму абсолютных значений.
В качестве результата  вывести на экран имя файла и полученные суммы.


Altair помог! Спасибо! give_rose.gif Но ещё вопрос. В этой программе все вводимые числа сразу же записываются файл и прям на месте же и считаются, а нужно -- создать файл, записать туда все данные, закрыть его, а потом открыть и сосчитать уже из файла.


Вот как было:

var
f:file of real;
t,summ,summabs:real;
s:string;
i,n:integer;
begin
summ:=0; summabs:=0;
write('Enter file name: ' ); readln(s);
write('N='); readln(N);
assign(f,s);
rewrite(f);
for i:=1 to n do begin
write('= '); readln(t);
write(f,t);
summ:=summ+t;
summabs:=summabs+abs(t);
end;
close(f);
writeln('summ=',summ:0:2,' abs summ=',summabs:0:2,' filename=',s);
readln;
end.



А вот исправленный вариант:
var
f:file of real;
t,summ,summabs:real;
s:string;
i,n:integer;
begin
summ:=0; summabs:=0;
write('Enter file name: ' ); readln(s);
write('N='); readln(N);
assign(f,s);
rewrite(f);

for i:=1 to n do begin
write('= '); readln(t);
write(f,t);
end; close(f);

begin
reset(f);
for i:=1 to length(s) do
read(f,t);
summ:=summ+t;
summabs:=summabs+abs(t);
end;

writeln('summ=',summ:0:2,' abs summ=',summabs:0:2,' filename=',s);
readln;
close (f);
end.
klem4

assign(f, s);
reset(f); // открываем для чтения
while(not(eof(f))) do begin // пока не достигнут конец файла
read(f, t);
//делаем с t что угодно ...
end;

close(f);
volvo
Анна, если файл открыт для записи, его совершенно не обязательно закрывать, чтобы открыть для чтения. Можно сразу после окончания записи сделать Reset(f) и файл будет ПЕРЕоткрыт для чтения, при этом гарантируется, что потерь данных не будет...
Анна
Я понимаю, задача бужет выглядеть след. образом:


var
f:file of real;
t,summ,summabs:real;
s:string;
i,n:integer;
begin
summ:=0; summabs:=0;
write('Enter file name: ' ); readln(s);
write('N='); readln(N);
assign(f,s);
rewrite(f);

for i:=1 to n do begin
write('= '); readln(t);
write(f,t);
end; close(f);

begin
assign(f,s);
reset(f);
while(not(eof(f))) do begin
read(f,t);
summ:=summ+t;
summabs:=summabs+abs(t);
end;

writeln('summ=',summ:0:2,' abs summ=',summabs:0:2,' filename=',s);
readln;
close (f);
end.
klem4
Что-то у тебя с begin-ами нелады smile.gif)

uses crt;

var
f : file of real;
r, sum, sumAbs : real;
n ,i : byte;
s : string;

begin
clrscr;

s := 'c:\real.rl';

write('n='); readln(n);

assign(f,s);

rewrite(f);

for i := 1 to n do begin
readln( r);
write(f, r);
end;

sum := 0;
sumAbs := 0;

reset(f);

while(not(eof(f))) do begin
read(f, r);
sum := sum + r;
sumAbs := sumAbs + abs( r);
end;

writeln('sum = ', sum:3:3);
writeln('sumAbs = ', sumAbs:3:3);

close(f);

readln;
end.
Анна
Вопрос:
Можно
while(not(eof(f))) do begin
заменить на
for i:=1 to length(s) do
klem4
А причем здесь вообще S ? - этоже имя файла ... while(not(eof(f))) - ты будешь читать из файла значения до тех пор пока они на закончатся, а точнее пока не будет достигнут конец файла f ... EOF - End Of File.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.