Форум: "Основная";
Текущий архив: 2003.10.16;
Скачать: [xml.tar.bz2];
ВнизДинамическое создание переменной Найти похожие ветки
← →
nova (2003-10-04 15:53) [0]Здравствуйте МАСТЕРА!
Не могли бы ВЫ подсказать как можно (и можно ли вообще) создать переменную динамически (извиняюсь за туфталогию)...
Поясняю:
1.Есть Edit - заносим в него некоторое имя переменной (заранее она у нас нигде не определена).
2.Есть кнопка.
3.Нажимаем кнопку и создается переменная типа double.
4.Далее можем работать с этой переменной.
Всем ответившим заранее благодарен!!!
← →
Владислав (2003-10-04 16:00) [1]"Не могли бы ВЫ подсказать как можно (и можно ли вообще) создать переменную динамически (извиняюсь за туфталогию)..."
Динамическую?.. Легко.. Какой тип нужен?
Кстати, тафтологию...
"1.Есть Edit - заносим в него некоторое имя переменной (заранее она у нас нигде не определена)."
Объясни, плиз.
"3.Нажимаем кнопку и создается переменная типа double."
Например, var MyDouble: Double;
"4.Далее можем работать с этой переменной."
Вот с MyDouble и работай.
← →
Михаааааааааа (2003-10-04 16:00) [2]Такое моно?????????????
Тогда и мне подскажите как это сделать???
← →
Digitman (2003-10-04 16:03) [3]
> можно ли вообще
нельзя.
понятие "переменная" относится исключительно к процессу компиляции/сборки.
то что тебе нужно, только с большой долей условности можно назвать "создание переменной"... это просто резервирование в run-time области памяти в адресном пр-ве процесса с последующей ссылкой на нее неким удобным тебе способом
← →
nova (2003-10-04 16:05) [4]->Digitman
А как такое сделать?
← →
Михаааааааааа (2003-10-04 16:06) [5]Удалено модератором
← →
Михаааааааааа (2003-10-04 16:07) [6]пишеш
var
i:string;
begin
...
← →
nova (2003-10-04 16:08) [7]->Михаааааааааа Че ты хамишь та...
← →
Digitman (2003-10-04 16:08) [8]
> nova
сначала объясни, зачем тебе это нужно
склонен предположить, что твоя конечная задача может быть решена миллионом иных способов, гораздо более изящных, простых и эффективных
← →
Михаааааааааа (2003-10-04 16:08) [9]Удалено модератором
← →
Владислав (2003-10-04 16:09) [10]> Digitman © (04.10.03 16:03) [3]
Не будем придираться к словам. Динамическая переменная... Что это? Память для которой выделяется в рантайм?.. Просто var в любой процедуре удовлетворяет этому условию. И что?..
← →
Владислав (2003-10-04 16:10) [11]> Михаааааааааа (04.10.03 16:08) [9]
Сходи сюда: http://www.delphimaster.ru/cgi-bin/forum.pl?n=3
← →
nova (2003-10-04 16:11) [12]->Михаааааааааа Хочу я сделать небольшой транслятор.
В файле инициализирую некоторые переменные.
Обрабатываю эти переменные своими фунциями.
А потом значения этих переменных уже использую.
← →
Владислав (2003-10-04 16:14) [13]Прочти книгу по трансляторам.
А вообще, выделяй для нее память, а потом ее используй. Тебе теории не хватает.
← →
Digitman (2003-10-04 16:15) [14]
> Владислав
само понятие "переменная" относится к языку программирования, не более того
это лишь указание компилятору поставить в соответствие такой-то области памяти такого-то типа такой-то идентификатор и использовать этот иден-тор везде, где это удобно программисту, для ссылки на эту область памяти
можешь назвать это как угодно, придиркой или еще как-то, но суть от этого не меняется
← →
Михаааааааааа (2003-10-04 16:15) [15]Удалено модератором
← →
nova (2003-10-04 16:17) [16]->Владислав
Теория конечно вещь хорошая (на ней можно сказать все держится) но практика - это "двигатель прогресса".
А исходник не иогли бы подкинуть? (а то я не догоняю)
← →
Владислав (2003-10-04 16:19) [17]> Digitman © (04.10.03 16:15) [14]
Динамически можно выделить все что угодно, и назвать это как угодно. Суть от этого не меняется. То что это не так просто, это другой разговор. Надеюсь мы друг друга понимаем :)
> Михаааааааааа (04.10.03 16:15) [15]
Я пойду туда, када МНЕ надо, и тогда, когда МНЕ надо. Не "озабачивайся" :))). Сходи лучше туда: http://www.delphimaster.ru/cgi-bin/forum.pl?n=3
:)))
← →
Владислав (2003-10-04 16:21) [18]> nova (04.10.03 16:17) [16]
Проблему тогда подробнее, плиз. Иначе только ссылки на авторов...
← →
Михаааааааааа (2003-10-04 16:22) [19]Удалено модератором
← →
nova (2003-10-04 16:23) [20]:)
Ребята ну че ВЫ в самом деле хулите друг-друга лучше бы дали мне конкретный ответ - че надо сделать что бы все то, что вы наговорили здесь заработало. (кстать а подскажите книжку по трансляторам, есть ли нете).
← →
Владислав (2003-10-04 16:25) [21]Удалено модератором
← →
Михаааааааааа (2003-10-04 16:27) [22]Удалено модератором
← →
Владислав (2003-10-04 16:27) [23]> nova (04.10.03 16:23) [20]
Пиши в аську. Остальное на форуме прочитаешь.
← →
Владислав (2003-10-04 16:29) [24]Удалено модератором
← →
Михаааааааааа (2003-10-04 16:31) [25]Удалено модератором
← →
nova (2003-10-04 16:31) [26]Удалено модератором
← →
Digitman (2003-10-04 16:32) [27]
> nova
1. Организуй объект-список типа TStringList
2. При создании "переменной" занеси в этот список уник.имя новой "переменной", получи индекс нового эл-та списка i
3. Зарезервируй дин.память под хранение новой "переменной" типа Double, получи указатель на нее
4. Запиши в св-во StringList.Objects[i] только что полученный указатель
Все !
теперь чтобы получить доступ к "динамической переменной", найди ее "имя" в списке StringList, получи индекс найденного эл-та списка i, по этому индексу обратись к св-ву StringList.Objects[i] - получишь указатель, по которому лежит значение соотв. "переменной"
← →
Михаааааааааа (2003-10-04 16:32) [28]Удалено модератором
← →
Владислав (2003-10-04 16:35) [29]> Digitman © (04.10.03 16:32) [27]
А как же типы?..
Парень не говорит, чего ему надо... Если транслятор, то Ваш способ будет "курить", ведь понимается все слишком буквально ;)
← →
nova (2003-10-04 16:35) [30]->Digitman
Единственный здравый Человек нашелся, подкинул толковую идею.
Спасибо!
← →
Владислав (2003-10-04 16:38) [31]> nova (04.10.03 16:35) [30]
Так бы сразу и сказал...
← →
nova (2003-10-04 16:40) [32]Удалено модератором
← →
Digitman (2003-10-04 16:42) [33]
> nova
для хранения типа "переменной" записывай в св-во Objects[] указатель не собственно на "переменную", а , к примеру, указатель на некую динамически создаваемую тут же структуру, поля которой будут определять нужные св-ва переменной, включая обязательный указатель на нее
всех делов)... просто некое подобие вариантного типа нужно организовать ... а можно и вообще резервировать память под новый вариант, инициализировать его (если нужно) и указатель прямо на этот вариант хранить в св-ве Objects[]
это самый простой способ, поэтому сложностей с явным освобождением памяти под варианты будет предостаточно
← →
Михаааааааааа (2003-10-04 16:43) [34]Удалено модератором
Примечание: R/O 3 дня
← →
Владислав (2003-10-04 16:43) [35]> nova (04.10.03 16:40) [32]
ССЗБ. Ты же раньше не мог "допереть" до решения, а теперь тебе полегче... "Прись" дальше...
← →
nova (2003-10-04 16:46) [36]Короче ребята всем большое спасибо (особенно Digitman)
Конец фильмы...
← →
афвуд (2003-10-04 16:48) [37]Ну я делал такие переменные - было такое задание у меня на 1-ом курсе.
Что там такого то.
Ща вспомню.
Я делал так:
Type TVariable=record
type:integer;
name:String;
ukazatel:Pointer;
end;
Просто создаёшь список(или динамический массив) таких вот рекордов и работаешь с ними.
type - ну допустим 1-это integer 2-double и т.д.
Просто при доступе к переменной преобразуешь ukazatel к указателю на соответсвующий тип.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.10.16;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.011 c