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 :

Boucle for avec opérateur logique


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 2
    Par défaut Boucle for avec opérateur logique
    Bonjour à tous,

    J'essaye d'écrire un programme qui convertisse l'heure d'un pays en celle d'un autre pays (avec le décalage horaire)
    Je dispose d'un tableau avec les indicatifs téléphoniques de chaque pays et je demande à un utilisateur de rentrer deux indicatifs téléphoniques (celui du pays d'origine et celui du pays de destination), j'aimerai que si l'utilisateur rentre des indicatifs qui ne sont pas dans mon tableau, le programme renvoie ("Invalid code Number")

    Ma professeur à mis ce code en correction, et je ne le comprends pas du tout à partir de la boucle for, je connais l'opérateur && mais je ne vois pas du tout comment il agit sur la boucle ici. Supposons que l'utilisateur me donne 55 (dans le tableau) et 97 (pas dans le tableau) comment le programme parcourt-il la boucle ?

    J'espère que j'ai été suffisamment claire, je vous remercie par avance pour votre aide

    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
    const int country_codes[N] = {44, 34, 86, 55, 1, 358, 351, 98, 91, 381, 7};
     
        int ccode_orig, ccode_dest;
        printf("Enter country codes: ");
        scanf("%d", &ccode_orig);
        scanf("%d", &ccode_dest);
     
     
        int found_orig = 0, found_dest = 0;
        int index_orig = -1, index_dest = -1;
     
        for (int i = 0; ((i < N) && !(found_orig && found_dest)); i++) {
            if (country_codes[i] == ccode_orig) {
                found_orig = 1;
                index_orig = i;
            }
            else if (country_codes[i] == ccode_dest) {
                found_dest = 1;
                index_dest = i;
            }
        }
     
     
        if (!found_orig || !found_dest) {
            printf("Invalid country code.\n");
            return 0;
        }

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    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 153
    Billets dans le blog
    4
    Par défaut
    && est le même partout, il fait un et logique.
    La boucle for est écrite sous la forme for(initialisation; condition pour continuer à itérer; fin d'une itération);
    Partant de là, une simple lecture (et avec le nommage des variables plutôt correct ici) indique clairement : tant que i est plus petit que N, pour ne pas dépasser les bornes, et que l'origine ou la destination n'ont pas été trouvés (donc on boucle jusqu'à trouver les 2).
    Le code n'est pas correct, dans le cas où l'utilisateur entre les mêmes indicatifs pour l'origine et la destination, il retournera toujours "Invalid code country". Le else est en trop.
    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
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 2
    Par défaut
    Merci infiniment pour vos explications. Pour le else, je ne suis pas sure de voir pourquoi il rend le programme faux (il est certes inutile mais pourquoi faux ?)
    Le programme ne "rentre pas" dans le else if à cause du else ? (Dans le cas ou le pays de d'origine est trouvé)

    Supposons que l'utilisateur rentre 44 en pays d'origine et 44 en pays de destination (le premier pays du tableau)
    Le programme va bien parcours le premier if et attribuer à found_orig la valeur 1
    Rentrer dans le else if et attribuer à found_dest la valeur 1

    Puis la condition d'itération n'est plus respectée (si j'ai bien compris) donc la boucle s'arrête et la condition du dernier if n'est pas respectée donc le programme ne dira pas "Invalid codes"

  4. #4
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    787
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 787
    Par défaut
    Hello,

    En reprenant ton exemple, il n'y a qu'un seul 44 dans ton tableau. Donc, si il a été trouvé pour ccode_orig, il ne le sera plus pour ccode_dest.

    Comme l'écrit Bousk, le else est en trop.

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    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 153
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par Robindesbois5554 Voir le message
    Supposons que l'utilisateur rentre 44 en pays d'origine et 44 en pays de destination (le premier pays du tableau)
    Le programme va bien parcours le premier if et attribuer à found_orig la valeur 1
    Rentrer dans le else if et attribuer à found_dest la valeur 1
    Donc toi tu rentres dans le if et le else ? Pas super intéressant, utile ni pratique comme structure de contrôle ça..
    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.

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Citation Envoyé par Robindesbois5554 Voir le message
    (il est certes inutile mais pourquoi faux ?)
    Il n'est pas "que" inutile. Un truc inutile est un truc qui n'a pas d'effet. Or là, le "else" a un effet d'exclusivité. Soit c'est la partie "if" qui est exécutée, soit la partie "else" mais pas les deux.
    Et donc si le "if" est activé, le "else" ne le sera pas et donc même si "contry_codes[i]" est égal à "ccode_dest", le code correspondant ne sera pas exécuté.

    Deux conditions indépendantes, pas de "else" qui entrainerait une exclusivité entre les deux
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if (country_codes[i] == ccode_orig) {
    	found_orig = 1;
    	index_orig = i;
    }
     
    if (country_codes[i] == ccode_dest) {
    	found_dest = 1;
    	index_dest = i;
    }
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

Discussions similaires

  1. [VBA] Boucle "For" avec valeurs spécifiques
    Par NiKoTiNe dans le forum VBA Access
    Réponses: 13
    Dernier message: 28/03/2025, 09h10
  2. Boucle for avec saut
    Par michel71 dans le forum Delphi
    Réponses: 3
    Dernier message: 25/02/2007, 16h16
  3. boucle for avec condition
    Par Daniel Magron dans le forum Delphi
    Réponses: 4
    Dernier message: 22/01/2007, 16h18
  4. Réponses: 2
    Dernier message: 28/08/2006, 18h17
  5. [VB6] boucle for avec liste de valeur defini
    Par Morpheus2144 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 06/04/2006, 18h12

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