Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.07;
Скачать: CL | DM;

Вниз

Калькулятор   Найти похожие ветки 

 
Sandman25 ©   (2004-08-10 12:31) [520]

[518] Думкин ©   (10.08.04 12:27)

Нажимаешь комбинацию клавиш, и код в Delphi из

begin
for i:=1 to 15 do s:= s+   1;
end


становится

begin
 for I := 1 to 15 do
   S := S + 1;
end


Причем вид кода настраивается по желанию.
Есть эксперт для D6 и выше


 
Sandman25 ©   (2004-08-10 12:32) [521]

Соврал. Написано, что работает, начинаяч с D2


 
Думкин ©   (2004-08-10 12:33) [522]

Нет, не пользуюсь и не хочу. :)


 
Sandman25 ©   (2004-08-10 12:36) [523]

[522] Думкин ©   (10.08.04 12:33)

Везет тебе. Мне тут на новом месте дали кучу чужого кода сопровождать. Без форматтера я бы загнулся :)


 
Думкин ©   (2004-08-10 12:44) [524]

> [523] Sandman25 ©   (10.08.04 12:36)

Чур меня чур. У меня чужой, как правило, это VCL.
А тебе - Кысмет, однако. :)


 
GrayFace ©   (2004-08-11 13:25) [525]

Sandman25
А на какой комбинации клавиш этот форматер?

Думкин ©   (10.08.04 12:19) [515]

> У тебя надо уже код смотреть. Хотя я бы от неявного
>умножения отказался.
> И неплохо было бы если бы ты написал, что же он у тебя
> может, чтобы отклонение от этого можно было бы считать
> ошибкой. А то вдруг ты скажешь, что это фича?

Вот так можно отказаться от неявного умножения:const EmptyMul=false;
В GrayFace (30.07.04 10:48) [338] есть спецификация калькулятора.


 
Юрий Зотов ©   (2004-08-11 13:58) [526]

> GrayFace ©   (11.08.04 13:25) [525]

Неявное умножение надо убирать, и из спецификации тоже. Иначе возникает неоднозначность.

Например, 3+3 - это что? Сложение или неявное умножение? Один скажет - сложение, другой - умножение. И оба будут правы, потому что спецификация допускает и то, и другое.


 
Думкин ©   (2004-08-11 15:08) [527]

1.1.1 - что это?


 
Юрий Зотов ©   (2004-08-11 15:39) [528]

> Думкин ©   (11.08.04 15:08) [527]

То же самое, но с еще худшими последствиями: 1.2.3 - это что?

Возможные варианты:
1.0 * 2.0 * 3 = 6
1 * 0.2 * 0.3 = 0.06
1.2 * 0.3 = 0.36
1.0 * 2.3 = 2.3

Спецификация допускает любой вариант. Тестировать невозможно.


 
Думкин ©   (2004-08-11 15:48) [529]

> [528] Юрий Зотов ©   (11.08.04 15:39)

Именно. Но получил только:

> не баг, а фича:
> (1.1).1=(1.1)*0.1=0.11
> 1.(1.1)=1.0*(1.1)=1.1


