[C] probleme permutation indices d'un tableau
memo67
Messages postés
5
Date d'inscription
Statut
Membre
Dernière intervention
-
Maximvs Messages postés 39 Date d'inscription Statut Membre Dernière intervention -
Maximvs Messages postés 39 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Voila j'suis nouveau et j'ai un petit soucis en C pour mon ter..
J'ai fais mon programme en maple et tout marche:
il y a une fonction qui s'appelle randperm qui fait:
b := randperm(18)
->b := [15, 10, 4, 8, 12, 5, 1, 11, 9, 2, 18, 13, 16, 17, 6, 7, 3, 14]
il affiche aleatoirement une permutation d'un vecteur ligne sans repetition des valeurs..
Mon probleme c'est qu'en C il n'y a pas de fonction similaire..;p
J'ai fais un test qui ressemble à ca:
int main(){
int a,i;
int tab[10];
for(i=0;i<10;i++){
a=rand()%11;
tab[i]=a;
printf("%d\n",tab[i]);
}
return 0;
}
il ma'affiche par exemple->6,10,6,2,1,4,0,6,3,1
Le programme compile pas de probleme mais m'affiche un tableau avec des valeurs qui dans la plupart des cas sont egaux or c'est pas ce que je veux,je veux juste une permutation aleatoire.. :-(
J'ai essayé de faire des boucles while, for,..mais rien a faire..
Si quelqu'un pouvait m'aider, please.. merci d'avance..
Voila j'suis nouveau et j'ai un petit soucis en C pour mon ter..
J'ai fais mon programme en maple et tout marche:
il y a une fonction qui s'appelle randperm qui fait:
b := randperm(18)
->b := [15, 10, 4, 8, 12, 5, 1, 11, 9, 2, 18, 13, 16, 17, 6, 7, 3, 14]
il affiche aleatoirement une permutation d'un vecteur ligne sans repetition des valeurs..
Mon probleme c'est qu'en C il n'y a pas de fonction similaire..;p
J'ai fais un test qui ressemble à ca:
int main(){
int a,i;
int tab[10];
for(i=0;i<10;i++){
a=rand()%11;
tab[i]=a;
printf("%d\n",tab[i]);
}
return 0;
}
il ma'affiche par exemple->6,10,6,2,1,4,0,6,3,1
Le programme compile pas de probleme mais m'affiche un tableau avec des valeurs qui dans la plupart des cas sont egaux or c'est pas ce que je veux,je veux juste une permutation aleatoire.. :-(
J'ai essayé de faire des boucles while, for,..mais rien a faire..
Si quelqu'un pouvait m'aider, please.. merci d'avance..
A voir également:
- Tableau de permutation
- Tableau word - Guide
- Tableau ascii - Guide
- Trier un tableau excel - Guide
- Tableau croisé dynamique - Guide
- Imprimer tableau excel sur une page - Guide
4 réponses
a mon avis il voudrait aussi que les valeur soit differentes pour ça il faut que une fois que tu a tiré le nombre au hasard tu verifie qu'il n'est pas deja dans le tableau
pour ça tu initialise d'abord toutes les cases de ton tableau a 11
pour ça tu initialise d'abord toutes les cases de ton tableau a 11
for(i=0;i<10;i++) tab[i]=11;puis ensuite avant de mettre le nombre tu verifies qu'il n'est pas deja la
for(i=0;i<10;i++){ while(trouve){ trouve=0; a=rand()%11; for(j=0;j<10;j++) if(tab[j]==a) trouve=1; } tab[i]=a; printf("%d\n",tab[i]); }
Salut memo67,
problème très classique, la solution de mype semble bonne à première vue, mais elle risque pour des tableaux très grand de prendre un temps très très long !
Voici comment il faut procéder.
Première étape : tu génères un tableau de la taille voulu tel que t[i]=i donc 0 1 2 3 4 5 6 etc .....
Deuxième étape : pour i allant de la taille maximale à 2 (boucle décrémentée) fait un rand()%i et inverse les cases t[i] et t[rand()%i]
Ca fera exactement ce que tu souhaite en temps linéaire à la taille du tableau.
Bon courage, Greg.
problème très classique, la solution de mype semble bonne à première vue, mais elle risque pour des tableaux très grand de prendre un temps très très long !
Voici comment il faut procéder.
Première étape : tu génères un tableau de la taille voulu tel que t[i]=i donc 0 1 2 3 4 5 6 etc .....
Deuxième étape : pour i allant de la taille maximale à 2 (boucle décrémentée) fait un rand()%i et inverse les cases t[i] et t[rand()%i]
Ca fera exactement ce que tu souhaite en temps linéaire à la taille du tableau.
Bon courage, Greg.