• 05 Juin 2026, 15:53:32


Auteur Sujet: [RÉSOLU] - Récupérer la plus grande variable  (Lu 3118 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne vardanega

  • *
  • Tueur en série
  • http://vvardanega.wordpress.com (mon blogue)
  • Messages: 155
    • Voir le profil
[RÉSOLU] - Récupérer la plus grande variable
« le: 24 Avril 2011, 10:24:14 »
Bonjour, j'ai plusieurs variable (new VarVote[7];) qui au fils du temps prennent des valeurs différentes, je voudrais simplement récupérer la plus grande valeurs entre toute, j'imagine qu'il faut utiliser un while / des if pour comparez  une a une, mais je n'est aucune idée de comment m'y prendre.

Si un peux aide pouvait mettre fournie !

Cordialement Vince.
« Modifié: 27 Avril 2011, 19:38:01 par vardanega »

Hors ligne Xartrick

  • *
  • C & Pawn Programmer
  • Messages: 1391
    • Voir le profil
    • Xartrick's Area
Re : Récupérer la plus grande variable
« Réponse #1 le: 24 Avril 2011, 10:26:25 »
Utilise la fonction strlen de la librairie string.inc.

native strlen(const string[]);

Hors ligne vardanega

  • *
  • Tueur en série
  • http://vvardanega.wordpress.com (mon blogue)
  • Messages: 155
    • Voir le profil
Re : Récupérer la plus grande variable
« Réponse #2 le: 24 Avril 2011, 11:13:21 »
Mes variable sont numérique.

Il en a 6 maximum:

VarMap[1] //valeur de 10
VarMap[2] // valeur de 32
VarMap[3]
VarMap[4]
VarMap[5] ect ...


Merci

Hors ligne Ssk

  • *
  • Lulu's Stunt - Le serveur stunt de Lulu !
  • Messages: 8154
    • Voir le profil
Re : Récupérer la plus grande variable
« Réponse #3 le: 24 Avril 2011, 11:22:54 »
Tu peut faire un truc de ce genre




GetBiggestValue( const array[], size )
{
new value = 0; // On déclare une variable qui va stocker la valeur la plus grand qu'on ai pu trouver

for( new i = 0; i < size; i++ )
{
if( array[i] > value ) value = array[i]; // ici on test si la valeur du tableau est plus grande que la dernière plus grande valeur trouvée, alors on lui assigne cette valeur la
}

return value; // ici on retourne la valeur la plus grande qu'on ai trouvé ^^
}



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

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : Récupérer la plus grande variable
« Réponse #4 le: 24 Avril 2011, 16:17:57 »
Salut,

d'après le nom de sa variable, je dirais que c'est un vote, il voudra probablement donc avoir la position de la valeur.
De plus, dans ce genre de cas comment gère t'on deux choix ayant le même nombre de votes?...enfin, reposte si tu as des problèmes avec cette partie.


enfin, pour avoir la position en plus, tu peut faire dans ce genre:

GetBiggestValue( const array[], size, &pos )//on passe la position par référence
{
new value = 0; // On déclare une variable qui va stocker la valeur la plus grand qu'on ai pu trouver
pos = -1;//on met une valeur par défaut (habitude)

for( new i = 0; i < size; i++ )
{
if( array[i] > value )
{
value = array[i]; // ici on test si la valeur du tableau est plus grande que la dernière plus grande valeur trouvée, alors on lui assigne cette valeur la
pos = i;
}
}

return value; // ici on retourne la valeur la plus grande qu'on ai trouvé ^^
}

Comme ça cette fonction retourne le nombre de vote du max et la position où cette valeur a été trouvée.

Bonne chance

++Sim++





Hors ligne vardanega

  • *
  • Tueur en série
  • http://vvardanega.wordpress.com (mon blogue)
  • Messages: 155
    • Voir le profil
Re : Récupérer la plus grande variable
« Réponse #5 le: 24 Avril 2011, 20:51:43 »
Bonsoir, oui c'est une variable pour un vote donc il ce peux que deux variable est la même valeur, une petite question que signifie "&pos" dans le code fournie plus haut ?.

Merci beaucoup pour l'aide apporté.

Vince

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : Récupérer la plus grande variable
« Réponse #6 le: 25 Avril 2011, 16:45:21 »
Salut,

lorsque tu vois qu'un paramètre d'une fonction comporte le symbole '&' devant le nom du paramètre, cela signifie que ce paramètre est passé par référence.
De cette façon, au lieu de créer une nouvelle variable dans la mémoire de l'ordinateur, le programme travaille avec la variable originale.
Ceci permet donc de modifier la valeur de la variable, même si elle se trouve dans un autre endroit du code. Ceci permet d'y avoir accès en écriture et non seulement en lecture.

Dans cet exemple, pos correspond à la position dans le tableau de la variable la plus haute. Si tu veut savoir qui a gagné, il te faut cette information (à moins de faire une boucle dans ton code en cherchant la valeur retournée par la fonction...) Ce qui t’intéresse, ce n'est pas «combien vaut» la valeur la plus grande, mais bien «laquelle es-ce».

Essaie de penser à comment faire pour gérer les cas où il y a égalité et reviens nous avec l'idée. On verra ce que tu pourras faire pour l'appliquer.

++Sim++





Hors ligne Xartrick

  • *
  • C & Pawn Programmer
  • Messages: 1391
    • Voir le profil
    • Xartrick's Area
Re : Récupérer la plus grande variable
« Réponse #7 le: 25 Avril 2011, 19:08:41 »
@Sim: On peut donc dire que l'on utilise les pointeurs :P.

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : Re : Récupérer la plus grande variable
« Réponse #8 le: 25 Avril 2011, 20:20:06 »
Salut,

@Sim: On peut donc dire que l'on utilise les pointeurs :P.

attention, il s'agit de références, pas de pointeurs!
Il s'agit de deux notions distinctes, bien que fortement reliées.

Le pointeur est une variable qui indique l'élément que l'on travaille, il contient l'adresse.
La référence EST cet élément.

Enfin, c'est ce que j'ai cru comprendre, je n'ai que très peu étudié ces notions. Les deux sont très faciles à confondre.

De plus, les pointeurs n'existent pas en PAWN (pas directement, pas comme en C++ par exemple) comme la gestion de la mémoire est très ... statique.
Il y a peu de manipulation de mémoire possible en PAWN.

Nous sortons du sujet je crois (bien que ce soit une conversation intéressante).

++Sim++





Hors ligne Syg

  • Expert programmeur C/C++/PAWN
  • *
  • The GTAOnline Jesus
  • Messages: 3908
    • Voir le profil
Re : Récupérer la plus grande variable
« Réponse #9 le: 25 Avril 2011, 23:10:56 »
@GZsume : La fonction de Ssk est exactement la même que celle dont tu donnes le lien (ce qui est normal, c'est à peu près la seule façon simple de trouver la plus grande valeur dans un ensemble).

@Sim : En C++ (car ça n'existe pas en C), le passage par référence est une fait un passage par pointeur mais où la variable peut être utilisée dans le code comme si elle avait été passée par valeur.
Exemple :
Code: (cpp) [Sélectionner]
/* Passage par valeur */
void MaFonction (struct Machin Chose )
{
   if (Chose.Bidule == 2)
   {
      printf ("Bidule vaut 2\n");
      /* Ici on ne peut pas modifier la valeur des champs de la structure,
         si on le fait, ils ne seront modifiés que localement */
   }
}

/* Passage par pointeur */
void MaFonction (struct Machin *Chose )
{
   if (Chose->Bidule == 2)
   {
      printf ("Bidule vaut 2\n");
      Chose->Bidule = 6;
   }
}

/* Passage par référence */
void MaFonction (struct Machin &Chose )
{
   if (Chose.Bidule == 2)
   {
      printf ("Bidule vaut 2\n");
      // Même notation que le passage par valeur mais la variable peut être modifiée
      Chose.Bidule = 6;
   }
}

++
Syg
Courtesy of GtaManiac

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : Récupérer la plus grande variable
« Réponse #10 le: 25 Avril 2011, 23:48:17 »
Salut,

merci grand Syg.

J'étais pratiquement certains que c'était implanté via des pointeurs (y a pas 10 000 façons de faire, ça prend l'adresse mémoire...), mais je pensais que la distinction était plus grande entre les deux.

++Sim++





Hors ligne Syg

  • Expert programmeur C/C++/PAWN
  • *
  • The GTAOnline Jesus
  • Messages: 3908
    • Voir le profil
Re : Récupérer la plus grande variable
« Réponse #11 le: 26 Avril 2011, 01:24:28 »
En fait, c'est juste une façon commode d'utiliser les pointeurs.

Mais ça a un autre avantage : on est forcé d'utiliser le paramètre correctement.
Exemple :
void MaFonction (int *MonEntier)
{
   /* Le C/C++ permet de faire ça  :*/
   MonEntier[10] = 25;
}
Si on appelle la fonction précédente en passant un pointeur sur un entier, tout va se compiler et linker comme il faut, sans erreur mais lors de l'exécution, on va aller écraser une partie de la mémoire où on n'aurait pas dû aller, ce qui conduira à un comportement erratique du programme.

Par contre, si le paramètre était passé par référence, on aura une erreur de compilation lors de son utilisation :
void MaFonction (int &MonEntier)
{
   /* La ligne suivante provoque une erreur de compilation */
   MonEntier[10] = 25;
}

++
Syg
Courtesy of GtaManiac

Hors ligne vardanega

  • *
  • Tueur en série
  • http://vvardanega.wordpress.com (mon blogue)
  • Messages: 155
    • Voir le profil
Re : Re : Récupérer la plus grande variable
« Réponse #12 le: 26 Avril 2011, 11:33:58 »
Je suis tombé sur ça sur le forum de SA-MP pour ceux que ça intéresse.

Merci pour cette fonction c'est ce que je recherchais, mais impossible de récupérez le nom de la variable qui a la plus grande valeur.

Merci Sim & Syg pour vos explications tres éclairées !

Vince

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : Récupérer la plus grande variable
« Réponse #13 le: 26 Avril 2011, 18:23:20 »
Salut,

c'est pour cette raison que j'avais ajouté un paramètre pos. (savoir qui a gagné)
Mais comme je te disais, il faudrait encore modifier un peu cette fonction afin de gérer les cas d'égalité (à toi de voir comment tu veut le faire (genre choisir le premier, choisir tous les égaux etc...)

++Sim++





Hors ligne vardanega

  • *
  • Tueur en série
  • http://vvardanega.wordpress.com (mon blogue)
  • Messages: 155
    • Voir le profil
Re : Re : Récupérer la plus grande variable
« Réponse #14 le: 27 Avril 2011, 17:46:54 »
Salut,

d'après le nom de sa variable, je dirais que c'est un vote, il voudra probablement donc avoir la position de la valeur.
De plus, dans ce genre de cas comment gère t'on deux choix ayant le même nombre de votes?...enfin, reposte si tu as des problèmes avec cette partie.


enfin, pour avoir la position en plus, tu peut faire dans ce genre:

GetBiggestValue( const array[], size, &pos )//on passe la position par référence
{
new value = 0; // On déclare une variable qui va stocker la valeur la plus grand qu'on ai pu trouver
pos = -1;//on met une valeur par défaut (habitude)

for( new i = 0; i < size; i++ )
{
if( array[i] > value )
{
value = array[i]; // ici on test si la valeur du tableau est plus grande que la dernière plus grande valeur trouvée, alors on lui assigne cette valeur la
pos = i;
}
}

return value; // ici on retourne la valeur la plus grande qu'on ai trouvé ^^
}

Comme ça cette fonction retourne le nombre de vote du max et la position où cette valeur a été trouvée.

Bonne chance

++Sim++

Bonjour, merci pour ce code mais comment doit je utiliser cette fonction, ou placez mes VarVote ?

Merci,

Vince.