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 :

Problème de tableau pour un exercice en C++


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Mars 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 8
    Points : 1
    Points
    1
    Par défaut Problème de tableau pour un exercice en C++
    Bonjour, je suis étudiente en BTS informatique et j'ai des exercice a faire mais je ne suis pas vraiment douée.
    Je bloque sur un exercice dont le sujet est " Avec un tableau de valeur aléatoire ( ca j'ai fais ), écrire un programme C++ qui compte la fréquence d'apparition des nombres aléatoires et range les résultats dans un nouveau tableau dans lequel les indices font référence aux valeurs et les cellules contiennent les fréquences d'apparition. Le programme affiche le tableau aléatoire et le résultat.

    Et voila ce que j'ai deja fait:

    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
    #include <cstdlib>
    #include <iostream>
    #include <stdlib.h>
    #include <ctime>
     
    using namespace std;
     
    int main(int argc, char *argv[])
    {
     
        double tab1 [6] [4];
        const unsigned amorce = time(NULL);
        int max, min, plage;
        double tab2 [10] [2]= {0};
        int compteur = 0;
        int chiffre[10]= {0,1,2,3,4,5,6,7,8,9};   
        int m =0;
        int i=0;
     
     
        cout << " Entrez la valeur min: "<< endl;
        cin >> min;
        cout << " Entrez la valeur max: "<< endl;
        cin >> max;
        plage = max-min + 1;
        srand ( amorce );
        cout << "Generer des entiers compris entre " <<min << " et "<< max<< endl;
     
     
        for ( int i=0; i < 4;i++)
           {     for ( int j=0; j< 6; j++)
                     {  tab1[i][j] = rand() %plage + min;
                        cout<< tab1 [i] [j] <<"\t" ; }
                        cout << endl; } 
     
        cout << endl;      
     
     
        cout <<"  DETERMINATION DE LA FREQUENCE DES NOMBRES DU TABLEAU PRECEDENT  "<< endl;
     
       for ( int k = 0 ;k<10;k++)
      {cout<< chiffre[k] << "\t" ;}
     
     
            if (tab1[i][j] == chiffre[k])
               m=m++;
            cout << m << endl;
                   cout<<endl;
     
     
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    Merci d'avance pour votre aide.
    Pour le programme j'utilise Dev-C++


    [Balises CODE rajoutées par Loulou24, merci d'y penser à l'avenir]

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    C'est quoi la question ? Tu bloques sur quoi ?

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Mars 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Je bloque sur la deuxieme partie du probleme: calculé la frequence d'apparition des nombres du tableau 1 et les mettre dans le tableau 2.

  4. #4
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    C'est faire l'histogramme qui te gêne ?
    Problème de langage, d'algorithmie ou de maths ?
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Mars 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Ca serait plutot un probléme d'algorithme. car quand je compile il me dit que les valeur i j et k ne sont pas defini :

    for ( int k = 0 ;k<10;k++)
    {cout<< chiffre[k] << "\t" ;}


    (c'est a la ligne la que ca bloque) if (tab1[i][j] == chiffre[k])
    m=m++;
    cout << m << endl;
    cout<<endl;

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 90
    Points : 100
    Points
    100
    Par défaut
    Le compilateur a raison. Dans tes boucles for, les variables i, j et k n'existent qu'à l'intérieur des accolades. Il te faut donc créer de nouvelles boucles pour ne plus avoir le message d'erreur.

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Mars 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Mais si je les initialises elles n'auront plus les valeurs du tableau!

    En fait j'ai un premiere tableau avec des nombres aléatoire de 0 à 9:
    1 3 5 6 8 7
    7 6 3 0 1 3
    4 6 7 1 0 9
    3 6 8 7 0 2

    et j'aimerai un deuxieme tableau qui comptabilise le nombre de chiffres: par exemple il y a trois "1" dans le tableau et cela dans un nouveau tableau
    0 1 2 3 4 5 6...
    3 3 1 4 1 1...

    Et c'est sur ce deuxieme tableau que je bloque.
    Le probleme est mieux expliqué?

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 90
    Points : 100
    Points
    100
    Par défaut
    Si je comprends bien, tu bloques sur l'algorithme ?

    Je suppose que ton tableau d'effectifs est initialisé à 0 partout.

    Essaie d'analyser comment faire à la main :
    * On regarde chaque ligne
    * Dans chaque ligne, on regarde chaque élément
    * on incrémente la case du tableau d'effectifs correspondant à l'élément

    Tu devrais pouvoir t'en sortir avec 2 boucles for ; ton tableau chiffre me semble inutile.

  9. #9
    Nouveau Candidat au Club
    Inscrit en
    Mars 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Aaaahh je deviens dingue lol, décidement c pas mon fort.

    Dans les deux derniere boucle for je n'arrive pas a lire les tab1, comment je peux faire?
    Voila quand meme ce que j'ai essayer de faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
      cout <<"  DETERMINATION DE LA FREQUENCE DES NOMBRES DU TABLEAU PRECEDENT  "<< endl;
     
     
      for ( int k=0; k<2; k++)
      {   for (int l=0; l<10; l++)
          { if( tab1[i][j] = l);
             m=m++;
             tab2[i][j]=m;}
             k=k++;
         cout<< tab2 << "\t";
          }
            cout<<endl;}
    Je vois comment faire l'algo en francais mais je n'arrive pas a le transcrire en C++.
    En plus le prof nous a donné ca pendant les vacances et dem****er vous...

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 90
    Points : 100
    Points
    100
    Par défaut
    Houlala...

    D'abord, si tu n'as que des entiers à manipuler, utilise des int plutôt que des double.

    Le tableau tab1 a 4 lignes et 6 colonnes.
    Le tableau d'effectifs tab2 a 10 éléments (un tableau à 2 dimensions n'est pas nécessaire ici). Ce tableau doit être initialisé à 0 (les 10 éléments).

    Je vais indexer les lignes avec la variable i et les colonnes avec j.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for (int i=0;i<4;++i) {
     for (int j=0;j<6;j++) {
      // ...
     }
    }
    A la place des "...", il faut :
    * récupérer l'élément à la ligne i, colonne j : int e = tab1[i][j];
    * incrémenter l'effectif de cet élément : tab2[e]++;

    Il n'y a plus qu'à afficher le tableau.

    Il serait bon que tu comprennes pourquoi ton programme ne marche pas.
    Peut-être que tu as essayé de faire trop de choses en même temps. Prends le temps de bien décomposer le problème...

  11. #11
    Nouveau Candidat au Club
    Inscrit en
    Mars 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Non décidement c'est pas mon truc, c'est pas grave quand j'aurai les corrections du devoir je les mettrai sur le forum. Mais la ca fais trois jour que je suis dessus et ca me sort par le #¤$µ, lol.

    Merci à ceux qui ont essayé de m'aider.

  12. #12
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 556
    Points : 588
    Points
    588
    Par défaut
    J'ai compris ton problème, je ferais comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    int numOccurences( int *tableau, int num )
    {
       int ret;
       for( int i = 0; *tableau[i]; i++ )
       {
          if( ( *tableau[i] == num )
             ret++;
       }
       return ret;
    }
    Cette fonction va compter le nombre d'occurences de num il y a dans le tableau

    Ensuite, tu fais ta fonction qui va utiliser cette fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    int main()
    {
       int tableau[10] = { 1, 1, 3, 4, 2, 6, 2, 4, 9, 6 };
       int retTab[10];
       for( int i = 0; i < 10; i++ )
       {
          retTab[i] = numOccurences( tableau, i );
       }
       return 1;
    }
    C'est bien ce qu'il te faut?

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 90
    Points : 100
    Points
    100
    Par défaut
    Dans la solution de JulienDuSud, il faudra éviter de déréférencer les entiers

    Puisque mon explication n'était pas claire, voici du code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     int tab2[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
     
     for (int i=0;i<4;i++) {
      for (int j=0;j<6;j++) {
       int e = tab1[i][j];
       tab2[e]++;
      }
     }
    Maintenant, tab2 contient l'effectif de chaque chiffre.

  14. #14
    Nouveau Candidat au Club
    Inscrit en
    Mars 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Oula, lol. Alors je ne doute pas sur la veracité de ta proposition mais le probleme c'est que je ne comprend pas tout. Eh oui etant en 1ere année de BTS j'ai un niveau tres mais tres peu élevé. je crois que tu utilise des pointeur, non? Et si c'est ca on n'as pas encore fait.
    Désolée mais merci quand meme pour ta proposition.

  15. #15
    Nouveau Candidat au Club
    Inscrit en
    Mars 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Ah boromir merci c'est deja un peu plus clair!
    J'essaye...

Discussions similaires

  1. [Débutant] problème AnsiString tableau pour c++ builder
    Par dekalima dans le forum C++Builder
    Réponses: 17
    Dernier message: 02/09/2010, 09h25
  2. Exercice Tableau pour Java
    Par romain1 dans le forum Collection et Stream
    Réponses: 9
    Dernier message: 14/09/2008, 19h44
  3. Réponses: 3
    Dernier message: 11/01/2006, 17h44
  4. Problème tableau pour une requête
    Par LE NEINDRE dans le forum Langage
    Réponses: 2
    Dernier message: 07/10/2005, 20h21

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