Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 28.03.2008, 19:44
kobezzza kobezzza вне форума
Прохожий
 
Регистрация: 28.03.2008
Сообщения: 13
Репутация: 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
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));
только лиш когда соответственный элемент строки равен 1 . Заранее благодарен.
Ответить с цитированием
  #2  
Старый 28.03.2008, 20:00
Аватар для The Shadow
The Shadow The Shadow вне форума
Продвинутый
 
Регистрация: 11.06.2007
Адрес: Уфа, Россия
Сообщения: 793
Репутация: 35
По умолчанию

Потому что у тебя bin - это строка, а не символ.
__________________
Что делать, когда сломался комп:
1. Если вы юзер - делать ноги.
2. Если ремонтник - делать деньги.
3. Если вы программист - делать вид, что так было задумано.
Ответить с цитированием
  #3  
Старый 28.03.2008, 20:31
MegaPiha MegaPiha вне форума
Активный
 
Регистрация: 24.03.2008
Сообщения: 227
Версия Delphi: Delphi 7
Репутация: 30
По умолчанию

Цитата:
Сообщение от kobezzza
Вообщем сам перевод я по сути сделал:

Код:
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;


А разве так переводится в десятичную систему? Вообще то формула такая (допустим надо перевести число 1101)
1*2^3 + 1*2^2 +0*2^1 +1*2^0 и получаем 8+4+1= 13.
Попробовал твой вариант считает по другому!

Цитата:
Сообщение от kobezzza
как указать, что если вводится числа отличные от 0 или 1
Код:
   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  
Старый 28.03.2008, 22:00
kobezzza kobezzza вне форума
Прохожий
 
Регистрация: 28.03.2008
Сообщения: 13
Репутация: 10
По умолчанию

To The Shadow

Я знаю...я хотел узнать, как это можно сделать иначе.

To MegaPiha
Пасиб)Формула то правильная, просто есть косяк с тем, что когда число содержит "0" то, она их считает за "1", но это можно исправить условием)
Ответить с цитированием
  #5  
Старый 28.03.2008, 22:29
kobezzza kobezzza вне форума
Прохожий
 
Регистрация: 28.03.2008
Сообщения: 13
Репутация: 10
По умолчанию

Всё сделал))

Выложу код для перевода из 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  
Старый 29.03.2008, 10:48
MegaPiha MegaPiha вне форума
Активный
 
Регистрация: 24.03.2008
Сообщения: 227
Версия Delphi: Delphi 7
Репутация: 30
По умолчанию

Работает!
Ответить с цитированием
  #7  
Старый 30.03.2008, 13:24
Аватар для KOOL
KOOL KOOL вне форума
Активный
 
Регистрация: 06.01.2008
Адрес: Рязань
Сообщения: 306
Версия Delphi: 2009
Репутация: 6150
По умолчанию

Вот исходничек для перевода из 2..36-й систем счисления в 2..36-ю. Думаю, кому-нибудь пригодится
З.Ы. Знаю, что примитивный код, зато работает
Вложения
Тип файла: zip BaseConverterSource.zip (3.2 Кбайт, 63 просмотров)
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:45.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter