SA-MP Forums Archive
[Tutorial] Uso De for, while, do while - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Español/Spanish (https://sampforum.blast.hk/forumdisplay.php?fid=29)
+----- Forum: Lanzamientos/Releases (https://sampforum.blast.hk/forumdisplay.php?fid=59)
+----- Thread: [Tutorial] Uso De for, while, do while (/showthread.php?tid=357860)



Uso De for, while, do while - Shiny_David - 08.07.2012

Uso De for, while, do while

Que Es for, while, do whileї
Sencillamente Son Solo Ciclos Que Se Usan En Muchos Casos Para Buscar Algo En Una Funcion Especifica, Muchos Utilizaron "for" y Aunque No Sabian Que Es Lo Usan Para Buscar Players En Funciones Vacias, Tambien Sirve Para Hace Repeticiones De Funciones

La Diferencia Clave Entre Ellos
La diferencia entre ellos recide en un punto clave. Cuando se utiliza un for, a diferencia de un while/do, se conoce el fin del ciclo o bucle, en cambio, cuando se utiliza un while puede conocerse el mismo o suponerce, pero no sabemos con certeza (hay excepciones) cuando terminara el ciclo, ya que en general los puntos de quiebre o salida se los define como "while(variable('<'/'>'/'!=')valor)..." es decir menor, mayor, o distinto de, entre otros.

Usando "for"
pawn Код:
forward DarVidaaTodos();
public DarVidaaTodos()
    {
        for(new i=0;i<MAX_PLAYERS;i++)
            {
                if(IsPlayerConnected(i) && !IsPlayerNPC(i))
                {
                SetPlayerHealth(i,100);
                }
            }
        return 1;
    }
Aqui Les Dejo Los Parametros que Se Usarian
pawn Код:
forward NombreDeMiFuncion(); //declaramos Una Funcion Vacia
public NombreDeMiFuncion() //Aqui Iniciamos La Funcion Vacia
    {
        for(new MiVariable=0;MiVariable<MAX_PLAYERS;MiVariable++)
            {
        //new MiVariable=0 -Aqui La Variable Es Igualada a 0 y Si No Esta Creada La Creamos

        //MiVariable<MAX_PLAYERS -Aqui Ponemos La Condicion.. En Este Caso Mientras La
        //Variable Sea Menor Que El Numero Mayor De Jugadores Seguira Ejecutandose

        //MiVariable++ -Aqui Incrementamos La Variable Cada Vez Que El Ciclo Se Hace
        //En Este Caso La Variable Empieza de 0 y Se Suma 1 Cada Vez Que Se Ejecuta El
        //Ciclo y Cuando Esa Variable Llege a El Igual o Mayor a MAX_PLAYERS Se
        //Terminara El Ciclo
            if(IsPlayerConnected(MiVariable) && !IsPlayerNPC(MiVariable))
        //Aqui Comprobamos Que El Usuario Este Conectado y Que No Sea Un Bot/Npc
                {
                SetPlayerHealth(MiVariable,100); //Aqui Cada Vez Que Se Ejecuta El Ciclo Le Dara
                //La Vida Al Jugador Con El Id Que Tenga La Variable.. Empezara a Darle Vida
                //Al Id 0 y Terminara Dandosela Hasta el 500 Uno a Uno a Todos Los Jugadores
                }
          }
        return 1;
    }
Usando "while"
pawn Код:
forward NombreDeMiFuncion();
public NombreDeMiFuncion()
    {
        new MiVariable=0;
        while(MiVariable<MAX_PLAYERS)
            {
                if(IsPlayerConnected(MiVariable) && !IsPlayerNPC(MiVariable))
                 {
                SetPlayerHealth(MiVariable,100);
                 MiVariable++;
                 }
            }
        return 1;
    }
Usando "do while"
pawn Код:
forward NombreDeMiFuncion();
public NombreDeMiFuncion()
    {
        new MiVariable=0;
        do
            {
            if(IsPlayerConnected(MiVariable) && !IsPlayerNPC(MiVariable))
                {
                SetPlayerHealth(MiVariable,100);
                MiVariable++;
                }
            }
        while(MiVariable<MAX_PLAYERS)
        return 1;
    }
Por Eso Todos Prefieren Usar "for" por Que En Una Linea Pones Lo Que Deberia Ser En 3..
Practicamente Es Lo Mismo En Todos.. Aunque Puede Que Necesites Algunas Veces Usar Diferentes Ciclos

Tambien Pueden Usar Este Macro Para Reducir El Uso De Caracteres Usando "for"

pawn Код:
#define ForEach(%0,%1) for(new %0 = 0; %0 != %1; %0++) if(IsPlayerConnected(%0) && !IsPlayerNPC(%0))

//Ejemplo De Uso
ForEach(i, MAX_PLAYERS)//i Seria La Variable Que Este Macro Definiria Como Nueva y En 0;
//MAX_PLAYERS Es Hasta Donde Terminaria.. Solo Usar Este Macro En Players
Tambien Pueden Usar El Include <foreach> Que Contiene La Simplificacion De Cientos De Macros



Respuesta: Uso De for, while, do while - TheChaoz - 08.07.2012

La diferencia entre ellos recide en un punto clave. Cuando se utiliza un for, a diferencia de un while/do, se conoce el fin del ciclo o bucle, en cambio, cuando se utiliza un while puede conocerse el mismo o suponerce, pero no sabemos con certeza (hay excepciones) cuando terminara el ciclo, ya que en general los puntos de quiebre o salida se los define como "while(variable('<'/'>'/'!=')valor)..." es decir menor, mayor, o distinto de, entre otros.
Es un tutorial muy interesante si resaltaras esto ya que no todos conocen la diferencia entre ambos y cuando usarlos.

PD: Si bien son ejemplos, deberias chequear que el jugador al que se le realize la accion este conectado, y para una mayor eficiencia podes utilizar 'GetMaxPlayers()' en vez de 'MAX_PLAYERS'.


Respuesta: Uso De for, while, do while - Shiny_David - 09.07.2012

Quote:
Originally Posted by the_chaoz
Посмотреть сообщение
La diferencia entre ellos recide en un punto clave. Cuando se utiliza un for, a diferencia de un while/do, se conoce el fin del ciclo o bucle, en cambio, cuando se utiliza un while puede conocerse el mismo o suponerce, pero no sabemos con certeza (hay excepciones) cuando terminara el ciclo, ya que en general los puntos de quiebre o salida se los define como "while(variable('<'/'>'/'!=')valor)..." es decir menor, mayor, o distinto de, entre otros.
Es un tutorial muy interesante si resaltaras esto ya que no todos conocen la diferencia entre ambos y cuando usarlos.

PD: Si bien son ejemplos, deberias chequear que el jugador al que se le realize la accion este conectado, y para una mayor eficiencia podes utilizar 'GetMaxPlayers()' en vez de 'MAX_PLAYERS'.
gracias claro que lo editare