Выяснить, есть ли одинаковые числа в каждом из трех целочисленных неубывающих массивов х[1] ≤ … ≤ х[р], у[1] ≤ … ≤ y[q], z[1] ≤ … ≤ z[r]. Найти одно из таких чисел или сообщить о его отсутствии — Pascal(Паскаль)

uses crt;
const nmax=100;
type mas=array[1..nmax] of integer;
//создание неубывающего массива
procedure Massiv(var a:mas;var n:byte;c:char);
var i:byte;
begin
writeln('Массив ',c);
repeat
write('Размер массива до ',nmax,' =');
readln(n);
until n in [1..nmax];
a[1]:=random(5);//первое число от 0 до 4
write(a[1],' ');
for i:=2 to n do//остальные
 begin
  a[i]:=a[i-1]+random(5);//прибавляем от 0 до 4
  write(a[i],' ');
 end;
writeln;
writeln;
end;
//бинарный поиск элемента в упорядоченном по екубыванию массиве
function Poisk(a:mas;n:byte;k:integer):boolean;
var l,r,i:byte;
    f:boolean;
    c:integer;
begin
l:=1; r:=n;//начало и конец
f:=false;
while (l<=r)and (not f) do//пока не совпадут или не найдем
 begin
   c:=(l+r) div 2;//середина
   if k<a[c] then r:=c-1//если искомое число меньше, правый край смещаем слева от середины
   else if k>a[c] then l:=c+1//если больше, левый за середину
   else f:=true;//если нашли
 end;
Poisk:=f;
end;
//параллельный поиск в трех массивах
procedure Odin(a,b,c:mas;na,nb,nc:byte);
var i,j,k:byte;
    f:boolean;
begin
f:=false;
i:=1;
while (i<=na)and not f do//пока не просмотрен первый массив или не нашли
if Poisk(b,nb,a[i])and Poisk(c,nc,a[i]) then//если есть в других
 begin
  f:=true;//меняем флаг
  write('Одинаковое число есть, это ',a[i]);//выводим
 end
else i:=i+1;//иначе вперед
if not f then write('Одинаковых чисел нет!');//дошли до конца и не нашли
end;
var x,y,z:mas;
    p,q,r:byte;
begin
clrscr;
Massiv(x,p,'X');
Massiv(y,q,'Y');
Massiv(z,r,'Z');
Odin(x,y,z,p,q,r);
readln
end.

Leave a Comment

42 − = 34