Войти

Показать полную графическую версию : [решено] Перевод десятичных чисел в двоичные


Artesmann
29-05-2011, 13:58
Здравствуйте. Я пишу программку для перевода чисел.

http://s02.radikal.ru/i175/1105/22/dd8ea57b3f05.jpg

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

lxa85
29-05-2011, 15:32
Artesmann, Я в тебя верю.
Раз (http://ru.wikipedia.org/wiki/Позиционная_система_счисления), Два (http://comp-science.narod.ru/Progr/Syst_Sch.html)

Artesmann
29-05-2011, 15:59
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
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
#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
Drongo, спасибо большое =)




© OSzone.net 2001-2012