Задача:
Создать файл из одномерных целочисленных массивов a1,a2,...,a10, заполненных числами от
–50 до 50. Переписать в другой типизированный файл те массивы, у которых сумма элементов >0.
Вот решение задачи:
Uses crt;
const
N=10;
type
TArray=array[1..N] of shortint;{celo4islennye s korotkim diapazonom}
var
Buf:TArray;
F1,F2:file of TArray;
A:string;
procedure FillArray(var A:TArray);
var i:integer;
begin
clrscr;
randomize;
for i:=1 to N do A[i]:=random(101)-50;
end;
procedure PrintArray(A:TArray; Before,After:string);
var i:integer;
begin
writeln(Before);
for i:=1 to N-1 do write(A[i],'; ');
writeln(A[N],'. ',After);
end;
function AskYN(Question:string; defaultYes:boolean):boolean;
var
Answer:string;
begin
repeat
writeln(Question,' (Da/Net):');
if defaultYes then write('[Da]') else writeln('Net');
readln(Answer);
until (Answer='') or (Answer[1] in ['D','d','N','n']);
if Answer=''
then AskYN:=defaultYes
else AskYN:=Answer[1] in ['D','d'];
end;
function Sum(A:TArray):longint;
var i:integer;S:longint;
begin
S:=A[1]; for i:=2 to N do S:=S+A[i];
Sum:=S;
end;
var S:longint;
begin
writeln(' Sozdanie faila file1.dat');
assign(F1,'file1.dat');
rewrite(F1); {otkrivaem fail dlya zapisi}
repeat
FillArray(Buf);
write(F1,Buf);
PrintArray(Buf,'Massiv: ','zapisan v fail file1.dat');
until AskYN('Dobavit esche massiv?',false)=false;
close(F1);
writeln('Perepisyvanie massivov v fail file2.dat');
reset(F1);
assign(F2,'file2.dat');
rewrite(F2);
while not eof(F1) do
begin
read(F1,Buf);
S:=Sum(Buf);
write('Summa ',S,'.');
read;
if S>0 then
begin
write(F2,Buf);
PrintArray(Buf,'Massiv: ','zapisan v fail file2.dat'); readln;
end else
begin
PrintArray(Buf,'Massiv: ','propuschen');readln;
end;
end;
close(F1);
close(F2);
end.
Проблема в том,что она выводит и те массивы сумма которых меньше нуля
,как это исправить? Подскажите,пожалуйста. И еще, по-моему, я тут слишком много лишнего понапихала...