| 
| 
 | Вопрос # 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): Задача решена Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |