Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

DES CHIFFRES (PAS DES LETTRES)


Information sur la source

Catégorie :Jeux Source .NET ( DotNet ) Classé sous : index, tag, arbre, chiffre Niveau : Débutant Date de création : 16/01/2007 Vu : 9 629

Note :
10 / 10 - par 2 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
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

  • 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
  • '--------------------------------------------------------------------------------------
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


 

Commentaires et avis

signaler à un administrateur
Commentaire de econs le 16/01/2007 09:59:06 administrateur CS

Salut,

Un p'tit ZIP ne serait pas du luxe, celà éviterait d'avoir besoin de regarder le code (et l'image) pour placer soi-même des contrôles avec les bons noms sur une feuille... en bref, pour pouvoir profiter pleinement de l'application.

signaler à un administrateur
Commentaire de DJMCG le 17/01/2007 13:44:57

Bonjour,
Voila un bel exemple.
Par contre, je suis étanner de oir la déclaration des variables.
A "l'ancienne".
Je ne savait pas que le .net acceptait cela.
Et les ancinne gestion de fichier.dat il accepte encore.
Tu sait sequentiel, random....
Merci et bonne journée.

signaler à un administrateur
Commentaire de mmostafa le 27/01/2007 10:29:26

Salut,

Lors des essais libres c'était époustouflant, mais lors du premier essai en direct face à l'émission sur France 3 j'étais étonné que l'un des candidats ai trouvé le bon compte et pas l'application.
Si ça peut t'aider à améliorer ton programme voici le tirage :
1 3 7 8 9 50
il faut trouver 871
le programme trouve toujours 870
La solution est pourtant évidente :
8 + 9 = 17
50 x 17 = 850
3 x 7 = 21
850 + 21 = 871

Bon debuggage.

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Lecture Tag trop lent [ par bingo974 ] Salut tout le mondeJE désir faire un indexeur de mp3. J'utilise un algo super rapide qui parcours les répertoires de mon disque (20Go en 80 secondes - Format nombre [ par noe ] Bonjour à tousj'extrait de ma base de donnée acces97 un chiffre simpleje le fait apparaitre dans un textbox en utilisant un code pour le formatage tex convertire chiffre (ex: 150-->1.500e+02) [ par zouilletorino ] Salut, voila, j'ai un petit probleme, il faut que je convertisse sous Visual basic des chiffres sous le format: X.XXXXXXe(+/-)XXchaque X etant un chif glisser listbox->treeview [ par bingo974 ] Bonjour,Je n'arrive pas à trouver un code sur vbfrance me permettant de réaliser un dragdrop entre une listbox et un treeview en utilisant OLEDRAG OLE indice ( index ) [ par michong ] michong Michongvoila je voulais savoi si il était possible de mettre un indice dans un reco Aide pour l'envois de pièces jointes avec MAPI [ par TopperFr ] J'utilise le code suivant mais à un seul fichier est attaché au mail et c'est à chaque fois le dernier de la liste. Apparement à chaque attachement de Dernier chiffre d'un nombre! [ par jpujol95 ] salut!J'aimerais savoir comment retirer le dernier chiffre d'un nombre quand on clique sur un boutton!Sachant que le nombre peut prendre une taille va treeview : trouver l'index d'un node d'apres sa cle [ par CoChOnOu ] Hello à vous :-)Bah tout est à peut près dans le titre ;-)voilà, j'ai la clé d'un node d'un treeview dans une variable et j'aimerai sélectionner ce no BD: Creation d'index avec .execute ??? [ par wico2002 ] Bonjour, Je me créer une base de données avec la commande:db.execute "CREATE TABLE xyz".....<img src=/imgs2/smile_question.gif borde Tag WMA [ par Mosta60 ] Grace à vous j'ai trouvé comment modifier les Tags MP3 mais pas sur les WMA. Merci d'avance


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,530 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.