Блог им. Therollingstones

Как сделать колесо заново!

Топик из цикла финпрограммирование ...
Как вы знаете, я хочу сделать индекс и для этого начал учить C++
Индекс должен будет выполнять простейшие вычисления ...
Я шизофреник и многому не доверяю, также я не доверяю стандартным алгоритмам, пока не пойму как они работают... 
Профессионалы тоже советуют построить колесо заново.

Из простейшей ситуации я получил большой опыт ...

Стандартная ситуация 

Программа просит ввести числовое значение, 
затем выделяет память под запрашиваемое значение,
затем производит попытку считывания значения в память

cout << «Enter the number (and press Enter): »;
string number = " ";
cin >> number;

Я выделил память типа string, т.е. какую последовательность символов вы бы не ввели, она сохранится.
А если в последовательности символов один символ не будет цифрой, как это проверить?

А дальше очень простой алгоритм, если хотя бы один символ последовательности не равен цифре от 0 до 9
сразу ошибка. Это намного быстрее если я бы считывал целое число и сравнивал со всем возможным диапазоном чисел int или double 
сравнить символ в 9 — ю ячейками или с несколькими миллионами ячеек), разница по времени очень большая.

for(int i = 0; i < number.size(); ++i;)
{
    (number != «0») &&
    (number != «1») &&
    (number != «2») &&
    (number != «3») &&
    (number != «4») &&
    (number != «5») &&
    (number != «6») &&
    (number != «7») &&
    (number != «8») &&
    (number != «9»)))
}
{
   simple_error(«Input Error!!!»);
}

Данный принцип применим к любой входящей информации в программу.

Еще я понял очень важный, наверное фундаментальный принцип. 
Я все никак не мог понять, зачем нужны исключения если можно использовать возвращаемые значения функции.
А в итоге, ведь действительно, эти два типа развития функции абсолютно противоположны.
Ошибочные, отрицательные значения (исключения), завершают программу.
Возвращаемое значение же используется для продолжения работы и активации чего либо еще...
Через возвращаемое значение функции должно возвращаться только какое либо значение, которое будет активировать рабочий вариант.
Если через возвращаемое значение возвращать ошибку, это приводит у путанице в принимающем коде.
Так что исключения нужны априори ...












12 | ★2
3 комментария
одна строчка на R:  is.numeric(x)
avatar
vito2000, if (!cin) {}: на C++, но практика то какая!
avatar
а как быть, если число записано в научном формате? 3.14159E+0, например. Тут на помощь приходит С++:

#include <sstream>

char s[] = "  3.14159E+0 ";

std::stringstream ss;
ss.clear();
ss << s;

double num;
if( !(ss >> num) )
    std::cout << «not a number» << endl;
else
    std::cout << «number is read: » << num << endl;

Исключения нужны в больших «непотопляемых» проектах. Но они неудобны при отладке. Когда ставишь брейкпоинт на код исключения, ты не можешь двигаться вглубь стека вызовов чтобы проинспектировать код, который вызвал исключение. Так что сначала ошибку через значение, все там вылизать, а потом уже наваять исключение, по коду которого чтобы можно было точно знать что там произошло.

avatar

Читайте на SMART-LAB:
Фото
💡 Скрытый потенциал ВК
🔹 Акции ВК в течение последних 1,5 лет колеблются в диапазоне ₽250-350. Чётко выражены три волны подъёма, которые сменялись коррекциями. Только...
Фото
Евро между двумя фронтами: сильный доллар и оживший ястребиный риск по фунту
EUR/USD в среду торгуется в умеренном минусе, испытывая давление из-за нового витка роста цен на энергетическом рынке. Откат с 1,1850 до 1,1730...
Фото
Консенсус-прогноз по прибыли
Представляем консенсус-прогноз по прибыли ДОМ.PФ за первый квартал 2026 года. По оценке аналитиков 12 ведущих российских инвестдомов, прибыль...
Фото
ММК: результаты в 2026 году продолжат ухудшаться. Актуализация взгляда на акции компании.
Здравствуйте! Продолжаю серию публикаций с актуализацией взгляда на российские металлургические компании и состояние рыночной конъюнктуры в...

теги блога therollingstones

....все тэги



UPDONW
Новый дизайн