PB de calcul( incorecte) avec dev-c++ !!!
rim-k212
Messages postés
4
Date d'inscription
Statut
Membre
Dernière intervention
-
rim-k212 Messages postés 4 Date d'inscription Statut Membre Dernière intervention -
rim-k212 Messages postés 4 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
je suis un débutants en programmation j'ai un petit probléme que je compte sur vous pour le résoudre
le programe doit calculer le factoriel d'un entier
le calcul est correct si le nombre est inférieur a 13
sinon le resultat est incorrect
voici le message d'erreur qu'envoie le compilateur :
13 [Warning] return type of 'main' is not `int'
voici le code source :
#include <stdio.h>
#include <stdlib.h>
unsigned long f( unsigned long a)
{
unsigned long i=1,v=1;
for (i=1;i<=a;++i){
v=v*i;
}
return(v);
}
unsigned long main()
{
unsigned long c,a;
printf("entrer l'entier que vous voulez savoir son factoriel \n\n");
scanf("%lu",&a);
c=f(a);
printf("%lu ! = %lu",a,c);
getch();
}
merci d'avance je compte sur vous !
je suis un débutants en programmation j'ai un petit probléme que je compte sur vous pour le résoudre
le programe doit calculer le factoriel d'un entier
le calcul est correct si le nombre est inférieur a 13
sinon le resultat est incorrect
voici le message d'erreur qu'envoie le compilateur :
13 [Warning] return type of 'main' is not `int'
voici le code source :
#include <stdio.h>
#include <stdlib.h>
unsigned long f( unsigned long a)
{
unsigned long i=1,v=1;
for (i=1;i<=a;++i){
v=v*i;
}
return(v);
}
unsigned long main()
{
unsigned long c,a;
printf("entrer l'entier que vous voulez savoir son factoriel \n\n");
scanf("%lu",&a);
c=f(a);
printf("%lu ! = %lu",a,c);
getch();
}
merci d'avance je compte sur vous !
A voir également:
- PB de calcul( incorecte) avec dev-c++ !!!
- Dev c++ - Télécharger - Langages
- Massgrave dev - Accueil - Windows
- Dev home. - Télécharger - Développement
- Calcul moyenne excel - Guide
- Dev pascal - Télécharger - Édition & Programmation
5 réponses
13 [Warning] return type of 'main' is not `int'
et bien la fonction main() est de type int, pas de type "unsigned long" (dans le standard C et C++). C'est la raison de ce "Warning". Mais cela n'a aucune importance sur votre programme.
Ensuite, vous devez prendre une décision si le résultat est plus grand que 13 ou non, c'est bien ça ?
Alors il suffit de mettre après l'affichage un bloc "if (condition) { instructions si condition vrai} else {instructions si condition fausse}"
et bien la fonction main() est de type int, pas de type "unsigned long" (dans le standard C et C++). C'est la raison de ce "Warning". Mais cela n'a aucune importance sur votre programme.
Ensuite, vous devez prendre une décision si le résultat est plus grand que 13 ou non, c'est bien ça ?
Alors il suffit de mettre après l'affichage un bloc "if (condition) { instructions si condition vrai} else {instructions si condition fausse}"
merci pour ta reponse "Pacorabanix" mais c'est pas ca
le calcul est correcte si le nombre est strictement inférieur a 13
n n!
0 1
1 1
2 2
3 6
4 24
5 120
6 720
7 5 040
8 40 320
9 362 880
10 3 628 800
11 39 916 800
12 479 001 600
13 6 227 020 800 ( il me donne une autre résultat , il me donne 1 932 053 504 )
dés que j'entre un nombre supérieur a 12 il me donne un résultat incorrect
je crois que j'ai sorti du domaine de définition des variables de type "unsigned long"
aidez moi svp
merci
le calcul est correcte si le nombre est strictement inférieur a 13
n n!
0 1
1 1
2 2
3 6
4 24
5 120
6 720
7 5 040
8 40 320
9 362 880
10 3 628 800
11 39 916 800
12 479 001 600
13 6 227 020 800 ( il me donne une autre résultat , il me donne 1 932 053 504 )
dés que j'entre un nombre supérieur a 12 il me donne un résultat incorrect
je crois que j'ai sorti du domaine de définition des variables de type "unsigned long"
aidez moi svp
merci
ah d'accord, ok je comprends mieux ce que tu voulais dire.
Oui tu as raison, la raison est que tu as dépassé la capacité d'un unsigned long, et donc tu obtiens des résultats inattendus.
Il te faut trouver des bibliothèques de classe(s) qui peuvent te créer un type d'entier plus long.
Essaye long long ou unsigned long long déjà, mais tu auras vite le même problème (mais j'ai un doute sur ce type, si c'est seulement en C ou pas).
Sinon quel est ton but ? Il est rare d'avoir besoin de si grands nombres exacts.
Si une approximation te suffit (avec beaucoup de chiffres significatifs), alors tu peux simplement utiliser des double ou des unsigned double. Tu iras déjà bien plus loin (si tu compares avec le résultat d'une calculette, tous les chiffres affichés seront corrects, et même bien plus). Si c'est juste pour t'entrainer à programmer tu peux observer ici les limites des types de base.
Si tu veux faire des calculs avec des entiers en gardant une précision maximale, il te faut te tourner vers des bibliothèques spéciales comme je l'ai mentionné (mais je n'en ai pas sous la main désolé)
bonne suite
Oui tu as raison, la raison est que tu as dépassé la capacité d'un unsigned long, et donc tu obtiens des résultats inattendus.
Il te faut trouver des bibliothèques de classe(s) qui peuvent te créer un type d'entier plus long.
Essaye long long ou unsigned long long déjà, mais tu auras vite le même problème (mais j'ai un doute sur ce type, si c'est seulement en C ou pas).
Sinon quel est ton but ? Il est rare d'avoir besoin de si grands nombres exacts.
Si une approximation te suffit (avec beaucoup de chiffres significatifs), alors tu peux simplement utiliser des double ou des unsigned double. Tu iras déjà bien plus loin (si tu compares avec le résultat d'une calculette, tous les chiffres affichés seront corrects, et même bien plus). Si c'est juste pour t'entrainer à programmer tu peux observer ici les limites des types de base.
Si tu veux faire des calculs avec des entiers en gardant une précision maximale, il te faut te tourner vers des bibliothèques spéciales comme je l'ai mentionné (mais je n'en ai pas sous la main désolé)
bonne suite
cherche "Big Integer Library C++" (ou des variantes), Big Integer = Gros entier en anglais. Tu peux essayer Large integer aussi.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question