Лабораторна робота
На тему: «Ознайомлення з компонентами RadioGroup і CheckBox, обробка рядків типу String в середовищі Delphi»
Завдання 1. (Калькулятор). Створіть додаток, забезпечує введення двох цілих чисел і виконання над ними арифметичних операцій додавання, множення і речового поділу. Для вибору операцій використовуйте перемикачі, поява повідомлення про помилку при введенні дільника, рівного нулю, виконайте в окремому вікні повідомлень.
Рішення:
1. Збережіть проект в окремій папці «Калькулятор». Проект назвіть Calculator, а файл модуля - mainCalc.pas.
2. Задайте для властивості Form1. Caption значення «Калькулятор». Розмістіть на формі компоненти (див. рис. 3.1) Edit1, 2,3 і Label1, 2,3. Задайте властивості Caption для компонентів Label - «операнд1», «операнд2», «Результат». Видаліть текст Edit1, 2,3 у відповідних компонентах (використовуйте властивість Text). Розмістіть на формі компонент Button1. Кнопку назвіть «Обчислити».
3. Розмістіть на формі компонент RadioGroup 1 з палітри Standard. Задайте для властивості Caption значення «Операція». Потім виберіть властивість Items (це властивість задає кількість перемикачів в групі і написи біля них). У вікні String List Editor введіть список елементів - символів арифметичних операцій в стовпчик: +, -, *, /. Клацніть мишкою по кнопці ОК, завершіть формування списку арифметичних операцій.
4. У вікні Інспектора об'єктів задайте для властивості RadioGroup. ItemIndex значення 0, щоб зробити першу кнопку (додавання) обраної за замовчуванням. Задайте розмір символів цього компонента, встановивши значення 14 пунктів.
Примітка: визначити під час виконання, яка кнопка вибрана в даний момент, можна за індексом ItemIndex (0 означає першу кнопку, -1 - ні одна кнопка не обрана).
Форма буде мати наступний вигляд:
SHAPE \ * MERGEFORMAT
Калькулятор |
Операнд 1 |
Операнд 2 |
Операція |
+ |
_ |
* |
/ |
Обчислити |
Результат |
Рис. 3.1 Приклад форми програми «Калькулятор»
1. Створіть код обробки події клацання на кнопці з написом «Обчислити». Для вирішення задачі обчислення арифметичних операцій введіть в текст процедури TForm1. Button1Click наступний опис:
Var a, b: integer; c: real;
Так як у процедурі обробки натискання кнопки повинне бути 4 варіанти реалізації, по одному для кожної арифметичної операції, то слід записати вибір обчислення за допомогою оператора Case.
В основному тілі процедури обробки події введіть текст інших операторів наступним чином:
Begin
A: = StrToInt (Edit1. Text);
B: = StrToInt (Edit2. Text);
Edit3. Text: = ''; {очистити від результату попередніх обчислень}
Case RadioGroup1. ItemIndex of
0: c: = a + b;
1: c: = a - b;
2: c: = a * b;
3: if b = 0 then ShowMessage ('На нуль ділити не можна! ')
Else c: = a / b;
End;
If RadioGroup. ItemIndex <> 3 then Edit3. Text: = FloatToStrF (c, ffGeneral, 10, 4)
Else if b <> 0 then Edit3. Text: = FloatToStrF (c, ffGeneral, 10, 4);
End;
6. Збережіть і запустіть програму на виконання.
7 *. Самостійно виправте код програми модуля, використовуючи інший варіант оператора Case (складений оператор) і збережіть проект Calculator 2, а модуль - mainCalc 2.
Завдання 2. Відредагуйте текст модуля додатка Calculator таким чином, щоб перед виконанням обчислень виконувалася перевірка: а) задано чи значення операндів, якщо значення операндів не задані, то слід вивести повідомлення про це в окремому вікні; б) заборонити введення будь-яких символів, крім цифр від 0 до 9 і знаків «-», «+».
Рішення (а):
Помістіть перед оператором присвоєння A: = StrToInt (Edit1. Text); рядок:
If (Edit1. Text <>'') and (Edit2. Text <>'') then begin
яка перевіряє значення властивостей Edit1.text і Edit2.text. Якщо ці значення не порожні, то виконується обчислення арифметичної операції, в іншому випадку управління передається на наступний фрагмент програми, який потрібно вставити перед останнім оператором end;
Else ShowMessage ('Не задано значення');
Рішення (б): Для реалізації другої частини завдання необхідно створити обробники подій OnKeyPress для компонентів Edit1, Edit2.
Примітка: параметр Key в обробнику цієї події відповідає символу натиснутої клавіші. При цьому розрізняються символи у верхньому і нижньому регістрах і символи кирилиці латиниці. Клавіші, які не мають відповідних їм кодів ASCII (Shift, Alt, Ctrl і функціональні клавіші), не викликають цієї події. Тому натискання таких комбінацій клавіш, як, наприклад, Shift + A, генерує лише одну подію OnKeyPress, при якому параметр Key дорівнює «А». Для того щоб розпізнавати подібні комбінації клавіш, слід використовувати обробники подій OnKeyDown, OnKeyUp.
1. Виділіть на формі об'єкт Edit1 і виберіть у вікні Інспектора об'єктів на сторінці Events (Події) подія OnKeyPress. Двічі клацніть лівою кнопкою миші на порожньому полі списку цієї події. Після цього курсор переміститися у вікно редактора кодів і в розділі interface з'явиться запис процедури обробника події:
Procedure Edit1KeyPress (Sender: TObject; var Key: Char);
2. Вставте в тіло процедури наступний оператор:
If not (Key in [0 ". '9 ',' + ',' - ']) Then Key: = # 0;
Дія оператора зводиться до порівняння значення змінної Key з безліччю значень від 0 до 9 і символів «+» і «-». Якщо символ натиснутою клавіші не входить в безліч, то Key присвоюється значення нульового символу (# 0). Таким чином, у вікні Edit1 буде відображатися текст, що складається з цифр і знаків «+, -».
3. Аналогічним чином створіть процедуру обробки події компонента Edit2.
4. Збережіть додаток і запустіть його на виконання. Перевірте результат роботи програми.
Текст модуля програми має наступний вигляд:
unit mainCalc;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class (TForm)
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
Button1: TButton;
Edit3: TEdit;
Label3: TLabel;
RadioGroup1: TRadioGroup;
procedure Button1Click (Sender: TObject);
procedure Edit1KeyPress (Sender: TObject; var Key: Char);
procedure Edit2KeyPress (Sender: TObject; var Key: Char);
private {Private declarations}
public {Public declarations}
end;
var
Form1: TForm1;
implementation
{$ R *. dfm}
procedure TForm1. Button1Click (Sender: TObject);
var a, b: integer; c: real;
begin
if (Edit1. Text <>'') and (Edit2. Text <>'') then begin
a: = StrToInt (Edit1. Text);
b: = StrToInt (Edit2. Text);
Edit3. Text :='';
case RadioGroup1. ItemIndex of
0: c: = a + b;
1: c: = ab;
2: c: = a * b;
3: if b = 0 then ShowMessage ('На нуль ділити не можна ") else c: = a / b;
end;
if RadioGroup1. ItemIndex <> 3 then
Edit3. Text: = FloatToStrF (c, ffGeneral, 10,4) else if b <> 0 then
Edit3. Text: = FloatToStrF (c, ffGeneral, 10,4); end
else ShowMessage ('Не задано значення');
end;
procedure TForm1. Edit1KeyPress (Sender: TObject; var Key: Char);
begin
if not (Key in ['0 '.. '9', '+','-']) then Key: = # 0;
end;
procedure TForm1. Edit2KeyPress (Sender: TObject; var Key: Char);
begin
if not (Key in ['0 '.. '9', '+','-']) then Key: = # 0;
end; end.
Завдання 3. Створіть додаток, що пропонує користувачеві ввести рядок, що визначає кількість символів в ній та виводить результат, погоджуючи закінчення слова «символів» з числом символів.
Рішення:
1. Створіть папку «Кількість символів» і збережіть в ній проект «simvol».
2. Розмістіть на формі компоненти: Edit1, Label1, 2, Button1, як показано на рис. 3.2. Задайте значення властивостей Label1. Caption - «Введіть текст», Label2. Caption - «В тексті", Button1. Caption - «Обчислити». Видаліть текст Edit1 з відповідного компонента.
SHAPE \ * MERGEFORMAT
Кількість символів в рядку |
Введіть текст |
Обчислити |
У тексті |
Рис. 3.2 Приклад форми проекту «Кількість символів»
3. Для обчислення кількості символів у введеної рядку та виведення результату створіть процедуру обробника події клацання мишею на кнопці «Обчислити».
4. Введіть у текст процедури наступний опис змінних:
Var
N: integer;
S: string;
5. Введіть текст тіла процедури обробки події:
Begin
N: = Length (Edit 1. Text); {визначити число символів}
Label 2. Caption: = 'У тексті';
If N> 20 then N: = N mod 10; {виділити останню цифру}
Case N of
1: S: = 'символ';
2 .. 4: S: = 'символу';
0, 5 .. 20: S: = 'символів';
End;
Label2. Caption: = Label2. Caption + IntToStr (Length (Edit1. Text)) + S;
End;
Примітка: функція Length - це функція обробки String змінних, визначає кількість символів вводиться рядка (див. розділ 1).
6. Збережіть проект і запустіть програму на виконання. Перегляньте результат програми, задаючи текст з різною кількістю символів і перевіряючи правильність виведення результатів роботи.
Завдання 4. Створіть додаток, яке пропонує ввести текст, а потім замінити символи «а» на «б» у тексті і підрахувати кількість замін.
Рішення:
1. Створіть папку «Заміна символів» і збережіть в ній проект під назвою «zamena», файл модуля збережіть як zmain.pas.
2. Форму програми назвіть «Підрахунок і заміна символів». На формі розташуйте три компоненти Edit, три компоненти Label, один компонент Button і два компоненти CheckBox, як показано на рис. 3.3.
3. Задайте значення властивостей: Label1. Caption - «Оригінальний текст російською мовою», Label2. Caption - «Змінений текст», Label3. Caption - «Кількість замін», Button1. Caption - "Run", CheckBox1. Caption - «Підрахувати число замін», CheckBox2. Caption - «Замінити« а »на« б »». Видаліть текст Edit1, 2,3 з відповідних компонентів.
SHAPE \ * MERGEFORMAT
Підрахунок і заміна символів |
Оригінальний текст російською мовою |
Підрахувати кількість замін |
Замінити «а» на «б» |
Виконати |
Число замін |
Змінений текст |
Рис. 3.3 Приклад форми проекту «Заміна символів»
4. Для заміни та підрахунку символів запишіть процедуру обробки події OnClick для кнопки «Виконати». Введіть наступний опис змінних:
Var
S: string;
N: byte;
Примітка: для пошуку символу в рядку використовуйте функцію Pos. Для програмування варіанти заміни символів використовуйте значення властивості Checked компонента CheckBox.
5. Тіло процедури може бути записано таким чином:
Begin
N: = 0;
Edit3. Text: ='';
Edit2. Text: ='';
S: = Edit1. Text;
If CheckBox2. Checked then {якщо включений прапорець}
While Pos ('a', S)> 0 do {якщо в рядку знайдена буква «а»}
Begin
N: = N + 1;
S [Pos ('A', S)]: = 'б'; {замінити букву «а» на букву «б»}
End;
If CheckBox1. Checked then Edit3. Text: = IntToStr (N);
{Висновок кількості замін}
Edit 2. Text: = S; {висновок зміненого тексту}
End;
6. Збережіть проект і запустіть на виконання.