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

зы FAQ : Файлы
FAQ : Строки
Ez
nu eto ne forum, eto spisok ssilok....
spasibo!
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.


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