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 :

Saisie contrôlée et bornée de 3 floats


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2010
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Septembre 2010
    Messages : 116
    Par défaut Saisie contrôlée et bornée de 3 floats
    Salut à tous,
    J'ai essayé de coder la saisie de 3 floats contrôlés et bornés avec le code ci-après.
    Le résultat est correct mais j'ai l'impression d'utiliser un semi-remorque pour transporter un pot de peinture.
    Tous les avis et conseils seront les bienvenus.

    L.P.

    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
    #include <iostream>  // Verifier si une valeur est un nombre. c++
    #include <sstream>
    #include <string>
    #include <cmath>
    using namespace std;
     
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    suite   ~~~~~~~~~~~~~~~~~~~~~~~~~~~
    int suite()
    {
     char x;
     int s;
        cout <<"\n   Choix (R) pour Recommencer (Q) pour Quitter  ", cin >> x ;
            cout << endl;
            int xx = x;
    //                cout << "int de x : " << xx;
            if (xx == 82 || xx == 114){
                s=1;
            }
            else {
                s = 0;
            }
    //                cout << "int de s : " << s;
            return s;
    }
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    string consolePause() // declenche la PAUSE avec la console en direct depuis l'.exe
    {
        cout <<"\n       Press Enter to Exit . . .\n";
            cin.get();
                cin.clear();
    return "";
    }
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //~~~~~~~~~~~~~~~~~~~~~~~~~~   saisies   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    float saisies(int x)
    {
     
    bool r; // résultat des vérif
    float i; // valeur float attendue
    char ascii (96); // code ASCII -1 de 'a'
    string cs = ""; // chaine saisie à convertir en float
    string cr = ""; // chaine 's' aprés conversion en float et reconversion en string
    int len_cs, len_cr; /* respectivement longueur de la chaine 's' initialement
                     saisie et longueur aprés la double conversion pour comparaison */
     
    ascii = ascii + x ; // les valeurs ASCII de a, b et c
     
    cout << "Valeur de " << ascii << " : "; getline (cin, cs);
        len_cs = cs.length();
    //        cout<< "len de " << ascii << " : " << len_cs << endl; // pour vérif
    istringstream istr(cs);
        if (istr >> i) r = 1; //  i=i+0;
    //        cout << "resultat_1= " << r << endl; // pour vérif
    //if (istr >> i) {cout << "La valeur de "  << ascii << " : "<< i+0 << endl; // pour vérif
     
     ostringstream oss;
        oss << i;
            cr=oss.str();
                len_cr = cr.length();
    //            cout << cr << "  len cr: " << len_cr << endl; // verif
     
    if (len_cs != len_cr || r != 1) {cout << "\tVALEUR INCORRECTE\a\a\a\n"; // validation
    istr.clear(); // vider
    //cout << "resultat_2= " << r << endl; // pour vérif
            return 'faux'; // renvoie 1.71766e+09
    }
    else    return i ;
    }
    //~~~~~~~~~~~~~~~~~~~~~~~~~    depart      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    int depart()
    {
    int s = 0; // relancer ou arreter
    float tab[2]; // tableau conteneur des 3 saisies validées
    float i = 0 ; // nombre saisi à controler et valider
    int n = 1 ; // n:= num de la de saisie (obtenir 3 saisies valides)
     
    while (n < 4) {
        i = saisies(n);
    //    cout<< "ligne 50  et i:= " << i << endl; // vérif
            if (i > 10 || i < -10) { /* bornes*/
                  cout << "\n  Erreur\a\a\n\n"; // si en dehors des bornes
                     i = 0;
                                   }
            else {  cout << endl; // sans 'cout' dans cette ligne une saisie alpha n'est pas
                    tab[n-1]=i;   // detectée comme erreur.... ??
                     n = n + 1;
                 }
    }
    //cout<< " (main)valeur de " << i << " n:= " << n ; //<< saisies(r);
    cout << "\n     RESULTATS de la Saisie\n\n";
    cout << "   a:= " << tab[0] ;
    cout << "   b:= " << tab[1] ;
    cout << "   c:= " << tab[2] << endl ;
     
    //***
    s = suite(); // relancer ou arreter
        if (s == 1) {  cin.ignore();
                        depart();   }
    //***
            return 0;
    }
     
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //~~~~~~~~~~~~~~~~~~~~~~~~       main      ~~~~~~~~~~~~~~~~~~~~~~~~~~~
    int main()
    {
    depart();
     
    consolePause(); // declenche la PAUSE si lancement de l'.exe en direct
     
            return 0;
    }
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 152
    Billets dans le blog
    4
    Par défaut
    Salut,

    la lisibilité est très médiocre, commence par améliorer ça, ne pas mettre de saut de ligne ou tabulation au petit bonheur la chance.
    Ensuite tu verras des problèmes, comme celui qui m'a sauté aux yeux avec juste une lecture rapide : float tab[2]; // tableau conteneur des 3 saisies validées
    On a inventé le type bool. Retourner une string vide c'est stupide si ta fonction ne doit rien retourner, qu'elle ne retourne rien. Et plein d'autres trucs à revoir.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2010
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Septembre 2010
    Messages : 116
    Par défaut
    Salut à tous,

    En fait, j'ai l'intention d'utiliser le contenu tu tableau pour la suite de l'exercice que je me suis donné.
    (Résolution d'une équation du second degré), mais avant d'aller plus loin, l'étape de saisie et de validation m'a parue mériter une halte.
    Je reconnais que la visibilité n'est pas fameuse mais j'ai cru bien faire en documentant au maximum.
    Bien sûr que les lignes de code qui sont inhibées ne sont pas destinées à rester.
    J'ai utilisé ce moyen pour suivre les variables avec Code::Blocks.
    Merci pour la réponse

    L.P.

  4. #4
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 033
    Billets dans le blog
    12
    Par défaut
    Plutôt que de documenter chaque ligne, choisis des noms explicites pour tes variable, parce que x, s, xx, r, cs, cr, c'est pas super parlant...
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  5. #5
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    Citation Envoyé par dragonjoker59 Voir le message
    Plutôt que de documenter chaque ligne, choisis des noms explicites pour tes variable, parce que x, s, xx, r, cs, cr, c'est pas super parlant...
    Je cite car ça pour moi c'est la base. Un morceau de code aussi simple n'a pas besoin de commentaire si le code en lui-même est clair.

    Évite aussi les lignes de commentaires inutiles comme //~~~~~~~~~~~~~~~~~~~~~~~~ main ~~~~~~~~~~~~~~~~~~~~~~~~~~~. C'est de la mise en page, la plupart du temps ça n'a rien à faire dans un fichier source.

    Indente ton code et surtout soit constant (cf. remarque de Bousk) dans sa présentation : si tu choisis quatre espaces d'indentation ou de sauter une ligne après un bloc de déclaration, fais-le tout le temps. Idéalement la présentation doit pouvoir être réalisée par un script, elle doit donc être déterministe.


    Citation Envoyé par luc pic Voir le message
    avant d'aller plus loin, l'étape de saisie et de validation m'a parue mériter une halte
    Ça c'est bien, vas-y par étape. Vérifie le bon fonctionnement d'un module simple avant de l'assembler au reste.

  6. #6
    Membre confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2010
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Septembre 2010
    Messages : 116
    Par défaut
    Salut à tous,
    Merci pour vos remarques pertinentes et fondées.
    Je ne cherche pas d'excuses mais comme je débute avec cet outil, j'ai besoin de repères et cette 'outrance' dans les commentaires m'aide bien pour l'instant.
    La prochaine fois, je l'efface avant de poster.
    Au fur et à mesure de l'apprentissage de cette syntaxe, j'essaye de l'employer, c'est pourquoi il y a pléthore de choses inutiles mais c'est un essai et même si c'est 'lourd', quand ça marche, le résultat est encourageant, en tout cas pour moi.
    J'aurais aimé un commentaire sur l'algorithme lui-même et éventuellement quelques correctifs.
    Je ne prépare pas d'examen, je n'ai pas de devoir à faire et encore moins de travail à rendre ou à vendre.
    C'est juste pour le plaisir.

    L.P.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 03/06/2010, 14h41
  2. contrôle de saisie menu déroulant
    Par shnouf dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 05/01/2006, 16h30
  3. contrôle de saisie
    Par oceane751 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 05/01/2006, 11h24
  4. [debutant] contrôle de saisie et formulaire
    Par oceane751 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 27/11/2005, 22h29
  5. Réponses: 4
    Dernier message: 14/09/2005, 15h50

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