Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
3-51080
MsGuns
2003-09-25 20:42
2003.10.16
LEFT JOIN


14-51492
XobBIT
2003-09-27 15:07
2003.10.16
Математики подскажите ряд для вычисления arccos(x)


1-51323
DimChan
2003-10-06 07:03
2003.10.16
Курсор в конец строки


14-51456
Brahman
2003-09-29 17:25
2003.10.16
Перевоплощение:)


14-51440
Ua
2003-09-30 16:54
2003.10.16
Видимо общество желает объяснений.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский