forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Основной форум (http://forum.boolean.name/forumdisplay.php?f=49)
-   -   Перевод кода Pascal abc в код MidletPascal (http://forum.boolean.name/showthread.php?t=11827)

Protey 02.02.2010 04:20

Перевод кода Pascal abc в код MidletPascal
 
Собственно возникла проблема с синтаксисом, буду очень благодарен если переведёте под MP и поясните

код на паскале
Код:

Program NewProject;
var
  a,b,c:real; //известные величины
  d:real;  //дискрэменант
begin
  writeln('Ввести коэффициенты a,b,c: ');
  readln(a,b,c);
  d := b*b-4*a*c;  //дискрэменант
  if d>0
      then writeln('D>0 => Два корня: Меньший= ',(-b-sqrt(d))/2*a,', Больший= ',(-b+sqrt(d))/2*a)
  else if d=0
      then writeln('D=0 => Один корень: x=',-b/2*a)
  else if d<0
      then writeln('D<0 => Нет действительных корней');
  readln;
end.


dimka0074 02.02.2010 09:05

Ответ: Перевод кода Pascal abc в код MidletPascal
 
Вроде нет ошибок

Protey 02.02.2010 09:36

Ответ: Перевод кода Pascal abc в код MidletPascal
 
относительно привычного паскаля нет, а вот если переводить в midlet, то ошибка в 6 и 8 строках вроде, там вместо writeln должно быть что то вроде drawtext, но т.к. я не силён, поэтому попросил помощи у знающих

ViNT 02.02.2010 14:37

Ответ: Перевод кода Pascal abc в код MidletPascal
 
Почитай хелп, думаю, все станет ясно.
Если нужно вводить числа, лучше использовать формы. Тогда ввод можно реализовать с помощью TextField, а вывод с помощью FormAddString или Alert.

VotapilD 02.02.2010 16:49

Ответ: Перевод кода Pascal abc в код MidletPascal
 
Вот пример ввода:
Код:

program HelloForm;
 var itemId : integer;
      cmdNext : command; 
      cmdQuit : command;
      name : string;
 begin 
        // switch to form mode from default canvas mode 
 ShowForm; 
        // add a text field to the form   
 itemId := FormAddTextField('Enter your name', '', 20, TF_ANY);   
          // create a command (button)
 cmdNext := CreateCommand('Go!', CM_OK, 1);
 AddCommand(cmdNext);
        // wait until the user clickes on Go! command
 repeat until GetClickedCommand = cmdNext;      // retrieve the entered name
 name := FormGetText(itemId);      // switch back to canvas mode and draw the text
 ShowCanvas;
 DrawText('Hello, ' + name + '!', 0, 0);
 Repaint;
            // create a quit command
 cmdQuit := CreateCommand('Quit', CM_EXIT, 1);
 AddCommand(cmdQuit);
 repeat until GetClickedCommand = cmdQuit;
End.

Тут вводиццо имя через форму(itemId := FormAddTextField('Enter your name', '', 20, TF_ANY); ) и потом выводится в canvas - drawtext('Hello, '+name+'!',0,0);
Ну, должно быть понятно.... А так, Help=>Manual

Protey 02.02.2010 21:59

Ответ: Перевод кода Pascal abc в код MidletPascal
 
Код:

Program ypaBHeHu9;
var
  a,b,c:real;  //известные величины
  d:real;  //дискрэменант
  textField_id: integer;
begin
  textField_id := FormAddTextField('Ввести коэффициенты a,b,c: ', 50, TF_NUMERIC);
  showform;
  delay(2000);
  d := b*b-4*a*c;  //дискрэменант
  if d>0
      then writeln('D>0 => Два корня: Меньший= ',(-b-sqrt(d))/2*a,', Больший= ',(-b+sqrt(d))/2*a)
  else if d=0
      then writeln('D=0 => Один корень: x=',-b/2*a)
  else if d<0
      then writeln('D<0 => Нет действительных корней');
  readln;
end.

компилятор выделил ошибку в 7 строке(по writeln в 12-14-16 я не говорю), обозвал как: ошибка в параметре 2
собственно вопрос, а что за параметр? FormAddTextField ?

кстате, может кто-нибудь из просветлённых сможет проконсультировать меня в асике/мирке/<ещё где-нибудь> (на ваш выбор) ?

VotapilD 02.02.2010 22:36

Ответ: Перевод кода Pascal abc в код MidletPascal
 
Inserts a text field to the form. The function returns the ID of the text field. The 'prompt' is the string displayed next to tet field. 'defaultValue' is the text that is initially in the text field. 'maxSize' is the maximum length of the text field in number of characters. 'constraints' can be any of the following:
·TF_ANY - text field can contain any characters
·TF_EMAIL - only email can be entered into text field
·TF_NUMERIC - only number can be entered into text field
·TF_PHONENUMBER - only phonenumber can be entered into text field
·TF_URL - only URL can be enetered into the ext field
·TF_PASSWORD - the text in the field is hidden, '*' character are displayed instead

PHP код:

function FormAddTextField(promptdefaultValues tring;maxSizeintegerconstraints:integer):integer




Example
Код:

var textField_idinteger;
begin
    textField_id := FormAddTextField('Enter your name', 'Mr.Smith', 20, TF_ANY);
    ShowForm;
    Delay(2000);
end.

icq 473606809 после 10

Protey 02.02.2010 22:49

Ответ: Перевод кода Pascal abc в код MidletPascal
 
чтото вроде этого:

Код:

Program ypaBHeHu9;
var
  a,b,c:real;  //известные величины
  d:real;  //дискрэменант
  textField_id: integer;
begin
  textField_id := FormAddTextField('Ввести коэффициенты a,b,c: ', '1', 20, TF_NUMERIC);
  showform;
  delay(10000);
  d := b*b-4*a*c;  //дискрэменант
 begin
  if d>0
      then drawtext('D>0 => Два корня: Меньший= ',(-b-sqrt(d))/2*a,', Больший= ',(-b+sqrt(d))/2*a)
  else if d=0
      then drawtext('D=0 => Один корень: x=',-b/2*a)
  else if d<0
      then drawtext('D<0 => Нет действительных корней', 0, 0);
  repaint;
 end;
end.

компилятор ругается на строки: 13, 15
и честно говоря уже запутался как чего писать :(

VotapilD 02.02.2010 22:49

Ответ: Перевод кода Pascal abc в код MidletPascal
 
Protey=>
Id_a:= FormAddTextField('Ввести коэффициент a', '', 20, TF_NUMERIC);
Id_b:= FormAddTextField('Ввести коэффициент b', '', 20, TF_NUMERIC);
Id_c:= FormAddTextField('Ввести коэффициент c', '', 20, TF_NUMERIC);

Protey 02.02.2010 22:53

Ответ: Перевод кода Pascal abc в код MidletPascal
 
Цитата:

Сообщение от VotapilD (Сообщение 135740)
Protey=>
Id_a:= FormAddTextField('Ввести коэффициент a', '', 20, TF_NUMERIC);
Id_b:= FormAddTextField('Ввести коэффициент b', '', 20, TF_NUMERIC);
Id_c:= FormAddTextField('Ввести коэффициент c', '', 20, TF_NUMERIC);

вот это кстате ещё больше запутало;)

VotapilD 02.02.2010 22:55

Ответ: Перевод кода Pascal abc в код MidletPascal
 
Вот рабочий код...
a:= FormAddTextField('Ввести коэффициент a', '', 20, TF_NUMERIC); возвращает только число или строку. Не поочереди :) Так что переменные или из строчки извлекать или так.

Код:

Program ypaBHeHu9;
var
  a,b,c:real;  //известные величины
  d:real;  //дискрэменант
  textField_id: integer;
begin
  a:= FormAddTextField('Ввести коэффициент a', '', 20, TF_NUMERIC);
        b:= FormAddTextField('Ввести коэффициент b', '', 20, TF_NUMERIC);
        c:= FormAddTextField('Ввести коэффициент c', '', 20, TF_NUMERIC);
  showform;
  repaint;
  delay(10000);
  d:=b*b-4*a*c;  //дискрэменант
  showcanvas;
 begin
  if d>0
      then drawtext('D>0 => Два корня: Меньший= '+(-b-sqrt(d))/2*a+', Больший= '+(-b+sqrt(d))/2*a,0,0)
  else if d=0
      then drawtext('D=0 => Один корень: x='+( -b/2*a),0,0)
  else if d<0
      then drawtext('D<0 => Нет действительных корней',0,0);
  repaint;
  delay(5000)
 end;
end.


VotapilD 02.02.2010 23:05

Ответ: Перевод кода Pascal abc в код MidletPascal
 
Вместо делея-

Код:

..............
  showform;
  repaint;
  while KeyToAction(GetKeyClicked)<>GA_FIRE do delay(10);
  d:=b*b-4*a*c;  //дискрэменант
  showcanvas;
 begin
......


Protey 02.02.2010 23:09

Ответ: Перевод кода Pascal abc в код MidletPascal
 
спасибо, более-менее разобрался, теперь осталось только добавить пару переносов (все слова в экран не влезают) и будут совсем гуты

odd 03.02.2010 00:16

Ответ: Перевод кода Pascal abc в код MidletPascal
 
Цитата:

Сообщение от VotapilD (Сообщение 135744)
Вместо делея-

Код:

..............
  showform;
  repaint;
  while KeyToAction(GetKeyClicked)<>GA_FIRE do delay(10);
  d:=b*b-4*a*c;  //дискрэменант
  showcanvas;
 begin
......


Кто тебя так учил опрашивать клавиатуру в режиме форм? Там для этого есть только команды (COMMAND).

Protey 03.02.2010 10:02

Ответ: Перевод кода Pascal abc в код MidletPascal
 
запутался в коде ;(
добрые люди, просветите пожалуйста, куда и что нужно дописать чтобы:
1) после ввода коэффициентов жмакать кнопку и приложение продолжало работу (временной интервал сложно подогнать оптимально, 5 мало, 10 много) ?
2) после вывода результата опять нажимать кнопку и приложение закрывалось?
3)<главное> сделать перенос слов скажем про дискременант на одной строке, про первый корень на второй, про второй корень - на третьей?
пол ночи читал различные хелпы - ниасилил ((

Код:

Program x2;
var
  a,b,c:real;  //известные величины
  d:real;  //дискрэменант
  textField_id: integer;
begin
      a:= FormAddTextField('Ввести коэффициент a', '', 20, TF_NUMERIC);
            b:= FormAddTextField('Ввести коэффициент b', '', 20, TF_NUMERIC);
            c:= FormAddTextField('Ввести коэффициент c', '', 20, TF_NUMERIC);
  showform;
  repaint;
  delay(15000);
  d:=b*b-4*a*c;  //дискрэменант
  showcanvas;
 begin
  if d>0
      then drawtext('D>0 => Два корня: Меньший= '+(-b-sqrt(d))/2*a+', Больший= '+(-b+sqrt(d))/2*a,0,0)
  else if d=0
      then drawtext('D=0 => Один корень: x='+( -b/2*a),0,0)
  else if d<0
      then drawtext('D<0 => Нет действительных корней',0,0);
  repaint;
  while KeyToAction(GetKeyClicked)<>KE_KEY0 do delay(10);
 end;
end.


odd 03.02.2010 15:55

Ответ: Перевод кода Pascal abc в код MidletPascal
 
Элементарно, Ватсон.

PHP код:

Program x2;
var
   
abcdreal;
   
id_1id_2id_3iinteger;
   
cmd_okclickedcommand;


Procedure wait;
begin
    cmd_ok
:=CreateCommand('OK'CM_OK1);
    
AddCommand(cmd_ok);
    
Repaint;   
    
repeat 
      clicked 
:= GetClickedCommand;
      
Delay(20);
    
until clicked cmd_ok;
end;


begin
    ShowForm
;
    
id_1:= FormAddTextField('Ввести коэффициент a'''20TF_NUMERIC);
    
id_2:= FormAddTextField('Ввести коэффициент b'''20TF_NUMERIC);
    
id_3:= FormAddTextField('Ввести коэффициент c'''20TF_NUMERIC);
    
wait;
    
a:=StringToReal(FormGetText(id_1), 10);
    
b:=StringToReal(FormGetText(id_2), 10);
    
c:=StringToReal(FormGetText(id_3), 10);
    
d:=b*b-4*a*c;
    
ClearForm;
    
i:=FormAddString('D = ' d);
    if 
0 then
    begin
        i
:=FormAddString('D > 0 Два корня:');
        
i:=FormAddString('Меньший= '+(-b-sqrt(d))/2*a);
        
i:=FormAddString('Больший= '+(-b+sqrt(d))/2*a);
    
end;
    if 
0 then i:=FormAddString('D = 0 Один корень: x='+( -b/2*a));
    if 
0 then i:=FormAddString('D < 0 Нет действительных корней');
    
wait;  
end

И лучше поставить высокую степень точности (погрешность до 0.000001)

impersonalis 03.02.2010 15:57

Ответ: Перевод кода Pascal abc в код MidletPascal
 
Не знаток MidletPascal, но не стоит ли связку
if-if-if оптимизровать до if-else if-else?

odd 03.02.2010 16:08

Ответ: Перевод кода Pascal abc в код MidletPascal
 
Цитата:

Сообщение от impersonalis (Сообщение 135821)
Не знаток MidletPascal, но не стоит ли связку
if-if-if оптимизровать до if-else if-else?

Оно того не стоит, разницы в сотые доли миллисекунд никто не заметит.

Protey 03.02.2010 22:07

Ответ: Перевод кода Pascal abc в код MidletPascal
 
Цитата:

Сообщение от odd (Сообщение 135820)
Элементарно, Ватсон.

PHP код:

Program x2;
var
   
abcdreal;
   
id_1id_2id_3iinteger;
   
cmd_okclickedcommand;


Procedure wait;
begin
    cmd_ok
:=CreateCommand('OK'CM_OK1);
    
AddCommand(cmd_ok);
    
Repaint;   
    
repeat 
      clicked 
:= GetClickedCommand;
      
Delay(20);
    
until clicked cmd_ok;
end;


begin
    ShowForm
;
    
id_1:= FormAddTextField('Ввести коэффициент a'''20TF_NUMERIC);
    
id_2:= FormAddTextField('Ввести коэффициент b'''20TF_NUMERIC);
    
id_3:= FormAddTextField('Ввести коэффициент c'''20TF_NUMERIC);
    
wait;
    
a:=StringToReal(FormGetText(id_1), 10);
    
b:=StringToReal(FormGetText(id_2), 10);
    
c:=StringToReal(FormGetText(id_3), 10);
    
d:=b*b-4*a*c;
    
ClearForm;
    
i:=FormAddString('D = ' d);
    if 
0 then
    begin
        i
:=FormAddString('D > 0 Два корня:');
        
i:=FormAddString('Меньший= '+(-b-sqrt(d))/2*a);
        
i:=FormAddString('Больший= '+(-b+sqrt(d))/2*a);
    
end;
    if 
0 then i:=FormAddString('D = 0 Один корень: x='+( -b/2*a));
    if 
0 then i:=FormAddString('D < 0 Нет действительных корней');
    
wait;  
end

И лучше поставить высокую степень точности (погрешность до 0.000001)

вот спасибочки, эх, теперь бы еще самому разобраться как ты это написал, какая команда за что отвечает, и будет просто замичательно))

Protey 04.02.2010 21:24

Ответ: Перевод кода Pascal abc в код MidletPascal
 
i:=FormAddString('Меньший= '+(-b-sqrt(d))/2*a);

не делит на 2*а, пытался заменить на:

i:=FormAddString('Меньший= '+((-b-sqrt(d))/2*a);

компилятор ругнулся

odd 04.02.2010 21:30

Ответ: Перевод кода Pascal abc в код MidletPascal
 
Попробуй:
PHP код:

i:=FormAddString('Меньший= '+(-b-sqrt(d))/(2*a)); 

Хотя я проверял по примерим из учебника вроде правильно считает.

Protey 04.02.2010 22:26

Ответ: Перевод кода Pascal abc в код MidletPascal
 
а, нет, всё норм, ща на эмуляторе проверил, походу тело сглючило, всётаки зря я его 2 раза стирал и n-ное число раз ронял на бетон))

надо еще красоту навести добавив картинок)), чтобы вместо 11 килобайт, весило все 500 ;)

odd 04.02.2010 22:38

Ответ: Перевод кода Pascal abc в код MidletPascal
 
:-D Можешь для красоты ещё добавить рисование графика функции.
И чтоб выводило весь ход решения подробно.
Тогда программа точно будет супер.

Protey 04.02.2010 23:36

