Précédent   Forum du club des développeurs et IT Pro > C et C++ > C++
C++ Forum d'entraide technique sur le langage C++. Avant de poster -> F.A.Q C++
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 30/12/2012, 16h51   #1
fouadissam
 
fouad issam
Inscription : décembre 2010
Messages : 4
Détails du profil
Informations personnelles :
Nom : fouad issam

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 :
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
fouadissam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2012, 17h51   #2
zhouyu
Membre habitué
 
Avatar de zhouyu
 
Homme Loïc
Étudiant
Inscription : octobre 2009
Messages : 83
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2009
Messages : 83
Points : 129
Points : 129
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.
zhouyu est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 30/12/2012, 18h12   #3
fouadissam
 
fouad issam
Inscription : décembre 2010
Messages : 4
Détails du profil
Informations personnelles :
Nom : fouad issam

Informations forums :
Inscription : décembre 2010
Messages : 4
Points : -1
Points : -1
alors il faut utilser autre methode si ilya qlq un peut aider stp je suis bloquer ici
pour terminer la 2 partie trace graphe
fouadissam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2012, 10h02   #4
Bousk
Modérateur
 
Homme Cyrille
Network programmer
Inscription : juin 2010
Messages : 1 546
Détails du profil
Informations personnelles :
Nom : Homme Cyrille
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Network programmer

Informations forums :
Inscription : juin 2010
Messages : 1 546
Points : 4 084
Points : 4 084
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
Bousk est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 31/12/2012, 14h34   #5
EtherOS
Membre habitué
 
Avatar de EtherOS
 
Homme Lionel Tidjon
Etudiant Polytechnicien
Inscription : juillet 2012
Messages : 51
Détails du profil
Informations personnelles :
Nom : Homme Lionel Tidjon
Localisation : Cameroun

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

Informations forums :
Inscription : juillet 2012
Messages : 51
Points : 110
Points : 110
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 :
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;
}
EtherOS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2012, 14h52   #6
r0d
Expert Confirmé Sénior
 
Inscription : août 2004
Messages : 3 667
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : août 2004
Messages : 3 667
Points : 4 428
Points : 4 428
Bonjour,

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

1.
Code :
float freq[1000],nbr[1000];
c'est le mal. Préférer:
Code :
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 :
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.
r0d est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/01/2013, 15h43   #7
fouadissam
 
fouad issam
Inscription : décembre 2010
Messages : 4
Détails du profil
Informations personnelles :
Nom : fouad issam

Informations forums :
Inscription : décembre 2010
Messages : 4
Points : -1
Points : -1
freq[nbr[pos++]]++;

pb de idice flottant
jai idee pour
chage les valeur *10000
mais tjr reste pb
affictaion
invalid type
fouadissam est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 01/01/2013, 18h03   #8
PilloBuenaGente
Membre éclairé
 
Homme
Interimaire
Inscription : décembre 2012
Messages : 204
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Maine et Loire (Pays de la Loire)

Informations professionnelles :
Activité : Interimaire

Informations forums :
Inscription : décembre 2012
Messages : 204
Points : 302
Points : 302
Salut ! Pas testé mis peut être qu'avec un truc du genre :
Code :
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 :
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 :
1
2
3
4
 
nbrOfRepet(0); //Nombre de flaot différents
memFloat[1000]; //Les float
repet[1000]; //Le nombre de repetitions
PilloBuenaGente est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 15h51.


 
 
 
 
Partenaires

Hébergement Web