Для начинающих
[16]
С этих статей вырасли все, кто сейчас программирует на MP. Именно с этих статей надо начинать новичку, качество у них не всегда хорошее, но почитать стоит.
|
Разбираем.Обьясняем
[1]
В этой категории обьясняем, разьясняем библиотеки,примеры,мидлеты и т.д.
|
Прочее
[4]
Прочее, что не касается программирования: как настроить MP, что нужно для работы и др...
|
Главная » Статьи » Midlet Pascal » Для начинающих |
Итак, сегодня мы научимся тому, как использовать процедуры и функции в МР. Начнем с процедур. Что такое процедура? Процедура - это ограниченый кусок кода, который выполняет какое-либо действие. Для чего нужна процедура? Пусть, например, одна процедура будет служить для реализации игры, другая будет для реализации меню игры, которая будет вызывать процедуру самой игры. Надеюсь что смысл понятен. Чтобы объявить процедуру, используют зарезервированое слово procedure. Синтаксис процедуры такой (код на Паскаль): procedure имя_процедуры ([входящие параметры]); Раздел объявления переменных; begin Операторы; end; Для примера напишем процедуру вывода времени: Code procedure time_text; var time: integer; text: string; begin time:=getCurrentTime; text:='Time: '+getHour(time)+':'+getMinute(time); drawText(text,0,10); repaint; delay(5000); end; Вот вам пример процедуры, выводящая на экран текущее время. Ну чтобы вывести это всё на экран, процедуру нужно вызвать. Как это сделать? А вот как (код на Паскаль): Code program runtime; procedure time_text; var time: integer; text: string; begin time:=getCurrentTime; text:='Time: '+getHour(time)+':'+getMinute(time); drawText(text,0,10); repaint; delay(5000); end; begin time_text; end. В этом примере главная программа вызывает процедуру time_text. Ну о работе вывода времени на экран думаю, что вам не придется.
Code program example_procedure; procedure b; begin . . . . . end; procedure a; begin . . . . . . . b; . . . . . . . end; begin a; end. Здесь главная программа вызывает процедуру "а", а та в свою очередь вызывает процедуру "b".
Code program example_procedure; {опережающая процедура} procedure a; forward; procedure b; begin if (какое либо событие) then a; // вызываем процедуру "а" . . . . . end; procedure a; begin . . . . . . . b; . . . . . . . end; begin a; end. Возможно кто то из вас сталкивался с такой проблемой, как реализацией меню с в котором используются подменю. Например, те кто хотел сделать шпоргалки на экзамен, где как раз нужна подкатегория определеной тематики. Для примера напишем небольшую программку, которая будет иметь меню с подкатегориями:
Code Program example; var ok,clicked: command; Procedure menu; forward; Procedure menu1; forward; {square} procedure square; begin ShowCanvas; while true do begin setColor(random(255),random(255),random(255)); DrawRect(random(getWidth),random(getHeight),random(getWidth),random(getHeight)); repaint; if getkeyclicked=ke_key0 then begin break; menu1; end; end; {подменю} procedure menu1; var p:array[0..2] of integer; begin ShowForm; ShowMenu('Menu'); p[0]:=menuAppendString('Квадратики'); p[1]:=menuAppendString('На главную'); p[2]:=menuAppendString('Выход'); Ok:=createCommand('ok',cm_ok,0); AddCommand(ok); repeat Delay(100); Clicked:=getClickedCommand; until clicked=ok; If menuGetSelectedIndex = p[0] then square; If menuGetSelectedIndex = p[1] then menu; If menuGetSelectedIndex = p[2] then halt; menu1; end; {главное меню} procedure menu; var p:array[0..1] of integer; begin ShowForm; ShowMenu('Menu'); p[0]:=menuAppendString('Подменю'); p[1]:=menuAppendString('Выход'); Ok:=createCommand('ok',cm_ok,0); AddCommand(ok); repeat Delay(100); Clicked:=getClickedCommand; until clicked=ok; If menuGetSelectedIndex = p[0] then menu1; If menuGetSelectedIndex = p[1] then halt; menu; end; {главная программа} Begin Menu; End. Если это всё скомпилировать и запустить на эмуляторе, то появится главное меню из двух пунктов: "подменю" и "выход". Функции function имя_функции[(список параметров)]: тип_возвращаемого_значения; Для понимания напишем небольшой пример функции, которая будет возвращать текущее время:
Code function getTime: string; // возвращаемое значение в виде строки var time: integer; begin time:=getCurrentTime; getTime:=''+getHour(time)+':'+getMinute(time)+getSecond(time); end; Вот вам простой пример функции, возвращающей текущее время оформленой в виде строки. Теперь для наглядности работы функции можно написать такой код:
Code program example; function getTime: string; // возвращаемое значение в виде строки var time: integer; begin time:=getCurrentTime; getTime:=''+getHour(time)+':'+getMinute(time)+getSecond(time); end; begin repeat delay(500); drawText(getTime,3,10); repaint; until getKeyClicked=ke_key5; end. Здесь процедура DrawText использует нашу функцию getTime для получения времени. Тут всё очень просто.
Code function getSqText(a,b,c: real):string; var d,x1,x2: real; begin d:=sqr(b)-4*a*c; // дескременант... x1:=(-b)-sqrt(d)/2*a; x2:=(-b)+sqrt(d)/2*a; getSqText:='Дескременант '+d+' корень1 '+x1+' корень2 '+x2; end; Запрос функции можно так же отобразить через DrawText. ........ В процедурах так же можно использовать входящие параметры.
Code program parametr; function info(v: integer):string; begin If v=0 then info:=getProperty('microedition.platform'); If v=1 then info:=getProperty('microedition.encoding'); If v=2 then info:=getProperty('microedition.locale'); If v=3 then info:=getProperty('microedition.profiles'); If v=4 then info:=getProperty('microedition.configuration'); end; begin drawText(info(0),0,0); drawText(info(1),0,12); drawText(info(2),0,24); drawText(info(3),0,36); drawText(info(4),0,48); repaint; delay(10000); End. Автор статьи: 133 Mhz | |
Просмотров: 4304 | Комментарии: 2 | Рейтинг: 5.0/3 |
Всего комментариев: 1 | |
| |