Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.09.2018, 11:05   #11
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,536
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Бред.
"
- Это у вас бред.
- Нет, не бред.
" © <Золотой теленок>
Модератор может позволить себе сильные выражения, поскольку всегда прав.

Я не совсем точно выразился. Системы счисления бывают разные. Вот у древних зулусов было : "бе, бе, бе, ибн-бе", но скоро числа заканчивались, потому как пальцев на руках и ногох больше не было. Я вот о чем. В современных компах, основанных на двоичной системе, 8- и 16- - только для удобства внешнего представления, любые другие - от лукавого, теоретические мудрствования, ни к чему не ведущие.
Ну разве когда появится элемент с 11 устойчивыми и четко различимыми состояниями...
10-ричная... Это святое, это - счеты с костяшками в бухгалтерии, арифмоиетр "Феликс".

Цитата:
но один байт в 8ричной системе занимает три цифры.
Мой косяк - я имел в виду одна тетрада (ниббл) - 2 цифры. Но там это было оправдано, там 8 везде: 8 РОН, 8 видов адресации.
А на флуд ТС не серчает, решение ему дали. Но принимаю это как замечание модератора.

Последний раз редактировалось digitalis; 21.09.2018 в 11:13.
digitalis вне форума Ответить с цитированием
Старый 21.09.2018, 11:46   #12
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
А на флуд ТС не серчает, решение ему дали
ага. которое у него не компилируется...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.09.2018, 12:11   #13
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,536
По умолчанию

Значит, есть над чем работать Если и далее никак, поможем, только он С или С++ ?
digitalis вне форума Ответить с цитированием
Старый 21.09.2018, 13:50   #14
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Artem_856 Посмотреть сообщение
Очень благодарен за помощь, но тут почему то ошибку выбивает. " 'static_assert' was not declared in this scope"

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

напиши где нибудь сверху:
Код:
//--------------Cтатический ассерт---------------//
template<int> struct CompileTimeError;
template<> struct CompileTimeError<true> {};
#define LOKI_STATIC_CHECK(expr, msg) { CompileTimeError<((expr) != 0)> ERROR_##msg; (void)ERROR_##msg; }
и замени:
Код:
static_assert(Base, "Base must be nonzero");
на:
Код:
LOKI_STATIC_CHECK(Base!=0, "Base must be nonzero");
либо вообще удали нафиг строчку:
Код:
static_assert(Base, "Base must be nonzero");
она - опциональна.
служит для дополнительной защиты инварианта кода.
но не обязательна, для реализации самой функциональности.
_Bers вне форума Ответить с цитированием
Старый 21.09.2018, 13:54   #15
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от New man Посмотреть сообщение
Код:
#include <iostream>
#include <string>

bool is_real(const std::string& num)
{
    return num.find('.')<num.size();
}

template<unsigned Base>
int to_int(const std::string& str)
{
   static_assert(Base, "Base must be nonzero");
   int mult = 1, result = 0;
   for(size_t i = str.size(); i>0; --i)
   {
       if(str[i-1]>='0' && str[i-1]<='9')
           result += mult*(str[i-1]-'0');
       else
           result += mult*(std::toupper(str[i-1])-'A');
       mult*=Base;
   }
   return result;
}


template<size_t Base>
std::pair<int,int> to_real(const std::string& str)
{
    const size_t dot_pos = str.find('.');
    const int first_part = to_int<Base>(str.substr(0, dot_pos));
    const int second_part = to_int<Base>(str.substr(dot_pos+1));
    return std::make_pair(first_part, second_part);
}

int main()
{
    std::string in;
    std::cin>>in;
    std::cout << "Answer is ";
    if(!is_real(in))
        std::cout<<to_int<11>(in);
    else
    {
        std::pair<int,int> real = to_real<11>(in);
        std::cout<<real.first<<'.'<<real.second;
    }
}

не есть хорошо:
Цитата:
source_file.cpp: In instantiation of ‘int to_int(const string&) [with unsigned int Base = 11u; std::__cxx11::string = std::__cxx11::basic_string<char>]’:
source_file.cpp:41:33: required from here
source_file.cpp:20:12: warning: conversion to ‘unsigned int’ from ‘int’ may change the sign of the result [-Wsign-conversion]
mult*=Base;
^
source_file.cpp:20:12: warning: conversion to ‘int’ from ‘unsigned int’ may change the sign of the result [-Wsign-conversion]
_Bers вне форума Ответить с цитированием
Старый 22.09.2018, 00:07   #16
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

_Bers, для ТС достаточно.

А так, unsigned там только как дополнительная защита, так же, как и static_assert. Сделать static_cast мне было лень
a.k.a. Angelicos Phosphoros
Мой сайт
New man вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод чисел разделенных пробелами из шестнадцатеричной системы счисления в десятичную и наоборот AEBus Microsoft Office Excel 4 09.06.2017 08:42
Перевод чисел из двоичной системы счисления в десятичную без использования процедур и функций crolikoff Паскаль, Turbo Pascal, PascalABC.NET 22 23.01.2016 21:35
Перевод из шестнадцатеричной системы в десятичную AnderoN Общие вопросы Delphi 3 07.05.2011 19:55
Перевод числа из двоичной системы в десятичную С++ kontroller Помощь студентам 2 15.02.2010 20:39