Problème type de variable - langage C
Résolu/Fermé
anthony
-
17 févr. 2010 à 19:22
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 18 févr. 2010 à 08:23
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 18 févr. 2010 à 08:23
A voir également:
- Problème type de variable - langage C
- Langage ascii - Guide
- Langage binaire - Guide
- Clear type - Guide
- Pascal langage - Télécharger - Édition & Programmation
3 réponses
Pacorabanix
Messages postés
3248
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
661
17 févr. 2010 à 21:12
17 févr. 2010 à 21:12
le "modulo" ne fonctionne que sur les entiers (c'est donc la cause de ce message d'erreur).
(De plus, en général, en informatique il vaut mieux éviter de travailler avec des flottants (à cause des erreurs d'arrondi et du ralentissement des calculs : environ 4 fois plus lents).)
voici les solutions possibles :
1) Tu comptes tout en centimes ! Ainsi tu n'auras que des nombres entiers.
2) Dans ton cas, les erreurs d'arrondis ne devraient pas poser trop de problèmes.
Alors tu peux quand même garder des floats, et utiliser la fonction fmod() ou modf() je ne sais plus (qui fait le modulo sur des flottants) de la bilio math.h
(De plus, en général, en informatique il vaut mieux éviter de travailler avec des flottants (à cause des erreurs d'arrondi et du ralentissement des calculs : environ 4 fois plus lents).)
voici les solutions possibles :
1) Tu comptes tout en centimes ! Ainsi tu n'auras que des nombres entiers.
2) Dans ton cas, les erreurs d'arrondis ne devraient pas poser trop de problèmes.
Alors tu peux quand même garder des floats, et utiliser la fonction fmod() ou modf() je ne sais plus (qui fait le modulo sur des flottants) de la bilio math.h
ah et ben voila mon nouveau code et voici ce que sa m'affiche :
résultat:
je ne comprends pas ce résultat
#include <stdio.h> int main(void) { float somme, cinq_cent, deux_cent, cent, billet50, billet20,billet10, cinq, deux, un, centime50, centime20, centime10, centime5, centime2, centime1, reste; puts("Entrez une somme"); scanf("%d", &somme); cinq_cent = somme / 500; /* partage(division) la somme en billet de 500 */ reste = fmod(somme, 500); /* prend le reste du partage de la somme des billet de 500 */ deux_cent = reste / 200; /* le reste en le partage en billet de 200 */ reste = fmod(reste, 200); /* prend le reste du partage de la somme des billet de 200 */ cent = reste / 100; /* idem que le 1er calcul */ reste = fmod(reste, 100); /* idem que le 2 eme calcul */ billet50 = reste / 50; reste = fmod(reste, 50); billet20 = reste / 20; reste = fmod(reste, 20); billet10 = reste / 10; reste = fmod(reste, 10); cinq = reste / 5; reste = fmod(reste, 5); deux = reste / 2; reste = fmod(reste, 2); un = reste; centime50 = reste / 0.50; reste = (reste, 0.50); centime20 = fmod(reste, 0.20); reste = fmod(reste, 0.20); centime10 = reste / 0.10; reste = fmod(reste, 0.10); centime5 = reste / 0.05; reste = fmod(reste, 0.05); centime2 = reste / 0.02; reste = fmod(reste, 0.02); centime1 = reste / 0.01; printf("la somme est de %d :", somme); printf("\n%.2f billet(s) de 500 \n%.2f billet(s) de 200 \n%.2f billet(s) de 100 \n%.2f billet(s) de 50 \n%.2f billet(s) de 20 \n%.2f billet(s) de 10\ \n%.2f piece(s) de 5 \n%.2f piece(s) de 2 \n%.2f piece(s) de 1 \n%.2f piece(s) de 50 centime(s) \n%.2f piece(s) de 20 centime(s)\ \n%d piece(s) de 10 centime(s) \n%.2f piece(s) de 5 centime(s) \n%.2f piece(s) de 2 centime(s) \n%.2f piece(s) de 1 centime(s)", cinq_cent, deux_cent, cent, billet50, billet20, billet10, cinq, deux, un, centime50, centime20, centime10, centime5, centime2, centime1); return 0; }
résultat:
Entrez une somme 252 la somme est de 0 : 0.50 billet(s) de 500 1.26 billet(s) de 200 0.52 billet(s) de 100 1.04 billet(s) de 50 0.10 billet(s) de 20 0.20 billet(s) de 10 0.40 piece(s) de 5 1.00 piece(s) de 2 0.00 piece(s) de 1 0.00 piece(s) de 50 centime(s) 0.10 piece(s) de 20 centime(s) 0 piece(s) de 10 centime(s) 0.00 piece(s) de 5 centime(s) 0.00 piece(s) de 2 centime(s) 0.00 piece(s) de 1 centime(s) Process returned 0 (0x0) execution time : 2.214 s Press any key to continue.
je ne comprends pas ce résultat
Pacorabanix
Messages postés
3248
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
661
>
anthony
18 févr. 2010 à 00:51
18 févr. 2010 à 00:51
il faut revoir ton algorithme en fonction de ce que font modf() et fmod(). Tu ne peux pas utiliser la division comme avec les nombres entiers (comme dans ton premier prog), car avant c'était une division entière (avec reste, comme quand on pose à l'école) là avec tes float ça devient une vraie division.
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
18 févr. 2010 à 08:23
18 févr. 2010 à 08:23
Il est clair que la meilleur solution est de travailler avec des centimes et de ne faire la convertion en euros (en float) que pour l'affichage. ça simplifiera le tout.
17 févr. 2010 à 20:49