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

Вниз

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

 
Sandman25 ©   (2004-08-20 09:44) [600]

?a*(?10^(?10^?b)

где ? - знак (+ или -)


 
Думкин ©   (2004-08-20 09:48) [601]

Согласен. :)
Только с длинной все равно Михей тут штаны порвет. :)


 
Sandman25 ©   (2004-08-20 10:06) [602]

:) Если по теории, то может и не порвать.


 
Юрий Зотов ©   (2004-08-20 14:48) [603]

> Mihey_temporary ©   (19.08.04 19:42) [592]

> Но меня больше интересует некоторое правильное выражение...
> на котором программа крякнется. Но пока такого нету...

Как же "нету"? А [591]?

Что касается диагностики ошибок и прочего:

1. Вот что обязан делать нормальный калькулятор:

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

1б). При возникновении математической ошибки (деление на ноль, переполнение и пр.) сообщать о ней.

1в). При обнаружении в выражении синтаксической ошибки точно ее диагностировать (в какой позиции какой символ неверен и почему).

2. А вот чего нормальный калькулятор делать не должен ни при каких обстоятельствах: он не должен валиться. Никогда. И следует учесть, что вот такой способ:
try
 <вычислить>
except
 ShowMessage("Извините, произошла внутренняя ошибка")
end;

выходом не является.

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


 
Mihey_temporary ©   (2004-08-20 15:02) [604]

> Как же "нету"? А [591]?

Из 591:

>выражение: 1++2

Это неправильное выражение. Противоречит как нормам математики, так и приведённым в калькуляторе правилам (см. раздел "Про выражение".).


 
Григорьев Антон ©   (2004-08-20 15:32) [605]


> Mihey_temporary ©   (20.08.04 15:02) [604]
> > Как же "нету"? А [591]?
>
> Из 591:
>
> >выражение: 1++2
>
> Это неправильное выражение. Противоречит как нормам математики,
> так и приведённым в калькуляторе правилам (см. раздел "Про
> выражение".).


Вот как раз нормам математики оно не противоречит. Унарный плюс допускается, это выражение читается как 1+(+2), т.е. 1+2.


 
VMcL ©   (2004-08-20 15:49) [606]

>>Григорьев Антон ©  (20.08.04 15:32) [605]

AFAIR, по правилам математики два знака подряд идти не должны. То есть правильным будет 1+(+2), но не 1++2. А то прям C++ какой-то :-)

P.S. Или я ошибаюсь?


 
Mihey_temporary ©   (2004-08-20 16:47) [607]


> Григорьев Антон ©   (20.08.04 15:32) [605]


Напиши 1++2 на бумажке и посмотри, как это выглядит.


 
Григорьев Антон ©   (2004-08-20 16:55) [608]


> Mihey_temporary ©   (20.08.04 16:47) [607]
>
> > Григорьев Антон ©   (20.08.04 15:32) [605]
>
>
> Напиши 1++2 на бумажке и посмотри, как это выглядит.


А на фига мне бумажка? Я пишу на Паскале a:=1++2; и компилятор это кушает. И правильно вычисляет. А если эта запись тебе кажется неправильной, то это твои личные проблемы. В большинстве императивных языков программирования такая запись допустима и обозначает именно то, что я сказал. Незнание лично тобой этих общепринятых правил не отменяет их.


 
Суслик ©   (2004-08-20 16:58) [609]

только не вешайте лмд - мой интерпретатор это тоже не есть...
я не знал, что это правильно...


 
Anatoly Podgoretsky ©   (2004-08-20 17:06) [610]

<sign> Operand operator <sign> Operand
В таком случае и -1 + 2 недопустимая запись, противоречит правилам математики :-)


 
Соловьев ©   (2004-08-20 17:10) [611]

Посмотрел калькулятор - сделайте плиз вставку функций на кнопки, а то неудобно.


 
nikkie ©   (2004-08-20 17:14) [612]

не будем бодаться по поводу 1++2.
в правилах написано, что такое недопустимо и ладно.
право разработчика, поскольку ТЗ на калькулятор не было.
вот только описание не формализовано и это плохо.
например, согласно описанию ".1" или "1." - допустимая запись числа?

>[603] Юрий Зотов
абсолютно согласен с описанными требованиями к калькуляторами.
ошибка, когда синтаксически неправильное выражение вычисляется, точно такая же ошибка, как если бы синтаксически правильное выражение не вычислялось или вычислялось неверно.

пункт 1в сейчас не выполняется - позиция ошибки не указывается никогда, я готов дать послабление в этом. главное, чтобы описание ошибки соответсвовало ошибке. "ошибка 002" указывает только место в программе, где произошла ошибка. вызвать ее могут синтаксические ошибки совершенно разных типов.

ЗЫ ждем, пока автор исправит [588]


 
Юрий Зотов ©   (2004-08-20 18:22) [613]

> nikkie ©   (20.08.04 17:14) [612]

> позиция ошибки не указывается никогда, я готов дать
> послабление в этом

Я тоже. П. 1в можно переформулировать:

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


 
Mihey_temporary ©   (2004-08-20 18:51) [614]


> не будем бодаться по поводу 1++2.
> в правилах написано, что такое недопустимо и ладно.
> право разработчика, поскольку ТЗ на калькулятор не было.
> вот только описание не формализовано и это плохо.
> например, согласно описанию ".1" или "1." - допустимая запись
> числа?


Народ, вы в школе учились? Откуда вы понабирали этих 1++2, .5 и т.д.? Меня просили написать калькулятор, а не компилятор. Ещё раз коротко о главном, выдержки из правил: Вводимые числа должны быть введены в обычной разрядной системе. Выражение является простым математическим выражением, использующим разрешённые действия и функции. И всё, всё очень просто. В следующий прежде чем придумывать - предъявляйте цитаты из математических справочников и всякие Юрий Зотов ©   (26.07.04 16:14) [83] и Anatoly Podgoretsky ©   (20.08.04 17:06) [610] на меня не действуют.


 
Mihey_temporary ©   (2004-08-20 18:58) [615]

Для nikkie:

http://www.bymath.net/studyguide/ari/ari12.html

И выдержка:

Если десятичная дробь не содержит целой части, то перед десятичной точкой ставится ноль


 
Mihey_temporary ©   (2004-08-20 19:04) [616]

Для Григорьева Антона:

http://www.bymath.net/studyguide/ari/ari3.html

Выдержка:

Чтобы указать, в каком порядке должны выполняться действия, пользуются скобками. Если скобки отсутствуют, действия выполняются в следующем порядке:

 1)  возведение в степень и извлечение корня (в порядке их следования);

 2)  умножение и деление (в порядке их следования);

 3)  сложение и вычитание (в порядке их следования).


Так, в записи 1++2 нет скобок, значит идём по схеме. Опускаем пункты 1 и 2 - нет таких действий у нас. Значит мы выполняем сложение и вычитание в порядке их следования. И чему же будет тогда равно (1)+(+)???


 
Anatoly Podgoretsky ©   (2004-08-20 19:58) [617]

Mihey_temporary ©   (20.08.04 19:04) [616]
Да не (1)+(+), а (1)+(+2)

операнд1 оператор операнд2
Операнд2 со знаком <sign><number>
стандартный калькулятор спокойно с такой задачкой справляется.


 
Anatoly Podgoretsky ©   (2004-08-20 19:59) [618]

Заменим порядок операндов, для сложения, вычитания и умножения результат не должен меняться
+2+1, -2+1


 
Mihey_temporary ©   (2004-08-20 20:05) [619]


> Anatoly Podgoretsky ©   (20.08.04 19:58) [617]


Да понимаю я, чего хотят от меня. Но не принимаю такого. Используйте скобки - добъётесь желаемого результат.


 
Anatoly Podgoretsky ©   (2004-08-20 20:51) [620]

Ты бы опубликовал спецификацию и определение входного языка, тогда бы можно было предметно говорить, а так ничего хорошего для сторон.


 
Mihey_temporary ©   (2004-08-20 21:18) [621]

В правилах это написано. Даже написано: Такие выражения не допустимы: 5+-3; 1,2*-10; 4++3; Но видать придётся спецификацию ваять, хотя я не понимаю, почему вы, Анатолий, всегда придерживаясь рациональной точки зрения в этой ветке, сменили позицию. Скажите, вы писали в школе (напрягите память! :)) ) что-то вроде 1++.5??? Ну не писали, точно же. Если такая фича нужна - пожалуйста, всё будет сделано, но пока я не вижу никакой практической цели, кроме понтов, а вот сбить с толку такая запись может. Представьте, писал человек 1+1+1, но написал 1++11. Ну вот и будет.


 
Anatoly Podgoretsky ©   (2004-08-20 21:20) [622]

