+ Répondre à la discussion
Affichage des résultats 1 à 8 sur 8
  1. #1

    Inscrit en
    décembre 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : décembre 2010
    Messages : 4
    Points : -1
    Points
    -1

    Par défaut Compter nombre de répétitions des valeurs reel dans un tableau

    salut
    j ai genre nombre aléatoire selon loi exponentiel les valeur entre 0.0001 et 4.999

    j'ai besoin de Compter nombre de répétitions des valeurs reel

    pour les entier cette methode marche
    mais pour reel je sais pas
    voila le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    float  freq[1000],nbr[1000];
     for( int i=0;i<1000;i++)  nbr[i]=0;
        srand(time(0));
        cout << fixed  << setprecision(4);
        for ( n =0.0001 ; n < 4.999 ;n++ ){
     
     
      nbr[n]=Exponential(1);
      freq[nbr[n]]++;
    }
    les erreur 34 C:\Dev-Cpp\main.cpp invalid types `float[1000][float]' for array subscript

    si il y a autre methode donne moi essentielle les valeur reel dans nbr[n] et le problème comment obtenirnombre de répétitions des valeurs pour tracer le graphe j'ai bloquer

  2. #2
    Membre habitué Avatar de zhouyu
    Homme Profil pro
    Étudiant
    Inscrit en
    octobre 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : octobre 2009
    Messages : 90
    Points : 134
    Points
    134

    Par défaut

    Salut.
    Ton message fait mal aux yeux et utilise la balise CODE pour le code...
    Pas besoin d'écrire en gros par ailleur...

    Les indices de tableaux sont toujours des entiers positifs.

  3. #3

    Inscrit en
    décembre 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : décembre 2010
    Messages : 4
    Points : -1
    Points
    -1

    Par défaut

    alors il faut utilser autre methode si ilya qlq un peut aider stp je suis bloquer ici
    pour terminer la 2 partie trace graphe

  4. #4
    Modérateur

    Homme Profil pro
    Network programmer
    Inscrit en
    juin 2010
    Messages
    2 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France

    Informations professionnelles :
    Activité : Network programmer

    Informations forums :
    Inscription : juin 2010
    Messages : 2 629
    Points : 7 341
    Points
    7 341

    Par défaut

    Bonjour,

    Merci de
    - utiliser les balises code
    - utiliser un français avec des phrases compréhensibles
    - ne pas abuser de la "mise en page"

    Enfin j'ajouterais de (re)voir un cours de base.
    ++ est une incrementation, ce qui signifie "ajouter 1"
    Utiliser un double en index de tableau ?! Wtf
    Que vient faire un srand ? dans la boucle ?
    Dev-cpp est plus que largement obsolete

  5. #5
    Membre confirmé
    Avatar de EtherOS
    Homme Profil pro
    Etudiant Polytechnicien
    Inscrit en
    juillet 2012
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Etudiant Polytechnicien
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juillet 2012
    Messages : 58
    Points : 210
    Points
    210

    Par défaut Proposition

    généralement ce genre de calcul est très evident avec MATLAB mais puisqu'on est en c++ on va faire avec :

    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    /*Utiliser  les tableaux dynamiques et non les tableaux 
    statiques pour freq   et nbr (la mémoire coute chère) */
    
     // Envoie moi ton énoncé
     // Ce Programme n'est pas éfficient en terme de temps d'éxecution(~ 8s) et en compléxité O(n.k)
    
    
    #include <iostream>
    #include <iomanip>
    #include <cstdlib>
    #include <ctime>
    #include <cmath>
    
    
    #define BUFFER 1000
    
    using namespace std;
    
    
    float Exponential(int mean)
    {
    	//Generate a random number between 0 and 1.
    	//REMEMBER: Always cast the oparands of a division to float, or truncation will be performed.
        float R;
    
    	R = (float)rand()/(float)(RAND_MAX+1);
    
    	//Put it as a parameter to the inverse distribution function.
    	return  -mean*log(R);
    }
    
    int main()
    {
    
       float *freq = new float[BUFFER],*nbr = new float[BUFFER];
    
       for( int i=0;i<BUFFER;i++)
       {
         nbr[i]=0;
        }
    
        srand(time(0));
    
        cout << fixed  << setprecision(4);
    
        float n =0.0001 , m = 0.0000;
    
        int pos = 0,next = 0 ;
    
        while( n < 4.999)
        {
           nbr[pos++]=Exponential(1);
    
           while(m <=nbr[pos++])
           {
            next++; // next est l'entier le plus proche de nbr[next]
            m++;
           }
          freq[next]++;
           n++;
        }
        std::cout <<freq[next]<<"\n";
    
        delete freq;
        delete nbr;
    
        system("PAUSE");
        return 0;
    }

  6. #6
    r0d
    r0d est déconnecté
    Expert Confirmé Sénior

    Profil pro
    Inscrit en
    août 2004
    Messages
    4 158
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : août 2004
    Messages : 4 158
    Points : 5 873
    Points
    5 873

    Par défaut

    Bonjour,

    je ne sais pas ce que vous essayer d'implémenter, mais:

    1.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    float freq[1000],nbr[1000];
    c'est le mal. Préférer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    std::vector<double> frequencies;
    std::vector<double> numbers;
    i. Préférer les conteneurs de la stl plutôt que des "c-style" array
    ii. Si le nombre d'éléments que l'on va insérer dans ces tableaux est connu, utiliser la fonction membre reserve() de la classe vector.
    iii. Préférer l'utilisation des doubles sur les float (gotw #67).
    iv. utiliser des noms de variables explicites
    v. une chose par ligne (même les déclarations de variables).

    2. Cette ligne de code est une abomination.
    i. elle ne peut pas fonctionner: le tableau nbr est un tableau de flottant! Vous essayez d'accéder à un élément du tableau avec un indice qui est un flottant là!
    ii. cette ligne fais plusieurs choses à la fois, avec des effets de bords que vous ne maîtrisez certainement pas. Préférer quelque chose comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int index = (int) number[pos];
    double my_number = numbers[index];
    ++pos;
    Le code que j'ai écris là n'a aucun sens (je ne sais pas ce que vous voulez faire), mais c'est pour montrer qu'il ne faut faire qu'une seule chose par ligne, c'est une des règles primordiales du développement logiciel.

  7. #7

    Inscrit en
    décembre 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : décembre 2010
    Messages : 4
    Points : -1
    Points
    -1

    Par défaut

    freq[nbr[pos++]]++;

    pb de idice flottant
    jai idee pour
    chage les valeur *10000
    mais tjr reste pb
    affictaion
    invalid type

  8. #8
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2012
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : décembre 2012
    Messages : 411
    Points : 721
    Points
    721
    Billets dans le blog
    1

    Par défaut

    Salut ! Pas testé mis peut être qu'avec un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    float tabOfFloat[1000];
    int nbrOfFloat(1000);
     
    float memFloat[1000];//Stocker les nouveaux float dans un tableau
    int repet[1000];//Nombre de fois où ils seront répété
    int nbrOfRepet(0);//Nombre de nombre différents
     
    //INITIALISATION
    for(int i = 0; i < 1000; i++)  memFloat[i] = 0.0; // 0.0 pour des float à 0
    for(int i = 0; i < 1000; i++)  repet[i] = 0;
    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
     
    //RECHERCHE
    for(int numFloat = 0; numFloat < nbrOfFloat; numFloat++)
    {
        bool findNum(0);
        for(int numRepet = 0; (numRepet < nbrOfRepet && findNum == 0); numRepet++)
        {
            if(tabOfFloat[numFloat] == memFloat[numRepet])
            {
                repet[numRepet] += 1;
                findNum = 1;
            }
        }
        if(findNum == 0)
        {
            nbrOfRepet++;
            memFloat[nbrOfRepet] = memFloat[numFloat];
        }
    }
    tu devrais avoir le nombre de flaot et le nombre de fois répété.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    nbrOfRepet(0); //Nombre de flaot différents
    memFloat[1000]; //Les float
    repet[1000]; //Le nombre de repetitions