Приведем сначала текст программы:
Program Problem30_3; Var i,k,l,k1,l1,n:Integer; x,y: Array[1..50] Of Integer; Flag:Boolean; Begin WriteLn('Задайте количество элементов в первом массиве:'); ReadLn(k); WriteLn('Укажите элементы первого массива:'); For i:=1 To k Do Begin Write(i,'-й элемент: '); ReadLn(x[i]); End; WriteLn('Задайте количество элементов во втором массиве:'); ReadLn(l); WriteLn('Укажите элементы второго массива:'); For i:=1 To l Do Begin Write(i,'-й элемент: '); ReadLn(y[i]); End; {Основной блок программы.} {Напомним, что массивы упорядочены по возрастанию.} n:=0; {Количество одинаковых элементов (искомый результат)} k1:=0;{Номер текущего элемента в первом массиве} l1:=0;{Номер текущего элемента во втором массиве} {Пока есть непросмотренные элементы в данных массивах} While (k1<>k) And (l1<>l) Do {Тело цикла будет выполняться,} Begin {пока не закончатся элементы хотя бы одного массива} If x[k1+1]<y[l1+1] Then {Если текущий элемент 2-го массива} Begin {оказался больше текущего элемента 1-го массива} k1:=k1+1; {Берем следующий элемент 1-го массива} End Else {Эта ветвь выполнится тогда, когда текущий элемент 1-го} {массива оказался больше или равен текущему элементу 2-го массива} If x[k1+1]>y[l1+1] Then {Если текущий элемент 1-го массива} Begin {оказался больше текущего элемента 2-го массива} l1:=l1+1; {Берем следующий элемент 2-го массива} End Else {Эта ветвь выполнится тогда, когда x[k1+1]=y[l1+1]} Begin k1:=k1+1; {Переходим к очередным} l1:=l1+1; {элементам массивов } n:=n+1; {Увеличиваем на 1 количество одинаковых элементов} End; End; End.
Проанализировав текст программы, можно понять принцип ее работы. Отметим только
тот факт, что раз нам нужно найти количество одинаковых элементов в массиве, то
процесс поиска должен закончиться тогда, когда просмотрены все элементы
хотя бы одного массива. В зависимости от результатов сравнения очередных
элементов мы "перемещаемся" по первому или второму массиву. И только тогда, когда
найдены одинаковые элементы мы "перемещаемся" сразу же по двум массивам (хотя достаточно
было "переместиться" по элементам одного любого массива) и увеличиваем количество
одинаковых элементов.