Консультация № 160153
11.02.2009, 01:47
0.00 руб.
0 1 1
доброго времени суток, помогите реализовать слудующую задачу: в файле целых чисел хранятся последовательности не нулевых чисел. Ноль- разделитель последовательностей. Преобразовать файл, удалив в каждой последовательности члены между первым и вторым отрицательным числом, если отрицательных чисел меньше двух, последовательность исключить из файла,....,и если можно при выполнении задачи не использовать:goto, break, exit,...,заранее спасибо!

Обсуждение

Неизвестный
11.02.2009, 16:37
общий
это ответ
Здравствуйте, Фирулин Андрей Николаевич!
Вот, набросал. Программа сначала создает файл input.dat (файл целых чисел), заполняет его случайными числами. Итоги работы сохраняются в файле output.dat. Оба файла выводятся на экран во время работы. Если нужно именно ПРЕОБРАЗОВАТЬ файл, т.е. сохранить результаты в исходном файле, можно удалить исходный файл (процедура ERASE) и переименовать (RENAME) итоговый файл в input.dat

Приложение:
uses crt;
const inpFNm = 'input.dat';{ishodnyi file}
outFNm = 'output.dat';{itogovyi file}
maxLen = 1000;{maximalnaya dlina odnoj posledovatelnosti}
var
inpF,outF:file of integer;
tmp,i:integer;
curData : array[1..maxLen] of integer;
curlen:integer; {dlina tekushey posledovatelnosti}
curNegQty:integer; {tekushee kol-vo otricatelnyh chisel}

procedure createFile(fileName:string);
{formiruem ishodniy file i zapoln'aem ego sluchajnymi chislami }
var f:file of integer;
tmp,i:integer;
begin
assign(f,fileName);
rewrite(f);
for i:=1 to 100 do
begin
tmp:=-3+trunc(random*10);
write(f,tmp);
end;
close(f);
end;

procedure printFile(file_name:String);
{vyvod soderzhimogo fila na ekran}
var f:file of integer;
tmp:integer;
begin
assign(f,file_name);
reset(f);
while not eof(f) do
begin
read(f,tmp);
write(tmp);
write(' ');
end;
close(f);
end;

BEGIN
clrscr;
randomize;
createFile(inpFNm);
writeln('ISHODNYI FILE (',inpFNm,'):');
printFile(inpFNm);
assign(inpF,inpFNm);
assign(outF,OutFNm);
reset(inpF);
rewrite(outF);

while not eof(inpF) do
begin
curLen:=0;
curNegQty:=0;
repeat
read(inpF,tmp);
if tmp<>0 then
begin
curLen:=curLen+1;
curData[curLen] :=tmp;
if tmp<0 then curNegQty:=curNegQty+1;
end;
until (tmp=0) or eof(inpF);

if curNegQty>=2 then
begin
curNegQty:=0;
for i:=1 to curLen do
if curData[i]<0 then
begin
curNegQty:=curNegQty+1;
write(outF,curData[i]);
end
else if curNegQty<>1 then write (outF,curData[i]);
tmp:=0;
if not eof(inpF) then write(outF,tmp);
end;
end;
close(inpF);
close(outF);
writeln;
writeln;
writeln('ITOGOVYI FILE (',outFNm,'):');
printFile(outFNm);
readln;
END.
Форма ответа