Ответ: Перевод кода Pascal abc в код MidletPascal
 
Цитата:

Сообщение от odd (Сообщение 135990)
:-D Можешь для красоты

на обычном паскале может и смогу, на этом - через пару лет )) уж слишком непонятно мне тут многое

UPD: не совсем понял (точнее совсем не понял) как это юзать:

Цитата:

Выводит картинку в буфер экрана. Координаты x и y описывают в какой точке должен будет находиться левый верхний угол картинки (отсчет ведется тоже от левого верхнего угла экрана).

procedure DrawImage(img: image; x, y: integer);
--------------------------------------------------------------------------------
Пример

begin
DrawImage(LoadImage('/logo.png'), 0, 0);
Repaint;
Delay(1000);
end.
UPD2: еее, разобрался, значит я ещё не совсем плох :-)
UPD3: вопрос, в каком месте нужно прописать команду на прорисовку картинки, чтобы при запуске приложения показывалась картинка, и после нажатия кнопки программа продолжала работу?

odd 05.02.2010 01:11

Ответ: Перевод кода Pascal abc в код MidletPascal
 
вставь её перед ShowForm;
Что-то типа:
PHP код:

DrawImage(LoadImage('/logo.png'), 00);  
   
Repaint;  
   
Delay(5000);  
ShowForm


