Обладнання та програмне забезпечення

Лабораторна робота №4

 

Написання програм множинного вибору (використання інструкції Case, компоненти ListBox).

 

 

Склав: викладач

Селемонавічус А.А.

 

 

Львів 2009 р.

 

Мета роботи

Навчитись реалізовувати програми з використанням умовних інструкцій (Case) на мові Object Pascal.

 

2. Теоретичні відомості.

Інструкція case

У попередній практичній, у програмі контролю ваги, множинний вибір був реалізований за допомогою вкладених одна в іншу інструкцій if. Такий підхід не завжди зручний, особливо в тому випадку, якщо кількість варіантів ходу програми достатньо великий.

У мові Delphi є інструкція case, що дозволяє ефективно реалізувати множинний вибір. У загальному виді вона записується в такий спосіб:

case Селектор of список1:

begin

{ інструкції 1 } end; список2:

begin

{ інструкції 2 } end; список3:

begin

{ інструкції N }

end;

else

begin

{ інструкції )

end;

end;

де:

Селектор - вираз, значення якого визначає подальший хід виконання програми (тобто послідовність інструкцій, що буде виконана);

Список N - список констант. Якщо константи являють собою діапазон чисел, то замість списку можна вказати першу і останню константу діапазону, розділивши їхніми двома крапками. Наприклад, список 1, 2, 3, 4, 5, 6 може бути замінений діапазоном 1..6.

Виконується інструкція case у такий спосіб:

1. Спочатку обчислюється значення виразу-селектора.

2. Значення виразу-селектора послідовно рівняється з константами зі списків констант.

3. Якщо значення виразу збігається з константою зі списку, то виконується відповідна цьому списку група інструкцій. На цьому виконання інструкції саsе завершується.

4. Якщо значення виразу-селектора не збігається з жодною константою із всіх списків, то виконується послідовність інструкцій, що випливає за else.

Синтаксис інструкції case дозволяє не писати else і відповідну послідовність інструкцій. У цьому випадку, якщо значення вираження не збігається з жодною константою із всіх списків, то виконується наступна за case інструкція програми.

На рисунку 1.7 наведений алгоритм, реалізований інструкцією case.

Рис. 1.7. Алгоритм, реалізований інструкцією case

Нижче наведені приклади інструкції case.

case n_day of

1,2,3,4,5: day:=' Робочий день. ' ;

6: day:=' Cyбoтa !';

7: day:='Неділя!';

end;

case n_day of

1..5: day:='Робочий день.';

6: day:='Субота!';

7: day:='Неділя!';

end;

case n_day of

6: day:='Субота!';

7: day:='Неділя!';

else day:='Робочий день.';

end;

 

3. Підготовка до виконання роботи.

3.1. Підготувати бланк звіту з роботи;

3.2. Опрацювати теоретичний матеріал за темою роботи;

3.3. Використовуючи теоретичний матеріал дати відповіді на контрольні запитання.

4. Контрольні питання

1) Намалюйте блок – схему алгоритму, реалізованого інструкцією Case

2) Наведіть загальний опис інструкції CASE

3) Що таке селектор, які значення він може приймати?

4) Що таке керуючі конструкції мови Delphi?

5) Що таке безумовні конструкції мови Delphi?

6) Що таке умовні конструкції мови Delphi?

 

Обладнання та програмне забезпечення

5.1. Персональний комп’ютер з операційною системою Windows;

5.2. Программа Delphi

 

Порядок виконання роботи

 

6.1. Запустити програму Delphi;

6.2. Реалізувати наведені приклади задач (задача 1 – 2) з використанням програми Delphi:

6.3. Розробити власну програму, що використовує умову вибору Case

6.4. Реалізувати наведені приклади опитувань ( індивідуальні завдання задача 1 – 2) з використанням програми Delphi:

Задача 1.Як приклад використання інструкції case розглянемо програму, що перераховує вагу з фунтів у кілограми. Програма враховує, що в різних країнах фунт "важить" по-різному. Наприклад, у Росії фунт дорівнює 409,5 грамів, в Англії - 453,592 грама, а в Німеччині, Данії і Ісландії фунт важить 500 грамів.

