- •3. Система программитрования турбо паскаль
- •3.1 Окно среды разработчика
- •3.2. Элементы диалоговой среды
- •3.3. Команды редактора
- •3.4. Модули
- •4. Общие сведения о языке паскаль
- •4.1 Алфавит языка
- •4.2. Типы данных в TurboPascal 7.0
- •4.3. Операции и выражения в языке Паскаль
- •4.4 Стандартные функции в языке Паскаль
- •5. Линейные алгоритмы
- •5.1. Структура программы на языке Паскаль
- •5.2. Конструкция «следование»
- •6. Разветвляющиеся алгоритмы
- •And, * (умножение), / (деление), div, mod;
- •6.1. Операторы условных переходов
- •Var a, b, c : Real; lv : Boolean;
- •Var a, b, c : Real; lv : Boolean;
- •Var X, y : Real;
- •6.2. Оператор безусловного перехода
- •Var n, p, X : Real;
- •20: WriteLn('Факториал числа ' , n:4:2,' равен ' ,p:4:2);
- •7. Циклические алгоритмы
- •7.1. Цикл с предусловием While
- •X, xn, xk, dx, y, s, p: real;
- •7.2. Цикл с постусловием repeat
- •X1, x0, X, eps: real;
- •7.3. Цикл с параметром for
- •I: integer; c: char;
- •7.4. Принудительное завершение цикла
- •X, xn, xk, dx: real;
- •8. Символьный тип
- •8.1. Особенности символьного типа
- •8.2. Объявление символьной переменной
- •8.3. Операции с символами
- •Строковые переменные
- •9.1. Определение и типы строк
- •9.2. Упакованный строковый тип
- •9.3. Строковый тип
- •9.5. Примеры работы со строками
- •9.6. Индивидуальные задания по работе со строками и символами
- •10. Массивы
- •10.1. Организация данных в массиве
- •10.2. Объявление массивов
- •10.3. Ввод и вывод значений элементов массива
- •10.4. Подсчет количества элементов по заданному условию
- •10.5. Поиск минимального элемента массива
- •10.6. Вычисление произведения ненулевых элементов массива
- •10.7. Сортировка элементов массива
- •10.8. Заполнение массива случайными числами
- •10. 9. Индивидуальные задания по работе с массивам
- •11. Процедуры и функции
- •11.1. Понятие подпрограммы
- •11.2. Описание процедуры
- •11.3. Описание функции
- •11.4. Области действия имен
- •11.5. Индивидуальные задания по разработке процедур и функций
- •Var k,l; real;
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/
Если вычисляется сумма элементов по условию, то флаги не требуются, начальная сумма приравнивается нулю, а результирующая аналогично накапливается по мере просмотра элементов массива.