|
28.06.2011, 04:15
|
#16
|
ПроЭктировщик
Регистрация: 31.01.2010
Адрес: Россия, респ. Башкортостан, г. Бирск
Сообщений: 137
Написано 12 полезных сообщений (для 17 пользователей)
|
Ответ: UniCalc. Универсальный калькулятор
Павел
Как выпущу бету, возьмусь за 0.2. Почищу и переделаю формат переменной с выражением, тогда производную будет намного легче реализовать. Уже есть наброски.
|
(Offline)
|
|
28.06.2011, 11:17
|
#17
|
Бывалый
Регистрация: 18.08.2009
Сообщений: 745
Написано 146 полезных сообщений (для 215 пользователей)
|
Ответ: UniCalc. Универсальный калькулятор
Я делал похожий кальк. на дельфи.
Можешь рассказать в каком виде у тебя хранится математическое выражение после разбиения на части?
|
(Offline)
|
|
28.06.2011, 13:40
|
#18
|
ПроЭктировщик
Регистрация: 31.01.2010
Адрес: Россия, респ. Башкортостан, г. Бирск
Сообщений: 137
Написано 12 полезных сообщений (для 17 пользователей)
|
Ответ: UniCalc. Универсальный калькулятор
У меня нет видимого разбиения на части. Всё выражение хранится в одной переменной. Расчёт происходит по меткам в строке.
|
(Offline)
|
|
29.06.2011, 01:12
|
#19
|
ПроЭктировщик
Регистрация: 31.01.2010
Адрес: Россия, респ. Башкортостан, г. Бирск
Сообщений: 137
Написано 12 полезных сообщений (для 17 пользователей)
|
Ответ: UniCalc. Универсальный калькулятор
экран 240х320 придётся отложить, еду на природу с родителями, отдыхать... вернее работать... в общем доделаю как приеду.
|
(Offline)
|
|
29.06.2011, 01:14
|
#20
|
ПроЭктировщик
Регистрация: 31.01.2010
Адрес: Россия, респ. Башкортостан, г. Бирск
Сообщений: 137
Написано 12 полезных сообщений (для 17 пользователей)
|
Ответ: UniCalc. Универсальный калькулятор
cherepets
да кстати на данный момент вид строки абсолютно идентичен тому что на экране телефона. к следующей версии думаю всё переделать.
|
(Offline)
|
|
30.06.2011, 16:20
|
#21
|
ПроЭктировщик
Регистрация: 31.01.2010
Адрес: Россия, респ. Башкортостан, г. Бирск
Сообщений: 137
Написано 12 полезных сообщений (для 17 пользователей)
|
Ответ: UniCalc. Универсальный калькулятор
Changes:
+ графика оптимизиванна под экраны 240х320;
+ исправлен баг с приоритетом действий;
+ небольшие изменения в графике.
|
(Offline)
|
|
30.06.2011, 22:50
|
#22
|
ПроЭктировщик
Регистрация: 31.01.2010
Адрес: Россия, респ. Башкортостан, г. Бирск
Сообщений: 137
Написано 12 полезных сообщений (для 17 пользователей)
|
Ответ: UniCalc. Универсальный калькулятор
Changes:
+ исправлен баг в делении, но теперь он считает с точностью до 16 знаков. Это сделанно для того, чтобы периуды в ответе не циклили навечно кальк. В будующем можно будет поменять количество знаков после запятой при делении.
В будующем и мышины будут летать
|
(Offline)
|
|
30.06.2011, 23:49
|
#23
|
Задрот
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,574
Написано 407 полезных сообщений (для 863 пользователей)
|
Ответ: UniCalc. Универсальный калькулятор
Сообщение от Ksanatos
У меня нет видимого разбиения на части. Всё выражение хранится в одной переменной. Расчёт происходит по меткам в строке.
|
Это печально.
|
(Offline)
|
|
01.07.2011, 01:24
|
#24
|
ПроЭктировщик
Регистрация: 31.01.2010
Адрес: Россия, респ. Башкортостан, г. Бирск
Сообщений: 137
Написано 12 полезных сообщений (для 17 пользователей)
|
Ответ: UniCalc. Универсальный калькулятор
Павел
а что по твоему было бы лучше?
В java одной строки для всего калькулятора хватит вполне.
|
(Offline)
|
|
01.07.2011, 19:22
|
#25
|
Задрот
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,574
Написано 407 полезных сообщений (для 863 пользователей)
|
Ответ: UniCalc. Универсальный калькулятор
|
(Offline)
|
|
01.07.2011, 21:09
|
#26
|
ПроЭктировщик
Регистрация: 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
|
Задрот
Регистрация: 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
|
ПроЭктировщик
Регистрация: 31.01.2010
Адрес: Россия, респ. Башкортостан, г. Бирск
Сообщений: 137
Написано 12 полезных сообщений (для 17 пользователей)
|
Ответ: UniCalc. Универсальный калькулятор
Java я только начинаю учить, поэтому есть некоторые вопросы.
поясни некоторые строки:
(TTree * node) - что за класс TTree и для чего нужна звёздочка?
(node->class_) и node->value и т.д. - ... О_о что это вообще?
|
(Offline)
|
|
02.07.2011, 21:13
|
#29
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: UniCalc. Универсальный калькулятор
Сообщение от Ksanatos
... О_о что это вообще?
|
Си++
2 Павел
Забавная опечатка, превращающаяся в баг:
этот return будет всегда возвращать true
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо impersonalis за это полезное сообщение:
|
|
02.07.2011, 22:21
|
#30
|
ПроЭктировщик
Регистрация: 31.01.2010
Адрес: Россия, респ. Башкортостан, г. Бирск
Сообщений: 137
Написано 12 полезных сообщений (для 17 пользователей)
|
Ответ: UniCalc. Универсальный калькулятор
2Павел
Я оперирую строкой только потому, что даже число с плавающей запятой(что появилось только в конф. CLDC 1.1) меня не устраивает. Для каждого действия своя функция. OperationFilter приводит числа к нужному формату, потом проводит нужную операцию.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 12:20.
|