Вот и все. :(


 
VMcL ©   (2004-08-11 15:51) [530]

>>Думкин ©  (11.08.04 15:48) [529]

Ого. Скобки, типа, по рэндому расставляются? "Я фигею, дорогая редакция".


 
Mihey_temporary ©   (2004-08-11 21:39) [531]

М-да, из-за всяких гопников, которые воруют у людей вещи на пляжах, сразу потеряна куча времени. Надеюсь выпустить калькулятор на выходных.


 
Думкин ©   (2004-08-12 05:53) [532]

> [530] VMcL ©   (11.08.04 15:51)

Нет, скобки поставил я - и оно посчиталось как написано. Но это непрозрачно и из спецификации мне не очевидно, что должно быть так, хотя возможно и не прав.


 
Sandman25 ©   (2004-08-12 09:11) [533]

[525] GrayFace ©   (11.08.04 13:25)

А на какой комбинации клавиш этот форматер?

Это эксперт к Delphi, его сначала скачать и установить надо. Поищите DelForEx в какой-нибудь поисковой системе, а то я уже не помню, откуда его скачивал.


 
GrayFace ©   (2004-08-12 13:17) [534]

Юрий Зотов ©   (11.08.04 15:39) [528]
Думкин ©   (11.08.04 15:48) [529]
Ну если читать спецификацию слева на право и пытаться выделить наибольший кусок, подходящий под <Operand>, то будет так, как делает калькулятор.
Вот без неявного умножения:
<Empty>       ::=
<Sign>        ::="+"|"-"
<Digit>       ::="0"|"1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9"
<Operation1>  ::="*"|"/"
<Operation2>  ::="+"|"-"
<FunctionName>::="sin"|"cos"|"tg"|"ctg"|"arcsin"|"arccos"|"arctg"|"arcctg"
<exponent>    ::="e"|"Е"
<Separator>   ::="."|<DecimalSeparator>
<Number>      ::={Digit}[Separator][{Digit}][<Exponent>[Sign]{Gigit}] | <Separator>{Digit}[<Exponent>[Sign]{Gigit}]
<function>    ::=<FunctionName><operand>
<operand>     ::=[{Sign}]<operand>|<number> | "pi" | <function> | "("<expression>")" | "|"<expression>"|"
<factor>      ::=<operand>[{ "^" <operand>}]
<term>        ::=<factor>[{<Operation1><factor>}]
<expression>  ::=<term>[{<Operation2><term>}]


 
Григорьев Антон ©   (2004-08-13 07:59) [535]

Вот, кстати, в "Статьях" наткнулся: "Программирование математических приложений, Дьяченко Евгений" (http://www.delphimaster.ru/articles/mathprogramming.html). Там тоже есть алгоритм распознования формулы. Ссылка на полную реализацию этого алгоритма (см. в статье ссылку "Математика v0.5" даёт у меня перманентную 500-ую ошибку, но, судя по тому, что есть в статье, калькулятор тоже без теории написан.


 
Юрий Зотов ©   (2004-08-13 10:05) [536]

> Григорьев Антон ©   (13.08.04 07:59) [535]

>  судя по тому, что есть в статье, калькулятор тоже
> без теории написан.

Следствием чего стало такое признание автора (примечание курсивом мои - они переводят обтекаемую форму высказываний на "прямую" речь):

"В заключении, хочу отметить, что приведенный алгоритм является не совсем полным (т.е. просто неполным - ЮЗ). Он будет работать с определенными ограничениями (т.е. умеет распознавать лишь какие-то частные случаи формул - ЮЗ). Для того, что бы программа умела работать с абсолютно любыми формулами, необходимо решить огромное количество мелких и достаточно простых проблем (на самом деле количество таких проблем не "огромно", а бесконечно, потому что бесконечно количество самих формул - следовательно, без применения обобщающего (т.е. теоретического) подхода решить их ВСЕ попросту нельзя - ЮЗ), их можно назвать предельными случаями, которые требуют отдельного описания в программе. Основные проблемы возникают со знаком минуса и раскрытием скобок (вот где уж точно не возникает совершенно никаких проблем, если знать, как это делается - ЮЗ). В процессе написания программы эти проблемы быстро решаются, если их обнаружить, что не всегда легко (а говоря без обиняков, обнаружить ВСЕ эти проблемы не просто "не всегда легко", а попросту невозможно, в силу уже отмечавшейся бесконечности их количества - ЮЗ)".


 
Юрий Зотов ©   (2004-08-13 10:15) [537]

Забыл добавить.

То есть, читать следует так: "Народ, я тут написал нечто такое, что когда-то работает, а когда-то не работает, причем никому точно неизвестно, когда оно работать будет, а когда нет".


 
Григорьев Антон ©   (2004-08-13 10:34) [538]


> Юрий Зотов ©   (13.08.04 10:15) [537]
> Забыл добавить.
>
> То есть, читать следует так: "Народ, я тут написал нечто
> такое, что когда-то работает, а когда-то не работает, причем
> никому точно неизвестно, когда оно работать будет, а когда
> нет".


Именно на это я и намекал :))


 
Mihey_temporary ©   (2004-08-14 18:51) [539]

