Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2004.11.07;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 1.58 MB
Время: 0.268 c
6-1093954630
Дядя
2004-08-31 16:17
2004.11.07
Цепочка прокси-серверов


3-1096373594
NewGuest
2004-09-28 16:13
2004.11.07
проблема соединения с базой (dbase через ADO) на разных компах


1-1098270070
Calm
2004-10-20 15:01
2004.11.07
TXMLDocuemnt, проблема с кирилицей


1-1098343873
sergeii
2004-10-21 11:31
2004.11.07
Permezhenie Mishki


1-1098423661
denis24
2004-10-22 09:41
2004.11.07
разбивка строки на слова





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский