Конспект лекций по программированию для начинающих. Гладков В.П. - 189 стр.

UptoLike

Составители: 

191
Пример 11.50. Заданы два одномерных массива. Нужно получить третий
массив, из тех элементов первых двух, которые имеются хотя бы по разу в первом
или во втором массиве, при условии, что элементы как в первом массиве, так и во
втором массиве не повторяются.
Решение. Пусть массив а содержит n элементов, для обращения к которым
будем использовать индекс i, массив b содержит m элементов, для обращения к
которым будем использовать индекс j. В этом случае в массиве с может оказаться
n+m элементов. Для обращения к элементам массива с будем использовать индекс
k. Поскольку по условию задачи все элементы, которые встретились в
массиве а,
должны быть в ответе, то вначале перепишем в массив с все n элементов массива а.
Затем просматриваем все элементы массива b и проверяем не имеются ли они
среди первых n элементов массива с, куда на первом шаге были переписаны
элементы массива а. Если проверяемый элемент массива b отсутствует в массиве с,
то он
заносится на последнее место в массив с.
for i:=1 to n do c[i]:=a[i]; {переписали массив а в массив с}
k:=n; {в массиве с уже имеется n элементов}
for j:=1 to m do
begin i:=1; f:=false;
while (i<=n) and not f do
if b[j]=c[i] then f:=true else i:=i+1;
if not f then begin {1} k:=k+1; c[k]:=b[j] end
{если не найден, то записываем в массив с}
end.
Упражнения:
1. Как будет работать программа, если операторы отмеченные комментарием
{1} подставить вместо оператора f:=true, а условный оператор за телом цикла
отбросить?
2. В чем выгода изменения индекса k до присваивания значения элементу
массива с? Можно ли изменять этот индекс после присваивания значения элементу
c[k]?
3. Что получится в результате, если в теле поискового цикла условие b[j]=c[i]
заменить
на условие b[j]<>c[i]?
4. В массив с перепишите те элементы, которые есть в массиве а, но
отсутствуют в массиве b. Будем считать, что в самих массивах повторяющиеся
элементы отсутствуют.
Пример 11.51. Задан одномерный целочисленный массив. Найти количество
различных элементов в нем. Например, в массиве {1, 2, 1, 3, 2, 1} это количество
равно 3.
Решение. Для каждого элемента от 2-го до n-го (i=2,3,...,n) проверяется, нет ли
ему равных среди элементов, стоящих левее (j=1,2,...,i-1). Если таковых нет, то
счетчик количества различных элементов увеличивается на 1.
c:=0; {количество различных элементов в массиве}
for i:=2 to n do
begin
j:=1; f:=false;
while (j<=i-1) and not f do
                                       191

    Пример 11.50. Заданы два одномерных массива. Нужно получить третий
массив, из тех элементов первых двух, которые имеются хотя бы по разу в первом
или во втором массиве, при условии, что элементы как в первом массиве, так и во
втором массиве не повторяются.
    Решение. Пусть массив а содержит n элементов, для обращения к которым
будем использовать индекс i, массив b содержит m элементов, для обращения к
которым будем использовать индекс j. В этом случае в массиве с может оказаться
n+m элементов. Для обращения к элементам массива с будем использовать индекс
k. Поскольку по условию задачи все элементы, которые встретились в массиве а,
должны быть в ответе, то вначале перепишем в массив с все n элементов массива а.
Затем просматриваем все элементы массива b и проверяем не имеются ли они
среди первых n элементов массива с, куда на первом шаге были переписаны
элементы массива а. Если проверяемый элемент массива b отсутствует в массиве с,
то он заносится на последнее место в массив с.
    for i:=1 to n do c[i]:=a[i]; {переписали массив а в массив с}
    k:=n; {в массиве с уже имеется n элементов}
    for j:=1 to m do
    begin      i:=1; f:=false;
               while (i<=n) and not f do
                       if b[j]=c[i] then f:=true else i:=i+1;
               if not f then begin {1} k:=k+1; c[k]:=b[j] end
       {если не найден, то записываем в массив с}
    end.
    Упражнения:
    1. Как будет работать программа, если операторы отмеченные комментарием
{1} подставить вместо оператора f:=true, а условный оператор за телом цикла
отбросить?
    2. В чем выгода изменения индекса k до присваивания значения элементу
массива с? Можно ли изменять этот индекс после присваивания значения элементу
c[k]?
    3. Что получится в результате, если в теле поискового цикла условие b[j]=c[i]
заменить на условие b[j]<>c[i]?
    4. В массив с перепишите те элементы, которые есть в массиве а, но
отсутствуют в массиве b. Будем считать, что в самих массивах повторяющиеся
элементы отсутствуют.
    Пример 11.51. Задан одномерный целочисленный массив. Найти количество
различных элементов в нем. Например, в массиве {1, 2, 1, 3, 2, 1} это количество
равно 3.
    Решение. Для каждого элемента от 2-го до n-го (i=2,3,...,n) проверяется, нет ли
ему равных среди элементов, стоящих левее (j=1,2,...,i-1). Если таковых нет, то
счетчик количества различных элементов увеличивается на 1.
    c:=0; {количество различных элементов в массиве}
    for i:=2 to n do
    begin
       j:=1; f:=false;
       while (j<=i-1) and not f do