* Данная работа не является научным трудом, не является выпускной квалификационной работой и представляет собой результат обработки, структурирования и форматирования собранной информации, предназначенной для использования в качестве источника материала при самостоятельной подготовки учебных работ.
На тему: « Знакомство с компонентами RadioGroup и CheckBox , обработка строк типа String в среде Delphi »
Задание 1. (Калькулятор). Создайте приложение, обеспечивающее ввод дву х целых чисел и выполнение над ними арифметических операций сложения, ум ножения и вещественного деления. Для выбора операций используйте перек лючатели, вывод сообщения об ошибке при вводе делителя, равного нулю, вып олните в отдельном окне сообщений.
Решение:
1. Сохраните проект в отдельной папке «Калькулято р». Проект назовите Calculator , а файл модуля – mainCalc . pas .
2. Задайте для свойства Form 1 . Ca ption значение «Калькулятор». Разместите на форме компоненты (см. рис. 3 .1) Edit 1,2,3 и Label 1,2,3. Задайте свойства Caption для компонентов Label – «операнд1», «операнд2», «Результат». Удалите текст Edit 1,2,3 в соответствующих ком понентах (используйте свойство Text ). Разместите на форме компонент Button 1. Кнопку назовите «Вычисли ть».
3. Разместите на форме компонент RadioGroup 1 из палитры Standard . Задайте для свойства Caption значение «Операция ». Затем выберите свойство Items (это свойство задает количество переключателей в группе и н адписи около них). В окне String List Editor введите список элементов – символов арифметических операций в столбик: +, -, *, /. Щелкните мышкой по кн опке ОК, завершите формирование списка арифметических операций.
4. В окне Инспектора объектов задайте для свойства RadioGroup . It emIndex значение 0, чтобы сделать первую кнопку (сложение) выбранн ой по умолчанию. Задайте размер символов этого компонента, установив зна чение 14 пунктов.
Примечание: определить во время выполнения, какая кнопка выбрана в данный момент, можно по индексу ItemIndex (0 означает перв ую кнопку, -1 – ни одна кнопка не выбрана).
Форма будет иметь следующий вид:
Рис. 3 .1 Пример формы приложения «Калькулятор»
1. Создайте код обработк и события щелчка на кнопке с надписью «Вычислить». Для решения задачи вы числения арифметических операций введите в текст процедуры TForm 1 . Bu tton 1 Click следующее описание:
Var a, b : integer ; c : real ;
Так как в процедуре обработки нажатия кнопки долж но быть 4 варианта реализации, по одному для каждой арифметической опера ции, то следует записать выбор вычисления с помощью оператора Case .
В основном теле процедуры обработки события введите текст остальных оп ераторов следующим образом:
Begin
A:=StrToIn t (Edit1. Te xt) ;
B:=StrToIn t (Edit2. Te xt) ;
Edit3 . Te xt :=’ ‘ ; очистить от результата предыдущих вычи слений
Case RadioGroup1 . It emIndex 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 . It emIndex <> 3 then Edit3 . Te xt:= FloatToStr F (c, ffGeneral, 10, 4)
Else if b <> 0 then Edit3 . Te xt:= FloatToStr F (c, ffGeneral, 10, 4) ;
End ;
6. Сохраните и запустите приложение на выполнение.
7*. Самостоятельно исправьт е код программы модуля, использ уя другой вариант оператора Case (составной оператор) и сохраните проект Calculator 2, а модуль – mainCalc 2.
Задание 2. Отредактируйте текст модуля приложения Calculator таким образом, чтобы перед выполнением вычислений выполнял ась проверка: а) заданы ли значения операндов, если значения операндов не заданы, то следует вывести сообщения об этом в отдельном окне; б) запретит ь ввод любых символов, кроме цифр от 0 до 9 и знаков « – » , «+».
Решение (а):
Поместите перед оператором присваивания A := StrToIn t ( Edit 1. Te xt) ; строку :
If (Edit1 . Te xt <> ‘ ’ ) and (Edit2 . Te xt <> ‘ ’ ) then begin
которая проверяет значения свойств Edit 1. text и Edit 2. text . Если эти значения не пусты, то выполняется вычисление арифметической операции, в противном с лучае управление передается на следующий фрагмент программы, который н ужно вставить перед последним оператором end ;
Else ShowMessage ( ‘ Не заданы значения’ ) ;
Решение (б): Для реализации второй части задания необходимо создать обр аботчики событий OnKeyPress для компонентов Edit 1, Edit 2.
Примечание: параметр Key в обработчике этого события соответствует символу нажатой клавиши. При этом различаются си мволы в верхнем и нижнем регистрах и символы кириллицы латиницы. Клавиши , не имеющие соответствующих им кодов ASCII ( Shift , Alt , Ctrl и функциональные кл авиши), не вызывают этого события. Поэтому нажатие таких комбинаций клав иш, как, например, Shift + A , генерирует тольк о одно событие OnKeyPress , при котором параметр Key равен «А». Для того чтобы распознавать подобные комбинации клавиш, следует использовать обработчики событий OnKeyDown , OnKeyUp .
1. Выделите на форме объ ект Edit 1 и выберите в окне Инспектора объектов на странице 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). Таким образом, в окне Edit 1 будет отобр ажаться текст, состоящий из цифр и знаков «+, -».
3. Аналогичным образом создайте процедуру обработки события компонента Edit 2.
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 Button1Clic k (Sender: TObject);
procedure Edit1KeyPres s (Sender: TObject; var Key: Char);
procedure Edit2KeyPres s (Sender: TObject; var Key: Char);
private Private declarations
public Public declarations
end;
var
Form1: TForm1;
implementation
$R *.dfm
procedure TForm1 . Bu tton1Clic k (Sender: TObject);
var a , b : integer; c: real;
begin
if (Edit1 . Te xt<>'') and (Edit2 . Te xt<>'') then begin
a:=StrToIn t (Edit1. Te xt);
b:=StrToIn t (Edit2. Te xt);
Edit3 . Te xt : ='';
case RadioGroup1 . It emIndex 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 . It emIndex <> 3 then
Edit3 . Te xt:=FloatToStr F (c, ffGenera l, 1 0,4) else if b<>0 then
Edit3 . Te xt:=FloatToStr F (c, ffGenera l, 1 0,4); end
else ShowMessage ('Не заданы значения');
end;
procedure TForm1 . Ed it1KeyPres s (Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9 ', ' + ', ' -']) then Key:=#0;
end;
procedure TForm1 . Ed it2KeyPres s (Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9 ', ' + ', ' -']) then Key:=#0;
end; end.
Задание 3. Создайте прилож ение, предлагающее пользователю ввести строку, определяющее количеств о символов в ней и выводящее результат, согласуя окончание слова «символ ов» с числом символов.
Решение:
1. Создайте папку «Количество символов» и сохраните в ней проект « simvol ».
2. Разместите на форме компоненты: Edit 1, Label 1,2, Button 1, к ак показано на рис. 3 .2. Задайте значения свойств Label 1 . Ca ption – «Введите текст», Label 2 . Ca ption – «В тексте», Button 1 . Ca ption – «Вычислить». Удалите те кст Edit1 из соответст вующего компонента.
Рис. 3 .2 Пример формы проекта «Количество символов»
3. Для вычисления количества символов во введенно й строке и вывода результата создайте процедуру обработчика события ще лчка мышью на кнопке «Вычислить».
4. Введите в текст процедуры следующее описание переменных:
Var
N : integer ;
S : string ;
5. Введите текст тела процедуры обработки события:
Begin
N := Lengt h ( Edit 1. Te xt ) ; определить число символов
Label 2 . Ca ption := ‘ В текст е’ ;
If N >20 then N := N mod 10 ; выделить последнюю цифру
Case N of
1 : S : = ‘ символ ’ ;
2..4 : S : = ‘ символа’ ;
0, 5..20 : S : = ‘ символов’ ;
End ;
Label2 . Ca ption : = Label2 . Ca ption + IntToSt r (Length( Edit1 . Te xt )) + S ;
End ;
Примечание: функция Length – это функция обработки String переменных, определяет количество символов ввод имой строки (см. раздел 1).
6. Сохраните проект и запустите программу на выполнение. Просмотрите рез ультат программы, задавая текст с разным количеством символов и проверя я правильность вывода результатов работы.
Задание 4. Создайте прилож ение, которое предлагает ввести текст, а затем заменить символы «а» на «б » в тексте и подсчитать количество замен.
Решение:
1. Создайте папку «Замена символов» и сохраните в ней проект под название м « zamena », файл модуля сохраните как zmain . pas .
2. Форму приложения назовите «Подсчет и замена символов». На форме распол ожите три компонента Edit , три компонента Label , один компонент Button и два компонента CheckBox , как показано на рис. 3 .3.
3. Задайте значения свойств: Label 1 . Ca ption – «Исходный текст на русском языке», Label 2 . Ca ption – «Измененный текст», Label 3 . Ca ption – «Число замен», Button 1 . Ca ption – «Выполнить», CheckBox 1 . Ca ption – «Подсчитать число замен », CheckBox 2 . Ca ption – «Заменить «а» на «б» ». Удалите текст Edit1,2,3 из соответствующих компонентов.
Рис. 3 .3 Пример формы проекта «Замена символов»
4. Для замены и подсчета символов запишите процедуру обработки события OnClick для кнопки «Выпо лнить». Введите следующее описание переменных:
Var
S : string ;
N : byte ;
Примечание: для поиска символа в строке используй те функцию Pos . Для п рограммирования варианта замены символов используйте значение свойст ва Checked компонента CheckBox .
5. Тело процедуры может быть записано следующим образом:
Begin
N : = 0 ;
Edit3 . Te xt : = ‘ ’ ;
Edit2 . Te xt : = ‘ ’ ;
S : = Edit1 . Te xt ;
If CheckBox2 . Ch ecked then если включен флажок
While Po s (‘ a ’ , S ) > 0 do если в строке найдена буква «а»
Begin
N : = N + 1 ;
S [ Pos (‘ a ’ , S )] : = ‘ б’ ; заменить букву «а» на букву «б»
End ;
If CheckBox1 . Ch ecked then Edit3 . Te xt : = IntToStr(N) ;
вывод числа замен
Edit 2 . Te xt : = S ; в ывод измененного текста
End ;
6. Сохраните проект и запустите на выполнение.