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 :

mon programme non orienté objet


Sujet :

C++

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 10
    Points : 2
    Points
    2
    Par défaut mon programme non orienté objet
    Bonjour à tous .
    J'ai créé un programme c++ mais il est affreusement désordonné .
    Personne ne comprend ce que j'écris et j'ai le sentiment qu'il est plus long que nécessaire .
    Vous pourriez me donné quelque astuce ?
    La multiplication des fichier avec l'extention ".h" n'as rien arrangé .

    PS: Désolé pour l'orthographe je fais de mon mieux .

    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
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    scors.cpp
    
                       /* fichier de base */
                        
    //le fichier à ouvrir peut étre modifié simplement en changean la constante Nom et la somme gagne 
    //juste en modifian la variable : ValeurAjou toute deux dans "variable.h"
    #include <fstream>
    #include <iostream>
    #include <sstream>
    
    using namespace std;
                                       
    int main(int nNumberofArgs , char* pszArgs[])
    {
     # include <variable>//je delegue la responssabilité de cree les variable à variable.h
    
    
    // cette parti ne sert que pour plus tard dans le listing le but est de 
    // détérminé les valeur des caractéres de l'ordianteur sous lequel il tourne 
    // Le faire dans une classe ne serait pas une mauvaise idée mais je comprend pas
    // comment on utilise une fonction 
    
    char Carach[2]= "0" ;
    int nat = 0 ;
    for (; ; )// a partir du 0 je peut deviné les 9 autre chiffre 
    {
        nat = nat +1 ;
    if ( (char) nat == Carach[0]  )
    { break;}
    }
    // maintenan je vois pour la virgule : j'en aurez besoin aussi 
    char Caravir[2] = ",";
    int vir = 0 ;
    
    for (; ; )
    {if ( Caravir[1] == (char)  vir )
    {break ; }
    vir ++ ;
    }
    
    
    
    // finit: maintenan que c'est fais on passe au chose sérieuse :
        
    ifstream* pFileStream = new ifstream (Nom);//ouvre le fichier contenu dans nom
        if (!pFileStream->good()) //si l'ouverture n'est pas bonne
              {
        cout << "impossible d'ouvrir :"  
             << Nom 
             <<"\n"
             <<"le fichier va etre reecri "
             <<"si vous jouez pour la premier fois c'est normal ..."  
             << endl ;  
             system ("PAUSE");
             ValeurDebu = 0 ;
             #include "operation.h"//delegation de l'operation
             ofstream my(Nom);//ouvre le fichier  contenu dans la constante "Nom"
          my << ecriture  //ecrir la valeur de "ecriture"  dans le fichier texte 
             << ","
             << endl ; //fin 
        cout << "resultat :"<< ecriture <<"\n"; //affiche le resultat
             system ("PAUSE");
              
             return 0; //fin du programme 
              } 
    else //si non
    {
    
    for(; ; )//boucle sans argument donc qui ne se termine pas  mais qui permet l'utilisation de break
    {
      char lecture[256];  
     pFileStream -> getline( lecture,256 );//en gros il attibu les caractere du texte à la chaine 
     //de caractere  lecture de 256 caractere   
    
     if (pFileStream -> fail())//permet de rendre le programme plus robuste
     {
         break;
     }  
      
      cout<< "somme actuel :" << lecture << "\n";
      system ("PAUSE");
      cout<<"additione à :\n" << ValeurAjou << "\n"; 
      system ("PAUSE");
      
      int i = 0 ;
     for(; ; )//boucle infini
    {
           if (lecture[i] == (char) vir )// si le caractere est une virgule 
           { cout << "nat = " << nat << "\n";
                cout << i << ":"<<< "\n" ;           
             i= i - 1 ; // on fais en sorte que i possede les coordoné du premier chiffre avans la virgule
             cout << " fin de la boucle infini 1 i= "<< i << "\n" ;
             cout << " ------------------------- \n";
             break ;//et fin de la boucle
             }            
             i++ ; // i + 1 
    } // cette boucle remplace avantagesement les centaine de ligne avec if de la verssion 1.1 et 1.2 
    
    int m = 1 , c = 0 , r = 0;
    i = i -1 ;
    for (; ; )
    {
      
        cout << i <<" = " << lecture[i]<< "\n" ;
    c = (char) lecture[i] ;
    cout << c << "\n" ;
    
    #include <instin>
    cout << r << " fois " << m <<" eguale " << r*m << "\n";
    
    ValeurDebu = ValeurDebu + ( r * m); // r (retour) represente l'unité et m le multiple de 10 
                                       // par exemple 123 = 1*3 + 2 * 10 + 1 * 100 
                                       //c'est l'idee ici : cree un nombre par couche de 10 
                                       //l'avantage est que se sistem n'a pas de limite 
    cout << "ValeurDebu = " << ValeurDebu << "\n" ;
    system ("PAUSE");
    
    i= i - 1 ;
    m = m * 10 ;
    if (i < 0) {break;}
    } 
     //ci dessou c'est un cas impossible qui revelle la triche de l'utilisation
     //ou un bug inatendu .
     if (ValeurDebu < ValeurAjou)//ça arrive quand on demande la valeur d'un caractere
     { 
      cout <<"erreur :resultat improbable !\n";
      cout <<"soit il y a eu une erreur suite à une tricheri \n";
      cout <<"soit vous étes arrivée à la limite .\n";
      cout <<"(ce qui est peu probable )\n" ; 
      cout <<"reinitialisasion par defo ... "<<"\n" ;  
      cout <<" vous reparte a 50 \n" ;     
      
      system ("PAUSE");
     
      ValeurDebu = 50 ;//comme la somme est impossible on la defini arbitraireman à 50
     }
     #include <operation>   //je l'ai delegué mais j'était pas obligé vu la taille de l'operation
     cout <<  ValeurDebu << "+" << ValeurAjou << "\n";//on  voi ce  qu'il ce passe comme 
      //sa perssone ne peut refuté le calcull (tant qu'il est vrai)
      cout << "resultat :"<< ecriture <<"\n"; 
      system ("PAUSE");
     
        //ecriture de la valeur dans le fichier:
        ofstream my(Nom);//on reouvre le fichier (on le cree si il existe pas 
        my << ecriture  //on ecrit la valeur comptenu dans ecriture
           <<","
           << endl ; //c'est fini pour l'ecriture 
           return 0; //fin du programme 
    }
    }    
    }//fin du listing
     instin.h // j'ai developé ce programme pour la converssion d'un caractere qui represente un nombre 
    //en une valeur mais faites en se que vous voulez ... 
    #include "caractere.h"
    if ( c == (char) nul )
    {
     r = 0 ;   
    } 
    
    if (c == (char) un ) 
    {
     r = 1 ;   
    } 
    
    if ( c == (char) deux )
    {
     r = 2 ;   
    } 
    
    if ( c == (char) trois )
    {
     r = 3 ;   
    } 
    
    if ( c == (char) quatre )
    {
     r = 4 ;   
    } 
    
    if ( c == (char) cinq )
    {
     r = 5 ;   
    } 
    
    if ( c == (char) six )
    {
     r = 6 ;   
    } 
    
    if ( c == (char) sept ) 
    {
     r = 7 ;   
    } 
    
    if ( c == (char) huit )
    {
     r = 8 ;   
    } 
    
    if ( c == (char) neuf )
    {
     r = 9 ;   
    } 
    
    caractere.h
    
    
      
    //je cree les variable pour definir les numeros de caractére 
    //cette fois ce listing n'est pas aussi indépendant malheuresement 
    
    int nul = nat , un =  nat + 1 , deux = nat + 2 ,trois = nat + 3 ; 
    int quatre = nat + 4 , cinq = nat + 5, six = nat + 6 ;
    int sept = nat + 7 , huit = nat + 8 , neuf = nat + 9  ;
    
    opreration.h
    
    #include "iostream"
    ecriture = ValeurDebu + ValeurAjou;
    
    variable.h
    
    double ecriture , ValeurAjou = 50 ,ValeurDebu = 0 ;//en double pour eviter l'arrivé à la limite 
                                                        //(du moin dans une vie)
    const char Nom[] = "scor.txt"; //la constante Nom de type char contien le nom du fichier

  2. #2
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    effectivement, c'est horrible.


    Surtout l'inclusion d'un fichier .h après le début de main.

    Edit :
    #include "iostream"
    C'est < > et pas "

    Edit2:

    if ( c == (char) nul )
    {
    r = 0 ;
    }

    if (c == (char) un )
    {
    r = 1 ;
    }
    Les switch existent. Et (char) un, ça risque pas de compiler.


    Edit :
    for (; ; )
    {if ( Caravir[1] == (char) vir )
    {break ; }
    vir ++ ;
    }
    Je vois pas l'interêt d'un for. Et il faut indenter.

    // finit: maintenan que c'est fais on passe au chose sérieuse :

    ifstream* pFileStream = new ifstream (Nom);//ouvre le fichier contenu dans nom
    Même si on peut le faire, C déconseillé de déclarer au milieu d'une fonction.

    cout << c << "\n" ;

    #include "instin.h"
    cout << r << " fois " << m <<" eguale " << r*m << "\n";
    Encore pire que l'inclusion d'avant.


    Je crois que il y a trop trop d'erreurs, j'ai trop la flemme de corriger quoique ce soit. Déjà indentes le code.
    Je ne répondrai à aucune question technique en privé

  3. #3
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Utilise [code], pas [quote].
    Boost ftw

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Merci de tes réponces

    mais:

    Les switch existent.
    Désolet mais j'ai rien compris .

    Et (char) un, ça risque pas de compiler.
    Si sa compile (j'ai déja compilé) car j'ai défini la variable un dans "caractere.h" grace au code au début .
    C'est juste trés moche ...

    ps : j'ai édité le premier .

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Je vien de le recompilé et quand je mes <variable> à la place de "variable.h" .
    Le compilation échou ...
    Alors que quand je remai "variable.h" sa marche .
    Je croyais que sa revené au même ...

  6. #6
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Les fichiers d'entête de bibliothèque standard style iostream (ou stdlib.h en C), on les inclut avec un des <>

    Tes fichiers d'entêtes (qui se trouvent dans le repertoire courant), on les inclut en "".


    Les switch, c'est pour réaliser des instructions suivants des cas
    par exemple :

    au lieu d'écrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if(i==2)
      j = 3;
     
    if(i==3)
     k = 5;
    ...
    Tu peux écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    switch(i)
    {
     case 2:
        j= 3;
       break;
     case 3:
       k= 5;
       break;
     default:
      break;
    }
    Ca rend le code plus propre.

    Si sa compile (j'ai déja compilé)
    En tout cas, si tu fais c ne risque pas de valoir '1', mais le code ASCII 1. Et je pense pas que ce soit ce que tu souhaites.
    Je ne répondrai à aucune question technique en privé

  7. #7
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Citation Envoyé par millie
    Même si on peut le faire, C déconseillé de déclarer au milieu d'une fonction.
    Je dirais précisemment l'inverse. C'est déconseiller avant tout de créer une variable non initialisée correctement, car on cours le risque de l'utiliser avant son initialisation. Donc, on essaye dans la mesure du possible d'initialiser directement une variable quand on la déclare. Souvent, on n'a pas au début de la fonction toutes les données nécessaires pour procéder à l'initialisation, donc il vaut mieux attendre en milieu de fonction, quand on a ce qu'il faut, pour initialiser.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  8. #8
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Citation Envoyé par JolyLoic
    Je dirais précisemment l'inverse. C'est déconseiller avant tout de créer une variable non initialisée correctement, car on cours le risque de l'utiliser avant son initialisation. Donc, on essaye dans la mesure du possible d'initialiser directement une variable quand on la déclare. Souvent, on n'a pas au début de la fonction toutes les données nécessaires pour procéder à l'initialisation, donc il vaut mieux attendre en milieu de fonction, quand on a ce qu'il faut, pour initialiser.

    Quand on sait programmer en C ou C++, oui, mais là, c'est visiblement une personne qui est en cours d'apprentissage. Donc vaut mieux ne pas faire ça lorsque l'on est débutant, je pense.



    j'ajoute autres choses, tu as crée des zones mémoire avec new, mais tu ne les as jamais supprimé (avec delete).
    Je ne répondrai à aucune question technique en privé

  9. #9
    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
    Là, il faut qu'il découpe son code, qu'il fasse des fonctions, qu'il indente, ...
    Retarder la déclaration d'une donnée est tout sauf un problème. On ne peut pas en dire autant d'une fonction qui s'étale sur 3 pages. Raffiner et organiser son code est une des premières choses à apprendre en algorithmie.

    Sinon, les includes ne sont définitivement pas fait pour être utilisés de la sorte. (Même au OCCC, je pense que des participants doivent trouver ça trop vulgaire.)
    Là, il va falloir d'abord faire des fonctions.
    Le jour où tu verras que tu auras des fonctions aux thêmes différents, tu sépareras ton code entre plusieurs fichiers.

    PS: sauf cas particulier, il est mal venu de manipuler des flux C++ par pointeur. Les std::fstream vivent bien mieux sur la pile.
    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...

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    ok donc si j'ai bien compris : en essayans de simplifié mon code en le séparant en plusieur fichier j'ai empiré les choses c'est bien sa ?
    Bon alors je dois recopié le contenu des fichier .h dans le listing c++?
    Je l'ai séparé en plusieur parti car dans "le c++ pour les nuls" on nous le consseillais.
    Voila ce que sa donne quand on enléve les fichier .h et qu'on le remplace par leur contenu:

    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
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
     
    //le fichier à ouvrir peut étre modifié simplement en changean la constante Nom et la somme gagne 
    //juste en modifian la variable : ValeurAjou toute deux dans "variable.h"
    #include <fstream>
    #include <iostream>
    #include <sstream>
     
     
    using namespace std;
     
    int main(int nNumberofArgs , char* pszArgs[])
    {
        double ecriture , ValeurAjou = 50 ,ValeurDebu = 0 ;
        const char Nom[] = "scor.txt"; //la constante Nom de type char contien le nom du fichier 
     
    // cette parti ne sert que pour plus tard dans le listing le but est de 
    // détérminé les valeur des caractéres de l'ordianteur sous lequel il tourne 
    // Le faire dans une classe ne serait pas une mauvaise idée mais je comprend pas
    // comment on utilise une fonction 
     
    char Carach[2]= "0" ;
    int nat = 0 ;
    for (;;)// a partir du 0 je peut deviné les 9 autre chiffre 
    {
        nat = nat +1 ;
    if ( (char) nat == Carach[0]  )
    { break;}
    }
    // maintenan je vois pour la virgule : j'en aurez besoin aussi 
    char Caravir[2] = ",";
    int vir = 0 ;
     
    for (;;)
    {if ( Caravir[1] == (char)  vir )
    {break ; }
    vir ++ ;
    }
     
     
     
    // finit: maintenan que c'est fais on passe au chose sérieuse :
     
    ifstream* pFileStream = new ifstream (Nom);//ouvre le fichier contenu dans nom
        if (!pFileStream->good()) //si l'ouverture n'est pas bonne
              {
        cout << "impossible d'ouvrir :"  
             << Nom 
             <<"\n"
             <<"le fichier va etre reecri "
             <<"si vous jouez pour la premier fois c'est normal ..."  
             << endl ;  
             system ("PAUSE");
             ValeurDebu = 0 ;
        ecriture = ValeurDebu + ValeurAjou;
             ofstream my(Nom);//ouvre le fichier  contenu dans la constante "Nom"
          my << ecriture  //ecrir la valeur de "ecriture"  dans le fichier texte 
             << ","
             << endl ; //fin 
        cout << "resultat :"<< ecriture <<"\n"; //affiche le resultat
             system ("PAUSE");
     
             return 0; //fin du programme 
              } 
    else //si non
    {
     
    for(;;)//boucle sans argument donc qui ne se termine pas  mais qui permet l'utilisation de break
    {
      char lecture[256];  
     pFileStream -> getline( lecture,256 );//en gros il attibu les caractere du texte à la chaine 
     //de caractere  lecture de 256 caractere   
     
     if (pFileStream -> fail())//permet de rendre le programme plus robuste
     {
         break;
     }  
     
      cout<< "somme actuel :" << lecture << "\n";
      system ("PAUSE");
      cout<<"additione à :\n" << ValeurAjou << "\n"; 
      system ("PAUSE");
     
      int i = 0 ;
     for(;;)//boucle infini
    {
           if (lecture[i] == (char) vir )// si le caractere est une virgule 
           { cout << "nat = " << nat << "\n";
                cout << i << ":"<<lecture[i] << "\n" ;           
             i= i - 1 ; // on fais en sorte que i possede les coordoné du premier chiffre avans la virgule
             cout << " fin de la boucle infini 1 i= "<< i << "\n" ;
             cout << " ------------------------- \n";
             break ;//et fin de la boucle
             }            
             i++ ; // i + 1 
    } // cette boucle remplace avantagesement les centaine de ligne avec if de la verssion 1.1 et 1.2 
     
    int m = 1 , c = 0 , r = 0;
    i = i -1 ;
    for (;;)
    {
     
        cout << i <<" = " << lecture[i]<< "\n" ;
    c = (char) lecture[i] ;
    cout << c << "\n" ;
     
    int nul = nat , un =  nat + 1 , deux = nat + 2 ,trois = nat + 3 ; 
    int quatre = nat + 4 , cinq = nat + 5, six = nat + 6 ;
    int sept = nat + 7 , huit = nat + 8 , neuf = nat + 9  ;
     
    if ( c == (char) nul )
    {r = 0 ;   } 
     
    if (c == (char) un ) 
    {r = 1 ;   } 
     
    if ( c == (char) deux )
    {r = 2 ;   } 
     
    if ( c == (char) trois )
    {r = 3 ;   } 
     
    if ( c == (char) quatre )
    {r = 4 ;   } 
     
    if ( c == (char) cinq )
    {r = 5 ;   } 
     
    if ( c == (char) six )
    {r = 6 ;   } 
     
    if ( c == (char) sept ) 
    {r = 7 ;   } 
     
    if ( c == (char) huit )
    {r = 8 ;   } 
     
    if ( c == (char) neuf )
    {r = 9 ;   } 
     
    cout << r << " fois " << m <<" eguale " << r*m << "\n";
     
    ValeurDebu = ValeurDebu + ( r * m); // r (retour) represente l'unité et m le multiple de 10 
                                       // par exemple 123 = 1*3 + 2 * 10 + 1 * 100 
                                       //c'est l'idee ici : cree un nombre par couche de 10 
                                       //l'avantage est que se sistem n'a pas de limite 
    cout << "ValeurDebu = " << ValeurDebu << "\n" ;
    system ("PAUSE");
     
    i= i - 1 ;
    m = m * 10 ;
    if (i < 0) {break;}
    } 
     //ci dessou c'est un cas impossible qui revelle la triche de l'utilisation
     //ou un bug inatendu .
     if (ValeurDebu < ValeurAjou)//ça arrive quand on demande la valeur d'un caractere
     { 
      cout <<"erreur :resultat improbable !\n";
      cout <<"soit il y a eu une erreur suite à une tricheri \n";
      cout <<"soit vous étes arrivée à la limite .\n";
      cout <<"(ce qui est peu probable )\n" ; 
      cout <<"reinitialisasion par defo ... "<<"\n" ;  
      cout <<" vous reparte a 50 \n" ;     
     
      system ("PAUSE");
     
      ValeurDebu = 50 ;//comme la somme est impossible on la defini arbitraireman à 50
     }
     ecriture = ValeurDebu + ValeurAjou;
     cout <<  ValeurDebu << "+" << ValeurAjou << "\n";//on  voi ce  qu'il ce passe comme 
      //sa perssone ne peut refuté le calcull (tant qu'il est vrai)
      cout << "resultat :"<< ecriture <<"\n"; 
      system ("PAUSE");
     
        //ecriture de la valeur dans le fichier:
        ofstream my(Nom);//on reouvre le fichier (on le cree si il existe pas 
        my << ecriture  //on ecrit la valeur comptenu dans ecriture
           <<","
           << endl ; //c'est fini pour l'ecriture 
           return 0; //fin du programme 
    }
    }    
    }//fin du listing

    pour les swith : sa marche sa ? :

    switch(c)
    {
    case (char) nul:
    r= 0;
    break;
    case (char) un:
    r= 1;
    break;
    case (char) deux:
    r = 2;
    break;
    ect ..
    }

    Sinon si j'utilise (char) + [un nombre] c'est par ce que quand j'essaye de comparé deux caractère enssemble le compilateur m'embéte et donc je mets (char) + le nombre du caractére défini dans les 10 variable fais plus tôt.
    C'est juste pour que l'ordinateur sache à quel chiffre il a afaire.

  11. #11
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Au début, évite de travailler sur plusieurs fichiers (j'ai bien dit au début), mais essaye de découper en fonction.

    Tu pourras découper en fichier quand tu penses pouvoir créer des "groupes" de fonctions qui vont bien ensemble. Typiquement, cela correspondant à un module, une classe ou un type abstrait.

    En général, dans le fichier .h, on met les prototypes des fonctions, les classes et les structures et dans le .cpp ou .c, on met le code de ces fonctions.
    (Je parle ici de manière simple, il peut arriver que l'on mette des prototypes dans le fichier .c si il n'est utilisé que par ce fichier). Mais ne t'occupes pas de ça pour l'instant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    switch(c)
    {
    case (char) nul:
    r= 0;
    break;
    case (char) un:
    r= 1;
    break;
    case (char) deux:
    r = 2;
    break;
    ect ..
    }
    Ca marche comme ça, mais ton (char) 1, ne veut pas dire que c= '1';
    c sera égale au code ASCII numero 1 (aucune idée de ce que c'est, mais c'est pas '1').


    Edit : Au lieu d'utiliser un for(; avec un break, renseignes toi sur les boucles : while
    Je ne répondrai à aucune question technique en privé

  12. #12
    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
    Citation Envoyé par hindflo
    a- ok donc si j'ai bien compris : en essayans de simplifié mon code en le séparant en plusieur fichier j'ai empiré les choses c'est bien sa ?
    b- Bon alors je dois recopié le contenu des fichier .h dans le listing c++?
    c- Je l'ai séparé en plusieur parti car dans "le c++ pour les nuls" on nous le consseillais.
    a- Oui

    b- Pas exactement. On va dire oui dans un premier temps. Ensuite, et c'est très important, regarde l'intégralité de tes traitements et essai de donner des noms à des sous-parties que tu seras capable d'isoler. De là, définit des fonctions.
    (arf grillé par millie)

    c- <troll>le bouquin est un peu léger et court. Il brûle trop vite dans une cheminée</>
    Plus sérieusement. Suivant si tu veux t'investir plus dans le C++, regarde dans les archives du forum, et investit dans un meilleur bouquin d'apprentissage. Attention, dans la langue de Molière, il y a beaucoup de mauvais bouquins d'introduction au C++. Dans la langue de Shakespeare aussi, mais au moins il y a d'excellents bouquins sur le sujet.
    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...

  13. #13
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Ca marche comme ça, mais ton (char) 1, ne veut pas dire que c= '1';
    J'ai bien compris mais la variable "un" egale pas 1 elle égale le numéros du caractére "1" .
    Ce qui veu dire que (char) un = "1"
    Sur CE listing la variable "un" egale un nombre comme 49 qui change d'un pc à l'autre . (ne me demande pas pourquoi ...)
    C'est vrai que dans mon code sa peu prété à confusion mais le numéros du ceractere "0" et détérminé au début du listing et les 10 autres en découle .
    (car si je me trompe pas les 10 caractére de chiffre on toujours le même ordre ...)

  14. #14
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Effectivement, essaye le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      char test;
      test = (char) 2;
     
      std::cout<<test<<std::endl;
    Tu verras un bonhomme bizarre et pas un 2.


    Pour convertir un int en string (et pas en char, string est bcp plus utilisé en C++ car bcp plus sécurisé), voici un extrait de la FAQ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <sstream>
     
    int main()
    {    
        // créer un flux de sortie
        std::ostringstream oss;
        // écrire un nombre dans le flux
        oss << 10;
        // récupérer une chaîne de caractères
        std::string result = oss.str();
    }
    Je ne répondrai à aucune question technique en privé

  15. #15
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Oui mais je vien de dire que la variable un égale pas 1 et c'est la même chose pour la variable deux qui n'égale pas 2.
    (se serai tros facil ... et le programme finit en quelques heures seulement ...) mais j'arrive pas à compilez 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
    switch(c)
    {
    case (char) nul;
    r= 0;
    break;
    case (char) un;
    r= 1;
    break;
    case (char) deux;
    r = 2;
    break;
    case (char) trois;
    r= 3;
    break;
    case (char) quatre;
    r= 4;
    break;
    case (char) cinq;
    r = 5;
    break;
    case (char) six;
    r= 6;
    break;
    case (char) sept;
    r= 7;
    break;
    case (char) huit;
    r = 8;
    break;
    case (char) neuf;
    r = 9;
    break;
    }
    t'est sure que sa marche ?

  16. #16
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    C'est

    Avec un deux points
    Je ne répondrai à aucune question technique en privé

  17. #17
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Dacors c'est coorigé. C'était une faute d'inatention :désolet .
    Mais maintenan il me marque :" 'nul' cannot appear in a constant-expression "
    et de même pour les 9 autre variable .
    Quelqu'un sait ce que sa veu dire ?
    Et surtout ce qui ne vas pas ...


    pour le reste :

    Citation Envoyé par millie
    Pour convertir un int en string (et pas en char, string est bcp plus utilisé en C++ car bcp plus sécurisé), voici un extrait de la FAQ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <sstream>
     
    int main()
    {    
        // créer un flux de sortie
        std::ostringstream oss;
        // écrire un nombre dans le flux
        oss << 10;
        // récupérer une chaîne de caractères
        std::string result = oss.str();
    }
    Dacors, mais en faite dans ce programme se serai l'opération inversse qu'il faudrait que je face.
    (si je modifi le listing pour prend le text dans le fichier text en string il faudra quand même que je passe de string en int)

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 80
    Points : 63
    Points
    63
    Par défaut
    Salut je trouve cette conversation bien interessante !!!

    je ne sais pas trop ce que est ta variable c mais en tous ca tu ne peu pas mettre case (char) nul : c'est le (char qui fait plante je pense).

    si c est un char il y a int getch() dans conio.h qui fait un merveilleux travaille:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include <iostream>
    #include <conio.h>
    using namespace std;
    int main()
    {
    int a;
    a=getch();
    cout<<a<<" "<<(char)a<<endl; // charactere ASCII puis le craractere
    cout<<a-48<<endl; // si tu tape 1 ca ecrira 1
    system("pause"); // attend
    return 0;
    }
    Je ne sais pas trop ou tu en es dans le C++ mais tu as du travaille !! bon courrage

  19. #19
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Bien indenter le code et à la place de

    Je placerais
    ou
    Cela fait la même chose, mais je trouve cela plus clair que for sans argument, car il y a un argument dans le while qui explicite ta pensé...

    Le mieux étant de convertir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for (;;)
    {if ( Caravir[1] == (char)  vir )
    {break ; }
    vir ++ ;
    }
    En
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    while (Caravir[1] != (char)  vir)
          vir ++ ;

  20. #20
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 671
    Points
    10 671
    Billets dans le blog
    3
    Par défaut
    Plutôt qu'utilise conio.h + getch (non portable) et un obscure "-48":
    http://c.developpez.com/faq/cpp/?pag...#SL_cin_verify

Discussions similaires

  1. programmation informatique orienté objet
    Par sobtisaad dans le forum Langage
    Réponses: 1
    Dernier message: 03/03/2011, 11h39
  2. Diagramme de classe pour projet PHP non orienté objet
    Par dekalima dans le forum Diagrammes de Classes
    Réponses: 3
    Dernier message: 25/01/2011, 19h46
  3. UML et le non orienté objet
    Par kiranis dans le forum UML
    Réponses: 3
    Dernier message: 24/06/2008, 23h00
  4. Correction de mon tetris dit "orienté objet"
    Par javator dans le forum Langage
    Réponses: 5
    Dernier message: 04/03/2007, 17h25
  5. [DEBUTANT] Conseil sur la programmation orienté objet
    Par etiennegaloup dans le forum Langage
    Réponses: 7
    Dernier message: 27/05/2005, 12h59

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