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

Вниз

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

 
Anatoly Podgoretsky ©   (2004-07-26 15:46) [80]

унарный минус имеет более высокий приоритет


 
Григорьев Антон ©   (2004-07-26 15:51) [81]


> Огромное Кулясищще ©   (26.07.04 15:42) [78]
> 2 Сергей суровцев:
>
> >А вот список этих правил должен быть обнародован ПЕРЕД
> калькулятором. А уже сам калькулятор должен соответствовать
> заявленной спецификации. Тогда не придется спрашивать согласие
> на каждое действие в отдельности. :))
>
> А я так и сделал.


Нет, не сделал. Правила должны быть записаны в виде [59]. Чтобы про любое выражение можно было сказать, допустимо ли оно синтаксически, руководствуясь только формальным подходом, а не той способностью к додумыванию, которой нет у компьютера.

> >2^-2 - синтаксически вполне допустимое выражение. 2^(-2)
> - тоже. Следовательно, оно должно правильно вычисляться
> в любой форме.
>
> Не согласен. В обычной записи на бумаге мы можем написать,
> например, основание 2 и показатель -2*3. Как же вы эту запись
> запишите строчкой без скобок?


А при чём здесь это? Если, например, выражение 2*(2+3) не может быть записано без скобок, то это ещё не повод требовать писать 2*(2) вместо 2*2.


 
Внук ©   (2004-07-26 15:58) [82]

>>Огромное Кулясищще ©   (26.07.04 15:42) [78]
> >2^-2 - синтаксически вполне допустимое выражение. 2^(-2)
> - тоже. Следовательно, оно должно правильно вычисляться
> в любой форме.
>
> Не согласен.
 Что такое "a  в степени b" - это число или выражение a, далее знак ^, далее число или выражение b. -2 является числом? Безусловно. Следовательно, 2^-2 допустимо. Равно как и 2^(-2). И если бы была построена грамматика, таких вопросов бы не возникало ни у создателя программы, ни даже у тестировщика.


 
Юрий Зотов ©   (2004-07-26 16:14) [83]

> Сергей Суровцев ©   (26.07.04 15:32) [76]

> Конечно меньше, иногда намного ибо иначе не было бы движения
> вперед вообще. Новое поколение успевало бы только усвоить те
> же знания, что и предыдущее. За доказательство теоремы
> Пифагора в 14м веке давали звание магистра. А разрыв в объеме
> знаний в пределах начала и конца 20го века - несколько
> порядков. Другое дело, что подобная скорость и достигается
> путем освоения в теории (быстро и четко) того, что предыдущее
> поколение вымучило практикой (и созданием, собственно, этой
> теории).


Подчеркнутая мною фраза говорит, что если речь идет обо всем человечестве и исторически значимом промежутке времени (таком, за который предыдущие поколения УСПЕЛИ создать теорию и последующим осталось только ее изучить), то Вы правы. А если речь идет о двух конкретных людях со сравнительно небольшой разницей в возрасте (за которые новых значимых обощений человечество не наработало)- то вряд ли. Потому что младшему придется усваивать практически все то же самое, что проходил и старший.

> Огромное Кулясищще ©   (26.07.04 15:42) [78]

Видите ли, в чем дело... обычная запись на бумаге и запись в ОДНУ строку - вещи разные. Не стоит сравнивать стулья с балалайками.

<factor> := <operand> | <operand> ^ <factor>
<operand> ::= <number> | <function> | ( <expression> )
<number> ::= <sign> <unsigned> //если рассматривать только целые
<sign> ::= + | - | <empty>
<empty> ::=

И этим ВСЕ сказано. А яблоки падают вниз, а не вверх - хотите Вы того, или нет. Ваше согласие им, извините, по барабану.


 
Romkin ©   (2004-07-26 16:22) [84]

Задача сравнительно легко, быстро и кратко решается конечным автоматом магазинного типа :)
Вот только чтобы понять, что такое "автомат с магазином" (это не Калашников!) нужно немного теории :)


 
Игорь Шевченко ©   (2004-07-26 16:30) [85]

Romkin ©   (26.07.04 16:22)


> Задача сравнительно легко, быстро и кратко решается конечным
> автоматом магазинного типа :)


Насколько я помню, для полькой записи. Нет ?


 
Romkin ©   (2004-07-26 16:36) [86]

По-моему, для польской магазин уже не нужен...


 
Огромное Кулясищще ©   (2004-07-26 16:43) [87]

<factor> := <operand> | <operand> ^ <factor>
<operand> ::= <number> | <function> | ( <expression> )
<number> ::= <sign> <unsigned> //если рассматривать только целые
<sign> ::= + | - | <empty>
<empty> ::=

И этим ВСЕ сказано. А яблоки падают вниз, а не вверх - хотите Вы того, или нет. Ваше согласие им, извините, по барабану.


