![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Вообщем сам перевод я по сути сделал:
Код:
procedure TForm1.BinToDecClick(Sender: TObject); var i,result:integer; bin:string; begin bin:=BinDec.Text; result:=0; for i:=1 to length(bin) do begin result:=result+(1 shl(length(bin)-i)); end; tr.Caption:=IntToStr(result); end; Но вот такой вопрос: как указать, что если вводится числа отличные от 0 или 1, то программа выводит сообщение и сбрасывается, я делал так: Код:
if not (bin in ['0','1']) then
begin
ShowMessage('Ошибка');
Exit;
end;но не получается, выдаёт ошибку о несовместимости типов данных String и Сhar ((( И как сделать так, что программа считает по формуле Код:
result:=result+(1 shl(length(bin)-i)); |
|
#2
|
||||
|
||||
|
Потому что у тебя bin - это строка, а не символ.
|
|
#3
|
|||
|
|||
|
Цитата:
А разве так переводится в десятичную систему? Вообще то формула такая (допустим надо перевести число 1101)1*2^3 + 1*2^2 +0*2^1 +1*2^0 и получаем 8+4+1= 13. Попробовал твой вариант считает по другому! Цитата:
Код:
for i:=1 to length(bin) do
if (copy(BinDec.Text,i,1)<>IntToStr(1)) and (copy(BinDec.Text,i,1)<>IntToStr(0)) then
ShowMessage('Ошибка'); |
|
#4
|
|||
|
|||
|
To The Shadow
Я знаю...я хотел узнать, как это можно сделать иначе. To MegaPiha Пасиб)Формула то правильная, просто есть косяк с тем, что когда число содержит "0" то, она их считает за "1", но это можно исправить условием) |
|
#5
|
|||
|
|||
|
Всё сделал))
Выложу код для перевода из 2-й в 10-ю и наоборот, мб кому пригодится) из 10-й в 2-ю Код:
procedure TForm1.DecToBinClick(Sender: TObject); var result:string; dec:integer; begin dec:=StrToInt(BinDec.Text); result:=''; While dec>0 do begin if Odd(dec) then result:='1'+result else result:='0'+result; dec:=dec shr 1; end; if result='' then result:='0'; tr.Caption:=result; end; из 2-й в 10-ю Код:
procedure TForm1.BinToDecClick(Sender: TObject);
var
i,result:integer;
bin:string;
begin
bin:=BinDec.Text;
result:=0;
for i:=1 to length(bin) do
begin
if (copy(BinDec.Text,i,1)<>IntToStr(1))
and (copy(BinDec.Text,i,1)<>IntToStr(0))
then
begin
ShowMessage('Ошибка');
Exit;
end;
if not (copy(BinDec.Text,i,1)<>IntToStr(1)) then
result:=result+(1 shl(length(bin)-i));
end;
tr.Caption:=IntToStr(result);
end; |
|
#6
|
|||
|
|||
|
Работает!
![]() |
|
#7
|
||||
|
||||
|
Вот исходничек для перевода из 2..36-й систем счисления в 2..36-ю. Думаю, кому-нибудь пригодится
З.Ы. Знаю, что примитивный код, зато работает ![]() |