- Основные задачи
- Шпаргалка
- Вопросы и задания
Большинство задач на обработку массива сводятся к комбинированию следующих алгоритмов:
- Заполнение
- Заполнение случайными числами.
- Использование в формуле заполнения индекса элемента.
- Использование рекуррентного соотношения.
- Анализ
- Задачи подсчета — нахождение суммы или количества элементов таблицы, обладающих заданным свойством.
- Нахождение минимального или максимального среди элементов массива.
- Задачи, в которых требуется найти какие-то характеристики массива.
- Поиск
- Перестановка
- Задачи, в которых требуется поменять местами элементы массива.
- Задачи циклической перестановки.
- Задачи сортировки элементов массива.
Заполнение | Анализ | Поиск | Перестановка |
В задачах анализа массив уже задан, и требуется найти какие-то его характеристики. Наиболее типичные базовые задачи анализа — нахождение суммы элементов массива, подсчет количества элементов, обладающих заданным свойством, определение минимального и максимального элементов.
В предлагаемой классификации определение максимума и минимума, относятся к задачам анализа, так как максимальный элемент является характеристикой массива в целом. Поиск здесь ведется по относительному признаку (больше других), и опознать элемент как максимальный можно только просмотрев весь массив.
К основным задачам подсчёта относятся задачи на нахождение суммы, произведения элементов массива, а также, задачи на нахождение количества элементов, удовлетворяющих определенным условиям. При решении данных задач необходимо использовать следующие действия:
Название | Действие до цикла |
Действие в цикле | Действия после цикла |
сумма | s: = 0; | s: = s + a [ i ] | write ('s=',s); |
произведение | p:= 1 ; | p: = p * a [ i ] | write ('p=',p); |
количество | k: = 0; | if условие then k: = k + 1 | write ('k=',k); |
Задача 1. Составить программу нахождения суммы и произведения всех элементов одномерного массива.(.pas)
Исходные данные: массив x, содержащий n вещественных чисел.
Результат: сумма s и произведение p всех элементов массива.
Метод решения:
- начиная с нулевого значения суммы, добавляем поочередно новый элемент ряда и находим значение искомой суммы;
- начиная с начального, единичного произведения, находим искомое произведение, умножая текущее значение произведения на очередной элемент ряда.
program SPMas; |
Задача 2. Составить программу нахождения количества элементов целочисленного массива с нечетными индексами, запись которых оканчивается на 5. (.pas)
Исходные данные: массив a, содержащий n целых чисел.
Результат: k - количество элементов массива, запись которых оканчивается на 5 и имеющих нечетные индексы.
Метод решения:
- в цикле: вводим элемент массива, если он удовлетворяют условию задачи, то значение переменной k увеличиваем на 1, затем вводим следующий элемент.
- выводим k.
program kol; |
Задача 3. Найти среднее арифметическое всех элементов массива.(.pas)
Исходные данные: массив x, содержащий n вещественных чисел.
Результат: sr - среднее арифметическое всех элементов массива.
Метод решения:
- начиная с нулевого значения суммы sum, добавляем поочередно новый элемент ряда и находим значение суммы всех элементов массива;
- среднее арифметическое sr находим делением sum на n.
program SPMas; |
При решении задач на нахождение максимального или минимального элемента необходимо использовать следующие действия:
Название | Действие до цикла | Цикл | Действия после цикла |
Поиск максимального (минимального) элемента произвольного массива |
|||
максимум | max: = a [ 1 ]; | for i:=2 to n do |
write ('max=',max) ; |
максимум | n_max:=1; |
for i:=2 to n do if a [ i ] > a[n_max] then n_max:= i; |
write ('max=',a [ n_max ]) ; |
минимум | min : = a [ 1 ]; | for i:=2 to n do if a [ i ] < min then min:=a [ i ]; |
write ('min =',min) ; |
Поиск максимального (минимального) элемента массива, про значения элементов которого известно, что они принадлежат определенному диапазону [a; b]. |
|||
максимум | max: = a; | for i:=1 to n do |
write ('max=',max) ; |
минимум | min : = b; | for i:=1 to n do if a [ i ] < min then min:=a [ i ]; |
write ('min =',min) ; |
Поиск номера максимального элемента произвольного массива | |||
номер максимального |
n_max:=1; | for i:=2 to n do if a [ i ] >a [ n_max] then n_max:= i ; |
write ('n_max =',n_max) ; |
Задача 4. Составить программу нахождения максимального элемента произвольного одномерного массива.(.pas)
Исходные данные: массив x, содержащий m вещественных чисел.
Результат: максимальный элемент массива max.
Метод решения:
- в качестве начального значения максимума возьмем значение первого элемента массива;
- начиная со второго, переберем все элементы и проверим, есть ли элемент, который больше, чем этот выбранный максимум. Если такой нашелся - будем считать его максимальным и сравним с остальными.
program maximum; const n = 7; var x: array [1..n] of real; max: real; i: integer; begin for i:=1 to n do read (x[i]); max:=x[1]; for i:=2 to n do if (x [i]>max) then max:= x [ i ]; writeln('max = ',max); end. |
Задача 5. Составить программу нахождения номера максимального элемента произвольного одномерного массива.(.pas)
Исходные данные: массив a, содержащий n вещественных чисел .
Результат: n_max - номер максимального элемента массива.
Метод решения:
- в программе можно выделить две части: заполнение массива числами (первый цикл for) и непосредственно поиск индекса максимального элемента (второй цикл for);
- изначально делается предположение, что первый элемент массива и есть максимум. Поэтому переменной n_max присваивается значение 1 (т.е. указатель на первый элемент массива), а max[n_max] – непосредственно значение, хранящееся в первой ячейке массива;
- начиная со второго элемента, каждое очередное значение массива сравнивается со значением max[n_max]. В случае, если текущее значение массива больше, чем хранящиеся в n_max, происходит новое присваивание индекса.
program numer_max; |
Вопросы:
Задача 6. Проверить, что массив упорядочен по возрастанию.(.pas)
Исходные данные: массив a, содержащий n целых чисел .
Результат: сообщение "массив упорядочен " или сообщение "массив неупорядочен".
Метод решения:
- введем дополнительную переменную-флажок flag (критерий упорядоченности). Присвоим ей начальное значение, равное нулю.
- посчитаем в каком количестве случаев порядок элементов в паре будет верным. Для этого переберём все соседние пары элементов (их будет n-1). Если в паре элемент с меньшим номером оказался больше, чем элемент с большим номером, то увеличим на единицу переменную-флажок flag.
- после окончания цикла проверим, изменилось ли значение переменной flag. Если оно осталось равным нулю - значит, во всех парах порядок верный и массив упорядочен. Иначе массив неупорядочен.
program z; const n=5; var flag,i: integer; a: array [1..n] of real; begin flag:=0; for i:=1 to n do read(a[i]); for i:=1 to n-1 do if a[i]>a[i+1] then flag:=flag+1; if flag=0 then writeln ('упорядочен') else writeln ('неупорядочен'); end. |
Задачи:
- Пусть известно, что в автопарке, имеется 21 машина марки ТАТРА. Каждый из автомобилей перевез за день определенный объем груза. Определить суммарный объем перевозок грузов за день (.pas).
- Известна среднегодовая зарплата 15 сотрудников одного предприятия. Найти величину наименьшей среднемесячной зарплаты этих сотрудников (.pas).
- Известны результаты экзамена 15 выпускников школы по истории. Определить, сколько выпускников сдали экзамен на 5 (.pas).
- На вход программе подаются сведения о сдаче экзаменов учениками 9-х классов некоторой средней школы. В первой строке сообщается количество учеников N, которое не меньше 10, но не превосходит 100, каждая из следующих N строк имеет следующий формат: <Фамилия> <Имя> <оценки>, где <Фамилия> – строка, состоящая не более чем из 20 символов, <Имя> – строка, состоящая не более чем из 15 символов, <оценки> – через пробел три целых числа, соответствующие оценкам по пятибалльной системе. <Фамилия> и <Имя>, а также <Имя> и <оценки> разделены одним пробелом. Пример входной строки: Иванов Петр 4 5 4. Требуется написать программу на языке Паскаль или Бейсик, которая будет выводить на экран фамилии и имена трех лучших по среднему баллу учеников. Если среди остальных есть ученики, набравшие тот же средний балл, что и один из трех лучших, то следует вывести и их фамилии и имена.(.exe)(.pas)
;
№ |
Фрагмент программы |
Блок - схема |
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 баллов). Гарантируется, что хотя бы один ученик в классе успешно сдал экзамен. Исходные данные объявлены так, как показано ниже. Использовать другие переменные запрещается.
Задача 2 (..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. Опишите на русском языке или на одном из языков программирования алгоритм, позволяющий найти и вывести минимальное значение среди элементов массива, которые имеют чётное значение и не делятся на три. Гарантируется, что в исходном массиве есть хотя бы один элемент, значение которого чётно и не кратно трем. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но использовать все описанные переменные не обязательно.
constN = 20;
var
a: array [1..N] of integer;
i, j, min: integer;
begin
for i := 1 to N do
readln(a[i]);
….......
end.