Ветвление и ограничение памяти
- Войдите на сайт для отправки комментариев
Всем добрый день. Пытаюсь написать небольшую программу, но столкнулся со сложностью. Есть переменная x, которая при запуске программы =0. По ходу выполнения програмы ее значение должно увеличиваться (ветвиться как ветки дерева) до достижения определенного результата (определенного пользователем), после чего переменная сбрасывается в 0. И так каждый раз при новом новом цикле. В зависимости от условий (TRUE - FALSE) значение переменной может идти по уже созданный ветвям или создавать новую ветвь. Попробую объяснить что нужно. Проще будет нарисовать:
В начале х = 0, в зависимости от условий TRUE - FALSE значение х меняется по формуле
TRUE: х = (х * 2) + 1
FALSE: х = (х + 1) * 2
В результате Х идет по одной из ветвей (если ветви нет, то оная будет создана). При этов вероятность пересечения ветвей крайне мала. Это для меня решающий фактор - не пересечение с другими "ветвями". Чем меньше вероятность такого события - тем лучше.
И так, суть проблемы: ограничение на размер Х. Даже ести взять Х как unsigned int то до предела 65535 можно дойти очень быстро, всего за несколько условий TRUE - FALSE. Мне же нужно иметь возможность прогнать хотя бы 30 условий TRUE - FALSE и при этом не иметь каких-либо ошибок (как на пример переполнение переменной).
Как выход вижу два варианта:
1) изменение формулы (но ума не приложу что можно использовать другое и при этом не "наехать" на другую ветвь..
2) не использовать Х как int. Возможно есть другие способы храниения значения? Например, разбивать на ресколько динамичных переменных, которые будут содаваться при необходимости...
Голова кипит. Бьюсь над этой задачей уже несколько недель, но так и не нашел выхода. Надеюсь на вашу помощь.
Даже ести взять Х как unsigned int
Ну. если кипит и не можете придумать другой маркировки, то возьмите unsigned long - предельное значение - 4 294 967 295
Если мало, то возьмите unsigned long long - предельное значение 18 446 744 073 709 551 615
Спасибо, не знал что можно так определять размерность! Надеюсь это поможет!
Можно, то можно, но зачем вы двоичный код изобретаете заново понять нельзя. Что за задача такая?
Что вы имеете в виду говоря о двочном коде?
Задачу описал выше. Ну, если проще, это что-то вроде базы данных, которая должна заполнятся по мере получения новых данных. Где х - это конкретные данные, а TRUE и FALSE это конкретные значения этих данных (точнее соответствие или не соответствие характеристик и/или описания). Это можно сравнить с игрой "угадай слово", где загадывается слово, в противник задает наводящие вопросы: "Летает? Сделано человеком? Самолет?". где "Летает" и "Сделано человеком" - характеристики (TRUE), а "самолет" - конкретные данные (х).
В общем принцып совершенно тот же. Только цель другие, и другое использование/применение. Просто уперся в переполнение переменной и все....
А что вы имели в виду говоря о двоичной системе? Кстати, думал ее применить, но не нашел как.
Что вы имеете в виду говоря о двочном коде?
Ваше дерево - это двоичный код. На каждом узел выбор 0 или 1 (по какому пути дальше идти). И представлять его можно гораздо экономичнее. чем Вы пытаетесь. Рлкгуглите "приедставление бинарных деревьев".