Форум программистов, компьютерный форум CyberForum.ru

направьте на путь истинный) перевод систем счисления - C++

Восстановить пароль Регистрация
 
masterflash
0 / 0 / 0
Регистрация: 13.12.2011
Сообщений: 9
23.09.2013, 00:36     направьте на путь истинный) перевод систем счисления #1
прошу помощи. как реализовать перевод из 10 сис.счисления в любую другую(по моему примеру)?вроде бы все должно идти верно..

в кнопке пишу:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int а=31; //число
int i=0;
int b[10]; //получаемый массив цифр
int osn=2; //основание системе счисления
int ch; //частное при делении числа на основание
 
while (ch>osn) {
ch=a/osn;
b[i]=a-ch*osn;
a=ch;
i++;
}
 
b[i]=ch;
Label1->Caption=b[i];
}
должен вывести массив цифр в системе счисления с основанием "osn". подскажите, что в моем примере не так.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.09.2013, 00:36     направьте на путь истинный) перевод систем счисления
Посмотрите здесь:

Направьте на верный путь C++
C++ Направьте меня на верный путь...
Перевод систем счисления. C++
C++ перевод чисел из систем счисления
C++ Наставте на истинный путь начинающего
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
23.09.2013, 12:26     направьте на путь истинный) перевод систем счисления #2
masterflash, ну как минимум while(ch>osn) - ошибка, ибо ch не инициализировано до цикла. А вообще, всё делается проще (если использовать твои наименования):
C++
1
2
3
4
5
6
7
8
int a, osn = 2, i = 0;
int b[1000];
while (a != 0)
{
b[i] = a % osn;
a /= osn;
++i;
}
Только учитывая, что число в массиве b записано в обратном порядке, т.е. для вывода (на C++) сразу после этого кода:
C++
1
2
3
4
5
6
--i; // ибо i было равно кол-ву цифр, а массив у нас от 0 до i-1
while(i >= 0)
{
printf("%d ", b[i]);
--i;
}
masterflash
0 / 0 / 0
Регистрация: 13.12.2011
Сообщений: 9
23.09.2013, 15:58  [ТС]     направьте на путь истинный) перевод систем счисления #3
Цитата Сообщение от nexen Посмотреть сообщение
masterflash, ну как минимум while(ch>osn) - ошибка, ибо ch не инициализировано до цикла. А вообще, всё делается проще (если использовать твои наименования):
C++
1
2
3
4
5
6
7
8
int a, osn = 2, i = 0;
int b[1000];
while (a != 0)
{
b[i] = a % osn;
a /= osn;
++i;
}
Только учитывая, что число в массиве b записано в обратном порядке, т.е. для вывода (на C++) сразу после этого кода:
C++
1
2
3
4
5
6
--i; // ибо i было равно кол-ву цифр, а массив у нас от 0 до i-1
while(i >= 0)
{
printf("%d ", b[i]);
--i;
}
спасибо за отклик, я пробую:

C++
1
2
3
4
5
6
7
8
9
10
11
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int a=31, osn = 2, i = 0;
int b[1000];
while (a != 0)
{
b[i] = a % osn;
a /= osn;
++i;
}
Label1->Caption=b[i];
на этом этапе он должен выводить массив, где цифры расположены пока что наоборот,верно? (с++ builder)
пс: числу a,для примера,присвоил сразу "31"
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
23.09.2013, 16:50     направьте на путь истинный) перевод систем счисления #4
masterflash, на этом этапе он просто сформировал массив. Я понятия не имею, что такое
C++
1
Label1->Caption=b[i];
Yandex
Объявления
23.09.2013, 16:50     направьте на путь истинный) перевод систем счисления
Ответ Создать тему
Опции темы

Текущее время: 13:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru