- •4. Цель занятия: Ознакомиться с логическими типами данных, значениями и логическими операциями Турбо Паскаль
- •5. Задачи обучения:
- •5) Операции булевой алгебры над логическими типами
- •6) Простые программы с использованием логических операций
- •8. Вопросы самопроверки :
- •9. Литература
- •10. Информационно-дидактический блок (аннотация, пособия)
- •Логические выражения в управляющих операторах
- •3. Пример программы на использование в Turbo Pascal типа данных Boolean
- •11. Содержание занятия.
- •11.1. Самостоятельная работа.
- •11.2. Работа с преподавателем:
- •11.3. Контроль исходного и заключительного уровня знаний:
Логические выражения в управляющих операторах
Алгоритмическая структура ветвления программируется в Паскале с помощью условного оператора. Раньше мы его описывали в таком виде: If <условие> Then <оператор 1> Else <оператор 2>; Кроме того, возможно использование неполной формы условного оператора: If <условие> Then <оператор>; (Здесь: If - если, Then – тогда, Else – иначе)
Теперь дадим строгое описание условного оператора в форме синтаксической диаграммы (рис. 3).
Рис.3
То, что мы раньше называли условием, есть логическое выражение, которое вычисляется в первую очередь. Если его значение равно true, то будет выполняться <оператор 1> (после Then), если false, то <оператор 2> (после Else) для полной формы или сразу следующий оператор после условного для неполной формы (без Else).
Составление программ на Turbo Pascal
1. Пример простейшей программы на Turbo Pascal (программы с линейным
алгоритмом) - вычисление площади треугольника по формуле Герона:
S=
,
где a, b, с – стороны треугольника,
полупериметр р =
;
Программа |
Пояснения к данной программе |
Program Geron; var a,b,c,p,S,Y:real; begin writeln('Вычисление площади треугольника по формуле Герона.'); writeln('Введите стороны треугольника a, b, c:'); readln(a,b,c); p:=(a+b+c)/2; S:=sqrt(p*(p-a)*(p-b)*(p-c)); writeln('Площадь треугольника равна: S=', S); writeln('Для выхода из программы введите число 1.'); readln(y); end.
|
Оператор присваивания имеет вид := , например: x:=a+b; b:=1; Присваивание-это вычислительная операция вида: c:=a+b, заключаю- щаяся в вычислении выражения, указанного справа, и записи полу- ченного результата в переменную, указанную слева. Операторы ввода данных: read(x,y,z), readln(a,b,c). Второй из операторов (readln) осуществляет построчный ввод данных.
Операторы вывода данных: write(s), writeln(u,v). Второй из операторов (writeln) осуществляет построчный вывод данных.
Все математические формулы записываются в одну строку. Пример:
S:=sqrt(p*(p-a)*(p-b)*(p-c)); |
2. Теперь, рассмотрим пример программы с алгоритмической структурой ветвления с использованием логических операций.
Для этого дополним программу вычисления площади треугольника по формуле Герона исследованием существования треугольника, если заданы его три стороны. (Исходные данные должны удовлетворять основному соотношению для сторон треугольника: длина каждой стороны должна быть меньше длин двух других сторон).
|
Имея возможность в одном условном операторе записывать достаточно сложные логические выражения, мы можем сразу «отфильтровать» все варианты неверных исходных данных. Тогда данную программу можно составить так:
|
program tangle; var a,b,c,p,S,Y:real; begin writeln('Вычислите площадь треугольника по трем сторонам'); writeln('и проведите его анализ.'); writeln('Введите стороны треугольника a,b,c:'); read(a,b,c); p:=(a+b+c)/2; S:=sqrt(abs(p*(p-a)*(p-b)*(p-c))); if (a>=(b+c)) or (b>=(a+c)) or (c>=(a+b)) then writeln('Треугольник не существует.') else if (a=b) and (b=c) then writeln('Треугольник равносторонний, его площадь S=',s) else if (a=b) or (b=c) or (a=c) then writeln('Треугольник равнобедренный, его площадь S=',s) else writeln('Треугольник разносторонний, его площадь S=',s); if (a*a=(b*b+c*c)) or (b*b=(a*a+c*c)) or (c*c=(a*a+b*b)) then writeln('Треугольник прямоугольный.'); writeln('Для выхода из программы введите число 1.'); readln(Y); end. |
Program Geron ; var a,b,c,p,S,:real; begin writeln('Введите длины сторон треугольника:'); write('а='); readLn(a) ; write('b='); readLn(b); write ('c='); readLn(c); if (a>0) and (b>0) and (c>0) and (a+b>c) and (b+c>a) and (a+c>b) then begin p:=(a+b+c)/2; S:=Sqrt(p*(p-a)*(p-b)*(p-c)); writeln('Площадь=',S) end else writeln('Неверные исходные данные') End.
|
