uses crt,mod2;
const max = 6;
var f:file of rational;
I,m:1..max;
r:rational;
begin
clrscr;
randomize;
m:=random(max);
assign(f,'t.txt');
rewrite(f);
writeln('В файле:');
for i:=1 to m do
begin
r_rand(r);
r_write(r);
writeln;
write(f,r);
end;
close(f);
readln;
end.
Сумма, количество и среднее рациональных чисел в типизированном файле(Pascal)
Дополнительная программа, создающая файл с рациональными числами:
Код:
Процедуры из mod2:
Код:
procedure r_rand(var r:rational);
var a,b:integer;
begin
a:=Random(50);
b:=Random(50);
r.chisl:=a;
r.znam:=b;
end;
procedure r_write (r:rational);
begin
write (r.chisl,'/', r.znam);
end;
var a,b:integer;
begin
a:=Random(50);
b:=Random(50);
r.chisl:=a;
r.znam:=b;
end;
procedure r_write (r:rational);
begin
write (r.chisl,'/', r.znam);
end;
Начало программы примерно такое:
Код:
uses crt;
const max = 24;
var f:file of integer;
I,m:1..max;
x:integer;
name_of_file:string;
begin
clrscr;
writeln('‚Введите имя файла');
readln(name_of_file);
assign(f,name_of_file);
{$I-}
reset(f);
{$I+}
if IOResult<>0 then
writeln('Файл ',Name_of_file, ' не найден')
else
begin
writeln('„ Данные из файла',name_of_file,':');
while not eof(f) do
begin
...
const max = 24;
var f:file of integer;
I,m:1..max;
x:integer;
name_of_file:string;
begin
clrscr;
writeln('‚Введите имя файла');
readln(name_of_file);
assign(f,name_of_file);
{$I-}
reset(f);
{$I+}
if IOResult<>0 then
writeln('Файл ',Name_of_file, ' не найден')
else
begin
writeln('„ Данные из файла',name_of_file,':');
while not eof(f) do
begin
...
А что за тип Rational?
chisl: integer;
znam: 1..maxint;
Код:
var f:file of rational;
n:integer;
sum,r:rational;
ch,z:integer;
procedure reduce(var r:Rational);
var a,b:ineteger;
begin
a:=r.chisl;
b:=r.znam;
while a<>b do
begin
if a>b then
a:=a-b
else
b:=b-a;
end;
r.chisl:=r.chisl/a;
r.znam:=r.znam/a;
end;
begin
sum.chisl:=0;
sum.znam:=1;
clrscr;
writeln('‚Введите имя файла');
readln(name_of_file);
assign(f,name_of_file);
{$I-}
reset(f);
{$I+}
if IOResult<>0 then
begin
writeln('Файл ',Name_of_file, ' не найден');
halt;
end
else
begin
writeln('„ Данные из файла',name_of_file,':');
while not eof(f) do
begin
read(f,r);
z:=r.znam*sum.znam;
ch:=r.chisl*sum.znam+r.znam*sum.chisl;
sum.znam:=z;sum.chisl:=ch;
reduce(sum);
inc(n);
end;
writeln('кол-во:',n);
writeln('сумма:',sum.chisl,'/',s.znam);
sum.znam:=sum.znam*n;
reduce(sum);
writeln('среднее:',sum.chisl,'/',s.znam);
end.
n:integer;
sum,r:rational;
ch,z:integer;
procedure reduce(var r:Rational);
var a,b:ineteger;
begin
a:=r.chisl;
b:=r.znam;
while a<>b do
begin
if a>b then
a:=a-b
else
b:=b-a;
end;
r.chisl:=r.chisl/a;
r.znam:=r.znam/a;
end;
begin
sum.chisl:=0;
sum.znam:=1;
clrscr;
writeln('‚Введите имя файла');
readln(name_of_file);
assign(f,name_of_file);
{$I-}
reset(f);
{$I+}
if IOResult<>0 then
begin
writeln('Файл ',Name_of_file, ' не найден');
halt;
end
else
begin
writeln('„ Данные из файла',name_of_file,':');
while not eof(f) do
begin
read(f,r);
z:=r.znam*sum.znam;
ch:=r.chisl*sum.znam+r.znam*sum.chisl;
sum.znam:=z;sum.chisl:=ch;
reduce(sum);
inc(n);
end;
writeln('кол-во:',n);
writeln('сумма:',sum.chisl,'/',s.znam);
sum.znam:=sum.znam*n;
reduce(sum);
writeln('среднее:',sum.chisl,'/',s.znam);
end.
Примерно так... Сам не отлаживал, так что...