Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 7.doc
Скачиваний:
3
Добавлен:
21.11.2019
Размер:
198.14 Кб
Скачать

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.