Protey 05.02.2010 03:35

Ответ: Перевод кода Pascal abc в код MidletPascal
 
обрубается небольшой кусок экрана:
полоска сверху - полоска снизу, тело - соник к530i
как поправить?

odd 05.02.2010 04:34

Ответ: Перевод кода Pascal abc в код MidletPascal
 
Цитата:

Сообщение от Protey (Сообщение 136038)
обрубается небольшой кусок экрана:
полоска сверху - полоска снизу, тело - соник к530i
как поправить?

Поставь в настройках твоей программы (Вид - Свойства проекта или View - Project Properties если у тебя английская версия) параметр "Тип мидлета - MIDP 2.0 Весь экран" (в английской версии MIDlet Type - MIDP2.0 Full Screen).

Protey 05.02.2010 15:38

Ответ: Перевод кода Pascal abc в код MidletPascal
 
сделал, спс, все гут
кстате на знаменатель всё же не делило, добавил две скобки, вроде работает

PHP код:

'Больший= '+(-b+sqrt(d))/(2*a)) 


odd 05.02.2010 18:15

Ответ: Перевод кода Pascal abc в код MidletPascal
 
Ну и славно. Успехов тебе в деле изучения MP!
Я думаю, эту ветку можно закрывать и удалять.

Twice 03.02.2011 13:43

Ответ: Перевод кода Pascal abc в код MidletPascal
 
а при TF_NUMERIC знак - же никак не поставить? нужно TF_ANY юзать?


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

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