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

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

Вернуться   forum.boolean.name > Программирование игр для мобильных телефонов > MidletPascal > Проекты на MidletPascal

Ответ
 
Опции темы
Старый 28.06.2011, 04:15   #16
Ksanatos
ПроЭктировщик
 
Аватар для Ksanatos
 
Регистрация: 31.01.2010
Адрес: Россия, респ. Башкортостан, г. Бирск
Сообщений: 137
Написано 12 полезных сообщений
(для 17 пользователей)
Ответ: UniCalc. Универсальный калькулятор

Павел
Как выпущу бету, возьмусь за 0.2. Почищу и переделаю формат переменной с выражением, тогда производную будет намного легче реализовать. Уже есть наброски.
__________________



(Offline)
 
Ответить с цитированием
Старый 28.06.2011, 11:17   #17
cherepets
Бывалый
 
Регистрация: 18.08.2009
Сообщений: 745
Написано 146 полезных сообщений
(для 215 пользователей)
Ответ: UniCalc. Универсальный калькулятор

Я делал похожий кальк. на дельфи.
Можешь рассказать в каком виде у тебя хранится математическое выражение после разбиения на части?
(Offline)
 
Ответить с цитированием
Старый 28.06.2011, 13:40   #18
Ksanatos
ПроЭктировщик
 
Аватар для Ksanatos
 
Регистрация: 31.01.2010
Адрес: Россия, респ. Башкортостан, г. Бирск
Сообщений: 137
Написано 12 полезных сообщений
(для 17 пользователей)
Ответ: UniCalc. Универсальный калькулятор

У меня нет видимого разбиения на части. Всё выражение хранится в одной переменной. Расчёт происходит по меткам в строке.
__________________



(Offline)
 
Ответить с цитированием
Старый 29.06.2011, 01:12   #19
Ksanatos
ПроЭктировщик
 
Аватар для Ksanatos
 
Регистрация: 31.01.2010
Адрес: Россия, респ. Башкортостан, г. Бирск
Сообщений: 137
Написано 12 полезных сообщений
(для 17 пользователей)
Ответ: UniCalc. Универсальный калькулятор

экран 240х320 придётся отложить, еду на природу с родителями, отдыхать... вернее работать... в общем доделаю как приеду.
__________________



(Offline)
 
Ответить с цитированием
Старый 29.06.2011, 01:14   #20
Ksanatos
ПроЭктировщик
 
Аватар для Ksanatos
 
Регистрация: 31.01.2010
Адрес: Россия, респ. Башкортостан, г. Бирск
Сообщений: 137
Написано 12 полезных сообщений
(для 17 пользователей)
Ответ: UniCalc. Универсальный калькулятор

cherepets
да кстати на данный момент вид строки абсолютно идентичен тому что на экране телефона. к следующей версии думаю всё переделать.
__________________



(Offline)
 
Ответить с цитированием
Старый 30.06.2011, 16:20   #21
Ksanatos
ПроЭктировщик
 
Аватар для Ksanatos
 
Регистрация: 31.01.2010
Адрес: Россия, респ. Башкортостан, г. Бирск
Сообщений: 137
Написано 12 полезных сообщений
(для 17 пользователей)
Ответ: UniCalc. Универсальный калькулятор

Changes:
+ графика оптимизиванна под экраны 240х320;
+ исправлен баг с приоритетом действий;
+ небольшие изменения в графике.
__________________



(Offline)
 
Ответить с цитированием
Старый 30.06.2011, 22:50   #22
Ksanatos
ПроЭктировщик
 
Аватар для Ksanatos
 
Регистрация: 31.01.2010
Адрес: Россия, респ. Башкортостан, г. Бирск
Сообщений: 137
Написано 12 полезных сообщений
(для 17 пользователей)
Ответ: UniCalc. Универсальный калькулятор

Changes:
+ исправлен баг в делении, но теперь он считает с точностью до 16 знаков. Это сделанно для того, чтобы периуды в ответе не циклили навечно кальк. В будующем можно будет поменять количество знаков после запятой при делении.
В будующем и мышины будут летать
__________________



(Offline)
 
Ответить с цитированием
Старый 30.06.2011, 23:49   #23
Reizel
Задрот
 
Аватар для Reizel
 
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,574
Написано 407 полезных сообщений
(для 863 пользователей)
Ответ: UniCalc. Универсальный калькулятор

