Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > двоичные числа


Автор: susanin 17.2.2007, 23:13
нужно написать калькулятор для двоичных чисел....хочу его сделать в  интерфесе BCB 6.... но не знаю, как сделать, чтобы компьютер понимал, что я ввожу в поле edit  число в двоичном коде? (например ввожу 10110....надо чтобы компьютер понимал что это 2сс) помогите мне с этой проблемкой, кто может! спасибо!

Автор: bel_nikita 17.2.2007, 23:40
какая разница, калькулятор двоичных чисел или же десятичных, шестнадцатиричных smile 
анализируй поле edit на ввод символа отличного от 0 и 1. с edit'а получашь массив char'ов. Анализируй каждый каждый элемент этого массив и выставляй бит.

Код

char* pCh = "101010101";
DWORD dwValue = 0;
for (int i = 0; i < strlen( pCh ); ++i )
{
  if ( pCh[i] ) dwValue |= 1 << i; // сдвигаем 1-ый бит на i битов
}

Автор: susanin 17.2.2007, 23:56
bel_nikita, а можно поподробнее, пожалста....что куда и как smile ....не бейте сильно....я только начинающий....у меня такого как у вас опыта нет... smile 

Автор: bel_nikita 18.2.2007, 00:25
с борландом и с VCL не знаком
поэтому как работь с edit - понтия не имею. Но подозреваю, что там еть метод типа GetLine. Т.е. получение буфера ввода.
Потом этот буфер пускаешь через for

Автор: Akeem 18.2.2007, 00:30
У Едита готовая строка подается ввиде Edit->Text. Минус только в том что это AnsiString.

Автор: susanin 18.2.2007, 00:35
ну вот пример элементарного выражения для десятичной системы 
Код

float x, Result,y;//объявление переменных
x = StrToFloat(Edit1->Text);//присваиваем переменной DollarsNum значение, которе вводим
y = StrToFloat(Edit2->Text);
Result = x+y;//выполняем операцию
Panel1->Caption = FloatToStr(Result);//выводим результат


как что то похожее сделать для двоичной ситсемы??? 

Автор: bel_nikita 18.2.2007, 00:56
Кто сказал, что это для десятичной? А может для шестнадцатиричной smile 
Еще раз повторюсь: двоичная, десятичная, восмиричная или шетнадцатиричная - без разницы. Переменная всегда хранит число в шестнадцатиричной системе. А ты уже можешь представить его в десятичной, двоичной и т.д. По-другому не знаю, как тебе это объяснить.
Код

DWORD convert(const char* pCh)

 DWORD dwV = 0; 
 for (int i = 0; i < strlen( pCh ); ++i )
 {
   if ( pX[i] ) dwV |= 1 << i; // сдвигаем 1-ый бит на i битов
 }
 return dwV;
}
...
DWORD dwX = convert( Edit1->Text );
DWORD dwY = convert( Edit2->Text );
float x = (float)dwX;
float y = (float)dwY;
Result = x+y;//выполняем операцию
Panel1->Caption = FloatToStr(Result);//выводим результат


Автор: susanin 18.2.2007, 22:07
можете меня назвать как хотите....но не получается у меня сделать так как говоил bel_nikita.....  smile  помогите! напишите текст обработчика полностью, если не сложно.... буду премного благодарен!!! 

Автор: bel_nikita 19.2.2007, 01:00
Замени строку 
Код
 for (int i = 0; i < strlen( pCh ); ++i )

на 
Код
 for (int i = strlen( pCh ); i > 0 ; ++i )

и будет тебе щастье smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)