ВУЗ:
Составители:
Рубрика:
159
write('максимальное количество рядом расположенных совпавших ',m,' ',j).
Упражнения:
1. Постройте систему тестов и проверьте на ней работу приведенного выше
варианта алгоритма.
2. Постройте алгоритмы решения задачи пример 11.13, используя другие
подходы примера 11.12 или собственные идеи.
3. Приведите формулировки других задач, которые можно решить, используя
подходы примера 11.12.
Пример 11.14. Вычислить сумму произведений элементов заданного
одномерного массива: x
1
x
2
+x
2
x
3
+...+x
n-1
x
n
.
Решение. Здесь требуется найти сумму произведений элементов массива. Всего
элементов в сумме n-1. Каждое произведение состоит из двух сомножителей:
индекс первого сомножителя совпадает с номером слагаемого, а индекс второго
сомножителя на единицу больше. Здесь используем схему перебора по два.
s:=0;
for i:=1 to n-1 do s:=s+a[i]*a[i+1];
Пример 11.15. Вычислить сумму произведений элементов заданного
одномерного массива: x
1
x
n
+x
2
x
n-1
+x
3
x
n-2
+...+x
n
x
1
.
Решение. Здесь, как и в предыдущем примере, требуется найти сумму n
слагаемых, каждое из которых представляет произведение двух сомножителей.
Индекс первого сомножителя совпадает с номером слагаемого, а индекс второго
сомножителя можно найти из следующих соображений. Заметим, что сумма
индексов элементов массива, составляющих каждое произведение, равна n+1:
1+n=n+1, 2+n-1=n+1, 3+n-2=n+1, ..., n+1=n+1. Тогда, зная номер одного
сомножителя (i), можно
найти номер второго сомножителя j=n+1-i.
s:=0;
for i:=1 to n do s:=s+a[i]*a[n+1-i];
Пример 11.16. Вычислить сумму квадратов элементов с нечетными индексами
заданного одномерного массива.
Решение. Здесь находится сумма элементов с нечетными индексами. Нечетный
индекс можно получить либо начав с некоторого нечетного числа, а затем
прибавляя к нему два, либо воспользоваться формулой нечетного числа. Решения,
основанные на этих подходах, приведены ниже:
{Решение 1. Перебор с шагом два }
s:=0;
i:=1;
while i<=n do
begin s:=s+a[i]*a[i];
i:=i+2
end;
{Решение 2. Используем формулу нечетного числа }
s:=0;
i:=1;
while 2*i-1<=n do
begin s:=s+a[2*i-1]*a[2*i-1];
159 write('максимальное количество рядом расположенных совпавших ',m,' ',j). Упражнения: 1. Постройте систему тестов и проверьте на ней работу приведенного выше варианта алгоритма. 2. Постройте алгоритмы решения задачи пример 11.13, используя другие подходы примера 11.12 или собственные идеи. 3. Приведите формулировки других задач, которые можно решить, используя подходы примера 11.12. Пример 11.14. Вычислить сумму произведений элементов заданного одномерного массива: x1x2+x2x3+...+xn-1xn. Решение. Здесь требуется найти сумму произведений элементов массива. Всего элементов в сумме n-1. Каждое произведение состоит из двух сомножителей: индекс первого сомножителя совпадает с номером слагаемого, а индекс второго сомножителя на единицу больше. Здесь используем схему перебора по два. s:=0; for i:=1 to n-1 do s:=s+a[i]*a[i+1]; Пример 11.15. Вычислить сумму произведений элементов заданного одномерного массива: x1xn+x2xn-1+x3xn-2+...+xnx1. Решение. Здесь, как и в предыдущем примере, требуется найти сумму n слагаемых, каждое из которых представляет произведение двух сомножителей. Индекс первого сомножителя совпадает с номером слагаемого, а индекс второго сомножителя можно найти из следующих соображений. Заметим, что сумма индексов элементов массива, составляющих каждое произведение, равна n+1: 1+n=n+1, 2+n-1=n+1, 3+n-2=n+1, ..., n+1=n+1. Тогда, зная номер одного сомножителя (i), можно найти номер второго сомножителя j=n+1-i. s:=0; for i:=1 to n do s:=s+a[i]*a[n+1-i]; Пример 11.16. Вычислить сумму квадратов элементов с нечетными индексами заданного одномерного массива. Решение. Здесь находится сумма элементов с нечетными индексами. Нечетный индекс можно получить либо начав с некоторого нечетного числа, а затем прибавляя к нему два, либо воспользоваться формулой нечетного числа. Решения, основанные на этих подходах, приведены ниже: {Решение 1. Перебор с шагом два } s:=0; i:=1; while i<=n do begin s:=s+a[i]*a[i]; i:=i+2 end; {Решение 2. Используем формулу нечетного числа } s:=0; i:=1; while 2*i-1<=n do begin s:=s+a[2*i-1]*a[2*i-1];
Страницы
- « первая
- ‹ предыдущая
- …
- 155
- 156
- 157
- 158
- 159
- …
- следующая ›
- последняя »