Пример 2. Цикл с монотонным изменением параметра.
Составить блок-схему вычисления значений функции y= -364*x2/(x5-1) при изменении x от a до b с шагом h.
При решении такого типа задач мы получаем таблицу значений функции y. Поэтому, такие задачи называются задачами табулирования функции. Циклы с монотонным изменением параметра можно организовать двумя способами:
1. проверка выхода из цикла осуществляется по достижении конца интервала изменения аргумента.
Цикл сложный, т.к. внутри цикла есть разветвление, без переадресации, т.к. значения параметра x, шаг изменения параметра h и значения функции y находятся в фиксированных полях памяти.
Телом цикла являются блоки 4 - 9.
Тело цикла выполняется до тех пор, пока значение переменной цикла x не превысит конечное значение b. (Рис.1)
2. выход из цикла осуществляется по заданному числу повторений, т.е. по количеству точек, на которые разбивается интервал, в зависимости от величины шага h. (Рис.2)
Число точек, на которые разбивается интервал, определяется по формуле
|
|
N=[(b-a)/h]+1,
где a, b - начальное и конечное значения интервала, h-шаг изменения параметра x, [] обозначают антье (entier) - целую часть числа, не превосходящую данного.
Например, если a=-10,b=10,h=0.1,то N=[(10+10)/0.1]+1 = 201
14. Циклы с переадресацией
Цикл, содержащий операторы, изменяющие адреса операндов при каждом его повторении, называется циклом с переадресацией. С помощью таких циклов на ЭВМ реализуется обработка массивов.
Массив - это упорядоченная совокупность элементов, обладающих одинаковыми свойствами.
Операнды - это данные любой природы, над которыми производятся действия в программе.
15. Примеры алгоритмы обработки массивов
Главной особенностью алгоритмов обработки одномерных массивов является то, что обработка массивов должна производиться поэлементно. Это означает, что надо организовать такой циклический алгоритм, который обеспечит возможность обращения к необходимым элементам массива (или массивов) и их последующую обработку. Именно поэтому в качестве переменной цикла обычно используется индекс элементов.
В рассматриваемых ниже алгоритмах обработки массивов процессы ввода и вывода элементов массива изображаются одним блоком, который подробно можно изобразить следующим образом:
Схема вывода элементов массива аналогична схеме ввода и отличается от нее только тем, что отсутствует блок ввода n.
В момент выхода из цикла переменная цикла имеет значение, превышающее максимально допустимое (i=n+1).
Пример 1.Составить блок-схему вычисления суммы S и произведения P элементов одномерного массива a1, a2, a3,…, an.
|
|
Пример 2. Найти сумму и количество компонент вектора a (a1, a2, a3,…, an), принадлежащих отрезку [c, d], а все компоненты, меньшие с, заменить на единицу.
Пример 3.Дан вектор X(x1, x2, x3,…, xn).Если у вектора есть хотя бы одна компонента < D, то все отрицательные компоненты заменить их квадратами, оставив остальные без изменения. В противном случае, т.е., если у вектора нет компонент больших числа D, помножить вектор на число С.
Пример 4.Дан вектор X(x1, x2, x3,…, xn).Найти максимальный элемент и его номер.
17. Вложенные циклы
Одним из видов сложных циклов являются вложенные циклы, которые содержат несколько включенных друг в друга циклов. Среди циклов различают внешние и внутренние циклы.
Цикл, который не входит в другие циклы, называется внешним.
Цикл, который включается в другие циклы, называется внутренним.
Каждый из этих циклов имеет элементы, характерные для простых циклов: счетчики циклов, блоки изменения параметров, рабочую часть и др.
Особенность выполнения сложного цикла состоит в том, что за одно исполнение внешнего цикла внутренний цикл повторяется многократно.
Правильное повторное исполнение внутреннего цикла возможно только в том случае, если изменяемые в процессе вычислений параметры этого цикла будут восстановлены в их первоначальном виде, т.е. будут восстановлены счетчики, индексы, рабочие поля и другие изменяемые элементы.
Это достигается тем, что во внешний цикл вводится специальный блок, который восстанавливает изменяемые параметры внутреннего цикла. Перед каждым обращением к внутреннему циклу должен выполняться блок восстановления параметров.
Типичным примером тройного цикла является умножение матриц: даны две вещественные квадратные матрицы а(n*n) и b(n*n).Получить матрицу с(n*n),равную произведению двух матриц a и b по формуле: сij= ai k*bk j; (i,j=1,n)
Элементы матриц вводятся и располагаются в памяти машины последовательно по строкам.
Ввод элементов матрицы осуществляется двойным циклом
(блоки 2-9).
Блок 2 - ввод размерности матриц,
блок 3 - задает начальное значение переменной i - номера строки,
блок 4 - задает начальное значение переменной j - номера столбца,
блок 5 - ввод значений элементов матриц a, b (поочередно, по одному),
блок 6 - увеличение номера столбца,
блок 7 - проверка условия выхода из внутреннего цикла,
блок 8 - увеличение номера строки,
блок 9 - проверка условия выхода из внешнего цикла - конец цикла ввода по условию "нет".
Внешний цикл по i (блоки 10-19) обеспечивает вычисление всех элементов матрицы c.
Внутренний цикл по j (блоки 11-17) обеспечивает вычисление элементов одной строки матрицы c.
Внутренний цикл по k (блоки 12-15) обеспечивает вычисление одного элемента матрицы c. Элемент на пересечении строки с номером i и столбца с номером j матрицы c получается путем суммирования произведений n элементов i-той строки матрицы a на соответствующие n элементов j-того столбца матрицы b. Это достигается перебором всех элементов i-той строки и j-того столбца с помощью индекса k.
Внешний цикл по i повторяется n раз, внутренний цикл по j повторяется n2 раз, внутренний цикл по k повторяется n3 раз.
Блок 20 - вывод результирующей матрицы c на печать. Осуществляется двойным циклом, аналогично развернутой блок-схеме ввода элементов матриц a и b (блоки 3-9).