Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.16;
Скачать: CL | DM;

Вниз

Динамическое создание переменной   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.017 c
1-51320
patit
2003-10-06 08:16
2003.10.16
предпросмотр документа


3-51139
Zn
2003-09-24 17:55
2003.10.16
Как подключиться к удалённому InterBase-серверу


1-51306
OlegS
2003-10-05 16:36
2003.10.16
Системы поиска


14-51473
Juster~Thunderbird
2003-09-29 20:09
2003.10.16
Мой бедный ASUS CD-RW


1-51217
Crazy_user
2003-10-03 22:33
2003.10.16
Странный еррор :)