Сравнение элементов векторов - 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.
Объяснение кода листинга программы
- Создаются два массива
a
иb
типаarray[1..nmax] of integer
. - Переменные
n
,i
,j
,k
,p
инициализируются. - В цикле
repeat-until
запрашивается размер массивовn
и проверяется, чтоn
не превышаетnmax
. - В цикле
for
считываются элементы вектораa
и записываются в соответствующие ячейки массиваa
. - Аналогично считываются элементы вектора
b
и записываются в соответствующие ячейки массиваb
. - Выводится содержимое векторов
a
иb
. - Запускается цикл
while
, который выполняется, пока не будет найдена пара элементов в векторахa
иb
. - Внутри цикла
while
переменнаяj
инициализируется значением 1, а переменнаяp
устанавливается равной 0. - Цикл
for
считывает элементы векторовa
иb
с индексами отi
доn-1
и удаляет их из соответствующих массивов. - Если цикл завершается без прерывания, то переменная
p
устанавливается равной 1. - Если цикл завершается, то переменная
i
увеличивается на 1. - Если цикл завершается и
p
равно 0, то выводится букваД
. - Если цикл завершается и
p
не равно 0, то выводится букваН
. - Если
n
равно 0, то выводится букваД
. - Конец программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д