• 06 Juin 2026, 12:24:24


Auteur Sujet: [RESOLUE][AIDE] Comment vérifier toutes les valeurs d'un tableau !  (Lu 1841 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne Hatomalis

  • *
  • Tueur en série
  • Messages: 121
    • Voir le profil
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 !
« Modifié: 15 Mai 2011, 11:05:06 par Hatomalis »

-

Hors ligne Xartrick

  • *
  • C & Pawn Programmer
  • Messages: 1391
    • Voir le profil
    • Xartrick's Area
Re : [AIDE] Comment vérifier toutes les valeurs d'un tableau !
« Réponse #1 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]);
}

Hors ligne Hatomalis

  • *
  • Tueur en série
  • Messages: 121
    • Voir le profil
Re : [AIDE] Comment vérifier toutes les valeurs d'un tableau !
« Réponse #2 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.

-

Hors ligne Xartrick

  • *
  • C & Pawn Programmer
  • Messages: 1391
    • Voir le profil
    • Xartrick's Area
Re : [AIDE] Comment vérifier toutes les valeurs d'un tableau !
« Réponse #3 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 !");
}

Hors ligne Ssk

  • *
  • Lulu's Stunt - Le serveur stunt de Lulu !
  • Messages: 8154
    • Voir le profil
Re : [AIDE] Comment vérifier toutes les valeurs d'un tableau !
« Réponse #4 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;
}
}
}



Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog

Hors ligne Syg

  • Expert programmeur C/C++/PAWN
  • *
  • The GTAOnline Jesus
  • Messages: 3908
    • Voir le profil
Re : [AIDE] Comment vérifier toutes les valeurs d'un tableau !
« Réponse #5 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
Courtesy of GtaManiac

Hors ligne Xartrick

  • *
  • C & Pawn Programmer
  • Messages: 1391
    • Voir le profil
    • Xartrick's Area
Re : [AIDE] Comment vérifier toutes les valeurs d'un tableau !
« Réponse #6 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 */
}

Hors ligne Hatomalis

  • *
  • Tueur en série
  • Messages: 121
    • Voir le profil
Re : [AIDE] Comment vérifier toutes les valeurs d'un tableau !
« Réponse #7 le: 15 Mai 2011, 11:04:12 »
Merci à tous pour votre aide, sa marche très bien maintenant.

-

Hors ligne Syg

  • Expert programmeur C/C++/PAWN
  • *
  • The GTAOnline Jesus
  • Messages: 3908
    • Voir le profil
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
Courtesy of GtaManiac

Hors ligne Xartrick

  • *
  • C & Pawn Programmer
  • Messages: 1391
    • Voir le profil
    • Xartrick's Area
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.

Hors ligne cristab

  • *
  • Messages: 8379
    • Voir le profil
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 =)
pas d'aide en PM, vous êtes sur un forum est il me semble que vous êtes la pour avoir de l'aide donc pourquoi MP une seul personne qui ne vous répondra pas alors qu'il y a plein de membre ici