Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1067 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [C] Probleme nombres aléatoires tous differents

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] Probleme nombres aléatoires tous differents

n°1011134
Profil sup​primé
Posté le 13-03-2005 à 11:20:34  answer
 

Voila,
 
J'ai un pb :
Je veux rentrer dans un tableau de n cases des chiffres aléatoires
Mais tous differents et borné entre 0 et n.
Mais le gros pb, c'est que je suis pas doué
 
Donc si vous pouviez m'aider un peu
Voici la partie en question
 
merci
 
J'ai mis a jour ce que j'avais fait , 3 post plus bas


Message édité par Profil supprimé le 14-03-2005 à 10:25:53
mood
Publicité
Posté le 13-03-2005 à 11:20:34  profilanswer
 

n°1011147
moi23372
Posté le 13-03-2005 à 12:17:00  profilanswer
 


 
 
faut que tu imbriques une deuxieme boucle
 

Code :
  1. for(i=0 ; i<n ; i++)
  2. {
  3.     vrai = 1;
  4.     while (vrai)
  5.     {
  6.       var = rand();
  7.       for(j=0 ; j<i-1 && var != tab[j] ; j++);
  8.       if (i == j)
  9.       {
  10.         tab[i] = var;
  11.         vrai = 0;
  12.       }
  13.     }
  14. }


Message édité par moi23372 le 13-03-2005 à 12:22:36
n°1011187
Profil sup​primé
Posté le 13-03-2005 à 14:02:51  answer
 

[:mad_oc@school] Tout d'abord , merci
 
 
J'ai essayer d'intégrer ce que tu viens de me dire a ma separation de mon programme
Mais je ne comprends absolument pas le coup du if ds la boucle for :D  
 
Je vais quand mm reepliquer mon pb :
Il faut mettre dans un tableau de c cases des chiffres aleatoire ( ex : X ) allant de 0 à n-1  
aprés , il me faut remplacer la valeur de la case X par un chiffre aléatoire compris entre 0 et 3
 
Voilou
 
Je met cette fois le code entier avec mes dernieres modification : Le probleme vient au niveau des deux boucles for imbriqués , l'affichage de la sequence a la fdin ainsi que le passage de chiffre a lettre, marche ss pb
 
 
 
VOICI le programme a jour :
 
#include <stdlib.h>
void mutation(char chaine[], int n,int memo[])
{
int i,j,t,k,b,h,o,c,mem,vrai,var,q,g;
printf("Maintenant, saisissez le pourcentage de taux de mutation qui affecte la chaîne d'ADN : " );
scanf("%d",&b);
if (b==0)
 {
 printf("Aucune mutation\n" );
 printf("\n" );
 }
 else
  {
  c=(int)(n*b/100);
  if(c==0)
   {
   c=1;
   printf("%d mutation(s) sur la chaîne de %d bases\n",c,n);
   }
   else
    {
    printf("%d mutation(s) sur la chaîne de %d bases\n",c,n);
    }
  printf("\n" );
  for(i=0;i<c;i++)
   {
   vrai=1;
   while(vrai=1)  //on met un chiffre aleatoire different ds chaque case de memo
    {
    var=(int)((double)rand()/((double)RAND_MAX+1.0)*n);
    for(o=0;o<i-1 && var!=memo[o];o++)
     {
     if( i==o )
      {
      memo[i]=var;
      vrai=0;
      }
     }
    }
   }
  for(i=0;i<c;i++)
   {
   memo[i]=k;
   q=chaine[k];
   chaine[k]=(int)(4.0*rand()/(RAND_MAX+1.0));
   if (q==chaine[k])
    {
    g=g+1;
    }
   if (chaine[k]==0)
    {
    chaine[k]='A';
    }
   if (chaine[k]==1)
    {
    chaine[k]='C';
    }
   if (chaine[k]==2)
    {
    chaine[k]='G';
    }
   if (chaine[k]==3)
    {
    chaine[k]='T';
    }
   }
  printf("\nVoici la chaine ADN ayant subi les %d mutations dont %d muette (substitution de la base par la meme base :\n",c,g);
  mem=0;
  for(j=0;j<n;j++)
   {
   printf("%c",chaine[j]);
   mem++;
   if(mem==3)
    {
    printf(" " );
    mem=0;
    }
   }
 
  }
printf("\n" );
printf("\n" );
}


