Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Dec_Hex-2.doc
Скачиваний:
21
Добавлен:
26.05.2015
Размер:
1.59 Mб
Скачать

3.4. Порядок работы

Для правильного функционирования системы необходимо сначала ввести данные. Для наиболее простого ввод информации мы используем формы ввода. Вся информация обрабатывается мгновенно и выводится в соседнем окне.

Порядок работы:

- Запустить приложение «Dec to Hex». Запуск осуществляется двойным нажатием левой кнопки мышки;

- Появится «Главное меню», которое управляет следующими элементами (см. Приложение 2):

  • - Кнопка вычисления;

  • - Кнопка очистки данных;

  • - Кнопка вывода информации о программе;

3.5. Исходный код

unit F_DecHex;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ExtCtrls, math, XPMan;

type

TMain_form = class(TForm)

Button_ok: TButton;

Button_clear: TButton;

gb10: TGroupBox;

gbRes: TGroupBox;

m10: TMemo;

mRes: TMemo;

Button1: TButton;

procedure Button_clearClick(Sender: TObject);

procedure Button_okClick(Sender: TObject);

procedure memo_chisloKeyPress(Sender: TObject; var Key: Char);

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Main_form: TMain_form;

implementation

uses F_About;

{$R *.dfm}

procedure TMain_form.Button_clearClick(Sender: TObject);

var

i, i2: integer;

begin

//Очистка компонент ввода-вывода

m10.Clear;

mRes.Clear;

//Установка фокуса

m10.SetFocus;

end;

//Возводим X в степень Y

function stepen(x,y: integer): real;

var

i, p: integer;

begin

p:=x;

if y=0 then

begin

stepen:=1;

end

else

begin

for i:=1 to y-1 do

begin

p:=p*x;

end;

stepen:=p;

end;

if y<0 then

begin

for i:=1 to abs(y+1) do

begin

p:=p*x;

end;

stepen:=1/p;

end;

end;

function Good_write (x: real): string;

begin

if x<10 then good_write:=FloatToStr(x);

if x=10 then Good_write:='a';

if x=11 then Good_write:='b';

if x=12 then Good_write:='c';

if x=13 then Good_write:='d';

if x=14 then Good_write:='e';

if x=15 then Good_write:='f';

if x=16 then Good_write:='g';

if x=17 then Good_write:='h';

if x=18 then Good_write:='i';

if x=19 then Good_write:='j';

if x=20 then Good_write:='k';

if x=21 then Good_write:='l';

if x=22 then Good_write:='m';

if x=23 then Good_write:='n';

if x=24 then Good_write:='o';

if x=25 then Good_write:='p';

if x=26 then Good_write:='q';

if x=27 then Good_write:='r';

if x=28 then Good_write:='s';

if x=29 then Good_write:='t';

if x=30 then Good_write:='u';

if x=31 then Good_write:='v';

if x=32 then Good_write:='w';

if x=33 then Good_write:='x';

if x=34 then Good_write:='y';

if x=35 then Good_write:='z';

end;

//Перевод из 10-ричной СС

function IN_ALL_IZ_10(chislo: string; IN_SS: integer): string;

var

a_for_integer: array[1..10000,1..4] of Int64;

i, i2, k, j, z: integer;

do_zap, temp: string;

begin

//Начальные значения

k:=0;

chislo:=trim(lowercase(chislo));

do_zap:='';

k:=0;

//Обработаем данные до запятой

a_for_integer[1,1]:=StrToInt64(chislo);

//Вычислим целую часть

j:=1;

while a_for_integer[j,1]<>0 do

begin

a_for_integer[j,2]:=a_for_integer[j,1] div IN_SS;

a_for_integer[j,3]:=a_for_integer[j,1] mod IN_SS;

a_for_integer[j+1,1]:=a_for_integer[j,2];

j:=j+1;

end;

for i2:=j-1 downto 1 do do_zap:=do_zap+good_write(a_for_integer[i2,3]);

IN_All_IZ_10:=(do_zap);

end;

procedure TMain_form.Button_okClick(Sender: TObject);

var

lstNumber : TStringList;

i, n, k, iLength: integer;

sNumber, sText : string;

begin

//Очистка поля результатов

lstNumber:=TStringList.Create;

lstNumber.Clear;

mRes.ReadOnly:=false;

mRes.Clear;

sText:=m10.Text;

//Формирование списка чисел (различные варианты "изъятия")

n:=1;

k:=1;

iLength:=length(sText);

while k<=iLength do

begin

if (sText[k]=',') or (sText[k]=#13) then

begin

lstNumber.Add(trim(copy(sText,n,k-n)));

n:=k+1;

end

else

if k=iLength then

lstNumber.Add(trim(copy(sText,n,k-n+1)));

inc(k);

end;

//Перевод чисел (вывод списка)

for i:=0 to lstNumber.Count-1 do

begin

mRes.Lines.Add(UpperCase(in_ALL_IZ_10(lstNumber[i],16)));

end;

mRes.ReadOnly:=true;

end;

procedure TMain_form.memo_chisloKeyPress(Sender: TObject; var Key: Char);

begin

//Отсечём знаки препинания и прочее

if (key>=' ') and (key<='+') and (key>='-') and (key<='/') then key:=#0;

if (key>=':') and (key<='@') then key:=#0;

if (key>='[') and (key<='''') then key:=#0;

if (key>='{') and (key<='~') then key:=#0;

//Отсечем русский алфавит

if ((key>='А') and (key<='я')) or ((key>='A') and (key<='z')) then key:=#0;

end;

procedure TMain_form.Button1Click(Sender: TObject);

begin

//Создание и открытие формы

fmAbout:=TfmAbout.Create(self);

fmAbout.ShowModal;

fmAbout.Free;

end;

end.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]