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) Вот так просто сложить число со строкой? Такого даже обычный паскаль не позволяет. А... Я перепутал. 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. вот так будет работать
|
|
| |
|