Vous êtes sur la page 1sur 6

Site  

Cours  
: VB.net
E Exemples:Programme
1.2 s de maths.
On prendra des exemples de routines mathématiques
simples:

 Calcul de l'hypoténuse d'un triangle rectangle


 Somme de N entiers
 Afficher les tables de multiplication
 Valeur maximum d'un tableau
 Calcul de factorielle (avec ou sans récursivité)
 Un nombre est-il premier?
 Décomposition en nombre premier
 Diviseurs d'un nombre

Calcul de l'hypoténuse d'un triangle rectangle.


On crée pour cela une fonction, on envoie 2 paramètres de type Single: les
2 cotés du triangle; la fonction retourne l'hypoténuse.

Function Hypotenuse (ByVal Side1 As Single, ByVal Side2 As Single) As


Single
    Return Sqrt((Side1 ^ 2) + (Side2 ^ 2))
End Function

Pour les nuls, on rappelle que le carré de l'Hypoténuse est égal à la somme
des carrées des 2 autres cotés.

Somme de N entiers.
Calculer par exemple pour Nombre=20 la Somme=1+2+3+4...+18+19+20

Dim Somme As Integer    'Variable somme


Dim Nombre As Integer=20
Dim i As Integer        'Variable de boucle
 
For i=0 To Nombre
    Somme += i
Next i
On rappelle que Somme += i est équivalent à Somme =Somme + i

Pour afficher le résultat, si il existe une TextBox:

TextBox1.Text = Cstr(Somme)    'Somme est transformé en String puis affecté


à la propriété Text du TextBox

Afficher les tables de multiplication.


On fait 2 boucles:

celle avec i  (qui décide de la table: table des 1, des 2..)

    On affiche 'table des' puis valeur de i

celle avec j (allant de 1 à 10 pour chaque table)

Pour chaque ligne, on affiche la valeur de i puis ' X ' puis la valeur de j
puis ' = ' puis la valeur de i fois j

ControlChars.Crlf permet un saut à la ligne

A chaque fois que l'on a quelque chose à afficher, on l'ajoute à la


variable String T

A la fin on affecte T à la propriété Text d'un TextBox pour rendre visible


les tables.

Dim i As Integer
Dim j As Integer
Dim T As String
 
For i = 1 To 10
    T += ControlChars.CrLf
    T += "Table des " & i & ControlChars.CrLf
    For j = 1 To 10
        T += i.ToString & " X " & j.ToString & "=" & i * j &
ControlChars.CrLf
    Next j
Next i
TextBox1.Text = T

Affiche:

Table des 1

1 X 1 =1

1 X 2 =2

...

 
Trouver la valeur la plus élevée d'un tableau d'entier:
Pour cela on crée une Fonction, on l'appelle en donnant en paramètre le
tableau d'entier; la fonction retourne l'entier le plus grand.

Function FindMax(ByVal a() As Integer) As Integer

Dim fin As Integer = UBound(a)

Dim valeurMax As Integer = a(0)

Dim i As Integer

For i = 0 To fin

If a(i) > valeurMax Then valeurMax = a(i)

Next i

Return valeurMax

End Function

 
Un boucle compare chaque valeur du tableau a() avec valeurMax, si l'élément
du tableau est plus grand que valeurMax, valeurMax prend la valeur de
l'élément. 

Factorielle.
On rappelle que N! (factorielle N)= 1*2*3*...*(N-2)*(N-1)*N

Exemple Factorielle 3 =1*2*3

Dim R As Long

R=Factorielle(3)    'retournera 6

Cette fonction n'est pas fournie par VB, créons une fonction 'Factorielle':

Function Factorielle (ByVal N as Long) As Long


    Dim i As Long
    Resultat=1
    For i= 1 to N
        Resultat=i* Resultat
    Next i
    Return Resultat
end Function

Cela crée une fonction recevant le paramètre N et retournant un long.


Une boucle effectue bien 1*2*3...*N-1*N.

Factorielle avec 'Récursivité':   


Une autre manière de calculer une factorielle est d'utiliser
la récursivité:

Une procédure est récursive si elle peut s'appeler elle même.

VB gère la récursivité.

Comment faire pour les factorielles?

On sait que Factorielle N= N * Factorielle(N-1)

N!= N*(N-1)!    :  en sachant que 1!=1

Créons la fonction:

Function Factorielle (ByVal N as Long) As Long


    If N=1 then
        Return 1
    Else
        Return N* Factorielle(N-1)
    End If
end Function

Dans la fonction Factorielle on appelle la fonction Factorielle, c'est bien


récursif.

Pour N=4, la fonction Factionnelle est appelée 4 fois :Factorielle (4) puis
Factorielle(3) puis Factorielle(2) puis Factorielle (1)

Factorielle (1) retourne 1

Factorielle (2)retourne  2    '2*factorielle(1)

Factorielle (3)retourne  6    '3*factorielle(2)

Factorielle (4) retourne 24   '4*factorielle(3)

Vb gère cela avec une pile des appels. il met dans une pile les uns aux
dessus des autres les appels, quand il remonte, il dépile de haut en bas
(Dernier rentré, premier sortie)

Attention: La pile  a une taille maximum, si N est trop grand, on déclenche


une erreur de type StackOverflow.

Un nombre est-il premier?


Un nombre premier est seulement divisible par 1 et lui-même.
Pour voir si N est entier on regardera successivement si ce nombre est
divisible par  2 puis 3 puis 4... jusqu'a N-1

Un nombre est divisible par un autre si la division donne un entier. N/B=


A Comment voir si le nombre A est entier? Pour ma part, j'utilise la
méthode suivante: A est entier si A=Int(A).

Une autre méthode pour voir si N est divisible par B: il est divisible si N
Mod(B)=0.

Avec une boucle For Next:


 
Dim IsPremier As Boolean                
Dim j, k As Long
 
IsPremier = True
j = 2
For k = 2 To N
     If (N Mod k = 0) And (k <> N) Then
           IsPremier = False
           j = n
     End If
     j = j + 1
Next
       
En sortie de boucle si IsPremier= true , le nombre N est premier.
 
 
Avec un Do Loop.
 
Dim IsPremier As Boolean
Dim N As Double=59 'nombre à étudier
Dim I As Double
I=2:  IsPremier=True
Do
    If N/I= Int(N/I) then
        IsPremier=False
    Else
        i += 1
    End if
Loop While IsPremier=True And I<N

Pour 59 IsPremier sera égal à True.

On peut améliorer la routine en remarquant:

Si un nombre n'est pas premier il admet 2 diviseurs dont un est inférieur à


racine N.

on peut donc :

-Vérifier que le nombre n'est pas pair puis

-Vérifier s'il est divisible par les nombres allant de  3...jusqu'à racine
de N en ne tenant compte que des nombres impairs.
 
Remarque pour ceux qui veulent tester le code :
Pour utiliser la routine sur les nombres premiers, il faut créer une petite
interface: dans un formulaire créer un bouton nommé 'Button1' et une
TextBox nommée 'TextBox1', enfin mettre dans la routine Button1_Click le
code ci-dessous.
Quand on lance le programme, on saisie un nombre dans le textbox , puis on
clique sur le bouton , cela affiche True ou False dans une MessageBox, si
le nombre est premier ou non:
 
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button
1.Click
Dim IsPremier As Boolean
Dim N As Double
Dim I As Double
N = Val(TextBox1.Text)
I = 2 : IsPremier = True
Do
If N / I = Int(N / I) Then
IsPremier = False
Else
I += 1
End If
Loop While IsPremier = True And I < N
MsgBox(IsPremier.ToString)
End Sub
 
Decomposition en nombre premier?
 
Dim nbr As Integer = 1000 'nombre à étudier
Dim div As Integer = 2
Dim t As String = ""
While div <= nbr
While nbr / div = Int(nbr / div)
t = t & div & " x "
nbr = nbr / div
End While
div = div + 1
End While
TextBox1.Text = t
 

Diviseurs d'un nombre?


C'est une fonction qui retourne une collection de type List contenant des
integers (tous les diviseurs de Numbre.
Si Numbre Mod i est égale à zéro c'est que i est un diviseur de Numbre; on
l'ajoute à la liste.
 
Public Function Diviseur (ByVal Number As Integer) As List(Of Integer)
Dim Diviseur As New List(Of Integer)
For i As Integer = 1 To Number
      If Number Mod i = 0 Then Diviseur.Add(i)
Next
End Function

Vous aimerez peut-être aussi