Tableaux en C, nombres aléatoires
Xiqyti
-
fiddy Messages postés 11653 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11653 Date d'inscription Statut Contributeur Dernière intervention -
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;
}
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;
}
A voir également:
- Tableaux en C, nombres aléatoires
- Tableaux croisés dynamiques - Guide
- Mise en forme tableau word - Guide
- Barbara veut calculer automatiquement son budget dans un tableau. citez un des logiciels lui permettant de faire des calculs sur des tableaux de nombres (tableur). - Forum Musique / Radio / Clip
- Fusionner deux tableaux excel - Guide
- Budget plus cic ✓ - Forum finances
5 réponses
fiddy
Messages postés
11653
Date d'inscription
Statut
Contributeur
Dernière intervention
1 847
Pas de soucis ;-).
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 ;)
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 ;)
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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