АНАЛИЗ БЛОК-СХЕМ

Блок-схемы используются для графического представления алгоритма. Они имеют вид рисунка, состоящего из различных геометрических фигур и стрелок, идущих от одной фигуры к другой. Внутри каждой геометрической фигуры содержится оператор программы.
Приняты следующие обозначения:
1) овал - оператора начала/конца программы,
2) параллелограмм - оператор ввода/вывода данных,
3) прямоугольник - оператор присваивания,
4) ромб - оператор условного перехода,
5) шестиугольник - оператор цикла.
От каждого оператора отходит только одна стрелка, кроме оператора условия и оператора цикла. От оператора условия отходят две стрелки, на одной из которых написано "да", а на другой - "нет". От оператора цикла также отходят две стрелки: одна вниз - для выполнении итерации (действия) цикла, другая - в сторону - для выхода из цикла.
Блок-схема имеет следующий смысл. Программа, представленная блок-схемой, начинает выполняться с оператора "начало" (овал, внутри которого написано слово "начало"). Этот оператор ничего не делает. Затем выполняется оператор, к которому идет стрелка, выходящая из оператора "начало".
Если выполняется оператор присваивания, то указанным переменным присваиваются указанные значения. Переменные перед использованием не описываются и заводятся при первом присваивании.
Если выполняется оператор условного перехода, то вычисляется значение условия, которое содержится в операторе, и затем происходит переход к другому оператору по той стрелке, на которой написано вычисленное значение ("да" или "нет"),
Анализ блок-схем проводится при заданных значениях, вводимых в программу оператором ввода-
Например, рассмотрим следующую задачу.
Простая задача. Найти результат выполнения представленной блок-схемы для входных данных:

    а) 15; б)-71; в)0;

и найти результат выполнения блок-схемы в общем случае.

Решение а).
После выполнения оператора "начало" переходим по стрелке к оператору "ввод".
Оператор "ввод" вводит входные данные (в нашей задаче: 15) в переменную N (то есть в переменную, имя которой указано после слова "ввод"). В результате выполнения этого оператора заводится переменная N и ей присваивается значение 15.
Переходим по стрелке к оператору условного перехода N>0.
Вычисляем значение выражения "N>0". Поскольку N равно 15 и 15 больше нуля, то выражение "N>0" и его значение равно "да". Переходим по правой стрелке (на которой написано значение выражения, то есть "да") к оператору вывода "печать 1".
Оператор "печать 1" выводит на принтер число 1.
Ответ а). Результат выполнения блок-схемы при входных данных 15 - напечатанное число 1.
Решение б).
Аналогично решению а). Отличается тем, что выражение "N>0" для введенного значения N (-71) - ложно, следовательно, значение выражения равно "нет". Переходим по левой стрелке, на которой написано "нет", к оператору "печать 0".
Оператор "печать 0" выводит на печатающее устройство число 0.
Ответ б). Результат выполнения блок-схемы при входных данных -71 - напечатанное число 0.
Решение в).
Аналогично решению а). Отличается, как и решение б), тем, что выражение "N>0" для введенного значения N (равное 0) - ложно, следовательно, значение выражения равно "нет". Переходим по левой стрелке, на которой написано "нет", к оператору "печать 0".
Оператор "печать 0" выводит на печатающее устройство число 0.
Ответ в). Результат выполнения блок-схемы при входных данных 0 - напечатанное число 0.
После выполнения блок-схемы для входных данных 15, -71 и 0 легко увидеть, что результатом работы блок схемы для положительного числа будет напечатанное число 1, а для всех остальных чисел (для отрицательных чисел и для 0) - печать числа 0.
Задача. Определить результат работы блок-схемы для входных данных: 1, 1, 3, 4, 3, 5, 6, 8, 10, 4, 5, 6, 1, -2, 3, 2, 1, 2 и описать поведение блок-схемы в общем случае.

  •  
    •  
      •  
        •  

