Bonsoir à tous,

Dans le cadre du cours (Introduction à la programmation), j'utilise scala IDE pour travailler. J'ai un travail à rendre très prochainement. Étant débutant, je peine à coder et à apprendre le langage informatique. Ici est l'énoncé de mon travail : Arendre1 - Tickets machine.pdf.

Durant ce semestre, j'ai vu jusqu'à présent que les bases (val, var if else, do while, for, Array et methodes (def) )

Je suis bloqué à l'étape où la machine doit rendre la monnaie à l'utilisateur. Il y a 2 situations possibles :

1ère situation (confirmation de l'achat ticket) :la machine rend le surplus de monnaie insérée dans la machine à l'utilisateur (rendant les pièces par ordre décroissant, i.e : si l'utilisateur doit récupérer 2.50CHF la machine rendra 1 pièces de 2CHF et une pièce de 0.50CHF et non 25 * 0.10CHF)

2ème situation (annulation de l'achat du ticket) : la machine rend exactement les pièces que l'utilisateur a inséré dans le distributeur.

Voilà mon code :

Code scala : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import io.StdIn
import scala.collection.mutable.ArrayBuffer
 
object TP1 {
  def main(args: Array[String]): Unit = {
 
     var prix:BigDecimal = 0.0 // prix du ticket
     var rabais = " " // demi-tarif ou plein-tarif
     var zone = " "
     var PièceInsérée:BigDecimal = 0.0 // ce qu'on a inséré dans la machine
     var prixAPayer:BigDecimal = 0.0 // ce qui reste à payer après avoir introduit qq pièces
     var cancel = " "
     var prixpayé = 0
 
    // Boucle pour sélectionner zone
    do {
      print("Sélectionner la zone tarifaire pour votre trajet. \n1. Taper: zone centre \n2. Taper: zone centre étendu \n3. Taper: zone agglo\n ")
      zone = StdIn.readLine()
      } while ((zone != "zone centre") && (zone != "zone centre étendu") && (zone != "zone agglo"));
 
    if (zone == "zone centre") prix = 4  else if (zone == "zone centre étendu") prix = 5  else if(zone == "zone agglo") prix = 8
 
    // Boucle pour demi-tarif
    do {
      println("Souhaitez-vous le demi-tarif ? \nTaper : demi-tarif ou plein tarif ")
      rabais = StdIn.readLine()
    } while ((rabais != "demi-tarif") && (rabais != "plein tarif"))
 
    if (rabais == "demi-tarif") prix = prix/2 
    println("Prix de votre billet: " +prix + "CHF")
 
    while (prix>0){
      println("Accepte uniquement les pièces de 0.10CHF, 0.20CHF, 0.50CHF, 1.00CHF, 2.00CHF et 5.00 CHF \nSaisissez le montant de la pièce que vous insérez.")
      PièceInsérée = StdIn.readDouble()
      val monnaie = Array(0.1, 0.2, 0.5, 1, 2, 5)
      var x=0
      var pasUnePiece =0
      for (x<-monnaie) if(PièceInsérée !=x) pasUnePiece = pasUnePiece+1 //
      // println(pasUnePiece)
      if(pasUnePiece==monnaie.length) println ("Insérer une pièce valable") else {
        prixAPayer = prix-PièceInsérée
        prix = prixAPayer
        if (prixAPayer>0) println("Il reste " + prixAPayer.abs + " CHF à payer") else {      
          println("Il reste 0 CHF à payer")
          prix = prixAPayer
          // Boucle pour cancel
    do {
      println("Souhaitez-vous le annuler l'achat ? \nTaper : Oui ou Non")
      cancel = StdIn.readLine()
    } while ((cancel != "Oui") && (cancel != "Non"))
          }
      }
    }
    }
}

Je vous serais très reconnaissant si une âme charitable arrive à m'aider rapidement.