Другие языки программирования и технологии
Калькулятор в делфи 7
Люди помогите) Кто знает как дописать в калькулятор функцию перевода в двоичное число и наоборот? Очень надо ...
function DecToBin(D: Integer ): String;
var tmp: Integer;
begin
Result := '';
tmp := D;
repeat
if tmp mod 2 = 1 then Result := '1' + Result else Result := '0' + Result;
tmp := tmp div 2;
until tmp = 0;
end;
function BinToDec(B: String ): Integer;
var I: Integer;
begin
Result := 0;
for i := 1 to Length(B) do
begin
Result := Result * 2;
if B[ i ] := '1' then Result := Result + 1;
end;
end;
var tmp: Integer;
begin
Result := '';
tmp := D;
repeat
if tmp mod 2 = 1 then Result := '1' + Result else Result := '0' + Result;
tmp := tmp div 2;
until tmp = 0;
end;
function BinToDec(B: String ): Integer;
var I: Integer;
begin
Result := 0;
for i := 1 to Length(B) do
begin
Result := Result * 2;
if B[ i ] := '1' then Result := Result + 1;
end;
end;
Для целых значений больших чисел (100 цифр - не предел) вот так:
function Dec2Bin(Str : String) : String;
function Ostatok : Char;
var
N, D : Cardinal;
begin
D := 0;
for N := 1 to Length(Str) do
begin
D := D * 10 + Ord(Str[N]) - 48;
Str[N] := Chr(D div 2 + 48);
D := D mod 2;
end;
while (Length(Str)> 0) And (Str[1] = #48) do Delete(Str, 1, 1);
Result := Chr(D + 48);
end;
begin
Result := '';
while Length(Str) > 0 do
Result := Ostatok + Result;
end;
function Bin2Dec(Str : String) : String;
procedure Multi(var Str, Res : String);
var
L, N, D : Cardinal;
begin
if Str[1] in [#48, #49] then
begin
L := Length(Res);
if Str[1] = #48 then
D := 0
else
D := 1;
for N := L downto 1 do
begin
D := D + (Ord(Res[N]) - 48) * 2;
Res[N] := Chr(D mod 10 + 48);
D := D div 10;
end;
if D > 0 then
Res := Chr(D + 48) + Res;
end;
Delete(Str, 1, 1);
end;
begin
Result := '0';
while Length(Str) > 0 do
Multi(Str, Result);
end;
В функции Dec2Bin и Bin2Dec передаются строковые значения целых чисел, а на выходе получаем строковые значения результата перевода в двоичную и десятичную системы в виде строки.
Проверки на правильность переданных значений нет!
Нужно сделать самостоятельно!
function Dec2Bin(Str : String) : String;
function Ostatok : Char;
var
N, D : Cardinal;
begin
D := 0;
for N := 1 to Length(Str) do
begin
D := D * 10 + Ord(Str[N]) - 48;
Str[N] := Chr(D div 2 + 48);
D := D mod 2;
end;
while (Length(Str)> 0) And (Str[1] = #48) do Delete(Str, 1, 1);
Result := Chr(D + 48);
end;
begin
Result := '';
while Length(Str) > 0 do
Result := Ostatok + Result;
end;
function Bin2Dec(Str : String) : String;
procedure Multi(var Str, Res : String);
var
L, N, D : Cardinal;
begin
if Str[1] in [#48, #49] then
begin
L := Length(Res);
if Str[1] = #48 then
D := 0
else
D := 1;
for N := L downto 1 do
begin
D := D + (Ord(Res[N]) - 48) * 2;
Res[N] := Chr(D mod 10 + 48);
D := D div 10;
end;
if D > 0 then
Res := Chr(D + 48) + Res;
end;
Delete(Str, 1, 1);
end;
begin
Result := '0';
while Length(Str) > 0 do
Multi(Str, Result);
end;
В функции Dec2Bin и Bin2Dec передаются строковые значения целых чисел, а на выходе получаем строковые значения результата перевода в двоичную и десятичную системы в виде строки.
Проверки на правильность переданных значений нет!
Нужно сделать самостоятельно!
Информатику почитай, там написано как переводить =)
Учись делать сам, ибо будешь ламером до конца своих дней
Похожие вопросы
- Помогите написать очень простую прогу по программированию в Делфи 7
- Множество. ЯП делфи 7
- Как сделать бегущую строку на делфи 7 ?
- надо решить задачку через делфи и паскаль)))
- Вопрос по делфи
- языки делфи и си
- Скажите сколько месяцев нужно изучать Делфи что бы написать программу вывода даты, дня недели и года в окно ?
- Программируемые калькуляторы - выбор б/у девайса
- Как свое сворачивать приложение на делфи в tree ася 404048645
- стоит ли изучать ассемблер, если программирую на Делфи? и вообще реально ли что нибудь хорошее, дельное, нужное написать