[C] l'appel des procedures et des fonction

xmaster2216 -  
Nabla's Messages postés 18203 Date d'inscription   Statut Contributeur Dernière intervention   -
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   Statut Contributeur Dernière intervention   1 299
 
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   Statut Contributeur Dernière intervention   3 193
 
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   Statut Contributeur Dernière intervention   1 299
 
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   Statut Contributeur Dernière intervention   3 193 > Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention  
 
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