- •27 Тема 2. Разветвляющиеся под. Информатика и программирование Тема 2. Разветвляющиеся под Новосибирск 13 ноября 2020 г.
- •Линия потока (линия передачи управления)
- •Процесс (функциональный узел)
- •Решение (предикатный узел)
- •Узел Модификация
- •Узел слияния
- •Узел Пуск - останов
- •Разветвляющийся процесс обработки данных
- •Тестирование программы.
- •Структурные операторы
- •Условные операторы
- •Условный оператор if
- •Структура ifthen
- •Структура ifthenelse
- •Синтаксическая диаграмма оператора if
- •Вложенные операторы if
- •Оператор варианта case
- •Структура case
- •Синтаксическая диаграмма оператора варианта case
- •Примеры приложений под Windows, реализующие разветвляющиеся процессы обработки данных, использующих операторы case, if.
- •Контрольные вопросы
- •Источники дополнительных сведений
Структура ifthen
Здесь if-тест - логическое выражение (предикат), задающий условие ветвления процесса обработки данных по одному из указанных направлений.
Then-часть - описание процесса обработки данных, который будет выполнен, если if-тест примет значение «истина».
На Object Pascal она может быть реализована посредством применения условного оператора.
Е – схема выполнения для структуры ifthen.
Как видно из приведённого ниже рисунка программа с управляющей структурой «ifthen» имеет два пути выполнения. При выполнении программы по первому пути (If-тест принимает значение «true») выполняются действия по обработке данных поименованные как «Then-часть». При выполнении программы по второму пути (If-тест принимает значение «false») никаких действий по обработке данных не выполняется.
Структура ifthenelse
Здесь if-тест - логическое выражение (предикат), задающий условие ветвления процесса обработки данных по одному из указанных направлений.
Then-часть - описание процесса обработки данных, который будет выполнен, если if-тест примет значение «истина».
Else-часть - описание процесса обработки данных, который будет выполнен, если if-тест примет значение «ложь».
На Object Pascal она может быть реализована посредством применения условного оператора.
Е – схема выполнения для структура ifthenelse.
Как видно из приведённой ниже на рисунке Е-схемы программа с управляющей структурой «ifthen» имеет два пути выполнения. При выполнении программы по первому пути (If-тест принимает значение «true») выполняются действия по обработке данных поименованные как «Then-часть». При выполнении программы по второму пути (If-тест принимает значение «false») выполняются действия по обработке данных поименованные как «Else-часть».
Синтаксическая диаграмма оператора if
Вложенные операторы if
Разработанная нами программа сообщает пользователю об ошибке в исходных данных. Однако это сообщение не содержит информации о характере ошибки. Давайте изменим нашу программу так, чтобы она сообщала пользователю и о характере ошибки в исходных данных. Для этого возьмём узел 5 с блок-схемы (Рисунок 2. Управляющая структура программы.) и детализируем его т.е. спроектируем его более детально. если, теперь, вместо узла 5 мы подставим изображённую ниже блок-схему, то наша программа будет выводить сообщение о том, какие стороны отрицательны, или какая сторона больше двух других.
Текст программы с детальным сообщением об ошибке приведён ниже.
program PGeron;
{$APPTYPE CONSOLE}
// Программа для вычисления площади треугольника
// Пример программы с разветвляющимся вычислительным процессом
uses
SysUtils,
URussian;
//URussian модуль, содержащий функцию Rus, для //русификации строк при выводе на монитор
var
a,b,c: Real;//исходные данные
p: Real;//вспомогательная переменная
s: Real;//результат
poz: boolean;//вспомогательная переменная
//poz=true, если a,b,c - положительные числа, false в //противном случае
Issides: boolean;//вспомогательная переменная
//Issides =true, если a,b,c - стороны треугольника, //false в противном случае
mes: String = '';
//переменная содержащая строку сообщения об ошибке в исходных данных. Начальное
//значение - пустая строка
begin
write(Rus('Стороны треугольника: ')); readln(a,b,c);
poz:= (a > 0)and(b > 0)and(c > 0);
Issides:= poz and (c< (a + b)) and (a< (c + b)) and (b < (c + a));
if Issides
then//a,b,c - //стороны треугольника
begin
p:= (a + b + c)/2;
s:= SQRT(p*(p - a)*(p - b)*(p - c));
writeln(Rus('Стороны треугольника: '),'a = ',a:6:2,'b = ',b:6:2,'c = ',c:6:2);
writeln(Rus('Площадь треугольника: '),'s = ',s:6:2);
end
else begin
if not poz then//отрицательные или равные нулю длины сторон
begin
if a <= 0 then mes:= mes + 'a <= 0; ';
if b <= 0 then mes:= mes + 'b <= 0; ';
if c <= 0 then mes:= mes + 'c <= 0; ';
end
else//одна сторона меньше двух других
begin
if a >= (c + b) then mes:= mes + 'a >= (c + b); ';
if b >= (c + a) then mes:= mes + 'b >= (c + a); ';
if c >= (a + b) then mes:= mes + 'c >= (a + b); ';
end;
writeln(Rus(mes));
end;
readln;
end.