- Основные задачи
- Шпаргалка
- Вопросы и задания
Большинство задач на обработку массива сводятся к комбинированию следующих алгоритмов:
- Заполнение
- Заполнение случайными числами.
- Использование в формуле заполнения индекса элемента.
- Использование рекуррентного соотношения.
- Анализ
- Задачи подсчета — нахождение суммы или количества элементов таблицы, обладающих заданным свойством.
- Нахождение минимального или максимального среди элементов массива.
- Задачи, в которых требуется найти какие-то характеристики массива.
- Поиск
- Перестановка
- Задачи, в которых требуется поменять местами элементы массива.
- Задачи циклической перестановки.
- Задачи сортировки элементов массива.
Заполнение | Анализ | Поиск | Перестановка |
- Заполнение
Функции и процедуры, используемые для заполнения массива случайными числами:
Random - функция, возвращает случайное вещественное в диапазоне [0..1).
Random(x) -функция, возвращает случайное целое в диапазоне от 0 до x-1.
Randomize - процедура языка Pascal, которая инициализирует встроенный генератор случайных чисел с произвольным значением.
Заполнение массива оператором случайных чисел Random на интервале [0;1):
randomize;
for i:=1 to n do
a[i]:=random;
Пример 1 (.pas) Заполните массив, состоящий из 10 вещественных чисел в диапазоне [0..1):
randomize;
for i:=1 to 10 do
a[i]:=random;
Заполнение массива оператором случайных чисел Random на интервале [ a ; b ]:
randomize;
for i:=1 to n do
a[ i ] := random (b-a+1)+a;
Пример 2 (.pas) Заполните массив, состоящий из 10 целых чисел на интервале [5..10]:
randomize;
for i:=1 to 10 do
a[ i ] := random (6)+5;
Заполнение массива оператором случайных чисел Random на интервале [a ; b):
randomize;
for i:=1 to n do
a[ i ] := random (b-a)+a;
Пример 3 (.pas) Заполните массив, состоящий из 10 целых чисел на интервале [5..10):
randomize;
for i:=1 to 10 do
a[ i ] := random (5)+5;
Пример 4 (.pas) Заполните массив на 25 элементов целыми значениями, лежащими в диапазоне от –12 до 7, и организуйте вывод первых 7 элементов.
program z;
const n=25;
type mas= array [1..n] of integer;
var a: mas;
i: integer;
begin
cls;
randomize;
for i:=1 to n do
a[ i ] := random (20)-12;
for i:=1 to 7 do write(a[i],' ');
end.
Если элементы массива удовлетворяют некоторой закономерности, например, являются четными числами, то их ввод можно организовать с помощью формул, содержащих индекс элемента.
Например, заполним массив чисел, так чтобы:
- Значения элементов массива совпадают с квадратами их индексов:
for i:=1 to N do a[i]:=i*i; - Значения элементов массива совпадают с их индексами:
for i:=1 to N do a[i]:=i; - Значения элементов массива - числа нечетные:
for i:=1 to N do a[i]:=2i - 1; - Значения элементов массива - числа четные:
for i:=1 to N do a[i]:=2i; - Значения элементов массива - числа обратные индексам:
for i:=1 to N do a[i]:=1/i.
Если значение элемента зависит от предыдущего элемента массива, то начальному элементу массива необходимо присвоить требуемое значение, а все остальные элементы вычислять используя рекурентное соотношение.
Например, заполним массив чисел, так чтобы:
- Значения элементов массива являлись числами Фибоначчи (каждый последующий элемент равен сумме двух предыдущих: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, …): (.pas)
F[0]:=0;
F[1]:=1;
for i:= 2 to n do F[i]:= F[i-1]+F[i-2];
- Элементы массива - последовательность чисел: 1, 4, 7, 10, ...
a[1]:=1;
for i:=2 to n do a[i]:=a[i-1]+3;
Тест:
Задачи:
- Заполнить массив на 25 элементов целыми значениями, лежащими в диапазоне от –34 до 55, и организуйте вывод элементов с индексами от 8 до 14.
- Создать одномерный массив, содержащий 15 элементов, наполнить его случайными значениями в интервале от 1 до 200.
- Сформируйте линейный массив вещественных чисел, элементами которого являются расстояния, пройденные телом при свободном падении на землю за 1, 2, … , 10 с.
- Заполнить массив на 30 элементов целыми значениями, лежащими в диапазоне от 31 до 39. Индексы элементов от -15 до x. Определите x и организуйте вывод всех элементов массива.
Тест:
№ |
Фрагмент программы |
Блок - схема |
1 | Вычисление суммы всех элементов массива |
|
2 | Вычисление среднего арифметического чётных элементов массива |
|
3 | Найти произведение всех элементов массива |
|
4 | Количество четных элементов массива |
|
5 | Удвоить все положительные элементы массива, и поменять знак у остальных |
|
6 | Перестановка всех элементов массива в обратном порядке |
|
7 | Перестановка соседних элементов массива |
|
8 | Обмен половин массива |
|
9 | Проверить, есть ли в массиве четные числа |
|
10 | Проверить, что массив упорядочен строго по возрастанию |
|
11 | Поиск максимального элемента массива (границы изменения значений элементов массива неизвестны) |
|
12 | Значения элементов массива принадлежат промежутку от -500 до 500. Найти максимальный элемент массива. |
|
13 | Поиск количества элементов произвольного массива равных максимальному |
|
14 | Найти номер максимального элемента массива, если он единственный, или количество максимальных элементов, если их несколько. |
|
15 | Поиск второго по величине максимального элемента массива max:=a[1]; max2:=a[2]; if max<max2 then begin max:=a[2]; max2:=a[1]; end; for i:=3 to n do if a[i]>max then begin max2:=max; max:=a[i]; end else if a[i]>max2 then max2:=a[i]; |
|
16 | Поиск номера максимального элемента |
|
17 | Значения элементов массива принадлежат диапазону от – 500 до 500. найти максимальный отрицательный элемент массива. Гарантируется, что отрицательные элементы есть. |
|
18 | Номера двух элементов массива наименее отличающихся друг от друга |
|
19 | Номера двух последовательных элементов массива наименее отличающихся друг от друга |
Задача 1 (..pas) Дан целочисленный массив из 30 элементов. Элементы могут принимать значения от 0 до 100 – баллы, полученные на ЕГЭ. Опишите на русском языке или на одном из языков программирования алгоритм, который подсчитывает и выводит средний балл учащихся, сдавших экзамен (получивших оценку более 20 баллов). Гарантируется, что хотя бы один ученик в классе успешно сдал экзамен. Исходные данные объявлены так, как показано ниже. Использовать другие переменные запрещается.
const N = 30;
var A: array[1..N] of integer;
i, x, y: integer;
s: real;
begin
for i:=1 to N do readln(A[i]);
...
end.
const N=30;
var a: array [1..N] of integer;
i, j, min: integer;
begin
for i:=1 to N do readln(a[i]);
...
end.
Задача
3 (.pas) Дан массив, состоящий из 30 вещественных чисел. Вычислить сумму всех элементов. Массив вводится с клавиатуры.
а) Наберите программу или воспользуйтеть файлом .pas, заменив многоточие на необходимые команды:
Program z;
Const n=5;
type mas=array[1..n] of real;
var a: mas;
s: real;
i: integer;
begin
for i:=........ to ....... do
begin
writeln (‘введите элемент массива’);
......................;
S:=S+........ ;
end;
writeln (‘ Сумма равна’,.......);
End.
б) запустите данную программу и посмотрите результат её работы.
Задача
4. Дан массив целых чисел.
а) каждый положительный элемент, заменить на его квадрат;
б) выяснить, верно ли, что максимальный элемент больше среднего арифметического на 5.
Задача 5 (.pas) Дан целочисленный массив из 20 элементов. Элементы массива могут принимать целые значения от 0 до 1000. Опишите на русском языке или на одном из языков программирования алгоритм, позволяющий найти и вывести минимальное значение среди элементов массива, которые имеют чётное значение и не делятся на три. Гарантируется, что в исходном массиве есть хотя бы один элемент, значение которого чётно и не кратно трем. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но использовать все описанные переменные не обязательно.
N = 20;
var
a: array [1..N] of integer;
i, j, min: integer;
begin
for i := 1 to N do
readln(a[i]);
….......
end.