Работа над калькулятором в завершающих стадиях. Правда, уже замечен огромный недочёт - малая скорость работы программы (на выражениях определённого вида).

Кроме того, хочу предупредить, что первоначально я код публиковать не буду, а ещё разок пройдусь по нему, подкорректирую и тогда опубликую (и это будет через неделю после выкладывания самого калькулятора).


 
Mihey_temporary ©   (2004-08-14 23:17) [540]

Завтра, т.е. в воскресенье железно выложу калькулятор. Помнится, была ветка, где кто-то без цели считал степени двойки, вплоть до 2^64. Однако на моём калькуляторе удалось сосчтитать 2 в 256 степени и это число:
115 792 089 237 316 195 423 570 985 008 687 907 853 269 984 665 640 564 039 457 584 007 913 129 639 936


 
Nous Mellon 22   (2004-08-14 23:44) [541]

Я уже пол-России проехал, а воз и ныне там :-)


 
Думкин ©   (2004-08-15 06:53) [542]

>  Mihey_temporary ©   (14.08.04 23:17)

Я считал. Только намного больще - это занимало несколько строк. Вот степень не помню, но много больше 256. И 1000! приводил тут. :))


 
GrayFace ©   (2004-08-15 10:08) [543]

Юрий Зотов
Сегодня воскреенье - выходной.


 
Mihey_temporary ©   (2004-08-15 23:56) [544]

> Cobalt ©   (26.07.04 23:28) [148]

>1/sin(1,1222-1,22221)

Очекнь странное сообщение выдал - "Два действия подряд! [02А]"

Ничего не понимаю...

P.S. а виндовый калькулятор слопал, выдал -0,10001


Виндовый калькулятор, конечно, работает правильно, не спорю, но и ты забыл кнопочку "=" нажать :).


 
Mihey_temporary ©   (2004-08-15 23:57) [545]

Упс, поторопился :) просто проверял выражения, ставшие переломными для первой версии и нашёл разногласия.


 
Mihey_temporary ©   (2004-08-16 00:12) [546]

Звиняйте великодушно. Не успел зарелизить. Калькулятор готов, но не доделаны правила, вылезла ошибка в крэш-тесте на 300+ выражений (ошибка не калькулятора, а самого сравнителя), не успеваю запаковать и выложить :). Видимо, откладывается до завтра.


 
Mim1 ©   (2004-08-16 07:22) [547]

Чтото мне старичек Эдельвейс спомнился, из "Понедельник наступает в субботу".


 
Думкин ©   (2004-08-16 07:51) [548]

>  [547] Mim1 ©   (16.08.04 07:22)

Это не там. Это в "Сказке о тройке".


 
Mihey_temporary ©   (2004-08-16 16:54) [549]

Expression Calculator v.0.2
http://www.hot.ee/gelphi/ExpCalc.zip

Всё-таки зарелизил. Необходимо было ещё 2 часа на то, что не успел вчера.

Несколько слов. Эту версию прошу считать беткой. За парсер я уверен, не совсем уверен за калькулятор - хочу проработать код ещё раз. Тогда и опубликую его. Кроме того, известны несколько глюков:

Не отлавливается ошибочность выражения типа sin2. Точнее, программа сообщает о внутренней ошибке, но я понимаю, что нужно сделать проверку этого дела с выводом более вразумительного сообщения.

При исключениях не исчезает надпись "Считаю". Забыл влепить исчезалку в try...finally...end. Мелочь, но всё же.

Пока что программа не работает с периодами. Т.е. 2/3*3 выдаст 2.000...00001, а не 2, так как промежуточный результат (2/3) был записан ввиде конечной десятичной дроби. В дальнейшем планируется устранить неточность.

И, наконец, внимание! Используйте точку в качестве десятичного разделителя.


 
Mihey_temporary ©   (2004-08-16 16:55) [550]

Размер архива 250 Кб.


 
nikkie ©   (2004-08-16 17:18) [551]

удивляет, почему так долго и неточно считает sin.

судя по [540] внутрях реализована длинная арифметика, видимо из-за этого.

sin(3.1415926)
0.0548036642148768366804128756572852742855831
(на calc.exe: 5,3589793238462617732829186571369e-8)

sin(3.1415926535897932384626433832795)
0.0548036651487895308877487135398332038025398
(на calc.exe: 5,0288419841092213655485729692158e-31)


 
Mihey_temporary ©   (2004-08-16 17:25) [552]

Почему неточно?

sin(3.1415926) выдаёт:

0.054803664 - карманный калькулятор
0,0548036642148768366804128756572853 - калькулятор Windows
0.0548036642148768366804128756572852742855831  - моё творение


 
nikkie ©   (2004-08-16 17:44) [553]

не заметил я вот этого:
>Аргумент функций sin, cos, tan (или tg) предполагается в градусах.
по поводу неточности возражение снимается. но все-таки долго очень...

27^(1/3) - через 10 минут счета я снял задачу.

может убрать пока длинную арифметику и сделать на Double/Extended + стандартная реализация функций? все-таки длинная арифметика за пределами поставленной задачи.


 
nikkie ©   (2004-08-16 17:47) [554]

(+2))(
Access Violation


 
Mihey_temporary ©   (2004-08-16 18:43) [555]


> (+2))(
> Access Violation


Действительно, не учёл, хотя занимался этим. Но, скажем, выражение составлено не по правилам. Больше интересуют ошибки парсера и калькулятора.


 
Mihey_temporary ©   (2004-08-16 18:47) [556]

Длинную арифметику я тогда сниму пока что.

Кроме того, забыл ещё про один глюк рассказать. Дробная степень реализуется через корень, при этом отсутсвует проверка на корень чётной степени из отрицательного числа.


 
nikkie ©   (2004-08-16 18:49) [557]

я потратил полчаса на тестирование, обнаруженные глюки описал.
по-моему достаточно для начала. может еще кто изъявит желание потестировать, но мне хотелось бы тестировать тогда, когда 27^(1/3) будет вычислять в пределах 1 секунды.


 
Mihey_temporary ©   (2004-08-16 18:55) [558]

2 nikkie:

Но пока что нет такого, что правильное выражение (которое можно посчитать) считает неправильно либо не считает вообще. Из глюков обнаружен один.


 
nikkie ©   (2004-08-16 19:05) [559]

>Дробная степень реализуется через корень
это как?

(-1)^(3.5)
"- is not an integer value"

(-1)^(3.6)
1

(-1)^(3.7)
-4878.3912434420340881330505872785786504673713417


 
Mihey_temporary ©   (2004-08-16 20:17) [560]

2 nikkie:

Согласен, степень хромает всё же слишком.



Страницы: 1 2 3 4 5 6 7 8 9 
10 11 12 13 14 15 16 17 18 
19 вся ветка

Текущий архив: 2004.11.07;
Скачать: CL | DM;

Наверх




Память: 1.6 MB
Время: 0.205 c
1-1098355337
Temporary
2004-10-21 14:42
2004.11.07
Class. Вопросы.


1-1098378225
CeRBeR
2004-10-21 21:03
2004.11.07
Загрузка dll из реестра


14-1097865611
Knight
2004-10-15 22:40
2004.11.07
Рожать или не рожать... вот в чём сабж


1-1098767015
rosl
2004-10-26 09:03
2004.11.07
меню


14-1097579173
Mega-Volt
2004-10-12 15:06
2004.11.07
Возникли проблемы с ником :(