Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ИНФОРМАТИКА_Паскаль.doc
Скачиваний:
7
Добавлен:
08.05.2019
Размер:
1.77 Mб
Скачать

10.4. Подсчет количества элементов по заданному условию

Условия отбора элементов могут быть различны: элементы неотрицательные, равные нулю, больше какого-либо значения и т.д. Алгоритм предусматривает последовательный просмотр всех элементов массива (выполняется как и раньше в цикле) и сравнение каждого с заданным условием. Подсчет числа элементов осуществляется программным счетчиком: выделенной переменной, значение которой увеличивается на 1 при выполнении условия отбора. Естественно, что перед началом просмотра счетчик должен быть обнулен.

Программа алгоритма подсчета числа положительных элементов для двумерного массива выглядит следующим образом:

N:=0; {Обнуление программного счетчика}

FORI:=1 TO 5 DO {Вложенные циклы для перебора всех индексов массива}

FORJ:=1 TO 10 DOIFMAS2[I,J] >0 THENN:=N+1; {Увеличение программного счетчика при выполнении условия}

WRITELN ('Положительных элементов в массивеMAS2= ',N); {Вывод количества положительных элементов массива}

Совершенно очевидно, что тип переменной N должен быть числовым.

10.5. Поиск минимального элемента массива

Естественно, что поиск связан с просмотром всех элементов массива. Однако тело цикла должно быть единым для сравнения всех элементов с минимальным значением, в том числе и для первого сравнения. Поэтому перед началом цикла минимумом назначается значение первого элемента массива, которое сохраняется в выделенной переменной MIN. Все оставшиеся элементы сравниваются с MIN. Если обнаруживается еще меньший элемент, то минимумом становится он (переменной MIN присваивается его значение). Если очередной элемент больше минимума, то значение MIN не переназначается.

Программа реализует алгоритм для линейного массива из 10 элементов:

MIN:=MAS1[1]; {Назначение минимального значения}

FORI:=1+1 TO 10 DO {Перебор индексов оставшихся элементов}

IFMAS1[I] <MINTHENMIN:=MAS1[I]; {Сравнение с минимальным значением и переназначение минимума, если найден еще меньший элемент}

WRITELN('Минимальное значение в массивеMAS1= ',MIN);

Поиск максимума осуществляется аналогично. Если необходимо указать еще и индекс минимального элемента, то одновременно с переназначением минимума необходимо запоминать соответствующий индекс в отдельной переменной.

10.6. Вычисление произведения ненулевых элементов массива

Задачи вычисления произведения решаются следующим образом. Устанавливается начальное значение произведения равное 1. Последовательно в цикле просматриваются все элементы массива. Если элемент не равен нулю, то он умножается на имеющееся уже произведение. После перемножения с первым найденным элементом произведение будет равно первому элементу. После второго – произведению первого на второй и т.д. Таким образом, произведение формируется последовательно по мере просмотра элементов массива.

В этом алгоритме есть один частный случай, который необходимо предусмотреть: отсутствие ненулевых элементов. В этом случае алгоритм должен проинформировать, что сомножителей не нашел. Поэтому требуется флажок, указывающий на отсутствие элементов по заданному условию. Его сначала процесса обнуляют, а в случае обнаружения сомножителя устанавливают в 1. После просмотра всех элементов массива флаг анализируется. Программа для алгоритма вычисления произведения ненулевых элементов линейного массива получится следующая (этап ввода данных не приведен для сокращения объема текста):

VAR MAS1: ARRAY[1.. 10] OF INTEGER;

I, FLAG,PROIZV: INTEGER;

BEGIN

FLAG:=0; {Неттребуемыхэлементоввмассиве}

PROIZV:=1; {Установка начального значения произведения}

FORI:=1 TO 10 DO {Перебор индексов элементов массива}

BEGIN

IFMAS1[I] <>0 THEN {Сравнение I-го элемента массива с условием}

BEGIN

PROIZV:=PROIZV*MAS1[I];

FLAG:=1; {Есть хотя бы один элемент}

END;

END;

IF FLAG=0 THEN WRITELN('Все элементы равны нулю')

ELSE WRITELN('Произведение = ',PROIZV);

END/

Если вычисляется сумма элементов по условию, то флаги не требуются, начальная сумма приравнивается нулю, а результирующая аналогично накапливается по мере просмотра элементов массива.