Лекция Паскаль 6 – Условные операторы, логика в Паскаль


Тема: Условные операторы.

Цель: Познакомиться с правилами алгебры логики и логические операторами, которые построены на ее основе.

1. понятие математической логики.

Работы Джорджа Буля 1847 и 1854 положили начало алгебре логики — булевой алгебре. Ученый создал систему обозначений и правил, пользуясь которыми, можно закодировать произвольные высказывания, а затем манипулировать ими как обычными числами, предусматривая лишь два варианта ответа — истинно (true, 1) или ложно (false, 0).

Булева алгебра пользуется тремя основными операторами — И (and), ИЛИ (or), ни (not), которые позволяют выполнять умножение, сложение и отрицание логических условий. В 1854 году в своей работе «Законы мышления» Буль полностью сформулировал законы математической логики, воспользовавшись для ее формализации двоичной системой.

Создавая язык Pascal, Никлаус Вирт ввел для обозначения логического типа данных зарезервированное слово Boolean в знак уважения к автору математической логики.

Таким образом, математическая логика (булева алгебра) оперирует логическими переменными, которые могут принимать значения двух видов — true или false. Значение логических переменных задаются путем присвоения констант или результатов сравнения.

Рассмотрим пример:

Обе логические переменные (х и у) после выполнения этого фрагмента программы

приобретут значение true.

В операциях сравнения можно применять привычные в математике знаки сравнения:> (больше), <(меньше), = (равно),> = (больше или равно), <= (меньше или равно), <> (не равно). Как правило, условия сравнения в задачах намного сложнее, чем простая проверка на равенство или неравенство. Даже простые по условию задачи требуют одновременного выполнения нескольких условий.

Например, для определения того, является ли год високосным, используется следующая вербальная условие: «если номер года делится на 4 без остатка, и при этом, если он делится без остатка на 100 (то есть, заканчивается на« 00 »), а число его сотен не делится на 4 »Как видим, это условие очень объемная; несколько проще она будет выглядеть в обратном варианте — условие «невисокосности» года:

Читать  Теоретические основы программирования на языке PASCAL, составление алгоритмов

Во всех языках программирования реализованы как минимум четыре логические операции:

Логическое отрицание — not, замена истинного выражения на ложный и наоборот.

Логическое умножение — and, требует одновременного выполнения обеих условий.

Логическое сложение — or, требует выполнения хотя бы одной из двух частей.

«Исключительное ИЛИ» — xor, которая дает истину, только если значения операндов совпадают (истина и истина, ложное и ложное).

Таблица истинности для логических операций в Delphi при всех возможных значениях аргументов:

переменная х False False True True
переменная в False True False True
Not x True True False False
Not y True False True False
x or y False True True True
x and y False False False True
x xor y True False False True

Задания. Внести в таблице значения true или false в соответствии с образцом (первая строка).

Значение переменной а 1 3 5 7 9
Значение переменной b 10 -1 2 20 7
(A mod 2 = 0) or (b <10) False True True False True
((A mod 2) = (a div 2)) or (b> 0)          
(Not (a> 2)) and (b <11)          
(A <= 2) or (a> 7) or (b> a)          
(A> = 5) and (b mod 6> 2)          
(A * b> 10) and (a> b)          
(A> 2 * b) or (b> a * 2)          

2. формирование условий.

Условия для выполнения того или иного действия могут формироваться путем сравнения выбранных значений, как результат расчета логических выражений или путем опроса соответствующих видеокомпонентов. Наиболее простым и распространенным компонентом для ввода условий одно- или двух-альтернативного ветвления является компонент CheckBox ).

На форме этот компонент имеет вид квадратной ячейки с надписью. Щелчком мыши в эту ячейку можно вставить соответствующую пометку — «галочку». В процессе выполнения программы наличие или отсутствие «галочки» в элементе CheckBox проверяется (а при необходимости — и устанавливается) свойством Checked.

Читать  Величины и их описание, Общая структура алгоритма

Рассмотрим пример.

На форме в поле Edit вводится число — длина стороны квадрата. При нажатии кнопки Обсчитать! В поле Label выводится число — его площадь. Если в размещенном на форме компоненте CheckBox стоит «галочка», то к числового значения площади добавляется подпись «Кв.м».