Message édité par Profil supprimé le 13-03-2005 à 22:26:16
n°1011223
moi23372
Posté le 13-03-2005 à 15:09:23  profilanswer
 

si je comprends bien
 
tu as un tableau que tu dois remplir avec des nombres. Chaque case doit avoir un numéro différent de tous les autres, c'est bien ça?
 
ex: tab[5] = 2, 1, 3, 4, 0
 
c'est bien ça que tu veux? si c'est le cas, copie tel quel mon code... ça doit fonctionné...

n°1011590
Emmanuel D​elahaye
C is a sharp tool
Posté le 13-03-2005 à 22:31:17  profilanswer
 


Simple problème d'algorithme.
 


#include <stdlib.h>
#include <stdio.h>
#include <time.h>
 
/* determiner si une valeur x est presente dans le tableau a de taille n
   retour : 0=non presente
            1=presente
*/
static int is_in (int x, int a[], size_t n)
{
   int in = 0;
   size_t i = 0;
 
   while (!in && i != n)
   {
      in = a[i] == x;
      i++;
   }
   return in;
}
 
int main (void)
{
   enum
   {
      N = 10
   };
 
   int memo[N] =
   {0};
   size_t i = 0;
 
   /* initialisation 'variable' du generateur aleatoire */
   srand ((unsigned) time (NULL));
 
   /* tirage pseudo-aleatoire de la premiere valeur, stockage en [0] */
   memo[i] = (int) ((double) rand () / ((double) RAND_MAX + 1.0) * N);
 
 
   /* tirage des autres valeurs */
   for (i = 1; i < N; i++)
   {
      do
      {
         memo[i] = (int) ((double) rand () / ((double) RAND_MAX + 1.0) * N);
      }
      while (is_in (memo[i], memo, i));
      /* on recommance tant que la valeur est deja dans le debut du tableau ([0]..[i-1]) */
 
   }
   printf ("\n" );
 
 
   /* affichage */
   for (i = 0; i < N; i++)
   {
      printf ("%3u", memo[i]);
   }
   printf ("\n" );
 
   /* ajoute pour voir la fenetre d'execution parce que j'utilise Dev-C++, */
   system ("pause" );
 
   return 0;
}


Message édité par Emmanuel Delahaye le 14-03-2005 à 11:12:43

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1011593
Taz
bisounours-codeur
Posté le 13-03-2005 à 22:38:20  profilanswer
 

printf ("\n" );
 
j'ai toujours trouvé que c'était écraser une mouche avec un marteau :)
 
longue vie a putchar

n°1011599
Profil sup​primé
Posté le 13-03-2005 à 22:47:00  answer
 

:pt1cable:  
 
 
C'est super compliqué pour moi
 :D j'vais passer bcp de temps a essayer de déchiffrer , merci
 
 
Mais c'est dommage car je pense qu'on pouvait en modifiant u peu , faire marcher ce que moi23372
 
 
ps : taz , je suis un gros newbies ....  :D j'étudie de la biochimie/chimie moi , pas l'info  :(

n°1011608
Emmanuel D​elahaye
C is a sharp tool
Posté le 13-03-2005 à 22:53:28  profilanswer
 


Touche pas à l'ADN. Mange bio.
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1011788
Profil sup​primé
Posté le 14-03-2005 à 10:36:38  answer
 

Emmanuel Delahaye a écrit :

Touche pas à l'ADN. Mange bio.


 
Merde, une blague d'informaticien  [:pamplemousse]  
 
Sinon , j'ai réfléchit a ce que tu as posté ,  [:carbonim]  et je comprends rien du tout  [:jeffman]  
 
 
 :cry:  :sweat:  

n°1011831
Emmanuel D​elahaye
C is a sharp tool
Posté le 14-03-2005 à 11:04:49  profilanswer
 


Ok, j'ajoute les commentaires.


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
mood
Publicité
Posté le 14-03-2005 à 11:04:49  profilanswer
 

n°1012081
Sve@r
Posté le 14-03-2005 à 14:36:23  profilanswer
 

Emmanuel Delahaye a écrit :

Ok, j'ajoute les commentaires.


 
Il y a une légende urbaine qui dit que les commentaires sont utiles... mais ce n'est bien sûr qu'une légende !!!  :pt1cable:  

n°1012396
moi23372
Posté le 14-03-2005 à 18:06:19  profilanswer
 

J'ai envoyé le code par msg privé qui est nettement plus court et testé sous MS VISUAL STUDIO 6.0
 

Code :
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <time.h>
  4. #define MAX = 10
  5. time_t time (time_t *timer);
  6. void srand (unsigned int);
  7. int rand (void);
  8. void main ()
  9. {
  10. int n = MAX;
  11. int i, j, var, vrai;
  12. int tab[MAX];
  13. srand(time(NULL));
  14. for(i=0 ; i<n ; i++) 
  15.  vrai = 1; 
  16.  while (vrai) 
  17.  { 
  18.   var = rand()%n; 
  19.   for(j=0 ; j<i && var != tab[j] ; j++); 
  20.   if (i == j) 
  21.    vrai = 0; 
  22.  }
  23.  tab[i] = var;
  24. for (i = 0 ; i<n ; i++)
  25.  printf("%5d", tab[i]);
  26. }


Message édité par moi23372 le 14-03-2005 à 18:11:54
n°1012409
Taz
bisounours-codeur
Posté le 14-03-2005 à 18:19:04  profilanswer
 

# time_t time (time_t *timer);
# void srand (unsigned int);
# int rand (void);
 
 ?

n°1012487
Emmanuel D​elahaye
C is a sharp tool
Posté le 14-03-2005 à 19:32:32  profilanswer
 

moi23372 a écrit :

J'ai envoyé le code par msg privé qui est nettement plus court et testé sous MS VISUAL STUDIO 6.0
 

Code :
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <time.h>
  4. #define MAX = 10
  5. time_t time (time_t *timer);
  6. void srand (unsigned int);
  7. int rand (void);
  8. void main ()
  9. {
  10. int n = MAX;
  11. int i, j, var, vrai;
  12. int tab[MAX];
  13. srand(time(NULL));
  14. for(i=0 ; i<n ; i++) 
  15.  vrai = 1; 
  16.  while (vrai) 
  17.  { 
  18.   var = rand()%n; 
  19.   for(j=0 ; j<i && var != tab[j] ; j++); 
  20.   if (i == j) 
  21.    vrai = 0; 
  22.  }
  23.  tab[i] = var;
  24. for (i = 0 ; i<n ; i++)
  25.  printf("%5d", tab[i]);
  26. }



 

  • A quoi servent les prototypes ajoutés
  • la macro est fausse (et inutile)
  • main() retourne int
  • srand() attend un unsigned int
  • génération pauvre de nombre pseudo
  • manque un "\n" pour terminer la ligne émise.


Sinon, c'est vrai que l'algo est plus compact.


Message édité par Emmanuel Delahaye le 14-03-2005 à 19:33:26

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [C] Probleme nombres aléatoires tous differents

 

Sujets relatifs
[resolu] Probleme ASP/FREE sur un album de photosPlusieurs problème en css
Problème de LoadLibrary (erreur 2)probleme de fonction
[MSSQL]Problème pour requete et connexion à une base MSSQLprobleme ANT
Probleme de comparaison #2 [resolu][resolu]Probleme de comparaison
Problème sur une boucle[SESSION] Probleme de log out
Plus de sujets relatifs à : [C] Probleme nombres aléatoires tous differents


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR