Программист по неволе 24 / 24 / 8 Регистрация: 22.04.2015 Сообщений: 476 Записей в блоге: 1 |
|
1 |
|
Каким элементом блок-схемы описать вывод сообщения об ошибке?17.06.2015, 12:05. Показов 1272. Ответов 6
Каким элементом блок-схемы описать вывод сообщения об ошибке?
0 |
Почетный модератор 64291 / 47589 / 32740 Регистрация: 18.05.2008 Сообщений: 115,181 |
|
17.06.2015, 12:45 |
2 |
вывод сообщения об ошибке Первое слово вроде отвечает на вопрос…
1 |
Программист по неволе 24 / 24 / 8 Регистрация: 22.04.2015 Сообщений: 476 Записей в блоге: 1 |
|
17.06.2015, 12:51 [ТС] |
3 |
Получается ввод-вывод данных? Но разве подобного рода сообщение относится к данным? Ведь одно из свойств данных быть пригодными для обработки? Какого типа тогда эти данные? Добавлено через 38 секунд
Первое слово просто цитата
0 |
Почетный модератор 64291 / 47589 / 32740 Регистрация: 18.05.2008 Сообщений: 115,181 |
|
17.06.2015, 12:52 |
4 |
Вот пример Изображения
1 |
Почетный модератор 64291 / 47589 / 32740 Регистрация: 18.05.2008 Сообщений: 115,181 |
|
17.06.2015, 12:53 |
5 |
Ошибочно на вводе написал y.
0 |
Программист по неволе 24 / 24 / 8 Регистрация: 22.04.2015 Сообщений: 476 Записей в блоге: 1 |
|
17.06.2015, 13:01 [ТС] |
6 |
А все таки к какому типу данных будет принадлежать оное? Текстовой?
Вот
0 |
Почетный модератор 64291 / 47589 / 32740 Регистрация: 18.05.2008 Сообщений: 115,181 |
|
17.06.2015, 13:03 |
7 |
к какому типу данных будет принадлежать оное? Извини, в нашем дурдоме это не проходили..
0 |
Занятие 5. Выполнение блок-схем
Блок-схема сама по себе не содержит ответа. Чтобы получить результат, нужно выполнить блок-схему.
Выполнение блок-схемы – это прохождение всех действий блок-схемы согласно алгоритму от блока Начало до блока Конец для получения результата.
Если блок-схема составлена корректно, то, выполнив ее, человек получит ответ к своей задаче. Если же при составлении блок-схемы были допущены ошибки, то исполнитель либо вообще не дойдет до блока Конец, либо получит неверный ответ.
Для выполнения нам понадобится поле для расчетов (аналог «оперативной памяти») и поле для вывода результата (аналог экрана для вывода данных). Экран будем показывать несколько раз в зависимости от вывода новых данных на экране.
Выполнение блок-схемы для примера 3. Даны числа . Вычислить сумму
и разность
чисел
и
.
Выполнение блок-схемы приведем в табл. 2.2.
Расчеты:
Начало a=2 b=7 S=a+b={подставляем значения a и b}=2+7=9 R=a-b={подставляем значения a и b}=2-7=-5 Выводим на экран S=9, R=-5:
Конец. |
Выполнение блок-схемы для примера 6. Даны числа . Вычислить сумму
и разность
чисел
и
. Сравнить полученные значения
и
и указать большее из них.
Выполнение блок-схемы приведем в табл. 2.3.
Расчеты: Начало a=2 b=7 S=a+b=2+7=9 R=a-b=2-7=-5 Выводим на экран S=9, R=-5:
S>R 9>-5 да, верно Выводим на экран "Max S":
Конец. |
Выполнение блок-схемы для примера 9. Даны числа . Известно, что число
меняется от -10 до 10 с шагом 5,
и не изменяется. Вычислить сумму
и разность
чисел
и
для всех значений
и
.
Выполнение блок-схемы с предусловием приведем в табл. 2.4.
Расчеты: Начало b=7 a=-10 a≤10 -10≤10 да, верно S=a+b=-10+7=-3 R=a-b=-10-7=-17 Вывод S, R
a=a+5=-10+5=-5 {Идем по стрелке вверх} a≤10 -5≤10 да, верно S=a+b=-5+7=2 R=a-b=-5-7=-12 Вывод S, R
a=a+5=-5+5=0 {Идем по стрелке вверх} a≤10 0≤10 да, верно S=a+b=0+7=7 R=a-b=0-7=-7 Вывод S, R
a=a+5=0+5=5 {Идем по стрелке вверх} a≤10 5≤10 да, верно S=a+b=5+7=12 R=a-b=5-7=-2 Вывод S, R
a=a+5=5+5=10 {Идем по стрелке вверх} a≤10 10≤10 да, верно S=a+b=10+7=17 R=a-b=10-7=3 Вывод S, R
a=a+5=10+5=15 {Идем по стрелке вверх} a≤10 15≤10 нет, ложно {выходим из цикла} Конец. |
Выполнение блок-схемы с постусловием приведем в табл. 2.5.
Расчеты: Начало b=7 a=-10 S=a+b=-10+7=-3 R=a-b=-10-7=-17 Вывод S, R
a=a+5=-10+5=-5 a≤10 -5≤10 да, верно {Идем по стрелке вверх} S=a+b=-5+7=2 R=a-b=-5-7=-12 Вывод S, R
a=a+5=-5+5=0 a≤10 0≤10 да, верно {Идем по стрелке вверх} S=a+b=0+7=7 R=a-b=0-7=-7 Вывод S, R
a=a+5=0+5=5 a≤10 5≤10 да, верно {Идем по стрелке вверх} S=a+b=5+7=12 R=a-b=5-7=-2 Вывод S, R
a=a+5=5+5=10 a≤10 10≤10 да, верно {Идем по стрелке вверх} S=a+b=10+7=17 R=a-b=10-7=3 Вывод S, R
a=a+5=10+5=15 a≤10 15≤10 нет, ложно {выходим из цикла} Конец. |
Пример 10. Даны числа . Известно, что число
меняется от -10 до 10 с шагом 5,
и не изменяется. Вычислить сумму
и разность
и сравнить полученные значения суммы и разности для всех значений
и
.
Выполнение блок-схемы с предусловием приведем в табл. 2.6.
Расчеты: Начало b=7 a=-10 a≤10 -10≤10 да, верно S=a+b=-10+7=-3 R=a-b=-10-7=-17 Вывод S, R S>R -3>-17 да, верно Вывод "Max S"
a=a+5=-10+5=-5 {Идем по стрелке вверх} a≤10 -5≤10 да, верно S=a+b=-5+7=2 R=a-b=-5-7=-12 Вывод S, R S>R 2>-12 да, верно Вывод "Max S"
a=a+5=-5+5=0 {Идем по стрелке вверх} a≤10 0≤10 да, верно S=a+b=0+7=7 R=a-b=0-7=-7 Вывод S, R S>R 7>-7 да, верно Вывод "Max S"
a=a+5=0+5=5 a≤10 5≤10 да, верно {Идем по стрелке вверх} S=a+b=5+7=12 R=a-b=5-7=-2 Вывод S, R S>R 12>-2 да, верно Вывод "Max S"
a=a+5=5+5=10 {Идем по стрелке вверх} a≤10 10≤10 да, верно S=a+b=10+7=17 R=a-b=10-7=3 Вывод S, R S>R 17>3 да, верно Вывод "Max S"
a=a+5=10+5=15 {Идем по стрелке вверх} a≤10 15≤10 нет, ложно {выходим из цикла} Конец. |
В процессе составления блок-схемы важно «ходить» по стрелкам из блока в блок, следить, чтобы не получалось «тупиковых ситуаций». Такая ситуация возникает, если составитель блок-схемы не нарисовал стрелку из блока. Также частой ошибкой является замыкание стрелки не в тот блок, например при реализации циклического алгоритма.
Краткие итоги
Любой алгоритм может быть реализован с помощью блок-схемы. Для каждого вида алгоритма предусмотрена своя конструкция из определенных блоков. Проверка блок-схемы и получение результата достигается при выполнении блок-схемы.
Вопросы
- Что такое блок-схема?
- Какие типы блоков бывают?
- Какие блоки используются при реализации линейного, разветвляющегося, циклического алгоритмов?
- Можно ли составить разные варианты блок-схем для одной и той же задачи?
- Какие виды циклического алгоритма бывают?
- Какие пункты должны присутствовать в любом цикле?
- Что такое выполнение блок-схемы?
- Для чего следует выполнять блок-схему?
Упражнения
- Составьте блок-схемы для задачи по походу в магазин за яблоками. Используйте линейный, разветвляющийся и циклический алгоритмы.
- Составьте блок-схему для нахождения корней квадратного уравнения через дискриминант. Используйте разветвляющийся алгоритм. Получите ответ, выполнив блок-схему.
- Составьте блок-схемы для вывода на экран целых чисел от 1 до 10. Используйте цикл с предусловием, с постусловием. Выполните блок-схемы.
Блок-схемы: основные принципы и правила создания
Блок-схема представляет собой графическое представление последовательности операций или шагов в различных областях деятельности. Она используется для визуализации работы алгоритмов, процессов, программ и систем.
Определение
Блок-схема — это метод исследования и представления комплексных систем с использованием графического языка, который позволяет представить логику и последовательность выполняемых действий в виде блоков и связей между ними.
Основные принципы создания блок-схем
- Четкость и однозначность: каждый блок должен иметь ясное и однозначное описание, чтобы избежать двусмысленности.
- Иерархическая разбивка: сложные процедуры и алгоритмы должны быть разбиты на более простые блоки, чтобы упростить понимание.
- Единообразие символов: использование стандартных символов и обозначений позволяет сделать блок-схемы понятными и удобными для работы.
- Последовательность шагов: блоки должны быть соединены стрелками или линиями, указывающими направление движения в программе или процессе.
- Гибкость и адаптируемость: блок-схемы должны быть легко модифицируемыми для внесения изменений в алгоритмы или программы.
Общие правила создания блок-схем
- Главный процесс начинается с символа «Начало» и заканчивается символом «Конец».
- Блоки промежуточных шагов представляются в виде прямоугольников с описанием этого шага или операции, которую необходимо выполнить.
- Условные операторы и логические проверки обозначаются ромбовидными символами.
- Ветвления процесса могут быть обозначены символами «Если/Иначе» или «Выбор».
- Циклы или повторяющиеся процессы изображаются символом «Цикл».
Пример блок-схемы
Начало -> Ввод данных -> Проверка данных -> Если данные корректные
-> -> Выполнение операции
-> Иначе
-> -> Вывод сообщения об ошибке
Конец
В данном примере блок-схемы показана последовательность шагов, где сначала происходит ввод данных, затем идет проверка этих данных. В случае, если данные корректные, выполняется требуемая операция. В противном случае, выводится сообщение об ошибке.
Блок-схемы являются удобным инструментом для представления сложных процессов и алгоритмов. Они помогают визуально представить последовательность выполнения операций и упрощают понимание алгоритмов и программ. Правильное использование блок-схем позволяет легко анализировать и оптимизировать процессы.
Рис. 2 Блок схема
алгоритма программы
5.4Текст программы
program
prim_1;
{вычисления
по
формулам}
var
x,y:real;
sum,m,p:real;
begin
write(‘введите
x=’);readln(x);
write(‘введите
y=’);readln(y);
sum:=x*x+y*y;
m:=abs(x-y);
p:=x*y;
writeln(‘сумма
квадратов=’,sum:6:3);
writeln(‘модуль
разности=’,m:6:3);
writeln(‘произведение=’,p:6:3);
readln;
end.
5.5Тестирование
Вводим два числа,
проверяя корректность работы программы:
(1) при двух положительных числах, где Х
больше Y; (2) при двух
отрицательных числах, где Y
больше X. Программа ведёт
себя корректно.
1:
Введите Х = 3
Введите Y
= 2
Ссума квадратов
sum = 13.000
Модуль разности
m = 1.000
Произведение р
= 6.000
2:
Введите Х = -5
Введите Y
= -2
Ссума квадратов
sum = 29.000
Модуль разности
m = 3.000
Произведение р
= 10.000
Пример 2: Значения
переменных А и В задаются оператором
ввода. Программа должна отпечатать А >
B, A < B или A = B в зависимости от значений
А и В.
|
Рис.2. Блок-схема
для условного оператора
Блок-схема приведена
на рис.2. Алгоритм заключается в сравнении
вводимых величин А и В и выводе на экран
соответствующих сообщений.
program prim_2; {использование условного оператора} var a,b:real; begin write('введите а=');readln(a); write('введите b=');readln(b); if a>b then writeln('А больше В') else if a<b then writeln('А меньше В') else writeln('А равно В'); end.
Пример 3:
Сравнить возраст брата и сестры и
выводит соответствующее сообщение.
Вариант
1:
var
age1,age2: integer;
begin
write(‘Введите
возраст
брата:
‘); readln(age1);
write(‘Введите
возраст
сестры:
‘);readln(age2);
if
age1>age2 then writeln(‘Брат старше.’)
else
if age1<age2 then writeln(‘Сестра старше.’)
else
writeln(‘Они близнецы.’);
end.
Вариант 2:
var
age1,age2: integer;
begin
write(‘Введите
возраст брата: ‘); readln(age1);
write(‘Введите
возраст сестры: ‘);readln(age2);
if
age1>age2 then writeln(‘Брат старше.’);
if
age1<age2 then writeln(‘Сестра старше.’);
if
age1=age2 then writeln(‘Они близнецы.’);
end.
Пример
4:
Определить день недели известной даты.
var
d,m,y: integer; n: longint;
begin
writeln(‘Введите
день, месяц, год даты (например: 3 12
1964)’);
readln(d,m,y);
if(m>=2)then
m:=m+1
else
begin
m:=m+13;
y:=y-1;
end;
n:=trunc(365.25*y)+trunc(30.6*m)+d-621050;
n:=n-trunc(n/7)*7+1;
case
n of
1:
write(‘понедельник’);
2:
write(‘вторник’);
3:
write(‘среда’);
4:
write(‘четверг’);
5:
write(‘пятница’);
6:
write(‘суббота’);
7:
write(‘воскресенье’);
end;
writeln;
end.
6Практическая часть
Практическая часть
выполняется каждым студентом индивидуально,
согласно своему варианту. Вариант
задания выдается преподавателем.
Задание
1 Составить
программу для вычисления по формулам.
Предусмотреть задание исходных данных
при помощи оператора ввода.
1. Треугольник
задан длинами сторон a и b, и величиной
угла С. Найти сторону с и площадь S данного
треугольника.
;
,
где
Предусмотреть
ввод угла в
градусах и перевод его в радианы:
2. Треугольник
задан длинами сторон. Найти длины высот
:
;
;
3. Треугольник
задан длинами сторон. Найти длины медиан:
;
;
4. Треугольник
задан длинами сторон. Найти длины
биссектрис:
;
;
5. Треугольник
задан длинами сторон. Найти углы
треугольника:
;
;
6.Даны два угла
треугольника A, B и высота ha .
Вычислить площадь треугольника и две
стороны по формулам:
;
;
;
7. Даны два угла
треугольника B,С и высота ha .
Вычислить длины всех сторон по формулам:
;
;
8. В треугольнике
заданы сторона a и углы В и С. Найти
площадь S и стороны b и c:
;
;
;
9. В треугольнике
заданы сторона a, высота ha и угол
С. Найти стороны b,с и площадь S.
;
;
10. Треугольник
задан координатами своих вершин. Найти
площадь треугольника:
;
Замечание: расстояние
между точками A(x1, y1) и B(x2,
y2), расположенными на плоскости
рассчитывается:
11. Треугольник
задан координатами своих вершин. Найти
периметр и площадь треугольника.
12. Вокруг треугольника
со сторонами a, b, c описана окружность.
Определить ее радиус R, угол треугольника
A и площадь, ограниченную стороной a и
радиусами, проведенными в вершины B, C.
;
;
13. В окружность
радиуса R вписан правильный треугольник.
Определить длину его стороны a, площадь
S и площадь круга S0 , вписанного
в треугольник:
;
;
14. Вычислить
значения Z1 и Z2 по формулам:
;
15. Опредлить
дальность полета тела, запущенного с
начальной скоростью V0 с высоты h
под углом к горизонту ,
пренебрегая сопротивлением воздуха.
Траектория движения тела описывается
уравнениями:
;
,
где
,
V0x, V0y —
компоненты скорости V0
вдоль осей X и Y. Замечание: в момент
падения тела Y=0.
Задание 2.
Составить программу для вычисления.
Предусмотреть задание исходных данных
при помощи оператора ввода.
1. Написать программу
вычисления объема параллелепипеда.
Значения вводятся с клавиатуры
2. Написать программу
вычисления объема и площади поверхности
шара.
3. Написать программу
вычисления объема цилиндра.
4. Написать программу
вычисления стоимости покупки некоторого
количества (по весу) помидоров, огурцов
и яблок.
5. Написать программу
вычисления стоимости покупки нескольких
тетрадей и карандашей. Предполагается,
что во время работы программы пользователь
будет вводить данные о каждой составляющей
покупки в отдельной строке: сначала
цену, затем количество.
6. Вычислить
расстояние между двумя точками с
координатами х1, у1 и х2, у2.
7. Треугольник
задан длинами сторон. Найти: длины высот
и медиан.
8. Вычислить период
колебания маятника длины l.
9. Определить силу
притяжения F между
телами массы m1 и
m2, находящимися
на расстоянии r друг
от друга.
10. Даны гипотенуза
и катет прямоугольного треугольника.
Найти второй катет и радиус вписанной
окружности.
11. Даны два
действительных числа a
и b. Получить их
сумму, разность и произведение.
12. Даны действительные
числа x и y. Получить
13. Даны два
действительных положительных числа.
Найти среднее арифметическое и среднее
геометрическое этих чисел.
14. Даны два
действительных числа. Найти среднее
арифметическое и среднее геометрическое
их модулей.
15. Даны катеты
прямоугольного треугольника. Найти его
гипотенузу и площадь.
Задание 3:
Составить программу с использованием
условного оператора. Предусмотреть
задание исходных данных при помощи
оператора ввода.
-
Написать программу,
которая вычисляет частное от деления
двух чисел. Программа должна проверять
правильность введенных пользователем
данных и, если они неверные (делитель
равен нулю), выдавать сообщение об
ошибке. -
Написать программу
вычисления площади кольца. Программа
должна проверять правильность исходных
данных. -
Написать программу
вычисления сопротивления электрической
цепи, состоящей из двух сопротивлений.
Сопротивления могут быть соединены
последовательно или параллельно. -
Написать программу
решения квадратного уравнения. Программа
должна проверять правильность исходных
данных и в случае, когда коэффициент
при второй степени неизвестного равен
нулю, выводить соответствующее сообщение. -
Написать программу
вычисления стоимости покупки с учетом
скидки. Скидка в 10% предоставляется,
если сумма покупки больше 1000 руб. -
Написать программу
вычисления стоимости покупки с учетом
скидки. Скидка в 3% предоставляется в
том случае, если сумма покупки больше
500 руб., в 5% — если сумма больше 1000 руб. -
Написать программу
проверки знания даты основания
Санкт-Петербурга. В случае неверного
ответа пользователя программа должна
выводить правильный ответ. -
Написать программу
проверки знания даты начала второй
мировой войны. В случае неверного ответа
пользователя программа должна выводить
правильный ответ. -
Написать программу
проверки знания истории архитектуры.
Программа должна вывести вопрос и три
варианта ответа. Пользователь должен
выбрать правильный ответ и ввести его
номер. -
Написать программу
проверки знания истории архитектуры.
Программа должна вывести вопрос и три
варианта ответа, а пользователь —
выбрать правильный ответ и ввести его
номер. -
Даны действительные
положительные числа x,
y z.
Выяснить существует ли треугольник с
длинами сторон x, y
z. Если треугольник
существует, то ответить – является ли
он остроугольным. -
Даны действительные
числа a1, b1,
c1, a2,
b2, c2.
Выяснить, верно ли, что
,
и если верно, то найти решение системы
линейных уравнений
(при выполнении
неравенства система заведомо совместна
и имеет единственное решение).
-
Вывести на экран
большее из двух целых чисел -
Даны целые числа
a, b,
c. Если a
b
c,
то все числа заменить их квадратами,
если a > b
> c, то каждое число
заменить наибольшим из них, в противном
случае сменить знак каждого числа. -
Вычислить значение
функции:
Задание 4:
Составить программу на использование
оператора выбора Case
-
Написать программу,
которая запрашивает у пользователя
номер месяца и выводит соответствующее
название времени года. В случае, если
пользователь укажет недопустимое
число, программа должна вывести сообщение
«Ошибка ввода данных». -
Написать программу,
которая запрашивает у пользователя
номер дня недели и выводит одно из
сообщений: «Рабочий день», «Суббота»
или «Воскресенье». -
Написать программу,
вычисляющую стоимость междугороднего
телефонного разговора (цена одной
минуты определяется расстоянием до
города, в котором находится абонент).
Исходными данными для программы являются
код города и продолжительность разговора. -
Написать программу,
которая после введенного с клавиатуры
числа (в диапазоне от 1 до 999), обозначающего
денежную единицу, дописывает слово
«рубль» в правильной форме. Например,
12 рублей, 21 рубль и т. д. -
Написать программу,
которая после введенного с клавиатуры
числа (в диапазоне от 1 до 99), обозначающего
денежную единицу, дописывает слово
«копейка» в правильной форме.
Например, 5 копеек, 41 копейка и т. д. -
Написать программу,
которая вычисляет дату следующего дня. -
Написать программу,
которая по номеру месяца выдает время
года. -
Написать программу
преобразования цифр в слова. -
Написать программу,
классифицирующую треугольники
(остроугольные, прямоугольные,
тупоугольные), если даны углы. -
Написать программу,
которая в зависимости от того введена
ли открытая скобка или закрытая,
напечатать «открытая круглая скобка»
или «закрытая фигурная скобка».
(Учитывать круглые, квадратные, фигурные
скобки). -
Написать программу,
которая в зависимости от введённого
символа L, S, V программа должна вычислять
длину окружности; площадь круга; объём
цилиндра. -
Напишите программу,
которая по введенному числу из промежутка
0..24, определяет время суток. -
Определить,
является ли введенная буква русского
алфавита гласной. -
Написать программу,
которая в зависимости от значения
переменной А на экран выводится
наименование оценки. Предусмотреть
вывод сообщения об ошибке в случае,
когда введено число вне интервала 2..5. -
Написать программу,
которая если переменная Ch будет буквой
(‘A’..’Z’, ‘a’..’z’), цифрой (‘0’..’9′) или оператором
(‘+’, ‘-‘, ‘*’, ‘/’), будет соответственно
выдавать одно из сообщений ‘Буква’,
‘Цифра’, ‘Оператор’. В противном случае
программа напечатает сообщение
‘Специальный символ’.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
Схема — это абстракция какого-либо процесса или системы, наглядно отображающая наиболее значимые части. Схемы широко применяются с древних времен до настоящего времени — чертежи древних пирамид, карты земель, принципиальные электрические схемы. Очевидно, древние мореплаватели хотели обмениваться картами и поэтому выработали единую систему обозначений и правил их выполнения. Аналогичные соглашения выработаны для изображения схем-алгоритмов и закреплены ГОСТ и международными стандартами.
На территории Российской Федерации действует единая система программной документации (ЕСПД), частью которой является Государственный стандарт — ГОСТ 19.701-90 «Схемы алгоритмов программ, данных и систем» [1]. Не смотря на то, что описанные в стандарте обозначения могут использоваться для изображения схем ресурсов системы, схем взаимодействия программ и т.п., в настоящей статье описана лишь разработка схем алгоритмов программ.
Рассматриваемый ГОСТ практически полностью соответствует международному стандарту ISO 5807:1985.
Содержание:
- Элементы блок-схем алгоритмов
- Примеры блок-схем
- Нужны ли блок-схемы? Альтернативы
Элементы блок-схем алгоритмов
Блок-схема представляет собой совокупность символов, соответствующих этапам работы алгоритма и соединяющих их линий. Пунктирная линия используется для соединения символа с комментарием. Сплошная линия отражает зависимости по управлению между символами и может снабжаться стрелкой. Стрелку можно не указывать при направлении дуги слева направо и сверху вниз. Согласно п. 4.2.4, линии должны подходить к символу слева, либо сверху, а исходить снизу, либо справа.
Есть и другие типы линий, используемые, например, для изображения блок-схем параллельных алгоритмов, но в текущей статье они, как и ряд специфических символов, не рассматриваются. Рассмотрены лишь основные символы, которых всегда достаточно студентам.
|
Терминатором начинается и заканчивается любая функция. Тип возвращаемого значения и аргументов функции обычно указывается в комментариях к блоку терминатора. |
|
В ГОСТ определено множество символов ввода/вывода, например вывод на магнитные ленты, дисплеи и т.п. Если источник данных не принципиален, обычно используется символ параллелограмма. Подробности ввода/вывода могут быть указаны в комментариях. |
|
В блоке операций обычно размещают одно или несколько (ГОСТ не запрещает) операций присваивания, не требующих вызова внешних функций. |
|
Блок в виде ромба имеет один вход и несколько подписанных выходов. В случае, если блок имеет 2 выхода (соответствует оператору ветвления), на них подписывается результат сравнения — «да/нет». Если из блока выходит большее число линий (оператор выбора), внутри него записывается имя переменной, а на выходящих дугах — значения этой переменной. |
|
Вызов внешних процедур и функций помещается в прямоугольник с дополнительными вертикальными линиями. |
|
Символы начала и конца цикла содержат имя и условие. Условие может отсутствовать в одном из символов пары. Расположение условия, определяет тип оператора, соответствующего символам на языке высокого уровня — оператор с предусловием (while) или постусловием (do … while). |
|
Символ «подготовка данных» в произвольной форме (в ГОСТ нет ни пояснений, ни примеров), задает входные значения. Используется обычно для задания циклов со счетчиком. |
|
В случае, если блок-схема не умещается на лист, используется символ соединителя, отражающий переход потока управления между листами. Символ может использоваться и на одном листе, если по каким-либо причинам тянуть линию не удобно. |
|
Комментарий может быть соединен как с одним блоком, так и группой. Группа блоков выделяется на схеме пунктирной линией. |
Примеры блок-схем
В качестве примеров, построены блок-схемы очень простых алгоритмов сортировки, при этом акцент сделан на различные реализации циклов, т.к. у студенты делают наибольшее число ошибок именно в этой части.
Сортировка вставками
Массив в алгоритме сортировки вставками разделяется на отсортированную и еще не обработанную части. Изначально отсортированная часть состоит из одного элемента, и постепенно увеличивается.
На каждом шаге алгоритма выбирается первый элемент необработанной части массива и вставляется в отсортированную так, чтобы в ней сохранялся требуемый порядок следования элементов. Вставка может выполняться как в конец массива, так и в середину. При вставке в середину необходимо сдвинуть все элементы, расположенные «правее» позиции вставки на один элемент вправо. В алгоритме используется два цикла — в первом выбираются элементы необработанной части, а во втором осуществляется вставка.
В приведенной блок-схеме для организации цикла используется символ ветвления. В главном цикле (i < n) перебираются элементы необработанной части массива. Если все элементы обработаны — алгоритм завершает работу, в противном случае выполняется поиск позиции для вставки i-того элемента. Искомая позиция будет сохранена в переменной j в результате выполнения внутреннего цикла, осуществляющем сдвиг элементов до тех пор, пока не будет найден элемент, значение которого меньше i-того.
На блок-схеме показано каким образом может использоваться символ перехода — его можно использовать не только для соединения частей схем, размещенных на разных листах, но и для сокращения количества линий. В ряде случаев это позволяет избежать пересечения линий и упрощает восприятие алгоритма.
Сортировка пузырьком
Сортировка пузырьком, как и сортировка вставками, использует два цикла. Во вложенном цикле выполняется попарное сравнение элементов и, в случае нарушения порядка их следования, перестановка. В результате выполнения одной итерации внутреннего цикла, максимальный элемент гарантированно будет смещен в конец массива. Внешний цикл выполняется до тех пор, пока весь массив не будет отсортирован.
На блок-схеме показано использование символов начала и конца цикла. Условие внешнего цикла (А) проверяется в конце (с постусловием), он работает до тех пор, пока переменная hasSwapped имеет значение true. Внутренний цикл использует предусловие для перебора пар сравниваемых элементов. В случае, если элементы расположены в неправильном порядке, выполняется их перестановка посредством вызова внешней процедуры (swap). Для того, чтобы было понятно назначение внешней процедуры и порядок следования ее аргументов, необходимо писать комментарии. В случае, если функция возвращает значение, комментарий может быть написан к символу терминатору конца.
Сортировка выбором
В сортировке выбором массив разделяется на отсортированную и необработанную части. Изначально отсортированная часть пустая, но постепенно она увеличивается. Алгоритм производит поиск минимального элемента необработанной части и меняет его местами с первым элементом той же части, после чего считается, что первый элемент обработан (отсортированная часть увеличивается).
На блок-схеме приведен пример использования блока «подготовка», а также показано, что в ряде случаев можно описывать алгоритм более «укрупнённо» (не вдаваясь в детали). К сортировке выбором не имеют отношения детали реализации поиска индекса минимального элемента массива, поэтому они могут быть описаны символом вызова внешней процедуры. Если блок-схема алгоритма внешней процедуры отсутствует, не помешает написать к символу вызова комментарий, исключением могут быть функции с говорящими названиями типа swap, sort, … .
На блоге можно найти другие примеры блок-схем:
- блок-схема проверки правильности расстановки скобок арифметического выражения [2];
- блок-схемы алгоритмов быстрой сортировки и сортировки слиянием [3].
Часть студентов традиционно пытается рисовать блок-схемы в Microsoft Word, но это оказывается сложно и не удобно. Например, в MS Word нет стандартного блока для терминатора начала и конца алгоритма (прямоугольник со скругленными краями, а не овал). Наиболее удобными, на мой взгляд, являются утилиты MS Visio и yEd [5], обе они позволяют гораздо больше, чем строить блок-схемы (например рисовать диаграммы UML), но первая является платной и работает только под Windows, вторая бесплатная и кроссплатфомренная. Все блок-схемы в этой статье выполнены с использованием yEd.
Частные конторы никакие блок-схемы не используют, в книжках по алгоритмам [6] вместо них применяют словесное описание (псевдокод) как более краткую форму. Возможно блок-схемы применяют на государственных предприятиях, которые должны оформлять документацию согласно требованиям ЕСПД, но есть сомнения — даже для регистрации программы в Государственном реестре программ для ЭВМ никаких блок-схем не требуется.
Тем не менее, рисовать блок-схемы заставляют школьников (примеры из учебников ГОСТ не соответствуют) — выносят вопросы на государственные экзамены (ГИА и ЕГЭ), студентов — перед защитой диплом сдается на нормоконтроль, где проверяется соответствие схем стандартам.
Разработка блок-схем выполняется на этапах проектирования и документирования, согласно каскадной модели разработки ПО, которая сейчас почти не применяется, т.к. сопровождается большими рисками, связанными с ошибками на этапах проектирования.
Появляются подозрения, что система образования прогнила и отстала лет на 20, однако аналогичная проблема наблюдается и за рубежом. Международный стандарт ISO 5807:1985 мало чем отличается от ГОСТ 19.701-90, более нового стандарта за рубежом нет. Там же производится множество программ для выполнения этих самых схем — Dia, MS Visio, yEd, …, а значит списывать их не собираются. Вместо блок-схем иногда применяют диаграммы деятельности UML [6], однако удобнее они оказываются, разве что при изображении параллельных алгоритмов.
Периодически поднимается вопрос о том, что ни блок-схемы, ни UML не нужны, да и документация тоже не нужна. Об этом твердят программисты, придерживающиеся методологии экстремального программирования (XP) [7], ходя даже в их кругу нет единого мнения.
В ряде случаев, программирование невозможно без рисования блок-схем, т.к. это один процесс — существуют визуальные языки программирования, такие как ДРАКОН [8], кроме того, блок-схемы используются для верификации алгоритмов (формального доказательства их корректности) методом индуктивных утверждений Флойда [9].
В общем, единого мнения нет. Очевидно, есть области, в которых без чего-то типа блок-схем обойтись нельзя, но более гибкой альтернативы нет. Для формальной верификации необходимо рисовать подробные блок-схемы, но для проектирования и документирования такие схемы не нужны — я считаю разумным утверждение экстремальных программистов о том, что нужно рисовать лишь те схемы, которые помогают в работе и не требуют больших усилий для поддержания в актуальном состоянии [10].
Список использованных источников:
- ГОСТ 19.701–90 (ИСО 5807–85) «Единая система программной документации».
- Алгоритм. Свойства алгоритма \ https://pro-prof.com/archives/578
- Алгоритмы сортировки слиянием и быстрой сортировки \ https://pro-prof.com/archives/813
- yEd Graph Editor \ https://www.yworks.com/products/yed
- Книги: алгоритмы \ https://pro-prof.com/books-algorithms
- Рамбо Дж., Якобсон А., Буч Г. UML: специальный справочник. -СПб.: Питер, 2002. -656 с.
- Кент Бек Экстремальное программирование: разработка через тестирование – СПб.: Питер – 2003
- Визуальный язык ДРАКОН \ https://drakon.su/
- Шилов Н.В. Верификация шаблонов алгоритмов для метода отката и метода ветвей и границ. Моделирование и анализ информационных систем, ISSN 1818 – 1015, т.18, №4, 2011
- Брукс Ф., Мифический человеко — месяц или как создаются программные системы. СПб. Символ Плюс, 1999 — 304 с. ил.