Сравнение элементов векторов - 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, то выводится букваД
. - Конец программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д