4 / 4 / 3
Регистрация: 20.06.2016
Сообщений: 19
1

Конвертер систем счислений из 10-й в 2 || 8 || 16

06.06.2017, 15:59. Показов 2357. Ответов 2
Метки нет (Все метки)

Неделю назад начал изучать язык C++, и пока знаю только базовые основы, ночью думал как себя протестировать, чтобы закрепить изученное, в результате надумал написать конвертер систем счислений и пока не написал код, не уснул.
Использовал только базовые функции, и вроде всё работает, но есть несколько вопросов.
1. Каким способом можно написать мой код проще?, желательно с примером, мне для саморазвития =)
2. Конвертер переводит только целые числа, как написать так чтобы он переводил дробные и знал куда потом ставить точку.
P\s: Готов к конкретизированной критике :3
Код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include "stdafx.h"
#include <iostream>
using namespace std;
 
int perevod(int, int);
int tablitsa(int);
 
int main()
{
    setlocale(LC_ALL, "RUS");
    int chislo, sistema;
    bool error;
    cout << "Введите целое число для перевода из десятичной системы счисления: ";
    cin >> chislo;
    cout << "В какую систему счисления вы желаете его перевести? (2, 8, 16): ";
    do {
        cin >> sistema;
        if (sistema == 2 || sistema == 8 || sistema == 16) 
            {
            perevod(chislo, sistema);
            error = false;
            }
        else
            {
            cout << "Система счисления " << sistema << ", ты серёзно?, попробуй ещё раз: ";
            error = true;
            }
        } while (error);
    return 0;
}
 
int perevod(int chislo, int sistema) 
{
    int mass[20], nomer = 0;
    do {
        mass[nomer] = chislo % sistema;
        chislo /= sistema;
        nomer++;
        } while (chislo > 1);
    mass[nomer] = chislo;
    cout << "Переведённое число: ";
    for (int i = nomer; i >= 0; i--)
        {
        if (sistema != 16)
            cout << mass[i];
            else
            tablitsa(mass[i]);
        }
    cout << endl;
    return 0;
}
 
int tablitsa(int yacheyka)
{
    char znacheniye[17] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', '\0' };
    cout << znacheniye[yacheyka];
    return 0;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.06.2017, 15:59
Ответы с готовыми решениями:

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

Конвертер систем счисления в С++
Помогите, пожалуйста, написать конвертер систем счисления на С++. Он должен переводить числа из...

Универсальный конвертер систем счисления
Напишите программу, переводящую запись числа между двумя произвольными системами счисления. ...

Перевод из систем счислений
Здравствуйте,легкий у меня вопрос,собственно имеется задание &quot;число 28.43 перевести в 2с.с. с...

2
Форумчанин
Эксперт CЭксперт С++
8190 / 5040 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
06.06.2017, 16:05 2
translit eto ne OK
Если функция ничего не возвращает - ей нужно написать тип void, а не делать фейковый постоянный return.
Ввод/вывод в функции - это плохо. Функции должны только принимать и перегонять данные.
0
4 / 4 / 3
Регистрация: 20.06.2016
Сообщений: 19
06.06.2017, 21:30  [ТС] 3
С транслитом попытаюсь исправиться, но английский у меня хромает.
Возврат в функциях поправил.
По поводу вывода чисел в функции, это так плохо?, у меня в нём массив который выводит в обратном порядке остаток от деления, если цикл писать в основном коде то переменную массива содержащую значения нужно объявлять в виде глобальных переменных?
Код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include "stdafx.h"
#include <iostream>
using namespace std;
 
void translation_number_system(int, int);
void table(int);
 
int main()
{
    setlocale(LC_ALL, "RUS");
    int number, system;
    bool error;
    cout << "Введите целое число для перевода из десятичной системы счисления: ";
    cin >> number;
    cout << "В какую систему счисления вы желаете его перевести? (2, 8, 16): ";
    do {
        cin >> system;
        if (system == 2 || system == 8 || system == 16)
            {
            translation_number_system(number, system);
            error = false;
            }
        else
            {
            cout << "Система счисления " << system << ", ты серёзно?, попробуй ещё раз: ";
            error = true;
            }
        } while (error);
    return 0;
}
 
void translation_number_system(int number, int system)
{
    int mass[20], cell = 0;
    do {
        mass[cell] = number % system;
        number /= system;
        cell++;
        } while (number > 1);
    mass[cell] = number;
    cout << "Переведённое число: ";
    for (int i = cell; i >= 0; i--)
        {
        if (system != 16)
            cout << mass[i];
        else
            table(mass[i]);
        }
    cout << endl;
}
 
void table(int cell)
{
    char value[17] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', '\0' };
    cout << value[cell];
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.06.2017, 21:30
Помогаю со студенческими работами здесь

Перевод систем счислений
Помогите пожалуйста с заданием : нужно на с# в виндоус приложении Создать меню с командами...

Калькулятор систем счислений
Доброе время суток форумчане, помогите написать программу на Delphi, а именно калькулятор систем...

Перевод из систем счислений. Не могу найти ошибку
1) Надо перевести из двоичной в десятичную. Написала на паскале, перевела в ассемблер. Как итог -...

Программа переводов систем счислений (2 8 16 32 целые и дробные числа)
Программа переводов счислений. Перевод, арифметические операции дробных и целых чисел. Также...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru