Лабораторная работа
На тему: «Знакомство с компонентами 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 - ни одна кнопка не выбрана).
Форма будет иметь следующий вид:
Рис. 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 (составной оператор) и сохраните проект 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.
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:=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. Сохраните проект и запустите на выполнение.
Контрольная работа | Концепция информатизации Российской Федерации |
Контрольная работа | Причины агрессивного поведения. Методы работы с агрессивными детьми |
Контрольная работа | Алгоритм выбора и реализации предпринимательской идеи |
Контрольная работа | Системы управления взаимоотношения с клиентами |
Контрольная работа | Учет материальных затрат в бухгалтерском учете |
Контрольная работа | Геополитическое положение России |
Контрольная работа | Особенности вознаграждения работников в организации |
Контрольная работа | Виды запасов |
Контрольная работа | Психоанализ |
Контрольная работа | Экономико-географическая характеристика Печорского угольного бассейна 2 |
Контрольная работа | Агропочвоведение |
Контрольная работа | Великая Отечественная война советского народа 1941 1945 гг. |
Контрольная работа | Образование белорусской национальной государственности. Провозглашение БНР и БССР |
Контрольная работа | Мониторинг и охрана городских земель |
Контрольная работа | Составление платежного баланса |