Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.03.2020, 14:23   #1
Menmo
Пользователь
 
Регистрация: 17.10.2012
Сообщений: 40
По умолчанию Динамическое задание значений переменных

Встал вопрос о том, как сделать так, чтобы пользователь сам задавал значение переменных.
Покажу на примере, есть 4 неких переменных integer;
Допустим int1,int2,int3,int4.
Как задать значение для каждой переменной думаю знают все - int1:=1; Грубо говоря, а как сделать вот так?
Int1:=int2*n+int3*n+int4*n. Где n - число заданное пользователем, причём пользователь должен задавать не только n, но само количество этих переменных.
Т.е. может быть вот так int1:=int2*n+init4*n;
или int3:=unit2*n+unit1*n;
Как это возможно реализовать? Чтобы именно пользователь выбирал как будет строится значение?
Menmo вне форума Ответить с цитированием
Старый 15.03.2020, 14:54   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

для построения диалога(-ов) с пользователем существуют формы (TForm)
для ввода пользователя на форме размещаются контролы (Tedit, TcomboBox, TListBox, ....)
простейший ввод
Код:
var
  n: integer;

 n:=StrToInt(edit1.Text);
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Старый 15.03.2020, 15:06   #3
Menmo
Пользователь
 
Регистрация: 17.10.2012
Сообщений: 40
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
для построения диалога(-ов) с пользователем существуют формы (TForm)
для ввода пользователя на форме размещаются контролы (Tedit, TcomboBox, TListBox, ....)
простейший ввод
Код:
var
  n: integer;

 n:=StrToInt(edit1.Text);
Это то конечно легко и понятно, но как сделать, чтобы не только N задавал пользователь но и построение самого выражения?
Вот допустим хочет он чтобы было так int1:=int1+int2*n или так int1:=int2*n+int3*n.
Как реализовать именно построение самого такого выражения?
Menmo вне форума Ответить с цитированием
Старый 15.03.2020, 18:26   #4
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,537
По умолчанию

Очень просто - все int собрать в массив. Тогда пользователь будет вводить индексы массива, и с элементами массива по этим адресам можно делать что хошь.
Мне тут видится недопонимание самой сути процесса. Когда компиляция и линковка произведена и программа запущена на выполнение, для неё уже не существует никаких int1,int2 - ей известны только адреса, по которым размещены переменные. И бесполезно писать int2 в каком-либо Edit, рассчитывая, что программа обратится к этой переменной - для неё всё равно, что была скомпилирована строка
Код:
 int1, int2: integer
или
Код:
 gav, zdes_byl_vasya: integer
- код будет сгенерирован абсолютно одинаковый.
Я правильно понял, чего недопонял ТС ?
-----------------------------------------------------------
Есть более простой путь: написать свой интерпретатор, который будет парсить введённую строку, формировать последовательность операций и выполнять их

Последний раз редактировалось digitalis; 15.03.2020 в 18:45.
digitalis вне форума Ответить с цитированием
Старый 15.03.2020, 23:22   #5
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 16,220
По умолчанию

Цитата:
Сообщение от Menmo Посмотреть сообщение
Вот допустим хочет он чтобы было так int1:=int1+int2*n или так int1:=int2*n+int3*n.
Для начала надо определить, какие операции, скобки, функции, переменные и т.п. допустимы в выражении. Далее необходимо сделать разбор выражения примерно следующим образом:
1. Все переменные заменить конкретными значениями.
2. Раскрыть все скобки (если их наличие предполагается).
3. Выполнить операции в порядке приоритета, то есть сначала умножение и деление, затем пройтись по сложению и вычитания.
Arigato вне форума Ответить с цитированием
Старый 16.03.2020, 10:20   #6
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,537
По умолчанию

То есть это дополнение к моему - сделать собственный интерпретатор? Для ТС это сложно, я думаю. Мне кажется, он не понимает сути работы языков высокого уровня.
digitalis вне форума Ответить с цитированием
Старый 16.03.2020, 12:35   #7
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Код:
if comboboxnamevar.text='var2' then var2:=...;
но сначала надо заполнить этот combobox нужными именами (теми в которые мы сможем присваивать).
Код:
case comboboxnamevar.ItemIndex of
2: var2:=...
...
end;
P.S. зачем, почему?...
не имею ни малейшего понятия, но вдруг... пригодится.
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическое создание объектов и задание событий TreadProblem Общие вопросы Delphi 9 15.03.2011 17:57
Передача значений переменных функциями HostileZeth Общие вопросы C/C++ 4 02.12.2010 16:29
Считывание значений переменных в потоках Руслантус Общие вопросы .NET 1 09.09.2010 15:39
Динамическое задание событий Mutagena Помощь студентам 6 08.01.2010 23:22
Процедура для считывания значений переменных xPAL Общие вопросы Delphi 4 07.12.2008 19:23