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

Калькулятор в любой системе счисления - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.69
niikiita
3 / 3 / 0
Регистрация: 29.05.2013
Сообщений: 223
24.04.2014, 17:51     Калькулятор в любой системе счисления #1
Добрый день. Нужно сделать калькулятор в 2-16ричной системе счисления. Проблема в том, что вычислять можно только напрямую, без перевода в другую систему и обратно. Есть какой-нибудь универсальный способ вычисления?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
newbie666
Заблокирован
24.04.2014, 17:56     Калькулятор в любой системе счисления #2
Цитата Сообщение от niikiita Посмотреть сообщение
Проблема в том, что вычислять можно только напрямую, без перевода в другую систему и обратно
вопрос не ясен
niikiita
3 / 3 / 0
Регистрация: 29.05.2013
Сообщений: 223
24.04.2014, 17:59  [ТС]     Калькулятор в любой системе счисления #3
Цитата Сообщение от newbie666 Посмотреть сообщение
вопрос не ясен
Ну обычно, сначала число переводят в десятичную форму, выполняют арифметические операции, и потом обратно в исходную форму. А мне нужно чтобы вычислял напрямую.
newbie666
Заблокирован
24.04.2014, 18:05     Калькулятор в любой системе счисления #4
Цитата Сообщение от niikiita Посмотреть сообщение
А мне нужно чтобы вычислял напрямую.
тебе на "табло" твоего калка нужен правильный ответ в выбранной системе исчисления или же ты думаешь вычислять даже все значение в своих системах исчисления? Если последнее - я тебя огорчу, любой существующий ЭВМ производит все операции в двоичном виде, вне зависимости от их типа в языке программирования
niikiita
3 / 3 / 0
Регистрация: 29.05.2013
Сообщений: 223
24.04.2014, 18:08  [ТС]     Калькулятор в любой системе счисления #5
Цитата Сообщение от newbie666 Посмотреть сообщение
тебе на "табло" твоего калка нужен правильный ответ в выбранной системе исчисления или же ты думаешь вычислять даже все значение в своих системах исчисления? Если последнее - я тебя огорчу, любой существующий ЭВМ производит все операции в двоичном виде, вне зависимости от их типа в языке программирования
На табло нужен правильный. Но препод сказал чтобы без перевода в другие системы счисления...
newbie666
Заблокирован
24.04.2014, 18:10     Калькулятор в любой системе счисления #6
Цитата Сообщение от niikiita Посмотреть сообщение
Но препод
ну и пошли его
niikiita
3 / 3 / 0
Регистрация: 29.05.2013
Сообщений: 223
24.04.2014, 18:11  [ТС]     Калькулятор в любой системе счисления #7
Цитата Сообщение от newbie666 Посмотреть сообщение
ну и пошли его
интересная мысль, но в армию как-то не хочется(
newbie666
Заблокирован
24.04.2014, 18:19     Калькулятор в любой системе счисления #8
Цитата Сообщение от niikiita Посмотреть сообщение
но в армию как-то не хочется
А что - пойдёшь на украину бэнэров гасить

А Если серьёзно, то ты наверное задание не правильно понял, что ты думаешь, ты ввёл в своём калькуляторе:
10001011011101 умножить на 10000001000001 и в С++ будет функция, умножить бинарно?
Какую бы ты переменную не завёл, int, char, DWORD и тд, они все хранят в себе одно значение, представить это значение можно в любой системе, но операции над числами процессор будет производить в бинарном виде, думаю архитектура процессоров тебя не интересует
niikiita
3 / 3 / 0
Регистрация: 29.05.2013
Сообщений: 223
24.04.2014, 18:36  [ТС]     Калькулятор в любой системе счисления #9
Цитата Сообщение от newbie666 Посмотреть сообщение
А что - пойдёшь на украину бэнэров гасить
Поздно, уже учения на границе проводим. В течении одной двух недель думаю разберутся с Украиной.

Что-то я запутался. Программа должна выглядеть так: я выбираю систему счисления - например пятеричную, потом выбираю операцию (+-*/), далее выбираю второе число в этой же системе, и получаю ответ. Мне чётко сказали, что не примут, если я переведу например эту пятеричную систему в десятичную, выполню операции в ней и переведу обратно. Каким образом можно это осуществить?
pav1uxa
1710 / 1550 / 599
Регистрация: 23.01.2014
Сообщений: 5,601
Завершенные тесты: 1
24.04.2014, 18:53     Калькулятор в любой системе счисления #10
Цитата Сообщение от niikiita Посмотреть сообщение
Программа должна выглядеть так: я выбираю систему счисления - например пятеричную, потом выбираю операцию (+-*/), далее выбираю второе число в этой же системе, и получаю ответ. Мне чётко сказали, что не примут, если я переведу например эту пятеричную систему в десятичную, выполню операции в ней и переведу обратно. Каким образом можно это осуществить?
Тебе задали задание написать программу, которая бы в ЛЮБОЙ системе счисления выполняла операции сложения\вычитания\умножения\деления без перевода даже в двоичную систему счисления? Ты докторскую пишешь что ли?
niikiita
3 / 3 / 0
Регистрация: 29.05.2013
Сообщений: 223
24.04.2014, 18:56  [ТС]     Калькулятор в любой системе счисления #11
Цитата Сообщение от pav1uxa Посмотреть сообщение
Тебе задали задание написать программу, которая бы в ЛЮБОЙ системе счисления выполняла операции сложения\вычитания\умножения\деления? Ты диплом пишешь или что?
Не в любой, от двоичной до 16ричной, до 20 цифр после запятой. Нет, первый курс второй семестр. Вот так примерно должна "выглядить" http://numsys.ru/?flavour=full. Только без перевода.
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
24.04.2014, 20:21     Калькулятор в любой системе счисления #12
Я хочу всем напомнить, что все численные переменные в программе хранятся в двоичной и только в двоичной системе. То, что вы видете десятичные цифры на экране во время работы с программой - это текст. То есть функции ввода-вывода преобразуют двоичную переменную из памяти в десятичную строку в неком текстовом буфере, а затем этот буфер выводят на экран. Недаром функция носит название printf! "формат"! То есть она форматирует данные в строку перед выводом на экран.
поэтому имеет смысл говорить только о преобразовании двоичных чисел в n-ричные строки.
niikiita
3 / 3 / 0
Регистрация: 29.05.2013
Сообщений: 223
24.04.2014, 20:29  [ТС]     Калькулятор в любой системе счисления #13
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
поэтому имеет смысл говорить только о преобразовании двоичных чисел в n-ричные строки.
Есть какое-нибудь общее правило арифметических операций для n-ичных систем? Я просто не могу понять как написать такую программу, что типа выбирается система, например 7, и и дальше использовать свич, и в 7ичной системе писать цикл вычисления именно в этой системе?
newbie666
Заблокирован
24.04.2014, 20:37     Калькулятор в любой системе счисления #14
Цитата Сообщение от niikiita Посмотреть сообщение
дальше использовать свич, и в 7ичной системе писать цикл вычисления именно в этой системе?
ты не догоняешь, о чём тебе говорят. На языке программирования ты можешь писать переменные в различных системах, но операции на центральном процессоре всё равно будут производится в двоичном виде, про полупроводники слыхал?
Твоя задача калькулятора состоит в том, чтоб юзер ввёл в какой то систему цифру, ты бы эту строку распарсил и преобразовал к какую - то переменную, произвёл бы действие и результат преобразовал в исходную систему и отобразил бы результирующюю строку на экране
niikiita
3 / 3 / 0
Регистрация: 29.05.2013
Сообщений: 223
24.04.2014, 20:41  [ТС]     Калькулятор в любой системе счисления #15
Цитата Сообщение от newbie666 Посмотреть сообщение
ты не догоняешь, о чём тебе говорят. На языке программирования ты можешь писать переменные в различных системах, но операции на центральном процессоре всё равно будут производится в двоичном виде, про полупроводники слыхал?
Твоя задача калькулятора состоит в том, чтоб юзер ввёл в какой то систему цифру, ты бы эту строку распарсил и преобразовал к какую - то переменную, произвёл бы действие и результат преобразовал в исходную систему и отобразил бы результирующюю строку на экране
Нет я понял про двоичный. Что значит распарсил строку? Хорошо, допустим вводит пользователь число 4234, в пятеричной системе. Что мне дальше нужно сделать программно?
newbie666
Заблокирован
24.04.2014, 20:49     Калькулятор в любой системе счисления #16
Цитата Сообщение от niikiita Посмотреть сообщение
Что мне дальше нужно сделать программно?
что что, получить из этой строки цифры и далее перевести эти цифры из 5-ричной системы в любую (http://digteh.ru/digital/PreobDig.php), доступную компилятору, чтоб не извращаться - в 10-ичную или 16-ричную, сделать необходимые преобразования и преревести обратно в твою систему исходную - далее в строку и на экран
niikiita
3 / 3 / 0
Регистрация: 29.05.2013
Сообщений: 223
24.04.2014, 21:38  [ТС]     Калькулятор в любой системе счисления #17
Цитата Сообщение от newbie666 Посмотреть сообщение
далее перевести эти цифры из 5-ричной системы в любую
А как их перевести?
pav1uxa
1710 / 1550 / 599
Регистрация: 23.01.2014
Сообщений: 5,601
Завершенные тесты: 1
24.04.2014, 21:53     Калькулятор в любой системе счисления #18
Цитата Сообщение от niikiita Посмотреть сообщение
Есть какое-нибудь общее правило арифметических операций для n-ичных систем?
Конечно есть. Скажу больше - оно одинаковое для всех систем счисления. В случае пятеричной, например 4+4. Так как в пятеричной системе счисления максимум четверка используется из цифр, то происходит перенос единицы в старший разряд, а текущий обнуляется, то есть 4+1 = 10, и еще 3 остается итого 4+4 = 13. Это точно также как и в десятичной. При умножении/делении немного сложнее, но принципы все те же, да и потом любое умножение сводится к набору сумм.. Но писать все эти функции (умножение, деление, сумма, разность) для любой системы счисления... по-моему это муторно и неинтересно =)
Jewbacabra
1791 / 1506 / 540
Регистрация: 24.04.2014
Сообщений: 4,231
24.04.2014, 22:17     Калькулятор в любой системе счисления #19
Если я все правильно понял, то вот решение в котором реализовано сложение.
Только учти что это я толком не тестировал, в любом случае его еще нужно доработать, обязательно сделать проверку на значения, которые вводит пользователь.
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#include <iostream>
#include <cstring>
 
using namespace std;
 
const int MAX_LENGTH = 20;
 
struct Number {
    int base;
    int value[MAX_LENGTH];
};
 
int numeric(char c) {
    if (c >= '0' && c <= '9') return c - '0';
    if (c >= 'a' && c <= 'f') return 10 + c - 'a';
    return -1;
}
 
char symbolic(int i) {
    if (i >= 0 && i <= 9) return '0' + i;
    if (i >= 10 && i <= 15) return 'a' + i - 10;
    return 0;
}
 
Number initNum(int base, const char* val) {
    Number res;
    res.base = base;
    if (base > 0) {
        int len = strlen(val);
        if (len <= MAX_LENGTH){
            int n = MAX_LENGTH - len;
            int i=0;
            for (; i < n; ++i) {
                res.value[i] = 0;
            }
            for (int j=0; i < MAX_LENGTH; ++i) {
                res.value[i] = numeric(val[j++]);
            }
        }
    }
    return res;
}
 
void decodeNum(Number num, char** res) {
    int i=0;
    while (num.value[i] == 0) {
        ++i;
    }
    *res = new char[MAX_LENGTH - i + 1];
    int j=0;
    for (; i < MAX_LENGTH; ++i) {
        (*res)[j++] = symbolic(num.value[i]);
    }
    (*res)[j] = '\0';
}
 
Number operator + (const Number& num1, const Number& num2) {
    Number res;
    res.base = num1.base;
    int a = 0;
    if (num1.base == num2.base) {
        for (int i=MAX_LENGTH-1; i >= 0; --i) {
            int z = num1.value[i] + num2.value[i] + a;
            if (z >= res.base) {
                z %= res.base;
                a = 1;
            } else {
                a = 0;
            }
            res.value[i] = z;
        }
    }
    return res;
}
 
int main() {
    int base;
    cout << "base: ";
    cin >> base;
 
    char* num1 = new char[100];
    cout << "n1 = ";
    cin >> num1;
 
    char* num2 = new char[100];
    cout << "n2 = ";
    cin >> num2;
 
    Number res = initNum(base, num1) + initNum(base, num2);
    char* val;
    decodeNum(res, &val);
    cout << "n1 + n2 = " << val << endl;
 
    delete[] val;
    delete[] num1;
    delete[] num2;
 
    system("pause");
}
Добавлено через 8 минут

Не по теме:

Цитата Сообщение от niikiita Посмотреть сообщение
интересная мысль, но в армию как-то не хочется(
Не так уж там и страшно как на гражданке расказывают

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.04.2014, 22:24     Калькулятор в любой системе счисления
Еще ссылки по теме:

C++ Проверить корректность числа в заданной системе счисления и перевести в другую систему счисления
Умножение в 4-системе счисления C++

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

Или воспользуйтесь поиском по форуму:
niikiita
3 / 3 / 0
Регистрация: 29.05.2013
Сообщений: 223
24.04.2014, 22:24  [ТС]     Калькулятор в любой системе счисления #20
Цитата Сообщение от Jewbacabra Посмотреть сообщение
Не так уж там и страшно как на гражданке расказывают
Дело не в этом, просто через годик есть возможность попасть на военную кафедру и на выходе буду лейтенант.
Yandex
Объявления
24.04.2014, 22:24     Калькулятор в любой системе счисления
Ответ Создать тему
Опции темы

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