Сообщение от Ksanatos Посмотреть сообщение
У меня нет видимого разбиения на части. Всё выражение хранится в одной переменной. Расчёт происходит по меткам в строке.
Это печально.
__________________
(Offline)
 
Ответить с цитированием
Старый 01.07.2011, 01:24   #24
Ksanatos
ПроЭктировщик
 
Аватар для Ksanatos
 
Регистрация: 31.01.2010
Адрес: Россия, респ. Башкортостан, г. Бирск
Сообщений: 137
Написано 12 полезных сообщений
(для 17 пользователей)
Ответ: UniCalc. Универсальный калькулятор

Павел
а что по твоему было бы лучше?
В java одной строки для всего калькулятора хватит вполне.
__________________



(Offline)
 
Ответить с цитированием
Старый 01.07.2011, 19:22   #25
Reizel
Задрот
 
Аватар для Reizel
 
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,574
Написано 407 полезных сообщений
(для 863 пользователей)
Ответ: UniCalc. Универсальный калькулятор

Синтаксический анализ
__________________
(Offline)
 
Ответить с цитированием
Старый 01.07.2011, 21:09   #26
Ksanatos
ПроЭктировщик
 
Аватар для Ksanatos
 
Регистрация: 31.01.2010
Адрес: Россия, респ. Башкортостан, г. Бирск
Сообщений: 137
Написано 12 полезных сообщений
(для 17 пользователей)
Ответ: UniCalc. Универсальный калькулятор

Вот функция подсчёта, можно упростить, но мне лень.
function Counting(bufstring : string): string;//подсчёт всей строки
  var
    minus : boolean;
    bufstring2,bufstring3 : string;
    OpenBracket,CloseBracket : integer;//позиции открывающей и закрывающей скобок
    FirstNumber,SecondNumber : string;//первое и второе буферные числа
    i,j : integer;//счётчики
    ch : char;
  begin
    //решение выражений в скобках
    while pos(bufstring,'(')<>-1 do
      if getChar(bufstring,pos(bufstring,'(')-1)<>' ' then
        //место для решения функций
        nop;
        //-------------------------
      else
        begin
          OpenBracket:=pos(bufstring,'(');
          bufstring2:=copy(bufstring,OpenBracket+1,length(bufstring));
          i:=0;
          for CloseBracket:=0 to length(bufstring2) do
            if getChar(bufstring2,CloseBracket)='(' then
              i:=i+1;
            else if getChar(bufstring2,CloseBracket)=')' then
              if i<>0 then
                i:=i-1;
              else
                break;
          bufstring2:=copy(bufstring2,0,CloseBracket);
          bufstring:=copy(bufstring,0,OpenBracket)+Counting(bufstring2)+copy(bufstring,OpenBracket+CloseBracket+2,length(bufstring));
        end;
    //---------------------------
    //умножение
    while (pos(bufstring,'*')<>-1) or (pos(bufstring,'/')<>-1) do
      begin
        i:=pos(bufstring,'*');
        j:=pos(bufstring,'/');
        if (i<>-1) and (((j<>-1) and (i<j)) or (j=-1)) then
          ch:=getChar(bufstring,i);
        if (j<>-1) and (((i<>-1) and (j<i)) or (i=-1)) then
          ch:=getChar(bufstring,j);
        bufstring2:=copy(bufstring,0,pos(bufstring,ch)-1);
        j:=PositionOfLastNumber(bufstring2);
        FirstNumber:=copy(bufstring2,j,length(bufstring2));
        FirstNumber:=NumCalibration(FirstNumber);
        bufstring2:='';
        for i:=pos(bufstring,ch)+2 to length(bufstring) do
          if getChar(bufstring,i)=' ' then
            break;
        if i>length(bufstring) then
          i:=i-1;
        SecondNumber:=copy(bufstring,pos(bufstring,ch)+2,i);
        SecondNumber:=NumCalibration(SecondNumber);
        bufstring:=copy(bufstring,0,j)+OperationFilter(FirstNumber,SecondNumber,ch)+copy(bufstring,i,length(bufstring));
      end;
    //---------
    //вычитание
    bufstring3:=bufstring;
    repeat
      if (pos(bufstring3,'-')<>-1) then
        if getChar(bufstring3,pos(bufstring3,'-')+1)=' ' then
          begin
            bufstring2:=copy(bufstring,0,pos(bufstring,'-')-1);
            j:=PositionOfLastNumber(bufstring2);
            FirstNumber:=copy(bufstring2,j,length(bufstring2));
            FirstNumber:=NumCalibration(FirstNumber);
            bufstring2:='';
            for i:=pos(bufstring,'-')+2 to length(bufstring) do
              if getChar(bufstring,i)=' ' then
                break;
            if i>length(bufstring) then
              i:=i-1;
            SecondNumber:=copy(bufstring,pos(bufstring,'-')+2,i);
            SecondNumber:=NumCalibration(SecondNumber);
            bufstring:=copy(bufstring,0,j)+OperationFilter(FirstNumber,SecondNumber,'-')+copy(bufstring,i,length(bufstring));
            bufstring3:=bufstring;
          end;
        else
          bufstring3:=copy(bufstring3,0,pos(bufstring3,'-'))+copy(bufstring3,pos(bufstring3,'-')+1,length(bufstring3));
      else
        break;
    until false;
    //---------
    //сложение
    while pos(bufstring,'+')<>-1 do
      begin
        bufstring2:=copy(bufstring,0,pos(bufstring,'+')-1);
        j:=PositionOfLastNumber(bufstring2);
        FirstNumber:=copy(bufstring2,j,length(bufstring2));
        FirstNumber:=NumCalibration(FirstNumber);
        bufstring2:='';
        for i:=pos(bufstring,'+')+2 to length(bufstring) do
          if getChar(bufstring,i)=' ' then
            break;
        if i>length(bufstring) then
          i:=i-1;
        SecondNumber:=copy(bufstring,pos(bufstring,'+')+2,i);
        SecondNumber:=NumCalibration(SecondNumber);
        bufstring:=copy(bufstring,0,j)+OperationFilter(FirstNumber,SecondNumber,'+')+copy(bufstring,i,length(bufstring));
      end;
    //--------
    Counting:=bufstring;
  end;
