Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторна робота Delphi_2_2009.doc
Скачиваний:
1
Добавлен:
18.08.2019
Размер:
435.71 Кб
Скачать

Синтаксис функції MessageBox

Функція MessageBox(const Text: WideString; const Caption: WideString = ''; Buttons: TMessageButtons = [smbOK]; Style: TMessageStyle = smsInformation; Default: TMessageButton = smbOK; Escape: TMessageButton = smbCancel): TMessageButton

Використовується для виведення вікна повідомлення з однією або кількома функціями.

Caption – назва діалогового вікна

Text – повідомлення, що з’явиться у вікні

Buttons – відображає які саме кнопки матиме діалогове вікно

Default – яка з кнопок буде обрана по замовчуванню

Escape – визначає, яка з кнопок буде натиснута, коли користувач натисне esc

MessageBox повертає 0, якщо недостатньо пам’яті для створення вікна повідомлення.

В інших випадках вона повертає кнопку, яку натискає користувач.

Існує також можливість виводити повідомлення не лише для користувача, а й для розробника.

{$MESSAGE 'Пароль введено успішно!'} містить підказку

{$Message Hint ' Введіть ціле число '} містить спливаючу підказку

{$Message Warn ' Введення неможливе '} містить попередження

{$Message Error ' Not implemented '} містить помилку, але продовжує компіляцію

{$Message Fatal ' Невірний тип аргументу '} містить помилку ,компіляція неможлива

Приклади реалізації програм на тему «Умовний оператор»

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

Умовна інструкція в загальному випадку призначається для організації розгалуження програми на два напрямки і має формат:

If <умова > then <інструкція 1> else <інструкція 2>

Умова представляє собою вираз логічного типу. Інструкція працює наступним чином: якщо умова істинна(має значення True) , то виконується інструкція 1, у протилежному випадку – інструкція 2. Обидві інструкції можуть бути складеними .

Допускається запис умовної інструкції в скороченій формі, коли слово else і інструкція 2 відсутні. В такому випадку при невиконанні умови керування зразу передається інструкції, яка слідує за умовною.

Розглянемо приклад реалізації програми, в якому використовується умовний оператор.

Приклад 1. Створити програму, яка буде визначати , чи введене число є цілим чи дійсним.

Створимо форму (Рис.2.4.), на якій буде розташоване поле для введення числа, а також надпис, якому буде привласнюватися відповідь.

Рис.2.4. Загальний вигляд форми до прикладу 1

Для перевірки числа запрограмуємо кнопку «Перевірити», клацнувши на ній двічі. Процедура перевірки введеного числа буде виглядати:

procedure TForm1.Button1Click(Sender: TObject);

var a:real;

begin

a:=strtofloat(edit1.Text);

if frac(a)=0 then

Label2.Caption:='Введено ціле число ' else

Label2.Caption:='Введено не ціле число';

end;

У процедурі використовується повна команда розгалуження. Для перевірки використовується стандартна функція визначення дробової частини числа. Відповідно в простого числа дробова частина дорівнює нулю. Результатом роботи програми буде :

Рис.2.5. Робоча форма до прикладу 1

Для організації розгалуження на три і більше напрямків можна використати декілька умовних інструкцій , вкладених одна в одну. При цьому кожне слово else відповідає тому then , яке безпосередньо йому передувало.

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

Приклад 2. Відомо , що в заданих числах а1, а2, а3, и а4 одне відрізняється від трьох інших, рівних між собою. Визначити , яке саме з цих чисел відмінне та привласнити номер цього числа змінній n. Вивести отриманий результат в текстове поле(Label).

Спочатку створимо форму з полями Edit, в які можна буде вводити вхідні дані, кнопкою та полем виведення результату(Рис.2.6.). Тепер запрограмуємо кнопку «Визначити» для визначення порядкового номера числа, відмінного від інших. Для цього необхідно двічі клацнути на ній лівою клавішею миші. В результаті появиться заготовка процедури Button1Click.

procedure TForm1.Button1Click(Sender: TObject);

begin

if (a1=a2) and (a1=a3) then n:=4

else if (a1=a2) and (a1=a4) then n:=3

else if (a1=a3) and (a1=a4) then n:=2 else n:=1;

Form1.Label5.Caption:='Номер змінної'+FloatToStr(n);

end;

Рис.2.6. Приклад розташування об’єктів на формі

Оскільки дані, що вводяться в поля Edit рядкового типу, то для обчислень необхідно перевести їх в числа. Це можна зробити за допомогою стандартних функцій(StrToFloat або StrToInt), або програмно за допомогою процедури:

procedure TForm1.Edit1Change(Sender: TObject);

begin

a1:=StrToFloat(Form1.Edit1.Text);

end;

Аналогічні процедури використовуються і для інших полів Edit. Результатом роботи програми буде форма, зображена на рис.2.7.

Рис.2.7. Робоча форма до прикладу 2

Приклад 3. Скласти програму для обчислення значення π з заданою точністю та вивести кількість підсумованих членів ряду.

Заповнюємо форму об’єктами, як показано на рис.2.8:

Рис.2.8. Приклад заповнення об’єктами форми

Для обчислення значення π необхідно запрограмувати кнопку «Розрахувати». Процедура натискання на цю кнопку буде виглядати:

procedure TForm1.Button1Click(Sender: TObject);

var

pi:real; // значення, що обчислюється, π

t:real; // точність обчислення, вводиться в поле Edit

n:integer; // номер члена ряду

elem:real; // значення члена ряду

begin

pi := 0;

n := 1;

t := StrToFloat(edit1.text) ;

elem := 1; // щоб почати цикл

while elem >= t do

begin

elem :=1/(2*n -1); //починаючи з першого номера обчислюємо значення членів ряду

if n MOD 2=0 then

pi:=pi-elem else

pi:=pi+elem;

n:=n+1;

end;

pi:= pi * 4;

label2.caption:= ' π дорівнює '+FloatToStr(pi)+#13

+ 'Просумовано '+IntTostr(n)+' членів ряду.';

end;

В результаті роботи програми ми отримаємо значення числа π з потрібною нам кількістю знаків після коми. Форма працюючої програми буде мати вигляд(Рис.2.9.):

Зауваження: ступінь точності в поле Edit потрібно вводити в експоненціальному вигляді – 10е-N, де N=1,2,3…

Рис.2.9. Результат роботи програми

Команда вибору (case) являється узагальненою умовною інструкцією і дозволяє зробити вибір з довільної кількості варіантів. Тобто організувати розгалуження на довільну кількість напрямків. Ця інструкція складається з виразу (селектора), списку варіантів і необов’язкової гілки else.

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

Приклад 4. Для введеної суми реалізувати виведення пояснювального слова з відповідним закінченням.

У залежності від числового значення текст, що пояснює яка валюта використовується, може бути: “гривня”, “гривні” чи “гривень”. Очевидно, що закінчення пояснювального слова визначається останньою цифрою числа:

1

гривня

2,3,4

гривні

0, 5, 6, 7, 8, 9

гривень

Відповідно, пояснювальні слова до чисел, що закінчуватимуться на такі цифри, будуть такими самими. Але для чисел, що закінчуються на 11, 12, 13, 14 пояснювальний текст буде «гривень». Приклад розміщення об’єктів на формі зображено на рис.2.10.

Рис.2.10. Приклад заповнення форми об’єктами

Підбір пояснювального слова до введеної суми здійснюється після натискання клавіші Enter. Програмно це реалізується процедурою обробки події onKeyPress.

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

var

n: integer; // число

n1,n2:char;

r : integer; // залишок від ділення n на 10

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

begin

if Key = chr(VK_RETURN) then // якщо натиснута клавіша Enter, виконувати

begin

n := StrToInt(Edit1.Text);

n1:=Edit1.Text[length(Edit1.Text)]; // в n1 запам’ятовуємо останній введений символ

n2:=Edit1.Text[length(Edit1.Text)-1]; // n2 - передостанній введений символ

If StrToInt(n2)<>1 then // якщо передостанній не дорівнює 1, тоді вибираємо останній із таких варіантів

Case n1 of

'1': Label2.Caption := IntToStr(n)+ ' гривня ';

'2'..'4': Label2.Caption := IntToStr(n)+' гривні ';

'5'..'9','0': Label2.Caption := IntToStr(n)+ ' гривень ';

End

Еlse // інакше пояснювальне слово буде «гривень»

Label2.Caption := IntToStr(n)+ ' гривень ';

end; end;

Результатом роботи програми буде автоматичний підбір потрібного пояснювального напису до введеної суми. Діалогове вікно програми зображене на рис.2.11.

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

Приклад 5. Переведення секунд в години та хвилини.

Потрібно створити форму для переведення часу з секунд в хвилини та години при натисканні кнопки, розташувати на формі поле Edit, в яке вводитимуться вхідні дані.

Приклад створення форми на рис.2.12.

Рис.2.12. Приклад заповнення об’єктами форми

Для реалізації програми необхідно запрограмувати кнопку «Перерахувати». Спочатку створимо функцію, в якій буде проводитися переведення секунд в хвилини.

Function hour(s:integer):string; //s-число, введене в поле Edit

Begin

result:=IntToSTr(s Div 3600)+'годин'+IntToStr((s-3600*(s div 3600))div 60)+'хвилин ';End;

В процедурі натискання на кнопку «Перерахувати» викликається функція Hour для автоматичного обчислення результату, але замість s уже безпосередньо підставляється значення, введене в поле Edit.

procedure TForm1.Button1Click(Sender: TObject);

begin

a:=StrToInt(Form1.Edit1.Text); //Переводимо значення з рядкового типу в ціле

Form1.Label2.Caption:=hour(a); //Викликаємо функцію

end;

Додамо до даної форми два діалогових вікна. Першим буде появлятися діалогове вікно для вводу рядка тексту (прізвище користувача)(Рис.2.13.), а інше – вікно повідомлення з рядком та кнопкою OK (Рис.2.14.). Для відображення цих вікон скористаємося стандартними функціями ShowMessage та InputBox

.

Рис.2.13. Вікно запиту на введення прізвища Рис.2.14. Вікно повідомлення

Процедура відображення діалогових вікон буде виглядати:

procedure TForm1.FormCreate(Sender: TObject);

begin

a:=InputBox('Введення даних’,’Введіть своє прізвище’,' ');

form1.Label3.Caption:=a; //Введене прізвище буде відображене на формі

ShowMessage('Введіть час в секундах');

end;

При чому діалогові вікна будуть появлятися в такому порядку, в якому вони викликаються в процедурі. Результатом програми буде форма, зображена на рис.2.15.

Рис.2.15. Вікно робочої форми