Очереди, проверка на равенство - Free Pascal
Формулировка задачи:
Проверить на равенство две очереди
uses crt; type exo = ^ o; o = record data: string; next: exo; end; var f1,f2: text; n,m,i: integer; s,k: string; b1,b2,e1,e2: exo; procedure writeO(var b,e: exo; d: string); var u: exo; begin new(u); u^.data:=d; u^.next:=nil; if b=nil then b:=u else e^.next:=u; e:=u; end; procedure printO(u: exo); begin write('Очередь:'); while u<>nil do begin write(u^.data:5); u:=u^.next; end; writeln; end; procedure izm(var u1,u2: exo); var t: boolean; begin t:=false; while u1<>nil do begin if u1^.data<>u2^.data then t:=true; u1:=u1^.next; u2:=u2^.next; end; if t=true then writeln('Ответ: неравны') else writeln('Ответ: равны'); end; Begin clrscr; Assign(f1,'file1.txt'); Assign(f2,'file2.txt'); repeat write('(Кол-во эл. очереди) n = '); readln(n); until (n>1); rewrite(f1); writeln('Очередь 1:'); for i:=1 to n do begin write(i:3,' элемент: '); readln(k); writeln(f1,k); end; repeat write('(Кол-во эл. очереди) m = '); readln(m); until (m>1); rewrite(f2); writeln('Очередь 2:'); for i:=1 to m do begin write(i:3,' Элемент: '); readln(k); writeln(f2,k); end; reset(f1); While not eof (f1) do Begin readln(f1,s); writeO(b1,e1,s); End; Close(f1); reset(f2); While not eof (f2) do Begin readln(f2,s); writeO(b2,e2,s); End; Close(f2); printO(b1); printO(b2); if n<>m then writeln('Неравны') else izm(b1,b2); readkey; end.
задача работает,но нет ограничения на видимые числа.нужно чтобы очередь формировалась только до 20 элементов,
и если возможно сделать более простой код
Решение задачи: «Очереди, проверка на равенство»
textual
Листинг программы
uses crt; type exo = ^ o; o = record data: string; next: exo; end; procedure readO(var f : text; title : string); var i, n : integer; s : string; begin repeat write('(Кол-во эл. очереди) n = '); readln(n); until (n>1) and (n < 21); rewrite(f); writeln('Очередь ' + title + ':'); for i:=1 to n do begin write(i:3,' элемент: '); readln(s); writeln(f, s); end; reset(f); end; procedure createQ(var q : exo; var f : text); var s : string; p, last : exo; begin q := nil; last := nil; while not eof(f) do begin readln(f, s); new(p); p^.next := nil; p^.data := s; if q = nil then q := p else last^.next := p; last := p; end; close(f); end; procedure printO(u: exo); begin write('Очередь:'); while u<>nil do begin write(u^.data:5); u:=u^.next; end; writeln; end; function equals(p, q : exo) : boolean; begin equals := true; while equals and (p <> nil) and (q <> nil) do if p^.data <> q^.data then equals := false else begin p := p^.next; q := q^.next; end; equals := equals and (p = nil) and (q = nil); end; var f1,f2: text; q1, q2 : exo; Begin clrscr; Assign(f1,'file1.txt'); Assign(f2,'file2.txt'); readO(f1, '1'); readO(f2, '2'); createQ(q1, f1); createQ(q2, f2); printO(q1); printO(q2); if equals(q1, q2) then writeln('равны') else writeln('Не равны'); readln; end.
Объяснение кода листинга программы
- В начале кода объявляется тип данных
exo
для работы с указателями на записьo
. - Затем, с помощью процедуры
readO
, считывается количество элементов очереди из файлаfile1.txt
и выводится на экран. - Далее, с помощью цикла
for
и функцииwrite
выводятся на экран элементы очереди. - Создается пустая очередь
q1
иq2
и заполняется данными из файловfile1.txt
иfile2.txt
соответственно. - Затем, с помощью функции
printO
, выводятся на экран элементы очередиq1
иq2
. - После этого, с помощью функции
equals
, проверяется равенство двух очередей. - Если очереди равны, то выводится сообщение
равны
, иначе выводится сообщениеНе равны
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д