Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 5 338

/ вопрос решён /

Доброго времени суток, уважаемые эксперты!
У меня возникла проблема с представлением данных.
Я объявил константы, например:
Const
Q=10;
W=11;
M=12;
А сама проблема собственно в том что я не могу принять эти константы( и Pi собственно тоже) из Edit, и работать с ними как числами.
Например я ввожу в Edit W, а в расчётах должно браться 11.
В интернете нашёл процедуру Val, но она к сожалению не хочет хавать символы даже объявленные как константы.
Я подумал что придется писать функцию на подобии процедуры Val, но не нашёл материала по написанию собственных процедур и функций.
Если не сможете помочь то посоветуйте книгу-учебник, где эта тема поподробней освещена.

Спасибо.

QWERYTY Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: QWERYTY (статус: Посетитель)
Вопрос отправлен: 29 мая 2011, 18:53
Состояние вопроса: решён, ответов: 0.


Мини-форум вопроса

Всего сообщений: 14; последнее сообщение — 30 мая 2011, 12:21; участников в обсуждении: 6.
Gooddy

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

QWERYTY (статус: Посетитель), 29 мая 2011, 20:04 [#2]:

Спасибо Failure, попробую в свой проект такую хрень( в смысле код, ничего оскарбительного в виду не имею) прикрутить.
Не думал что такая мелочь в такую проблему превратится.
Разработка алгоритма встала из за такой дубовости делфи.

Читал твой вопрос, помочь не могу(по незнанию), извени.
И всётаки интерес к написанию функций остался, если кто знает материал для новичков, подробный и понятный, а не такой как в интернете микро-статьи какие то в которых говорится напиши функцию, далее её код и будет тебе счастье.
ВЕРИТЬ ВО ВНЕЗЕМНЫЕ ЦИВИЛИЗАЦИИ НЕ ОЗНАЧАЕТ ВЕРИТЬ В ИНОПЛАНЕТЯН.
bugmenot

bugmenot (статус: 3-ий класс), 29 мая 2011, 20:32 [#3]:

Цитата (QWERYTY):

из за такой дубовости делфи

Это не дельфи дубовый
виконання програми розпочинається з того самого мiсця, де призупинилося.

QWERYTY

QWERYTY (статус: Посетитель), 29 мая 2011, 20:51 [#4]:

Не спорю, я просто не знаю как сделать.
Но я пробовал объявлять тип данных который упорядочен по возрастанию там делфи цифры не жрёт, пробовал процедуру Val там буквы не жрёт.
Начинают утомлять все эти типы данных.
Прозьба писать по существу, я понимаю что любой инструмент не дубовый если уметь им пользоваться. Просто я не программист по проффессии. Если бы я кодил с 6 лет и ничем другим не занимался, я бы наверное не стал задавать вопросс, а может кому нибудь сам помог.
ВЕРИТЬ ВО ВНЕЗЕМНЫЕ ЦИВИЛИЗАЦИИ НЕ ОЗНАЧАЕТ ВЕРИТЬ В ИНОПЛАНЕТЯН.
bugmenot

bugmenot (статус: 3-ий класс), 29 мая 2011, 21:03 [#5]:

Уже упоминалось - парсер математических выражений.
Книга: Ахо, Сети, Ульман. \\\"Компиляторы: принципы, технологии, инструменты\\\" гл. 2
виконання програми розпочинається з того самого мiсця, де призупинилося.

Мережников Андрей

Мережников Андрей (статус: Абитуриент), 29 мая 2011, 21:05 [#6]:

Цитата (QWERYTY):

Не спорю, я просто не знаю как сделать.

Во-первых, правильно сформулировать задачу, тогда часть вопросов отпадет сама-собой.
QWERYTY

QWERYTY (статус: Посетитель), 29 мая 2011, 21:17 [#7]:

Пока я разрабатывал алгоритм я даже не думал что может быть такая проблема, я думал будет всё как обычно:
strtoint(Edit1.text), и что так можно и например Pi отконвертить(ну и другие константы, например которые я сам создал), но не тут то было.
ВЕРИТЬ ВО ВНЕЗЕМНЫЕ ЦИВИЛИЗАЦИИ НЕ ОЗНАЧАЕТ ВЕРИТЬ В ИНОПЛАНЕТЯН.
QWERYTY

QWERYTY (статус: Посетитель), 29 мая 2011, 21:22 [#8]:

Задача собственно простая. Я в расчётах оперирую данными из Edit. Как вбивая в Edit имя константы в расчётах учитывать ёе числовое значение?
ВЕРИТЬ ВО ВНЕЗЕМНЫЕ ЦИВИЛИЗАЦИИ НЕ ОЗНАЧАЕТ ВЕРИТЬ В ИНОПЛАНЕТЯН.
Толяныч

Толяныч (статус: 4-ый класс), 29 мая 2011, 22:14 [#9]:

Я думаю, что никак. Дело в том, что после обработки исходника компиляторм в исполняемом коде уже нет никаких имен, все эти Q,W,M для исполняемого кода - пустой звук, программе известны только адреса, по которым в памяти располагается переменная или константа. Так что ответ Failure - лучше не придумаешь.
QWERYTY

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

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™

min@y™ (статус: Доктор наук), 30 мая 2011, 08:17 [#12]:

Ну, если идентификаторы однобуквенные, то можно было бы сделать константный массив и не париться. И никакая функция со 100500-ступенчатым if ... then ... else была бы не нужна.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
QWERYTY

QWERYTY (статус: Посетитель), 30 мая 2011, 11:56 [#13]:

Спасибо min@y™ за коментарий, но там несколько более сложная ситуация, просто я не стал никого морочить этим и упростил задачу до предела.
В каждый Edit вводится несколько символов без пробелов(такой микс из цифр и букв), а я в расчётах беру либо первый из них, либо второй в зависимости от условий.

В любом случае всем спасибо, "проблема" решилась приемлемым для меня вариантом.
ВЕРИТЬ ВО ВНЕЗЕМНЫЕ ЦИВИЛИЗАЦИИ НЕ ОЗНАЧАЕТ ВЕРИТЬ В ИНОПЛАНЕТЯН.
QWERYTY

QWERYTY (статус: Посетитель), 30 мая 2011, 12:21 [#14]:

Кстати не думал что так просто собственные функции писать.
В статьях про написание функций так и пишут, только не указывают куда её вставлять, я пробовал выше implementation и компилятор постоянно ругался. В итоге в книге прочитал как надо, и здесь специально так выложыл.
ВЕРИТЬ ВО ВНЕЗЕМНЫЕ ЦИВИЛИЗАЦИИ НЕ ОЗНАЧАЕТ ВЕРИТЬ В ИНОПЛАНЕТЯН.

30 мая 2011, 12:23: Статус вопроса изменён на решённый (изменил автор вопроса — QWERYTY): Задача решена

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:41
Выполнено за 0.03 сек.