cs_cognac
Messages postés50Date d'inscriptionsamedi 20 avril 2002StatutMembreDernière intervention11 mars 2010
-
23 juil. 2002 à 03:41
cmarsc
Messages postés455Date d'inscriptionmercredi 6 mars 2002StatutMembreDernière intervention18 décembre 2003
-
5 août 2002 à 11:01
Bonjour,
J'ai fai ce petit prog. qui vérifi les doublons dans un tableau. Comme je suis débutant et que ce prog est un de mes premiers je me demande si il n'y a pas une façon plus élégante de l'écrire.
Merci
#include
#include <time.h>
#include <conio.c>
void emplacement_disponible()
{
int emplacement,nombre,doublon,e,i;
nombre=rand()%(6); //Détermine le nombre d'emplacement
int solution[nombre];
cout << "choisir un emplacement parmi les suivants : \n";
for (i=0; i<nombre;)
{
emplacement =rand()%(64); //Détermine quelle emplacement parmi tous les emplacements
doublon=0;
for (e=0; e<nombre; e++)
{
if (emplacement==solution[e])
{
doublon++;
}
}
if (doublon>0)
continue;
solution[i]=emplacement;
cout <<"Emplacement no : "<<solution[i]<<"\n";
i++;
}
}
cs_kjus
Messages postés269Date d'inscriptionmercredi 24 avril 2002StatutMembreDernière intervention 9 juin 2003 23 juil. 2002 à 13:20
lors, plusieurs commentaires :
nombre=rand()%(6); //Détermine le nombre d'emplacement
int solution[nombre];
ca c mal. Ca peut marcher si ton compilo accepte, mais normalement ca devrait pas compiler.
en effet, le variable "nombre" doit etre connue au moment de la compilation. dans ton cas, le compilo doit rendre nombre un const, et peut-etre que ta premiere ligne emplacement=rand()%6 est ignorée.
en gros, tu dois connaitre a l'avance le nombre de cases que tu déclares, avec par exemple :
int tableau[10];
et le tour est joué.
(ce que tu veux faire, tu pourras le faire "proprement" avec les pointeurs et les allocations dynamiques)
sinon, ton prog est très tarabiscoté.
dis-moi exactement ce que tu veux que le prog fasse (étapes par étapes) si tu veux que je vois si ya pas une solution "plus elegante" ;)
cs_cognac
Messages postés50Date d'inscriptionsamedi 20 avril 2002StatutMembreDernière intervention11 mars 2010 23 juil. 2002 à 14:04
Bonjour,
Merci pour ton commentaire mais le prog compile très bien, d'ailleurs c'est la raison qui explique pourquoi j'ai placé mon tableau (solution[nombre]) après « nombre=rand()%(6);». La variable «nombre» est initialée au tout début.
J'aimerai simplement savoir s'il existe une fonction qui remplace les lignes suivantes:
for (e=0; e<nombre; e++)
{
if (emplacement==solution[e])
{
doublon++;
}
}
if (doublon>0)
continue;
cs_kjus
Messages postés269Date d'inscriptionmercredi 24 avril 2002StatutMembreDernière intervention 9 juin 2003 23 juil. 2002 à 14:24
tu as quel compilo ?
paske ton truc compile très bien peut-etre, mais normalement, c'est pas du tout autorisé.
par exemple, mon compilo borland ne le compile pas et me sort : 11 : constant expression require..
ce qui est tout a fait normal.
sinon, tu peux faire ca :
for (e=0; e<nombre; e++)
{
if (emplacement!=solution[e])
{
solution[i]=emplacement;
cout <<"Emplacement no : "<<solution[i]<<"\n";
i++;
}
}
mais je te le redis pour ton tableau ca va pas ;)
***raph***
cs_cognac
Messages postés50Date d'inscriptionsamedi 20 avril 2002StatutMembreDernière intervention11 mars 2010 24 juil. 2002 à 03:23
Merci de prendre le temps de m'écrire, c'est apprécié. J'utilise dev++ et je commence avec visual.
J'ai regardé ton code et je ne suis pas certain qu'il fait le travail recherché, je m'explique (dit le moi si je me trompe). Ton code ne semble vérifier que la première donnée du tableau et si la condition est vrai pour la première donnée il n'ira pas plus loin et exécutera ton bloc d'instruction mais ne vérifira pas les autres.
exemple:
nombre=4
donc nous avons le tableau «solution[4]»
disons que le tableau est ainsi «solution[4]={10,5,8,13}
si «emplacement=8» alors ton code va exécuter son bloc d'instruction parce que la condition est vrai pour la première donnée puisque c'est 10 et va insérer à l'emplacement selon «i».
J'avais trouvé le code suivant dans un livre:
int c;
char solution[maxPos+1];
int HowMany(const char*, char);
int count = HowMany (solution,c)
if (count>0)
continue;
La variable maxPos+1 ici n'est pas importante, ce qu'il faut retenir c'est que «solution» est un tableau.
Je cite
"Nous affectons à la variable entière «count» le résultat de la méthode membre HowMany(). Cette méthode accepte deux paramètres - un tableau de caratères et un caractère - et renvoie le nombre de fois où le caractère apparaît dans le tableau."
J'ai tenté d'adapter ce petit code pour les nombres au lieu des caractères exemple: «HowMany(const int*,int);» mais j'obtient le message d'erreur:
c:\daniel\achalandage\untitled1.o(.text+0x505):untitled1.cpp: undefined reference to `HowMany(int const *, int)'
Merci :)
Daniel
Vous n’avez pas trouvé la réponse que vous recherchez ?
// tester si numero deja tire
if (numero_deja_tire[ numero_tire[i1] ] > 1) {
// tirer_autres_numeros;
}
} // fin de for (i1)
numero_deja_tire incrémente la valeur correspondante au numero_tiré ce qui fait que si un nombre sort il est compter si il sort encore il sera détecté rapidement.