Считать массива из файла и записать два файла с чётным и не чётным массивом - PascalABC.NET
Формулировка задачи:
нужно считать с файла массив и записать в 2-а разных файла чётные значения массива , а вдругом не чётные
Решение задачи: «Считать массива из файла и записать два файла с чётным и не чётным массивом»
textual
Листинг программы
var
A1, A2: array[-10000..10001] of integer;
F, F1, F2: text; { файловая переменная }
S,S1,S2: string; { строка }
i: integer;
///Процедура определения целого числа (если слово в файле является
///целым числом, то оно будет выведено на экран)
procedure count(t: string; i2, m: word);
var
p: integer;
v: string;
u: boolean;
begin
u := true;
for p := 1 to m do
if not(S[i2 + p-1] in ['0','1','2','3','4','5','6','7','8','9']) then
begin u := false; break end;
if u then
begin
write(copy(s,i2,m), ' ');
v := copy(s,i2,m);
if v[m] in ['0','2','4','6','8'] then S1 := S1 + v + ' '
else S2 := S2 + v + ' ';
end
end;
///Процедура выделения слова из текста
procedure slovo();
var
j, i1, k: word;
f: boolean;
begin
i1:=0;
k:=0;
f := false;
for j := 1 to length(s) do
begin
if (ord(s[j]) <> 32) then
begin
inc(k);
if f = false then
begin
f := true;
i1 := j;
end
end
else
if f then
begin
f := false;
count(copy(s,i1,k), i1, k);
k := 0;
end
end
end;
begin
S1 := ''; //сначала в файле с четными
S2 := ''; //и нечетными числами ничего нет.
{ Внимание: текстовый файл лолжен находится
по адресу "D:\мой_текстовый_файл.txt" }
Assign(F, 'D:\мой_текстовый_файл.txt'); { назначаем собственное имя }
Reset(F); { открываем файл для чтения }
Assign(F1, 'D:\четный_массив.txt'); { назначаем имя файла для записи}
Rewrite(F1); { открываем файл для записи }
Assign(F2, 'D:\нечетный_массив.txt'); { назначаем имя файла для записи}
Rewrite(F2); { открываем файл для записи }
writeln('Массив целых чисел из файла:');
writeln;
repeat
if Eof(F) then Break; { прекратить, если конец файла }
Readln(F, S); { прочитать строку из файла }
slovo(); //вызываем процедуру по отделению слов из текста
until false;
{ Производим запись в файл: }
for i := 1 to Length(S1) do
Write(F1, s1[i]); {записываем текст в файл 'D:\четный_массив.txt'}
for i := 1 to Length(S2) do
Write(F2, s2[i]); {записываем текст в файл 'D:\нечетный_массив.txt'}
Close(F); { закрываем файл с начальным массивом }
Close(F1); { закрываем файл с массивом четных чисел }
Close(F2); { закрываем файл с массивом нечетных чисел }
writeln;
writeln;
writeln('Результат посмотрите в директориях:');
writeln;
writeln(' Массив четных чисел - "D:\четный_массив.txt"');
writeln(' Массив нечетных чисел - "D:\нечетный_массив.txt"');
end.
Объяснение кода листинга программы
- Переменные A1, A2, F, F1, F2, S, S1, S2 и i объявлены для выполнения задачи.
- Процедура count определяет целое число в строке. Она проверяет каждый символ в строке, начиная с i2 и до m, и если он не является числом, то переменная u устанавливается в false. Если все символы являются числами, то переменная u устанавливается в true и число выводится на экран.
- Процедура slovo выделяет слово из текста. Она начинает с i1 = 0 и k = 0. Если текущий символ не является пробелом, то k увеличивается и если f = false, то устанавливается f = true и i1 запоминает позицию первого символа слова. Если текущий символ является пробелом, то f устанавливается в false и вызывается процедура count для выделения слова.
- В основной части кода открываются файлы F, F1 и F2 для чтения и записи соответственно.
- Чтение и запись массива осуществляется в цикле while, который продолжается до тех пор, пока не достигнет конца файла.
- После чтения строки из файла вызывается процедура slovo для выделения слов из строки.
- После окончания цикла, файлы F, F1 и F2 закрываются.
- В цикле перед выводом результатов на экран указываются пути к файлам с четными и нечетными числами.
- Результат выводится на экран, указывая пути к файлам с четными и нечетными числами.