![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ввод чисел перед переменными в выражении в строке Edit. [D7, WinXP]
grol © (2005-05-22 03:36:00)Уважаемые Мастера Delphi! Вот у меня есть выражение: 'Eo+Em*Sin(w*t+y)'. Это
выражение в моей программе уже введенно в edit. Но перед каждой переменной в
выражении, например перед Eo или Em, могут стоять еще коэффициенты. К примеру:
'-1,5*Eo+2*Em*Sin(w*t+5*y)'. Вопрос такой, как сделать так, чтоб эти числовые
коэффициенты можно было вводить только перед переменными в выражении. Нужно
сделать так, чтоб числа не вводились между 'E' и 'o' или 'E' и 'm'. И числовые коэффициенты
могут быть отрицательными и положительными, дробными и целыми а после них
обязательно должен следовать знак '*', а если забыть то он должен принудительно
ставиться!!! Помогите пожалуйста Мега Мастера Delphi!!!
P.S. Меня этот курсовик уже задолбал...:-(((
TUser (2005-05-22 07:50:00) [1]Интересно, вот ЮЗ говорит, что на 1м курсе дают курсовик - написание компилитора. А это на нулевом или как?
KilkennyCat (2005-05-22 04:01:00) [2]Что нам надо в первую очередь? определить переменные.
Как это можно сделать? есть несколько вариантов: стандартными функциями нахождения подстрок, либо перебором всей строки вручную. Я бы остановился на последнем варианте, так как решает проблему наличия нескольких одинаковых переменных, или с общекоренными именами.
var
i : integer;
leng : integer;
p : Tstrings; // здесь все наши переменные
s : string; // сюда будем находить переменную
result : string; //результативная строка
begin
leng := Length(Edit.Text);
s := '';
for i := 1 to leng do begin
if edit.text[i] in ['A'..'z'] then //вот тут мы определим в s найденную переменную.
s := s + edit.text[i];
else begin
if s <> '' then begin у //нас есть переменная
case p.itemsof(s) of //проверяем ее в списке
1 : //делаем что необходимо, например:
2 : s := '-1*' + s;
end;
result := result + s; // изменяем результативную строку
s := ''; // готовим для новой переменной
end else
result := result + edit.text[i]; // прибавление к результату прочих данных,
end;
end;
примерно так.
default (2005-05-22 03:52:00) [3]может просто дать польз-лю возм-ть устанавливать значения переменных
E0, Em, w, y в едитах, например ?