| 
	
		
		
			| 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.
 
вот так будет работать
 |  |  |  |  |  
 |