Aide je ne trouve pas mon erreur!!

Résolu/Fermé
Coucou1504 Messages postés 60 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 12 février 2010 - 20 févr. 2008 à 18:28
Coucou1504 Messages postés 60 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 12 février 2010 - 21 févr. 2008 à 15:54
Bonjour,
Je suis bloqué!!! Je ne trouve pas mon erreur!!!! Est ce quelqu'un pourrait m'aider!!!
le but de cet exo c l'addition de 2 fractions!!!
voici mon code!!!

#include<stdio.h>
#include <conio.h>

//###########################SAISIR#################################################
void saisir(int a,int b,int c,int d)
{
printf("Veuillez saisir un nombre a");//je demande à l'utilisateur de saisir
printf("\n");
scanf("%f",&a);
printf("Veuillez saisir un nombre b");
printf("\n"); //4 nombres
scanf ("%f",&b);
printf("Veuillez saisir un nombre c");
printf("\n");
scanf("%f",&c);
printf("Veuillez saisir un nombre d");
printf("\n");
scanf ("%f",&d);
getchar();
}


//#############################ADDITION############################################



float addition (int a, int b, int c, int d)
{
float add=0;
//tant que les denominateurs sont different de 0!!

if (d==b) //si on a le même denominateur!!
{
add= add+(a + c) / b;
}
else //si on n'a pas le même denominateur
{
add =add+(((a*d)+(c*b))/(b*d));
}


return add;
}


int main()
{
int a,b,c,d;
float add;//mes variable;
saisir(a,b,c,d);
//add = addition (a,b,c,d);
printf ("Le resultat est : %f",add);
getchar();
getchar();


}

Merci d'avance!!!

7 réponses

Utilisateur anonyme
20 févr. 2008 à 18:37
Bonsoir,

qu'est-ce qui ne fonctionne pas ?
enlever le commentaire sur la ligne qui appelle la fonction add et peut être que ...
0
Coucou1504 Messages postés 60 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 12 février 2010 3
20 févr. 2008 à 18:42
merci de ton aide. En effet j'ai oublié de dire ce qui n'allait pas!!
Si j'enleve ce qe j'ai mis en commentaire, mon pg se bloque au niveau de l'addition. Pour saisir sa fonctionne!!!
Encore merci, mais j'y avais pensé mais il me bloque tout!!!
0
Utilisateur anonyme
20 févr. 2008 à 18:45
L'algoritme semble bon, c'est ce qui m'inquiète. alors add ne serait-il pas un mot réservé ?
essaies truc à la palce.
0
Coucou1504 Messages postés 60 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 12 février 2010 3
20 févr. 2008 à 18:54
J'ai donc remplacer les add par truc!! Ca n'a rien changer!! Mais je me pose une question, les variable dans ma fonction, doivent-elles être les même que dans mon programme principal??
Merci de votre aide!!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Mahmah Messages postés 496 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 22 juin 2010 125
20 févr. 2008 à 19:53
Bonjour,

Il y a deux petites erreurs, la première est que tu mélange les float et les int et que ça ne fait pas très bon ménage.
1) Dans les scanf (%f pour les float, %d pour les int) Bon en pratique ça marche mais Brrrrr
2) dans l'addition :

5.0f / 3.0f = 1.6666666...f
5 / 3 = 0


La deuxième est la fonction saisir. En C les paramètres sont passés "par valeur", on dit aussi "par copie", petit exemple:


void maFcontion( int a )
{
   printf( "Au début de ma fonction a = %d\n", a );
   a = 4;
   printf( "A la fin de ma fonction a = %d\n", a );
}


int a = 2;

printf( "Avant ma fonction a = %d\n", a );
maFonction( a );
printf( "Après ma fonction a = %d\n", a );


Ce code donnera la sortie suivante:

Avant ma fonction a = 2
Au début de ma fonction a = 2
A la fin de ma fonction a = 4
Après ma fonction a = 2

Pour palier à ce problème il y a les pointeurs afin de faire un passage d'argument par adresse. (Le pointeur lui même est une copie mais les données pointées sont toujours les mêmes.

Exemple:

void saisir( float *pa, float *pb )
{
   *pa = 2;
   scanf( "%f", pb );   // pas de '&', pb est déjà une adresse.
}

float a, b;

saisir( &a, &b );



Voilou,

M.
0
Mahmah Messages postés 496 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 22 juin 2010 125
20 févr. 2008 à 20:09
Non, le nom des paramètres peuvent être totalement différents des noms du variables du programme.

Les codes suivants est valides :

1)
int a = 2;

void maFonction( int b )
{
   printf( "%d", b );
}

maFonction( a );   // Affiche 2


2) Ton cas.

int a = 2;

void maFonction( int a )
{
   a = 4;
}

maFonction( a ); // la fonction n'a aucun effet, elle modifie sa copie du paramètre.


3)
int a = 2;

void maFonction( int b )
{
   b = a;   // a est visible depuis l'intérieur de la fonction
   printf( "%d", b );
}

maFonction( 4 );   // Affichera 2


4)
int a = 2;

void maFonction( int a, int b )
{
   b = a;   // Le a de l'environement global est masqué par le paramètre du même nom.
   printf( "%d", b );
}

maFonction( a, 4 );   // Affichera 4



5)
int a = 2;

void maFonction( int b)
{
   a = 4;
   printf( "%d", b );
}

maFonction( 3 );   // Met 4 dans a, Affiche 3


Voilà les cas les plus courants.
M.
0
Coucou1504 Messages postés 60 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 12 février 2010 3
21 févr. 2008 à 15:54
Merci beaucoup!!!
La notion de pointeur je ne l'ai pas encore bien intégrer, il va falloir que je revois mes cours!!!
Merci beaucoup!!!
0