Сравнение элементов векторов - Pascal

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

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

Здравствуйте. Дали такую задачу: даны два вектора одинаковой длины, надо сравнить их и если элементы в этих векторах совпадают, то вывести на экран "да", в противном случае "нет". Пытался через множества сравнить, но не получилось. Например даны вектора: 2 1 2 0 0 1 2 2 все элементы в них одинаковые, надо вывести на экран "да", но сравнивая множествами не выходит, так как множества не учитывают повторение элементов, например: 2 2 1 0 2 1 0 0 Паскаль выводит мне "да", хотя вектора отличаются по элементам. Вот код через множества, может кто нибудь сможет помочь, каким то иным способом:
program p;
const
n = 3;
vect_min=0;
vect_max=2;
var
vector1,vector2:array[1..n] of integer;
a, b, c:set of 0..9;
i, j:integer;

begin
randomize;
 
for i:=1 to n do
begin
vector1[i]:=random(vect_max-vect_min+1)+vect_min;
include(a,vector1[i]);
end;
writeln;
 
for i:=1 to n do
begin
vector2[i]:=random(vect_max-vect_min+1)+vect_min;
include(b,vector2[i]);
end;
 
for i:=1 to n do
begin
write(' ',vector1[i]);
end;
writeln;
 
for i:=1 to n do
begin
write(' ',vector2[i]);
end;
writeln;
c:=a-b;
if (a=b) then
writeln('В векторах одинаковые элементы');
if (a<>b) then
writeln('В векторах разные элементы');
 
end.
Заранее благодарю!

Решение задачи: «Сравнение элементов векторов»

textual
Листинг программы
var a,b:array[1..nmax] of integer;
    n,i,j,k,p:byte;
begin
repeat
write('Размер массивов n=');
readln(n);
until n in [1..nmax];
writeln('Введите элементы вектора А:');
for i:=1 to n do
 begin
  write('al[',i,']=');
  readln(a[i]);
 end;
writeln('Введите элементы вектора B:');
for i:=1 to n do
 begin
  write('bl[',i,']=');
  readln(b[i]);
 end;
writeln('Вектор A:');
for i:=1 to n do
write(a[i],' ');
writeln;
writeln('Вектор B:');
for i:=1 to n do
write(b[i],' ');
writeln;
i:=1;
while i<=n do
 begin
  j:=1;p:=0;
  while j<=n do
   begin
    if b[j]=a[i] then //если нашли одинаковую пару
     begin
      p:=1;
      for k:=i to n-1 do //удаляем эти элементы из своих массивов
      a[k]:=a[k+1];
      for k:=j to n-1 do
      b[k]:=b[k+1];
      n:=n-1;//умньшаем n
      break;
     end
    else j:=j+1;
   end;
  if p=0 then i:=i+1;
 end;
if n=0 then write('Да')
else write('Нет');
end.

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

  1. Создаются два массива a и b типа array[1..nmax] of integer.
  2. Переменные n, i, j, k, p инициализируются.
  3. В цикле repeat-until запрашивается размер массивов n и проверяется, что n не превышает nmax.
  4. В цикле for считываются элементы вектора a и записываются в соответствующие ячейки массива a.
  5. Аналогично считываются элементы вектора b и записываются в соответствующие ячейки массива b.
  6. Выводится содержимое векторов a и b.
  7. Запускается цикл while, который выполняется, пока не будет найдена пара элементов в векторах a и b.
  8. Внутри цикла while переменная j инициализируется значением 1, а переменная p устанавливается равной 0.
  9. Цикл for считывает элементы векторов a и b с индексами от i до n-1 и удаляет их из соответствующих массивов.
  10. Если цикл завершается без прерывания, то переменная p устанавливается равной 1.
  11. Если цикл завершается, то переменная i увеличивается на 1.
  12. Если цикл завершается и p равно 0, то выводится буква Д.
  13. Если цикл завершается и p не равно 0, то выводится буква Н.
  14. Если n равно 0, то выводится буква Д.
  15. Конец программы.

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


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

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

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