Se connecter / S'enregistrer
Votre question

probleme en C

Tags :
  • Programme
  • Programmation
Dernière réponse : dans Programmation
5 Novembre 2005 15:57:23

bjr je suis débutant en C est je doit effectuer un programme qui doit faire:
On vous demande d’écrire un programme regroupant plusieurs fonctions (ces fonctions doivent être déclarées en prototypes et définies après la fonction main :

1). La fonction main, en plus de la lecture des valeurs nécessaires, doit contenir un menu pour faire appel aux différentes fonctions
2). Les différentes fonctions à écrire sont :
- int parfait(int a);
- int somme_diviseurs(int x);
- int premier(int v);
- int factoriel(int a);
- int puissance (int n,int x);
- float exponentiel(int n);
- int binome (int a,int b);

Bienvenue dans ce programme qui effectue des opérations mathématiques, que voulez vous faire ? (Tapez votre choix)
1 : Produit factoriel
2 : Nombre est parfait
3 : Nombre premier
4 : Calcul de la somme des diviseurs d'un entier
5 : Calcul de x puissance n (x^n)
6 : Calcul de l’exponentielle (e^n)
7 : Calcul des coefficients du binôme

en ce qui concerne les programme individuel et le menu(case break) pas de probleme!mais la ou je blque c'est pour les appel de fonction je me rend dingue quelqun pourrai t il m aider pour la sturcture du prog avec les apel de fonction?

pour le moment mon prog ressemble a sa!(a pas grand chose quoi!):
#include<stdio.h>
#include<stdlib.h>

int parfait(int z);
int somme_diviseurs(int x);
int premier(int v);
int factoriel(int a);
int puissance (int n,int x);
float exponentiel(int n);
int binome (int a,int b);


int main()
{
int menu, n,m;


do {
printf("Menu :\n1)Parfait\n2)Somme_diviseurs\n3)Premier\n4)Factoriel\n5)Puissance\n6)Exponentiel\n7)Binome\n\n");
printf("Entrez votre choix : ");
scanf("%d",&menu);
} while(menu>7 || menu<=0);

switch(menu)
{
case 1 :
printf("Donner un entier :");
scanf("%d", &n);
if(n == parfait(n))
printf("%d est parfait\n",n);
else
printf("%d n'est pas parfait\n",n);
break;

case 2 :
break;
case 3 :
break;
case 4 :
break;
case 5 :
break;
case 6 :
break;
case 7 :
break;

}
}

int parfait(int n)
{
int somme=1,a=2;
while(a<=n/2)
{ if(n%a==0)
{
somme=somme+a;
a=a+1;
}
}
return somme;
}

Autres pages sur : probleme

a b L Programmation
5 Novembre 2005 16:08:28

Bon je reposte en quelque chose de lisible :-D
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3.  
  4. int parfait(int z);
  5. int somme_diviseurs(int x);
  6. int premier(int v);
  7. int factoriel(int a);
  8. int puissance (int n,int x);
  9. float exponentiel(int n);
  10. int binome (int a,int b);
  11.  
  12.  
  13. int main()
  14. {
  15. int menu, n,m;
  16.  
  17.  
  18. do {
  19. printf("Menu :\n1)Parfait\n2)Somme_diviseurs\n3)Premier\n4)Factoriel\n5)Puissance\n6)Exponentiel\n7)Binome\n\n");
  20. printf("Entrez votre choix : ");
  21. scanf("%d",&menu);
  22. } while(menu>7 || menu<=0);
  23.  
  24. switch(menu)
  25. {
  26. case 1 :
  27. printf("Donner un entier :");
  28. scanf("%d", &n);
  29. if(n == parfait(n))
  30. printf("%d est parfait\n",n);
  31. else
  32. printf("%d n'est pas parfait\n",n);
  33. break;
  34.  
  35. case 2 :
  36. break;
  37. case 3 :
  38. break;
  39. case 4 :
  40. break;
  41. case 5 :
  42. break;
  43. case 6 :
  44. break;
  45. case 7 :
  46. break;
  47.  
  48. }
  49. }
  50.  
  51. int parfait(int n)
  52. {
  53. int somme=1,a=2;
  54. while(a<=n/2)
  55. {
  56. if(n%a==0)
  57. {
  58. somme=somme+a;
  59. a=a+1;
  60. }
  61. }
  62. return somme;
  63. }


J'ai testé ça fait bien ce que tu as écrit: l'appel de fonction est bon.
Bon y a juste que dans ta fonction parfait(), il y a une boucle infinie lorsque n % a != n/2
peut-être mettre un return dans un else.
Sinon il manque des commentaires ;-)
Ce qui serait pratique c'est de mettre dans les case un commentaires disant ce que ça va faire.
5 Novembre 2005 16:17:51

pour mettre un commentaire:
/* ton commentaire */

dis nous ce que dois faire ta fonction "parfait"
Contenus similaires
5 Novembre 2005 16:33:01

la fonction parfait determine si un nombres est parfait c'est a dire si le nombres =à la somme de leurs diviseurs(dont le modulo de la division est evidament 0)

et mon programme de base pour les nb parfait est:


int parfait(int n)
{
int somme=1,a=2,b;
while(a<=b/2)
{ if(b%a==0)
{
somme=somme+a;
a=a+1;
}
}
if(b==somme)
printf("%d est parfait\n",b);
else
printf("%d n'est pas parfait\n",b);
}
5 Novembre 2005 16:37:05

Au hasard : la somme des diviseurs de n ?

  1. int parfait(int n)
  2. {
  3. int somme=1,a=2;
  4. while(a<=n/2)
  5. {
  6. if(n%a==0)
  7. {
  8. somme=somme+a;
  9. a=a+1;
  10. }
  11. }
  12. return somme;
  13. }


Le problème, c'est pas le manque d'un return, c'est le "a=a+1" (que tu devrais écrire "a++;" c'est plus joli) qui doit pas etre dans le if : on incrémente a tout le temps, et pas juste que c'est un diviseur.

  1. int parfait(int n) /* renvoie la somme des diviseurs de a (sauf 1 et a lui-même) */
  2. {
  3. int somme=1,a=2;
  4. while(a<=n/2)
  5. {
  6. if(n%a==0)
  7. somme=somme+a;
  8. a=a++;
  9. }
  10. return somme;
  11. }


Tu devrais plutot utiliser une boucle for :

  1. int parfait(int n) /* renvoie la somme des diviseurs de a (sauf a lui-même) */
  2. {
  3. int somme=0,a;
  4. for(a=1; a<=n/2; a++)
  5. {
  6. if(n%a==0)
  7. somme += a;
  8. }
  9. return somme;
  10. }


Je préfère faire commencer a à 1 et somme à 0, c'est plus clair que sauter la première étape : tu risque d'oublier que 1 est inclus, etc...

"blabla = blabla + truc", écris le "blabla += truc".
5 Novembre 2005 16:53:47

ok repartons sur ce programme:

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

int parfait(int z);
int somme_diviseurs(int x);
int premier(int v);
int factoriel(int a);
int puissance (int n,int x);
float exponentiel(int n);
int binome (int a,int b);


int main()
{
int menu, n,m;


do {
printf("Menu :\n1)Parfait\n2)Somme_diviseurs\n3)Premier\n4)Factoriel\n5)Puissance\n6)Exponentiel\n7)Binome\n\n");
printf("Entrez votre choix : ");
scanf("%d",&menu);
} while(menu>7 || menu<=0);

switch(menu)
{
case 1 :
printf("Donner un entier :");
scanf("%d", &n);
if(n == parfait(n))
printf("%d est parfait\n",n);
else
printf("%d n'est pas parfait\n",n);
break;

case 2 :
break;
case 3 :
break;
case 4 :
break;
case 5 :
break;
case 6 :
break;
case 7 :
break;

}
}

int parfait(int n) /* renvoie la somme des diviseurs de a (sauf a lui-même) */
{
int somme=0,a;
for(a=1; a<=n/2; a++)
{
if(n%a==0)
somme += a;
}
return somme;
}



Maintenant par exemple je veux rajouter mon programme factoriel qui se situ au menu 4 et qui est:


int main(void)
{int a,i,fact;
do
{
printf("Donnez une entier:");
scanf("%d",&a);
}
while(a<0);
if(a==0) fact=1;
fact=1;
for(i=1;i<=a;i=i+1)
fact=fact*i;
printf("%d!=%d",a,fact);
}


sur mon prog sa vas donner quoi?(dsl pour la mise en forme des prog mais je comprend pas comment changer la taille du prog entier)
5 Novembre 2005 17:15:39

je pense que c'est ta condition
Citation :
if(b%a==0)
qui n'est pas correcte, puisque que dans ton blos d'instruction suivant, tu pet l'incrémentation. or si le test est faux, ca va jamais incrémenter.

je connais pas trop comment fonctionne l'opérateur %, cherche là dessus...
5 Novembre 2005 17:23:05

c'est bon j ai compris un pe le fonctionnement merci a vous!!!!
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS