Показать полную графическую версию : [решено] Перевод десятичных чисел в двоичные
Artesmann
29-05-2011, 13:58
Здравствуйте. Я пишу программку для перевода чисел.
http://s02.radikal.ru/i175/1105/22/dd8ea57b3f05.jpg
Её суть - пользователь открывает текстовый файл, в котором содержится число (оно отображается в левом richTextBox1). При нажатии кнопки это число должно перевестись в двоичное и отобразиться в правом richTextBox2.
Я не могу реализовать именно перевод числа. Буду благодарен, если Вы мне поможете =)
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?
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:
#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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.