Problème avec une fonction
Résolu/Fermé
mvgeek
Messages postés
1252
Date d'inscription
dimanche 12 juillet 2009
Statut
Contributeur sécurité
Dernière intervention
4 septembre 2011
-
21 févr. 2011 à 22:10
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 22 févr. 2011 à 21:52
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 22 févr. 2011 à 21:52
A voir également:
- Problème avec une fonction
- Fonction si et - Guide
- Fonction moyenne excel - Guide
- Comment colorer une cellule excel en fonction du contenu d'une autre cellule ✓ - Forum Excel
- Fonction somme excel - Guide
- Snapchat ils m'ont ajouté par la fonction recherche - Forum Snapchat
3 réponses
Zoul67
Messages postés
1959
Date d'inscription
lundi 3 mai 2010
Statut
Membre
Dernière intervention
30 janvier 2023
149
21 févr. 2011 à 23:10
21 févr. 2011 à 23:10
Bonsoir,
La réponse est dans ta question...
Sur combien de bits est stocké "resultat" ? --> entier long 32 bits !
Essaie avec long double...
cf. https://www.commentcamarche.net/contents/196-langage-c-les-types-de-donnees
++
La réponse est dans ta question...
Sur combien de bits est stocké "resultat" ? --> entier long 32 bits !
Essaie avec long double...
cf. https://www.commentcamarche.net/contents/196-langage-c-les-types-de-donnees
++
mvgeek
Messages postés
1252
Date d'inscription
dimanche 12 juillet 2009
Statut
Contributeur sécurité
Dernière intervention
4 septembre 2011
107
21 févr. 2011 à 23:19
21 févr. 2011 à 23:19
Salut et merci pour ta réponse. J'ai essayé avec ce code :
#include <stdio.h>
#include <stdlib.h>
long double echiquier(long double nombreEntre)
{
int incrementateur = 0;
long double resultat = 0;
while(incrementateur < 64)
{
resultat = nombreEntre * 2;
incrementateur++;
}
}
int main()
{
long double nombreEntre = 0;
printf("Veuillez insérer le nombre de départ :");
scanf("%d", &nombreEntre);
printf("Le résultat est : %d", echiquier(nombreEntre));
return 0;
}
Mais finalement, le printf me retourne 0 ! Apparemment, le calcul a été abandonné à un moment...
#include <stdio.h>
#include <stdlib.h>
long double echiquier(long double nombreEntre)
{
int incrementateur = 0;
long double resultat = 0;
while(incrementateur < 64)
{
resultat = nombreEntre * 2;
incrementateur++;
}
}
int main()
{
long double nombreEntre = 0;
printf("Veuillez insérer le nombre de départ :");
scanf("%d", &nombreEntre);
printf("Le résultat est : %d", echiquier(nombreEntre));
return 0;
}
Mais finalement, le printf me retourne 0 ! Apparemment, le calcul a été abandonné à un moment...
mvgeek
Messages postés
1252
Date d'inscription
dimanche 12 juillet 2009
Statut
Contributeur sécurité
Dernière intervention
4 septembre 2011
107
21 févr. 2011 à 23:30
21 févr. 2011 à 23:30
Oups, je n'étais pas bien réveillé, voici le code-source corrigé :
#include <stdio.h>
#include <stdlib.h>
long double echiquier(long double nombreEntre)
{
return nombreEntre * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2;
}
int main()
{
long double nombreEntre = 0;
printf("Veuillez insérer le nombre de départ :");
scanf("%d", &nombreEntre);
printf("Le résultat est : %d", echiquier(nombreEntre));
return 0;
}
Mais le printf renvoie toujours 0...
#include <stdio.h>
#include <stdlib.h>
long double echiquier(long double nombreEntre)
{
return nombreEntre * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2;
}
int main()
{
long double nombreEntre = 0;
printf("Veuillez insérer le nombre de départ :");
scanf("%d", &nombreEntre);
printf("Le résultat est : %d", echiquier(nombreEntre));
return 0;
}
Mais le printf renvoie toujours 0...
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
Modifié par fiddy le 21/02/2011 à 23:48
Modifié par fiddy le 21/02/2011 à 23:48
Bonjour,
L'erreur principal est : printf("Le résulat est : %d", &resultat);
Tu affiches l'adresse et non la valeur : printf("...%d",resultat);
Ensuite attention pour ta variable, elle sera trop petite. Et tu peux pas utiliser les flottants (double, ...) car tu travailles en entier.
En C99, tu as le type long long qui est de 64 bits.
Mais tu seras bloqué pour la prochaine itération. Dans ce cas, à toi de gérer la multiplication, ou plus simplement tu peux utiliser une bibliothèque BIGNUM pour gérer les grands nombres (openssl par exemple).
Cdlt,
Google is your friend
L'erreur principal est : printf("Le résulat est : %d", &resultat);
Tu affiches l'adresse et non la valeur : printf("...%d",resultat);
Ensuite attention pour ta variable, elle sera trop petite. Et tu peux pas utiliser les flottants (double, ...) car tu travailles en entier.
En C99, tu as le type long long qui est de 64 bits.
Mais tu seras bloqué pour la prochaine itération. Dans ce cas, à toi de gérer la multiplication, ou plus simplement tu peux utiliser une bibliothèque BIGNUM pour gérer les grands nombres (openssl par exemple).
Cdlt,
Google is your friend
mvgeek
Messages postés
1252
Date d'inscription
dimanche 12 juillet 2009
Statut
Contributeur sécurité
Dernière intervention
4 septembre 2011
107
21 févr. 2011 à 23:43
21 févr. 2011 à 23:43
Salut : tu veux dire que la ligne correcte serait :
printf("Le résultat est : %", echiquier(nombreEntre)); ?!
Mon code complet est donc :
#include <stdio.h>
#include <stdlib.h>
long long echiquier(long long nombreEntre)
{
return nombreEntre * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2;
}
int main()
{
long long nombreEntre = 0;
printf("Veuillez insérer le nombre de départ :");
scanf("%d", &nombreEntre);
printf("Le résultat est : %d", echiquier(nombreEntre));
return 0;
}
Mais ça affiche toujours 0 :'(
printf("Le résultat est : %", echiquier(nombreEntre)); ?!
Mon code complet est donc :
#include <stdio.h>
#include <stdlib.h>
long long echiquier(long long nombreEntre)
{
return nombreEntre * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2;
}
int main()
{
long long nombreEntre = 0;
printf("Veuillez insérer le nombre de départ :");
scanf("%d", &nombreEntre);
printf("Le résultat est : %d", echiquier(nombreEntre));
return 0;
}
Mais ça affiche toujours 0 :'(
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
Modifié par fiddy le 22/02/2011 à 00:00
Modifié par fiddy le 22/02/2011 à 00:00
printf("Le résultat est : %", echiquier(nombreEntre)); ?
Non non, %d. Ce que je voulais dire, c'est qu'il ne faut pas mettre l'esperluette devant la variable (&).
Si tu utilises long long, alors il ne faut pas mettre %d mais %ll (L minuscule) dans tes printf et scanf.
Tu peux même utiliser unsigned long long pour ta variable. Dans ce cas, il faudra mettre : %llu.
Mais, ça devrait afficher 0. Car la valeur maximale que tu pourras afficher avec ceci est (2 puissance 64) - 1. Donc, utilise plutôt la bibliothèque openssl pour le type BIGNUM.
Cdlt,
Non non, %d. Ce que je voulais dire, c'est qu'il ne faut pas mettre l'esperluette devant la variable (&).
Si tu utilises long long, alors il ne faut pas mettre %d mais %ll (L minuscule) dans tes printf et scanf.
Tu peux même utiliser unsigned long long pour ta variable. Dans ce cas, il faudra mettre : %llu.
Mais, ça devrait afficher 0. Car la valeur maximale que tu pourras afficher avec ceci est (2 puissance 64) - 1. Donc, utilise plutôt la bibliothèque openssl pour le type BIGNUM.
Cdlt,
mvgeek
Messages postés
1252
Date d'inscription
dimanche 12 juillet 2009
Statut
Contributeur sécurité
Dernière intervention
4 septembre 2011
107
22 févr. 2011 à 01:28
22 févr. 2011 à 01:28
Bon, apparemment, ça va être dur, vu la taille du nombre qui devra être stocké... Merci pour vos réponses, j'ai appris plein de nouveaux types de variables !
Zoul67
Messages postés
1959
Date d'inscription
lundi 3 mai 2010
Statut
Membre
Dernière intervention
30 janvier 2023
149
22 févr. 2011 à 19:42
22 févr. 2011 à 19:42
ça doit même être faisable en tableau de chaînes de caractères...
mvgeek
Messages postés
1252
Date d'inscription
dimanche 12 juillet 2009
Statut
Contributeur sécurité
Dernière intervention
4 septembre 2011
107
22 févr. 2011 à 21:30
22 févr. 2011 à 21:30
@Zoul67 : sauf que les principales opérations se trouvent dans la fonction, qui ne peut pas être calculée en chaînes de caractères (si ?)