GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Hatomalis le 14 Mai 2011, 11:03:48

Titre: [RESOLUE][AIDE] Comment vérifier toutes les valeurs d'un tableau !
Posté par: Hatomalis le 14 Mai 2011, 11:03:48
Salut à tous !

Voilà, mon problème est que je ne sais pas comment vérifier toutes les valeurs d'un tableau.

Exemple:

new IDRV[16] = {402, 411, 415, 429, 451, 477, 506, 550, 558, 559, 560, 562, 565, 587, 589, 602};
if(modv == 1 && ID[playerid] != IDRV[Je ne sais pas quoi mettre ici pour que toutes les valeurs du tableau soient vérifier])return Message_Erreur("ERREUR: Tu ne peut pas participer à ce genre de course avec ce véhicule !");

modv = Type de course
ID = ID du véhicule
IDRV = ID des véhicules pouvant participer à une course de voiture

Voilà voilà, merci d'avance !
Titre: Re : [AIDE] Comment vérifier toutes les valeurs d'un tableau !
Posté par: Xartrick le 14 Mai 2011, 11:15:36
Fait une boucle !

new IDRV[16] = {402, 411, 415, 429, 451, 477, 506, 550, 558, 559, 560, 562, 565, 587, 589, 602};
new i = 0;

for(i = 0; i < sizeof(IDRV); i++)
{
printf("L'indice %d du tableau vaut %d", i, IDRV[i]);
}
Titre: Re : [AIDE] Comment vérifier toutes les valeurs d'un tableau !
Posté par: Hatomalis le 14 Mai 2011, 11:59:41
J'ai essayer la boucle, sa marche, mais pas tant que sa. Je ne peut pas rejoindre la course même avec une voiture de IDRV. Sa me dit tout le temps que le véhicule ne peut pas participer à cette course.

Code: (pawn) [Sélectionner]
    new v, ID;
    new j = 0;
    new IDRV[16] = {402, 411, 415, 429, 451, 477, 506, 550, 558, 559, 560, 562, 565, 587, 589, 602};
    v = GetPlayerVehicleID(playerid);
        ID = GetVehicleModel(v);
    for(j = 0; j < sizeof(IDRV); j++)
    {
           if(modv ==  2 && ID != IDRV[j])return Message_Erreur("ERREUR: Tu ne peut pas participer à ce genre de course avec ce véhicule !");
    }

PS: J'ai essayer avec une Sultan, Infernus et une Phenix.
Titre: Re : [AIDE] Comment vérifier toutes les valeurs d'un tableau !
Posté par: Xartrick le 14 Mai 2011, 12:06:19
C'est normal, la vérification ne pourra être fausse qu'une seul fois ! ;)

new IDRV[16] = {402, 411, 415, 429, 451, 477, 506, 550, 558, 559, 560, 562, 565, 587, 589, 602};
new i        = 0;
new vID      = GetPlayerVehicleID(playerid);
new vModel   = GetVehicleModel(vID);
new r        = 0;

for(i = 0; i < sizeof(IDRV); i++)
{
if(vID == IDRV[i])
{
r++;
}
}

if(r != 0)
{
printf("Le véhicule est dans la liste !");
}
else
{
printf("Ce véhicule n'est pas dans la liste !");
}
Titre: Re : [AIDE] Comment vérifier toutes les valeurs d'un tableau !
Posté par: Ssk le 14 Mai 2011, 12:46:24
if( IsPlayerInAnyVehicle( playerid ) )
{
new IDRV[16] = {402, 411, 415, 429, 451, 477, 506, 550, 558, 559, 560, 562, 565, 587, 589, 602};

new vehicleModel = GetVehicleModel( GetPlayerVehicleID( playerid ) );
for( new i = 0; i < sizeof( IDRV ); i++ )
{
if( IDRV[i] == vehicleModel )
{
printf( "Le vehicule est dans la liste des vehicules interdits.\n" );
break;
}
}
}
Titre: Re : [AIDE] Comment vérifier toutes les valeurs d'un tableau !
Posté par: Syg le 15 Mai 2011, 00:54:53
Juste trois remarques sur la solution de Ssk :
- La liste est la liste des véhicules autorisés. Donc le texte tracé par le printf est à modifier.
- En programmation structurée, on n'utilise pas "break".
- En sortie de boucle, à part le printf, on ne sait pas si le véhicule est dans le tableau ou pas. Il faudrait une variable supplémentaire pour l'indiquer.