Фрагмент кода, который будет выполняться при щелчке мышкой на кнопке Обсчитать !:

Усложним задачу.   Для удобства чтения надписи во всех компонентах

вывести полужирным шрифтом (свойство font.bold имеет значение true). При этом надпись «Обсчитать» может не поместиться в размеры кнопки; поэтому при выводе надписей полужирным шрифтом уменьшить размер шрифта до 12 пт.

 

Фрагмент кода, который будет выполняться при щелчке мышкой на кнопке Обсчитать !:

procedure TForm1.Button1Click (Sender: TObject); begin

label1.Caption = floattostr (sqr (strtofloat (edit1.Text))) if checkBox1.Checked then label1.Caption = label1.Caption + ‘кв.м’;

if checkbox2.Checked then begin button1.Font.Size = 12;

button1.Font.Style = [fsBold]; label1.Font.Style = [fsBold]; edit1.Font.Style = [fsBold]; checkbox1.Font.Style = [fsBold]; checkbox2.Font.style:=[fsBold]; end

else begin

button1.Font.Size = 16; button1.Font.Style = []; label1.Font.Style = []; edit1.Font.Style = []; checkbox1.Font.Style = []; checkbox2.Font.style = []; end;

end;

3. Алгоритмические конструкции одно-, двух- и много-альтернативного разветвлений.

В ряде случаев равно альтернативное разветвление может оказаться недостаточным: в алгоритме может относиться задача выбора одной из двух альтернатив. Подобные алгоритмические структуры реализуются двух-альтернативным оператором If, который имеет следующую структуру:

If логическое выражение Then оператор Else оператор;

Здесь логическое выражение — это булева переменная, константа или логическое выражение, представляет собой операцию (или несколько операций) сравнение, объединенных операторами булевой алгебры.

Операторы, размещенные после ключевых слов then и else, могут быть простыми или составными (то есть, группой операторов, объединенных операторными скобками begin .. end).

Пример. Составить программу для определения корней квадратного уравнения по заданным значениям коэффициентов a, b, c.

Читать  Порядковые типы в Паскаль

Форма программы имеет следующий вид (в зависимости от значений коэффициентов a, b и c квадратное уравнение может иметь два различных действительных корня, один действительный корень или вообще не иметь действительных корней):

 

 

Фрагмент кода:

 

Иногда в алгоритмах недостаточно и двух альтернатив, тогда целесообразно

использовать много-альтернативное разветвления Case, которое имеет следующую структуру:

Case выражение-переключатель of

Значение переключателя 1: оператор; Значение переключателя 2: оператор;

… End; или

Case выражение-переключатель of

Значение переключателя 1: оператор; Значение переключателя 2: оператор;

… Else

оператор;

End;

Выражение-переключатель в этом операторе может быть переменной или выражением порядкового типа, например, целого, литерального тому подобное. Тип переключателя должен совпадать с типом значений переключателя, которые стоят перед двоеточием в альтернативах оператора Case. Часть Else — необязательное, она добавляется в случае, когда значение выражения-переключателя не совпадает ни с одним из зарезервированных значений. Таким образом, если выражение-переключатель не ровный одном из этих значений и присутствует часть Else, то выполняется оператор, следующий за Else. Если же часть Else в оператор Case не включена, то Case не выполняет никаких действий.

Операторы, размещенные после двоеточий в альтернативах Case, могут быть простыми или составными (то есть, группой операторов, объединенных операторными скобками begin .. end).

Пример. По введенными двумя целыми числами — значениями года и месяцу, вывести количество дней в этом месяце.

Объяснение. Первый, третий, пятый, седьмой, восьмой, десятый и двенадцатый месяцы каждого года имеют по 31 дню; четвертый, шестой, девятый и одиннадцатый

— по 30 дней. Второй месяц (февраль) в високосном году имеет 29 дней, а в не самом високосном — 29 дней.

Форма программы имеет следующий вид (в зависимости от введенных значений года и месяца):

Фрагмент кода:

Читать  Введение и вывод значений величин | Составляющие алгоритма обработки величин

 

