Знакомство с компонентами RadioGroup и CheckBox обработка строк типа String в среде Delphi

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



На тему: «Знакомство с компонентами 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. Разместите на форме компонент RadioGroup1 из палитры Standard. Задайте для свойства Caption значение «Операция». Затем выберите свойство Items (это свойство задает количество переключателей в группе и надписи около них). В окне String List Editor введите список элементов – символов арифметических операций в столбик: +, -, *, /. Щелкните мышкой по кнопке ОК, завершите формирование списка арифметических операций.

4. В окне Инспектора объектов задайте для свойства RadioGroup. ItemIndex значение 0, чтобы сделать первую кнопку (сложение) выбранной по умолчанию. Задайте размер символов этого компонента, установив значение 14 пунктов.

Примечание: определить во время выполнения, какая кнопка выбрана в данный момент, можно по индексу ItemIndex (0 означает первую кнопку, -1 – ни одна кнопка не выбрана).

Форма будет иметь следующий вид:




Калькулятор

Операнд 1

Операнд 2

Операция

+

_

*

/

Вычислить

Результат

Рис. 3.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 (составной оператор) и сохраните проект Calculator2, а модуль – mainCalc2.



Задание 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.



		Выделите на форме объект Edit1 и выберите в окне Инспектора объектов на странице Events (События) событие OnKeyPress. Дважды щелкните левой кнопкой мыши на пустом поле списка этого события. После этого курсор переместиться в окно Редактора кода и в разделе interface появится запись процедуры обработчика события:

Procedure Edit1KeyPress (Sender: TObject; var Key: Char);

		Вставьте в тело процедуры следующий оператор:

If not (Key in [‘0’.’9’, ‘+’, ‘– ‘]) then Key:= #0;

Действие оператора сводится к сравнению значения переменной Key с множеством значений от 0 до 9 и символов «+» и «–». Если символ нажатой клавиши не входит во множество, то Key присваивается значение нулевого символа (#0). Таким образом, в окне Edit1 будет отображаться текст, состоящий из цифр и знаков «+, -».

		Аналогичным образом создайте процедуру обработки события компонента Edit2.

		Сохраните приложение и запустите его на выполнение. Проверьте результат работы программы.

Текст модуля приложения имеет следующий вид:

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:=a-b;

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 из соответствующего компонента.








Количество символов в строке

Введите текст

Вычислить

В тексте

Рис. 3.2 Пример формы проекта «Количество символов»



3. Для вычисления количества символов во введенной строке и вывода результата создайте процедуру обработчика события щелчка мышью на кнопке «Вычислить».

4. Введите в текст процедуры следующее описание переменных:

Var

N: integer;

S: string;

5. Введите текст тела процедуры обработки события:

Begin

N:= Length (Edit1. Text); {определить число символов}

Label2. 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 – «Выполнить», CheckBox1. Caption – «Подсчитать число замен», CheckBox2. Caption – «Заменить «а» на «б»». Удалите текст Edit1,2,3 из соответствующих компонентов.



Подсчет и замена символов

Исходный текст на русском языке

Подсчитать число замен

Заменить «а» на «б»

Выполнить

Число замен

Измененный текст

Рис. 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);

{вывод числа замен}

Edit2. Text:= S; {вывод измененного текста}

End;

6. Сохраните проект и запустите на выполнение.