Форум Pawn-Wiki.Ru - Воплоти мечту в реальность!: Цикл: Базовые Понятия - Форум Pawn-Wiki.Ru - Воплоти мечту в реальность!

Перейти к содержимому

  • (2 Страниц) +
  • 1
  • 2
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

[ Урок ]
Цикл: Базовые Понятия
Оценка: ****- 1 Голосов

#1
Пользователь офлайн   Silver 

  • Местный
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
Запись последовательных команд не всегда может быть эффективным способом достижения поставленной цели. Очень часто в программе требуется выполнить одну и ту же последовательность действий несколько раз. Например, требуется вывести в текстовое поле числа от 1 до 100. Что делать в этом случае? Писать 100 строк кода? Конечно нет, это было бы просто глупо! Примеров можно привести множество. Причём во многих случаях число повторений может быть заранее неизвестно - в этом случае записать фиксированный набор команд просто невозможно.
На помощь придут циклы. Цикл - это специальная конструкция языка, позволяющая запрограммировать многократное выполнение определённого блока команд. Каждый "проход" цикла называется итерацией. В языке Pawn существует три вида циклов - циклы for, while, do...while. В данном уроке мы познакомимся со всеми его разновидностями.

Самый просто цикл можно организовать с помощью оператора while. Он выглядит так:

while(условие)
{
    // этот код выполняется повторно, пока условие остается истинным (тело цикла)
}


Сначала проверяется условие. Условием могут быть выражения вида var > 10, var1 == var2 или любые другие. Если условие истинно выполняется инструкция в скобках. Дойдя до закрывающей скобки, компилятор передает управление в начало цикла, и все повторяется вновь. Таким образом, смысл оператора while, в том, что программный код в скобках повторяется до тех пор, пока не нарушится условие.
Реже используется другая версия цикла while, известная как do...while. Работает как обычный, но условие проверяется в конце, после выполнения тела цикла.

do
{
    // тело цикла
} while (условие);


Поскольку условие выполняется в конце, тело оператора do...while выполняется хотя бы один раз.
Еще одной, наиболее распространенной разновидностью циклов является цикл for
Он имеет следующий вид:

for (объявление переменной, условие, увеличение)
}
    // тело цикла
}


Выполнения цикла for начинается с объявления переменной. Затем проверяется условие. Подобно while, цикл for выполняется до тех пор, пока условие не станет ложным. После того как выполнится код тела цикла, управление получит следующий параметр for - увеличение

Пример:

if(strcmp("/cc", cmdtext, true, 10) == 0)
{
    if(IsPlayerAdmin(playerid))
    {
        for(new i; i<101; i++)
        SendClientMessageToAll(0x00000000,"");//тело цикла
        return 1;
    }
}


Выше показан пример команды, которая очищает чат. Разберем её

new i - объявляем переменную.
i<101 - условие цикла.
i++ - увеличение переменной. Происходит после каждой проверки на истинность условия.

Его можно заменить эквивалентным ему циклом while:

while (условие)
{
    {
        //... тело цикла
    }
    увеличение;
}



Пример:

if (strcmp("/cc", cmdtext, true, 10) == 0)
{
        if(IsPlayerAdmin(playerid))
        {       new i;
                while (i < 101)
                SendClientMessageToAll(0x00000000,"");
                i++;
                return 1;
        }
}


Команда аналогична предыдущей, но теперь выполнена с помощью оператора while.

new i - объявляем переменную.
while (i < 101) - условие.
SendClientMessageToAll(0x00000000,""); - тело цикла. Пока условие истинно функция повторяется.
i++ - увеличение. С каждым повтором функции переменная увеличивается на один пункт.

Заключение

Цикл является основой, поэтому очень важно освоить этот материал для формирования базовых знаний о языке Pawn, которые положительно повлияют на ваше дальнейшее развитие. Теперь вы знаете, что такое цикл, его разновидности и как им пользоваться.

Вот и все) Надеюсь мой урок был понятен всем :) Комментируем!
Автор: Я

Сообщение отредактировал Mike: 19 Январь 2012 - 14:09

13

Сказали спасибо 6:
SaMo , surface , Vibe , Magn1t Com , Storn , Costa 

#2
Пользователь онлайн   Romzes 

  • © Pawn-Wiki.Ru
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
Довольно хороший урок. Как новичкам так в самый раз. +
0

#3
Пользователь офлайн   Silver 

  • Местный
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
Спасибо, хоть один комментарий, а то все почему-то молчат.
0

#4
Пользователь офлайн   Lwf 

  • Эксперт
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
новичкам очень даже полезно,держи +
0

#5
Пользователь офлайн   Silver 

  • Местный
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
Спасибо)
0

#6
Пользователь онлайн   Romzes 

  • © Pawn-Wiki.Ru
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
Вот.
0

#7
Пользователь офлайн   Silver 

  • Местный
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
В таком случае я приношу извинения и признаю свою ошибку. Поступай с той темой как посчитаешь нужным. В следующий раз буду внимательней.

Сообщение отредактировал Silver: 14 Февраль 2012 - 19:14

1

#8
Пользователь офлайн   xkluz1v 

  • Прохожий
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
Хороший урок +лови)
0

#9
Пользователь офлайн   Пашка 

  • Знаток
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
А вот как например сделать, чтоб одиш команду например /vehmot и падает сразу же там например 10 мотокциклов, я как помен это через цикл делаеться, если вам не сложно подскажите?
0

#10
Пользователь офлайн   SwipoStyle 

  • Благодетель
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
if(strcmp("/vehmoto", cmdtext, true, 10) == 0)
{
	new i;
	while(i < 10)
	{
		new Float:x, Float:y, Float:z;
		GetPlayerPos(playerid, x, y, z);
		CreateVehicle(522, x+2, y+2, z+1, 0.0, -1, -1, 600);
		i++;
	}
	return 1;
}

Сообщение отредактировал SwipoStyle: 08 Февраль 2012 - 13:09

1

Поделиться темой:


  • (2 Страниц) +
  • 1
  • 2
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей