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 :

Ordre alphabétique de trois noms


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Etudiant en Mthématique et informatique
    Inscrit en
    Octobre 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Algérie

    Informations professionnelles :
    Activité : Etudiant en Mthématique et informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2014
    Messages : 15
    Par défaut Ordre alphabétique de trois noms
    Salut tout le monde !
    J'ai un tout petit problème...je voudrais réaliser un programme qui demande trois noms à l'utilisateur et l'informe ensuite s'ils sont rangés ou non dans l'ordre alphabétique.
    Voila ce que j'ai fait avec le logiciel DEV C++ :
    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
    #include<iostream>
    using namespace std;
    int main()
    {
    	cout<<"\n";
    	cout<<"                                   \311\315\315\315\315\315\315\315\315\315\273\n";
    	cout<<"                                   \272 BONJOUR \272\n"; 
    	cout<<"                                   \272 \267 TOUS! \272\n";
    	cout<<"                                   \310\315\315\315\315\315\315\315\315\315\274\n";
    	cout<<"\n";
     
    	string nom1,nom2,nom3;
    	cout<<" Saisissez trois noms :\n";
    	cout<<" Nom 1 : "; cin>>nom1;
    	cout<<" Nom 2 : "; cin>>nom2;
    	cout<<" Nom 3 : "; cin>>nom3;
     
    	if ((nom1>=nom2)&&(nom2>=nom3))
    	cout<<" Les noms sont rang\202s.\n\n MK.Djahli \270 2014";
    	else
    	cout<<" Les noms ne sont pas rang\202s.\n\n MK.Djahli \270 2014";
     
    	return 0;
    }
    Mais à chaque fois le programme me dit que les noms ne sont pas rangés !! que faire pour arranger ça ?
    Merci pour votre aide !

  2. #2
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    je pense que tu as confondu l'ordre de comparaison.

    Ca devrait plutôt être if ((nom1<=nom2)&&(nom2<=nom3))

  3. #3
    Membre averti
    Homme Profil pro
    Etudiant en Mthématique et informatique
    Inscrit en
    Octobre 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Algérie

    Informations professionnelles :
    Activité : Etudiant en Mthématique et informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2014
    Messages : 15
    Par défaut
    Citation Envoyé par leternel Voir le message
    je pense que tu as confondu l'ordre de comparaison.

    Ca devrait plutôt être if ((nom1<=nom2)&&(nom2<=nom3))
    En effet, ça marche mais seulement avec des lettres minuscules (ex: nom1:antilope,nom2:bouvreuil,nom3:colibri) ou majuscules (ex: nom1:Antilope,nom2:Bouvreuil,nom3:Colibri) c'est tout, si je mélange (ex: nom1:Antilope,nom2:bouvreuil,nom3:Colibri), ça ne marche pas, il continue toujours à me dire que les noms ne sont pas dans l'ordre alphabétique !
    Moi, je voudrais que ça marche dans les trois cas.
    Merci pour ta réponse !

  4. #4
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 772
    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 772
    Par défaut
    Tu ne sembles pas être au courant de l'encodage des caractères en programmation : ASCII, Unicode, UTF-8, UTF-16, ...

    Faire une comparaison comme cela ne marche qu'en ASCII (UTF-8) et avec les code pages compatibles et seulement avec les caractères américains [a-z] et [A-Z].

    Pour répondre à ta question, A correspond à 65 et Z correspond à 90 (les lettres majuscules se suivent), a correspond à 97 et b correspond à 122 (les lettres minuscules se suivent)

    Donc c'est normal que A < Z < a

    Une solution c'est soit tout mettre en majuscule (if ((c >= 'a') && (c <= 'z')) { c = (c - 'a' + 'A'); }) soit de tout mettre en minuscule (if ((c >= 'A') && (c <= 'Z')) { c = (c - 'A' + 'a'); })

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 513

  6. #6
    Membre averti
    Homme Profil pro
    Etudiant en Mthématique et informatique
    Inscrit en
    Octobre 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Algérie

    Informations professionnelles :
    Activité : Etudiant en Mthématique et informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2014
    Messages : 15
    Par défaut
    Citation Envoyé par bacelar Voir le message
    Merci .

  7. #7
    Membre averti
    Homme Profil pro
    Etudiant en Mthématique et informatique
    Inscrit en
    Octobre 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Algérie

    Informations professionnelles :
    Activité : Etudiant en Mthématique et informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2014
    Messages : 15
    Par défaut
    Citation Envoyé par foetus Voir le message
    Tu ne sembles pas être au courant de l'encodage des caractères en programmation : ASCII, Unicode, UTF-8, UTF-16, ...
    Oui, je suis qu'un simple débutant !

    Citation Envoyé par foetus Voir le message
    Faire une comparaison comme cela ne marche qu'en ASCII (UTF-8) et avec les code pages compatibles et seulement avec les caractères américains [a-z] et [A-Z].

    Pour répondre à ta question, A correspond à 65 et Z correspond à 90 (les lettres majuscules se suivent), a correspond à 97 et b correspond à 122 (les lettres minuscules se suivent)

    Donc c'est normal que A < Z < a
    Merci pour l'info .

    Citation Envoyé par foetus Voir le message
    Une solution c'est soit tout mettre en majuscule (if ((c >= 'a') && (c <= 'z')) { c = (c - 'a' + 'A'); }) soit de tout mettre en minuscule (if ((c >= 'A') && (c <= 'Z')) { c = (c - 'A' + 'a'); })
    Est ce que ça veut dire que je dois changer la fonction string par la fonction char ? car cela n'a pas marché ! le programme m’empêche de saisir le Nom 2 et le Nom 3 !!

    Citation Envoyé par foetus Voir le message
    { c = (c - 'a' + 'A'); }
    Ça c'est la solution pour la lettre 'a', qu'en est il pour les autres ? (je sais que c'est de la même manière mais est ce que je suis obligé de le faire pour toute les lettres ? ou alors, y a il une autre solution plus courte ?)

    Voici le
    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
    #include<iostream>
    using namespace std;
    int main()
    {
    	cout<<"\n";
    	cout<<"                                   \311\315\315\315\315\315\315\315\315\315\273\n";
    	cout<<"                                   \272 BONJOUR \272\n"; 
    	cout<<"                                   \272 \267 TOUS! \272\n";
    	cout<<"                                   \310\315\315\315\315\315\315\315\315\315\274\n";
    	cout<<"\n";
     
    	char nom1,nom2,nom3;
    	cout<<" Saisissez trois noms :\n";
    	cout<<" Nom 1 : "; cin>>nom1;
    	cout<<" Nom 2 : "; cin>>nom2;
    	cout<<" Nom 3 : "; cin>>nom3;
     
    	if (((nom1>='a') && (nom1<='z')) || ((nom2>='a')&&(nom2<='z')) || ((nom3>='a')&&(nom3<='z')))
    	{
    	    nom1=(nom1-'a'+'A');
    	    nom2=(nom2-'a'+'A');
    	    nom3=(nom3-'a'+'A');
    	}
    	if (((nom1>='A') && (nom1<='Z')) || ((nom2>='A')&&(nom2<='Z')) || ((nom3>='A')&&(nom3<='A')))
    	{
    		nom1=(nom1-'A'+'a');
    		nom2=(nom2-'A'+'a');
    		nom3=(nom3-'A'+'a');
    	}
     
    	if ((nom1<=nom2)&&(nom2<=nom3))
    	cout<<" Les noms sont rang\202s.\n\n MK.Djahli \270 2014";
    	else
    	cout<<" Les noms ne sont pas rang\202s.\n\n MK.Djahli \270 2014";
     
    	return 0;
    }
    Merci infiniment !

  8. #8
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 772
    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 772
    Par défaut
    Citation Envoyé par MK.Djahli Voir le message
    Est ce que ça veut dire que je dois changer la fonction string par la fonction char ? car cela n'a pas marché ! le programme m’empêche de saisir le Nom 2 et le Nom 3 !!
    Citation Envoyé par MK.Djahli Voir le message
    Ça c'est la solution pour la lettre 'a', qu'en est il pour les autres ? (je sais que c'est de la même manière mais est ce que je suis obligé de le faire pour toute les lettres ? ou alors, y a il une autre solution plus courte ?)
    Cela ME parait logique que si on veut mettre en majuscule/ minuscule une chaîne de caractères, il faut le faire pour TOUTES LES LETTRES (et donc coder une boucle)

    Édit bonus:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        string nom = "Test";
        char c1 = nom[0]; // T;
        char c2 = nom[1]; // e;
        char c3 = nom[2]; // s;
        char c4 = nom[3]; // t;
    //  char c5 = nom[4]; // \0; <- Cela plante :-(
     
        const char* str = nom.c_str();
        char cc1 = str[0]; // T;
        char cc2 = str[1]; // e;
        char cc3 = str[2]; // s;
        char cc4 = str[3]; // t;
        char cc5 = str[4]; // \0;
    Et sinon tu n'as pas compris qu'un char, ce n'est qu'un entier. Donc
    • 'A' - 'A' + 'a' = 65 - 65 + 97 = 97 = 'a'
    • 'B' - 'A' + 'a' = 66 - 65 + 97 = 98 = 'b'
    • 'C' - 'A' + 'a' = 67 - 65 + 97 = 99 = 'c'
    • ...
    • 'X' - 'A' + 'a' = 88 - 65 + 97 = 120 = 'x'
    • 'Y' - 'A' + 'a' = 89 - 65 + 97 = 121 = 'y'
    • 'Z' - 'A' + 'a' = 90 - 65 + 97 = 122 = 'z'


    Je te laisse les lettres minuscules et surtout ... réfléchir

Discussions similaires

  1. tri par ordre alphabétique des noms de fichier contenu dans un dossier
    Par ulnar dans le forum Bibliothèque standard
    Réponses: 5
    Dernier message: 07/04/2011, 16h20
  2. Classer une bibliographie par ordre alphabétique des noms
    Par GDMINFO dans le forum Bibliographies - Index - Glossaires
    Réponses: 3
    Dernier message: 16/11/2010, 16h59
  3. Tri de noms par ordre alphabétique
    Par fazak soro dans le forum Pascal
    Réponses: 4
    Dernier message: 19/08/2010, 20h23

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