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 :

[c++] remplir tableau de bool avec cin


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 32
    Par défaut [c++] remplir tableau de bool avec cin
    Bonjour,
    je veux faire un programme qui gere un tableau de bool (c'est comme un registre). il additionne (ORlogique) ou multiplie (AND logique) les "bits" du registre un par un. j'ai pu (normalement) developper tous les methodes sauf que j'ai pas su comme remplir les registre par clavier ou outres directement dans le main...

    voila mon header.h

    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<iostream.h>
     
    class registre
    {
    bool *tab ;
    int taille ;
    public :
    	registre(int n=8):taille(n) {}
    	registre(const registre & r)
    	{
    	taille=r.taille;
    	tab=new bool[taille];
    		for (int i=0 ; i<taille ;i++)
    			tab[i]=r.tab[i];
    	}
    //	~registre(){delete[]tab;} ;
    registre  operator*  (registre) ;
    registre  operator+  (registre) ;
    registre  operator<  (int) ;
    registre  operator>  (int) ;
    void affich () ;
    void remplir () ;
    } ;


    mon registre.cpp

    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    #include "header.h"
    #include <string.h>
     
    registre registre :: operator* (registre r)
    {	
     
     
    	if (taille > r.taille)
    	{
    		registre r1(taille);
     
    		for (int i=taille;i>r.taille;i--)
    		{
    			r1.tab[i] = tab[i] & 0;
    		}
     
    		for (int j=r.taille;j>0;j--)
    		{
    			r1.tab[j] = tab[j] & r.tab[j];
    		}
    		return r1;
    	}
     
     
    	else 
    	{
    		registre r2(r.taille);
     
    		for (int i=r.taille;i>taille;i--)
    		{
    			r2.tab[i] = r.tab[i] & 0;
    		}
     
    		for (int j=taille;j>0;j--)
    		{
    			r2.tab[j] = tab[j] & r.tab[j];
    		}
    		return r2;
    	}
     
    }
     
    registre registre :: operator+ (registre r)
    {
     
     
    	if (taille > r.taille)
    	{
    		registre r1(taille);
     
    		for (int i=taille;i>r.taille;i--)
    		{
    			r1.tab[i] = tab[i] | 0;
    		}
     
    		for (int j=r.taille;j>0;j--)
    		{
    			r1.tab[j] = tab[j] | r.tab[j];
    		}
    		return r1;
    	}
     
     
    	else 
    	{
    		registre r2(r.taille);
     
    		for (int i=r.taille;i>taille;i--)
    		{
    			r2.tab[i] = r.tab[i] | 0;
    		}
     
    		for (int j=taille;j>0;j--)
    		{
    			r2.tab[j] = tab[j] | r.tab[j];
    		}
    		return r2;
    	}
     
    }
     
    registre registre ::operator< (int n)
    {
    	for (int i=taille ; i<n ;i++)
    	{
    		for (int j=0 ; j< taille ; j++)
    		{
    			tab[j] = tab[j+1];
    		}
    		tab [taille] = 0;
    	}
    	return *this;
    }
     
    registre registre ::operator> (int n)
    {
    	for (int i=0 ; i<n ;i++)
    	{
    		for (int j=taille ; j< 0 ; j++)
    		{
    			tab[j+1] = tab[j];
    		}
    		tab [0] = 0;
    		}
    	return *this;
    }
     
    void registre ::affich()  // je pense que c'est comme ça , je suis pas sur !!
    {
    	for (int i=0;i<taille;i++)
    	{
     
    		if (tab[i]==true)
    			cout << "1";
    		else
    			cout << "0";
    	}
    }
     
    void registre ::remplir() // je pense que c'est comme ça , je suis pas sur !!
    {int a;
    	for (int i=0;i<taille;i++)
    	{
    		cin >> a;
    		if (a==0)
    			tab[i]=false;
    		else 
    			tab[i]=true;
    	}
     
    }


    mon main pas terminer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include "header.h"
    #include <string.h>
     
    void main() 
    {
    registre r2(15);
    registre r1= // ici comment on peut remplir l'objet directement ?
    r1.affich();
     
    }


    dans bcp des cas (j'ai essaye plusieur truc) je recois pas de erreurs de compliation mais le programme s'arrete et je recoit la fameuse ne pas envoyé de microsoft...

    merci.

  2. #2
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par défaut
    Tu peux surcharger l'opérateur '>>' pour rentrer ce que tu veux.

    Ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int taille;
    cin >> taille; //l'utilisateur rentre la taille du registre
     
    registre r1(taille);
    cin >> r1; //on doit avoir surchargé '>>' avant
    Qu'est-ce qui pose problème?

  3. #3
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 32
    Par défaut
    Citation Envoyé par coyotte507 Voir le message
    Tu peux surcharger l'opérateur '>>' pour rentrer ce que tu veux.

    Ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int taille;
    cin >> taille; //l'utilisateur rentre la taille du registre
     
    registre r1(taille);
    cin >> r1; //on doit avoir surchargé '>>' avant
    Qu'est-ce qui pose problème?
    merci bien pour ta réponse rapid!!!
    je vais essaye la surcharge du >> (je savsais pas que c'est feasble) mais je crois pas que ça va regler mon probleme :-( car meme quands j'ai fait cela

    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
    void registre :: remplir_perso_r1()
    {
    tab[0] = false;
    tab[1] = true;
    tab[2] = true;
    tab[3] = true;
    tab[4] = true;
    tab[5] = false;
    tab[6] = false;
    tab[7] = true;
    }
     
    void registre :: remplir_perso_r2()
    {
    tab[0] = true;
    tab[1] = true;
    tab[2] = true;
    tab[3] = false;
    tab[4] = false;
    tab[5] = false;
    tab[6] = true;
    tab[7] = true;
    tab[8] = false;
    tab[9] = true;
    tab[10] = true;
    tab[11] = true;
    tab[12] = true;
    tab[13] = false;
    tab[14] = false;
    tab[15] = true;
    }
    ça pas marché !!!

  4. #4
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 32
    Par défaut
    comme d'habitude je reçois pas une erreures de compilation mais une de windows lors de l'execution

  5. #5
    Membre expérimenté
    Profil pro
    Dev
    Inscrit en
    Décembre 2007
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Décembre 2007
    Messages : 191
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include "header.h"
    #include <string.h>
     
    void main() 
    {
    registre r2(15);
    registre r1= // ici comment on peut remplir l'objet directement ?
    r1.affich();
     
    }
    1) pour remplir un objet directement il faudrait je pense créer un nouveau constructeur. (par exemple registre(int, bool []) ). Si c'est simplement copier r2 que tu veux alors tu peux utiliser ton constructeur de copie que tu as deja crée. (registre r1(r2) )
    2)la ligne registre r2(15) utilise le premier constructeur et ne crée pas de tableau avec new. Cela crée donc une erreur à l'exécution.

  6. #6
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 32
    Par défaut
    merci,
    pour le constructeur par copie je compte bien l'utilisé apres dans mon main.
    le probleme que j'ai construit pour r2(15) un objet dont la taille = 15 mais j'ai pas allouer la memoire pour le tableau.
    grave faute je me sens bête :-).

    donc voila j'ai fait comme t'as dit mais j'ai pas fait un nouveau constructeur j'ai juste changer l'ancien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    registre(int n=8):taille(n) {}
    remplacer par:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    registre(int n=8){
    		taille = n;
    		tab=new bool[taille];
    	}
    bon maintenant il me reste juste le truc du "cin". je vais essayé de trouver la solution tous seul sinon je vous rappelerais.
    vraiment merci pour vous tous.

Discussions similaires

  1. remplir tableau avec une seule instruction !
    Par tlemcenvisit dans le forum C++
    Réponses: 3
    Dernier message: 21/06/2014, 18h22
  2. [C#] - Remplir tableau à deux dimensions avec split
    Par dada4444 dans le forum Windows Forms
    Réponses: 7
    Dernier message: 26/05/2009, 09h26
  3. Remplir tableau avec clé de reprise
    Par Airmus23 dans le forum Cobol
    Réponses: 2
    Dernier message: 22/10/2007, 09h34
  4. [Tableaux] Remplir tableau avec variable
    Par nicerico dans le forum Langage
    Réponses: 1
    Dernier message: 09/07/2007, 15h35
  5. [Tableaux] Remplir tableau avec ordre defini
    Par nicerico dans le forum Langage
    Réponses: 2
    Dernier message: 03/11/2006, 10h28

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