PB de calcul( incorecte) avec dev-c++ !!!
Fermé
rim-k212
Messages postés
4
Date d'inscription
vendredi 25 décembre 2009
Statut
Membre
Dernière intervention
27 décembre 2009
-
25 déc. 2009 à 21:16
rim-k212 Messages postés 4 Date d'inscription vendredi 25 décembre 2009 Statut Membre Dernière intervention 27 décembre 2009 - 27 déc. 2009 à 21:00
rim-k212 Messages postés 4 Date d'inscription vendredi 25 décembre 2009 Statut Membre Dernière intervention 27 décembre 2009 - 27 déc. 2009 à 21:00
A voir également:
- PB de calcul( incorecte) avec dev-c++ !!!
- Telecharger dev c++ - Télécharger - Langages
- Calcul moyenne excel - Guide
- Massgrave dev - Accueil - Windows
- Dev home. - Télécharger - Développement
- Calcul charpente bois gratuit - Télécharger - Architecture & Déco
5 réponses
Pacorabanix
Messages postés
3248
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
661
26 déc. 2009 à 02:52
26 déc. 2009 à 02:52
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}"
rim-k212
Messages postés
4
Date d'inscription
vendredi 25 décembre 2009
Statut
Membre
Dernière intervention
27 décembre 2009
26 déc. 2009 à 15:08
26 déc. 2009 à 15:08
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
Pacorabanix
Messages postés
3248
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
661
27 déc. 2009 à 02:02
27 déc. 2009 à 02:02
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
rim-k212
Messages postés
4
Date d'inscription
vendredi 25 décembre 2009
Statut
Membre
Dernière intervention
27 décembre 2009
27 déc. 2009 à 03:27
27 déc. 2009 à 03:27
merci mon pote jé bien compris
tu sait pas ou je peux trouver des biblio de classes ?
tu sait pas ou je peux trouver des biblio de classes ?
Pacorabanix
Messages postés
3248
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
661
27 déc. 2009 à 13:39
27 déc. 2009 à 13:39
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
bonjour essayer ceci:
#include<stdio.h> #include<conio.h> main() { int i,fact,N; printf("entrez la val de N : "); scanf("%d",&N); if (N==0) fact=1; else { for(fact=1,i=1;i<=N;i++) { fact *=i; } } printf("le factoriel est: %d \n",fact); getch(); return 0; }
Pacorabanix
Messages postés
3248
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
661
27 déc. 2009 à 17:31
27 déc. 2009 à 17:31
Excuse-moi, mais en quoi cela résout son problème ?
rim-k212
Messages postés
4
Date d'inscription
vendredi 25 décembre 2009
Statut
Membre
Dernière intervention
27 décembre 2009
27 déc. 2009 à 21:00
27 déc. 2009 à 21:00
merci pour votre reponse mais c'est tjr la méme erreur !!