15.06.2012, 13:49
|
Прохожий
|
|
Регистрация: 15.06.2012
Сообщения: 1
Репутация: 10
|
|
Помогите объяснить каждую строчку в этой программе
Это программа в Delphi по переводу из одной системы исчисления в другую(от2до10)Нужно объяснить КАЖДУЮ строчку что в ней делается
Код:
function TForm1.AddStr(s1, s2: String; notation: byte): String;
var s: String;
i, len, res: Integer;
begin
s := '';
if Length(s1) > Length(s2) then len := Length(s1) else len := Length(s2);
for I := Length(s1) to len do s1 := '0' + s1;
for I := Length(s2) to len do s2 := '0' + s2;
for I := 1 to len + 1 do s := '0' + s;
for I := len + 1 downto 2 do
begin
res := byte(s1[i]) + byte(s2[i]) + byte(s[i]) - 48 * 3;
if res >= notation then
begin
s[i - 1] := char(byte(s[i - 1]) + 1);
s[i] := char(res + 48 - notation);
end
else
s[i] := char(res + 48);
end;
while (s[1] = '0') and (Length(s) > 1) do Delete(s, 1, 1);
AddStr := s;
end;
function TForm1.MulStr(s: String; c: char; notation: byte): String;
var s1: String;
i, len, res: Integer;
int_res, rem_res: byte;
begin
len := Length(s);
s1 := '';
for I := 1 to len + 1 do s1 := s1 + '0';
for I := len + 1 downto 2 do
begin
res := (byte(s[i - 1]) - 48) * (byte(c) - 48);
int_res := res div notation;
rem_res := res mod notation;
rem_res := rem_res + byte(s1[i]) - 48;
if rem_res >= notation then
begin
int_res := int_res + 1;
rem_res := rem_res - notation;
end;
s1[i] := char(rem_res + 48);
rem_res := int_res + byte(s1[i - 1]) - 48;
s1[i - 1] := char(rem_res + 48);
end;
while (s1[1] = '0') and (Length(s1) > 1) do Delete(s1, 1, 1);
MulStr := s1;
end;
function TForm1.ConvertNotation(s1: String; from_not, to_not: byte): String;
var s2, s, mul_s: String;
i, len: Integer;
begin
s := '0';
len := Length(s1);
mul_s := '1';
for I := len downto 1 do
begin
s2 := MulStr(mul_s, s1[i], to_not);
s := AddStr(s, s2, to_not);
mul_s := MulStr(mul_s, char(from_not + 48), to_not);
end;
while (s[1] = '0') and (Length(s) > 1) do Delete(s, 1, 1);
ConvertNotation := s;
end;
procedure TForm1.Edit1Change(Sender: TObject);
begin
Convert;
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if byte(Key) - 48 > StrToInt(cb_from.Items[cb_from.ItemIndex]) - 1 then Key := #0;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
Convert;
end;
procedure TForm1.cb_fromChange(Sender: TObject);
begin
Convert;
end;
procedure TForm1.Convert;
begin
Edit2.Text := ConvertNotation(Edit1.Text,
StrToInt(cb_from.Items[cb_from.ItemIndex]), StrToInt(cb_to.Items[cb_to.ItemIndex]));
end;
end.
Админ: Пользуемся тегами дл оформления кода!
Последний раз редактировалось Admin, 15.06.2012 в 14:07.
Причина: неверно указала заголовок
|