Перемножить соответственные элементы двух очередей и организовать третью очередь - Free Pascal
Формулировка задачи:
Имеется файл с натуральными числами, не большими 100. Создать одну очередь однозначных чисел, а вторую очередь двузначных чисел. Перемножить соответственные элементы двух очередей и организовать третью очередь. Результат выведите в текстовый файл.
Решение задачи: «Перемножить соответственные элементы двух очередей и организовать третью очередь»
textual
Листинг программы
{Имеется файл с натуральными числами, не большими 100. Создать одну очередь
однозначных чисел, а вторую очередь двузначных чисел. Перемножить
соответственные элементы двух очередей и организовать треть
ю очередь. Результат выведите в текстовый файл. }
uses
crt;
const
n = 20; //количество элементов в очередях
type
plist=^tlist;
tlist=record
zn:integer;
next:pList;
end;
var
f5,l5,f1,l1,f2,l2,f3,l3,f4,l4:plist; //4 очереди
a,b,i,p:integer;
f,g:text;
procedure Push(var first,last:plist;a:integer);
var
p:plist;
begin
new(p);
p^.zn:=a;
p^.next:=nil;
if (first=nil) then
first:=p
else
last^.next:=p;
last:=p;
end;
function Pop(var first:pList;var a:integer):boolean;
var
p:pList;
begin
if (first=nil) then
begin
pop:=false;
end
else
begin
a:=first^.zn;
p:=first;
first:=first^.next;
dispose(p);
pop:=true;
end;
end;
begin
randomize;
writeln('Исходный файл:');
assign(f,'data_f1.txt');
assign(g,'data_f2.txt');
rewrite(f);
for i:=1 to n do
begin
a:=random(100)+1;
writeln(f,a);
write(a:4)
end;
close(f);
p:=1;
new(l1);
new(l2);
new(l3);
new(l4);
new(l5);
reset(f);
while not eof(f) do
begin
readln(f,a);
if (a>=0) and (a<10) then
begin
push(f1,l1,a);
push(f4,l4,a);
end;
if (a>=10) and (a<100) then
begin
push(f2,l2,a);
push(f5,l5,a);
end;
end;
close(f);
writeln('Элементы 1-й очереди: ');
while (pop(f1,a)=true) do
write(a:4);
writeln;
writeln('Элементы 2-й очереди: ');
while (pop(f2,b)=true) do
write(b:4);
while (pop(f4,a)=true) and (pop(f5,b)=true) do
begin
p:=a*b;
push(f3,l3,p);
end;
writeln;
rewrite(g);
writeln('Элементы 3-й очереди: ');
while (pop(f3,p)=true) do
begin
write(p:4);
writeln(g,p);
end;
close(g);
readln;
end.
Объяснение кода листинга программы
- Создаются 4 очереди (f1, l1, f2, l2, f3, l3, f4, l4) для хранения одно- и двузначных чисел.
- Файл 'data_f1.txt' заполняется случайными числами от 1 до 100.
- Программа заполняет очереди f1 и f4 числами из файла 'data_f1.txt', а очереди f2 и f5 - числами из файла 'data_f2.txt'.
- Числа из очередей f1 и f2 перемножаются и записываются в очередь f3.
- Результат выводится в файл 'data_f3.txt'.