Ce logiciel recherche la solution exacte (sinon la plus proche) donnant le résultat désiré en fonction des nombres choisis. Les 6 nombres et le résultat sont choisis dans le respect de la règle du jeu.
Le logiciel explore sytématiquement tous les calculs corrects en n'éliminant que les différences nulles, les multiplications par 1 et les divisions non entières. Il affiche successivement tout calcul "meilleur" que le précédent et ne s'arrête que si le compte est bon ou que si l'arbre des tous les calculs correct est complètement exploré.
La vitesse des calculs occulte complètement les affichages intermédiaires et l'oeil ne retient que le dernier calcul !
Cliquez sur le nombre choisi pour l'éliminer. Le résultat peut être donné ou tiré au hasard.
Source / Exemple :
Public Class Chiffre1
'------------------------------------------------
Public Retour$ ' "à la ligne" pour écrire un "text" sur plusieurs lignes
Public HVtab& ' constante de taille graphique Horizontale ou Verticale (clin d'oeil à l'Apple II)
Const LargeurTrait = 3
Const SuperTaille = 43
Const GrandeTaille = 24
Const PetiteTaille = 16
'------------------------------------------------
' les chiffres à choisir
Public ValeurChoix%(13)
Public NombreChoix%(13)
Public ButtonChoix(13) As Button
Public LabelTraitChoix As Label
'------------------------------------------------
' les 6 chiffres choisis
Public LabelExplique As Label
Public ButtonDonnees(5) As Button
Public LabelTraitDonnees As Label
'------------------------------------------------
' Le nombre à trouver
Public LabelNombre As Label
Public TextNombre As TextBox
Public SiNoTexte As Boolean
Public LabelTraitNombre As Label
Public ButtonHasard As Button
Public ButtonRien As Button
Public LabelSoluce As Label
Public ButtonSoluce As Button
Public LabelTraitSoluce As Label
Public But% ' à trouver ou à approcher
'------------------------------------------------
' les données + les résultats des calculs
Public Signe$(3) ' de l'opération"
Public Chiffre0&(5) ' profondeur du calcul : 0 = données
Public Chiffre1&(4)
Public Chiffre2&(3)
Public Chiffre3&(2)
Public Chiffre4&(1)
Public Operation%(4) ' " 0 = + " ; " 1 = x " ; " 2 = - " ; " 3 = / "
'------------------------------------------------
Public LabelReponse As Label
Public LabelTraitReponse As Label
'------------------------------------------------
Public KelChoix% ' le rang du chiffre choisi
Public NombreDonnees% ' déjà choisie
Public SiOperationCorrecte(4) As Boolean
Public RangOperation%(4)
Public RangOperande%(3)
Public RangOperateur%(3) ' Operande Operation Operateur = Resultat
' au niveau 4 Operande(4) = 0 et Operateur(4) = 1
Public MonResultat&(4)
Public Approximation& ' la meilleure solution en cours
'------------------------------------------------
Public CouleurFond As Color
Public CouleurButtonClair As Color
Public CouleurButtonFonce As Color
'--------------------------------------------------------------------------------------
Private Sub Chiffre1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim Rang%, HVChoix&, Ecart&, VDonnees&, HNombre&, VNombre&
Const Releve = 5
'-------------------
Retour = Chr(13)
SiNoTexte = True
Randomize()
'-------------------
Signe(0) = "+"
Signe(1) = "´"
Signe(2) = "-"
Signe(3) = "¸"
'-------------------
CouleurFond = Color.FromArgb(255, 235, 240, 220)
CouleurButtonClair = Color.FromArgb(255, 255, 240)
CouleurButtonFonce = Color.FromArgb(235, 235, 210)
'-------------------
Me.Font = New Font("Times New Roman", PetiteTaille, FontStyle.Regular)
HVtab = Me.Font.Height
Me.BackColor = CouleurFond
'-------------------
' Chiffres proposés + leur nombre maximum autorisé
For Rang = 0 To 9
ValeurChoix(Rang) = Rang + 1
NombreChoix(Rang) = 2
Next Rang
ValeurChoix(10) = 25
NombreChoix(10) = 1
ValeurChoix(11) = 50
NombreChoix(11) = 1
ValeurChoix(12) = 75
NombreChoix(12) = 1
ValeurChoix(13) = 100
NombreChoix(13) = 1
'-------------------
' choix des chiffres autorisés
HVChoix = HVtab * 0.7
Ecart = HVtab * 0.2
For Rang = 0 To 13
ButtonChoix(Rang) = New Button
Me.Controls.Add(ButtonChoix(Rang))
ButtonChoix(Rang).BackColor = CouleurButtonClair
ButtonChoix(Rang).Text = Chaine(ValeurChoix(Rang))
ButtonChoix(Rang).Font = New Font("Symbol", GrandeTaille, FontStyle.Bold)
ButtonChoix(Rang).Height = HVtab * 2
ButtonChoix(Rang).Tag = ValeurChoix(Rang)
AddHandler ButtonChoix(Rang).Click, AddressOf ButtonChoix_Click
Select Case Rang
Case 0 To 8
ButtonChoix(Rang).Width = HVtab * 2
Case 9 To 12
ButtonChoix(Rang).Width = HVtab * 2.5
Case Else
ButtonChoix(Rang).Width = HVtab * 3.1
End Select
If Rang = 0 Then
ButtonChoix(Rang).Location = New Point(HVChoix, HVChoix)
Else
ButtonChoix(Rang).Location = New Point(ButtonChoix(Rang - 1).Location.X + _
ButtonChoix(Rang - 1).Width + Ecart, _
HVChoix)
End If
ButtonChoix(Rang).TextAlign = ContentAlignment.MiddleCenter
Next Rang
'-------------------
' on encadre le tout
LabelTraitChoix = New Label
Me.Controls.Add(LabelTraitChoix)
LabelTraitChoix.Location = New Point(ButtonChoix(0).Location.X - Ecart, _
ButtonChoix(0).Location.Y - Ecart)
LabelTraitChoix.Width = ButtonChoix(13).Location.X + _
ButtonChoix(0).Width + Ecart * 4
LabelTraitChoix.Height = ButtonChoix(0).Height + Ecart * 2
LabelTraitChoix.BorderStyle = BorderStyle.Fixed3D
LabelTraitChoix.BackColor = CouleurFond
'-------------------
' les 6 chiffres données
NombreDonnees = 0
VDonnees = LabelTraitChoix.Location.Y + LabelTraitChoix.Height + HVChoix + Ecart
LabelExplique = New Label
Me.Controls.Add(LabelExplique)
LabelExplique.Text = "0 nombre"
LabelExplique.Location = New Point(HVChoix, VDonnees)
LabelExplique.Width = HVtab * 4.5
LabelExplique.Height = HVtab
LabelExplique.BorderStyle = BorderStyle.None
LabelExplique.TextAlign = ContentAlignment.MiddleCenter
LabelExplique.BackColor = CouleurFond
For Rang = 0 To 5
ButtonDonnees(Rang) = New Button
Me.Controls.Add(ButtonDonnees(Rang))
ButtonDonnees(Rang).Text = ""
ButtonDonnees(Rang).Font = ButtonChoix(Rang).Font
ButtonDonnees(Rang).Height = ButtonChoix(0).Height
ButtonDonnees(Rang).Width = HVtab * 3.5
ButtonDonnees(Rang).Location = New Point(HVChoix + Ecart * 2, LabelExplique.Location.Y + _
LabelExplique.Height + Ecart + _
(ButtonDonnees(0).Height + Ecart) * Rang)
ButtonDonnees(Rang).TextAlign = ContentAlignment.MiddleCenter
ButtonDonnees(Rang).Enabled = False
ButtonDonnees(Rang).Tag = Rang
ButtonDonnees(Rang).BackColor = CouleurButtonFonce
AddHandler ButtonDonnees(Rang).Click, AddressOf ButtonDonnees_Click
Next Rang
LabelTraitDonnees = New Label
Me.Controls.Add(LabelTraitDonnees)
LabelTraitDonnees.Location = New Point(LabelTraitChoix.Location.X, _
LabelTraitChoix.Location.Y + _
LabelTraitChoix.Height + HVChoix)
LabelTraitDonnees.Width = ButtonDonnees(5).Width + Ecart * 6.1
LabelTraitDonnees.Height = ButtonDonnees(5).Location.Y + ButtonDonnees(5).Height - _
LabelTraitDonnees.Location.Y + Ecart
LabelTraitDonnees.BorderStyle = BorderStyle.Fixed3D
LabelTraitDonnees.BackColor = CouleurFond
'-------------------
VNombre = VDonnees
HNombre = LabelTraitDonnees.Location.X + LabelTraitDonnees.Width + HVChoix + Ecart
LabelNombre = New Label
Me.Controls.Add(LabelNombre)
LabelNombre.Text = "Le nombre" + Retour + "cherché :"
LabelNombre.Font = New Font("Times New Roman", PetiteTaille, FontStyle.Bold)
LabelNombre.Height = HVtab * 2
LabelNombre.Width = HVtab * 5
LabelNombre.Location = New Point(HNombre, VNombre)
LabelNombre.TextAlign = ContentAlignment.TopCenter
LabelNombre.BorderStyle = BorderStyle.None
LabelNombre.BackColor = CouleurFond
TextNombre = New TextBox
Me.Controls.Add(TextNombre)
TextNombre.Text = ""
TextNombre.Font = New Font("Times New Roman", GrandeTaille, FontStyle.Bold)
TextNombre.Height = HVtab * 2
TextNombre.Width = HVtab * 3
TextNombre.Location = New Point(HNombre + HVtab, _
ButtonDonnees(1).Location.Y - Ecart * Releve)
TextNombre.TextAlign = HorizontalAlignment.Center
TextNombre.BorderStyle = BorderStyle.Fixed3D
AddHandler TextNombre.TextChanged, AddressOf TextNombre_TextChanged
ButtonHasard = New Button
Me.Controls.Add(ButtonHasard)
ButtonHasard.Text = "Hasard"
ButtonHasard.Width = HVtab * 3.9
ButtonHasard.Height = HVtab * 1.7
AddHandler ButtonHasard.Click, AddressOf ButtonHasard_Click
ButtonHasard.BackColor = CouleurButtonClair
ButtonHasard.Location = New Point(HNombre + HVtab * 0.5, _
ButtonDonnees(2).Location.Y - Ecart * Releve)
ButtonRien = New Button
Me.Controls.Add(ButtonRien)
ButtonRien.Enabled = False
ButtonRien.Text = "Annuler"
ButtonRien.Width = ButtonHasard.Width
ButtonRien.Height = ButtonHasard.Height
ButtonRien.BackColor = CouleurButtonFonce
AddHandler ButtonRien.Click, AddressOf ButtonRien_Click
ButtonRien.Location = New Point(ButtonHasard.Location.X, _
ButtonDonnees(3).Location.Y - Ecart * Releve)
LabelSoluce = New Label
Me.Controls.Add(LabelSoluce)
LabelSoluce.Location = New Point(HNombre, ButtonDonnees(4).Location.Y - HVtab * 0.2)
LabelSoluce.Width = LabelNombre.Width
LabelSoluce.Height = HVtab * 2
LabelSoluce.BorderStyle = BorderStyle.None
LabelSoluce.Text = "Lancer" + Retour + "le calcul"
LabelSoluce.Font = LabelNombre.Font
LabelSoluce.TextAlign = ContentAlignment.TopCenter
LabelSoluce.BackColor = CouleurFond
ButtonSoluce = New Button
Me.Controls.Add(ButtonSoluce)
ButtonSoluce.Text = "Solution"
ButtonSoluce.Width = ButtonHasard.Width
ButtonSoluce.Height = ButtonHasard.Height
ButtonSoluce.BackColor = CouleurButtonFonce
AddHandler ButtonSoluce.Click, AddressOf ButtonSoluce_Click
ButtonSoluce.Enabled = False
ButtonSoluce.Location = New Point(ButtonRien.Location.X, LabelSoluce.Location.Y + LabelSoluce.Height + HVtab * 0.5)
LabelTraitNombre = New Label
Me.Controls.Add(LabelTraitNombre)
LabelTraitNombre.Location = New Point(HNombre - Ecart * 2.5, LabelTraitDonnees.Location.Y)
LabelTraitNombre.Width = HVtab * 6
LabelTraitNombre.Height = ButtonRien.Height + ButtonRien.Location.Y + Ecart * 2.5 - _
VNombre
LabelTraitNombre.BorderStyle = BorderStyle.Fixed3D
LabelTraitNombre.BackColor = CouleurFond
LabelTraitSoluce = New Label
Me.Controls.Add(LabelTraitSoluce)
LabelTraitSoluce.Location = New Point(LabelTraitNombre.Location.X, _
LabelTraitNombre.Location.Y + _
LabelTraitNombre.Height + HVtab - Ecart * 2)
LabelTraitSoluce.Width = LabelTraitNombre.Width
LabelTraitSoluce.Height = ButtonSoluce.Height + ButtonSoluce.Location.Y - _
LabelTraitSoluce.Location.Y + Ecart * 2
LabelTraitSoluce.BorderStyle = BorderStyle.Fixed3D
LabelTraitSoluce.BackColor = CouleurFond
'-------------------
LabelReponse = New Label
Me.Controls.Add(LabelReponse)
LabelTraitReponse = New Label
Me.Controls.Add(LabelTraitReponse)
LabelTraitReponse.Location = New Point(LabelTraitNombre.Location.X + _
LabelTraitNombre.Width + Ecart * 2, _
LabelTraitNombre.Location.Y)
LabelTraitReponse.Width = LabelTraitChoix.Location.X + LabelTraitChoix.Width - _
LabelTraitReponse.Location.X
LabelTraitReponse.Height = LabelTraitDonnees.Location.Y + LabelTraitDonnees.Height - _
LabelTraitReponse.Location.Y
LabelTraitReponse.BorderStyle = BorderStyle.Fixed3D
LabelTraitReponse.BackColor = CouleurFond
LabelReponse.Location = New Point(LabelTraitReponse.Location.X + HVtab * 0.5, _
LabelTraitReponse.Location.Y + HVtab * 0.2)
LabelReponse.Width = LabelTraitReponse.Width - HVtab
LabelReponse.Height = LabelTraitReponse.Height - HVtab * 0.7
LabelReponse.BorderStyle = BorderStyle.None
LabelReponse.Text = ""
LabelReponse.Font = New Font("Symbol", SuperTaille, FontStyle.Bold)
LabelReponse.BackColor = CouleurFond
'-------------------
Me.Height = LabelTraitDonnees.Location.Y + LabelTraitDonnees.Height + HVChoix + Ecart * 6
Me.Location = New Point(HVtab, HVtab)
Me.Width = LabelTraitChoix.Location.X + LabelTraitChoix.Width + HVChoix + Ecart
Me.Text = " Des chiffres par Jacques BOURDEAU :"
'-------------------
SiNoTexte = False
End Sub
'--------------------------------------------------------------------------------------
Function Chaine$(ByVal Nombre&)
Return Trim(Str(Nombre))
End Function
'--------------------------------------------------------------------------------------
Private Sub ButtonDonnees_Click(ByVal Sender As System.Object, ByVal E As System.EventArgs)
ButtonDonnees(Sender.Tag).Text = ""
ButtonDonnees(Sender.Tag).Enabled = False
ButtonDonnees(Sender.Tag).BackColor = CouleurButtonFonce
NombreDonnees = NombreDonnees - 1
Call VerifieMaximum()
End Sub
'--------------------------------------------------------------------------------------
Private Sub ButtonChoix_Click(ByVal Sender As System.Object, ByVal E As System.EventArgs)
Dim Rang%
If NombreDonnees > 5 Then
Exit Sub
End If
KelChoix = Sender.tag
Rang = 0
While Len(ButtonDonnees(Rang).Text.Trim) > 0
Rang = Rang + 1
End While
ButtonDonnees(Rang).Text = Chaine(KelChoix)
ButtonDonnees(Rang).Enabled = True
ButtonDonnees(Rang).BackColor = CouleurButtonClair
NombreDonnees = NombreDonnees + 1
Call VerifieMaximum()
ButtonSoluce.Enabled = (NombreDonnees = 6) And (Val(TextNombre.Text) > 100)
If ButtonSoluce.Enabled Then
ButtonSoluce.BackColor = CouleurButtonClair
Else
ButtonSoluce.BackColor = CouleurButtonFonce
End If
End Sub
'--------------------------------------------------------------------------------------
Private Sub TextNombre_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim Texte$, NewTexte$, Lettre$
If SiNoTexte Then Exit Sub
SiNoTexte = True
Texte = TextNombre.Text
If Len(Texte) > 3 Then
Texte = Texte.Substring(0, 3)
End If
NewTexte = ""
While (Len(Texte) > 0)
Lettre = Texte.Chars(0)
If (Lettre >= "0") And (Lettre <= "9") Then
NewTexte = NewTexte + Lettre
End If
Texte = Texte.Substring(1)
End While
TextNombre.Text = NewTexte
ButtonSoluce.Enabled = (Val(NewTexte) > 100) And (NombreDonnees = 6)
If ButtonSoluce.Enabled Then
ButtonSoluce.BackColor = CouleurButtonClair
Else
ButtonSoluce.BackColor = CouleurButtonFonce
End If
ButtonRien.Enabled = Len(NewTexte) > 0
If ButtonRien.Enabled Then
ButtonRien.BackColor = CouleurButtonClair
Else
ButtonRien.BackColor = CouleurButtonFonce
End If
TextNombre.SelectionStart = Len(TextNombre.Text)
SiNoTexte = False
End Sub
'--------------------------------------------------------------------------------------
'vérifie si le nombre maximum de chiffres est atteint
Sub VerifieMaximum()
Dim Rang%, Place%, NombreChiffre%(13)
For Rang = 0 To 13
NombreChiffre(Rang) = 0
Next Rang
For Place = 0 To 5
If Len(ButtonDonnees(Place).Text) > 0 Then
Rang = RangNombre(Val(ButtonDonnees(Place).Text))
NombreChiffre(Rang) = NombreChiffre(Rang) + 1
End If
Next Place
If NombreDonnees < 6 Then
ButtonSoluce.Enabled = False
For Rang = 0 To 13
ButtonChoix(Rang).Enabled = (NombreChiffre(Rang) < NombreChoix(Rang))
Next Rang
Else
For Rang = 0 To 13
ButtonChoix(Rang).Enabled = False
Next Rang
End If
For Rang = 0 To 13
If ButtonChoix(Rang).Enabled Then
ButtonChoix(Rang).BackColor = CouleurButtonClair
Else
ButtonChoix(Rang).BackColor = CouleurButtonFonce
End If
Next Rang
Select Case NombreDonnees
Case 0
LabelExplique.Text = "0 nombre"
Case 1
LabelExplique.Text = "1 nombre"
Case Else
LabelExplique.Text = Chaine(NombreDonnees) + " nombres"
End Select
End Sub
'--------------------------------------------------------------------------------------
Public Function RangNombre%(ByVal KelChiffre%)
Dim Reponse%, Rang%
Reponse = -1
For Rang = 0 To 13
If ValeurChoix(Rang) = KelChiffre Then
Reponse = Rang
End If
Next Rang
Return Reponse
End Function
'--------------------------------------------------------------------------------------
Private Sub ButtonRien_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
TextNombre.Text = ""
ButtonRien.Enabled = False
ButtonRien.BackColor = CouleurButtonFonce
ButtonSoluce.Enabled = False
ButtonSoluce.BackColor = CouleurButtonFonce
End Sub
'--------------------------------------------------------------------------------------
Private Sub ButtonHasard_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim Koi%
Koi = 0
Randomize()
While (Koi < 101) Or (Koi > 999)
Koi = CInt(1000 * Rnd())
End While
SiNoTexte = True
TextNombre.Text = Chaine(Koi)
ButtonRien.Enabled = True
ButtonRien.BackColor = CouleurButtonClair
ButtonSoluce.Enabled = (NombreDonnees = 6)
If ButtonSoluce.Enabled Then
ButtonSoluce.BackColor = CouleurButtonClair
Else
ButtonSoluce.BackColor = CouleurButtonFonce
End If
SiNoTexte = False
End Sub
'--------------------------------------------------------------------------------------
Private Sub ButtonSoluce_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim Rang%, Place%, Relais%, Envoi%
Dim EncoreTri As Boolean
Dim EncoreCherche(5) As Boolean
'Public Operation%(5) ' " 0 = + " ; " 1 = x " ; " 2 = - " ; " 3 = / "
'Public Resultat%(5) ' de l'opération
'Public RangOperation%(5)
'Public RangOperande%(5)
'Public RangOperateur%(5) ' Operande Operation Operateur = Resultat
'prépare la saisie des données
For Rang = 0 To 5
Chiffre0(Rang) = 0
Next Rang
'saisie + tri des données
For Rang = 0 To 5
Chiffre0(Rang) = Val(ButtonDonnees(Rang).Text)
If Rang > 0 Then
Place = Rang
EncoreTri = (Chiffre0(Place - 1) < Chiffre0(Place))
While EncoreTri
Relais = Chiffre0(Place - 1)
Chiffre0(Place - 1) = Chiffre0(Place)
Chiffre0(Place) = Relais
If Place > 0 Then
Place = Place - 1
If Place > 0 Then
EncoreTri = (Chiffre0(Place - 1) < Chiffre0(Place))
Else
EncoreTri = False
End If
Else
EncoreTri = False
End If
End While
End If
Next
But = Val(TextNombre.Text)
EncoreCherche(0) = True
RangOperation(0) = 0
RangOperande(0) = 0
RangOperateur(0) = 1
Approximation = 0
While EncoreCherche(0)
MonResultat(0) = Resultat(0)
If SiOperationCorrecte(0) Then
If Math.Abs(MonResultat(0) - But) < Math.Abs(Approximation - But) Then
Approximation = MonResultat(0)
Call MontrerSoluce(0)
End If
If Approximation = But Then
EncoreCherche(0) = False
Else ' passant au niveau suivant
'passons au niveau 1
EncoreCherche(1) = True
RangOperation(1) = 0
RangOperande(1) = 0
RangOperateur(1) = 1
'préparer le niveau suivant
Envoi = 1
Chiffre1(0) = MonResultat(0)
For Rang = 0 To 5
If (Rang <> RangOperateur(0)) And (Rang <> RangOperande(0)) Then
Chiffre1(Envoi) = Chiffre0(Rang)
Place = Envoi
EncoreTri = (Chiffre1(Place - 1) < Chiffre1(Place))
While EncoreTri
Relais = Chiffre1(Place - 1)
Chiffre1(Place - 1) = Chiffre1(Place)
Chiffre1(Place) = Relais
If Place > 0 Then
Place = Place - 1
If Place > 0 Then
EncoreTri = (Chiffre1(Place - 1) < Chiffre1(Place))
Else
EncoreTri = False
End If
Else
EncoreTri = False
End If
End While
Envoi = Envoi + 1
End If
Next
While EncoreCherche(1)
MonResultat(1) = Resultat(1)
If SiOperationCorrecte(1) Then
If Math.Abs(MonResultat(1) - But) < Math.Abs(Approximation - But) Then
Approximation = MonResultat(1)
Call MontrerSoluce(1)
End If
If Approximation = But Then
EncoreCherche(1) = False
Else ' passant au niveau suivant
'passons au niveau 2
EncoreCherche(2) = True
RangOperation(2) = 0
RangOperande(2) = 0
RangOperateur(2) = 1
'préparer le niveau suivant
Envoi = 1 ' on ajoute les nombres restants après le résultat
Chiffre2(0) = MonResultat(1)
For Rang = 0 To 4
If (Rang <> RangOperateur(1)) And (Rang <> RangOperande(1)) Then
Chiffre2(Envoi) = Chiffre1(Rang)
Place = Envoi
EncoreTri = (Chiffre2(Place - 1) < Chiffre2(Place))
While EncoreTri
Relais = Chiffre2(Place - 1)
Chiffre2(Place - 1) = Chiffre2(Place)
Chiffre2(Place) = Relais
If Place > 0 Then
Place = Place - 1
If Place > 0 Then
EncoreTri = (Chiffre2(Place - 1) < Chiffre2(Place))
Else
EncoreTri = False
End If
Else
EncoreTri = False
End If
End While
Envoi = Envoi + 1
End If
Next
While EncoreCherche(2)
MonResultat(2) = Resultat(2)
If SiOperationCorrecte(2) Then
If Math.Abs(MonResultat(2) - But) < Math.Abs(Approximation - But) Then
Approximation = MonResultat(2)
Call MontrerSoluce(2)
End If
If Approximation = But Then
EncoreCherche(2) = False
Else ' passant au niveau suivant
'passons au niveau 3
EncoreCherche(3) = True
RangOperation(3) = 0
RangOperande(3) = 0
RangOperateur(3) = 1
'préparer le niveau suivant
Envoi = 1 ' on ajoute les nombres restants après le résultat
Chiffre3(0) = MonResultat(2)
For Rang = 0 To 3
If (Rang <> RangOperateur(2)) And (Rang <> RangOperande(2)) Then
Chiffre3(Envoi) = Chiffre2(Rang)
Place = Envoi
EncoreTri = (Chiffre3(Place - 1) < Chiffre3(Place))
While EncoreTri
Relais = Chiffre3(Place - 1)
Chiffre3(Place - 1) = Chiffre3(Place)
Chiffre3(Place) = Relais
If Place > 0 Then
Place = Place - 1
If Place > 0 Then
EncoreTri = (Chiffre3(Place - 1) < Chiffre3(Place))
Else
EncoreTri = False
End If
Else
EncoreTri = False
End If
End While
Envoi = Envoi + 1
End If
Next
While EncoreCherche(3)
MonResultat(3) = Resultat(3)
If SiOperationCorrecte(3) Then
If Math.Abs(MonResultat(3) - But) < Math.Abs(Approximation - But) Then
Approximation = MonResultat(3)
Call MontrerSoluce(3)
End If
If Approximation = But Then
EncoreCherche(3) = False
Else ' passant au niveau suivant
EncoreCherche(4) = True
RangOperation(4) = 0
'préparer le niveau suivant
Chiffre4(0) = MonResultat(3)
For Rang = 0 To 2
If (Rang <> RangOperateur(3)) And (Rang <> RangOperande(3)) Then
Chiffre4(1) = Chiffre3(Rang)
End If
Next
If Chiffre4(1) > Chiffre4(0) Then
Relais = Chiffre4(1)
Chiffre4(1) = Chiffre4(0)
Chiffre4(0) = Relais
End If
While EncoreCherche(4)
MonResultat(4) = Resultat(4)
If SiOperationCorrecte(4) Then
If Math.Abs(MonResultat(4) - But) < Math.Abs(Approximation - But) Then
Approximation = MonResultat(4)
Call MontrerSoluce(4)
End If
If Approximation = But Then
EncoreCherche(4) = False
End If
End If
If RangOperation(4) < 3 Then
RangOperation(4) = RangOperation(4) + 1
Else
EncoreCherche(4) = False
End If
End While
End If
End If
If RangOperation(3) < 3 Then
RangOperation(3) = RangOperation(3) + 1
ElseIf RangOperateur(3) < 2 Then
RangOperation(3) = 0
RangOperateur(3) = RangOperateur(3) + 1
Else
If RangOperande(3) < 1 Then
RangOperande(3) = RangOperande(3) + 1
RangOperateur(3) = RangOperande(3) + 1
Else
EncoreCherche(3) = False
End If
End If
End While
End If
End If
If RangOperation(2) < 3 Then
RangOperation(2) = RangOperation(2) + 1
ElseIf RangOperateur(2) < 3 Then
RangOperation(2) = 0
RangOperateur(2) = RangOperateur(2) + 1
Else
If RangOperande(2) < 2 Then
RangOperande(2) = RangOperande(2) + 1
RangOperateur(2) = RangOperande(2) + 1
Else
EncoreCherche(2) = False
End If
End If
End While
End If
End If
If RangOperation(1) < 3 Then
RangOperation(1) = RangOperation(1) + 1
ElseIf RangOperateur(1) < 4 Then
RangOperation(1) = 0
RangOperateur(1) = RangOperateur(1) + 1
Else
If RangOperande(1) < 3 Then
RangOperande(1) = RangOperande(1) + 1
RangOperateur(1) = RangOperande(1) + 1
Else
EncoreCherche(1) = False
End If
End If
End While
End If
End If
If RangOperation(0) < 3 Then
RangOperation(0) = RangOperation(0) + 1
ElseIf RangOperateur(0) < 5 Then
RangOperation(0) = 0
RangOperateur(0) = RangOperateur(0) + 1
Else
If RangOperande(0) < 4 Then
RangOperande(0) = RangOperande(0) + 1
RangOperateur(0) = RangOperande(0) + 1
Else
EncoreCherche(0) = False
End If
End If
End While
End Sub
'--------------------------------------------------------------------------------------
Function Resultat&(ByVal KelNiveau%)
Dim KelResultat&
' " 0 = + " ; " 1 = x " ; " 2 = - " ; " 3 = / "
Select Case KelNiveau
Case 0
Select Case RangOperation(0)
Case 0
SiOperationCorrecte(0) = True
KelResultat = Chiffre0(RangOperande(0)) + Chiffre0(RangOperateur(0))
Case 1
SiOperationCorrecte(0) = (Chiffre0(RangOperateur(0)) > 1)
KelResultat = Chiffre0(RangOperande(0)) * Chiffre0(RangOperateur(0))
Case 2
SiOperationCorrecte(0) = (Chiffre0(RangOperande(0)) > Chiffre0(RangOperateur(0)))
KelResultat = Chiffre0(RangOperande(0)) - Chiffre0(RangOperateur(0))
Case Else
SiOperationCorrecte(0) = ((Chiffre0(RangOperande(0)) Mod _
Chiffre0(RangOperateur(0))) = 0)
If Chiffre0(RangOperateur(0)) < 2 Then SiOperationCorrecte(0) = False
KelResultat = Chiffre0(RangOperande(0)) \ Chiffre0(RangOperateur(0))
End Select
Case 1
Select Case RangOperation(1)
Case 0
SiOperationCorrecte(1) = True
KelResultat = Chiffre1(RangOperande(1)) + Chiffre1(RangOperateur(1))
Case 1
SiOperationCorrecte(1) = (Chiffre1(RangOperateur(1)) > 1)
KelResultat = Chiffre1(RangOperande(1)) * Chiffre1(RangOperateur(1))
Case 2
SiOperationCorrecte(1) = (Chiffre1(RangOperande(1)) > Chiffre1(RangOperateur(1)))
KelResultat = Chiffre1(RangOperande(1)) - Chiffre1(RangOperateur(1))
Case Else
SiOperationCorrecte(1) = ((Chiffre1(RangOperande(1)) Mod _
Chiffre1(RangOperateur(1))) = 0)
If Chiffre1(RangOperateur(1)) < 2 Then SiOperationCorrecte(1) = False
KelResultat = Chiffre1(RangOperande(1)) \ Chiffre1(RangOperateur(1))
End Select
Case 2
Select Case RangOperation(2)
Case 0
SiOperationCorrecte(2) = True
KelResultat = Chiffre2(RangOperande(2)) + Chiffre2(RangOperateur(2))
Case 1
SiOperationCorrecte(2) = (Chiffre2(RangOperateur(2)) > 1)
KelResultat = Chiffre2(RangOperande(2)) * Chiffre2(RangOperateur(2))
Case 2
SiOperationCorrecte(2) = (Chiffre2(RangOperande(2)) > Chiffre2(RangOperateur(2)))
KelResultat = Chiffre2(RangOperande(2)) - Chiffre2(RangOperateur(2))
Case Else
SiOperationCorrecte(2) = ((Chiffre2(RangOperande(2)) Mod _
Chiffre2(RangOperateur(2))) = 0)
If Chiffre2(RangOperateur(2)) < 2 Then SiOperationCorrecte(2) = False
KelResultat = Chiffre2(RangOperande(2)) \ Chiffre2(RangOperateur(2))
End Select
Case 3
Select Case RangOperation(3)
Case 0
SiOperationCorrecte(3) = True
KelResultat = Chiffre3(RangOperande(3)) + Chiffre3(RangOperateur(3))
Case 1
SiOperationCorrecte(3) = (Chiffre3(RangOperateur(3)) > 1)
KelResultat = Chiffre3(RangOperande(3)) * Chiffre3(RangOperateur(3))
Case 2
SiOperationCorrecte(3) = (Chiffre3(RangOperande(3)) > Chiffre3(RangOperateur(3)))
KelResultat = Chiffre3(RangOperande(3)) - Chiffre3(RangOperateur(3))
Case Else
SiOperationCorrecte(3) = ((Chiffre3(RangOperande(3)) Mod _
Chiffre3(RangOperateur(3))) = 0)
If Chiffre3(RangOperateur(3)) < 2 Then SiOperationCorrecte(3) = False
KelResultat = Chiffre3(RangOperande(3)) \ Chiffre3(RangOperateur(3))
End Select
Case 4
Select Case RangOperation(4)
Case 0
SiOperationCorrecte(4) = True
KelResultat = Chiffre4(0) + Chiffre4(1)
Case 1
SiOperationCorrecte(4) = (Chiffre4(1) > 1)
KelResultat = Chiffre4(0) * Chiffre4(1)
Case 2
SiOperationCorrecte(4) = (Chiffre4(0) > Chiffre4(1))
KelResultat = Chiffre4(0) - Chiffre4(1)
Case Else
SiOperationCorrecte(4) = ((Chiffre4(0) Mod Chiffre4(1)) = 0)
If Chiffre4(1) < 2 Then SiOperationCorrecte(4) = False
KelResultat = Chiffre4(0) \ Chiffre4(1)
End Select
End Select
If KelResultat = 0 Then SiOperationCorrecte(KelNiveau) = False
Return KelResultat
End Function
'--------------------------------------------------------------------------------------
Sub MontrerSoluce(ByVal KelNiveau%)
LabelReponse.Text = ""
LabelReponse.Text = LabelReponse.Text + _
Chaine(Chiffre0(RangOperande(0))) + " " + _
Signe(RangOperation(0)) + " " + _
Chaine(Chiffre0(RangOperateur(0))) + " = " + _
Chaine(MonResultat(0))
If KelNiveau > 0 Then
LabelReponse.Text = LabelReponse.Text + Retour + _
Chaine(Chiffre1(RangOperande(1))) + " " + _
Signe(RangOperation(1)) + " " + _
Chaine(Chiffre1(RangOperateur(1))) + " = " + _
Chaine(MonResultat(1))
End If
If KelNiveau > 1 Then
LabelReponse.Text = LabelReponse.Text + Retour + _
Chaine(Chiffre2(RangOperande(2))) + " " + _
Signe(RangOperation(2)) + " " + _
Chaine(Chiffre2(RangOperateur(2))) + " = " + _
Chaine(MonResultat(2))
End If
If KelNiveau > 2 Then
LabelReponse.Text = LabelReponse.Text + Retour + _
Chaine(Chiffre3(RangOperande(3))) + " " + _
Signe(RangOperation(3)) + " " + _
Chaine(Chiffre3(RangOperateur(3))) + " = " + _
Chaine(MonResultat(3))
End If
If KelNiveau > 3 Then
LabelReponse.Text = LabelReponse.Text + Retour + _
Chaine(Chiffre4(0)) + " " + _
Signe(RangOperation(4)) + " " + _
Chaine(Chiffre4(1)) + " = " + _
Chaine(MonResultat(4))
End If
End Sub
'--------------------------------------------------------------------------------------
End Class
'--------------------------------------------------------------------------------------
Conclusion :
La propriété "tag" des 14 boutons "ButtonChoix(13)" permet de les indexer afin de déterminer le bouton cliqué.
Pas de bug mais plein de méthodes net pour débutants. Le logiciel contrôle toute action de l'utilisateur et interdit tout plantage.
C'est une adaption en net d'un programme écrit à l'origine en assembleur sous Apple II il ya plus de 20 ans
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.