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 :

C Fonctions pgcd,ppcm


Sujet :

C

  1. #1
    Membre très actif
    Inscrit en
    Février 2006
    Messages
    311
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 311
    Par défaut C Fonctions pgcd,ppcm
    Bonsoir,
    Je suis débutant dans la programmation et encore plus en c , et j'ai fait un programme de calcul du pgcd et ppcm problème mon programme se lance mais il affiche rien en pgcd et ppcm.
    J'ai l'impression que je passe mal mes arguments ?
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    #include <stdio.h>
    #include <stdlib.h>
     
     
    int pgcd_ppcm(int n1,int n2,int pgcd,int ppcm);
     
     
     
    int main(void)
    {
     
      int n1,n2,pgcd_ppcm,pgcd,ppcm,result;
     
      printf("Entrer le nombres 1: ");
      scanf("%d",&n1);
      printf("Entrer le nombre 2: ");
      scanf("%d",&n2);
      if(n1<=0 || n2<=0)
      printf("Pas de PGCD et PPCM");
      else{
      pgcd_ppcm(n1,n2,pgcd,ppcm);
      printf("Le PGCD vaut : %d\nLe PPCM vaut : %d",pgcd,ppcm);
      }
     
     
      return 0;
    }
     
     int pgcd_ppcm(int n1,int n2,int pgcd,int ppcm)
     {
     
         int grand,petit,sauv,reste,quot;
     
         grand=n1;
         petit=n2;
     
         if(grand<=petit) {
         sauv=grand;
         grand=petit;
         petit=sauv;
         }
     
         reste=grand;
     
         while(reste !=0){
         quot=grand/petit;
         reste=grand-(quot*petit);
         grand=petit;
         petit=reste;
         reste++;
         }
     
         pgcd=grand;
         ppcm=(n1*n2)/grand;
         }
    Merci pour l'aide

  2. #2
    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
    Attention, ce code ne compile pas.

    :~/tmp$ gcc -Wall -Wextra pgcd.c
    pgcd.c: In function ‘main’:
    pgcd.c:22: error: called object ‘pgcd_ppcm’ is not a function
    pgcd.c:13: warning: unused variable ‘result’
    pgcd.c: In function ‘pgcd_ppcm’:
    pgcd.c:56: warning: control reaches end of non-void function
    Ensuite, une fonction en C ne peut pas changer la valeur d'un argument.

    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
     
    #include <stdlib.h>
    #include <stdio.h>
     
    void foo (int a)
    {
       a  = 5;
    }
     
    int main (void)
    {
       int a = 8;
       foo (a);
       printf ("Maintenant: %d\n", a);
       return EXIT_SUCCESS;
    }
    Affichera toujours 8 et non 5...

    Jc

  3. #3
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    C'est parce que si tu veux qu'une fonction modifie un paramètre d'appel à la fonction, il faut passer son adresse. Alors la fonction saura mettre le résultat. C'est comme pour le scanf que tu utilises : tu dis où la valeur lue doit être placée.

    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
    void pgcd_ppcm(int n1,int n2,int  * pgcd,int * ppcm) // void : la fonction ne retourne rien
    {
     
    .....     
         *pgcd=grand;
         *ppcm=(n1*n2)/grand;
    }
     
    int main(void)
    {
     
      int n1,n2,pgcd_ppcm,pgcd,ppcm,result;
    .....
      pgcd_ppcm(n1,n2,&pgcd,&ppcm);
      printf("Le PGCD vaut : %d\nLe PPCM vaut : %d",pgcd,ppcm);
      }

Discussions similaires

  1. Erreur de définition de la fonction PGCD
    Par mfroger93 dans le forum Scheme
    Réponses: 4
    Dernier message: 04/01/2009, 12h54
  2. Définition de la fonction Pgcd-ter
    Par pera12 dans le forum Scheme
    Réponses: 3
    Dernier message: 12/10/2008, 23h42
  3. Calcul de PGCD et PPCM
    Par Anas.sellami dans le forum Pascal
    Réponses: 5
    Dernier message: 12/04/2008, 12h09
  4. Fonctions récursives , factorielle , PGCD
    Par racoboss dans le forum Langage
    Réponses: 4
    Dernier message: 05/01/2008, 04h20

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