После начала программы выполняется оператор "N=0,K=0". В результате появляются переменные N и К, которым присваивается значение 0.
Затем вводятся 3 числа, которые присваиваются переменным х, у и z. При наших входных данных получается х = 1, у = 1, z=3. Проверяем истинность выражения "х>0 и у>о и z>0". Поскольку 1 > 0 и 3 > 0, то выражение истинно и его значение равно "да". Переходим по стрелке вниз.
Выполняем оператор "К=К+1". В результате значение К становится равным 1. Переходим по стрелке вниз.
Проверяем истинность выражения "xx+yy=zz". Подставляем значения х,у и z: 11+11=33. Поскольку это равенство неверно, то значение выражения равно "нет". Переходим по стрелке влево.
Оператор ввода считывает из потока входных данных следующие непрочитанные значения и присваивает их переменным х, у, z. В результате значения переменных станут равными х=4, у=3, z=5. Переходим по стрелке вниз.
Проверяем истинность выражения "х>0 и у>0 и z>0". Поскольку 4>0,3>0и5>0, то выражение истинно и его значение равно "да". Переходим по стрелке вниз.
Выполняем оператор "К=К+1". В результате значение К становится равным 2. Переходим по стрелке вниз к оператору условного перехода.
В этом операторе для текущих значений переменных выражение "xx+yy=zz" эквивалентно выражению "44+33== 55". Это выражение истинно, его значение равно "да". Поэтому переходим по стрелке, на которой написано "да" (по правой стрелке) к оператору "N=N+1".
Оператор "N=N+1" присваивает переменной N ее значение, увеличенное на 1. Поскольку значение переменной N на настоящий момент равно 0, то ей будет присвоено число 0 + 1, то есть 1. Таким образом, теперь значение переменной N равно 1. Переходим по стрелке вверх к оператору ввода.
Оператор ввода считывает следующие входные данные. Теперь х=6, у=8, z=10. Переходим по стрелке вниз.
Проверяем истинность выражения "х>0 и у>0 и z>0". Поскольку 6 > 0, 8 > 0 и 10 > 0, то выражение истинно и его значение равно "да". Переходим по стрелке вниз.
Оператор "К=К+1" увеличивает значение переменной К на 1. Поскольку в настоящий момент значение К равно 2, то К присваивается 3. Переходим по стрелке вниз.
В операторе условного перехода для текущих значений переменных выражение "xx+yy=zz" эквивалентно выражению "66+88 == 1010". Это выражение истинно (так как 36 + 64 = 100), его значение равно "да". Поэтому переходим по стрелке, на которой написано "да" (по правой стрелке) к оператору "N=N+1".
Оператор "N=N+1" эквивалентен N = 1+1" так как в настоящий момент значение N равно 1. После выполнения этого оператора значение N становится равным 2. Переходим по стрелке вверх.
Оператор ввода считывает следующие входные данные. Теперь х=4, у=5, z=6. Переходим по стрелке вниз.
Проверяем истинность выражения "х>0 и у>0 и z>0". Поскольку 4>0,3>0и5>0, то выражение истинно и его значение равно "да". Переходим по стрелке вниз.
Оператор "К=К+1" увеличивает значение переменной К на 1. Поскольку в настоящий момент значение К равно 3, то К присваивается 4. Переходим по стрелке вниз.
В операторе условного перехода для текущих значений переменных выражение "xx+yy=zz" эквивалентно выражению "44+55=66". Это выражение ложно (так как 16 + 25 не равно 36), его значение равно "нет". Поэтому переходим по стрелке, на которой написано "нет" (по левой стрелке) к оператору ввода.
Оператор ввода считывает следующие входные данные. Теперь x=1, у=-2, z=3. Переходим по стрелке вниз.
Проверяем истинность выражения "х>0 и у>0 и z>0". Поскольку -2< 0, то выражение ложно и его значение равно "нет". Переходим по стрелке вправо к оператору вывода.
Оператор вывода печатает значения переменных N и К. Поскольку в данный момент N=2 и К=4, то будут напечатаны числа 4 и 2.
Ответ. Результатом работы блок-схемы для заданного потока входных данных будет вывод на печать чисел 4 и 2.
Заметьте, что работа блок-схемы прекратилась после прочтения отрицательного числа и, таким образом, не все входные данные были прочитаны и обработаны.
В общем случае блок-схема производит чтение из потока входных данных троек положительных чисел, подсчет числа прочитанных троек и количества таких прочитанных троек, которые удовлетворяют условию "xx+yy=zz", то есть, по теореме Пифагора, являются длинами сторон прямоугольного треугольника

Другие записи

10.06.2016. СПРАВОЧНЫЕ МАТЕРИАЛЫ. Обозначения знаков операций и стандартных функций
  Название операции или функции Форма записи сложение вычитание умножение деление возведение в степень х + ух - ух ух / Ух у корень квадратный sqrt(x) абсолютная…
10.06.2016. СПРАВОЧНЫЕ МАТЕРИАЛЫ: Команды алгоритмического языка
  Команды Примеры а) оператор ввода ввод имена величин ввод N, К, РР б) оператор вывода вывод тексты, имена величин, выражения вывод N, К, РР в) оператор присваивания имя…