Простите, но это меня начинает бесить. Только возникает дельная мысль, как вы из какой-то книжки или ещё откуда-то достаёте какую-то запись и тычете ею. Мне эта запись ничего не говорит, и более того, теперь я её презираю. Мало ли что мог кто-то когда-то написать. Мне абсолютно пофиг, делать 2^-2 допустимым или нет, но предложения типа "делай, как Пётр I велел" я не поддерживаю.

По делу. Всё, ваяю скобки. Скобки только круглые, раз уж разница между стулом и балалайкой такая огромная.

Извиняйте, вспылил тут немного.


 
Игорь Шевченко ©   (2004-07-26 16:44) [88]

Romkin ©   (26.07.04 16:36)

У меня осталось впечатление по "Ахо, Ульман.  Теория синтаксического анализа, перевода и компиляции, М., Мир, 1978". Правда, читал я ее в 80-ых годах, мог и позабыть :)


 
calm ©   (2004-07-26 16:45) [89]


> Мне эта запись ничего не говорит

Вот и не пылите.
Если люди говорят на языке, который вы не понимаете, то вы презираете этот язык?


 
Anatoly Podgoretsky ©   (2004-07-26 16:46) [90]

Огромное Кулясищще ©   (26.07.04 16:43) [87]
Это плохо - надо сдерживаться
А насчет непонимания, самое время восполнить этот пробел.


 
DiamondShark ©   (2004-07-26 16:48) [91]


> Romkin ©   (26.07.04 16:36) [86]
> По-моему, для польской магазин уже не нужен...

Именно для польской он и нужен ;)


 
Юрий Зотов ©   (2004-07-26 16:55) [92]

> Romkin ©   (26.07.04 16:36) [86]

Именно нужен.

Обычная запись: (a+b)*c
Польская запись:  ab+c*

Алгоритм работы МП-вычислителя:
1. Встретили операнд - затолкнули его в стек.
2. Встретили операцию - вытолкнули их из стека два верхних операнда, произвели над ними эту операцию, результат затолкнули в стек.

Входной_символ    Содержимое_стека (вершина слева)
a                 a
b                 ba
+                 s (сумма a+b)
с                 cs
*                 r (произведение s*с)


 
Игорь Шевченко ©   (2004-07-26 16:57) [93]

Юрий Зотов ©   (26.07.04 16:55)

Спасибо, значит, память мне не совсем изменяет :)


 
Огромное Кулясищще ©   (2004-07-26 17:03) [94]

Всё, тестирую своё чудо.


 
Юрий Зотов ©   (2004-07-26 17:06) [95]

> Огромное Кулясищще ©   (26.07.04 16:43) [87]

> но предложения типа "делай, как Пётр I велел" я не поддерживаю.

Это велит не Петр I и даже не Юрий Зотов.
:о)

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

Понимаете, арифметика говорит, что 2*3 будет 6. Можете с этим соглашаться, а можете придумать и свою собственную арифметику - но результат в любом случае будет один и тот же: до тех пор пока Вы не сформулируете какой-либо ОДНОЗНАЧНЫЙ алгоритм (или таблицу) умножения, умножать Вы не сможете.


 
Kerk ©   (2004-07-26 17:06) [96]


> Игорь Шевченко ©   (26.07.04 16:57) [93]
> Юрий Зотов ©   (26.07.04 16:55)

Кончайте подсказывать. Это не спортивно! Они должны свой способ придумать!


 
Григорьев Антон ©   (2004-07-26 17:24) [97]


> Kerk ©   (26.07.04 17:06) [96]
>
> > Игорь Шевченко ©   (26.07.04 16:57) [93]
> > Юрий Зотов ©   (26.07.04 16:55)
>
> Кончайте подсказывать. Это не спортивно! Они должны свой
> способ придумать!


Ну, судя по [87], эти подсказки всё равно впрок не идут.


 
Юрий Зотов ©   (2004-07-26 17:26) [98]

> Игорь Шевченко ©   (26.07.04 16:57) [93]

Память... какое красивое имя...
:о)


 
Огромное Кулясищще ©   (2004-07-26 17:27) [99]

2 Юрий Зотов:

Сглотнув слюну, выдаю вам:

http://www.hot.ee/gelphi/Calculator.zip


 
Romkin ©   (2004-07-26 17:30) [100]

Юрий Зотов ©  (26.07.04 16:55) [92] А разве здесь нельзя заменить стек двумя регистрами?


 
calm ©   (2004-07-26 17:34) [101]


> А разве здесь нельзя заменить стек двумя регистрами?

Это как, позвольте?


 
Romkin ©   (2004-07-26 17:41) [102]

calm ©  (26.07.04 17:34) [101] Лемма: для польской записи глубина стека не превышает двух операндов :))
Учитывая только двухместные операции, разумеется.


 
Юрий Зотов ©   (2004-07-26 17:42) [103]

