Скачиваний:
6
Добавлен:
15.06.2014
Размер:
3.65 Кб
Скачать
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Buttons, StdCtrls;

type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
BitBtn1: TBitBtn;
Label3: TLabel;
Edit3: TEdit;
Label4: TLabel;
Edit4: TEdit;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
n,m:integer;

implementation

{$R *.dfm}

function st(k,z:integer):extended; //функция возведения в степень
var i:integer; //k-число, z-степень
g:extended;
begin
result:=k;
if z>0 then
for i:=1 to z do result:=result*n;
if z<0 then
begin
g:=1;
for i:=1 to abs(z) do g:=g*n;
result:=k*(1/g);
end;
end;

function ConvIn(s:char):integer; //функция перевода из символа в число
var x:integer;
begin
case ord(s) of
48..57: convin:=strtoint(s);
65..90: convin:=ord(s)-55;
97..122: convin:=ord(s)-87;
end;
end;

function ConvOut(k:integer):char; //функция перевода из числа в символ
begin
case k of
0..9 : convout:=inttostr(k)[1];
10..36 : convout:=chr(k+55);
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.Text:='';
Edit2.Text:='';
Edit3.Text:='';
Edit4.Text:='';
Edit4.Visible:=false; //скрытие поля результата
end;

procedure TForm1.Button1Click(Sender: TObject);
var r,h,g,x,z,i,j: integer;
a,b:string;
k,c:extended;
l:boolean;
begin
//защита от дурака
if (Edit1.Text='') or (Edit2.Text='') or (Edit3.Text='')
or (strtoint(Edit1.Text)>36) or (strtoint(Edit3.Text)>36) then
begin
Showmessage('Проверьте значения');
Exit;
end;
//задание значений
n:=strtoint(Edit1.text);
m:=strtoint(Edit3.text);
a:=Edit2.Text;
c:=0; b:=''; x:=0;
l:=false;
if a[1]='-' then //проверка на отрицательность
begin
l:=true;
delete(a,1,1);
end;
if pos('.',a)<>0 then //защита от дурака (замена точки на запятую)
begin
z:=pos('.',a);
a[z]:=',';
end;
z:=pos(',',a); //определение требуемой точности вычислений
if z<>0 then
x:=strtoint(InputBox('Введите целое значение','Введите требуемое кол-во знаков после запятой',inttostr(length(a)-z)));
if x>0 then //разветвление на целые и нецелые числа
begin
//перевод целой части в десятиричную систему
for i:=1 to z-1 do
c:=c+st(convin(a[i]),z-i-1);
//перевод дробной части в десятиричную
for i:=z+1 to length(a) do
c:=c+st(convin(a[i]),z-i);
//перевод целой части в нужную систему
g:=trunc(c);
repeat
h:=g mod m;
g:=g div m;
b:=convout(h)+b;
until g<m;
b:=convout(g)+b;
//перевод дробной части в нужную систему
k:=frac(c);
b:=b+',';
for i:=1 to x do
begin
k:=k*m;
h:=trunc(k);
k:=frac(k);
b:=b+convout(h);
end;
end
else
begin
//перевод целого числа в десятичную систему
r:=length(a);
if (z<>0) and (z<r) then r:=z;
for i:=1 to r do
c:=c+st(convin(a[i]),r-i);
//перевод целого числа из десятичной в нужную систему
g:=trunc(c);
repeat
h:=g mod m;
g:=g div m;
b:=convout(h)+b;
until g<m;
b:=convout(g)+b;
end;
if l then b:='-'+b; //определение знака
edit4.Visible:=true; //видимость поля ответа
edit4.Text:=b; //вывод ответа
end;
{Автор: Майко Костя, ст.гр.712502, ICQ:211268307
Дата: 15 октября 2007 года}
end.
Соседние файлы в папке 7.универсальный перевод
  • #
    15.06.2014188 б6Project1.dpr
  • #
    15.06.2014876 б6Project1.res
  • #
    15.06.20147.35 Кб7Unit1.dcu
  • #
    15.06.201451 б6Unit1.ddp
  • #
    15.06.20142.91 Кб6Unit1.dfm
  • #
    15.06.20143.65 Кб6Unit1.pas