Inscription / Connexion Nouveau Sujet
Niveau BTS
Partager :

algo (tableaux)Rendre la monnaie

Posté par
akanecrystal
16-02-18 à 15:02

Bonjour
j'ai beaucoup de difficulté avec les algorithmes et j'ai un gros devoir sur sa prévu dans un mois et mon professeur a donner des exercices a faire pour s'entraînez  mais je bloque sur l'un si vous pourriez me donnez des conseils ou des réponse cela m'aiderais beaucoup.

voici l'exercice:

Rendre la monnaie
Deux montants sont saisis en euros : le prix à payer et la somme donnée par le client.
L'algorithme doit déterminer les coupures et pièces à rendre au client en précisant leur nature et leur nombre,
et ceci de façon optimale.
On remarquera que la plus grosse coupure (500 euros) ne peut jamais faire partie de la monnaie rendue ! La
diérence entre la somme donnée et le prix doit toujours être inférieure à 500 euros (sinon le client pouvait
donner moins).
On se limite donc aux pièces de 0,01 ; 0,02 ; 0,05 ; 0,10 ; 0,20 ; 0,50 ; 1 et 2 euros et aux coupures de 5 ; 10 ;
20 ; 50 ; 100 et 200 euros.
Cet algorithme sera implémenté sous le nom TP_05_1.py.
Note : lorsqu'on travaille avec des nombres réels, des problèmes d'arrondi peuvent apparaître. On aura donc
intérêt à travailler avec des nombres entiers, en centimes d'euros, bien que les saisies doivent se faire en euros.

merci d'avance pour vos réponse

Posté par
carita
re : algo (tableaux)Rendre la monnaie 16-02-18 à 17:26

bonjour

il y a toujours la possibilité de faire une flopée de tests pour descendre de la plus grosse "coupure" jusqu'à la pièce de 1€.
fastidieux.

je pense davantage à la création d'une variable liste (indices)...

Posté par
flight
re : algo (tableaux)Rendre la monnaie 16-02-18 à 18:02

salut

c'est rien qu'une esquisse sous vba excel pour avoir une idée

Citation :
Sub monnaie()

t = Array(0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1, 2, 5, 10, 20, 50, 100, 200) 'tableau des valeurs
M = InputBox("montant à payer")
r = InputBox("montant recu")
w = Val(r) - Val(M)
If w > 0 Then
1:

For i = UBound(t) To 0 Step -1

  If w Mod t(i) <> w Then
    x = x & " " & ((w - (w Mod t(i))) / t(i)) & "  " & "billets/pièces de" & " " & t(i) & "euros"
    Exit For
  End If
Next

If (w - t(i)) <> 0 Then
w = w - t(i)
GoTo 1
Else
MsgBox x
Exit Sub
End If
End If
End Sub


testé avec des valeur entieres .. pour le fun montant à payer 100€ , recu 475€
montant à devoir ! 375€     x du code retourne  1 billet de 200 , 1 billet de 100 , 1 billet de 50 , 1 billet 20 et une pièce de 5...

Posté par
fm_31
re : algo (tableaux)Rendre la monnaie 16-02-18 à 19:23

Bonjour ,

en python (comme suggéré dans l'énoncé)  
A améliorer éventuellement pour par exemple  limiter l'affichage à ce qui est à rendre .

** image supprimée **

Posté par
akanecrystal
re : algo (tableaux)Rendre la monnaie 21-02-18 à 16:44

bonjour
merci beaucoup pour vos réponse je vais essayer et je revient vers vous si j'ai encore un soucis ou si j'ai réussis.

Posté par
matheuxmatou
re : algo (tableaux)Rendre la monnaie 21-02-18 à 17:47

ce serait bien d'arrêter de donner des réponses clé en main ... ce n'est pas le but de ce site !

Posté par
lafol Moderateur
re : algo (tableaux)Rendre la monnaie 21-02-18 à 17:56

surtout avec des images non conformes !

Posté par
matheuxmatou
re : algo (tableaux)Rendre la monnaie 21-02-18 à 18:00

merci Lafol... ... ça devient un peu pénible à force !

Posté par
akanecrystal
re : algo (tableaux)Rendre la monnaie 21-02-18 à 18:08

J'ai essayée un truc mais a la fin cela ne m'affiche pas le nombre de pièce ou billet rendu

prix = float(input("saisir le montant a payer:"))
montant = float(input("saisir montant donné par le client: "))

prix = int(prix * 100)
montant = int(montant * 100)

monnaie = montant-prix
compteur=0

liste=[20000,10000,5000,2000,1000,500,200,100,50,20,10,5,2,1]

for i in liste:
    compteur = monnaie //i
    monnaie = monnaie % 1
    print(compteur,("billet(s)" if i >=500 else "piece(s)"), "de", i, "centimes")

Posté par
matheuxmatou
re : algo (tableaux)Rendre la monnaie 21-02-18 à 18:15

"modulo 1" n'a pas beaucoup de sens ... tous les entiers sont divisibles par 1 donc le reste est toujours nul
N % 1 vaut toujours 0

Posté par
akanecrystal
re : algo (tableaux)Rendre la monnaie 22-02-18 à 11:17

je ne comprend pas trop ... que fait t'il en faire le supprimer? ou juste le changer ?  

Posté par
fm_31
re : algo (tableaux)Rendre la monnaie 27-02-18 à 16:46

@akanecrystal    Je suis surpris que personne ne t'ai répondu .
Je n'avais pas pu te répondre après mon exclusion et n'était pas revenu sur ce post pensant qu'il était résolu .

Au lieu de mettre    monnaie = monnaie % 1  , c'est  monnaie = monnaie % i

Mais c'est peut-être trop tard .

Posté par
Razes
re : algo (tableaux)Rendre la monnaie 27-02-18 à 19:08

Bonjour,

La première chose à la quelle il faut faire attention, ce sont les informations saisie,  car la transformation en  float peut ne pas se faire. (lettre saisie à la place d'un chiffre); autre erreur de saisie qui pourrait se produire c'est plus de 2 chiffres après la virgule.



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Inscription gratuite

Fiches en rapport

parmi 1734 fiches de maths

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !