Сформировать файл из натуральных чисел. Разработать функцию, вычисляющую среднее арифметическое элементов списка, построенного из элементов файла.
CODE
program StackDemo;
uses crt;
const
AFileName = 'file.txt';
type
PIntStack = ^TIntStack;
TIntStack = record
Data: Integer;
Next: PIntStack;
end;
stek= PIntStack;
procedure Init(var AStack: PIntStack);
begin
AStack := nil;
end;
procedure Done(var AStack: PIntStack);
var
P: PIntStack;
begin
while (AStack <> nil) do
begin
P := AStack^.Next;
dispose(AStack);
AStack := P;
end;
end;
procedure Push(AData: Integer;var AStack: PIntStack);
var
P: PIntStack;
begin
P := nil;
New(P);
if (P = nil) then Exit;
P^.Data := AData;
P^.Next := AStack;
AStack := P;
end;
function Pop(var AData: Integer; var AStack: PIntStack): Boolean;
var
P: PIntStack;
begin
if (AStack = nil) then
begin
Pop := False;
Exit;
end;
P := AStack^.Next;
AData := AStack^.Data;
dispose(AStack);
AStack := P;
Pop := True;
end;
var
F: file of integer;
S: PIntStack;
X, Z, Y: Integer; q:real;
begin clrscr;
Assign(F, 'file.txt');
rewrite(F);
WriteLn('vvedite chisla');
repeat
readln(x);
write(F,x);
until x=0;
close(F);
Assign(F, 'file.txt');
Reset(F);
while not Eof(F) do
begin
Read(F, X);
Push(X, S);
end;
Close(F);
Z := 0;
Y := 0;
while Pop(X, S) do
begin
Y := Y + X;
Z := Z + 1;
end;
q := Y/Z;
WriteLn('srednee ar: ', q);
done(s);
readkey;
end.
uses crt;
const
AFileName = 'file.txt';
type
PIntStack = ^TIntStack;
TIntStack = record
Data: Integer;
Next: PIntStack;
end;
stek= PIntStack;
procedure Init(var AStack: PIntStack);
begin
AStack := nil;
end;
procedure Done(var AStack: PIntStack);
var
P: PIntStack;
begin
while (AStack <> nil) do
begin
P := AStack^.Next;
dispose(AStack);
AStack := P;
end;
end;
procedure Push(AData: Integer;var AStack: PIntStack);
var
P: PIntStack;
begin
P := nil;
New(P);
if (P = nil) then Exit;
P^.Data := AData;
P^.Next := AStack;
AStack := P;
end;
function Pop(var AData: Integer; var AStack: PIntStack): Boolean;
var
P: PIntStack;
begin
if (AStack = nil) then
begin
Pop := False;
Exit;
end;
P := AStack^.Next;
AData := AStack^.Data;
dispose(AStack);
AStack := P;
Pop := True;
end;
var
F: file of integer;
S: PIntStack;
X, Z, Y: Integer; q:real;
begin clrscr;
Assign(F, 'file.txt');
rewrite(F);
WriteLn('vvedite chisla');
repeat
readln(x);
write(F,x);
until x=0;
close(F);
Assign(F, 'file.txt');
Reset(F);
while not Eof(F) do
begin
Read(F, X);
Push(X, S);
end;
Close(F);
Z := 0;
Y := 0;
while Pop(X, S) do
begin
Y := Y + X;
Z := Z + 1;
end;
q := Y/Z;
WriteLn('srednee ar: ', q);
done(s);
readkey;
end.
в принципе задача решена, но не доделана... мне нужно заталкать вот это
CODE
Z := 0;
Y := 0;
while Pop(X, S) do
begin
Y := Y + X;
Z := Z + 1;
end;
q := Y/Z;
Y := 0;
while Pop(X, S) do
begin
Y := Y + X;
Z := Z + 1;
end;
q := Y/Z;
в процедуру, т.к. в условии сказано.. и ещё нужно определить конец ввода, т.к. если сделать его =0, то ноль тоже будет вычисляться... помогите плиииз...
Паапрасил бы оформлять посты по-человечески. //Неизвестный Модератор