Помощь - Поиск - Пользователи - Календарь
Полная версия: работа с файлами
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Ez
Помогите плз решит задачку!!! rolleyes.gif
значит ест текстовий файл в н строк, в каждой строке:
фамилия имя оценки(например: Первий Вася 2 3 4).
надо создат новий фаил, в котором, в каждой строке, будут:
фамилия имя среднее арифметическоэ оценок(Прим.:Первий Вася 3).
Заранее большое спасибо!!!!!!
klem4
В чем проблема ? Что уже готово ?

зы FAQ : Файлы
FAQ : Строки
Ez
ну ето не форум, ето список ссилок....
спасибо!
smile.gif
Гость
получилос вот что:
Код

program sraf;
type celovek=record
                  fam: string[6];
                 imia: string[2];
              sredaf: real;
                  end;

        var scitat: text;
              novij: zmogus;
           zapisat: file of zmogus;
ocenka, sum, sk: integer;

begin
assign(scitat, 'C:\dannij.txt');
assign(zapisat, 'C:\rezultat.rez');
reset(scitat);
rewrite(zapisat);

while not(eof(scitat))do
begin
     read(scitat, novij.fam);
     sum:=0;
     sk:=0;

while not eoln (scitat) do
     begin
     read(scitat, novij.ocenka);
     sum:=sum+ocenka;
     sk:=sk+1;
     end;
   readln(scitat);
   novij.sredaf:=sum/sk;
with (naujas) do
writeln(novij.fam, ' ',novij.sredaf);
end;

close(scitat);
close(zapisat);

end.



тольк чёт не работает... покажите плз где ошибки?
klem4
привер обработки одной строки :

uses crt;
const s : string = 'Владимир Путин 2 3 3';
var
   i,e,n : integer;
   sr : single;
begin
   i := 1;
   while(not(s[i] in ['2'..'5'])) do begin
      write(s[i]);
      inc(i);
   end;
   sr := 0;
   while(i<=length(s)) do begin
      if s[i] in ['2'..'5'] then begin
         val(s[i],n,e);
         sr := sr + n;
      end;
      inc(i);
   end;
   sr := sr/3;
   writeln(' : ',sr:2:2);
   readln
end.

Гость
спаибо спасибо!
а как теперь сделат, чтоб он резултат(ну среднее арифметическое) в новий фаил записивал?
klem4

reset(f_IN);
rewrite(f_OUT);
while(not(eof(f_IN))) do begin
   readln(f_IN, s)
   // тут делаешь что нужно со строкой;
   writeln(f_OUT, s); // после обработки, записываешь новую строку в другой файл
end;
Гость
ясненько... спасибо....
ага... но если ето(обработку информации) сделат не через массив, а сразу через файл? я вроде пробовала, и вроде обрабативает, но не работает...
Код
while not eoln (scitat) do
     begin
     read(scitat, novij.ocenka);
     sum:=sum+ocenka;
     sk:=sk+1;
     end;
   readln(scitat);
   novij.sredaf:=sum/sk;
klem4
Так.. постойка, ты сказал что у тебя файл тектовый и состоит из строк ... елси у тебя файл типизированный , то все делается гораздо проще !

uses crt;
const n=5;
type
   TRec = record
      name : string;
      maks : array[1..3] of byte;
      sr   : single;
   end;
   TBase = array[1..20] of TRec;
   TFile = file of TBase;

procedure Init(var b : TBase);
var
   i,j : byte;
begin
   for i := 1 to n do
    with b[i] do begin
      writeln('Rec ¹ ',i);
      write('name : '); readln(name);
      sr := 0;
      for j := 1 to 3 do begin
         write('maks ¹ ',j,' : ');
         readln(maks[j]);
         sr := sr + maks[j];
      end;
      sr := sr/3;
    end;
end;
procedure ShowResult(b : TBase);
var
   i : byte;
begin
   for i := 1 to n do
    with b[i] do writeln(name,'  ',sr:3:2);
end;

var
   f_in,f_out : TFile;
   base : TBase;

begin
   clrscr;
   assign(f_in,'f_in.base');
   rewrite(f_in);
   Init(base);
   write(f_in,base);
   reset(f_in);
   assign(f_out,'f_out.base');
   rewrite(f_out);
   read(f_in,base);
   write(f_out,base);
   close(f_in);
   reset(f_out);
   read(f_out, base);
   ShowResult(base);
   close(f_out);
   readln
end.


основная чать такая большая для того чтобы ты показал что все данные записываешь , а потом читаешь из файлов.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.