Кнопки-переключатели в Lazarus
Лабораторная работа № 4
Тема: «Элементы конструирования и управления при построении программ»
Цели работы:
1. Научиться пользоваться простейшими компонентами организации переключений (TСheckBox, TRadioGroup).
2. Использовать при программировании основные конструкции ветвления if then else; case .
3. Написать и отладить программу разветвляющегося алгоритма.
Теоретическая часть:
Операторы if и case языка Паскаль
Для программирования разветвляющихся алгоритмов в языке Pascal используются специальные переменные типа boolean, которые могут принимать только два значения - true и false (да, нет), а также операторы if и case. Оператор if проверяет результат логического выражения, или значение переменной типа boolean, и организует разветвление вычислений.
Условный оператор if отвечает за ветвление, т.е. выполнение (или невыполнение) того или иного варианта кода в зависимости от условий. Оператор if используется совместно с ключевым словом then, а в том случае, когда предусмотрен альтернативный вариант выполнения - еще и с else. В целом синтаксис инструкции получается следующим:
if <условие> then <код> [else <альтернативный код>]
В качестве условия может быть использовано любое выражение, которое может быть приведено к булевскому значению, т.е. к false или true. Как правило, это бывают операции сравнения, например:
if a > 5 then b := 10;
if x <> 0 then y := 1 else y :=2;
В тех случаях, когда требуется предусмотреть 3 или более вариантов исполнения, используют вложение операторов if друг в друга. Например, если требуется выполнить один вариант когда, когда некая переменная x меньше нуля, другой - если x равна 0, и третий - если x больше нуля, то синтаксис операторов может быть следующим:
|
|
if x < 0 then < вариант для x<0> else
if x = 0 then <вариант для x=0> else <вариант для x>0>;
В данном случае использован вложенный оператор if, который выполняется в случае, когда переменная x не меньше 0. Он проверяет, не является ли значением x число 0, и если нет, то, учитывая, что x явно не меньше, чем 0 (это условие к моменту выполнения вложенного оператора if уже проверено внешним, т.е. первым в данном выражении оператором if), значит значение x больше 0.
Условный оператор удобен в тех случаях, когда необходимо проверить 1-2-3 варианта. При большем числе получается слишком громоздкая и неудобная для восприятия конструкция из множества вложенных инструкций. Скажем, если требуется проверить 5 значений переменной x, то получим такую конструкцию:
if x = 1 then ;
else if x = 2 then ;
else if x = 3 then ;
else if x = 4 then ;
else if x = 5 then ;
Очевидно, что код получается слишком громоздким, и малоэффективным. В таких случаях на помощь приходит семафор - оператор множественного выбора case. Он состоит из выражения, являющегося селектором, списка вариантов, представленного константами или значениями, и необязательной части else. Таким образом, формат оператора case таков:
|
|
case [выражение-селектор] of
<значение 1>: <код для значения 1>;
<значение 2>: <код для значения 2>; ...
<значение N>: <код для значения N>;
[else <код для непредусмотренных явно значений>;]
End
Единственным ограничением семафора, в сравнении с условным оператором, является то, что в качестве селектора могут выступать лишь данные порядкового типа, скажем, целым числом или же символом.
Оператор выбора case организует разветвления в зависимости от значения некоторой переменной перечисляемого типа.
Например, приведенный выше вариант кода с 4 вложенными условными операторами, при помощи case можно оформить так:
Case x of
1: ;
2: ;
3: ;
4: ;
5: ;
end;
Здесь подразумевается, что типом переменной x является целое число, поскольку тип значений, коими в данном случае являются целые числа, должен соответствовать типу селектора.
В качестве констант выбора могут выступать не только единичные значения, но и их список, разделенный запятыми, или же диапазоны, определенные границами из 2 констант, разделенных двумя точками. В таком случае мы можем объединить логически связанные значения в группы, для которых следует выполнить один и тот же код. Например, таким образом можно получить название времени года в зависимости от порядкового номера месяца.
|
|
var month: integer; season: string;
...
Case month of
1,2,12: season := " зима ";
3..5: season := " весна ";
6..8: season := " лето ";
9..11: season := " осень ";
else season := "других не знаем!";
end;
В данном случае, если переменная month имеет значения 1, 2 или 12, то переменной season присваивается значение "зима", если же значение переменной month окажется в диапазоне от 3 до 5 (включительно), то season получит значение "весна", и т.д.
Кнопки-переключатели в Lazarus
При создании программ в Lazarus для организации разветвлений часто используются компоненты в виде кнопок-переключателей. Состояние такой кнопки (включено - выключено) визуально отражается на форме. На рисунке 1 представлена форма, с кнопками-переключателями двух типов (TCheckBox, TRadioGroup ).
Компонент TCheckBox организует кнопку независимого переключателя, с помощью которой, пользователь может указать свое решение типа да/нет. В программе состояние кнопки связано со значением булевской переменной, которая проверяется с помощью оператора if.
|
|
Флажок (независимый переключатель) отличается от переключателя тем, что в группе флажков одновременно можно установить флажки в любой комбинации (в том числе могут быть установлены или сброшены все флажки и т. д.). Флажок может находиться в установленном или сброшенном состоянии. Одиночный флажок часто используется, например, для включения/выключения какого-либо режима. Для определения состояния флажка используется свойство Checked типа Boolean. По умолчанию оно имеет значение False, и флажок снят.
Компонент Lazarus RadioButton - это "радиокнопка". Если выбран один из компонентов Lazarus RadioButton, то с остальных компонентов выбор автоматически снимается. Получается, что в данный момент может быть выбран только один из группы компонентов Lazarus RadioButton.
Основное свойство компонента Lazarus RadioButton - Checked (т.е. "выбрано") типа Boolean, доступное как для чтения, так и для записи. У выбранного компонента свойство Checked равно True.
Компонент Lazarus RadioGroup расположен на странице Standard Палитры Компонентов. Он представляет собой контейнер с группой компонентов RadioButton (переключателей). Такой компонент упрощает организацию работы переключателей, по сравнению другими групповыми контейнерами требующими добавлять переключатели вручную.
Компонент TRadiogroup организует группу кнопок - зависимых переключателей. При нажатии одной из кнопок группы все остальные кнопки отключаются. В программу передается номер включенной кнопки (0,1,2,..), который анализируется с помощью оператора case.
Практическая часть
Порядок выполнения работы:
Задание:
Ввести три числа: x, y, z.
Вычислить при выключенном переключателе CheckBox: u=sin(x) или u=cos(x), или u=tg(x). При включенном переключателе CheckBox найти максимальное из трех чисел: max( x ,y,z)
Cоздать форму, представленную на рисунке 1, и написать соответствующую программу.
Coздание формы
Создайте форму, такую же как в первой лабораторной работе, скорректировав текст надписей и положение окон TEdit.
Дата добавления: 2020-11-15; просмотров: 735; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!