Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Кто поможешь сделать программирование на С++, задача с переводом СС?

Anastasia Yashina Ученик (98), закрыт 2 года назад
Надо написать программу на С++, желатьельно с комментариями, чтобы я поняла. Само задание: Программа должна считывать с клавиатуры число, записанное в одной системе счисления, и выводить на экран это число в записи по другому основанию, например: исходное число – 112D, старое основание – 16, новое основание – 8, результат – 10455.
Лучший ответ
Santa Barbara Гуру (3228) 2 года назад
https://ru.stackoverflow.com/questions/594081/Преобразование-чисел-между-системами-счисления
в мэйл ру лучше ждать помощи не стоит, лазь по stackoverflow и подобным ему сайтам
СергейГений (56112) 2 года назад
Уже в процессе, можно подумать тут работы на 5 минут.
Батаев ДмитрийПросветленный (22242) 2 года назад
а лучше в японию за помощью! они пришлют игровой автомат и брата марио
Остальные ответы
Сергей Гений (56112) 2 года назад
#include < iostream >
using namespace std;

int main()
{
setlocale(0, "");
int a, b;
cout << "введите исходный и результирующий разряды" << endl;
cin >> a >> b;
cout << "введите число" << endl;
char chislo[124]{}; //хрананение задданного числа в виде символов
char output[124]{}; //для вывода числа
const char diapazone[25] = "0123456789ABCDEFGHIJKLMN"; //таблица соостветствия символов до 24 розряда
cin >> chislo;
cout << chislo << endl;
int var10 = 0; //предстваление числа в 10-й системе
int vara; //10-е значение символа
int size = -1; //разрядность заданного числа

for (auto el : chislo)
{

if (el == '\0') break;
size++;
}
cout << size << endl;

for (auto el : chislo) //перечеслитель заданного числа

{
vara = 0; //сброс текущего символа
if (el == '\0') break;
for (auto ch : diapazone)
{

if (el == ch) break; // сравнение найденного символа с таблицей, чтобы найти его порядковый номер, который и будет его значением.
vara++; // если символ в этой итерации не найден, увеличить vara на 1
}

var10 += vara * pow(a, size--); //вычисление 10-чного числа
}
cout << var10 << endl;
int indicate0 = var10;
size = 0;

do
{
indicate0 = var10/b;
vara = 0;

for (auto ch : diapazone)
{

if (vara == (var10 - indicate0 * b))
{
output[size++] = ch;
break;
}
vara++;
}

cout << var10-indicate0*b << endl;

var10 = indicate0;

} while (var10 > 1);

cout << "Ваше число (читать справа налево): " << output << endl;
}
СергейГений (56112) 2 года назад
Сырая версия, без проверок и отладки на всех значениях. Может быть в конце следует написать var10 > 0 вместо > 1
Сергей Степанов, Как будете действовать, если величина числа превосходит предельные значения стандартных числовых типов?
СергейГений (56112) 2 года назад
В конце все же while (var10>0);
для правильного вывода результата в конце добавить:
size = 0;

for (auto el : output) // вычисление размера строки результата для вывода
{

if (el == '\0') break;
size++;
}

cout << "Результат: ";

for (int i = 0; i < size; i++) //вывод знаков из строки в обратном порядке
cout << output[size - 1 - i];
СергейГений (56112) 2 года назад
В задании нет опции "Программа должна проверять правильность введенных значений". Это все же обучение, а не коммерческий продукт.
Батаев Дмитрий Просветленный (22242) 2 года назад
ответ может быть в двух вариантах = 1 это манипуляторы ввода вывода для представления числа в разных системах счисления, а 2 это "физкультура" для головы самому что-то сделать. Первый вариант уже предложили
Похожие вопросы