Помощь - Поиск - Пользователи - Календарь
Полная версия: Компонента
Форум «Всё о Паскале» > 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.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.