Нужна помошь. Задание:
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.
assign(f, s);
reset(f); // открываем для чтения
while(not(eof(f))) do begin // пока не достигнут конец файла
read(f, t);
//делаем с t что угодно ...
end;
close(f);
Анна, если файл открыт для записи, его совершенно не обязательно закрывать, чтобы открыть для чтения. Можно сразу после окончания записи сделать 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.
Что-то у тебя с begin-ами нелады )
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
А причем здесь вообще S ? - этоже имя файла ... while(not(eof(f))) - ты будешь читать из файла значения до тех пор пока они на закончатся, а точнее пока не будет достигнут конец файла f ... EOF - End Of File.