Найдите среди трех очередей две одинаковые - Free Pascal

Узнай цену своей работы

Формулировка задачи:

Посмотрите что у меня получилось!)спасибо)
program och;
uses crt;
type
  Tinf=integer;
  List=^TList;
  TList=record
    data:TInf;
    next:List;
  end;
procedure AddElem(var stek1:List;znach1:TInf);
var
  tmp:List;
begin
  GetMem(tmp,sizeof(TList));
  tmp^.next:=stek1;
 
  tmp^.data:=znach1;
  stek1:=tmp;
end;
 function equal(s1,s2,s3:List):boolean;
 begin
 if (s1=nil) or(s2=nil)or(s3=nil) then begin
 equal:=(s1=s2=s3) else
 begin
 while(s1^.next<>nil)and(s2^.next<>nil)and(s3^.next<>nil)and(s1^data=s2^data=s3^data)
 do begin
 s1:=s1^next;s2:=s2^next; s3:=s3^next; end;
 if(s1^next=s2^next)and(s1^data=s2^data ) then
 begin
 writeln('ravny 1 i 2 ochered');
 
 if(s2^next=s3^next)and(s2^data=s3^data ) then
  writeln('ravny 3 i 2 ochered');
 if(s1^next=s3^next)and(s1^data=s3^data ) then
  writeln('ravny 1 i 3 ochered');
end;
 var
 s1:list=nil;
 s1:list=nil ;
 s1:list=nil ;
 
 a,n,n2,n3:longint;

BEGIN
clrscr;
writeln('vvedite kol elementoff v 1 ocheredi');readln(n);
writeln('vvedite kol elementoff v 2 ocheredi');readln(n2);
writeln('vvedite kol elementoff v 3 ocheredi');readln(n3);
for a:=1 to n do
begin
write('s1[a]=');
readln(s1[a]);
end;
for a:=1 to n2 do
begin
write('s2[a]=');
readln(s2[a]);
end;
for a:=1 to n3 do
begin
write('s3[a]=');
readln(s3[a]);
end;
equal(s1,s2,s3);
 
END.

Решение задачи: «Найдите среди трех очередей две одинаковые»

textual
Листинг программы
program och;
uses crt;
type
  Tinf=integer;
  List=^TList;
  TList=record
    data:TInf;
    next:List;
  end;
 
procedure AddElem(var q:List; znach1:TInf);
var
  p, new_item:List;
begin
  new(new_item);
  new_item^.data := znach1;
  new_item^.next := nil;
  if q = nil then q := new_item
  else
  begin
    p := q;
    while p^.next <> nil do p := p^.next;
    p^.next := new_item;
  end;
end;
 
function equals(p, q : list) : boolean;
begin
  if p = q then equals := true
  else if (p = nil) or (q = nil) then equals := false
  else equals := (p^.data = q^.data) and equals(p^.next, q^.next);
end;
 
function equal(s1,s2,s3:List):boolean;
begin
  if equals(s1, s2) then writeln('s1 = s2')
  else if equals(s1, s3) then writeln('s1 = s3')
  else if equals(s2, s3) then writeln('s2 = s3')
  else writeln('none equals');
end;
 
procedure enter(number : integer; var s : List);
var
  n, i : integer;
  item : integer;
begin
  writeln('vvedite kol elementoff v ', number, ' ocheredi'); readln(n);
  for i := 1 to n do
  begin
    write('-> '); readln(item);
    AddElem(s, item);
  end;
 
end;
 
var
 s1:list=nil;
 s2:list=nil;
 s3:list=nil;
 
BEGIN
  clrscr;
  enter(1, s1);
  enter(2, s2);
  enter(3, s3);
  equal(s1,s2,s3);
END.

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

  1. Объявлены типы данных: Tinf - целочисленный тип, List - указатель на запись, TList - запись, содержащая целочисленное значение и указатель на следующую запись в списке.
  2. Создана процедура AddElem, которая добавляет новый элемент в список. Если список пуст, то создается новый элемент и он становится первым в списке. Если список не пуст, то ищется последний элемент списка, и новый элемент добавляется после него.
  3. Создана функция equals, которая проверяет, равны ли два списка. Если один из списков пуст, то функция возвращает false. Если списки содержат одинаковые значения, то функция рекурсивно вызывает себя для проверки следующих элементов списка.
  4. Создана функция equal, которая проверяет, равны ли три списка. Если какой-то из списков равен двум другим, то выводится соответствующее сообщение.
  5. Создана процедура enter, которая запрашивает у пользователя количество вводимых элементов и сами элементы для каждого из трех списков.
  6. В основной части программы создаются три пустых списка s1, s2, s3.
  7. Программа запрашивает у пользователя ввод трех групп элементов, каждая группа состоит из введенного количества элементов.
  8. Затем вызывается функция equal для проверки равенства трех списков.
  9. Если какой-то из списков не равен двум другим, то выводится соответствующее сообщение.

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


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

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

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