Очереди, проверка на равенство - 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.

Объяснение кода листинга программы

  1. В начале кода объявляется тип данных exo для работы с указателями на запись o.
  2. Затем, с помощью процедуры readO, считывается количество элементов очереди из файла file1.txt и выводится на экран.
  3. Далее, с помощью цикла for и функции write выводятся на экран элементы очереди.
  4. Создается пустая очередь q1 и q2 и заполняется данными из файлов file1.txt и file2.txt соответственно.
  5. Затем, с помощью функции printO, выводятся на экран элементы очереди q1 и q2.
  6. После этого, с помощью функции equals, проверяется равенство двух очередей.
  7. Если очереди равны, то выводится сообщение равны, иначе выводится сообщение Не равны.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.333 из 5
Похожие ответы