У діалоговому вікні програми, зображеному на рисунку 1.8, для вибору країни використається список Країна.

Рис. 1.8. Діалогове вікно програми Приклад використання case

Для вибору назви країни використається список — компонентів ListBox. Значок компонента ListBox перебуває на вкладці Standard (рисунок 1.9). Додається список до форми додатка точно так само, як і інші компоненти, наприклад, командна кнопка або поле редагування. У таблиці 1.5 наведені властивості компонента ListBox.

Рис. 1.9. Компонент ListBox

Таблиця 1.5. Властивості компонента ListBox

Властивість Визначає
Name Ім'я компонента. У програмі використається для доступу до властивостей компонента
Items Елементи списку
Itemindex Номер обраного елемента списку. Номер першого елемента списку дорівнює нулю
Left Відстань від лівої границі списку до лівої границі форми
Top Відстань від верхньої границі списку до верхньої границі форми
Height Висоту поля списку
Width Ширину поля списку
Font Шрифт, використовуваний для відображення елементів списку
Parent-Font Ознака спадкування властивостей шрифту батьківської форми

Найбільший інтерес представляють властивості Items і Itemindex. Властивість items містить елементи списку.

Властивість itemindex задає номер обраного елемента списку. Якщо жоден з елементів не обраний, то значення властивості дорівнює мінус одиниці.

Список може бути сформований під час створення форми або під час роботи програми.

Для формування списку під час створення форми треба у вікні Object Inspector вибрати властивість items і клацнути на кнопці запуску редактора списку рядків (рисунок 1.10).

Рис. 1.10. Кнопка запуску редактори списку

У діалоговому вікні, що відкрилося, String List Editor (рис. 1.11) потрібно ввести список, набираючи кожен елемент списку в окремому рядку. Після введення чергового елемента списку для переходу до нового рядка необхідно нажати клавішу <Enter>. Після введення останнього елемента клавішу <Enter> натискати не треба. Завершивши введення списку, варто клацнути на кнопці ОК.

Рис. 1.11. Редактор списку

У таблиці 1.6 перераховані компоненти форми додатка, а в таблиці 1.7 наведені значення властивостей компонентів.

Таблиця 1.6. Компоненти форми

Компонент Призначення
ListBoxl Для вибору країни, для якої треба виконати перерахування
Editl Для введення ваги у фунтах
Label1, Label2, Label3 Для виводу пояснювального тексту про призначення полів введення
Label4 Для виводу результату перерахування
Button1 Для активізації процедури перерахування ваги з фунтів у кілограми

Таблиця 1.7. Значення властивостей компонентів

Властивість Значення
Form1 .Caption Приклад використання case
Editl. Text  
Label1 . Caption Виберіть країну, уведіть кількість фунтів і клацніть на кнопці Обчислити
Label2 .Caption Країна
Label3. Caption Фунтів
Button1. Caption Обчислити

Процедура перерахування, що виконується в результаті кліка на командній кнопці Обчислити, множить вагу у фунтах на коефіцієнт, дорівнює кількості кілограмів в одному фунті. Значення коефіцієнта визначається за номером обраного зі списку елемента.

У лістингу 1.3 наведений текст програми перерахування ваги з фунтів у кілограми.

Лістинг 1.3. Перерахування ваги з фунтів у кілограми

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Classes,

Graphics, Controls, Forms, Dialogs, StdCtrls;

type

TForm1 = class(TForm)

Label2: TLabel;

Editl: TEdit; // поле введення ваги у фунтах

Button1: TButton; // кнопка Обчислити

Label1: TLabel;

Label: TLabel;

ListBox1: TListBox; // список країн

Label4: TLabel; // поле виводу результату - ваги в кілограмах

procedure FqrmCreate(Sender: TObject);

procedure ButtonlClick(Sender: TObject); private

{ Private declarations } public

{ Public declarations } end;

var

Form1: TForml;

implementation

{$R *.DFM}

procedure TForml.FormCreate(Sender: TObject);

begin