Писал например так 1/-3


 
Anatoly Podgoretsky ©   (2004-08-20 21:21) [623]

Да и тогда еще не занимался программированием, с тех пор стал строже.


 
Mihey_temporary ©   (2004-08-20 21:57) [624]


> Anatoly Podgoretsky ©   (20.08.04 21:20) [622]


Вы про дробь, например:


 1
-----
-3


или про деление: 1 : -3 ?????


 
Anatoly Podgoretsky ©   (2004-08-20 22:02) [625]

я про деление


 
nikkie ©   (2004-08-22 00:35) [626]

>Народ, вы в школе учились?
в школе, между прочим, учат запятую использовать в качестве десятичного разделителя.

Выражение является простым математическим выражением, использующим разрешённые действия и функции.
это фраза ничего не определяет. что такое "простое математическое выражение"? так что ты либо давай правила, по которым однозначно можно определить допустимо выражение или нет, либо не фырчи, когда тебя спрашивают - допустимо ли по-твоему такое выражение или нет.

если меня не обманывает склероз, то фортран допускает пропуск нуля перед десятичной точкой. так что ".1" это не я придумал. хорошо, с ".1" понятно - ты это числом не считаешь. а "1." - нормальное число? паскаль принимает. а твой калькулятор:

выражение: 2+1.
результат: 3

выражение: 1.+2
результат: Ошибка со знаками действий или разделителями! Проверьте правильность выражения!

либо одно, либо другое ошибка.

я все еще жду, когда ты исправишь [588]. теперь еще вот это надо исправить. собираешься вообще?


 
Юрий Зотов ©   (2004-08-22 08:31) [627]

> Mihey_temporary

1. Чтобы не спорить, какая запись допустима, а какая - нет, нужна четкая и однозначная спецификация входного языка. Любая, но однозначная. Иначе тестировать программу невозможно, потому что непонятно, что есть баг, а что есть фича.

2. То, что написано в [626] не лезет ни в какие ворота. Если вычисляется
2+1.
то обязано вычисляться и
1.+2
Либо оба этих выражения обязаны не вычисляться. Нельзя быть наполовину беременной.


 
Григорьев Антон ©   (2004-08-23 07:50) [628]


> Mihey_temporary ©   (20.08.04 19:04) [616]
> Для Григорьева Антона:
>
> http://www.bymath.net/studyguide/ari/ari3.html
>
> Выдержка:
>
> Чтобы указать, в каком порядке должны выполняться действия,
> пользуются скобками. Если скобки отсутствуют, действия выполняются
> в следующем порядке:
>
>  1)  возведение в степень и извлечение корня (в порядке
> их следования);
>
>  2)  умножение и деление (в порядке их следования);
>
>  3)  сложение и вычитание (в порядке их следования).
>
> Так, в записи 1++2 нет скобок, значит идём по схеме. Опускаем
> пункты 1 и 2 - нет таких действий у нас. Значит мы выполняем
> сложение и вычитание в порядке их следования. И чему же
> будет тогда равно (1)+(+)???


Ты только сложение с унарным плюсом не путай, ладно? Сам даже не знаешь, какие операции бывают, а лезешь писать калькулятор. Подучи сначала матчасть.


 
GrayFace2 ©   (2004-08-23 13:28) [629]

Тестирование длиннострочного калькулятора:
*0=Лишний знак действия в конце выражения!
Из правил ввода выражений: При этом, унарный плюс и унарный минус перед числом или выражением должны браться в скобки
3*(-)3=Недопустимый знак перед закрывающей скобкой!
Не сответствие правилам, однако.
(Пример из Правил ввода выражений) 6^-1^-2 = 6 по-праведе 36. 6^(-1)^(-2)=6
6^-2^-1 = "-" is not a valid integer value.
6^(-2)^(-1) = "-" is not a valid integer value.
6^(-1)^(-1) = 0.1666666666666666666666666666666666666666667
и т.д.
>Исходники, взгляните, как всё просто и примитивно:
> http://www.hot.ee/gelphi/Calculator2.rar [100 Kb]

