Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/64: Рейтинг темы: голосов - 64, средняя оценка - 4.50
3 / 3 / 1
Регистрация: 29.05.2013
Сообщений: 226

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

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

Студворк — интернет-сервис помощи студентам
Добрый день. Нужно сделать калькулятор в 2-16ричной системе счисления. Проблема в том, что вычислять можно только напрямую, без перевода в другую систему и обратно. Есть какой-нибудь универсальный способ вычисления?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.04.2014, 17:51
Ответы с готовыми решениями:

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

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

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

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

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

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

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru