Подскажите пожалуйста как реализовать калькулятор с числами произвольной разрядности?????
например
var
s:string;
begin
s:=(2000-353)*164-(2222/234);
Maximka, с чего бы это польская запись здесь не подходила? Что мешает? Слишком большие числа? Пользуйся Real... Мало? Double, Extended...
Если тебе надо действительно ЛЮБУЮ разрядность - смотри в сторону "Длинной Арифметики" (у нас в FAQ-е есть такая тема)... Но все равно, чтобы вычислить значение выражения, его сначала придется перевести в постфикс...
Может польская и подходит, но я что-то не пойму как ее применить....
Допустим дана строка (3567-123), то по идее на выходе должно получиться: 3567123-
Вот здесь у меня ступор. Как разделить два числа, чтобы они не сливались в одно. |3567|123|-
Помогите пожалуйста!!!!
вот пример моей проги (но она считает с числами от 1 до 9).
Ты меня конечно извини, но ты бы уточнил, ЧТО СДЕЛАТЬ хочешь? Просто преобразовать выражение в постфикс, или же ВЫЧИСЛИТЬ его? Если вычислить, то ... вычисляй, зачем ты его распечатываешь?
Я же тебе давал ссылку на FAQ, где есть и калькулятор с использованием постфиксных выражений... Там был?
Вы тоже извиняйте, что толком объяснить не могу. Я хочу сделать калькулятор, который бы вычислял скобочные выражения, с числами произвольной разрядности. (например: (23434-1)-(13414+1)). По началу думал что это можно с помощь постфиксой записью.
Моя задача это делает так:
1.) Пользователь вводит строку. Допустим такую (1+1)
2.) Выражение просматривается посимвольно с лева на право. Прога, с помощью стеков переводит выражение в постфиксную запись 1 1 +
3.) Далее алгоритм считывает посимвольно новую строку и преобразует строки в числа и знаки.
4.) Складывает 1+1. Итог:2
А если ввести числа большой разрядности 124+234, то глюк. Прога переводит выражение в постфиксную запись 1 2 4 2 3 4 +. Получается она сливает 2 числа в одно. И я никак не пойму как от этого избавиться. FAQ читал , но там тоже задачи не для больших чисел. Помогите пожалуйста доработать задачу, чтобы она все таки научилась считать числа с произвольной разрядностью. СПАСИБО!!!!!!
Ну, вот же программа:
http://forum.pascal.net.ru/index.php?s=&showtopic=3786&view=findpost&p=26853
Только что проверил - она прекрасно отработала со строкой:
const
s: string = '142*(3+2214)*5';
Значит проблема в моей задаче. (не хочет она правильно работать).. Не могли бы вы взглянуть на нее своим профессиональным взглядом???!!!! Я новичек в программировании, и поэтому мне еще тяжело читать чужой код.... .
-------
Спасибо, что уделяете свое время..............
Вот мой алгоритм переводящий выражение в польскую запись. Попробуйте запустить его с большими числами и вы сразу, поймете почему он не подходит для чисел с произвольной разрядностью..Вы можете осудить меня за попытку "повторного изобретения велесипеда", но мне очень хочется довести задуманное до конца...
Помогите пожалуйста доработать мой алгоритм.
Procedure opz(var output: string);
...
case input[i] of
'0'..'9': instack (s2,input[i]); { <--- !!! }
Спасибо!!!! Буду мудрить...Вроде понял, что надо менять