Примитивно, но далеко не просто. Посмотри, насколько мой калькулятор меньше твоего. В твоем коде очень сложно разобраться и его, наверняка, очень сложно править.
Григорьев Антон ©   (23.08.04 7:50) [628]
> Подучи сначала матчасть.

Что это? Как я помню, ты и по поводу WinAPI на матчасть ссылался.


 
GrayFace ©   (2004-08-23 13:30) [630]

Блин, ник не сменил.

Проверьте мой калькулятор!


 
Юрий Зотов ©   (2004-08-23 13:43) [631]

> GrayFace ©   (23.08.04 13:30) [630]

Можно еще раз дать ссылку? А то она уже затерялась глубоко в недрах ветки, долго искать.


 
Думкин ©   (2004-08-23 13:48) [632]

> [631] Юрий Зотов ©   (23.08.04 13:43)

> Внимание, All, если не работает http://www.grayface.chat.ru/Calk.zip,
> заходите на http://www.grayface.chat.ru, а оттуда берите
> Calk.zip


 
VMcL ©   (2004-08-23 13:49) [633]

>Юрий Зотов ©  (23.08.04 13:43) [631]

Пиво еще не прислали? ;)


 
Григорьев Антон ©   (2004-08-23 13:58) [634]


> Григорьев Антон ©   (23.08.04 7:50) [628]
> > Подучи сначала матчасть.
>
> Что это? Как я помню, ты и по поводу WinAPI на матчасть
> ссылался.

В данном случае матчасть - это предметная область. Как я уже говорил, глупо писать бухгалтерскую программу, не зная, что такое дебет и кредит. Точно так же глупо писать калькулятор, не зная, какие существуют арифметические действия.


 
nikkie ©   (2004-08-23 14:53) [635]

>[629] GrayFace2
>(Пример из Правил ввода выражений) 6^-1^-2 = 6 по-праведе 36.

тут ты неправ. степени вычисляются справа налево, а не слева направо, как остальные операции. и твой калькулятор считает двойное возведение в степень неправильно.

будешь исправлять - убери неявное умножение. а то получается такое:
1..1.1 = 0,01
1.1..1 = Syntax error at offset 4


 
Думкин ©   (2004-08-23 15:01) [636]

> [635] nikkie ©   (23.08.04 14:53)
> будешь исправлять - убери неявное умножение.

Об этом говорится уже 2 недели, но воз и ныне там.


 
Mihey_temporary ©   (2004-08-23 15:48) [637]

>Ты только сложение с унарным плюсом не путай, ладно? Сам даже не знаешь, какие операции бывают, а лезешь писать калькулятор. Подучи сначала матчасть.

1++2

После единицы идёт именно сложение, а не унарный плюс. А вот вторым слагаемым идёт именно унарный плюс.


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

>Тестирование длиннострочного калькулятора:
*0=Лишний знак действия в конце выражения!


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

>Из правил ввода выражений: При этом, унарный плюс и унарный минус перед числом или выражением должны браться в скобки
3*(-)3=Недопустимый знак перед закрывающей скобкой!
Не сответствие правилам, однако.


Смехно. Действительно.


 
Григорьев Антон ©   (2004-08-23 15:56) [639]


> Mihey_temporary ©   (23.08.04 15:48) [637]
> После единицы идёт именно сложение, а не унарный плюс. А
> вот вторым слагаемым идёт именно унарный плюс.


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


 
Mihey_temporary ©   (2004-08-23 15:58) [640]


> Унарный плюс не может быть слагаемым. Унарный плюс - это
> только часть слагаемого. Из любой нормально составленной
> грамматики это сразу видно. И любой калькулятор, реализованный
> в строгом соответствии с такой грамматикой, проблем с подобными
> выражениями не испытывает. Пример - компилятор Delphi, который
> такие выражения понимает правильно.


... и ссылка на мат. справочник?



Страницы: 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.59 MB
Время: 0.316 c
3-1097143003
Sid
2004-10-07 13:56
2004.11.07
Снова BDE + локалка


1-1098358854
Wolffgang
2004-10-21 15:40
2004.11.07
Непонятки с LoadFromFile


1-1098697952
Artemius
2004-10-25 13:52
2004.11.07
Как определить путь к программе?


14-1098437632
infom
2004-10-22 13:33
2004.11.07
Где-то тут недавно пробегала тема


14-1098340117
gn
2004-10-21 10:28
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский