[Tutorial] Usando Loops (Avanзado)
#1

Tutorial
Usando Loops (Avanзado)

Нndice
  • Oque й um Loop?
  • Porque usar Loop?
  • Formas de usar um Loop.
    for
    while
    do
  • Funзхes para usar em Loops.
    break
    continue
    goto
    sleep
  • FAQ
  • Crйditos.



O que й um Loop?

Loop, й uma forma de dar 'voltas' sobre um valor, uma diretiva, uma variбvel, dentre outras. O Loop vai ficar dando 'voltas' na funзгo definida atй ele ser pausado, chegar ao final, ou achar um valor definido.


Porque usar um Loop?

Geralmente, um loop й usado para procurar um valor dentro uma funзгo. Mas, ele tem muitas outras utilidades, que serб explicada no decorrer deste tutorial.


Formas de usar um Loop.

Atualmente, sу tem trкs formas padrхes do SA:MP de criar loops. Elas sгo: for, do, while.
Existem outras como o foreach do Y_Less.

  • Exemplos de como usar um loop for:

    O for й o loop mais conhecido e mais usado, ele й o mais simples e pode ser usado em qualquer ocasiгo, sem restriзхes, desde que seja necessбrio.

    Exemplo:
    pawn Code:
    for(new Lp; Lp < 10; Lp++)
    {
        printf("%i", Lp);
    }
    Explicaзгo: O Loop vai dar voltas na variбvel Lp, enquanto ela for menor que 10, que й o valor colocado para o Loop dar voltas.

    Desta forma, o Loop vai nos 'printar' em nosso console:
    Code:
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Ele inicia-se do 0 porque as variбveis, de padrгo, se inicia em 0 e sу vai acabar quando a variбvel Lp for menor do que 10, sendo assim, 9.

  • Exemplos de como usar um loop while:

    O while й um loop e um auxiliar, ele tanto serve para executar-se independente, como para auxiliar o loop do a fazer sua execuзгo. O while, diferente do for, nгo pode definir uma variбvel dentro de si, para executar um loop sob ela, a variбvel deve ser definida antes dele ser executado.

    Exemplo
    pawn Code:
    new i;
    while(i < 10)
    {
        printf("%i", i);
        i++;
    }
    Explicaзгo: O Loop vai dar voltas na variбvel i, enquanto ela for menor que 10, que й o valor colocado para o Loop dar voltas.

    Desta forma, o Loop vai nos 'printar' em nosso console:
    Code:
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Ele inicia-se do 0 porque as variбveis, de padrгo, se inicia em 0 e sу vai acabar quando a variбvel i for menor do que 10, sendo assim, 9.

  • Exemplos de como usar um loop do:

    O do й um loop, porйm, ao contrбrio do for e do while, que sгo independentes para se executar, o do, precisa do while para verificaзгo e execuзгo.

    Exemplo:
    pawn Code:
    new a;
    do
    {
        printf("%i", a);
        a++;
    }
    while(a < 10);
    Explicaзгo: O Loop vai dar voltas na variбvel a, enquanto ela for menor que 10, que й o valor colocado para o Loop dar voltas.

    Desta forma, o Loop vai nos 'printar' em nosso console:
    Code:
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Ele inicia-se do 0 porque as variбveis, de padrгo, se inicia em 0 e sу vai acabar quando a variбvel a for menor do que 10, sendo assim, 9.

Funзхes para usar em Loops.

Atualmente, sу tem quatro funзхes padrхes do SA:MP que possam, parar, ir, pular e pausar um Loop. Porйm, o Pawno, nгo й amplo o bastante para que a funзгo de 'pausar' seja executada com sucesso, atualmente ela faz parar. (Em meus testes ela faz parar e nгo pausar um loop, se eu estiver usando errado, me corrijam).

Vou dar todos os exemplos no loop for, porйm podem ser usados em todos loops.
  • Como usar o break
    pawn Code:
    for(new i; i < 10; i++)
    {
        if(i == 5) break;
        printf("%i", i);
    }
    Explicaзгo: O Loop vai dar voltas na variбvel i, e se(if) ela for igual a 5, ele vai executar o break.

    Desta forma, o Loop vai nos 'printar' em nosso console:
    Code:
    0
    1
    2
    3
    4
    Pois, ela vai partir de 0 atй 5, quando chegar em 5, vai executar o break e vai parar a execuзгo, porйm, nгo vai executar o 5, porque o loop jб vai estar parado.

  • Como usar o continue

    pawn Code:
    for(new i; i < 10; i++)
    {
        if(i == 5) continue;
        printf("%i", i);
    }
    Explicaзгo: O Loop vai dar voltas na variбvel i, e se(if) ela for igual a 5, ele vai executar o continue.

    Desta forma, o Loop vai nos 'printar' em nosso console:
    Code:
    0
    1
    2
    3
    4
    6
    7
    8
    9
    Pois, ela vai partir de 0 atй 5, quando chegar em 5, vai executar o continue e vai continuar a execuзгo a partir de 5 atй chegar em 9 que й o valor menor que 10(que foi pedido para executar).

  • Como usar o goto

    pawn Code:
    for(new i; i < 10; i++)
    {
        Inicio: // Indica o inicio do loop
        if(random(5) == 0) i = 1; // Se o random(5) for igual a 0, ele vai setar a variбvel i para 1
        else i = 0; // Ou se o random(5) for igual a 1, 2, 3, 4 ou 5, ele vai setar a variбvel i para 0
        if(i == 1) // Se a variбvel i for igual a 1
        {
            print("A variбvel i й Verdadeira"); // Vai printar no console "A variбvel i й Verdadeira"
            goto Final; // E vai ir para o final, ou seja, vai acabar o loop.
        }
        else // Ou se a variбvel i for igual a 0
        {
            print("A variбvel i й Falsa"); // Vai printar no console "A variбvel i й Falsa"
            goto Inicio; // E vai ir pro inicio, girando o loop denovo, atй a variбvel i for igual a 1 e ir atй o final do loop.
        }
    }
    Final: // indica o final do loop.
    Explicaзгo: Estб nos comentбrios acima.

    Desta forma, o Loop vai nos 'printar' em nosso console, algo como isso(depende da sorte do random):
    Code:
    A variбvel i й Falsa
    A variбvel i й Falsa
    A variбvel i й Falsa
    A variбvel i й Falsa
    A variбvel i й Falsa
    A variбvel i й Verdadeira
    Pois, ela vai fazer o random, e quando o random atingir o nъmero 0 vai setar para a variбvel i o valor 1(verdadeiro) e vai parar o loop, porque vai ir(goto) atй o final, mas, se o random nгo for igual a 0, ele vai setar o valor 0 para a variбvel i, e vai ir(goto) atй o inicio, fazendo o loop girar novamente atй o random ser igual a 0 que vai setar o valor 1 para a variбvel i, assim, finalizando o loop.

  • Como usar o sleep

    pawn Code:
    for(new i; i < 10; i++)
    {
        if(i == 5) sleep(1000);
        printf("%i", i);
    }
    Explicaзгo: Era para girar o loop atй chegar no 5, e quando chegasse no 5, pausar o loop por 1 segundo(em milessegundos), porйm a estrutura do Pawno, nгo nos permite isso, e estб parando o loop.

    Desta forma, o Loop vai nos 'printar' em nosso console:
    Code:
    0
    1
    2
    3
    4

FAQ.

Pergunta: Eu jб sabia disso tudo
Resposta: Entгo, ignore tudo, nгo preciso saber disso.

Pergunta: Como criar um Loop infinito?
Resposta: Simples:

pawn Code:
for(;;) print("Loop Infinito");
pawn Code:
while(true) print("Loop Infinito");
pawn Code:
do
{
    print("Loop Infinito");
}
while(true);
Porйm, todas irб dar um ou dois warnings, mas, serб loop infinito.



Crйditos.
  • DreeH - Criaзгo total do tutorial.
  • Wiki SA:MP - A maioria do tutorial foi tirado de lб.
  • SA:MP Team.

Se ficou mais alguma dъvida, poste abaixo, que tentarei resolver.
Reply
#2

Otimo Tutorial,esta de Parabens.
Reply
#3

Quote:
Originally Posted by Gustavo_Araujo
View Post
Otimo Tutorial,esta de Parabens.
Obrigado.
Reply
#4

Уtimo tutorial Andrй, obrigado por compartilhar. [+ Reputaзгo pra vocк.]
Abraзos.
Reply
#5

Ps:
nгo existe loop infinito.
oque vocк botou ali, simplismente irб laggar o servidor o crashar.
Reply
#6

Quote:
Originally Posted by raeu
View Post
Уtimo tutorial Andrй, obrigado por compartilhar. [+ Reputaзгo pra vocк.]
Abraзos.
Obrigado

Quote:
Originally Posted by [O.z]Caroline
View Post
Ps:
nгo existe loop infinito.
oque vocк botou ali, simplismente irб laggar o servidor o crashar.
De qualquer forma, й infinito.
Reply
#7

Quote:
Originally Posted by [O.z]Caroline
View Post
Ps:
nгo existe loop infinito.
oque vocк botou ali, simplismente irб laggar o servidor o crashar.
Existe, mas como disses-te irб laggar o server.

OT: Gostei, parabens! (:
Reply
#8

Quote:
Originally Posted by [NWD]Jim._.Carrey
View Post
Pra quem nunca viu e nгo sabe fazer loops й bem ъtil.

Parabйns pelo tuto
Obrigado.

Quote:
Originally Posted by BrunoBSF
View Post
otimo tuto ensina perfeitamente como fazer um loop
Essa era a intenзгo.

Quote:
Originally Posted by FireCat
View Post
Existe, mas como disses-te irб laggar o server.

OT: Gostei, parabens! (:
Foi como disse para ela.
Obrigado a todos.
Reply
#9

Quote:
Originally Posted by DreeH
View Post
Obrigado



De qualquer forma, й infinito.
seguindo sua lуgica, se eu fizer isto
pawn Code:
new Menu:ah = CreateMenu("", 0, 0.0, 0.0, 0.0, 0.0); DestroyMenu(ah);
criarб um menu invisнvel ?
kk.
Reply
#10

Quote:
Originally Posted by [O.z]Caroline
View Post
seguindo sua lуgica, se eu fizer isto
pawn Code:
new Menu:ah = CreateMenu("", 0, 0.0, 0.0, 0.0, 0.0); DestroyMenu(ah);
criarб um menu invisнvel ?
kk.
Loop infinito, nгo tem utilidade alguma, mas, й a dъvida de muitas pessoas, se existe ou nгo e como fazer.
Expliquei que existe e tem como fazer, porйm, de tanto que ele irб girar, vai causar lags e bugarб o servidor.
Reply
#11

Quote:
Originally Posted by DreeH
Посмотреть сообщение
Obrigado.



Essa era a intenзгo.



Foi como disse para ela.
Obrigado a todos.
Explica isto:
-Porque nгo usar o for(;
Ou
pawn Код:
for(new Float:i = 0; i < Float:0x7F800000;i++){}
Reply
#12

Quote:
Originally Posted by FireCat
Посмотреть сообщение
Explica isto:
-Porque nгo usar o for(;
Ou
pawn Код:
for(new Float:i = 0; i < Float:0x7F800000;i++){}
Eu dei uma breve explicada do for(;, que serб para girar um loop infinito que lagarб o servidor.
Sobre a segunda, nгo vejo uma lуgica nisso, apenas estб usando nъmeros hexadecimais em uma float.

#edit

Usei aqui para testar, irб girar um loop infinito e lagarб o servidor.
Reply
#13

enfim,
bom tutorial. 7/10.

*Ps: este tutorial nгo й nada avanзado. e sim intermediбrio.
Reply
#14

Quote:
Originally Posted by [O.z]Caroline
Посмотреть сообщение
Ps:
nгo existe loop infinito.
oque vocк botou ali, simplismente irб laggar o servidor o crashar.

O que й algo infinito ?
Й algo que nunca termina.
Existem sim loops infinitos.

Isso vocк aprende em um curso fuleiro de introduзгo a lуgica de programaзгo..
Toma aqui pra vocк:
Carol

E aquele exemplo de menu, ele vai criar o menu e depois deletar, o que vocк quis mostrar com aquilo? .. lol

@tpc

Bom tutorial, ultilize a lнnguagem genйrica 'portugul' para explicar algumas coisas , assim vai ficar melhor o entendimento:

para, enquanto, etc.
Reply
#15

Bom tutorial Andrй, pensei mкs passado em fazer um tutorial sobre loops mas jб tinha o do Knife entre outros resolvi dar continuidade sobre o de organizaзхes.
Mas tambйm nгo acho que seja avanзado.

Sobre o loop infinito, pensei de relance em algo mas provavelmente nгo funcionaria.
pawn Код:
for(new var = 5; var > 0; var++)
Parabйns pelo tutorial. ^^
Reply
#16

Quote:
Originally Posted by Ricop522
Посмотреть сообщение
O que й algo infinito ?
Й algo que nunca termina.
Existem sim loops infinitos.

Isso vocк aprende em um curso fuleiro de introduзгo a lуgica de programaзгo..
Toma aqui pra vocк:
Carol

E aquele exemplo de menu, ele vai criar o menu e depois deletar, o que vocк quis mostrar com aquilo? .. lol

@tpc

Bom tutorial, ultilize a lнnguagem genйrica 'portugul' para explicar algumas coisas , assim vai ficar melhor o entendimento:

para, enquanto, etc.
Ainda tentei botar um "portugol" mas, acho que nгo tive sucesso EUWAIOEAOI. Coloquei 'setar', 'printar', 'voltas'.

Quote:
Originally Posted by Josma_cmd
Посмотреть сообщение
Bom tutorial Andrй, pensei mкs passado em fazer um tutorial sobre loops mas jб tinha o do Knife entre outros resolvi dar continuidade sobre o de organizaзхes.
Mas tambйm nгo acho que seja avanзado.

Sobre o loop infinito, pensei de relance em algo mas provavelmente nгo funcionaria.
pawn Код:
for(new var = 5; var > 0; var++)
Parabйns pelo tutorial. ^^
Entгo Josma, coloquei Avanзado, pois todos os tutoriais de Loops sгo um tanto quanto 'separados'. Existe tutoriais de Loop que sу explica for, existe tutorial que sу explica while e do, existe tutorial que sу explica break e continue (se nгo me engano й o teu), aн coloquei avanзado, pois explica a maioria dos loops e suas funзхes.

Obrigado.
Reply
#17

Parabйns уtimo tutorial
Reply
#18

Quote:
Originally Posted by [RoxX]Ygor
Посмотреть сообщение
Parabйns уtimo tutorial
Obrigado.
Reply
#19

Quote:
Originally Posted by DreeH
Посмотреть сообщение
Ainda tentei botar um "portugol" mas, acho que nгo tive sucesso EUWAIOEAOI. Coloquei 'setar', 'printar', 'voltas'.



Entгo Josma, coloquei Avanзado, pois todos os tutoriais de Loops sгo um tanto quanto 'separados'. Existe tutoriais de Loop que sу explica for, existe tutorial que sу explica while e do, existe tutorial que sу explica break e continue (se nгo me engano й o teu), aн coloquei avanзado, pois explica a maioria dos loops e suas funзхes.

Obrigado.
No caso seria completo e nгo avanзado.
Mas tб valendo. ^^
Reply
#20

Quote:
Originally Posted by Josma_cmd
Посмотреть сообщение
No caso seria completo e nгo avanзado.
Mas tб valendo. ^^
Й, mas, oque importa й que o tutorial vai ensinar muitas pessoas, sendo ou nгo avanзado.

Obrigado mesmo assim.
Se puder colocar neste tуpico: http://forum.sa-mp.com/showpost.php?...03&postcount=2, pхe pra mim por favor.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)