АВТИ информатика по паскалю / Metod1_2010 / Тема8.3.Массивы
.doc8.3. Типовые действия над элементами массива
Рассмотрим следующие типовые действия над массивами:
- ввод массива
- просмотр элементов массива ( поиск в массиве),
- накопление (суммы, произведения) в массиве,
- нахождение экстремального (минимального, максимального) элемента в массиве.
Метод обработки массивов записывается как композиция этих действий. Будем использовать математическую символику при записи метода. Каждое действие раскрывается в виде типового алгоритма.
-
Ввод массива
{Программа зависит
от данных}
Program example1 (Afile); const
N=20; type
vector = array[1..N] of real;
var i :
1..N; A : vector; Afile : text; begin
{инициализация
файла
Afile}
for i:=1 to N do
read (Afile,A[i]);
readln(Afile);
close
(Afile) end.
Пример 3.
Спецификация
1. Задача. Ввести массив А.
2. Входные данные.
вещ {Ai} i=1N - одномерный массив
N = 20
Afile
<A1>
<A2>
. . . <AN>
файл
Пример 4а. Длина массива N вводится с Пример 4б. Длина массива N вводится
клавиатуры из файла, вместе с массивом
Задача. Ввести
массив А.
Входные данные. вещ
{Ai}
i=1N
- массив
цел
N - длина
массива
N
≤ Nmax
= 100 Input
Afile
файл
Задача. Ввести
массив А.
Входные данные. вещ
{Ai}
i=1N
- массив
цел
N - длина
массива
N
≤ Nmax
= 100 Afile
файлСпецификация
Спецификация
<N> <N>
<A1>
<A2>
. . . <AN>
<A1>
<A2>
. . . <AN>
Замечание. В памяти под массив выделяется 100 ячеек, а заполняется N ячеек.
Программа
4а
{Программа
не зависит от данных} Program
prog_4a (Afile); const
Nmax=100; type
vector = array [1..Nmax] of real; var
N, i: 1. .Nmax; Afile:text; A:
vector; begin
Writeln
(‘Введите
N’); readln
(N); for
i:=1 to N do read
(Afile, A[N]); readln
(Afile); close
(Afile) end.
Программа
4б
{Программа
не зависит от данных} Program
prog_4b (Afile); const
Nmax=100; type
vector = array [1..Nmax] of real; var
N, i: 1. .Nmax; Afile:text; A:
vector; begin
readln
(Afile, N); for
i:=1 to N do read
(Afile, A[N]); readln
(Afile); close
(Afile) end.
2. Поиск в массиве элементов с заданным свойством
Задача. Найти в массиве А элементы, обладающие свойством Р, которое можно задать в виде функции:
Р(Ai)=true, если элемент Аi обладает свойством P,
Р(Ai)=false, если элемент Аi не обладает свойством P.
Например. Если Р(Ai) ≡ Ai >0, то в этом случае задача примет конкретную формулировку.
Спецификация
Пример 5. Найти и напечатать номера всех положительных элементов массива А.
Метод. Поиск в массиве элементов Ai >0, i=1,...,N.
for
i=1 to N do
{Анализ
i-го
элемента}
if
A[i]
>0 then
writeln (i)
-
Поиск в массиве элемента с заданным свойством
Задача. Найти в массиве А номер элемента, обладающего некоторым свойством Q, которое задано в виде функции:
Q(Ai)=true, если элемент Аi обладает свойством Q,
Qf(Ai)=false, если элемент Аi не обладает свойством Q.
Эта задача отличается от предыдущей тем, что достаточно найти один элемент. Очевидно, что в зависимости от того, в каком направлении вести просмотр: начиная с первого или с последнего элемента массива, результат в общем случае будет разным.
Если Q(Ai) ≡ Ai >0, этом случае задача примет конкретную формулировку.
Спецификация
Пример 6. Найти и напечатать номер положительного элемента массива А.
Метод. Поиск в массиве элементов Ai >0, i=1,...,N ( или i=N,...,1).
Алгоритм
Рассмотрим 2 способа завершения поиска элемента Ai >0.
а) Просматриваем все элементы массива от первого до последнего, запоминая номер строки i, если Ai >0.
б) Завершаем просмотр при Ai >0, если в массиве такой элемент есть и, если такого нет, то массив просматривается до конца.
Очевидно, что способ б) более эффективен, так как исключает бесполезный просмотр массива после элемента Ai >0. Составим для него программу. Используем метод объединения условий для построения структурирования цикла.
i:=1;
while
(i<=N) and (A[i] <= 0) do i:=i+1;
if
i > N then
writeln('Элемента
A[i]>0 в массиве нет' )
else
1
writeln('Номер
элемента
A[i]>0 :', i:3)
Программа
-
Накопление суммы (произведения) в массиве
Задача. Найти сумму (произведение) элементов массива.
Рассмотрим конкретные примеры.
Спецификация
Пример 7a. Найти среднее арифметическое P элементов массива А.
N
Метод . P = S/N, где S = ∑ Ai
i=1
Программа
Происходит
накопление суммы S путем последовательного
добавления в S элементов массива от
A[1] до A[N]. S:=0;
for
i:=1 to N do
S:=S+A[i];
P:=S/N
-
Нахождение экстремума в массиве
Задача. Найти максимальный (минимальный) элемент массива.
Рассмотрим конкретный пример.
Спецификация
Пример 8. Найти значение максимального элемента массива его номер.
Входные данные. вещ {Ai} i=1N - массив, -1000< Ai <1000
цел N - длина массива, N <= Nmax = 100
Выходные данные. вещ Amax - максимальный элемент
цел k - номер максимального элемента
Метод. Аmax = max (A1 , A2 , . . . ,AN ),
k=i, где Ai = Amax, i=1,…,N
Метод
На каждом шаге ищется локальный максимум и запоминается его номер:
Amax = max (Amax, A1) Программа
Amax:=-1000;
k:=0; for
i:=1 to N do
{Поиск
локального
максимума}
if
A[i]>Amax then
begin
Amax:=A[i]; k:=i end
. . .
Amax = max (Amax, Ai)
. . .
Amax = max (Amax, AN)