Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Перевод десятичных чисел в двоичные (http://forum.oszone.net/showthread.php?t=207786)

Artesmann 29-05-2011 13:58 1684510

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



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

lxa85 29-05-2011 15:32 1684577

Artesmann, Я в тебя верю.
Раз, Два

Artesmann 29-05-2011 15:59 1684590

Цитата:

Цитата lxa85
Artesmann, Я в тебя верю.
Раз, Два »

Спасибо, но я совсем недавно начал изучать С++, и мне трудно использовать теорию на практике, так сказать. В интернете я нашёл несколько алгоритмов по переводу чисел из из 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 30-05-2011 13:00 1685044

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); // Выводим результат
    }
}
//---------------------------------------------------------------------------

Так, что-то уже и я запутался. :biggrin:

Drongo 30-05-2011 13:39 1685065

Код:

#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)); // Выводим результат
    }
}
//---------------------------------------------------------------------------


Artesmann 30-05-2011 19:41 1685265

Drongo, спасибо большое =)


Время: 17:54.

Время: 17:54.
© OSzone.net 2001-