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

UptoLike

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

164
соответствующего ему элемента другого массива. Если такой формулы установить
не удается, то говорят, что массивы обрабатываются «асинхронно».
Рассмотрим примеры типичных алгоритмов решения задач этого класса.
Пример 11.23. Заданы два одномерных массива, содержащие координаты двух
векторов в n-мерном пространстве. Нужно найти координаты вектора суммы.
Решение. Из математики известно, что координаты вектора-суммы находятся
как суммы соответствующих координат векторов слагаемых. Здесь первая
координата первого вектора складывается с первой координатой второго вектора и
получается первая координата суммы, вторая со второй и т.д., поэтому здесь
несмотря на то, что в работе участвуют три массива, достаточно одного индекса.
В
фрагменте алгоритма используются следующие обозначения: a,d - массивы
координат заданных векторов, c - массив координат вектора-суммы, i - общий
индекс массива, n - размерность векторов.
for i:=1 to n do c[i]:=a[i]+b[i];
Пример 11.24. Заданы два массива. В первом хранятся некоторые числа, второй
содержит только нули и единицы. Нужно в третий массив на те же самые места
переписать те элементы первого массива, которым во втором массиве
соответствуют единицы. Например, для исходных массивов a и b получится
результат c. Минус обозначает неопределенное значение.
a={ 2 3 4 5 6 7 8 9}
b={ 0 0 1 0 1 1 0 1}
c={ - - 4 - 6 7 - 9}
Решение. Здесь массивы также обрабатываются «синхронно», поэтому
достаточно одного индекса.
for i:=1 to n do
if b[i]=1 then c[i]:=a[i];
Пример 11.25. Массив а длины n перенести в массив b так, чтобы первый
элемент массива а стал k-м элементом массива b. Предполагается, что массив а
целиком поместится в массиве b.
Решение. В этой задаче легко установить правило, в соответствии с которым по
известному индексу массива а можно установить соответствующий индекс массива
b. Здесь i-й элемент массива а соответствует i+k-1-му элементу массива b. Для
решения задачи будем перебирать по одному элементы исходного массива
(массива а), вычислять им соответствующие места в массиве b и переписывать
элементы. Такое решение назовем «циклом по исходному массиву».
for i:=1 to n do b[i+k-1]:=a[i];
Можно поступить по-другому. Перебирать места в массиве b и вычислять
индексы элементов массива а, которые должны быть расположены на данных
местах. Назовем такое решение «циклом по выходному массиву».
Соответствующая формула здесь такова: на j-м месте в массиве b должен быть
помещен j-k+1-й элемент
массива а.
for j:=k to n+k-1 do b[j]:=a[j-k+1];
Упражнение. Совершите перенос массива а так, чтобы его последний элемент,
т.е. n-й элемент, стал L-м элементом массива b. Предполагается, что массив а
целиком поместится в массиве b. Задачу решите двумя способами: циклом по
исходному массиву и циклом по выходному массиву.
                                      164

соответствующего ему элемента другого массива. Если такой формулы установить
не удается, то говорят, что массивы обрабатываются «асинхронно».
    Рассмотрим примеры типичных алгоритмов решения задач этого класса.
    Пример 11.23. Заданы два одномерных массива, содержащие координаты двух
векторов в n-мерном пространстве. Нужно найти координаты вектора суммы.
    Решение. Из математики известно, что координаты вектора-суммы находятся
как суммы соответствующих координат векторов слагаемых. Здесь первая
координата первого вектора складывается с первой координатой второго вектора и
получается первая координата суммы, вторая со второй и т.д., поэтому здесь
несмотря на то, что в работе участвуют три массива, достаточно одного индекса. В
фрагменте алгоритма используются следующие обозначения: a,d - массивы
координат заданных векторов, c - массив координат вектора-суммы, i - общий
индекс массива, n - размерность векторов.
    for i:=1 to n do c[i]:=a[i]+b[i];
    Пример 11.24. Заданы два массива. В первом хранятся некоторые числа, второй
содержит только нули и единицы. Нужно в третий массив на те же самые места
переписать те элементы первого массива, которым во втором массиве
соответствуют единицы. Например, для исходных массивов a и b получится
результат c. Минус обозначает неопределенное значение.
    a={ 2 3 4 5 6 7 8 9}
    b={ 0 0 1 0 1 1 0 1}
    c={ - - 4 - 6 7 - 9}
    Решение. Здесь массивы также обрабатываются «синхронно», поэтому
достаточно одного индекса.
    for i:=1 to n do
       if b[i]=1 then c[i]:=a[i];
    Пример 11.25. Массив а длины n перенести в массив b так, чтобы первый
элемент массива а стал k-м элементом массива b. Предполагается, что массив а
целиком поместится в массиве b.
    Решение. В этой задаче легко установить правило, в соответствии с которым по
известному индексу массива а можно установить соответствующий индекс массива
b. Здесь i-й элемент массива а соответствует i+k-1-му элементу массива b. Для
решения задачи будем перебирать по одному элементы исходного массива
(массива а), вычислять им соответствующие места в массиве b и переписывать
элементы. Такое решение назовем «циклом по исходному массиву».
    for i:=1 to n do b[i+k-1]:=a[i];
    Можно поступить по-другому. Перебирать места в массиве b и вычислять
индексы элементов массива а, которые должны быть расположены на данных
местах. Назовем такое решение «циклом по выходному массиву».
Соответствующая формула здесь такова: на j-м месте в массиве b должен быть
помещен j-k+1-й элемент массива а.
    for j:=k to n+k-1 do b[j]:=a[j-k+1];
    Упражнение. Совершите перенос массива а так, чтобы его последний элемент,
т.е. n-й элемент, стал L-м элементом массива b. Предполагается, что массив а
целиком поместится в массиве b. Задачу решите двумя способами: циклом по
исходному массиву и циклом по выходному массиву.