Sinon, la solution de Xartrick fonctionne aussi juste une petite chose : elle parcours le tableau en entier même si le véhicule est trouvé dès les premiers éléments.

Donc en réunissant les deux :
new i;
new Trouve;

for (i = 0, Trouve=0 ; i<sizeof (IDRV) && Trouve==0 ; i++)
{
if (vID == IDRV[i])
{
Trouve=1; // Remplace le break de Ssk et servira d'indicateur
     pour déterminer si le véhicule est dans la liste ou pas
}
}

if (Trouve == 1)
{
/* Le véhicule est dans la liste */
}
else
{
/* Le véhicule n'est pas dans la liste */
}

++
Syg
Titre: Re : [AIDE] Comment vérifier toutes les valeurs d'un tableau !
Posté par: Xartrick le 15 Mai 2011, 01:04:57
Personnellement, je préfère remplir la condition plutôt que de rallonger la condition de la boucle.

new i;
new Trouve;

for (i = 0; i < sizeof(IDRV); i++)
{
if (vID == IDRV[i])
{
Trouve = 1;
i = sizeof(IDRV);
}
}

if (Trouve == 1)
{
/* Le véhicule est dans la liste */
}
else
{
/* Le véhicule n'est pas dans la liste */
}
Titre: Re : [AIDE] Comment vérifier toutes les valeurs d'un tableau !
Posté par: Hatomalis le 15 Mai 2011, 11:04:12
Merci à tous pour votre aide, sa marche très bien maintenant.
Titre: Re : Re : [AIDE] Comment vérifier toutes les valeurs d'un tableau !
Posté par: Syg le 16 Mai 2011, 09:49:13
Personnellement, je préfère remplir la condition plutôt que de rallonger la condition de la boucle.

new i;
new Trouve;

for (i = 0; i < sizeof(IDRV); i++)
{
if (vID == IDRV[i])
{
Trouve = 1;
i = sizeof(IDRV);
}
}

if (Trouve == 1)
{
/* Le véhicule est dans la liste */
}
else
{
/* Le véhicule n'est pas dans la liste */
}

Il faut quand même initialiser la variable Trouve (même si PAWN semble le faire par défaut).

De plus, économiser un test (Trouve==0) que le processeur va exécuter en un cycle n'est pas significatif. Il vaut mieux préférer la clarté du code à son efficacité relative.
D'ailleurs, tu gagneras plus de temps en remplaçant le sizeof dans ta boucle for par une comparaison avec une variable ou une constante. Et dans ce cas là, ce sera significatif.

++
Syg
Titre: Re : [RESOLUE][AIDE] Comment vérifier toutes les valeurs d'un tableau !
Posté par: Xartrick le 16 Mai 2011, 19:37:00
Effectivement, j'initialise TOUJOURS mes variables, peu importe le langage, c'est juste que j'ai repris ton code, et donc pas vérifié cette partie, tu peux le voir dans le message numéro 1 et 3.
Pour l'efficacité, j'aurais également créer une variable pour stocker le résultat du sizeof(IDRV), ou alors, dans un #define pour conserver un maximum la mémoire, mais cela dit, ce n'est pas le sujet, et je propose, pourquoi pas, de créer un topique sur le sujet de l'économie et les petites astuces pour optimiser au mieux son code, je vais d'ailleurs commencer à réfléchir dessus, j'aimerais bien avoir un retour de ta part.
Titre: Re : Re : [RESOLUE][AIDE] Comment vérifier toutes les valeurs d'un tableau !
Posté par: cristab le 16 Mai 2011, 20:29:29
créer un topique sur le sujet de l'économie et les petites astuces pour optimiser au mieux son code, je vais d'ailleurs commencer à réfléchir dessus, j'aimerais bien avoir un retour de ta part.
comment je serais impatient de lire sa =)