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

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

24.04.2014, 17:51. Показов 12644. Ответов 19
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день. Нужно сделать калькулятор в 2-16ричной системе счисления. Проблема в том, что вычислять можно только напрямую, без перевода в другую систему и обратно. Есть какой-нибудь универсальный способ вычисления?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.04.2014, 17:51
Ответы с готовыми решениями:

Калькулятор в любой системе счисления
Добрый день, нужно написать что-то типа этого http://numsys.ru/#feedback. Подскажите пожалуйста,...

Калькулятор: выполнение арифметических операций в любой системе счисления
Нужен калькулятор который может совершать арифметичиские операции(+,-,*,/) в любой системе...

Перевод из любой системы счисления в любую другую систему счисления (2-36)
Привет. 1 курс факультета ИВТ, изучаю С++ только один месяц. Из основного прошли строки, массивы,...

Проверить корректность числа в заданной системе счисления и перевести в другую систему счисления
На вычислительной практике дали такое задание: С клавиатуры вводятся 2 положительных целых...

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

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

Что-то я запутался. Программа должна выглядеть так: я выбираю систему счисления - например пятеричную, потом выбираю операцию (+-*/), далее выбираю второе число в этой же системе, и получаю ответ. Мне чётко сказали, что не примут, если я переведу например эту пятеричную систему в десятичную, выполню операции в ней и переведу обратно. Каким образом можно это осуществить?
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
24.04.2014, 18:53 10
Цитата Сообщение от niikiita Посмотреть сообщение
Программа должна выглядеть так: я выбираю систему счисления - например пятеричную, потом выбираю операцию (+-*/), далее выбираю второе число в этой же системе, и получаю ответ. Мне чётко сказали, что не примут, если я переведу например эту пятеричную систему в десятичную, выполню операции в ней и переведу обратно. Каким образом можно это осуществить?
Тебе задали задание написать программу, которая бы в ЛЮБОЙ системе счисления выполняла операции сложения\вычитания\умножения\деления без перевода даже в двоичную систему счисления? Ты докторскую пишешь что ли?
0
3 / 3 / 1
Регистрация: 29.05.2013
Сообщений: 226
24.04.2014, 18:56  [ТС] 11
Цитата Сообщение от pav1uxa Посмотреть сообщение
Тебе задали задание написать программу, которая бы в ЛЮБОЙ системе счисления выполняла операции сложения\вычитания\умножения\деления? Ты диплом пишешь или что?
Не в любой, от двоичной до 16ричной, до 20 цифр после запятой. Нет, первый курс второй семестр. Вот так примерно должна "выглядить" http://numsys.ru/?flavour=full. Только без перевода.
0
4063 / 3317 / 924
Регистрация: 25.03.2012
Сообщений: 12,485
Записей в блоге: 1
24.04.2014, 20:21 12
Я хочу всем напомнить, что все численные переменные в программе хранятся в двоичной и только в двоичной системе. То, что вы видете десятичные цифры на экране во время работы с программой - это текст. То есть функции ввода-вывода преобразуют двоичную переменную из памяти в десятичную строку в неком текстовом буфере, а затем этот буфер выводят на экран. Недаром функция носит название printf! "формат"! То есть она форматирует данные в строку перед выводом на экран.
поэтому имеет смысл говорить только о преобразовании двоичных чисел в n-ричные строки.
0
3 / 3 / 1
Регистрация: 29.05.2013
Сообщений: 226
24.04.2014, 20:29  [ТС] 13
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
поэтому имеет смысл говорить только о преобразовании двоичных чисел в n-ричные строки.
Есть какое-нибудь общее правило арифметических операций для n-ичных систем? Я просто не могу понять как написать такую программу, что типа выбирается система, например 7, и и дальше использовать свич, и в 7ичной системе писать цикл вычисления именно в этой системе?
0
Заблокирован
24.04.2014, 20:37 14
Цитата Сообщение от niikiita Посмотреть сообщение
дальше использовать свич, и в 7ичной системе писать цикл вычисления именно в этой системе?
ты не догоняешь, о чём тебе говорят. На языке программирования ты можешь писать переменные в различных системах, но операции на центральном процессоре всё равно будут производится в двоичном виде, про полупроводники слыхал?
Твоя задача калькулятора состоит в том, чтоб юзер ввёл в какой то систему цифру, ты бы эту строку распарсил и преобразовал к какую - то переменную, произвёл бы действие и результат преобразовал в исходную систему и отобразил бы результирующюю строку на экране
1
3 / 3 / 1
Регистрация: 29.05.2013
Сообщений: 226
24.04.2014, 20:41  [ТС] 15
Цитата Сообщение от newbie666 Посмотреть сообщение
ты не догоняешь, о чём тебе говорят. На языке программирования ты можешь писать переменные в различных системах, но операции на центральном процессоре всё равно будут производится в двоичном виде, про полупроводники слыхал?
Твоя задача калькулятора состоит в том, чтоб юзер ввёл в какой то систему цифру, ты бы эту строку распарсил и преобразовал к какую - то переменную, произвёл бы действие и результат преобразовал в исходную систему и отобразил бы результирующюю строку на экране
Нет я понял про двоичный. Что значит распарсил строку? Хорошо, допустим вводит пользователь число 4234, в пятеричной системе. Что мне дальше нужно сделать программно?
0
Заблокирован
24.04.2014, 20:49 16
Цитата Сообщение от niikiita Посмотреть сообщение
Что мне дальше нужно сделать программно?
что что, получить из этой строки цифры и далее перевести эти цифры из 5-ричной системы в любую (http://digteh.ru/digital/PreobDig.php), доступную компилятору, чтоб не извращаться - в 10-ичную или 16-ричную, сделать необходимые преобразования и преревести обратно в твою систему исходную - далее в строку и на экран
0
3 / 3 / 1
Регистрация: 29.05.2013
Сообщений: 226
24.04.2014, 21:38  [ТС] 17
Цитата Сообщение от newbie666 Посмотреть сообщение
далее перевести эти цифры из 5-ричной системы в любую
А как их перевести?
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
24.04.2014, 21:53 18
Цитата Сообщение от niikiita Посмотреть сообщение
Есть какое-нибудь общее правило арифметических операций для n-ичных систем?
Конечно есть. Скажу больше - оно одинаковое для всех систем счисления. В случае пятеричной, например 4+4. Так как в пятеричной системе счисления максимум четверка используется из цифр, то происходит перенос единицы в старший разряд, а текущий обнуляется, то есть 4+1 = 10, и еще 3 остается итого 4+4 = 13. Это точно также как и в десятичной. При умножении/делении немного сложнее, но принципы все те же, да и потом любое умножение сводится к набору сумм.. Но писать все эти функции (умножение, деление, сумма, разность) для любой системы счисления... по-моему это муторно и неинтересно =)
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
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 Посмотреть сообщение
интересная мысль, но в армию как-то не хочется(
Не так уж там и страшно как на гражданке расказывают

0
3 / 3 / 1
Регистрация: 29.05.2013
Сообщений: 226
24.04.2014, 22:24  [ТС] 20
Цитата Сообщение от Jewbacabra Посмотреть сообщение
Не так уж там и страшно как на гражданке расказывают
Дело не в этом, просто через годик есть возможность попасть на военную кафедру и на выходе буду лейтенант.
0
24.04.2014, 22:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.04.2014, 22:24
Помогаю со студенческими работами здесь

Перевод из любой системы счисления в десятичную
Привет всем) Очень нужна помощь. Может кто-нибудь помочь написать код для перевода чисел из любой...

Перевести число из любой системы счисления (2, 8, 16) в десятичную
Надо перевести число с любой численной системы (2,8,16) в десятичную. Кому не трудно, помогите)

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

Калькулятор в двоичной системе
Сложение в двоичной системе. Подскажите почему не верные ответы выдает? #include &quot;stdafx.h&quot;...


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

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

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