__________________



(Offline)
 
Ответить с цитированием
Старый 02.07.2011, 11:13   #27
Reizel
Задрот
 
Аватар для Reizel
 
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,574
Написано 407 полезных сообщений
(для 863 пользователей)
Ответ: UniCalc. Универсальный калькулятор

float GetValue(TTree * node)
{
 switch(node->class_)
{
case VALUE:
return node->value;
break;
case OPERATION:
float v1 = GetValue(node->sub[0]);
float v2 = GetValue(node->sub[1]);
switch(node->subclass_)
{
case OPERATION_PLUS:
return v1+v2;
case OPERATION_MINUS:
return v1=v2;
}
break;
}
}
Вот так будет быстрее и надежнее
__________________
(Offline)
 
Ответить с цитированием
Старый 02.07.2011, 21:04   #28
Ksanatos
ПроЭктировщик
 
Аватар для Ksanatos
 
Регистрация: 31.01.2010
Адрес: Россия, респ. Башкортостан, г. Бирск
Сообщений: 137
Написано 12 полезных сообщений
(для 17 пользователей)
Ответ: UniCalc. Универсальный калькулятор

Java я только начинаю учить, поэтому есть некоторые вопросы.
поясни некоторые строки:
(TTree * node) - что за класс TTree и для чего нужна звёздочка?
(node->class_) и node->value и т.д. - ... О_о что это вообще?
__________________



(Offline)
 
Ответить с цитированием
Старый 02.07.2011, 21:13   #29
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: UniCalc. Универсальный калькулятор

Сообщение от Ksanatos Посмотреть сообщение
... О_о что это вообще?
Си++

2Павел
Забавная опечатка, превращающаяся в баг:
return v1=v2;
этот return будет всегда возвращать true
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо impersonalis за это полезное сообщение:
Ksanatos (02.07.2011), Reizel (03.07.2011)
Старый 02.07.2011, 22:21   #30
Ksanatos
ПроЭктировщик
 
Аватар для Ksanatos
 
Регистрация: 31.01.2010
Адрес: Россия, респ. Башкортостан, г. Бирск
Сообщений: 137
Написано 12 полезных сообщений
(для 17 пользователей)
Ответ: UniCalc. Универсальный калькулятор

2Павел
Я оперирую строкой только потому, что даже число с плавающей запятой(что появилось только в конф. CLDC 1.1) меня не устраивает. Для каждого действия своя функция. OperationFilter приводит числа к нужному формату, потом проводит нужную операцию.
__________________



(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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


Часовой пояс GMT +4, время: 12:52.


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