4. Выполнение программ по разветвлением в пошаговом режиме.вложенные операторы ветвления.

Рассмотрим выполнение условных операторов при программировании теста на фреймах.Создадим основную форму и два фреймы:

Для создания нового фрейма нужно выполнить File — New — Other — Frame:

На первом фрейме разместим компонент RadioGroup. Название компонента изменим на «У кого длиннее уши?», А для описания вариантов ответа изменим свойство Items в инспекторе объектов:

 

На втором фрейме разместим один объект Label, внеся в него текст «Кто плавает», а также три объекта CheckBox, внеся в них соответственно «акула», «кот»,

«Кит».

Выносим на форму два компонента Frames, в диалоговом окне выбирая Frame2 и Frame3 (у них сквозная нумерация с формами, поэтому если бы у нас было две формы, то фреймы получили бы нумерацию 3 и 4). Попав на форму, фреймы меняют имя: они становятся Frame21 и Frame31 (т.е. 2-й фрейм на 1-й форме и 3-й фрейм на 1-й форме).

Также размещаем на форме компонент Label, предоставив ему первоначального значения «Количество верных ответов: 0», и компонент Button с надписью

«Применить».

Программируем правила прохождения и накопления баллов за тест в методе нажатия кнопки «Применить»:

Некоторые замечания о работе данной программы.

В разделе var мы описали типизированную константу n: integer = 0 в которой будет накапливаться количество верных ответов. Для того, чтобы это было разрешено, нужно поставить галочку в настройке Project — Options — Assignable typed constant:

Еще одна особенность программы — компоненты фреймов с формы «невидимые», поэтому их нужно назвать полным именем, например, frame31.checkbox3.checked или frame21.radiogroup1.itemindex

Пример. Рассмотрим использование фреймов и условных операторов на примере вывода большого рисунка на небольшой форме.

Создадим фрейм, на котором разместим рисунок — карту мира:

Создадим форму, на которой разместим фрейм, а также четыре кнопки Button для перемещения по рисунку вверх, вниз, вправо и влево:

Читать  Тема 1 Паскаль: Формализация и алгоритмизация вычислительных процессов

Запрограммируем события OnClick для каждой кнопки — перемещение в нужном направлении на 5 пикселей. Например, кнопка вверх:

кнопка влево:

кнопка вправо:

кнопка вниз:

Запустив программу на выполнение, обнаружим определенные недостатки: нажимая на

кнопки, можно «загнать» рисунок за край окна. Их можно исправить условными операторами, установив «доступность» кнопок. Также не забываем включить нужную кнопку, когда рисунок отодвигается от края — левая кнопка включает правую, правая — левую; кнопка вверх включает кнопку вниз и наоборот:

Кнопка вверх:

Кнопка влево:

Кнопка вправо:

Кнопка вниз:

Вид формы во время работы программы:

5. Теоретические вопросы для самоконтроля.

1. Какими сменными оперирует математическая логика?

2. Перечислите возможные операции сравнения.

3. Назовите четыре основные логические операции.

4. Чем больше — true или false?

5. Как могут формироваться условия для выполнения некоторой действия?

6. Для чего предназначен компонент CheckBox?

7. Назовите основное свойство компонента CheckBox. как она используется?

8. Назовите свойство компонента CheckBox, которая меняется при помитци

«Галочкой». Какое значение (true или false) будет записано в это свойство?

9. Какое свойство компонента CheckBox отвечает за вывод текстового вопрос рядом с диалоговым элементом?

10. Опишите, какие свойства нужно настроить, чтобы надписи в Label и CheckBox выполнялись более крупным шрифтом.

11. Какие особенности использования оператора If?

12. Как вставить в оператор If более одного оператора?

13. Каково назначение оператора много-альтернативного ветвления Case? В каких случаях он используется?

14. Приведите примеры использования четырех альтернатив с помощью операторов If и Case.

15. В чем заключается особенность использования frame?

16. Какие действия нужно выполнить для разрешения присвоения значений типизированной константы?

17. Как переместить рисунок вправо на 5 пикселей?

18. Как переместить рисунок вверх на 7 пикселей?

[Всего голосов: 3    Средний: 5/5]