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.



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

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