- Основные задачи
- Шпаргалка
- Вопросы и задания
Большинство задач на обработку массива сводятся к комбинированию следующих алгоритмов:
- Заполнение
- Заполнение случайными числами.
- Использование в формуле заполнения индекса элемента.
- Использование рекуррентного соотношения.
- Анализ
- Задачи подсчета — нахождение суммы или количества элементов таблицы, обладающих заданным свойством.
- Нахождение минимального или максимального среди элементов массива.
- Задачи, в которых требуется найти какие-то характеристики массива.
- Поиск
- Перестановка
- Задачи, в которых требуется поменять местами элементы массива.
- Задачи циклической перестановки.
- Задачи сортировки элементов массива.
Заполнение | Анализ | Поиск | Перестановка |
Основной вопрос задач поиска — где в массиве находится элемент, обладающий нужным свойством. При этом свойство должно быть абсолютным: для определения пригодности элемента достаточно знать только этот элемент. Большинство задач поиска сводится к задаче — найти в массиве элемент с заданным значением.
Свойство |
Запись свойства |
четные | a[i] mod 2 = 0 |
нечетные |
a[i] mod 2 <> 0 |
кратные k |
a[i] mod k = 0 |
некратные k |
a[i] mod k <> 0 |
на четных местах |
i mod 2 = 0 |
запись числа заканчивается на цифру k | a[i] mod 10=k |
на нечетных местах |
i mod 2 <> 0 |
положительные |
a[i] > 0 |
неотрицательные |
a[i] >= 0 |
меньше х1 или больше х2 | (a [i]<x1) or (a [i]>x2) |
в интервале (х1; х2) |
(a [i]>x1) and (a [i]<x2) |
Задача 1. Найти номер первого по счету положительного элемента массива.
Использование цикла с параметром (.pas) |
|
Исходные данные: массивa, содержащий n вещественных чисел. |
|
program z; const n=30; type mas= array [1..n] of real; var a: mas; i, k: integer; begin k:=0; for i:=1 to n do read (a[i]); for i:=n downto 1 do if a[i]>0 then k:=i; if k=0 then writeln ('положительных элементов нет') else writeln(k); end. |
|
Использование цикла с постусловием (.pas) |
|
Исходные данные: массивa, содержащий n вещественных чисел. Результат: k - номер первого положительного элемента массива . Метод решения: - просматриваем массив, начиная с первого элемента, если находим положительный элемент, то переменной k присваиваем номер данного положительного элемента; -работа цикла заканчивается, если значение k изменилось или если просмотрен весь массив; - если значение k осталось равным 0, то положительных элементов в данном массиве нет. |
|
program z; const n=5; type mas= array [1..n] of real; var a: mas; i,k: integer; begin for i:=1 to n do read (a[i]); k:=0; i:=0; repeat i:=i+1; if a[i]>0 then k:=i; until (k>0) or (i=n); if k=0 then writeln ('положительных элементов нет') else writeln(k); end. |
|
Использование цикла с предусловием (.pas) |
|
Исходные данные: массивa, содержащий n вещественных чисел. Результат: k - номер первого положительного элемента массива . Метод решения: - просматриваем массив: если текущий элемент неположительный и i < n, то значение переменной i увеличиваем на 1, иначе если текущий элемент положительны, то переменной k присваиваем номер данного положительного элемента; - если значение k осталось равным 0, то положительных элементов в данном массиве нет. |
|
program z; const n=7; type mas= array [1..n] of real; var a: mas; i,k: integer; begin for i:=1 to n do read (a[i]); k:=0; i:=1; while (a[i]<=0) and (i<n) do i:=i+1; if a[i]>0 then k:=i; if k=0 then writeln ('положительных элементов нет') else writeln(k); end. |
Вопросы:
№ |
Фрагмент программы |
Блок - схема |
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.