Не работает программа перевода систем счисления - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Неполучается написать перевод из 10й системы в 16ную. Допустим 13(10) в 16ной системе показывает как 3(?) а не как 13(16). И помогите добавить к числу букву ??? Заранее спасибо.
int TranslateNum (int userNum ,int notation)
{
    int rest = 0 , tempAmount = 0 , count = 0 , amount = 0;
    
    while (userNum != 0)
    {
        rest = userNum % notation ;
        userNum = userNum / notation ;
        tempAmount = tempAmount * 10 + rest ;
        count ++ ;
    }
 
    while (count != 0)    
    {
        amount = amount * 10 + tempAmount % 10;   
        tempAmount /= 10; 
        count -- ;
    }

    return amount ;
}
 
void main ()
{
    SetConsoleOutputCP(1251);
cout << "УСЛОВИЕ: Написать функцию, которая получает в качестве "
<< " аргументов целое \nположительное число и систему счисления," 
<< "в которую это число должно переводится \n(системы счисления от 2 до 36)."
<< " Например, при переводе числа 27 в \nсистему счисления 16 должно"
<< " получиться 1B; 13 в 5-ю - 23; 35 в 18-ю - 1H.\n\n\t\t\tРЕШЕНИЕ" << endl ;
 
    int c = 0 , userNum , notation ;
 
    cout << "Введите число для перевода -> " ; cin >> userNum ;
    cout << "Введите систему счисления в которую требуется перевести Ваше число -> " ; cin >> notation ;
    c = TranslateNum (userNum , notation) ;
    cout << "Результат перевода: " << c << endl ;
}

Решение задачи: «Не работает программа перевода систем счисления»

textual
Листинг программы
#include<iostream>
using namespace std;
 
void main()
{
    int ss,k1=10,k2=11,t,num1,i;
    double num;
    char ms[20]={' ',' ', ' ',' ',' ', ' ',' ',' ', ' ',' ',' ', ' ',};
    char znak='+';
    cout<<"vvedite isxodnoe chislo\n";
    cin>>num;
    if (num<0) {znak='-';num*=-1;}
    cout<<"vvedite novoe osnovanie\n";
    cin>>ss;
    cout<<"vvedite tochnost\n";
    cin>>t;
    num1=num;
    num=num-num1;
    while(num1>=ss)
    {
        i=num1%ss;
        num1/=ss;
        ms[k1--]=i>9?i-10+'a':i+'0';
    }
    ms[k1--]=num1>9?i-10+'a':num1+'0';
    ms[k1]=znak;
    ms[k2++]='.';
    while(num!=0 && k2-11<=t)
    {
        num*=ss;
        i=num;
        num-=i;
        ms[k2++]=i>9?i-10+'a':i+'0';
    }
    cout<<"\n";
    for (i=k1;i<k2;i++) {cout<<ms[i];}
}

Объяснение кода листинга программы

  1. Включаем заголовочный файл iostream для работы с потоками ввода-вывода
  2. Используем пространство имен std для использования стандартных типов и функций
  3. Объявляем переменные:
    • ss (целое) для хранения основания системы счисления
    • k1 (целое) для хранения индекса первого символа в массиве ms
    • k2 (целое) для хранения индекса последнего символа в массиве ms
    • t (целое) для хранения точности вычислений
    • num (двойное) для хранения числа, которое необходимо перевести
    • num1 (целое) для хранения копии числа num
    • i (целое) для использования в циклах
    • ms (массив символов) для хранения перевода числа в символы
    • znak (символ) для хранения знака числа
  4. Выводим сообщение и считываем число num с помощью функции cin
  5. Если число num отрицательное, меняем знак на минус и умножаем на -1
  6. Выводим сообщение и считываем основание системы счисления ss
  7. Выводим сообщение и считываем точность t
  8. Копируем число num в num1
  9. Вычисляем значение переменной num как разность между числом num и num1
  10. Начинаем цикл while, который выполняется пока num1 больше или равно ss
  11. Внутри цикла вычисляем остаток от деления num1 на ss и сохраняем его в переменной i
  12. Делим num1 на ss и обновляем значение num1
  13. Если i больше или равно 10, добавляем к i-10 символа от 'a' до 'f' и сохраняем в массиве ms
  14. Если i меньше или равно 9, добавляем к i+10 символы от '0' до '9' и сохраняем в массиве ms
  15. Уменьшаем значение k1 на 1
  16. Если num1 больше или равно ss, продолжаем цикл
  17. Если num1 меньше ss, выходим из цикла
  18. Добавляем знак минус к ms[k1]
  19. Увеличиваем значение k2 на 1
  20. Начинаем цикл while, который выполняется пока num не равно 0 и k2-11 меньше или равно t
  21. Внутри цикла умножаем num на ss и обновляем значение i
  22. Вычитаем i из num и обновляем значение num
  23. Если i больше или равно 10, добавляем к i-10 символа от 'a' до 'f' и сохраняем в массиве ms
  24. Если i меньше или равно 9, добавляем к i+10 символы от '0' до '9' и сохраняем в массиве ms
  25. Уменьшаем значение k2 на 1
  26. Если num не равно 0 и k2-11 меньше или равно t, продолжаем цикл
  27. Если num равно 0, выходим из цикла
  28. Выводим массив ms с помощью цикла for, начиная с k1 и заканчивая k2-1

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.875 из 5
Похожие ответы