Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
25
Добавлен:
31.03.2015
Размер:
59.39 Кб
Скачать

8.3. Типовые действия над элементами массива

Рассмотрим следующие типовые действия над массивами:

-  ввод массива

-  просмотр элементов массива ( поиск  в массиве),

-  накопление (суммы, произведения) в массиве,

-  нахождение  экстремального (минимального, максимального) элемента в массиве.

Метод обработки массивов записывается как композиция этих действий. Будем использовать математическую символику при записи метода. Каждое действие раскрывается в виде типового алгоритма.

  1. Ввод массива

{Программа зависит от данных}

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 вводится

клавиатуры из файла, вместе с массивом

Спецификация

  1. Задача. Ввести массив А.

  2. Входные данные.

вещ {Ai} i=1N - массив

цел N - длина массива

N ≤ Nmax = 100

Input

Afile

файл

Спецификация

  1. Задача. Ввести массив А.

  2. Входные данные.

вещ {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)

 Программа

  1. Поиск в массиве элемента с заданным свойством

Задача. Найти в массиве А номер элемента, обладающего некоторым свойством 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)

Программа

 

  1. Накопление суммы (произведения) в массиве

Задача. Найти сумму (произведение) элементов массива.

Рассмотрим конкретные примеры.

Спецификация

Пример 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

  1. Нахождение экстремума в массиве

Задача. Найти максимальный (минимальный) элемент массива.

Рассмотрим конкретный пример.

Спецификация

Пример 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, A2)

. . .

Amax = max (Amax, Ai)

. . .

Amax = max (Amax, AN)

Соседние файлы в папке Metod1_2010