{

ListBox1.items.add('Росія');

ListBox1.items.add('Австрія');

ListBox1.iterns.add('Англія');

ListBox1.items.add('Німеччина');

ListBox1.iterns.add ('Данія');

ListBoxl.iterns.add('Ісландія');

ListBox1.iterns.add ('Італія');

ListBox1.items.add ('Нідерланди'); }

ListBox1.itemindex:=0; end;

procedure TForm1.ButtonlClick(Sender: TObject);

var

funt:real; // вага у фунтах

kg:real; // вага в кілограмах

k:real; // коефіцієнт перерахування

begin

case ListBoxl.Itemindex of

0: k:=0.4095; // Росія

1: k:=0.453592; // Англія

2:k:=0.56001; // Австрія

3..5,7:k:=0.5; // Німеччина, Данія, Ісландія, Нідерланди

6: k:=0.31762; // Італія

end;

funt:=StrToFloat(Editl.Text);

kg:=k*funt;

label4.caption:=Editl.Text

+ ' ф. - це '

+ FloatToStr(kg,ffFixed, 6,3) + 'кг.';

end;

end.

Варто звернути увагу на процедуру обробки події FormCreate, що відбувається в момент створення форми (форма створюється автоматично при запуску програми). Цю процедуру можна використати для ініціалізації змінних програми, у тому числі і для додавання елементів у список. У наведеному тексті програми інструкції створення списку закоментовані, тому що список був створений за допомогою редактора рядків під час створення форми.

 

Задача 2. Розглянемо ще один приклад використання інструкції case. При виведенні числової інформації з текстом, що пояснює, виникає проблема узгодження виведеного значення і закінчення пояснюючого тексту.

Наприклад, залежно від числового значення текст, що пояснює, до грошової величини може бути: "рубль", "рублів" або "рубля" (123 рубля, 120 рублів, 121 рубль). Очевидно, що закінчення слова, що пояснює, визначається останньою цифрою числа, що показано в таблиці 1.8.

Таблиця 1.8. Залежність закінчення тексту від останньої цифри числа

Цифра текст, пояснення
0, 5, 6, 7, 8, 9 Рублів
Рубль
2,3,4 Рубля

Наведене в таблиці правило має виключення для чисел, що кінчаються на 11, 12, 13, 14. Для них текст, що пояснює, повинен бути "рублів".

Діалогове вікно програми наведене на рисунку 1.12, а текст - у лістингу 1.4. текст, пояснення, що формує процедура обробки події onKeyPress.

Рис. 1.12. Діалогове вікно програми

Лістинг 1.4. Формування тексту, пояснення

unit. rub_l; interface

uses

Windows, Messages, SysUtils,

Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;

type

TForm1 = class(TForm) Label1: TLabel;

Editl: TEdit; Label2: TLabel;

procedure EditlKeyPress(Sender: TObject; var Key: Char);

private

{ Private declarations } public

{ Public declarations } end;

var

Form1: TForm1;

implementation

{$R *.dfm}

// натискання клавіші

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char) var

n : integer; // число

r : integer; // залишок від розподілу n на 10

text: string[10]; // формований текст, що пояснює

begin

if Key = chr(VK_RETURN) then

begin

n := StrToInt(Editl.Text); if n > 100

then n:=n mod 100;

if (n >= 11) and (n <= 14) then

text:=' рублів' else begin

r:= n mod 10; case r of

1: text:=' рубль'; 2 .. 4: text:=' рублі';

else text:=' рублів';

end;

end;

Label2.Caption := IntToStr(n)+ text; end;

end;

end.

 

7. Оформлення звіту

7.1. Мета роботи.

7.2. Завдання.

7.3. Виконання індивідуального завдання.

7.4. Висновки по роботі.

 

Література:

1. Митчел К. Керман “Программирование и отладка в Delphi Учебный курс”. Вильямс.2002р.

2. Турбо Паскаль 7.0.Киев: Издательская група BHV.

3. Г.В.Поддубный “Введение в програмирование на Delphi. Учебное пособие”.Одеса, 1999р.

 

Індивідуальні завдання:

Задача 1.

Скласти програму опитування з наступними пунктами опитування:

 


Задача 2:

Скласти програму опитування з наступними пунктами опитування: