Stoofleouf
Messages postés1Date d'inscriptiondimanche 27 juillet 2003StatutMembreDernière intervention15 avril 2007
-
15 avril 2007 à 22:48
cs_6co
Messages postés114Date d'inscriptionlundi 27 janvier 2003StatutMembreDernière intervention 5 avril 2012
-
17 avril 2007 à 23:15
Bonjour, je débute en C++ et j'ai un souci :
Je veux pouvoir générer une serie de nombre aléatoire tout en parametrant au préalable la somme des nombres qui seront générés. Je souhaiterai aussi pouvoir définir à l'avance le nombre de chiffres pairs générés.
Quelqu'un pourrait-il m'aider ?
int main(int argc, char *argv[])
{
long unsigned n1=0, n2=0, n3=0, n4=0, n5=0, n6=0, n7=0;
int pair=0;
long poid=0; const long MAX 49, MIN 1;
do //on entre le nombre de chiffres pairs que l'on désire générer
{
printf("Nombre de numeros pairs (doit etre situe entre 0 et 7) :\n");
scanf("%ld", &pair);
}
while (pair > 7 || pair < 0);
do //On demande la somme de tous les chiffres générés
{
printf("Poid de la grille desire (doit etre situe entre 28 minimum et 322 maximum) :\n");
scanf("%ld", &poid);
}
while (poid > 322 || poid < 28);
cs_6co
Messages postés114Date d'inscriptionlundi 27 janvier 2003StatutMembreDernière intervention 5 avril 20121 17 avril 2007 à 23:15
Salut, j'ai du mal à suivre l'algo que tu proposes, alors j'en ai fait un vite fait (qui dit vite fait, dit non commenté et plus ou moins testé)
en gros il consiste à prendre un premier nombre, à tester s'il reste assez de différence entre la somme voulue et ce premier nombre...
ensuite, on continue de la même façon...
j'espère que cela pourra t'aider,
et j'aimerais aussi connaitre le but final d'un tel algorithme
(y en a-til un ? ou c'est juste un exercice ? )
unsigned int nb_alea(unsigned int debut,unsigned int fin,unsigned int parite)
{
// retourne une nombre aléatoire pair si parite=0, impair si parite=1 ou quelconque sinon
unsigned int nb;
nb=rand() % (fin-debut+1) + debut;
if (parite!=2)
while ((nb%2)!=parite)
nb=rand() % (fin-debut+1) + debut;
return nb;
}
unsigned int parite(int pairs, int impairs)
{
if (pairs!=0 && impairs!=0)
return 2;
if (pairs!=0)
return 0;
return 1;
}
int main(int argc, char *argv[])
{
unsigned char nombre[7];
unsigned int somme, somme_test_1, somme_test_2;
unsigned int pairs=10,impairs;
unsigned int i,j,k;
cout << "Donnez la somme désirée (entre 28 et 322)";
while (somme<=28 || somme >=322)
{
cin >> somme;
if (somme<=28 || somme >=322)
cout << "Donnez un nombre entre 28 et 322 ";
}
cout << "Donnez le nombre de pairs désiré (entre 0 et 7)";
while (pairs<=0 || pairs>=7)
{
cin >> pairs;
if (pairs<=0 || pairs >=7)
cout << "Donnez un nombre entre 0 et 7 ";
}
// initialisation nombre aléatoires
srand(time(NULL));
// premier test, la quantité de nombre impairs et la somme doivent etre de meme parité :
impairs = 7 - pairs;
if ((somme - impairs)%2 != 0)
{
cout << "Problème impossible à résoudre";
return 1;
}
// on trouve un premier nombre
somme_test_1=0;
nombre[0]=0;
for (k=0 ; k<6; k++)
{
somme_test_2=0;
while (somme_test_2>somme || somme_test_2==0)
{
somme_test_2=somme_test_1;
nombre [k]=nb_alea(1, somme, parite (pairs, impairs));
somme_test_2+=nombre[k];
for ( i=k+1; i