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 :

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


Sujet :

C++

  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 4
    Points : 5
    Points
    5
    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 : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 90
    Points : 143
    Points
    143
    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
    Futur Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 4
    Points : 5
    Points
    5
    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
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    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
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Membre actif
    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 : 233
    Points
    233
    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 éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    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.
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  7. #7
    Futur Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 4
    Points : 5
    Points
    5
    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 éclairé

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Points : 877
    Points
    877
    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

Discussions similaires

  1. Compter nombre de répétitions des valeurs dans un tableau
    Par tabrouri2000 dans le forum Collection et Stream
    Réponses: 16
    Dernier message: 21/03/2021, 20h47
  2. Compter nombre de répétitions d'une lettre dans un texte saisi
    Par tabrouri2000 dans le forum Général Java
    Réponses: 2
    Dernier message: 09/07/2011, 02h10
  3. Réponses: 3
    Dernier message: 26/10/2010, 22h14
  4. Manipulation des valeurs contenues dans un tableau
    Par khasanouray dans le forum Langage
    Réponses: 3
    Dernier message: 29/05/2007, 20h36
  5. Compter nombre d'éléments avec valeur X dans un formulaire
    Par p0Kep0K dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 24/11/2005, 15h49

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