Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Ситкин. Информатика. Программирование в DELPHI

.pdf
Скачиваний:
142
Добавлен:
18.07.2019
Размер:
1.49 Mб
Скачать

форму сообщение, что точка принадлежит области, в противном слу-

чае не принадлежит. Представленную область можно разделить на

две треугольные части первого и третьего квадрантов. Часть области,

относящаяся к первому квадранту, описывается тремя неравенствами:

y x; y 0; x 3. Для попадания точки в первую часть должны выпол-

ниться все три неравенства это означает, что их следует соединить

 

 

связкой «и», что соответствует логи-

начало

 

ческой операции умножения and.

 

 

ввод

 

Второй части соответствуют неравен-

 

 

 

 

 

 

x и у

 

ства: y x; y 0;

x 3, которые также

a=(y x)и(y 0)

 

должны быть

соединены

операцией

 

and. Между собой две тройки нера-

и (x 3)

 

 

 

венств

следует

объединить связкой

b=(y x)и(y 0)

 

«или»,

что соответствует логической

и (x 3)

 

операции сложения or. Это объясня-

 

 

 

 

ется тем, что если точка принадлежит

a или b

нет

области, то она принадлежит либо

 

 

 

да

 

первой части, либо второй, но не мо-

принадл.

не при-

жет принадлежать обеим частям од-

области

надл. обл.

новременно. Описанный способ ре-

 

 

конец

 

шения представлен в виде блок-схемы

 

 

 

 

 

 

Рис. 5.8

 

алгоритма на рис. 5.8.

 

 

 

 

 

 

 

 

 

 

Для ввода значений

координат

точки разместим на форме два

компонента LabeledEdit,

для вывода

информации компонент Label, процесс определения принадлежно-

сти точки области свяжем со щелчком (событием OnClick) для кнопки

Button.

61

procedure TForm1.Button1Click(Sender: TObject); var x, y:real;

a, b:boolean;

begin

x:= StrToFloat(LabeledEdit1.Text);

y:= StrToFloat(LabeledEdit2.Text);

a:=(y<=x)and(y>=0)and(x<=3); b:=(y>=x)and(y<=0)and(x>=-3);

if a or b then Label1.Caption:='Точка принадлежит области' else Label1.Caption:='Точка не принадлежит области';

end;

В данном случае при выводе результата в компонент Label1 не использовались функции преобразований FloatToStr. Это объясняется тем, что выводится не число-

вой результат, а текст (тип String), что соответствует типу свойства Caption и преоб-

разования не нужны.

Пример работы приложения

представлен на рис. 5.9.

Рис. 5.9

Оператор выбора

В тех случаях, когда количество условий становится значитель-

ным, использование условных операторов создаёт громоздкие и запу-

танные конструкции. Для реализации множественного выбора удобно использовать оператор выбора, схема работы которого представлена на рис. 5.10, а сам оператор в общем случае имеет вид

62

нет
оператор SN+1
Рис. 5.10
нет
вычисление
значения
ключа

case ключ of

константы 1 : оператор S1 ;

константы 2 : оператор S2 ;

…………………………………

конст 1

да

оператор S1

 

 

константы N : оператор SN ;

нет

 

 

else оператор SN+1 ;

да

 

 

 

конст 2

оператор S2

 

end;

 

 

 

 

 

 

 

 

где case, of, else, end служеб-

ные слова; ключ перемен- конст N да оператор SN ная или выражение порядкового

типа (обычно, целый или сим-

вольный типы); константы N

список констант порядкового типа; оператор SN оператор,

выполняемый в случае совпадения значения ключа со значением из списка константы N . Если необходимо выполнение нескольких операторов в ветви, то они заключаются в операторные скобки begin

и end.

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

ко списков. Если значение ключа не совпало ни с одной из кон-

стант из списков, то выполняется оператор SN+1 . Ветвь else ( опера-

тор SN+1 ) может отсутствовать, тогда при отсутствии совпадений оператор выбора пропускается, такая конструкция соответствует не-

полной форме оператора выбора.

63

Компонент CheckBox (независимый переключатель /флажок/)

Предназначен для установки параметров с двумя возможными состояниями. Основные свойства компонента описаны в табл. 5.2.

 

 

 

Таблица 5.2

 

Основные свойства компонента CheckBox

 

 

 

 

 

Свойство

 

Описание

 

Name

 

Имя компонента. Используется

для доступа к

 

компоненту и его свойствам

 

 

 

 

Caption

 

Текст рядом с переключателем

 

 

 

Определяет позицию текста относительно пере-

Alignment

 

ключателя: taRightJustify (справа), taLeftJustify

 

 

(слева)

 

Checked

 

True/False Состояние переключателя установ-

 

лен (есть галочка)/сброшен (нет галочки)

 

 

AllowGrayed

 

True/False Возможность нахождения переключа-

 

теля в промежуточном состоянии

 

 

 

 

 

 

Состояние переключателя. В отличие от свойства

State

 

Checked позволяет различать

установленное

 

(cbChecked), промежуточное (cbGrayed), сбро-

 

 

 

 

шенное (cbUnChecked) состояние

 

WordWrap

 

True/False Возможность переноса слов на сле-

 

дующую строку

 

 

 

 

Обычно независимый переключатель CheckBox может иметь два состояния, определяемые свойством Checked: установлен (True) или сброшен (False). Бывает, что переключатель может иметь еще и тре-

тье состояние промежуточное. В этом состоянии переключатель за-

крашивается серым цветом. Если переключатель может находиться в трёх состояния, то вместо свойства Checked используется свойство State, а в свойстве AllowGrayed устанавливается значение True.

Состояние независимого переключателя не зависит от состоя-

ний других переключателей, отсюда и название независимый.

64

Компонент RadioButton (зависимый переключатель)

Предназначен для установки взаимоисключающих параметров.

Основные свойства компонента описаны в табл. 5.3.

 

 

 

Таблица 5.3

 

Основные свойства компонента RadioButton

 

 

 

 

 

Свойство

 

Описание

 

Name

 

Имя компонента. Используется для

доступа к

 

компоненту и его свойствам

 

 

 

 

Caption

 

Текст рядом с переключателем

 

 

 

Определяет позицию текста относительно пере-

Alignment

 

ключателя: taRightJustify (справа),

taLeftJustify

 

 

(слева)

 

Checked

 

True/False Состояние переключателя установ-

 

лен (есть точка)/сброшен (нет точки)

 

 

 

 

WordWrap

 

True/False Возможность переноса слов на сле-

 

дующую строку

 

 

 

 

На форме должно находиться несколько зависимых переключа-

телей. Из группы зависимых переключателей в установленном состо-

янии может находиться только один, отсюда и название зависимый.

Пример 5.3

Разработаем справочную систему для расчёта стоимости проез-

да в один из пригородов с тремя уровнями комфорта и возможностью скидки. Исходные данные представлены в табл. 5.4.

 

 

 

Таблица 5.4

 

Исходные данные

 

 

 

 

 

Пункт назначения

Базовая стоимость

Параметры

Коэффициент

0) Подпорожье

300 руб.

III класс

1

1) Пушкин, 2) Всеволожск

100 руб.

II класс

1,25

3) Выборг, 4) Приозерск,

200 руб.

I класс

1,5

5) Гатчина, 6)Тосно

 

 

скидка

0,75

 

 

65

 

 

начало

 

 

 

Блок-схема алгоритма реше-

 

 

 

 

 

 

n = №

 

 

 

ния представлена на

рис. 5.11.

 

 

 

 

 

 

выбранного

 

 

 

Сначала по выбранному городу из

города

 

 

 

списка (с нумерацией от нуля)

 

 

 

 

n = 0

да

стоимость

 

определяется

базовая

стоимость

 

St = 300

 

 

 

 

 

 

 

нет

 

 

 

поездки. Если на момент расчёта

n = 1, 2

да

стоимость

 

город не выбран, то

стоимость

 

St = 100

 

 

 

 

 

 

 

 

 

 

 

 

нет

 

 

 

имеет нулевое значение и пользо-

 

 

 

 

 

 

n = 3..6

да

стоимость

 

ватель информируется об ошибке.

 

St = 200

 

 

 

 

 

 

 

 

 

 

 

 

нет

 

 

 

Затем стоимость корректируется в

 

 

 

 

 

 

стоимость

 

 

 

зависимости от класса и наличия

St = 0

 

 

 

скидки. Третий класс

не учтён,

 

 

 

 

город не

 

 

 

т.к. он не влияет на стоимость.

выбран

 

 

 

Для размещения

на форме

 

 

 

 

 

 

 

 

списка городов использован ком-

II класс

нет

I класс

нет

понент ListBox (свойства и способ

 

 

да

 

да

 

формирования списка описаны в

 

 

 

 

St = St·1,25

 

St = St·1,5

 

работе 1). Для выбора одного из

 

 

 

 

трёх взаимоисключающих классов

скидка

нет

 

 

размещены три компонента Radio-

 

 

 

 

 

 

да

 

 

 

Button (один из них следует вклю-

 

 

 

 

 

 

 

 

 

 

чить на этапе разработки формы),

St = St·0,75

 

 

 

а для учёта скидки, которая может

 

 

 

 

 

 

 

 

быть предоставлена для любого из

вывод St

 

 

 

классов, – компонент CheckBox.

 

 

 

 

Пример работы приложения пред-

конец

 

Рис. 5.11

 

ставлен на рис. 5.12.

 

 

 

 

 

 

 

 

 

66

 

 

procedure TForm1.Button1Click(Sender: TObject);

var st:real; n:byte; begin

n:=ListBox1.ItemIndex;

case n of

0: st:=300; 1,2: st:=100; 3..6: st:=200;

else

begin

Рис. 5.12

 

st:=0;

 

ShowMessage('не выбран город');

 

end;

 

end;

 

if RadioButton2.Checked then st:=st*1.25 else

 

if RadioButton3.Checked then st:=st*1.5;

 

if CheckBox1.Checked then st:=st*0.75; Label2.Caption:='в кассу '+FloatToStr(st)+' руб';

