Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lekcija_2._RPOD.doc
Скачиваний:
7
Добавлен:
07.05.2019
Размер:
1.67 Mб
Скачать

Структура 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.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]