3. Обработка одномерных массивов
В процедурах ввода и вывода нельзя использовать имена массивов, Для ввода и вывода элементов массива необходимо использовать операторы цикла.
Ввод одномерного массива осуществляется поэлементно, например:
For i:=1 to n do Read(a[i]);
или
For i:=1 to n do Readln(a[i]);
В первом фрагменте при вводе исходных данных в качестве разделителя используется пробел, (данные располагаются на одной строке), во втором каждый элемент массива вводится с новой строки. Для удобства работы целесообразно при вводе элементов массива использовать подсказку:
For i:=1 to n do
Begin
Write(‘a[‘,I,’]=’);
Readln(a[i])
End;
Для задания значений элементам массива можно использовать типизированные константы. В отличие от обычных констант в описании типизированной константы указывается как значение константы, так и ее тип. Типизированные константы можно использовать как переменные того же типа.
Например, описание
Сonst a: Array[1…5] of Real = (1.5,-8.6,9.3,1.2,8.7);
задает следующие начальные значения элементов массива А:
а[1]=1.5, a[2]=8.6, a[3]=9.3, a[4]=1.2, a[5]=8.7
Вывод на печать элементов одномерного массива А можно записать так:
Writeln(‘ ’:5, ‘Massiv а’);
For i:=1 to n do Write(a[i]:8:3);
Writeln;
Элементы массива располагаются по 10 в строке. Для вывода элементов массива в стобик нужно в теле цикла заменить процедуру Write на Writeln.
Рассмотрим несколько типовых алгоритмов обработки массивов.
Пример 1. Вычислить сумму элементов заданного одномерного массива a1, a2, … an.
S:=0;
For I:=1 to n do S:=S+a[i];
Пример 2. В заданном одномерном массиве a1,a2,…an подсчитать количество элементов, принадлежащих отрезку [s,t].
k:=0;
For i:=1 to n do
If (a[i]>=s) and (a[i]<=t) then k:=k+1;
Пример 3. В заданном одномерном массиве a1, a2, … an найти максимальный элемент и его порядковый номер.
max:=a[1]; k:=1;
For i:=2 to n do
If a[i]>max then
Begin
max:=a[i]; k:=i
End;
Пример 4. В заданном одномерном массиве a1, a2, … an поменять местами соседние элементы, если предыдущий элемент меньше последующего.
For i:=1 to n-1 do
If a[i]<a[i+1] then
Begin
t:=a[i]; a[i]:=a[i+1]; a[i+1]:=t
End;
Пример 5. В заданном одномерном массиве найти первое отрицательное число и его номер.
yes:=false; {не найдено число}
For i:=1 to n do {поиск отрицательного числа}
Begin
If a[i]>=0 Then Continue; {число неотриц., след. –на след.число}
Writeln(‘1-е отрицательное число=’, a[i], ‘его номер=’i);
yes:=true; {не найдено число}
Break
End;
If not yes Then
Writeln (‘отрицательных чисел в массиве нет’);
Задания к работе
Разработать программу и тестовый пример для проверки работы программы.
I уровень
В заданном массиве a1, a2, …, an поменять местами максимальный и минимальный элементы. Вывести на печать полученный массив.
В заданном массиве a1, a2, …, an максимальный элемент заменить значением суммы предшествующих ему элементов.
В заданном массиве a1, a2, …, an определить среднее значение его элементов, не учитывая максимальный и минимальный элементы.
В заданном массиве a1, a2, …, an найти значение максимального отрицательного элемента и минимального положительного элемента. Если в массиве отсутствуют положительные и отрицательные элементы, то вывести на экран сообщение об этом.
В заданном массиве a1, a2, …, an уменьшить положительные элементы на величину минимального элемента этого массива, а отрицательные элементы увеличить на величину максимального элемента.
Уменьшить все элементы с четными индексами заданного массива a1, a2, …, an на величину минимального элемента этого массива
В заданном массиве a1, a2, …, an определить среднее значение положительных и среднее значение отрицательных элементов.
В заданном целочисленном массиве a1, a2, …, an подсчитать сумму и произведение четных, положительных элементов. Если в массиве отсутствуют подобные элементы, то вывести на экран соответствующее сообщение.
В заданном массиве a1, a2, …, an последовательно слева направо заменить все нулевые элементы полусуммой соседних элементов. Для a1 считать соседним слева элементом an, а для an – соседним справа элементом a1.
В заданном массиве a1, a2, …, an произвести циклический сдвиг элементов на одну позицию влево, т.е. преобразовать к виду a2, a3, …, an, a1.
В заданном массиве a1, a2, …, an произвести циклический сдвиг элементов на одну позицию вправо, т.е. преобразовать к виду an, a1, a2, …, an-1.
В заданном массиве a1, a2, …, an найти среднее геометрическое, а затем все элементы с нечетными индексами уменьшить на величину среднего геометрического.
Указание. Среднее геометрическое вычисляется по формуле:
z=
В заданном массиве a1, a2, …, an найти среднее гармоническое, а затем каждый положительный элемент массива уменьшить на величину среднего гармонического. Указание. Среднее гармоническое вычисляется по формуле: