На тему: «Ознайомлення з компонентами 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
Рис. 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. Збережіть проект і запустіть на виконання.