forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Основной форум (http://forum.boolean.name/forumdisplay.php?f=49)
-   -   не могу понять в чем прикол (http://forum.boolean.name/showthread.php?t=5075)

@lexxx 20.11.2007 20:33

не могу понять в чем прикол
 
Написал MIDlet, на всех эмуляторах запускается. На телефоне - фиг. На Сименсе выдает какую-то фигню, а на Nokia вообще недопустимое приложение
Код:

program rulon;
var dsID,hsID,d1sID,stringID: integer;
i, n: integer;
hi,di,d,d1,l,h,r,d1i:real;
cmdNext,cmdQuit: command;
begin
    ShowForm;
    dsID:=FormAddTextField('Введите диаметр рулона в мм', '', 4, TF_NUMERIC);
    hsID:=FormAddTextField('Введите толщину материала в мкм', '', 4, TF_NUMERIC);
    d1sID:=FormAddTextField('Введите диаметр держателя в мм', '', 10, TF_NUMERIC);
    cmdNext := CreateCommand('Считать', CM_OK, 1);
    AddCommand(cmdNext);
    repeat until GetClickedCommand = cmdNext;
    ShowCanvas;
    di:=StringToInteger(FormGetText(dsID));
    d:=di/1000;
    hi:=StringToInteger(FormGetText(hsID));
    h:=hi/1000000;
    d1i:=StringToInteger(FormGetText(d1sID));
    d1:=d1i/1000;
    n:=trunc((d-d1)/(2*h));
    l:=0;
    r:=d1+h;
    for i:=1 to n do
    begin
        l:=l+3.14*r;
        r:=r+h;
    end;
    l:=l*100;
    l:=trunc(l);
    l:=l/100;
    DrawText('Длина: '+l,0,0);
    repaint;
    cmdQuit := CreateCommand('Выход', CM_EXIT, 1);
    AddCommand(cmdQuit);
    repeat until GetClickedCommand = cmdQuit;
end.

:SOS:

zheland 20.11.2007 21:02

Re: не могу понять в чем прикол
 
А ты на Samsung или на SonyEricsson пробовал?:-D
Ну а к делу :
я с MIDlet'ом не расбираюсь.
пересмотри код может где-то что-то перепутал.

zheland 20.11.2007 21:04

Re: не могу понять в чем прикол
 
Смотрю,напоминает Pascal!!!

@lexxx 20.11.2007 21:15

Re: не могу понять в чем прикол
 
Это и есть Паскаль. Ты название форума видел?

Alex_90 20.11.2007 21:26

Re: не могу понять в чем прикол
 
Цитата:

var dsID,hsID,d1sID,stringID: integer;
i, n: integer;
hi,di,d,d1,l,h,r,d1i:real;
cmdNext,cmdQuit: command;
А не много ли ты переменныых объявил?
Может памяти не хватает?

ViNT 20.11.2007 21:34

Re: не могу понять в чем прикол
 
А версию MIDP какую поставил?
P.S. Выложи лучше полностью проект.

@lexxx 20.11.2007 21:39

Re: не могу понять в чем прикол
 
Вложений: 2
обновленный проект(таже фигня)

EVIL_USER 20.11.2007 23:25

Re: не могу понять в чем прикол
 
У меня на С75 прекрасно запустилось.

Bruteo 20.11.2007 23:32

Re: не могу понять в чем прикол
 
Поле "Midlet vendor" заполни латиницей. На телефонах проблема из-за кириллицы.
Нет типа данных "byte" в midlet pascal.

@lexxx 20.11.2007 23:49

Re: не могу понять в чем прикол
 
byte я случайно ввел, хотел взять маленький тип, привык к Паскалю

odd 21.11.2007 08:47

Re: не могу понять в чем прикол
 
В графическом режиме добавлять командные кнопки нельзя да и нажатия на них отлавливаться не будут. Так что убирай строки добавления кнопки Выход. Если так кортит добавить кнопку напиши что-то типа:

Код:

DrawText('Выход', GetWidth-GetStringWidth('Выход'), GetHeight-GetStringHeight('В'));
Repaint;
repeat
  Delay(20); n:=GetKeyClicked;
  if (n=-4) or (n=-7) or (n=-22) then break;
until false;

или убери переключение в графический режим (ShowCanvas), а результаты вычислений выводи на экран строкой:
Код:

ClearForm; n:=FormAddString('Длина: '+l);

ViNT 21.11.2007 11:21

Re: не могу понять в чем прикол
 
У меня на SE и так все работает.

@lexxx 22.11.2007 23:46

Re: не могу понять в чем прикол
 
На Сименсе он запускается, но при одинаковой вводимой тройке чисел каждый раз выводит новый результат.
При тройке 120, 350, 40 должно выводится 21.52, а выводится что-то левое. Не могу понять че происходит.

ViNT 23.11.2007 15:30

Re: не могу понять в чем прикол
 
Попробуй добавить переинициализацию переменных перед каждым перерассчетом.

odd 25.11.2007 10:04

Re: не могу понять в чем прикол
 
Всё равно, кажется это формула косячит. Учи матчасть.

Код:


Program rulon;
Var
 id1, id2, id3: integer;
 d1, d2, l, h, n:real;
 cmdNext, cmdExit, key: command;
Procedure Cls;
begin
 ClearForm; SetFormTitle('Калькулятор рулонов 1.0.0');
 cmdNext := CreateCommand('Считать', CM_OK, 1); AddCommand(cmdNext);
 cmdExit := CreateCommand('Выход', CM_EXIT, 1); AddCommand(cmdExit);
end;
Begin
 ShowForm;
 repeat
  Cls;
  id1:=FormAddTextField('Диаметр рулона, (мм):', '', 5, TF_NUMERIC);
  id2:=FormAddTextField('Толщина материала, (мкм):', '', 5, TF_NUMERIC);
  id3:=FormAddTextField('Диаметр держателя, (мм):', '', 5, TF_NUMERIC);
  repeat Delay(20); key:=GetClickedCommand; until key <> EmptyCommand;
  if key=cmdExit then break;
  d1:=StringToInteger(FormGetText(id1)); d1:=d1/1000;
  h:=StringToInteger(FormGetText(id2)); h:=h/1000000;
  d2:=StringToInteger(FormGetText(id3)); d2:=d2/1000;
  n:=(d1-d2)/(2*h); l:=n*4.71238898*(d1-d2)/2;
  Cls; n:=FormAddString('Длина: '+l);
  repeat Delay(20); key:=GetClickedCommand; until key <> EmptyCommand;
  if key=cmdExit then break;
 until false;
End.


@lexxx 25.11.2007 17:49

Re: не могу понять в чем прикол
 
На Nokia прога запускается и выводит нужное число и работает правильно.
Проблема только с Siemensом.
Формула не косячит.

odd 27.11.2007 09:06

Re: не могу понять в чем прикол
 
Если ты всё ещё в цикле считаешь, то надо перед каждым циклом в переменную l записывать ноль l:=0; иначе у тебя длина будет с каждым разом всё больше и больше. А Семён тут ни при чём.

@lexxx 30.11.2007 19:03

Re: не могу понять в чем прикол
 
Так l обнуляется. Я проверил проблема только с Семеном.

Bruteo 30.11.2007 20:17

Re: не могу понять в чем прикол
 
Все дело в том, что ты при компиляции выбираешь floating, а не fixed point. На некоторых телефонах при этом расчеты будут проводиться неверно. Я при написании fncalc`а с тем же столкнулся. Список телефонов, на которых будет работать неверно, можно посмотреть здесь http://frolov.net/fncalc/

@lexxx 30.11.2007 22:34

Re: не могу понять в чем прикол
 
Ниче не получается. При fixed point он выводит только ноль

Bruteo 30.11.2007 22:57

Re: не могу понять в чем прикол
 
При fixed point числа могут иметь только 4 знака после запятой. Поэтому, например, если делишь 10 на 1000000, то и получаешь 0. Отсюда и выползает ноль в ответе

@lexxx 30.11.2007 23:09

Re: не могу понять в чем прикол
 
Но так мне не подходит. Мне нужно, чтобы прога обрабатывала все числа

Bruteo 30.11.2007 23:31

Re: не могу понять в чем прикол
 
Проводи расчет не в метрах, а в микрометрах. А уже в конце, при выводе результата, приводи к нужной размерности.

@lexxx 01.12.2007 00:16

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

@lexxx 02.12.2007 23:36

Re: не могу понять в чем прикол
 
Почему никто не пишет. Проблема еще не решена.:SOS:

odd 03.12.2007 03:17

Re: не могу понять в чем прикол
 
Желательно выложить текст программы и указать косяки. Какие значения вводились и что надо получать на выходе, а что реально получается.

@lexxx 03.12.2007 21:39

Re: не могу понять в чем прикол
 
Текст:
Код:

program rulon;
var dsID,hsID,d1sID,stringID: integer;
        i, n: integer;
        hi,di,d,d1,l,h,r,d1i:real;
        cmdCalculate,cmdQuit: command;
begin
    ClearForm;
    ShowForm;
    cmdCalculate := CreateCommand('Считать', CM_OK, 1);
    AddCommand(cmdCalculate);
    dsID:=FormAddTextField('Введите диаметр рулона в мм', '', 4, TF_NUMERIC);
    hsID:=FormAddTextField('Введите толщину материала в мкм', '', 4, TF_NUMERIC);
    d1sID:=FormAddTextField('Введите диаметр держателя в мм', '', 4, TF_NUMERIC);
    repeat until GetClickedCommand = cmdCalculate;
    di:=StringToInteger(FormGetText(dsID));
    d:=di;
    hi:=StringToInteger(FormGetText(hsID));
    h:=hi;
    d1i:=StringToInteger(FormGetText(d1sID));
    d1:=d1i;
    ShowCanvas;
    n:=trunc(((d-d1)*1000)/(2*h));
    l:=0;
    for i:=1 to n do
        l:=l+3.14*(d1*1000+2*h*(i));
    l:=l/10000;
    l:=trunc(l);
    l:=l/100;
    showForm;
    stringID:=FormAddString('Длина рулона: '+l);
    removeCommand(cmdCalculate);
    cmdQuit := CreateCommand('Выход', CM_EXIT, 1);
    AddCommand(cmdQuit);
    repeat until GetClickedCommand = cmdQuit;
end.

На входе:
93
100
0
На выходе:
68.3

@lexxx 03.12.2007 21:41

Re: не могу понять в чем прикол
 
На Семене реально получается около 54-55. Мне кажется,что ему не хватает оперативы.

ViNT 03.12.2007 22:14

Re: не могу понять в чем прикол
 
Похоже у симена просто кривая JVM, оперативка тут не при чем.

Bruteo 03.12.2007 22:51

Re: не могу понять в чем прикол
 
Я же говорю - не будет работать на сименсах с плавающей точкой.

@lexxx 03.12.2007 23:41

Re: не могу понять в чем прикол
 
На эмуляторе все отлично работает. Кака только запускаю на телефоне появляются какие-то баги. А насчет плавающей точки - выдается бред, я у же говорил.


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot