[C] l'appel des procedures et des fonction

Fermé
xmaster2216 - 3 févr. 2010 à 13:22
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 - 4 févr. 2010 à 08:57
Bonjour,
je suis debutant en langage c
je veux calculer PGCD de deux entier a l'aide de procedures et de fonction
mais je trouve des probleme pour l'appel des procedures
comment je fait cet appel

voici mon program


#include <stdio.h>
#include <stdlib.h>


int main()
{
void saisir(int a,int b)
{ do
{ printf("a=");
scanf ("%d", &a); }
while (a>0);
do { printf ("b=");
scanf ("%d", &b);
}
while (b>0);
return 0; }
int PGCD (int a, int b)
{ int x, p;
do {x=a;
a=b;
b= x % b; }
while (b==0);
p=a; scanf("%d",p);
return p; }
void affichage (int p)
{ printf ("le PGCD est %d",p);
return 0; }
int main (void)
{
saisir(a,b);
PGCD(p);
affichage(p);
return 0;
}


merci pour repondre
A voir également:

2 réponses

Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
3 févr. 2010 à 14:42
Les fonctions se définissent en dehors du main(), il n'est pas possible d'en définir l'une dans l'autre.
Il faut définir tes variables.
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 193
3 févr. 2010 à 18:14
dans ton programme, tu as 2 main. Ce n'est pas correcte ! (celui de tout en haut doit etre supprimé)

de plus, avec le 2°, les parametres sont passés en copie sur saisir, la fonction PGCD est appellé avec un nombre de parametrse invalide... sans rien tester, voici deja une première vague de corerections:

#include <stdio.h> 
#include <stdlib.h> 



void saisir(int* a,int* b) 
{ 
  do 
  {   
    printf("a="); 
    scanf ("%d", a); 
  } while (*a>0); 
  do { 
    printf ("b="); 
    scanf ("%d", b); 
  } 
  while (*b>0); 
  return 0; 
}

int PGCD (int a, int b) 
{ 
   int x, p; 
   do {x=a; 
   a=b; 
   b= x % b; } 
   while (b==0);
 
p=a; scanf("%d",p); 
return p; } 

void affichage (int p) 
{ 
printf ("le PGCD est %d",p); 
return 0; } 

int main (void) 
{ 
int a;   //on declare les variables
int b;
int p;
saisir(&a,&b);  //on passe l'adresse (et pas une copie sur la pile)
p=PGCD(a,b);  //on passe les deux valeurs, et on récupère ce qui est envoyé par le return
affichage(p); 
/*
//ou:
affichage(PGCD(a,b));
*/

return 0; 
} 


voila... je sais pas si ca marche, mais ca me semble plus correcte...

pour saisir, j'a fait passer par pointeurs. Il aurrai peut etre mieu valu pour toi faire un passage par references, mais je savais pas comment ca passerait avec les scanf ...
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
4 févr. 2010 à 08:30
et puis, les références en C, je crois que ça n'existe pas... (introduit avec le C++)
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 193 > Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023
4 févr. 2010 à 08:57
c'est probable... c'est surement ce qui explique que le scanf ne les utilise pas ! De plus, pour ma part, j'utilise toujours un compilo C++...
0