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


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

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

    Informations forums :
    Inscription : Mars 2017
    Messages : 67
    Par défaut Problème de tableau
    Bonjour, j'espère que vous allez bien.

    J'ai essayer de réaliser un petit programme vraiment tout simple et pourtant je n'y suis pas arriver...

    mon bût était de créer un Tableau de deux dimension de 5*4 qui va recevoir une lettre de a à z en minuscule pour remplir les lignes du tableau
    et une lettre Majuscule de A à Z pour remplir les colonnes du Tableau.

    j'ai d'abord écris ce programme en pseudo code avant d'essayer de le coder sur codeblocks.. mais mon résultat n'est pas du tout correcte ...
    j'aurai aimer y placer des chaînes de caractère complète pour entrer des noms mais je ne sais pas encore comment faire alors j'ai commencer
    par petit en placent juste une lettre Min/Maj et en affichant le résultat mais qui n'est pas celui que j'attendais ...

    Voici le 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
     
     
    #include <iostream>
     
    using namespace std;
     
     
    int main()
    {
        int i = 0,j = 0;
        char Nom[4][5];
     
        cout <<"Bienvenu(e) dans notre programme de Tableau Min/Maj " <<endl<<endl<<endl;
     
        for (i = 0; i < 4; i++)
        {
            cout <<"Veuillez entrer une Lettre de a à z en minuscule : " <<endl;
            cin >> Nom[i];
        }
        for (j = 0; j < 5; j++)
        {
            cout <<"Veuillez entrer un lettre de A à Z en majuscule : " <<endl;
            cin >> Nom[j];
     
        }
     
        for (i = 0; i < 4; i++)
        {
            cout <<"Voici le résultat Min : " <<Nom[i] <<endl<<endl;
        }
        for (j = 0; j < 5; j++)
        {
            cout <<"Voici le résultat Maj : " <<Nom[j] <<endl<<endl;
        }
     
     
        cout <<"Fin du programme " <<endl;
     
     
        return 0;
    }
    Le comportement du Tableau ne me renvoie pas les bonne valeur pour le Tableau des lignes (Min)
    par contre il me renvoie bien les bonnes valeurs pour les colonnes (Maj) , mais il place les valeurs des
    colonne aussi dans le Tableau ou ce trouve les lignes...

    Et je n'arrive pas à comprendre pourquoi il adopte ce comportement ...

    Je vous remercie d'avance pour vos éclaircissement.

    Aigle-Royal

  2. #2
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 766
    Par défaut
    Citation Envoyé par Aigle-Royal Voir le message
    mais mon résultat n'est pas du tout correcte ...
    C'est un problème de mathématiques une matrice ou un tableau à 2 dimensions

    Lorsque tu déclare ton tableau 2D ainsi XXX[4][5], tu crées un tableau avec 4 lignes et 5 colonnes (soit 20 valeurs)
    Et pour accéder à une case, tu es obligé de renseigner la ligne ET la colonne

    Que crois-tu aller chercher comme valeur avec XXX[i] ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

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

    Informations forums :
    Inscription : Mars 2017
    Messages : 67
    Par défaut Réponse à Foetus.
    Ok merci Foetus je penses avoir compris ...

    donc avec Nom[i] je ne vais chercher que les valeurs des lignes mais vu qu'il faut renseigné ligne et colonne pour avoir une case
    je n'aurais pas les valeurs que j'ai insérer dans la ligne non plus alors si j'ai bien compris ...

    Aigle-Royal

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

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

    Informations forums :
    Inscription : Mars 2017
    Messages : 67
    Par défaut Petite question.
    Bonjour à tous, j'espère que vous allez bien.

    Je souhaite écrire un Tableau de 2*5 qui va entrée des données de type caractère...

    Et j'aimerai bien à la fin Afficher le résultat :

    Exemple case n°1 j'entre chats, case n°2 j'entre chiens, case n°3 Olive etc...
    et j'aimerai ensuite que l'utilisateur vois à l'écran, vous avez entrer à la case numéro 1 chats,
    à la case numéro 2 chiens, à la case numéro3 Olive et ceci pour les 10 valeurs.

    Mais je me retrouve face à une soucis les indices prenne lettre par lettre et non une chaîne de caractère en entier.
    je n'arrive donc pas à afficher le résultat que je veux j'arrive juste à afficher lettre par lettre , j'ai donc essayer
    plusieurs façon pour arriver au résultat que je veux mais je n'y suis jamais arriver.

    Donc ma question est la suivante : est-ce que je peut créer ce tableau avec les bases que j'ai actuellement : en d'autre terme : Variables,Tests,Boucles,Tableaux, Fonctions, je n'ai pas encore acquis les pointeurs ...

    ou est-ce que je dois encore avancer plus dans la matière pour parvenir à cela ? Car ça fait deux jours que je bloque la dessus et n'arrive pas du tout
    à ce que je veux ...

    Je vous remercie de votre réponse et je vous souhaite une excellente journée.

    Aigle-Royal.

  5. #5
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Bonjour,

    Tu parles de tableaux de 2*5 caractères. Puis tu veux mettre "chat" dans une case. Si une case est un caractère tu ne pourras y mettre les 5 caractères nécessaires pour écrire "chat". Pour écrire des chaines, il faut au tableau de caractères. Donc ici il te faut un tableau de 2 tableaux de 5 tableaux d'environ 10 caractères, ça s'écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char  tableau[2][5][10];
    donc dans chaque case du tableau[j][i] tu pourras mettre un mot qui pourra avoir une longueur de 0 à 9 caractères.

  6. #6
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Ceci étant dit, l'idéal est toujours d'utiliser std::string (ou, à tout le moins, une des spécialisation de std::basic_string) pour représenter les chaines de caractères.

    A moins que tu ne sois vraiment sur que la taille de tes chaines de caractères n’excéderont JAMAIS un certain nombre de de caractères, commencer à travailler avec des tableaux de tailles fixe pour les représenter ne fera que te compliquer la vie inutilement.

    De la même manière, au lieu de travailler avec des tableaux C style, qu'il soient de taille fixe ou non, tu aurais sans doute intérêt à travailler avec l'une des collections fournies par la bibliothèque standard (std::array, si le nombre d'éléments à représenter est défini une bonne fois pour toute à la compilation, std::vector si le nombre d'éléments à représenter peut varier en cours d'exécution).


    Au final, si tu veux pouvoir représenter une matrice de 5 lignes composées de 5 colonnes contenant des chaines de caractères, un code proche de
    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
    #include <array> 
    #include <string> 
    #include <iostream>
    using lines = std::array<std::string, 4>; // 4 chaines de caractères (colonne) par ligne
    using matrix = std::array<lines, 5>; // 5 linges par matrice
     
    int main(){
        matrix m;
        for(int i=0;i<5;++i){
            for(int j= 0; j < 4; ++j){
                std::string temp{"chaine "};
                temp.append(std::to_string(i))
                    .append(",")
                    .append(std::to_string(j));
                m[i][j]=temp;
            }
    	}
    	for(auto const & i : m){
    			for(auto const & j:i)
    			 std::cout<< j<<" ";
    		 std::cout<<"\n";
    	}
    }
    qui affichera
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    a.exe
    chaine 0,0 chaine 0,1 chaine 0,2 chaine 0,3
    chaine 1,0 chaine 1,1 chaine 1,2 chaine 1,3
    chaine 2,0 chaine 2,1 chaine 2,2 chaine 2,3
    chaine 3,0 chaine 3,1 chaine 3,2 chaine 3,3
    chaine 4,0 chaine 4,1 chaine 4,2 chaine 4,3
    Note au passage que tu pourrais d'ailleurs avoir un certain intérêt à "linéariser" ta matrice; l'idée étant que si tu veux avoir une matrice de L lignes et de C colonnes, tu veux forcément pouvoir représenter L*C éléments, et qu'il est donc peut-être utile de les représenter directement dans un tableau à une seule dimention.

    L'accès aux différents élément se faisant alors selon la formule indice_recherché = numéro_ligne * C + numéro_colonneTu pourrais donc créer une classe matrice proche de
    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
    #include <array> 
    #include <string> 
    #include <iostream>
    #include <cassert>
    class Matrix{
    private:
        static constexpr size_t lines_{5};
    	static constexpr size_t rows_{4};
    	using array = std::array<std::string, lines_*rows_>;
    public:
        std::string const & operator()(size_t line, size_t row) const{
    		assert(line < lines_ && "line out of bound");
    		assert(row  < rows_ && "row out of bound");
    		return datas_[line * rows_ + row];
    	}
        std::string  & operator()(size_t line, size_t row) {
    		assert(line < lines_ && "line out of bound");
    		assert(row  < rows_ && "row out of bound");
    		return datas_[line * rows_ + row];
    	}
    	using iterator = typename array::iterator;
    	using const_iterator = typename array::const_iterator;
    	iterator begin(){
    		return datas_.begin();
    	}
    	iterator end(){
    		return datas_.end();
    	}
    	const_iterator begin() const{
    		return datas_.begin();
    	}
    	const_iterator end() const{
    		return datas_.end();
    	}
    	size_t rows() const{
    		return rows_;
    	}		
    	size_t lines() const{
    		return lines_;
    	}		
    private:
    	array datas_;
    };
     
    int main(){
        Matrix m;
        for(int i=0;i<5;++i){
            for(int j= 0; j < 4; ++j){
                std::string temp{"chaine "};
                temp.append(std::to_string(i))
                    .append(",")
                    .append(std::to_string(j));
                m(i,j)=temp;
            }
    	}
    	size_t pos=0;
    	for(auto const & s : m){
    		std::cout<< s<<" ";
    		++pos;
    		if(pos == m.rows()){
    			std::cout<<"\n";
    			pos = 0;
    		}
    	}
    }
    qui produirait une sortie tout à fait équivalente

    note, enfin, que l'on pourrait encore s'amuser à rendre cette matrice plus générique, en permettant de définir le nombre de lignes, le nombre de colonnes, et même le type des données qui seront représentées, mais ca, ce sera pour plus tard
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Débutant en Javascript : problème de tableau !
    Par bluheim dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 06/11/2005, 15h03
  2. [XHTML] problème de tableau
    Par virgul dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 28/04/2005, 07h18
  3. Problème de tableau
    Par tom06440 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 26/04/2005, 20h30
  4. Problème de tableau
    Par krfa1 dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 08/02/2005, 11h09

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