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 :

Programme qui ne fonctionne pas


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 5
    Par défaut Programme qui ne fonctionne pas
    Bonjour à tous,
    Je prends des cours par correspondance de programmeur sur micro.
    J'ai un devoir à rendre, je sais ce que vous allez dire, mais je ne demande pas que l'on me fasse le devoir, simplement m'expliquer pourquoi (si c'est possible) mon prog ne donne aucun résultat.

    Voici l'ennoncé:

    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
    les variables:
    entier n
    entier k
     
    début
         écrire"Décomposition d'un nombre en facteur premier"
         écrire"Introduire un nombre>0"
         Lire n
         tant que n>0 faire
         début
              écrire "facteurs premiers"
              tant n modulo 2=0 faire
              début
                     écrire"2"
                     .n<--n/2
              fin
              k<--3
              tant que n=1
              si (modulok=0) alors k<--k+2
              sinon
              début
                     écrire k
                     n<--n/k
               fin
               écrire"Introduire un nombre>0"
               Lire n
         fin
    fin
    Voici ma traduction en 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
    25
    26
    27
    28
    29
    30
    31
    #include<stdio.h>
    #include<math.h>
     
    int n,k;
     
    main()
    /*Decomposition d'un nombre en facteur premier*/
    {
                    printf("\nIntroduire un nombre superieur a 0:\t");
    /*le tabulateur est la pour la lisibilité dans la fenetre DOS*/
                    scanf("%d", &n);
                    while(n>0);
                    {
    /*facteur premier*/
                          while(n%2==0);
                          {
                                printf("2");
                                n=n/2;
                          }
                          k=3;
                          while(n==1);
                          if(n%k==0) k=k+2;
                          else("");
                          {
                              printf("%d", &k);
                              n=n/k;
                          }
                          printf("Introduire un nombre>0:\n");
                          scanf("%d", &n);
                    }                
    }
    Je nobtient aucun résultat final, a priori pas d'erreur lors de la compilation (j'utilise Dev-C++ 4.9.9.2), pas de warning, le programme s'execute je rentre bien un nombre superieur à 0, et rien ne se passe, juste le prompt qui clignote ...

    Quelle erreur ai je fais?
    Est ce que c'est le choix des boucles qui ne sont pas bonnes?
    Pouvez vous m'aider a comprendre?

    Un grand merci a tous

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Sans corriger l'algo, tu as fait des erreurs de 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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    #include<stdio.h>
    #include<math.h>
     
    // il est inutile ici d'avoir des variables globales
    //int n,k;
     
    // le protype de main est
    // soit int main(void) si tu n'as pas besoin des arguments de ligne de commande
    // soit int main(int argc, char **argv) si tu en as besoin.
    int main(void)
    /*Decomposition d'un nombre en facteur premier*/
    {
      int n, k;
                    printf("\nIntroduire un nombre superieur a 0:\t");
    /*le tabulateur est la pour la lisibilité dans la fenetre DOS*/
       // scanf est une fonction très dfficile à utiliser à éviter
                    scanf("%d", &n);
                    while(n>0); // ici il faut supprimer le ; c'est pourquoi ça boucle
     car le ; tout seul signifie une instruction vide
      // donc tant que n > 0 je ne fais rien, alors ça boucle tout le temps car
      // n ne change pas de valeur
                    {
    /*facteur premier*/
                          while(n%2==0);
                          {
                                printf("2 \n");  // il vaut mieux mettre le '\n' pour forcer l'affichage, ce n'est pas obligatoire
                                n=n/2;
                          }
                          k=3;
                          while(n==1); // même remarque que tout à l'heure
                          if(n%k==0) k=k+2;
                          else("");
                          {
                              printf("%d", &k);
                              n=n/k;
                          }
                          printf("Introduire un nombre>0:\n");
                          scanf("%d", &n);
                    } 
      // le fonction main doit retourner une valeur, ici 0 par défaut
      return 0;              
    }
    ceci dit, même avec ça, ton programme ne doit pas fonctionner, je te laisse réfléchir à l'utilisation d'accolades pour grouper des actions dans les while
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  3. #3
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut Re: Programme qui ne fonctionne pas
    Citation Envoyé par jipé95
    J'ai un devoir à rendre, je sais ce que vous allez dire, mais je ne demande pas que l'on me fasse le devoir, simplement m'expliquer pourquoi (si c'est possible) mon prog ne donne aucun résultat.
    Boucle infinie : Il y a un ; en trop après un while...
    Il des bizarreries :
    n'a aucun sens...
    Il y a un & dans un printf() avec "%d"...

    Je crois qu'il est temps de reilre sérieusement ton cours de C. Trop d'erreurs basiques...

  4. #4
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Je rajouterais que

    N'a aucun sens en C.

    De plus, le corps de ta boucle interne est faux, ton algo dit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
              si (modulok=0) alors k<--k+2
              sinon
              début
                     écrire k
                     n<--n/k
               fin
    Tu remarqueras qu'il ne spécifie pas comment calculer modulok et je te rassure, ce n'est pas:

    comme tu as fait... Mais plutôt:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    modulok = n%k;
    si (modulok=0) alors k <-- k+2
    Remarque que
    s'écrit en C comme ceci:

    Jc

  5. #5
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Pendant que j'y suis regarde aussi la signification de & avant une variable.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  6. #6
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Citation Envoyé par fearyourself
    Je rajouterais que

    N'a aucun sens en C.
    Je ne l'avais pas vu
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  7. #7
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 5
    Par défaut
    Allons bon.....
    Merci pour ces remarques pertinentes...

    j'ai donc rectifie quelques erreurs...et ca marche, comme un canard sur trois pattes !!!!

    Je reprends mes bouquins et retourne a l'assault du C.

    Pas evident a 35 ans de prendre des cours par correspondance, mais j'arriverais bien a comprendre.

    Je ne sais pas ce que vous en pensez, mais on peut considerer ce post comme etant resolu.

    Merci encore pour l'aide donne

  8. #8
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 5
    Par défaut Enfin....
    Bonsoir,
    Aprés mettre pris la tête pendant pas mal de temps, j'ai décroché le téléphone pour avoir le prof.
    Il se trouve que l'algo était faut, problème à l'impression des devoirs.
    Avec le bon algo, j'ai réalisé ce code, qui lui fonctionne.
    Ma principale erreur était de vouloir traduire "mot à mot" l'algo.
    Merci pour vos coups de pied dans le c.. que vous m'avez donné, a défaut de faire du bien, ça ouvre les yeux !!
    Bref voici le bon code:
    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
    #include<stdio.h>
    #include<math.h>
    int main()
    /*Decomposition d'un nombre en facteur premier*/
    {
                    int n,k;
                    printf("\n\tIntroduire un nombre superieur a 0:\t");
    /*Le tabulateur est la pour la lisibilite dans la fenetre DOS*/
                    scanf("%d", &n);
                    while(n>0)
                       {
    /*facteur premier*/
                              while(n%2==0)
                              {
                                           printf("\t 2");
                                           n/=2;
                              }
                              k=3;
                              while(n>1)
                              {
                              if(n%k!=0)
                              {
                                        k+=2;
                                        }
                              else
                              {                                    
                                         printf("\t %d",k);
                                         n/=k;
                                         }
                              }
                              printf("\n\n\tIntroduire un nombre superieur a 0:\t");
                              scanf("%d", &n);
                      }
                      return 0;
    }
    Voila....
    Ce problème est résolu.....jusqu'au suivant !!!
    Merci a tous.

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

Discussions similaires

  1. Programme qui ne fonctionne pas
    Par vfr38 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 26/09/2014, 22h41
  2. Programme "hello world" qui ne fonctionne pas
    Par Glork dans le forum Android
    Réponses: 8
    Dernier message: 14/12/2013, 18h35
  3. programme qui ne fonctionne pas!
    Par laureat dans le forum Débuter
    Réponses: 8
    Dernier message: 18/01/2010, 00h34
  4. Réponses: 4
    Dernier message: 13/10/2007, 15h18
  5. Programme Perl tout simple qui ne fonctionne pas
    Par jejerome dans le forum Langage
    Réponses: 4
    Dernier message: 26/02/2006, 23h58

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