Работа с несколькими массивами
Принципы решения
В ряде задач для временного хранения элементов исходного массива можно (или необходимо) использовать другой массив, что делает алгоритмы решения более наглядными и простыми. Например, в процессе поиска по заданным критериям элементы первого массива (A) сохраняются во втором массиве (B). Обычно речь идет о втором массиве того же размера. В данной задаче во второй массив помещаются элементы исходного массива с четными номерами:
{некий код программы} for i := 1 to n div 2 do
b[i] := a[i * 2];
{продолжение программы}
|
Примечание:
- Второй массив необходим, если нужно знать индексы (значения эл-тов) всех эл-тов, имеющих заданное значение.
- В том случае, если, в процессе поиска, искомые индексы (или значения эл-ов) выводятся на экран непосредственно в цикле for, необходимость во втором массиве отпадает.
Примеры решения задач
- Постановка задачи. Дан массив A размера N. Записать в массив B того же размера элементы массива A в обратном порядке. Вывести вначале элементы преобразованного массива A, а затем — элементы преобразованного массива B.
1. program massab1;
2. const
3. n = 50;
4. var
5. a,b:array[1..n] of integer; 6. i:byte; 7. begin
8. randomize;
9. for i := 1 to n do
10. begin
11. a[i] := random(90) + 10; {заполняем элементы}
12. write(a[i]:4) {выводим массив A}
13. end;
14. writeln; {переходим на новую строку для вывода массива B}
15. for i := 1 to n do
16. begin
17. b[i] := a[n - i + 1]; {заполняем по условию}
18. write(b[i]:4) {выводим массив B}
19. end;
20. readln
21. end.
|
- Постановка задачи. Дан массив A размера N. Сформировать новый массив B того же размера, элементы которого определяются следующим образом:
|2·AK, если AK < 5,
BK = -| |AK/2 в противном случае.
|
1. program massab2;
2. const
3. n = 50;
4. var
5. a,b:array[1..n] of real; 6. i:byte; 7. begin
8. for i := 1 to n do
9. begin
10. a[i] := random(90) + 10;
11. if a[i] < 5 then
12. b[i] := a[i] * 2
13. else
14. b[i] := a[i] / 2;
15. write(a[i]:4:1) {выводим массив А, хотя в условии не требуется}
16. end;
17. writeln;
18. for i := 1 to n do
19. write(b[i]:4:1); {выводим массив B}
20. readln
21. end.
|
- Постановка задачи. Дан массив A размера N. Сформировать новый массив B того же размера по следующему правилу: элемент BK равен сумме элементов массива A с номерами от 1 до K.
1. program massab3;
2. const
3. n = 10; {Объявим исходный массив как типизированную константу:}
4. a:array[1..n] of word = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); 5. var
6. b:array[1..n] of word; 7. i:byte; 8. sum:word;
9. begin
10. for i := 1 to n do
11. write(a[i]:4); {покажем массив А}
12. writeln;
13. sum := 0; {подготавливаем накопитель суммы эл-тов от 1 до K}
14. for i := 1 to n do
15. begin
16. sum := sum + a[i];
17. b[i] := sum; {реализация задачи}
18. write(b[i]:4)
19. end;
20. readln
21. end.
|
- Постановка задачи. Дан массив A размера N. Сформировать новый массив B того же размера по следующему правилу: элемент BK равен среднему арифметическому элементов массива A с номерами от K до N.
1. program massab4;
2. const
3. n = 10; {Объявим исходный массив как типизированную константу:}
4. a:array[1..n] of word = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); 5. var
6. b:array[1..n] of real; 7. i,j,s:byte; 8. begin
9. for i := 1 to n do
10. write(a[i]:4); {покажем массив А}
11. writeln;
12. for i := 1 to n do
13. begin
14. s := 0; {Перед входом во вложенный цикл "обнуляем" накопитель}
15. for j := i to n do {Во вложенном цикле суммируем элементы массива А от К-го до N}
16. s := s + a[j];
17. b[i] := s/(n - i + 1); {по выходу из цикла получаем среднее арифметическое с присваиванием текущему эл-ту массива В}
18. write(b[i]:4:1)
19. end;
20. readln
21. end
|