|
Вопрос # 5 338/ вопрос решён / |
|
Доброго времени суток, уважаемые эксперты!
У меня возникла проблема с представлением данных.
Я объявил константы, например:
Const
Q=10;
W=11;
M=12;
А сама проблема собственно в том что я не могу принять эти константы( и Pi собственно тоже) из Edit, и работать с ними как числами.
Например я ввожу в Edit W, а в расчётах должно браться 11.
В интернете нашёл процедуру Val, но она к сожалению не хочет хавать символы даже объявленные как константы.
Я подумал что придется писать функцию на подобии процедуры Val, но не нашёл материала по написанию собственных процедур и функций.
Если не сможете помочь то посоветуйте книгу-учебник, где эта тема поподробней освещена.
Спасибо.
 |
Вопрос задал: QWERYTY (статус: Посетитель)
Вопрос отправлен: 29 мая 2011, 18:53
Состояние вопроса: решён, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 14; последнее сообщение — 30 мая 2011, 12:21; участников в обсуждении: 6.
|
Gooddy (статус: 3-ий класс), 29 мая 2011, 19:43 [#1]:
Вам нужен либо парсер (сложный вариант),
либо нужно составить условия (простой вариант).
Парсер я на коленке не напишу а вот проверку условий запросто:
if lowerCase(myEdit.text)='w' then value=W
else
if lowerCase(myEdit.text)='m' then value=M
else
if lowerCase(myEdit.text)='pi' then value=PI
else
value:=StrToInt(myEdit.text);
Чисти код! Чисти код! Чисти код!
|
|
QWERYTY (статус: Посетитель), 29 мая 2011, 20:04 [#2]:
Спасибо Failure, попробую в свой проект такую хрень( в смысле код, ничего оскарбительного в виду не имею) прикрутить.
Не думал что такая мелочь в такую проблему превратится.
Разработка алгоритма встала из за такой дубовости делфи.
Читал твой вопрос, помочь не могу(по незнанию), извени.
И всётаки интерес к написанию функций остался, если кто знает материал для новичков, подробный и понятный, а не такой как в интернете микро-статьи какие то в которых говорится напиши функцию, далее её код и будет тебе счастье.
ВЕРИТЬ ВО ВНЕЗЕМНЫЕ ЦИВИЛИЗАЦИИ НЕ ОЗНАЧАЕТ ВЕРИТЬ В ИНОПЛАНЕТЯН.
|
|
bugmenot (статус: 3-ий класс), 29 мая 2011, 20:32 [#3]:
Цитата (QWERYTY):
из за такой дубовости делфи
Это не дельфи дубовый
виконання програми розпочинається з того самого мiсця, де призупинилося.
|
|
QWERYTY (статус: Посетитель), 29 мая 2011, 20:51 [#4]:
Не спорю, я просто не знаю как сделать.
Но я пробовал объявлять тип данных который упорядочен по возрастанию там делфи цифры не жрёт, пробовал процедуру Val там буквы не жрёт.
Начинают утомлять все эти типы данных.
Прозьба писать по существу, я понимаю что любой инструмент не дубовый если уметь им пользоваться. Просто я не программист по проффессии. Если бы я кодил с 6 лет и ничем другим не занимался, я бы наверное не стал задавать вопросс, а может кому нибудь сам помог.
ВЕРИТЬ ВО ВНЕЗЕМНЫЕ ЦИВИЛИЗАЦИИ НЕ ОЗНАЧАЕТ ВЕРИТЬ В ИНОПЛАНЕТЯН.
|
|
bugmenot (статус: 3-ий класс), 29 мая 2011, 21:03 [#5]:
Уже упоминалось - парсер математических выражений.
Книга: Ахо, Сети, Ульман. \\\"Компиляторы: принципы, технологии, инструменты\\\" гл. 2
виконання програми розпочинається з того самого мiсця, де призупинилося.
|
|
Мережников Андрей (статус: Абитуриент), 29 мая 2011, 21:05 [#6]:
Цитата (QWERYTY):
Не спорю, я просто не знаю как сделать.
Во-первых, правильно сформулировать задачу, тогда часть вопросов отпадет сама-собой.
|
|
QWERYTY (статус: Посетитель), 29 мая 2011, 21:17 [#7]:
Пока я разрабатывал алгоритм я даже не думал что может быть такая проблема, я думал будет всё как обычно:
strtoint(Edit1.text), и что так можно и например Pi отконвертить(ну и другие константы, например которые я сам создал), но не тут то было.
ВЕРИТЬ ВО ВНЕЗЕМНЫЕ ЦИВИЛИЗАЦИИ НЕ ОЗНАЧАЕТ ВЕРИТЬ В ИНОПЛАНЕТЯН.
|
|
QWERYTY (статус: Посетитель), 29 мая 2011, 21:22 [#8]:
Задача собственно простая. Я в расчётах оперирую данными из Edit. Как вбивая в Edit имя константы в расчётах учитывать ёе числовое значение?
ВЕРИТЬ ВО ВНЕЗЕМНЫЕ ЦИВИЛИЗАЦИИ НЕ ОЗНАЧАЕТ ВЕРИТЬ В ИНОПЛАНЕТЯН.
|
|
Толяныч (статус: 4-ый класс), 29 мая 2011, 22:14 [#9]:
Я думаю, что никак. Дело в том, что после обработки исходника компиляторм в исполняемом коде уже нет никаких имен, все эти Q,W,M для исполняемого кода - пустой звук, программе известны только адреса, по которым в памяти располагается переменная или константа. Так что ответ Failure - лучше не придумаешь.
|
|
QWERYTY (статус: Посетитель), 29 мая 2011, 22:39 [#10]:
И ещё вопросик раз уж так всё пошло:
Допустим у меня несколько Edit, в один я вбиваю 9 в другой Q(что должно быть равносильно 10), и мне нужно проверить чтото типа:
if (strtoint(Edit1.Text) = (strtoint(Edit2.Text))-1) and
(strtoint(Edit1.Text) = (strtoint(Edit3.Text))-2) then
переменная:= переменная +1 else
......Дальнейшие действия.
Как видно из примера отлично подошла бы функция, ну или с процедурой повозился бы малясь, но пример Failur'a не пойму пока куда прикрутить.
ВЕРИТЬ ВО ВНЕЗЕМНЫЕ ЦИВИЛИЗАЦИИ НЕ ОЗНАЧАЕТ ВЕРИТЬ В ИНОПЛАНЕТЯН.
|
|
QWERYTY (статус: Посетитель), 30 мая 2011, 02:12 [#11]:
Может кому будет полезно. Проблема решилась написанием функции, которую я здесь и выложу:
implementation
{$R *.dfm}
function chartoint(char: string): shortint;
begin
if lowerCase(char)='q' then result:=10 else
if lowerCase(char)='w' then result:=11 else
if lowerCase(char)='e' then result:=12 else
if lowerCase(char)='r' then result:=13 else
if lowerCase(char)='t' then result:=14 else
if lowerCase(char)='y' then result:=15 else
result:=strtoint(char);
end;
Всем спасибо.
ВЕРИТЬ ВО ВНЕЗЕМНЫЕ ЦИВИЛИЗАЦИИ НЕ ОЗНАЧАЕТ ВЕРИТЬ В ИНОПЛАНЕТЯН.
|
|
min@y™ (статус: Доктор наук), 30 мая 2011, 08:17 [#12]:
Ну, если идентификаторы однобуквенные, то можно было бы сделать константный массив и не париться. И никакая функция со 100500-ступенчатым if ... then ... else была бы не нужна.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
QWERYTY (статус: Посетитель), 30 мая 2011, 11:56 [#13]:
Спасибо min@y™ за коментарий, но там несколько более сложная ситуация, просто я не стал никого морочить этим и упростил задачу до предела.
В каждый Edit вводится несколько символов без пробелов(такой микс из цифр и букв), а я в расчётах беру либо первый из них, либо второй в зависимости от условий.
В любом случае всем спасибо, "проблема" решилась приемлемым для меня вариантом.
ВЕРИТЬ ВО ВНЕЗЕМНЫЕ ЦИВИЛИЗАЦИИ НЕ ОЗНАЧАЕТ ВЕРИТЬ В ИНОПЛАНЕТЯН.
|
|
QWERYTY (статус: Посетитель), 30 мая 2011, 12:21 [#14]:
Кстати не думал что так просто собственные функции писать.
В статьях про написание функций так и пишут, только не указывают куда её вставлять, я пробовал выше implementation и компилятор постоянно ругался. В итоге в книге прочитал как надо, и здесь специально так выложыл.
ВЕРИТЬ ВО ВНЕЗЕМНЫЕ ЦИВИЛИЗАЦИИ НЕ ОЗНАЧАЕТ ВЕРИТЬ В ИНОПЛАНЕТЯН.
|
30 мая 2011, 12:23: Статус вопроса изменён на решённый (изменил автор вопроса — QWERYTY): Задача решена
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|