Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
GLAVA_10_Algoritmy_i_programmy.doc
Скачиваний:
10
Добавлен:
22.09.2019
Размер:
798 Кб
Скачать
☆

6.10. Массивы

Массив - это упорядоченная последовательность однотипных элементов, которым присвоено одно имя. Число элементов в массиве ограничено и фиксировано. Положение элемента в массиве определяется его индексами. Индекс один, в случае одномерного массива, или несколько, если массив многомерный. Для обращения к элементу массива указывается имя массива и индексы элемента в скобках.

Например, в языке Pascal описание одномерного массива (вектора) X из 100 целых чисел,

X : Array [1..100] of Integer;

обращение к элементу с номером 5 - X[5], а к текущему элементу с номером I – X[I]. Описание аналогичного массива на языке Basic:

DIM X(100)

а обращение к тем же элементам X(5), X(I).

Описание двумерного массива (матрицы) Z вещественных чисел, состоящего из 10 строк и 20 столбцов, т.е. из 200 элементов,

Z : Array [1..10, 1..20] of Real;

обращение к элементу с номером строки 5, столбца 4 - Z[5, 4], а к текущему элементу с номером строки I, столбца J – Z[I, J].

Элементы матрицы Z размещаются в памяти по строкам (строка за строкой) в следующем порядке:

Z[1][1], Z[1][2], ... , Z[1][20],

. . .

Z[10][1], Z[10][2], ... , Z[10][20].

Описание аналогичного массива на языке Basic:

DIM Z(10,20)

а обращение к тем же элементам Z(5, 4), Z(I, J). Первый индекс означает номер строки, а второй – номер столбца.

Массивы необходимо использовать в тех задачах, где требуется хранить всю входную последовательность данных. Например, если данные просматриваются и обрабатываются более одного раза, обрабатываются не в том порядке, в котором вводятся и т.д.

Задача 6.12. Даны целые числа a1, a2, …, a31 - значения температуры в течение месяца.

а) найти среднюю температуру за месяц;

б) найти среднюю температуру за месяц и дни, когда температура была ниже средней.

В задаче 6.12а не требуется массив. Можно последовательно вводить значение ai (i от 1 до 31) в одну и ту же переменную, например t, и вычислить суммарную, а затем и среднюю температуру за месяц.

Фрагмент программы на языке Pascal:

ReadLn(N); {количество дней в месяце}

S:=0; {начальное значение суммарной температуры}

For I:=1 to N do begin {цикл на N шагов}

ReadLn (t);{ввод температуры очередного дня}

S:= S+ t; {добавление температуры очередного дня к сумме}

End;

S:= S/N; {вычисление средней температуры за N дней}

Тест. Вход: N=4

21 18 23 15

Выход: Средняя температура 19.25

В задаче 6.12б требуется массив для хранения всех значений температуры за месяц. После вычисления суммарной и средней температур за месяц, массив со значениями температуры просматривается еще раз и определяются дни с температурой ниже средней.

Тест. Вход: N=4

21 18 23 15

Выход: Средняя температура 19.25

Дни, c температурой ниже средней :

  1. 4

Решение задачи 6.12б. на языке Turbo Pascal:

Program Sred_temp;

Var S : Real; {суммарная (затем средняя) температура }

N, {количество дней в месяце}

i : Integer; {номер текущего дня}

{массив для хранения значений температуры}

T : Array [1..31] of Integer;

BEGIN

S:=0;

Write(’Введите количество дней : ’); ReadLn(N);

Write(’Введите значения температуры: ’);

For I:=1 to N do begin

ReadLn(T[I]); { ввод температуры очередного I- ого дня }

S:=S + T[I]; {вычисление суммарной температуры}

End;

S:= S/N; {вычисление средней температуры }

WriteLn(’Средняя температура = ’, S:4:1);

WriteLn(’Дни, c температурой ниже средней : ’);

For I:=1 to N do

if T[I] < S {сравнение текущей температуры со средней}

then Write (I:3); {вывод номера дня с температурой ниже средней}

ReadLn

END.

Пояснения к программе даны в виде комментариев.

Задача 6.13. Дана последовательность из N чисел. Составить программы решения следующих задач.

а) определить количество чисел, равных первому числу последовательности;

б) определить количество чисел, равных последнему числу последовательности.

Для решения задачи 6.13а не нужен массив, а для решения задачи 6.13б необходим массив для хранения всех чисел.

Тест задачи 6.13а. Вход: N=5

5 2 5 5 4

Выход: Количество чисел равных первому – 2

Тест задачи 6.13б. Вход: N=5

5 4 5 5 4

Выход: Количество чисел равных последнему – 1

Решение задачи 6.13а на языке Pascal:

Program Kol_a;

Var P, {первое число }

A: Real; {текущее число }

N, {количество чисел}

K, {количество чисел, равных первому числу}

i : Integer; {номер текущего числа}

BEGIN

K:=0;

WriteLn (’Введите количество чисел : ’); ReadLn(N);

WriteLn (’Введите первое число : ’); ReadLn(P);

WriteLn(’Введите числа : ’);

For I:=2 to N do begin

ReadLn(A);

if A = P then K:=K+1;

end;

WriteLn (’Количество чисел, равных первому - ’, K);

ReadLn

END.

Решение задачи 6.13б на языке Pascal:

Program Kol_b;

Var N, {количество чисел}

K, {количество чисел, равных первому числу}

i : Integer; {номер текущего числа}

A : Array [1..100] of Real; {массив для хранения 100 чисел}

BEGIN

WriteLn (’Введите количество чисел : ’); ReadLn(N);

WriteLn(’Введите числа : ’);

For I:=1 to N do

ReadLn(A[I]);

For I:=1 to N-1do

if A[I] = A[N] then K:=K+1;

WriteLn (’Количество чисел, равных последнему - ’, K);

ReadLn

END.

Упражнения.

1. Дан массив X, содержащий N элементов. Получить новый массив Y такой, что в нем сначала идут положительные числа, затем нулевые, и затем отрицательные из X. Составить программу решения задачи.

2. Элементы заданного массива A, содержащего N элементов, переписать в новый массив B в обратном порядке. Составить программу решения задачи.

3. В заданном массиве Х, содержащем N элементов, заменить нулями все отрицательные элементы, непосредственно предшествующие его максимальному элементу (если несколько элементов имеют максимальное значение, то первому из них). Составить программу решения задачи.

4. Задан массив А, содержащий N элементов. Образуйте массив B, состоящий из положительных элементов массива A, больших пяти. Выведите на печать образованный массив и количество его элементов. Составить программу решения задачи.

5. Дана последовательность из N различных чисел (N>0). Найти сумму чисел, расположенных между максимальным и минимальным числами. Составить программу решения задачи.

6. Заданы два упорядоченных по возрастанию массива чисел X[1:n] и Y[1:m]. Составить программу, объединяющую их в один упорядоченный по возрастанию массив Z[1..n+m].

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]