Четверг, 11 Августа 2022, 17:34

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Программирование » Delphi/Pascal/Object Pascal » Midlet pascal (Проблема с созданием пользовательского интерфейса)
Midlet pascal
tupin0Дата: Вторник, 07 Февраля 2012, 13:18 | Сообщение # 1
частый гость
Сейчас нет на сайте
Midlet Pascal
Я написал на мидлет паскаль программу вычисления Дискрименанта по формуле,но прога почему то не высчитывает его по формуле, а всегда выводит: "Дискрименант: 0". Почему? Вот текст проги:

program ax2_bx_c_mobile;
var okCommand:command;
a,b,c,x1,x2,x:integer;
d:integer;
dr,x1r,x2r,ar,br,cr:string;
drp,x1rp,x2rp,arp,brp,crp:integer;
begin
okCommand := createCommand('OK', CM_OK, 1);
showForm;
addCommand(okCommand);
a := formAddTextField('Введите a', '', 20, TF_NUMERIC);
b := formAddTextField('Введите b', '', 20, TF_NUMERIC);
c := formAddTextField('Введите c', '', 20, TF_NUMERIC);
while (getClickedCommand <> okCommand) do
delay(100);
ar:=FormGetText(a);
br:=FormGetText(b);
cr:=FormGetText©;
arp:=StringToInteger(ar);
brp:=StringToInteger(br);
crp:=StringToInteger(cr);
d:=(brp*brp)-(4*arp*crp);

dr:=FormGetText(d);
drp:=StringToInteger(dr);
ShowTextBox('Дискрименант равен:',''+drp,100,TF_NUMERIC);
while (getClickedCommand <> okCommand) do
delay(100);
End.


Silent Hill Mobile!!!!!!!
GECKДата: Вторник, 07 Февраля 2012, 18:17 | Сообщение # 2
заслуженный участник
Сейчас нет на сайте
Quote (tupin0)
d:=(brp*brp)-(4*arp*crp);

dr:=FormGetText(d);
drp:=StringToInteger(dr);
ShowTextBox('Дискрименант равен:',''+drp,100,TF_NUMERIC);

Здесь происходит что-то непонятное. Может сделать так:
Code
d:=(brp*brp)-(4*arp*crp);  
drp:=StringToInteger(d);  
ShowTextBox('Дискрименант равен:',''+drp,100,TF_NUMERIC);


Всё гениальное просто. И хреново работает.
TimKruzДата: Вторник, 07 Февраля 2012, 19:48 | Сообщение # 3
старожил
Сейчас нет на сайте
Quote (GECK)
Здесь происходит что-то непонятное. Может сделать так:

Ага. Число как будто берётся из формы и переводится в число. Правильно сделать так:
Code
d:=(brp*brp)-(4*arp*crp);      
ShowTextBox('Дискрименант равен:',''+d,100,TF_NUMERIC);

Потому что d - это уже число, и делать с ним ничего не нужно.

Потом сделаешь так:
Code
x1:=(-b+sqrt(d))/(2*a);
x2:=(-b-sqrt(d))/(2*a);

И выведешь в окне.

Я с Мидлет Паскалем не разбирался, но меня смущает вот что:
Code
a:=formAddTextField('Введите a', '', 20, TF_NUMERIC);
ar:=FormGetText(a);
arp:=StringToInteger(ar);

В переменную a помещается числовое значение поля ввода. В переменную ar помещается строка, преобразованная из a. И в arp помещается число, полученное из ar. По-моему, тупость. Ведь можно сразу использовать число a, абсолютно ни как его не меня... Может быть, лучше будет так:
Code
program ax2_bx_c_mobile;
var okCommand:command;
a,b,c,x1,x2,d:integer;
begin
okCommand := createCommand('OK', CM_OK, 1);
showForm;
addCommand(okCommand);
a := formAddTextField('Введите a', '', 20, TF_NUMERIC);
b := formAddTextField('Введите b', '', 20, TF_NUMERIC);
c := formAddTextField('Введите c', '', 20, TF_NUMERIC);
while (getClickedCommand <> okCommand) do
delay(100);
d:=(b*b)-(4*a*c);
ShowTextBox('Дискрименант равен:',''+d,100,TF_NUMERIC);
while (getClickedCommand <> okCommand) do
delay(100);
x1:=(-b+sqrt(d))/(2*a);
x2:=(-b-sqrt(d))/(2*a);
ShowTextBox('Первый корень равен:',''+x1,100,TF_NUMERIC);
while (getClickedCommand <> okCommand) do
delay(100);
ShowTextBox('Второй корень равен:',''+x2,100,TF_NUMERIC);
while (getClickedCommand <> okCommand) do
delay(100);
End.

Собственно, последние несколько строчек тоже можно сократить, но я Мидлет этот не знаю, вдруг чего-то не то посоветую. :D

P.S. Используй bb-код [code] (смотри кнопку над полем ввода), чтобы красиво вставлять свой код на форум.




Сообщение отредактировал TimKruz - Среда, 08 Февраля 2012, 20:20
GECKДата: Вторник, 07 Февраля 2012, 22:05 | Сообщение # 4
заслуженный участник
Сейчас нет на сайте
Quote (TimKruz)
Правильно сделать так:

Вот так просто сложить число со строкой? Такого даже обычный паскаль не позволяет.

Quote (TimKruz)
В переменную a помещается числовое значение поля ввода.

Это не значение поля ввода, это его хэндл.

Quote (TimKruz)
я Мидлет этот не знаю, вдруг чего-то не то посоветую.

Омг.


Всё гениальное просто. И хреново работает.
TimKruzДата: Среда, 08 Февраля 2012, 20:19 | Сообщение # 5
старожил
Сейчас нет на сайте
Quote (GECK)
Вот так просто сложить число со строкой? Такого даже обычный паскаль не позволяет.

А... Я перепутал. facepalm
Quote (GECK)
Это не значение поля ввода, это его хэндл.

Понятно... Значит, надо оставить...


NesДата: Четверг, 09 Февраля 2012, 12:32 | Сообщение # 6
был не раз
Сейчас нет на сайте
Code

d:=(brp*brp)-(4*arp*crp);  

dr:=FormGetText(d);  


у тебя d является переменной, в которой хранится значение дискриминанта, а ты пытаешься использовать её как id какого-то несуществующего TextFiled'а

Code

program ax2_bx_c_mobile;  
var okCommand:command;  
a,b,c,x1,x2,x:integer;  
d:integer;  
dr,x1r,x2r,ar,br,cr:string;  
drp,x1rp,x2rp,arp,brp,crp:integer;  
begin  
okCommand := createCommand('OK', CM_OK, 1);  
showForm;  
addCommand(okCommand);  
a := formAddTextField('Введите a', '', 20, TF_NUMERIC);  
b := formAddTextField('Введите b', '', 20, TF_NUMERIC);  
c := formAddTextField('Введите c', '', 20, TF_NUMERIC);  
while (getClickedCommand <> okCommand) do  
delay(100);  
ar:=FormGetText(a);  
br:=FormGetText(b);  
cr:=FormGetText©;  
arp:=StringToInteger(ar);  
brp:=StringToInteger(br);  
crp:=StringToInteger(cr);  
d:=(brp*brp)-(4*arp*crp);  
   
ShowTextBox('Дискрименант равен:',''+d,100,TF_NUMERIC);  
while (getClickedCommand <> okCommand) do  
delay(100);  
End.  

вот так будет работать
Форум игроделов » Программирование » Delphi/Pascal/Object Pascal » Midlet pascal (Проблема с созданием пользовательского интерфейса)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2022 Рейтинг