Работа с двумя массивами

Принципы решения

В ряде задач для временного хранения элементов исходного массива можно (или необходимо) использовать другой массив, что делает алгоритмы решения более наглядными и простыми. Например, в процессе поиска по заданным критериям элементы первого массива (A) сохраняются во втором массиве (B). Обычно речь идет о втором массиве того же размера. В данной задаче во второй массив помещаются элементы исходного массива с четными номерами:

{некий код программы}
for i := 1 to n div 2 do
    b[i] := a[i * 2];
{продолжение программы}

Примечание:

  1. Второй массив необходим, если нужно знать индексы (значения эл-тов) всех эл-тов, имеющих заданное значение.
  2. В том случае, если, в процессе поиска, искомые индексы (или значения эл-ов) выводятся на экран непосредственно в цикле for, необходимость во втором массиве отпадает.

Примеры решения задач

  1. Постановка задачи. Дан массив A размера N. Записать в массив B того же размера элементы массива A в обратном порядке. Вывести вначале элементы преобразованного массива A, а затем — элементы преобразованного массива B.
  2. program massab1;
    const
        n = 50;
    var
        a,b:array[1..n] of integer;
        i:byte;
    begin
    randomize;
    for i := 1 to n do
    begin
        a[i] := random(90) + 10; {заполняем элементы}
        write(a[i]:4) {выводим массив A}
    end;
    writeln; {переходим на новую строку для вывода массива B}
    for i := 1 to n do
    begin
        b[i] := a[n - i + 1]; {заполняем по условию}
        write(b[i]:4) {выводим массив B}
    end;
    readln
    end.
    
  3. Постановка задачи. Дан массив A размера N. Сформировать новый массив B того же размера, элементы которого определяются следующим образом:
    \begin{cases}
    2 A_k, & \mbox{if } A_k < 5 \\ A_k / 2, & \mbox{if } A_k \ge 5 \end{cases} [/latex]
  4. program massab2;
    uses
        crt;
    const
        n = 50;
    var
        a,b:array[1..n] of real;
        i:byte;
    begin
    clrscr;
    for i := 1 to n do
    begin
        a[i] := random(90) + 10;
        if a[i] < 5 then
            b[i] := a[i] * 2
        else
            b[i] := a[i] / 2;
        write(a[i]:4:1) {выводим массив А, хотя в условии не требуется}
    end;
    writeln;
    for i := 1 to n do
        write(b[i]:4:1); {выводим массив B}
    readln 
    end.
    
  5. Постановка задачи. Дан массив A размера N. Сформировать новый массив B того же размера по следующему правилу: элемент BK равен сумме элементов массива A с номерами от 1 до K.
  6. program massab3;
    uses
        crt;
    const
        n = 10; {Объявим исходный массив как типизированную константу:}
        a:array[1..n] of word = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
    var
        b:array[1..n] of word;
        i:byte;
        sum:word;
    begin
    clrscr;
    for i := 1 to n do
        write(a[i]:4); {покажем массив А}
    writeln;
    sum := 0; {подготавливаем накопитель суммы элементов от 1 до K}
    for i := 1 to n do
    begin
        sum := sum + a[i];
        b[i] := sum; {реализация задачи}
        write(b[i]:4)
    end;
    readkey;
    end.
    
  7. Постановка задачи. Дан массив A размера N. Сформировать новый массив B того же размера по следующему правилу: элемент BK равен среднему арифметическому элементов массива A с номерами от K до N.
  8. program massab4;
    uses
        crt;
    const
        n = 10; {Объявим исходный массив как типизированную константу:}
        a:array[1..n] of word = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
    var
        b:array[1..n] of real;
        i,j,s:byte;
    begin
    clrscr;
    for i := 1 to n do
        write(a[i]:5); {покажем массив А}
    writeln;
    for i := 1 to n do
    begin
        s := 0; {Перед входом во вложенный цикл "обнуляем" накопитель}
        for j := i to n do {Во вложенном цикле суммируем элементы массива А от К-го до N}
            s := s + a[j];
        b[i] := s/(n - i + 1); {по выходу из цикла получаем среднее арифметическое с присваиванием текущему эл-ту массива В}
        write(b[i]:4:1)
    end;
    readkey;
    end.
    

Домашнее задание

  1. Дан целочисленный массив A размера N (≤ 15). Переписать в новый целочисленный массив B все элементы с нечетными порядковыми номерами (1, 3, …) и вывести размер полученного массива B и его содержимое. Условный оператор не использовать.
  2. Дан массив A размера N. Сформировать новый массив B того же размера по следующему правилу: элемент BK равен среднему арифметическому элементов массива A с номерами от 1 до K.
  3. Дополнительно. Дан целочисленный массив A размера N. Переписать в новый целочисленный массив B того же размера вначале все элементы исходного массива с четными номерами, а затем — с нечетными:
    A2, A4, A6, …, A1, A3, A5, … .

  4. Дополнительно. Дан массив A размера N. Сформировать два новых массива B и C:
    в массив B записать все положительные элементы массива A, в массив C —
    все отрицательные (сохраняя исходный порядок следования элементов).
    Вывести вначале размер и содержимое массива B, а затем — размер и со-
    держимое массива C.

Добавить комментарий