Сравнение элементов векторов - 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, то выводится букваД. - Конец программы.