Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для мобильных телефонов > MidletPascal > Основной форум

Основной форум Сюда все проблемы связанные с программированием.

Ответ
 
Опции темы
Старый 22.10.2007, 08:59   #1
odd
Мастер
 
Аватар для odd
 
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений
(для 713 пользователей)
Tips & tricks (Трюки кодинга)

Давайте будем делиться в этом разделе различными хитростями и трюками программирования на MP.

Нестандартное использование оператора repeat
Когда я только начинал кодить на MP меня очень тяготило отсутствие оператора switch, который есть в C. Поэтому, когда нужно было делать множество проверок, то выглядело это так:

if ... then ...
if ... then ...
if ... then ...

Некрасиво, правда? А если таких проверок не один десяток, а то и сотня? Основной недостаток такой конструкции - невозможность отменить дальнейшие проверки если результат уже найден. Тут бы мог спасти оператор goto, но его в MP тоже нет. Но решение этой проблемы есть. Посмотрите нижеприведенный код и вам всё станет ясно:

repeat
if ... then begin ....; break; end;
if ... then begin ....; break; end;
if ... then begin ....; break; end;
until true;

C помощью сочетания repeat until true и break можно добиться и некоего подобия оператора goto т.е. условного/безусловного перехода на метку.

.....
..... // Какой-то код
.....
repeat
.....
..... // Код
.....
if ... then break; // Переход на метку
.....
..... // Код
.....
until true;
..... // Тут типа метка
.....
(Offline)
 
Ответить с цитированием
Старый 22.10.2007, 15:16   #2
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Re: Tips & tricks (Трюки кодинга)

А если ни одно условие не выполнится?
Программа зависнет.
(Offline)
 
Ответить с цитированием
Старый 22.10.2007, 16:54   #3
XenuS
Нуждающийся
 
Регистрация: 31.07.2007
Сообщений: 89
Написано одно полезное сообщение
Re: Tips & tricks (Трюки кодинга)

нет, из-за until true; цикл тока один раз пройдет...
(Offline)
 
Ответить с цитированием
Старый 22.10.2007, 19:04   #4
alcoSHoLiK
Дэвелопер
 
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений
(для 110 пользователей)
Re: Tips & tricks (Трюки кодинга)

А elseif в MP нет?
(Offline)
 
Ответить с цитированием
Старый 23.10.2007, 08:35   #5
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Re: Tips & tricks (Трюки кодинга)

А что это за оператор? Такого помоему даже в TP нет.
(Offline)
 
Ответить с цитированием
Старый 23.10.2007, 09:03   #6
odd
Мастер
 
Аватар для odd
 
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений
(для 713 пользователей)
Re: Tips & tricks (Трюки кодинга)

Сообщение от alcoSHoLiK
А elseif в MP нет?
Нет, нету. Приходится писать так:
if .... then ....
else if .... then ....
else if .... then ....;

Операторы div и mod
Кстати, кто не знал, MP поддерживает операторы div и mod, хоть про них в хелпе ничего не сказано:
mod - остаток от деления, пример:

n := 19 mod 10; // Результат - число 9

div - целочисленное деление, пример:

n := 19 div 10; // Результат - число 1
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Frank (03.07.2008)
Старый 23.10.2007, 13:14   #7
alcoSHoLiK
Дэвелопер
 
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений
(для 110 пользователей)
Re: Tips & tricks (Трюки кодинга)

odd
Так если есть esle if, можно с его помощью организовать переключатель. Хотя, конечно, в цикле удобней, так как break можно поставить именно там, где нужно.
(Offline)
 
Ответить с цитированием
Старый 25.10.2007, 22:35   #8
MotoMustanger
Нуждающийся
 
Регистрация: 13.11.2006
Сообщений: 60
Написано одно полезное сообщение
Re: Tips & tricks (Трюки кодинга)

Еще для тех кто не знал после if можно ставить два(или больше) условия(но тогда их нужно брать в скобки):
if (i=1) or (j=1) then [код]
(программа выполняет [код] если выполняется либо одно из этих условий, или оба)
if (i=1) xor (j=1) then [код]
(программа выполняет [код] если выполняется ТОЛЬКО ОДНО из этих условий)
if (i=1) and (j=1) then [код]
(программа выполняет [код] если выполняется ОБА условия вместе)
i,j - переменные числового типа
Если хотим написать чтоб данное условие не выполнялось, используем логический оператор not:
if not b then [код]
это то же самое что:
if b=false then [код]
Где b - переменная типа boolean.

Может вам это извесно, но новичкам полезно)
(Offline)
 
Ответить с цитированием
Старый 31.10.2007, 08:55   #9
odd
Мастер
 
Аватар для odd
 
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений
(для 713 пользователей)
Re: Tips & tricks (Трюки кодинга)

Ещё один пример использования оператора mod

Допустим, у вас в программе есть меню из 5 пунктов. В переменной cursor хранится текущее положение курсора.
Тогда вы пишите:

key:=GetKeyClicked;
if (key=-60) or (key=-2) then cursor:=cursor+1; // Вниз
if (key=-59) or (key=-1) then cursor:=cursor-1; // Вверх
if cursor<0 then cursor:=5+cursor;
if cursor>4 then cursor:=cursor-5;

можно проще:

key:=GetKeyClicked;
if (key=-60) or (key=-2) then cursor:=(cursor+1) mod 5; // Вниз
if (key=-59) or (key=-1) then cursor:=(cursor+4) mod 5; // Вверх

и всё.
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо odd за это полезное сообщение:
Cliffe Snake (22.11.2008), scimitar (09.09.2008)
Старый 01.11.2007, 16:58   #10
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Re: Tips & tricks (Трюки кодинга)

http://www.boolean.name/showpost.php?p=2893&postcount=2
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 03.11.2007, 09:07   #11
odd
Мастер
 
Аватар для odd
 
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений
(для 713 пользователей)
Re: Tips & tricks (Трюки кодинга)

Сорри за флуд, не читал того поста.
(Offline)
 
Ответить с цитированием
Старый 04.11.2007, 00:08   #12
dimanche13
Мастер
 
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений
(для 252 пользователей)
Re: Tips & tricks (Трюки кодинга)

http://homepage.ntlworld.com/config/...blecontrol.htm
думаю это тоже подойдет для данной темы
__________________
(Offline)
 
Ответить с цитированием
Старый 07.11.2007, 01:12   #13
oposum_2000
Оператор ЭВМ
 
Регистрация: 27.11.2006
Сообщений: 28
Написано одно полезное сообщение
Re: Tips & tricks (Трюки кодинга)

Сообщение от odd
можно проще:

key:=GetKeyClicked;
if (key=-60) or (key=-2) then cursor:=(cursor+1) mod 5; // Вниз
if (key=-59) or (key=-1) then cursor:=(cursor+4) mod 5; // Вверх

и всё.
u menea vopros : kakoi kod vypolneaetsea dystree (1 ili 2 ) ?

1. cursor:=(cursor+1) mod 5;

2. cursor:=cursor+1;
if cursor>5 then cursor:=1;
(Offline)
 
Ответить с цитированием
Старый 07.11.2007, 08:22   #14
odd
Мастер
 
Аватар для odd
 
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений
(для 713 пользователей)
Re: Tips & tricks (Трюки кодинга)

На самом деле это легко проверить:

Program TestBool;
Var timer, i, cursor: integer;
Begin
 cursor:=0;
 timer:=GetRelativeTimeMs;
 for i:=0 to 1000000 do
 begin
  cursor:=(cursor+1) mod 5;// Вставляй строчки сюда
 end;
 timer:=GetRelativeTimeMs-timer;
 DrawText(IntegerToString(timer),5,5);
 Repaint; Delay(5000);
End.
У меня результаты такие:
1 ПРИМЕР
Эмулятор Siemens CX65 - 285мс
Эмулятор WTK - 1204мс
Эмулятор NHAL midp2exe - 219мс
2 ПРИМЕР
Эмулятор Siemens CX65 - 310мс
Эмулятор WTK - 1484мс
Эмулятор NHAL midp2exe - 250мс

Так что я был прав. Первый пример и короче и выполняется быстрее.
(Offline)
 
Ответить с цитированием
Старый 07.11.2007, 12:13   #15
Eddy
Нуждающийся
 
Регистрация: 24.05.2006
Сообщений: 64
Написано 0 полезных сообщений
(для 0 пользователей)
Re: Tips & tricks (Трюки кодинга)

odd, не факт, надо на мобиле проверять,
раньше сравнивал, что быстрее abs или if на компе поедил один, на мобиле другой.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
трюки с MSVS IDE HolyDel C++ 0 08.04.2009 08:25
музычка для кодинга jimon Болтовня 5 20.09.2005 07:21


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com