Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   www.boolean.name > Программирование игр для мобильных телефонов > MidletPascal > Наше Open Source Software

Наше Open Source Software Наработки для использования в Ваших проектах

Ответ
 
Опции темы
Старый 11.07.2010, 14:01   #1
Banan
Нуждающийся
 
Регистрация: 03.10.2008
Сообщений: 61
Написано 13 полезных сообщений
(для 44 пользователей)
Простой калькулятор с приоритетом операций

Набросал калькулятор использующий обратную польскую запись. Вычисляет только + - / *,использует приоритет операций и скобки. Можно доработать и под остальные функции. Главной задачей была возможность уместить весь алгаритм в одну функцию. Теперь ей можно пользоваться при создании своих калькуляторов или интерпритаторов.
Вложения
Тип файла: zip OPNot.zip (13.3 Кб, 653 просмотров)
(Offline)
 
Ответить с цитированием
Эти 7 пользователя(ей) сказали Спасибо Banan за это полезное сообщение:
Антихрист (11.07.2010), FighteR (04.02.2011), Igor (10.05.2012), midlet_pascal (29.01.2012), NetBuilding (02.08.2010), odd (17.07.2010), ViNT (11.07.2010)
Старый 10.05.2012, 15:04   #2
Igor
Мастер
 
Аватар для Igor
 
Регистрация: 03.05.2010
Адрес: Подмосковье
Сообщений: 1,217
Написано 436 полезных сообщений
(для 784 пользователей)
Калькулятор с приоритетом операций

Прошу администраторов перенести пост в комментарий к похожей теме, т.к. для написания комментария у меня почему-то не хватает прав(

Функция для калькулятора, поддерживает знаки () +-/*
Входные данные - строка, на выходе - число, например, для 2+2*2-2*(3-4*(-2+1))/2 выдаст ответ -1

Исходный код:
function Calc2(S:string):real;
var   
            
i:integer;
            
L:integer;
            
n:integer;
            
c:Char;
            
nashel:boolean;
begin
Calc2
:=0;
if 
s<>'' then
  
if S<>'0' then          
    begin
    n
:=StringToInteger(s);
    if 
n<>0 then 
      Calc2
:=n                             //проверка на число
    
else
      
begin
      L
:=Length(s);
      
n:=0;    
      
nashel:=false;                           //знакu + u -
      
for i:=L downto 0 do
        
begin
        c
:=GetChar(s,i);
        if 
c=')' then n:=n+1;
        if 
c='(' then n:=n-1;
        if (
n=0) and ((c='+') or (c='-')) then
          begin
          nashel
:=true;
          break;
          
end;
        
end;
      if 
nashel then
        begin
        
if c='+' then  
          Calc2
:=Calc2(copy(s,0,i))+Calc2(copy(s,i+1,L))
        else
          
Calc2:=Calc2(copy(s,0,i))-Calc2(copy(s,i+1,L))          
        
end
      
else
        
begin                                     //знаки * и /
        
for i:=L downto 0 do
          
begin
          c
:=GetChar(s,i);
          if 
c=')' then n:=n+1;
          if 
c='(' then n:=n-1;
          if (
n=0) and ((c='*') or (c='/')) then
            begin
            nashel
:=true;
            break;
            
end;    
          
end;
        if 
nashel then
          begin
          
if c='*' then
            Calc2
:=Calc2(copy(s,0,i))*Calc2(copy(s,i+1,L))
          else
            
Calc2:=Calc2(copy(s,0,i))/Calc2(copy(s,i+1,L));                     
          
end
        
else
          
begin
          Calc2
:=Calc2(copy(s,1,L-1));
          
end;
        
end;              
      
end;
    
end;
end
__________________
О¯О ¡¡¡ʁɔvʎнdǝʚǝdǝu dиW
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
AVL (15.05.2012)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +1, время: 18:20.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com