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 :

Question sur la pré incrémentation


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 125
    Par défaut Question sur la pré incrémentation
    Bonjour à tous,

    Je viens ici car je me pose une petite question. J'ai du faire un petit programme simple, qui doit calculer le nombre de nombre premier contenu dans un chiffre donnée. Si l'utilisateur saisi 100, je dois afficher 25 ( 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97.)

    J'ai un programme qui fonctionne, le voilà :

    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>
    #include <math.h>
    using namespace std;
     
    int main()
    {
        int a, f = 1, r = 0;
        cout << "merci de saisir un nombre : " <<endl;
        cin >> a;
        for(int j = a; j >= 2; j--){
            for(int i = j; i >= 2; i--){
                if(j % i == 0 && i != j){
                    f = 0;
                    i = 0;
                }
            }
            if(f){
                r++;
            }
        f = 1;
        }
        cout << r;
    }
    En output, j'ai bien 25 lorsque je saisi 100.

    J'ai fais une autre version (qui était celle de base), celle ci :

    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>
    #include <math.h>
    using namespace std;
     
    int main()
    {
        int a, f = 1, r = 0;
        cout << "merci de saisir un nombre : " <<endl;
        cin >> a;
        for(int j = a; j >= 2; j--){
            for(int i = j; i >= 2; --i){
                if(j % i == 0){
                    f = 0;
                    i = 0;
                }
            }
            if(f){
                r++;
            }
        f = 1;
        }
        cout << r;
    }

    Ici, je n'ai pas mis la condition i != j , mais j'ai mis une pré incrémentation, mais impossible d'obtenir le bon résultat. Si vous avez une explication, ou si je me suis trompé !

    Merci d'avance pour les réponses !

  2. #2
    Membre chevronné
    Homme Profil pro
    Cadre informatique
    Inscrit en
    Avril 2013
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Cadre informatique

    Informations forums :
    Inscription : Avril 2013
    Messages : 183
    Par défaut
    Tu connais le principe de la pré-incrémentation et de la post-incrémentation?

    Peux-tu faire ce test? Qu'as tu obtenu?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    for (int i = 0; i < 10; ++i)
    {
       std::cout << i << ' ';
    }
    std::cout << std::endl;
    for (int i = 0; i < 10; i++)
    {
       std::cout << i << ' ';
    }

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 125
    Par défaut
    En effet...

    J'avais dans l'idée, qu'avec la pré incrémentation, je passai directement à 1 dans ma boucle for(). Du coup, je ne comprend vraiment pas me principe d'une pré incrémentation dans une boucle for(), et je ne trouve absolument aucune logique dans le fonctionnement.

    Il s'agissait de quelque chose de tout bête, merci pour la réponse !

  4. #4
    Membre chevronné
    Homme Profil pro
    Cadre informatique
    Inscrit en
    Avril 2013
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Cadre informatique

    Informations forums :
    Inscription : Avril 2013
    Messages : 183
    Par défaut
    Citation Envoyé par bloups0 Voir le message
    J'avais dans l'idée, qu'avec la pré incrémentation, je passai directement à 1 dans ma boucle for(). Du coup, je ne comprend vraiment pas me principe d'une pré incrémentation dans une boucle for(), et je ne trouve absolument aucune logique dans le fonctionnement.
    J'ai eu les memes soucis que toi mais, en fait, les 3 options de la boucle for sont:
    1 - Condition de début de boucle
    2 - Condition de fin de boucle
    3 - Evolution de la condition de boucle

    Cette 3eme étape ne se fait qu'a la fin de la boucle for.
    Donc, que tu post ou pré-incrémente, cela ne change pas grand chose A moins bien sur, qu'il y ait une logique qui m'échappe et que je veux bien connaitre!!

    En revanche, dans ton code, tu aurais pu commencer ta 2eme boucle un cran en dessous par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for(int j = a; j >= 2; j--){
       for(int i = j-1; i >= 2; --i){
          ...
       }
    }

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 125
    Par défaut
    En effet, j'avais fais une autre version avec le j-1 ^^.

    Merci pour les réponses !

  6. #6
    Membre éprouvé
    Inscrit en
    Mai 2012
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 65
    Par défaut
    La différence de la pré-incrémentation et post-incrémentation ne se voit que sur des itérateurs.
    La pré-incrémentation renvoie une référence sur l'itérateur incrémenté, alors que la post-incrémentation renvoie une copie de l'itérateur, donc dans une boucle for il est toujours plus optimale de faire une pré-incrémentation, plutôt qu'une post-incrémentation (bien que maintenant les compilo peuvent optimiser ça, et que la différence ne se fasse absolument plus ressentir).

    En dehors de ça, Bysbobo, à tout dit.

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

Discussions similaires

  1. Question sur l'auto-incrémentation
    Par M4veR1K dans le forum SQL
    Réponses: 8
    Dernier message: 07/09/2012, 16h30
  2. Question sur l'incrémentation
    Par codon21 dans le forum Bases de données
    Réponses: 2
    Dernier message: 20/03/2012, 14h22
  3. question sur l'incrémentation automatique
    Par Invité dans le forum Langage SQL
    Réponses: 13
    Dernier message: 27/11/2008, 18h19
  4. Réponses: 2
    Dernier message: 11/08/2002, 21h27
  5. question sur les message box !
    Par krown dans le forum Langage
    Réponses: 7
    Dernier message: 02/08/2002, 16h11

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