Tableaux en C, nombres aléatoires

Fermé
Xiqyti - 1 avril 2009 à 00:10
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 5 avril 2009 à 23:59
Bonsoir à tous,
quelqu'un peut-il m'aider pour m'expliquer comment savoir si un tableau contient déjà des éléments si on l'incrémente petit à petit...
Je m'explique:
Je génère des nombres aléatoires entre 0 et m (entier), que je rentre dans un tableau de taille n...ceci dit, il faut que les nombres générés n'apparaissent qu'en un seul exemplaire dans le tableau...
Cela fait plusieurs heures que je ne trouve pas, s'il vous plait, donner moi des tuyaus ;)

Voici mon code (et ma solution, fausse bien entendu..., il y a un peu de c++ aussi)
Merci de votre aide ^^

#include <cstdlib>
#include <iostream>
#include <stdlib.h>
#include <string>
#include <time.h>


using namespace std;

const int n1 = 8;
const int n2 = 10;


int main(int argc, char *argv[])
{
int t1[n1], t2[n2], m,i,j,t[n1];

printf("Veuillez saisir un entier \n");
cin>>m;


srand(time(NULL));
rand();

t1[0]=int(((double)(rand())/RAND_MAX)*m+1);
t[0]= t1[0];



for(i=1;i<n1;i++){
t[i]=int(((double)(rand())/RAND_MAX)*m+1);
for(j=0;j<n1;j++){
if (t1[j]=t[i])
do{ t[i]= int(((double)(rand())/RAND_MAX)*m+1);
}
while(t1[j] =t[i]);

}
t1[i]=t[i];
}


for(i=0;i<n1;i++){
printf(" t[%d] = %d \n",i,t[i]);
}
for(i=0;i<n1;i++){
printf(" t1[%d] = %d \n",i,t1[i]);
}

system("PAUSE");
return EXIT_SUCCESS;

}

5 réponses

HackStyle Messages postés 30 Date d'inscription mercredi 1 avril 2009 Statut Membre Dernière intervention 12 avril 2009 9
5 avril 2009 à 23:45
Mdrrrrrr! Je suis vraiment une mule moi!

Désolé fiddy!
1
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
5 avril 2009 à 23:59
Pas de soucis ;-).
0
HackStyle Messages postés 30 Date d'inscription mercredi 1 avril 2009 Statut Membre Dernière intervention 12 avril 2009 9
5 avril 2009 à 23:14
Euh... j'ai pas tout lus par manque de temps mais je peut te faire un ptit code pour t'aider.

Tien :

#include <cstdio> // ou #include <iostream>
#define TAB_MAX 10;
#define MAX_GEN 12;

unsinged long genere_nb(unsigned long mx=1)
{
return (((double)(rand())/RAND_MAX)*mx+1)
}

using namespace std;

int main(void)
{
unsigned long content[TAB_MAX];
for(unsigned int i=0; i<TAB_MAX; i++)
{
unsigned int nb_genere = genere_nb(MAX_GEN);
for(unsigned int _i=0; _i<i;)
{
if ( content[i] == nb_genere)
{
nb_genere = genere_nb(MAX_GEN);
_i=0;
continue;
}
_i++;
}
content[i] = nb_genere;
}
}

Voila! Si y'a des erreurs dite le moi car je l'est fait avec l'editeur de message, je l'est pas tester ;)
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
5 avril 2009 à 23:18
J'ai pas non plus regardé ton code, mais déjà je vois deux fautes.


#define TAB_MAX 10;
#define MAX_GEN 12;

Pas de points virgules dans le define ;-)).
0
HackStyle Messages postés 30 Date d'inscription mercredi 1 avril 2009 Statut Membre Dernière intervention 12 avril 2009 9
5 avril 2009 à 23:19
Ah ouais c'est vrai.
Mais je pense que c'est les seuls
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
5 avril 2009 à 23:28
Salut,
Déjà, il ne faut pas mélanger le code C et le code C++. Cela peut produire des incompatibilités. De toute façon, ça peut pas être du C vu que tu utilises cin ^^.
Ensuite le rand() tout seul après le srand(), ne sert à rien. Cela éliminera juste la première valeur de la liste de nombre.
Ensuite l'opérateur d'égalité est le double égal ==. Si tu fais un simple égal, cela fera une affectation et cela renverra 1 (donc vrai) si la valeur est différente de 0.

Sinon pour générer des valeurs aléatoires en un seul exemplaire, la meilleure façon est d'initialiser le tableau à la main. Et ensuite de mélanger le tableau en se basant sur les indices en faisant plusieurs itérations.

Cdlt
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
HackStyle Messages postés 30 Date d'inscription mercredi 1 avril 2009 Statut Membre Dernière intervention 12 avril 2009 9
5 avril 2009 à 23:34
Rholala !!

J'utilise pas de cin là et de plus c'est pour l'algo là pas pour la generation de nb.

Frenchement je sais pas comment les gents sont éduqués, je veux t'aider et toi tu me critique.

Et je sais meme pas pourquoi tu parle de cin ?

tien j'ai corriger quelques trucs :

#include <cstdio> // ou #include <iostream>
#include <cstdlib>
#include <time.h>
#define TAB_MAX 10
#define MAX_GEN 12

int genere_nb(int mx=1)
{
return (int)(((float) rand()/RAND_MAX*(mx+1)));
}

using namespace std;

int main(void)
{
srand(time(NULL));
unsigned long content[TAB_MAX];
for(unsigned int i=0; i<TAB_MAX; i++)
{
int nb_genere = genere_nb(MAX_GEN);
for(int _i=0;_i<i;_i++)
{
if ( content[_i] == nb_genere)
{
nb_genere = genere_nb(MAX_GEN);
_i=-1;
continue;
}
}
content[i] = nb_genere;
}
for ( unsigned int i=0; i<TAB_MAX; i++ )
{
fprintf(stdout,"%i",content[i]);
}

return 0;
}

Me casse pas la tête avec tes debilités.

Ciao!


EDIT: Merci c'est pas pour les chiens mais bien pour les humains
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
5 avril 2009 à 23:43
Du calme lol. Faut pas se sentir viser comme ça ^^.

D'une part, ce n'est pas l'auteur qui parlait mais un autre "helper" (en l'occurence moi), et d'autre part je ne parlais pas de ton code mais du sien.
0