> Romkin ©   (26.07.04 17:30) [100]

Двух может и не хватить. Вот здесь, например, нужно уже три:
(a+b)*c-(d+e)/f
ab+c*de+f/-

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


 
Romkin ©   (2004-07-26 17:46) [104]

А, точно :)


 
Юрий Зотов ©   (2004-07-26 17:48) [105]

> Огромное Кулясищще ©   (26.07.04 17:27) [99]

При щелчке по ссылке IE виснет.


 
calm ©   (2004-07-26 17:49) [106]


> Лемма: ...

:)


 
calm ©   (2004-07-26 17:50) [107]


> При щелчке по ссылке IE виснет.

Мне исправно предложилось скачать файл.
Но я не стал :)


 
Игорь Шевченко ©   (2004-07-26 17:53) [108]

Огромное Кулясищще ©   (26.07.04 17:27) [99]

А как интерпретировать результат вида -1,11111111111111E102}E{66


 
Игорь Шевченко ©   (2004-07-26 17:55) [109]

Огромное Кулясищще ©   (26.07.04 17:27) [99]

Вдогонку - глючит по самое не могу, Access Violations сплошь и рядом. Может, лучше теорию поучить ? :)


 
Romkin ©   (2004-07-26 17:59) [110]

:)))))))


 
calm ©   (2004-07-26 17:59) [111]


> Может, лучше теорию поучить ? :)

Кулясищще, не поддавайся на провокации, держись!
Другого такого развлечения я в инете не найду :)

А если серьезно, то по-моему, необходимость теоретической подготовки продемонстрирована весьма наглядно, может и вправду пора сдаваться?


 
Игорь Шевченко ©   (2004-07-26 18:03) [112]

Очень любопытные результаты получаются при вычислении выражения вида "1+(1-1))))" - результатом является "1}))"

Желающие могут попробовать вычислить выражение вида "1,2/(1,2222-1,22221)" (можно вместо запятых использовать точки)


 
Ihor Osov'yak ©   (2004-07-26 18:06) [113]

2 [112] Игорь Шевченко ©   (26.07.04 18:03)

> 1,2/(1,2222-1,22221)

Ну Вы и мерзопакостный тип :-).

С возвращением!


 
Игорь Шевченко ©   (2004-07-26 18:10) [114]

Ihor Osov"yak ©   (26.07.04 18:06)


> Ну Вы и мерзопакостный тип :-).


Пустили козла в огород - дали программку потестировать :)


> С возвращением!


Отпуск всегда кончается раньше, чем хотелось бы :)


 
Romkin ©   (2004-07-26 18:15) [115]

Хм. А фигурные скобки откуда берутся? 8-\


 
Nous Mellon ©   (2004-07-26 18:18) [116]

Ну раз уж  Михей сел писать калькулятор - быть беде :)


 
Юрий Зотов ©   (2004-07-26 18:18) [117]

> Огромное Кулясищще ©   (26.07.04 17:27) [99]
Ну виснет у меня IE, и все тут. Не скачивается ссылка.

> Игорь Шевченко ©   (26.07.04 18:03) [112]
> 1,2/(1,2222-1,22221)

Немного странно. Подобный "зубодробительный" тест я тоже держал в загашнике, но никак не ожидал, что его "зубодробительность" проявится уже при разнице всего лишь в 6-м знаке. Ожидал, что потребуется знаков 15-20 (в зависимости от используемого внутренного типа). Похоже, что это глюк не арифметики, а парсера.


 
Игорь Шевченко ©   (2004-07-26 18:23) [118]

Юрий Зотов ©   (26.07.04 18:18)


> Похоже, что это глюк не арифметики, а парсера.


Разумеется. Судя по тому, что в результате появляются нечисловые символы, всю программу можно смело отправлять в Recycle Bin.


 
Огромное Кулясищще ©   (2004-07-26 18:29) [119]

>Очень любопытные результаты получаются при вычислении выражения вида "1+(1-1))))" - результатом является "1}))"

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

>Похоже, что это глюк не арифметики, а парсера.

Вряд ли.


 
Igorek ©   (2004-07-26 18:31) [120]

С теорией и дурак напишет - ты попробуй без теории...



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

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

Наверх




Память: 0.7 MB
Время: 0.073 c
14-1097821651
П7
2004-10-15 10:27
2004.11.07
Души умерших файлов


14-1098440796
Viner
2004-10-22 14:26
2004.11.07
Активность винчестера


3-1096868940
Галинка
2004-10-04 09:49
2004.11.07
Как создать таблицу ADO+Access...


1-1098447169
edge
2004-10-22 16:12
2004.11.07
TList.Free


14-1098193274
MORA
2004-10-19 17:41
2004.11.07
FlashFiler - это серверная (типа) БД такая!