- •5.2.5. Линейка Dialogs
- •5.4. Пример «Перевод в двоичную систему счисления»
- •Глава 6. Структурные типы данных
- •6.1. Совместимость типов
- •6.2. Массивы
- •6.2.1. Статические массивы
- •6.2.2. Физическая структура
- •6.2.3. Операции
- •6.2.4. Компоненты grid
- •6.2.5. Пример 1: умножение матрицы на строку
- •6.2.6. Динамические массивы
- •6.2.7. Пример 2. Неповторяющиеся элементы массива
5.4. Пример «Перевод в двоичную систему счисления»
В
Рис.
5.2. Форма проекта
Создадим новый проект, запишем его в новый каталог и на форму выставим следующие компоненты: Label1, Edit1, RadioGroup1, Button1, Button2 (рис. 5.2). В редакторе Объектов измерим свойства: Button1.Name=OkButton, Button2.Name=CloseButton, Button1.Caption =Ok, Button2.Caption=Close.
У компонента RadioGroup1 в Инспекторе Объектов для свойства Items вызовем инструмент String List Editor, в котором введем две строки: '2 -> 10' и '10 -> 2'. Если у этого компонента будет отмечена первая строка, то свойство ItemIndex=0, если будет отмечена вторая строка, то ItemIndex=1.
Двойным щелчком на компоненте CloseButton создадим обработчик события CloseButtonClick и вызовем в нем метод закрытия формы:
procedure TForm1.CloseButtonClick(Sender: TObject);
begin
Close;
end;
Двойным щелчком на компоненте OkButton создадим обработчик события OkButtonClick и напишем в нем следующие строки:
procedure TForm1.OkButtonClick(Sender: TObject);
begin
if Edit1.Text<>'' then
case RadioGroup1.ItemIndex of
0: if Test2
then Rewer2_10
else ShowMessage('Это не двойчное число!');
1: if Test10
then Rewer10_2
else ShowMessage('Это не десятичное число!');
end
else ShowMessage('Пустая строка!');
end;
В этой процедуре, прежде всего, проверяется пустота свойства Edit1.Text. Если эта строка пуста, то вызывается диалог ShowMessage('Пустая строка!'), иначе начинает работать оператор case, в котором, в зависимости от свойства RadioGroup1.ItemIndex, вызывается либо метод преобразования двоичного числа в десятичное Rewer2_10, либо метод преобразования десятичного числа в двоичное Rewer10_2. Перед вызовом метода Rewer2_10 метод Test2 проверяет что в свойстве Edit1.Text действительно содержится двоичное число, а перед вызовом метода Rewer10_2 метод Test10 проверяет что в свойстве Edit1.Text действительно содержится десятичное число. В противном случае появляются сообщения ShowMessage('Это не двойчное число!') или ShowMessage('Это не десятичное число!').
Методы Test2 и Test10 представляют собой логические функции, которые необходимо прописать в классе Tform1:
function TForm1.Test2: boolean;
var i: byte;
Ok: boolean;
begin
s:=Edit1.Text; Ok:=true; i:=0;
while (i<Length(s)) and Ok do
begin
i:=i+1; Ok:=s[i] in ['0','1'];
end;
Test2:=Ok
end;
function TForm1.Test10: boolean;
var i: byte;
Ok: boolean;
begin
s:=Edit1.Text; Ok:=true; i:=0;
while (i<Length(s)) and Ok do
begin
i:=i+1; Ok:=s[i] in ['0'..'9'];
end;
Test10:=Ok
end;
Они вернут значение False, если хотя бы один из символов строки не попадет в допустимый диапазон двоичного или десятичного представления.
Методы Rewer2_10 и Rewer10_2 преобразуют двоичное число в десятичное или десятичное в двоичное:
procedure TForm1.Rewer2_10;
var i: byte;
l: integer;
begin
s:=Edit1.Text; l:=0;
for i:=1 to Length(s) do l:=2*l+Ord(s[i])-Ord('0');
Label1.Caption:=IntToStr(l);
end;
procedure TForm1.Rewer10_2;
var i: byte;
l: integer;
begin
l:=StrToInt(Edit1.Text); s:='';
while l<>0 do
begin
s:=IntToStr(l mod 2)+s; l:=l div 2;
end;
Label1.Caption:=s;
end;
Эти два метода также должны быть прописаны в классе TForm1. Метод Rewer2_10 готовит целое число l, которое с помощью функции IntToStr преобразуется в строку и присваивается свойству Label1.Caption. Метод Rewer10_2 готовит строку s с двоичным представлением числа, которая также присваивается свойству Label1.Caption.