end;

Задание

I. Разработать алгоритм вычисления значения функции, пред-

ставить его в виде блок-схемы и реализовать, создав проект

 

 

 

x

 

, x 0

 

 

x2

1, x 1

 

 

 

 

 

 

 

 

 

 

sin(2 x)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1.

y

 

 

, 0 x 1

2.

y cos

 

,

 

x

 

1

 

2

 

 

 

 

 

2x

 

 

 

 

 

x, x 1

 

 

0, x 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1, x 1

3. y x3 , x 1x, x 1

67

 

 

0, x 1

 

x

, x 0

 

 

 

 

e

 

 

 

 

 

 

 

 

 

 

 

 

x

 

 

4. y

x 1, 1

x 0 5.

y cos

 

 

, 0

x 1

 

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

x, x 1

 

 

 

0, x 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x2 , x 0

 

 

 

 

 

 

 

 

 

 

 

sin 2

 

 

 

 

 

 

 

 

2

,

x 0

 

y

x

 

x, 0 x

 

 

 

 

 

 

 

 

 

 

x

 

 

7.

 

 

 

 

 

 

8.

y

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x 2, x 2

 

 

 

 

 

 

 

 

 

 

 

 

 

x

 

 

 

 

 

 

 

x,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

7 x 1 , x 3

6. y x 11, x 3

7 x 1, x 3

 

 

 

 

 

 

 

cos x, x

2

 

 

 

 

 

 

 

 

 

 

 

 

 

x 0

9.

y 0,

2

 

 

 

 

 

 

 

 

 

1,

x 0

 

 

 

 

 

 

 

 

 

 

 

 

 

II.Разработать алгоритм определения отношения точки

выделенной области (рис. 5.13) и реализовать его, создав проект

1.

y

 

2.

y

 

3.

y

 

 

 

 

 

 

 

 

1

 

 

1

 

 

1

 

 

0 1

x

 

0 1

x

 

0 1

x

y

4. 5.

1

0 1

x

y

7. 8.

1

0 1

x

y

6.

1

0 1

x

y

9.

1

0 1

x

y

1

0 1

x

y

1

0 1

x

Рис. 5. 13

68

III. Разработать справочную систему для информирования поль-

зователя о стоимости проезда в соответствии с вариантом табл. 5.5.

 

 

 

 

 

 

 

Таблица 5.5

 

 

 

Варианты заданий

 

 

 

 

 

 

 

 

 

 

городов

цен. категорий

1 кл.

2 кл.

3 кл.

возм. скидка

и обратно

1

7

4

1,5

1,3

0,75

25%

нет

2

8

3

2

1,5

0,8

нет

да

3

9

5

1,5

1

нет

30%

да

4

10

5

1,4

0,8

нет

нет

да

5

9

4

1,5

1,25

0,9

30%

нет

6

8

4

1,2

1,1

1

50%

да

7

7

5

1

0,9

0,7

нет

да

8

6

3

1,25

0,75

нет

нет

да

9

7

4

2

1,5

1

20%

нет

Содержание отчёта

цель работы и задание;

для каждого из трёх заданий:

блок-схема алгоритма решения;

текст модуля проекта;

пример работы приложения с указанием компонентов;

выводы по работе.

Контрольные вопросы

1.Какой алгоритм называют разветвляющимся?

2.Что такое логическое выражение, как оно строится?

3.Приведите таблицу истинности основных логических операций.

4. Каков синтаксис полной и неполной форм условного оператора?

5.Что такое составной оператор, когда его используют?

6.Какую конструкцию реализует запись if x = 0 then else y:= 1?

7.Каков синтаксис оператора выбора и схема его работы?

8.В чём состоят отличия зависимого переключателя от флажка?

69

Лабораторная работа № 6

КОНТРОЛЬ СИНТАКСИСА ВВОДИМЫХ ДАННЫХ

Цель работы приобретение умений построения конструкций контроля вводимых числовых данных пользователем.

В предыдущих проектах при вводе чисел с компонентов формы приходилось рассчитывать только на аккуратность предполагаемого пользователя. В случае ошибочного наличия в числе недопустимого символа (например, буквы) происходит ошибка при попытке преобразовать содержимое поля редактирования Edit или LabeledEdit (свойство Text) из строки в число функциями преобразования StrToInt или StrToFloat, что может повлечь аварийную остановку работы приложения. Программист должен предусмотреть возможные некорректные действия пользователя и корректную реакцию приложения на них.

Предположим, что в проекте на форме расположен компонент

Edit1 для ввода вещественного числа. К нарушению синтаксиса, а в последствии невозможности преобразовать в число содержимое поля

Edit1.Text приведут:

наличие недопустимых символов в числе (буквы, спецсимволы, точка, знаки вопроса или восклицания и т.п.);

наличие двух и более запятых или знаков минуса;

наличие знака минуса не в начале числа;

отсутствие данных в поле вообще.

Для корректной работы приложения следует либо исключить ввод недопустимых символов, либо предотвратить работу функции преобразования StrToFloat при наличии синтаксических ошибок в числе и сообщить пользователю о них.

70