C/C++ - [решено] Перевод десятичных чисел в двоичные

Ответить
Аватара пользователя
Artesmann

C/C++ - [решено] Перевод десятичных чисел в двоичные

Сообщение Artesmann »

Здравствуйте. Я пишу программку для перевода чисел.



Изображение



Её суть - пользователь открывает текстовый файл, в котором содержится число (оно отображается в левом richTextBox1). При нажатии кнопки это число должно перевестись в двоичное и отобразиться в правом richTextBox2.

Я не могу реализовать именно перевод числа. Буду благодарен, если Вы мне поможете Изображение
Аватара пользователя
Artesmann

Re: C/C++ - [решено] Перевод десятичных чисел в двоичные

Сообщение Artesmann »

Цитата lxa85:



Artesmann, Я в тебя верю.

Раз, Два
C/C++ - [решено] Перевод десятичных чисел в двоичные




Спасибо, но я совсем недавно начал изучать С++, и мне трудно использовать теорию на практике, так сказать. В интернете я нашёл несколько алгоритмов по переводу чисел из из 10-ой в 2-ую СС, но они все выполнены в консольных приложениях. В данном случае у меня проблема в том, что не понимаю, как число из richTextBox1 перевести в 2-ую СС, ведь, если я не ошибаюсь, и числа и текст в richTextBox1 имеют тип String?



Вообщем, я написал:



private: System::Void richTextBox1_TextChanged(System::Object^ sender, System::EventArgs^ e)

{

int text1;

text1 = Convert::ToInt32(richTextBox1->Text);

}



Как я понимаю, число введеное в richTextBox1 содержится в переменной text1 и это переменная типа int. Как же мне теперь перевести это число в 2-ую СС и вывести его в richTextBox2?
Аватара пользователя
Drongo

Re: C/C++ - [решено] Перевод десятичных чисел в двоичные

Сообщение Drongo »

44 ^10 переведём в двоичную систему:





Код:

Код: Выделить всё

44 делим на 2. частное 22, остаток 0
22 делим на 2. частное 11, остаток 0
11 делим на 2. частное  5, остаток 1
 5 делим на 2. частное  2, остаток 1
 2 делим на 2. частное  1, остаток 0
 1 делим на 2. частное  0, остаток 1

Частное равно нулю, деление закончено. Теперь записав все остатки снизу вверх получим число 101100 ^2



Если в RichEdit1 цифры представлены по принципу: одна строка - одно число, то так получится



Код:

Код: Выделить всё

// Производим расчёт по нажатии на кнопку------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   int number, chastnoe, ostatok;
   String bite = ""; // Сюда будем заносить остатки (итоговое байтовое число)
   for(int i = 0; i < RichEdit1->Lines->Count; i++){ // Проходим циклом по строкам RichEdit
      chastnoe = number = RichEdit1->Lines->Strings[i].ToInt(); // Присваиваем число переменной, приведя его к целому типу
      bite = ""; // Очищаем переменную хранящую "байтовое" число
      while(chastnoe != 0){ // Пока частное не равно нулю, т.е. пока число делится
         ostatok = chastnoe % 2; // вычисляем остаток\байт
         chastnoe /= 2; // с каждым вычислением байта уменьшаем число на два
         bite += ostatok; // Аккумулируем байты
        }
      RichEdit2->Lines->Add(String(number) + " = " + bite); // Выводим результат
     }
}
//---------------------------------------------------------------------------

Так, что-то уже и я запутался. Изображение
Аватара пользователя
Drongo

Re: C/C++ - [решено] Перевод десятичных чисел в двоичные

Сообщение Drongo »

Код:

Код: Выделить всё

#include "strutils.hpp" // Подключаем. Нужно для функции ReverseString()
...
...
...
// Производим расчёт по нажатии на кнопку------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   int number, chastnoe, ostatok;
   String bite = ""; // Сюда будем заносить остатки (итоговое байтовое число)
   // Инициализируем RichEdit1 какими-то значениями, от 1 до 100
   for(int i = 1; i < 100; i++)
      RichEdit1->Lines->Add(i);
   for(int i = 0; i < RichEdit1->Lines->Count; i++){ // Проходим циклом по строкам RichEdit
      chastnoe = number = RichEdit1->Lines->Strings[i].ToInt(); // Присваиваем число переменной, приведя его к целому типу
      bite = ""; // Очищаем переменную хранящую "байтовое" число
      while(chastnoe != 0){ // Пока частное не равно нулю, т.е. пока число делится
         ostatok = chastnoe % 2; // вычисляем остаток\байт
         chastnoe /= 2; // с каждым вычислением байта уменьшаем число на два
         bite += ostatok; // Аккумулируем байты
        }
      RichEdit2->Lines->Add(String(number) + " = " + ReverseString(bite)); // Выводим результат
     }
}
//---------------------------------------------------------------------------
Ответить

Вернуться в «Программирование и базы данных»