IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Fonction randomize en c


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 131
    Par défaut Fonction randomize en c
    Bonjour, en fait je suis novice en C : mon probleme est le suivant :

    je voudrai écrire une matrice qui calcule aléatoirement des probabilités , bien entendu les valeurs seront entre 0 et 1.
    1. il faut que ma ligne soit égal à 1, donc si ma fonction me donne une première valeur (ex : 0.2) il faut que la fonction après me donne une valeur aléatoire entre (0 et 0.8) , pour cela j'ai utlisé deux float max et min, .... resultat ça marche pas. parceque la fanction prédifinie en C randomize que j'ai utilisé ne prend pas comme parmetre le max et le min.

    je vous envois un fragment de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    int main(void) { 
    //int my_rand ();
    FILE *f= NULL; 
    int  nbr_trans, nbr_seq; 
    int  i, j, l, m, vec;
    float min=0;
    float max=1;
    //int calcul();
    float my_rand();
    float k, maxim, y;
    float temp=0;
    float  pTab[100][100]; 
    //**********************************
     f = fopen("hmm.txt", "r");
     
    printf("entrez le nombre Etats :");
    scanf("%d", &nbr_trans);
    printf("Les probabilités  : \n");
     
    fprintf(f, "La matrice  : \n");
    fprintf(f, " \n");       
    for (j=0;j<nbr_trans; j++) {
    for (i=0;i<nbr_trans; i++) {
     
        max=max-temp;  
        k=my_rand(max, min);
        printf ("%f\n", k);  
        pTab[i][j]= k;
        temp=temp+pTab[i][j];
     
          fprintf(f, "\t%f", pTab[i][j]);
     
     
    	fflush(stdin);
    }
      fprintf(f, "\n");
     
    }
     
    float my_rand (max, min){
     
       static int first = 0;
     
       if (first == 0)
       {
          srand (time (NULL));
          first = 1;
       }
       //return rand();
       return (float)rand() / ((float)RAND_MAX + 1.0) ;
       //return (float)(min + ((float) rand ()/((float)(RAND_MAX)+1.0)* (max - min+1)));
    }


    en fait , je ne sais pas si randomize ou autre fonction pourra me donner un resultat

    en fait moi je voudarai dans mon code un resultat comme :

    nombre d'états = 5

    0.2 0.0 0.2 0.0 0.6
    0.1 0.2 0.3 0.0 0.4
    0.9 0.0 0.1 0.0 0.0
    0.0 0.2 0.2 0.4 0.4
    0.0 0.2 0.2 0.0 0.6


    si vous avez remarquer la ligne elle est égal à 1
    la fonction randomize ou rand() me donne les valeurs aléatoire en fonction de mon max qu'il décrémente à chaque valeur aléatoire .... est-je suis clair ?
    j'avais juste oublié de dire, je vous remercie de votre interet, même une idée pour m'arranger ... !

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Je ne comprends pas ce que tu veux.

    Ta fonction my_rand() actuelle n'a rien à faire d'un max ou un min, elle retourne simplement une valeur comprise entre 0 et 1...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 131
    Par défaut re
    Citation Envoyé par Médinoc Voir le message
    Je ne comprends pas ce que tu veux.
    merci Médinoc

    justement j'ai pas pu faire un traitement dans la fonction my rand; ou je peu utiliser le max et le min.

    au début j'ai utilisé les entier ça marche; mais quand j'ai fait mon interval entre [0,1] je peu que retourné ma fonction en float .... suis-je explicite ?

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Ontolingua Voir le message
    la fanction prédifinie en C randomize
    Il n'y a pas de "fonction prédéfinie en C randomize()". Il y a srand() (intialisation, donc à appeler une seule fois) et rand().

    http://emmanuel-delahaye.developpez.com/notes.htm#rand

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 487
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    En borlande turbo C la fonction randomize() existe
    Oui, et ?

  6. #6
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 487
    Par défaut
    Citation Envoyé par Ontolingua Voir le message
    Bonjour, en fait je suis novice en C : mon probleme est le suivant :

    je voudrai écrire une matrice qui calcule aléatoirement des probabilités , bien entendu les valeurs seront entre 0 et 1.
    1. il faut que ma ligne soit égal à 1, donc si ma fonction me donne une première valeur (ex : 0.2) il faut que la fonction après me donne une valeur aléatoire entre (0 et 0.8) , pour cela j'ai utlisé deux float max et min, .... resultat ça marche pas. parceque la fanction prédifinie en C randomize que j'ai utilisé ne prend pas comme parmetre le max et le min.

    je vous envois un fragment de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    int main(void) { 
    //int my_rand ();
    FILE *f= NULL; 
    int  nbr_trans, nbr_seq; 
    int  i, j, l, m, vec;
    float min=0;
    float max=1;
    //int calcul();
    float my_rand();
    float k, maxim, y;
    float temp=0;
    float  pTab[100][100]; 
    //**********************************
     f = fopen("hmm.txt", "r");
     
    printf("entrez le nombre Etats :");
    scanf("%d", &nbr_trans);
    printf("Les probabilités  : \n");
     
    fprintf(f, "La matrice  : \n");
    fprintf(f, " \n");       
    for (j=0;j<nbr_trans; j++) {
    for (i=0;i<nbr_trans; i++) {
     
        max=max-temp;  
        k=my_rand(max, min);
        printf ("%f\n", k);  
        pTab[i][j]= k;
        temp=temp+pTab[i][j];
     
          fprintf(f, "\t%f", pTab[i][j]);
     
     
    	fflush(stdin);
    }
      fprintf(f, "\n");
     
    }
     
    float my_rand (max, min){
     
       static int first = 0;
     
       if (first == 0)
       {
          srand (time (NULL));
          first = 1;
       }
       //return rand();
       return (float)rand() / ((float)RAND_MAX + 1.0) ;
       //return (float)(min + ((float) rand ()/((float)(RAND_MAX)+1.0)* (max - min+1)));
    }


    en fait , je ne sais pas si randomize ou autre fonction pourra me donner un resultat

    en fait moi je voudarai dans mon code un resultat comme :

    nombre d'états = 5

    0.2 0.0 0.2 0.0 0.6
    0.1 0.2 0.3 0.0 0.4
    0.9 0.0 0.1 0.0 0.0
    0.0 0.2 0.2 0.4 0.4
    0.0 0.2 0.2 0.0 0.6


    si vous avez remarquer la ligne elle est égal à 1
    la fonction randomize ou rand() me donne les valeurs aléatoire en fonction de mon max qu'il décrémente à chaque valeur aléatoire .... est-je suis clair ?
    j'avais juste oublié de dire, je vous remercie de votre interet, même une idée pour m'arranger ... !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>
    #include <conio.h>
     
    int main(void)
    {
       clrscr();
       float t[10][10];
       float y;
       int x,i,max;
       randomize();
       float ligne;
       for(int j=0;j<10;j++){
    	max =11;
    	ligne=0;
    	for( i =0;i<10 ;i++){
    	    if(max<0)max=0;
    	    x=random(max);
    	   y=x * 0.1;
    	   ligne=ligne+y;
    	   t[i][j]=y;
    	   max=max-x;
       }
    	}
         for( j=0;j<10;j++){
     
    	for( i =0;i<10 ;i++){
    	printf("%.1f   ",t[i][j]);
    	}
    	printf("\n");
    }
       getch();
       return 0;
    }

  7. #7
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par dot-_-net Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #include <conio.h>
     
    int main(void)
    {
       clrscr();
    Pas portable et inutile...
    Citation Envoyé par dot-_-net Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
       for(int j=0;j<10;j++){
     
    }
    Pas du C90.

    Quel interêt de poster du code non portable pour cet exemple ?

    Ceci compile partout (à condition de récupérer le header manquant):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    /* http://delahaye.emmanuel.free.fr/clib/ed/inc/random */
    #include "ed/inc/random.h"
     
    #include <stdio.h>
     
    int main (void)
    {
       float t[10][10];
       float y;
       int x, i, max;
       float ligne;
       int j;
       randomize ();
       for (j = 0; j < 10; j++)
       {
          max = 11;
          ligne = 0;
          for (i = 0; i < 10; i++)
          {
             if (max < 0)
                max = 0;
             x = random (max);
             y = x * 0.1;
             ligne = ligne + y;
             t[i][j] = y;
             max = max - x;
          }
       }
       for (j = 0; j < 10; j++)
       {
     
          for (i = 0; i < 10; i++)
          {
             printf ("%.1f   ", t[i][j]);
          }
          printf ("\n");
       }
       return 0;
    }
    Au fait, pourquoi un type float, alors que tout est fait en double ?

  8. #8
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 487
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Pas du C90.
    for(int j=0;j<10;j++){

    }
    Oui c’est pas du C 90 .
    Et pour la déclaration il peut la déclarer au début du programme

  9. #9
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par dot-_-net Voir le message
    Et pour la déclaration il peut la déclarer au début du programme
    C'est quoi le 'début du programme' ?. Avant C99, les variables locales doivent être définies en début de bloc. Point.

  10. #10
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 487
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Pas portable et inutile...

    Pas du C90.

    Quel interêt de poster du code non portable pour cet exemple ?

    Ceci compile partout (à condition de récupérer le header manquant):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    /* http://delahaye.emmanuel.free.fr/clib/ed/inc/random */
    #include "ed/inc/random.h"
     
    #include <stdio.h>
     
    int main (void)
    {
       float t[10][10];
       float y;
       int x, i, max;
       float ligne;
       int j;
       randomize ();
       for (j = 0; j < 10; j++)
       {
          max = 11;
          ligne = 0;
          for (i = 0; i < 10; i++)
          {
             if (max < 0)
                max = 0;
             x = random (max);
             y = x * 0.1;
             ligne = ligne + y;
             t[i][j] = y;
             max = max - x;
          }
       }
       for (j = 0; j < 10; j++)
       {
     
          for (i = 0; i < 10; i++)
          {
             printf ("%.1f   ", t[i][j]);
          }
          printf ("\n");
       }
       return 0;
    }
    Au fait, pourquoi un type float, alors que tout est fait en double ?
    1) ce code n’est pas portable car j’ai ajouté la fonction randomize a la suite de la demande de Ontolingua

    2) for(int j=0 ;j<10 ;j++){ je l’ai compiler sous un compilateur de borlonde C++ c’est pour cela qu’il n’as pas signaler erreur + c’est pas une erreur

    3) dans toutes tes remarques je vois aucune remarque qui mérite d’être réclamer

  11. #11
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par dot-_-net Voir le message
    1) ce code n’est pas portable car j’ai ajouté la fonction randomize a la suite de la demande de Ontolingua
    Faut pas céder à tous les caprices des questionneurs, ou alors le faire de manière la plus portable possible...
    2) for(int j=0 ;j<10 ;j++){ je l’ai compiler sous un compilateur de borlonde C++ c’est pour cela qu’il n’as pas signaler erreur + c’est pas une erreur
    Hum. Compiler un code écrit en C avec un compilateur C++ est une erreur. Point. Ce sont des langages différents.

    http://david.tribble.com/text/cdiffs.htm

    3) dans toutes tes remarques je vois aucune remarque qui mérite d’être réclamer
    C'est bien ça le problème...

  12. #12
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 487
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Faut pas céder à tous les caprices des questionneurs, ou alors le faire de manière la plus portable possible...

    Hum. Compiler un code écrit en C avec un compilateur C++ est une erreur. Point. Ce sont des langages différents.

    http://david.tribble.com/text/cdiffs.htm


    C'est bien ça le problème...
    Le C c’est le noyau du C++
    Le prof a toujours compilé les codes qui a écrit en C dans un compilateur C++
    + le C++ connaît presque toutes les fonctions qui ce trouve dans le compilateur C alors :
    Le C et le C++ ne sont pas des langages différent

Discussions similaires

  1. [Forth] Fonction random
    Par kamfezz dans le forum Autres langages
    Réponses: 3
    Dernier message: 16/04/2023, 14h33
  2. [Fortran 77] Fonction random
    Par ajsd0208 dans le forum Fortran
    Réponses: 1
    Dernier message: 15/07/2005, 12h58
  3. [LG]Utilisation de la fonction Random
    Par chloe95 dans le forum Langage
    Réponses: 1
    Dernier message: 01/03/2005, 14h20
  4. [LG]Fonction random
    Par platoon5 dans le forum Langage
    Réponses: 16
    Dernier message: 22/02/2005, 20h47
  5. Fonction Random en Assembleur
    Par chidi dans le forum Assembleur
    Réponses: 5
    Dernier message: 21/05/2004, 10h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo