Циклы while, for и условия. -
^Woozie^ - 30.03.2010
Цикл — разновидность управляющей конструкции в высокоуровневых языках программирования, предназначенная для организации многократного исполнения набора инструкций. Также циклом может называться любая многократно исполняемая последовательность инструкций, организованная любым способом. © wikipedia
_________________________________________________
Цикл for
Пример использования
pawn Code:
for(new i = 0; i < MAX_PLAYERS; i++)
{
Kick(i);
}
Этот цикл кикнет всех игроков.
Это же удобнее, чем писать 500 раз Kick(playerid)?
Здесь мы создаём переменную i и присваиваем ей значение 0.
Далее мы создаём условие. В нашем случае, цикл прекратиться, когда i станет 500
Задаём действие(инкремент). Оно будет выполняться, пока заданное нами условие не станет верным.
_________________________________________________
Инкремент - добавление к числу единицы.
Декремент - вычитание из числа единицы.
_________________________________________________
Quote:
Виды условий в языках программирования(самые основные)
!= - не равно.
== - равно
> - больше
< - меньше
>= - больше или равно
<= - меньше или равно.
|
Если вы зададите невыполнимый цикл, то сервер упадёт в ближайщее время.(На циклах for не проверял, но на while 100%)
Вот пример невыполнимого цикла:
pawn Code:
for(new i = 0; i < -1; i++)
{
Kick(i);
}
В данном случае, действие инкремента, когда условие что переменная будет меньше -1. Цикл идёт в обратную сторону.
_________________________________________________
Цикл while.
pawn Code:
new a = 0;
while(a < 100000)
{
printf("While: %d",a);
a++;
}
Тоже цикл, только заданная переменная изменяется внутри цикла.
В скобках задаётся условие
_________________________________________________
Условие if и оператор else
Используется так, к примеру.
pawn Code:
if(GetPlayerMoney(playerid) < 500)
{
SendClientMessage(playerid,COLOR_YELLOW,"У вас меньше 500$");
}else{
SendClientMessage(playerid,COLOR_YELLOW,"У вас больше 500$");
}
if - задаётся условие,
else - если наоборот.
Другие варианты задания условий
Пример 1
pawn Code:
if((checkpointid == 2 || checkpointid == 3) && IsPlayerAdmin(playerid))
{
SendClientMessage(playerid,COLOR_YELLOW,"Привет администратор!");
}
Что я говорю в этом условии? Если id чекпоинта 2 или 3 и игрок администратор, то отображает надпись
Условие чекпоинтов помещено в ещё одни скобки, иначе бы условие было бы нелогичным.
Quote:
|| - или
&& - и
! - неверно ли?
|
Пример 2
pawn Code:
if(!IsPlayerAdmin(playerid))
{
Kick(playerid);
}
Этим условием я сообщаю что если игрок не администратор - кикнуть его.
! может быть применён как к функциям так и к переменным.
Другой вариант записи, делает тоже самое.
pawn Code:
if(IsPlayerAdmin(playerid) == 0)
{
Kick(playerid);
}
_________________________________________________
switch и case
Я эти элементы использую крайне редко, но всё таки попытаюсь объяснить на примере:
Пример 1
pawn Code:
new class = 5;
if(class == 0) { Действие }
if(class == 1) { Действие }
if(class == 2) { Действие }
if(class == 3) { Действие }
if(class == 4) { Действие }
if(class == 5) { Действие }
Пример 2
pawn Code:
new class = 5;
switch(class)
{
case 0: { Действие }
case 1: { Действие }
case 2: { Действие }
case 3: { Действие }
case 4: { Действие }
case 5: { Действие }
}
Два последних примера действуют одинаково. Вывод сделаете сами.
_________________________________________________
Совет:
Для оптимизации цикла и быстроты его выполнения используйте переменную, которая при каждом коннекте или дисконнекте игрока, даёт переменной значение
GetHighestID()+1 - эту функцию можно найти в Полезных фунцкиях. И тогда вместо
MAX_PLAYERS ставит переменную которой мы задали значение максимального ID.
Когда шустрите циклом по игрокам, делая им какое-то действие, всегда задавайте условие - IsPlayerConnected(i) и если да, то выполнять действие.
_________________________________________________
С вами был Faus, спасибо за внимание. Если есть какие-то непонятки или вопросы - спрашивайте.
30 / 03 / 2010
Re: [Урок] Циклы while, for и условия. -
ZiGGi - 30.03.2010
добавь switch,case
Re: [Урок] Циклы while, for и условия. -
^Woozie^ - 30.03.2010
добавил, только не знаю как всё это объяснить пограмотнее.
Re: [Урок] Циклы while, for и условия. -
[JIeXa] - 30.03.2010
цикл на goto ещё добавь
Re: [Урок] Циклы while, for и условия. -
JesterX - 30.03.2010
goto - оператор безусловного перехода, а не цикл.
ПС: рубильник круче чем условные операторы, раз так в 100500, почему - гуглите сами. (если интересно)
Re: [Урок] Циклы while, for и условия. -
MX_Master - 30.03.2010
Цикл
SWITCH:
- в
case можно указывать только числа, отдельные символы и диапазоны чисел/отдельных символов
- в
switch можно указать только число или отдельный символ
Code:
switch ( число )
{
case 0 : {}
case 1, 3 : {}
case 6..9 : {}
case 10..20, 32, 50..100 : {}
case 'a' : {}
case 'a', 'b', 'z' : {}
case 'a'..'z' : {}
case 'a'..'z', '_', 'A'..'Z', '[', ']' : {}
}
- все циклы можно досрочно прервать оператором
break;
- в циклах
while/for можно перепрыгивать итерации с помощью оператора
continue;
Re: [Урок] Циклы while, for и условия. -
ZiGGi - 30.03.2010
switch/case - гораздо быстрее if/else
Re: [Урок] Циклы while, for и условия. -
[JIeXa] - 30.03.2010
я говорю на goto...
:whil
if (

) goto whil;
Re: [Урок] Циклы while, for и условия. -
JesterX - 30.03.2010
[JIeXa],
Это твоя извращённая фантазия.
В switch можно указывать не только числа, но и выражения
Re: [Урок] Циклы while, for и условия. -
^Woozie^ - 30.03.2010
Ребята, я написал самое основное. Больше новичкам посещающим данные раздел - не пригодиться.
Re: [Урок] Циклы while, for и условия. -
JesterX - 30.03.2010
Кстати, забыли про do {} while
Re: [Урок] Циклы while, for и условия. -
[Saint] - 30.03.2010
можно по подробнее про
while и какие нибуть примеры по больше
Re: [Урок] Циклы while, for и условия. -
^Woozie^ - 30.03.2010
Набери в поиск слово while.
Re: [Урок] Циклы while, for и условия. -
MX_Master - 30.03.2010
насчет частоты использования остальных не знаю, но for самый часто используемый. Да и более гибкий он, т.к. можно в нем создавать локальные переменные " for ( new abc = 0; ; )", которые уходят из стека сразу после окончания цикла
Re: [Урок] Циклы while, for и условия. -
Mishanzanza - 30.03.2010
про do while надо запилить
Re: [Урок] Циклы while, for и условия. -
Romanius - 11.04.2010
замечу что в цикле switch лучше использовать условия по порядку если связано с числами
switch(7)
{
case 1: break;
case 2: break;
case 3: break;
case 4: break;
case 5: break;
case 6: break;
case 7: printf("case 7");
}
Re: [Урок] Циклы while, for и условия. -
MX_Master - 11.04.2010
Quote:
Originally Posted by Romanius
замечу что в цикле switch лучше использовать условия по порядку если связано с числами
switch(7)
{
case 1: break;
case 2: break;
case 3: break;
case 4: break;
case 5: break;
case 6: break;
case 7: printf("case 7");
}
|
Это не так важно для самого switch.
Зато бывают моменты, когда первым case нужно сделать именно то значение, которое по логике должно совпасть быстрее. Есть моменты, где и наоборот.
Поэтому лучше логически вычислять наиболее ожидаемые варианты, и ставить их раньше остальных.
Re: Циклы while, for и условия. -
DiSE - 21.09.2011
pawn Code:
switch(pTeam) //pTeam из массива enum
{case 1:
{GivePlayerWeapon(playerid,24,999);}
{case 2:
{GivePlayerWeapon(playerid,29,999);}
будет работать*?
Re: Циклы while, for и условия. -
Stepashka - 21.09.2011
Quote:
Originally Posted by DiSE
pawn Code:
switch(pTeam) //pTeam из массива enum {case 1: {GivePlayerWeapon(playerid,24,999);} {case 2: {GivePlayerWeapon(playerid,29,999);}
будет работать*?
|
pawn Code:
switch(pTeam) //pTeam из массива enum
{
case 1: GivePlayerWeapon(playerid,24,999);
case 2: GivePlayerWeapon(playerid,29,999);
}
Re: Циклы while, for и условия. -
DiSE - 21.09.2011
ну ладно, вопрос в другом был.
Говорили что case/switch работает с числовыми значениями, или опять до меня не правильно дошло?