aide pour un code
Répondre à la discussion
Affichage des résultats 1 à 20 sur 20

aide pour un code



  1. #1
    invite6440bef2

    aide pour un code


    ------

    Salut à tous j'essaye de créer un programme en C++ qui pourra générer des nombres premiers de A à B , j'ai réussi à créer une partie du programme mais je ne comprend pas d'ou vient le probleme merci de m 'aider !
    PS : Je débute !!
    Voici mon code :
    ______________________________ ________________
    Code:
    #include <iostream>
    #include <cmath>
    #include <vector>
    using namespace std;
    
    int main()
    {
    
        double A(0);
        double B(0);
        double C(0);
        double D(0);
        cin>>A;
        cin>>B;
    
        while (A<=B)
        {
    
            cout<<A;
    
            for (C=2; C<A ; C++)        
            {
                D=A/C;
                if (D==floor(D))
                {
                    goto no;
                }
                C++;
    
            }
    
            cout<<A<<endl;
            no:
    
            A++;
    
    
    
    
        }
    
    
    
    
    }
    ______________________________ ________________________
    Alors voici le principe : Un nombre A prend des valeurs successives jusqu'a B (inclus). Chaque nombre A subit la fonction " for (C=2; C<A ; C++) " Vous la trouverez dans le code.
    En gros chaque valeur de la variable A est testé pour savoir si elle est premiere ou non, si elle l'est, on l'affiche, sinon on va à un autre bout du programme pour que A deviennent A++;


    J'éspère que vous avez compris l'idée!! Merci de m'aider et surtout de m'orienter (PS : j'ai déja réussi à créer un programme de test de primalité mais je n'arrive pas à l'inclure dans celui ci)

    -----
    Dernière modification par Jack ; 06/07/2014 à 01h15. Motif: Balises code

  2. #2
    invite6440bef2

    Re : aide pour un code

    C'est bon j'ai trouvé !!! merci quand même (mp moi si vous voulez avoir le code)

  3. #3
    azad

    Re : aide pour un code

    Drôle de méthode. Et pourquoi prendre des doubles alors que tu ne traite que des integer ?

  4. #4
    Jack
    Modérateur

    Re : aide pour un code

    Il serait bon de lire un minimum les règles de ce forum,
    http://forums.futura-sciences.com/pr...ves-forum.html

    C'est tout de même plus lisible avec l'indentation, non?
    Dernière modification par JPL ; 06/07/2014 à 14h03. Motif: Activation du lien

  5. A voir en vidéo sur Futura
  6. #5
    Jack
    Modérateur

    Re : aide pour un code

    Ca faisait longtemps que je n'avais pas vu de programme avec un goto en C. Ca pique les yeux

  7. #6
    invite6440bef2

    Re : aide pour un code

    tout d'abord, merci d'avoir répondu, ensuite, pour répondre a azad, j'utilise des doubles car je vien de débuter et je ne vois pas la difference (je trouve que si on peut mettre des nombres à virgule autant le faire!)
    puis pour jack, pourrais-tu me dire quel est le probleme avec goto ??

  8. #7
    invite6440bef2

    Re : aide pour un code

    Code:
     #include <iostream>
    #include <cmath>
    #include <vector>
    using namespace std;
    
    /*            0.SOMMAIRE
    
    1.Initialisation
    1.2 Entrées des valeurs A et B
    1.2.2.Conditions de 1.2.
    1.3.Choix de l'utilisateur : Pause ou non
    1.3.2.Conditions de 1.3.
    1.4.Pause entre x nombres premiers ou non.
    
    2.Calculs
    
    3.Finish
    
    4.Fin de programme                      */
    
    
    int main()
    {
    // 1.Initialisation.
    
    
        vector<int> tableauNombrePremier(0,0);
        double A(0); // début de la recherche de nombre premiers
        double B(0); // fin de la recherche de nombre premiers
        double C(0); // diviseur de A qui prend des valeurs successives
        double D(0); // resultat de A/C , s'il est entier alors A n'est pas premier
        double h(0); // valeur ajouté à C, il est tout d'abord égale à 1, puis à 2 afin de ne tester que les diviseurs impairs
        double j(0); // compteur de nombre premier, ajout de 1 à chaque nombre premier trouve
        double T(0); // choix decrit à 1.3
        double P(0); // nombre de nombre premier trouve avant une pause
        double A2(0); // valeur ou A est stocké afin que l'on ne perde pas la valeur initiale
        double B2(0); // idem que A
        REFAIRE:
    
    // 1.2.Entrées des valeurs A et B
    
        cout<<" Ce programme vous donnera tout les nombres premiers de A a B "<<endl;
        cout<<" Entrez A : ";
        cin>>A;
        cout<<" Entrez B : ";
        cin>>B;
    
    // 1.2.2.Conditions de 1.2.
    
    
        if (A!=floor(A) || B!=floor(B))
        {
            cout<<" ERROR : A et B doivent etre entiers  _   A=floor(A)  ; B=floor(B)    _"<<endl;
            goto REFAIRE;
        }
    
        if (B<A)
        {
          cout<<"ERROR : A ne doit pas etre superieur a B  _   A<B   _";
          goto REFAIRE;
        }
        if (A<2)
        {
            A=2;
        }
    
        A2=A;   // Sauvegarde de la valeur de A et de B au cas où elles changent
        B2=B;
    
    // 1.3.Choix de l'utilisateur : Pause ou non
    
        cout<<" Entrez 1 si vous souhaitez faire une pause chaque x nombres premiers "<<endl;
        cout<<" trouves, vous choisirez x ."<<endl;
        cout<<" Entrez 2 pour passer en mode automatique."<<endl;
        AGAIN2:
        cout<<"Choix : ";
        cin>>T;
    
    
    // 1.3.2.Conditions de 1.3.
    
         if (T<1  ||  T>2)
         {
             cout<<" ERROR : Entrez un choix valide  _1 || 2_ ";
             goto AGAIN2;
         }
    
    // 1.4.Pause entre x nombres premiers ou non.
    
         if (T==2)
           {
            goto AUTO;
           }
    
    
        if (T==1)
         {
          cout<<" Entrez le nombre de x nombres premiers trouves"<<endl;
          cout<<" avant de marquer une pause : ";
          cin>>P;
    
          // 1.4.2 Conditions de 1.4.
          if (P<0)
            {
              cout<<" ERROR : il est impossible d'avoir un x négatif. "<<endl;
            }
    
          }
    
         cout<<"______________________________________________"<<endl;
    
    
    // 2.Calculs
    
        AUTO:
        while (A<=B)   // boucle 2.1
        {
    
    
    
            for (C=2; C<=sqrt(A) ; C+=h)   // boucle 2.1.2
            {
                D=A/C;
    
    
    
              if (C==2)   // transformation de C=2 en C=1 puis C=3, C=5,C=7 etc..
    
                    {
                  C=C-1;
                    }
    
               h=2;   // changement incrémentation ( C+=h ) h= 2 les diviseurs C, après avoir été 2 ne sont plus qu'impairs
    
               if (D==floor(D))  //sortie de boucle si la division A/C est entière (A n'est donc pas premier et on lui ajoute 1)
    
                    {
                  goto no;
                    }
    
            }  //sortie boucle 2.1.2 lorsque A n'a aucun diviseur
    
            cout<<A<<endl;  // affichage des nombres premiers ici
            tableauNombrePremier.push_back(A);
            j++; //compteur de nombres premiers
    
            if (T==1)  //choix effectué à 1.3.
            {
             double L;
    
             L=j/P;
             if (L==floor(j/P)) //lorsque j (le compteur de NP) est égale à P alors L (L=j/P) est égale à floor(j/P). floor est la fonction qui trouve la partie entière d'un nombre
    
                {cout<<"PAUSE : Entrez 0 pour continuer : ";
                double O(0);
                AGAIN:
                cin>>O;
                if (O!=0)
    
                {
                    goto AGAIN;
                }}}
    
            no: // sortie de boucle 2.1.2 si A n'est pas premier
    
            A++; // nouveau test sur A++
    
    
    
    
        } // sortie boucle 2.1
    
    
    // 3.Finish
    
    cout<<"______________________________________________"<<endl;
    cout<<endl;
    cout<<j<<" nombres premiers trouves entre "<< A2 <<" et "<<B<<endl;
    cout<<"______________________________________________"<<endl;
    
    }
    
    // 4.Fin de programme

  9. #8
    invite6440bef2

    Re : aide pour un code

    voila j'ai fais ça avec la commande vous pouvez me dire si quelque chose est inutile ou autre (jai commencé à programmer des trucs hier !!) ?? PS : ca marche bien

  10. #9
    Jack
    Modérateur

    Re : aide pour un code

    goto est à peine cité dans n'importe quel bon manuel de C. goto est à proscrire de tout bon programme écrit en C, C++, etc. Plus d'info ici:
    http://fr.wikipedia.org/wiki/Goto_(informatique)

    L'utilisation des réel est inutile et est plus complexe à traiter pour un ordinateur, d'où un temps de calcul inutilement long. De même, multiplications et divisions prennent beaucoup plus de temps de calcul qu'une addition par exemple.
    Il existe un algorithme simple pour déterminer une série de nombres premier:
    http://fr.wikipedia.org/wiki/Crible_...atosth%C3%A8ne

    En se débrouillant bien, on peut éviter multiplications et divisions.

    A+
    Dernière modification par Jack ; 06/07/2014 à 12h02.

  11. #10
    invite6440bef2

    Re : aide pour un code

    Daccord merci, mais je ne vois pas comment faire la même chose sans goto car il me parait plus simple d'utiliser le goto qu'autres choses
    par exemple pour créer ce programme il m'a fallut des sortes de menu et je ne sais pas comment les écrire ! auriez vous une idée ?
    par exemple : appuyez sur 1 pour.. ou appuyez sur 2 afin de ..

  12. #11
    invite6440bef2

    Re : aide pour un code

    Bon je vais continuer d'apprendre le c++ je reviendrais vous voir quand j'aurais terminé le cours !! mais merci pour ces precisions jack je ne savais pas

  13. #12
    Jack
    Modérateur

    Re : aide pour un code

    Il y a TOUJOURS moyen de se passer de goto en C++. Les instructions "do while", "while" et "for" permettent de remplacer goto de manière très avantageuse.
    Si on veut une discontinuité dans l'exécution d'une boucle, il existe les instructions "break" et "continue".

  14. #13
    invite6440bef2

    Re : aide pour un code

    Salut, dans la partie //2. Calculs ; comme tu peux le voir il y'a un for dans un while si je met un " break; " à la place du " goto no; " dans la condition if (D==floor(D)). Que se passera t-il ? Est-ce que la boucle for se termine et le programme reprend en dessous de la ligne " //sortie boucle 2.1.2 ".
    Si oui, je n'ai qu'a mettre " if (D!=floor(D)) " (apres être sortie de la boucle for)
    Code:
     cout<<A<<endl;  // affichage des nombres premiers ici
            tableauNombrePremier.push_back(A);
            j++; //compteur de nombres premiers
    
            if (T==1)  //choix effectué à 1.3.
            {
             double L;
    
             L=j/P;
             if (L==floor(j/P)) //lorsque j (le compteur de NP) est égale à P alors L (L=j/P) est égale à floor(j/P). floor est la fonction qui trouve la partie entière d'un nombre
    
                {cout<<"PAUSE : Entrez 0 pour continuer : ";
                double O(0);
                AGAIN:
                cin>>O;
                if (O!=0)
    
                {
                    goto AGAIN;
                }}}

  15. #14
    invite6440bef2

    Re : aide pour un code

    Il reste un goto AGAIN; comment faire ici car je souhaiterais redemander le cin>>O; au cas ou (O!=0)

  16. #15
    Jack
    Modérateur

    Re : aide pour un code

    Avant:
    Code:
    AGAIN:
         cin>>O;       
         if (O!=0)       
        {                
             goto AGAIN;
        }
    Après
    Code:
    do
    {
         cin>>O;       
    } while (O!=0);
    C'est pas plus beau (et logique) comme çà?

    En passant, le nommage de tes variables est plutôt approximatif et pas très parlant. Ce serait donc mieux comme ceci:
    Code:
    do
    {
         cin>>choix;       
    } while (choix != 0);
    Dernière modification par Jack ; 06/07/2014 à 16h56.

  17. #16
    invite6440bef2

    Re : aide pour un code

    ah!!!! excellent merci j'aurais jamais pensé à faire ça !

  18. #17
    invite2d7144a7

    Re : aide pour un code

    Bonjour,
    Citation Envoyé par RezCray1 Voir le message
    ah!!!! excellent merci j'aurais jamais pensé à faire ça !
    Eh oui, ça montre qu'il faut que tu retournes aux bases de la programmation : principales structures, les boucles.

  19. #18
    invite6440bef2

    Re : aide pour un code

    salut c'est ce que je fais en permanance j'ai commencé à apprendre la programmation avant hier !!c++ je savais pas ce que c'etait avant hier

  20. #19
    Jack
    Modérateur

    Re : aide pour un code

    Bon courage alors.

    Mais comme te le conseille whoami, ne néglige pas les bases de l'algo.

  21. #20
    invite6440bef2

    Re : aide pour un code

    merci !!!

Discussions similaires

  1. code vb 2008 pour code bouton eteindre ou allumer une lampe
    Par invite7c733226 dans le forum Programmation et langages, Algorithmique
    Réponses: 0
    Dernier message: 16/02/2013, 21h44
  2. Aide pour code dans Excel (simple)
    Par invite7c3c9aaf dans le forum Programmation et langages, Algorithmique
    Réponses: 12
    Dernier message: 28/09/2011, 15h10
  3. Réponses: 5
    Dernier message: 10/09/2010, 17h25
  4. Aide :code pour calcul de position via Gps
    Par invitefbae583f dans le forum Technologies
    Réponses: 1
    Dernier message: 22/06/2010, 19h21
  5. Cherche aide pour utiliser code ASCII sur portable SONY VAIO
    Par invite23950fd4 dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 21/12/2008, 17h37