Problème Fonctions en C
Magenti
Messages postés
19
Date d'inscription
Statut
Membre
Dernière intervention
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je suis en 1ère année de Licence Informatique et je dois faire un exercice sur les fonctions en langage C.
Mon algo me semble juste mais à l'exécution (par Codeblocks) j'ai constaté qu'il y avait une erreur mais je n'arrive pas à la trouver......si vous pouviez m'aider.....
Voici le programme :
#include <stdio.h>
#include <stdlib.h>
#include "lecture.h"
int f1 (int n)
{
if ((n%2)==0)
{
printf("est multiple de 2");
}
}
int f2 (int n)
{
if ((n%3)==0)
{
printf("est multiple de 3 \n");
}
return 0;
}
int main ()
{
int a;
a= lire_entier ();
if (f1(a))
{
printf(" et est pair \n");
}
f2(a);
if ((a%6)==0)
{
printf("est multiple de 6");
}
return 0;
}
Mon problème c'est que si a=3 il m'affiche qu'il est pair et après qu'il est multiple de 3 alors qu'il ne devrait afficher que "est multiple de 3".....:S
Donc l'erreur est dans mon "if" mais moi ça me semble correct....je vois vraiment pas.....
Si vous trouvez......merci d'avance ! ^^
Je suis en 1ère année de Licence Informatique et je dois faire un exercice sur les fonctions en langage C.
Mon algo me semble juste mais à l'exécution (par Codeblocks) j'ai constaté qu'il y avait une erreur mais je n'arrive pas à la trouver......si vous pouviez m'aider.....
Voici le programme :
#include <stdio.h>
#include <stdlib.h>
#include "lecture.h"
int f1 (int n)
{
if ((n%2)==0)
{
printf("est multiple de 2");
}
}
int f2 (int n)
{
if ((n%3)==0)
{
printf("est multiple de 3 \n");
}
return 0;
}
int main ()
{
int a;
a= lire_entier ();
if (f1(a))
{
printf(" et est pair \n");
}
f2(a);
if ((a%6)==0)
{
printf("est multiple de 6");
}
return 0;
}
Mon problème c'est que si a=3 il m'affiche qu'il est pair et après qu'il est multiple de 3 alors qu'il ne devrait afficher que "est multiple de 3".....:S
Donc l'erreur est dans mon "if" mais moi ça me semble correct....je vois vraiment pas.....
Si vous trouvez......merci d'avance ! ^^
A voir également:
- Problème Fonctions en C
- Codes secrets Android : accéder aux fonctions cachées - Guide
- Fonctions excel en anglais - Guide
- Excel remplir automatiquement une cellule en fonction d'une autre ✓ - Forum Excel
- Comment colorer une cellule excel en fonction du contenu d'une autre cellule - Forum Bureautique
- Mise en forme conditionnelle avec fonction si - Guide
8 réponses
Salut, ton code est a peu pret bon....
Il te dit que a est pair car ta fonction f1 retourne toujours 0.
plus loin tu as un
if(f1(a))
{
/****/
}
vu que f1 retourne 0, et que 0 = TRUE, alors ce que tu as dans ce bloc est tout le temps exécuté.
Remplace ta fonction f1 par ça :
int f1 (int n)
{
if ((n%2)==0)
{
printf("est multiple de 2");
return 0;
}
return -1;
}
Il te dit que a est pair car ta fonction f1 retourne toujours 0.
plus loin tu as un
if(f1(a))
{
/****/
}
vu que f1 retourne 0, et que 0 = TRUE, alors ce que tu as dans ce bloc est tout le temps exécuté.
Remplace ta fonction f1 par ça :
int f1 (int n)
{
if ((n%2)==0)
{
printf("est multiple de 2");
return 0;
}
return -1;
}
Pardon, 0 != TRUE !
true == 1
Mais ta fonction f1 est censée retourner un entier, alros qu'elle ne retourne rien dans ton code
true == 1
Mais ta fonction f1 est censée retourner un entier, alros qu'elle ne retourne rien dans ton code
Merci pour le conseil ^^
Mais je viens de tester, le problème est toujours là et de plus si je mets a=2 il ne m'affiche plus qu'il est pair alors qu'avant ça marchait lol ^^
Mais je viens de tester, le problème est toujours là et de plus si je mets a=2 il ne m'affiche plus qu'il est pair alors qu'avant ça marchait lol ^^
bool f1 (int n)
{
if ((n%2)==0)
{
printf("est multiple de 2");
return true;
}
return false;
}
bool f2 (int n)
{
if ((n%3)==0)
{
printf("est multiple de 3 \n");
return true;
}
return false;
}
int main ()
{
int a;
a= lire_entier ();
if (f1(a))
{
printf(" et est pair \n");
}
f2(a);
if ((a%6)==0)
{
printf("est multiple de 6");
}
return 0;
}
{
if ((n%2)==0)
{
printf("est multiple de 2");
return true;
}
return false;
}
bool f2 (int n)
{
if ((n%3)==0)
{
printf("est multiple de 3 \n");
return true;
}
return false;
}
int main ()
{
int a;
a= lire_entier ();
if (f1(a))
{
printf(" et est pair \n");
}
f2(a);
if ((a%6)==0)
{
printf("est multiple de 6");
}
return 0;
}
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
le "B" majuscule au début pour l'erreur de synthaxe.
sinon laisse int en valeur de retour, mais dans les if où tu appelles ta fonction, met une égalité
sinon laisse int en valeur de retour, mais dans les if où tu appelles ta fonction, met une égalité
Je vois pas trop ce que tu veux dire mais je me suis inspiré de ce que tu as écrit avant et ça marche !!! ^^
Ca donne ça :
#include <stdio.h>
#include <stdlib.h>
#include "lecture.h"
int f1 (int n)
{
if ((n%2)==0)
{
printf("est multiple de 2");
return 1;
}
return 0;
}
int f2 (int n)
{
if ((n%3)==0)
{
printf("est multiple de 3 \n");
return 1;
}
return 0;
}
int main ()
{
int a;
a= lire_entier ();
if (f1(a))
{
printf(" et est pair \n");
}
f2(a);
if ((a%6)==0)
{
printf("est multiple de 6");
}
return 0;
}
Le seul problème c'est que j'ai du mal à comprendre pourquoi......lol ! Merci pour ton aide ^^
Ca donne ça :
#include <stdio.h>
#include <stdlib.h>
#include "lecture.h"
int f1 (int n)
{
if ((n%2)==0)
{
printf("est multiple de 2");
return 1;
}
return 0;
}
int f2 (int n)
{
if ((n%3)==0)
{
printf("est multiple de 3 \n");
return 1;
}
return 0;
}
int main ()
{
int a;
a= lire_entier ();
if (f1(a))
{
printf(" et est pair \n");
}
f2(a);
if ((a%6)==0)
{
printf("est multiple de 6");
}
return 0;
}
Le seul problème c'est que j'ai du mal à comprendre pourquoi......lol ! Merci pour ton aide ^^
Bonjour
vous mélangez un peu les deux façons de faire.
Soit votre fonction traite laffichage auquel cas elle n'a pas besoin de renvoyer un int. Ou alors c'est la fonction appelante qui traite en fonction du nombre retournée.
Prenons le dernier cas.
int f1(int n) {
return n%2==0;
}
de même pour l'autre fonction.
Cdlt
vous mélangez un peu les deux façons de faire.
Soit votre fonction traite laffichage auquel cas elle n'a pas besoin de renvoyer un int. Ou alors c'est la fonction appelante qui traite en fonction du nombre retournée.
Prenons le dernier cas.
int f1(int n) {
return n%2==0;
}
de même pour l'autre fonction.
Cdlt
Bonsoir, j'ai un autre problème avec un algo. Un petit coup de main serait le bienvenu ^^
Voici ce qu'il faut faire : on veut trouver les entiers "x" inférieurs à 1000 tel que x est = à la somme des cubes de ses chiffres. Exemple : 371=3^3+7^3+1^3.
Je dois écrire une fonction qui teste chaque entier compris entre 2 et 999.
J'aimerai isoler dans une variable chaque chiffre du nombre mais je sais pas comment l'écrire....:S
ps : la fonction mod de Maple devient "%" en langage C, mais la fonction quo ?
Merci d'avance ! ^^
Voici ce qu'il faut faire : on veut trouver les entiers "x" inférieurs à 1000 tel que x est = à la somme des cubes de ses chiffres. Exemple : 371=3^3+7^3+1^3.
Je dois écrire une fonction qui teste chaque entier compris entre 2 et 999.
J'aimerai isoler dans une variable chaque chiffre du nombre mais je sais pas comment l'écrire....:S
ps : la fonction mod de Maple devient "%" en langage C, mais la fonction quo ?
Merci d'avance ! ^^
non la fonction ne retourne pas 0 puisqu'il n'y a pas de return.
De plus il ne faut pas mettre return 0 puisque sinon son programme ne sera pas cohérent.
Cdlt