Auteur Auteur

EXERCICES RESOLUS EN VISUAL BASIC

EXERCICES RESOLUS EN VISUAL BASIC

EXERCICE 14

EXERCICE 14

Le guichet unique de Boma organise la tarification des containers des produits manufacturés à l’aide des rubriques : frais de dédouanement (fd), frais de contrôle de qualité (focc) et frais de l’Onatra (fo).

Les frais du dédouanement exprimés en unité monétaire sont déterminés à partir des catégories, suivant le tableau ci-après :

Catégorie Prix/kilo
Engrais chimiques et semences améliorées 0,25
Produits vivriers et pharmaceutiques 0,5
Fournitures de bureau et scolaires 0,75
Matériaux de construction 1
Pièces de rechange 1,5
Divers 2

Les frais de contrôle de qualité valent 4% des frais de dédouanement.
Les frais de l’Onatra sont composés de deux parties : frais de manutention
(fm) et frais d’emmagasinage (fe). La catégorie « Engrais chimiques et semences améliorées » en est exonérée.

Les frais de manutention sont calculés en fonction du poids des containers.
Ils sont calculés de la manière suivante : Jusqu’à 100 tonnes, les frais sont fixés à 0.005/kilo et à partir de la 101ème tonne, les frais sont fixés à 0.003/kilo.

Les frais d’emmagasinage sont calculés en fonction du nombre de containers. Ils valent 20 unités monétaires par container et par jour.

On vous demande d’écrire un programme Visual basic en mode console constitué d’un module principal et des fonctions chargées de calculer : frais de dédouanement, frais de contrôle de qualité, frais de manutention(fm) et frais d’emmagasinage(fe).

Solution

Solution


Module Module1
    Sub Main()
        Dim cat As String
        Dim fd, focc, fm, fe, fo, np As Long
        Dim nbre_jrs, nbre_c, poids As Integer
5:      Console.WriteLine("Entrez la catégorie")
        cat = Console.ReadLine
        Console.WriteLine("Entrez le poids")
        poids = CInt(Console.ReadLine())
        Console.WriteLine("Entrez le nombre de containers")
        nbre_c = CInt(Console.ReadLine())
        Console.WriteLine("Entrez le nombre de jours d'emmagasinage")
        nbre_jrs = Console.ReadLine
        fd = dedouanement(cat, poids)
        focc = controle(fd)
        If UCase(cat) = "ENGRAIS CHIMIQUES ET SEMENCES AMELIOREES" Then
            fo = 0
        Else
            fm = manutention(poids)
            fe = emmagasinage(nbre_c, nbre_jrs)
            fo = fm + fe
        End If
        If fm = 0 Or fd = 0 Then
            Console.WriteLine("Il y a eu erreur des données, recommencez")
            GoTo 5
        Else
            np = fd + fo + focc
            Console.WriteLine("Le net à payer est: " & np)
        End If
        Console.ReadLine()
    End Sub
    
    'fonction qui calcule  les frais de dédouanement 
    Function dedouanement(ByVal cat As String, ByVal poids As Integer) As Long
        Dim fd As Long
        If UCase(cat) = "ENGRAIS CHIMIQUES ET SEMENCES AMELIOREES" Then
            fd = poids * 1000 * 0.25
        ElseIf UCase(cat) = "PRODUITS VIVRIERS ET PHARMACEUTIQUES" Then
            fd = poids * 1000 * 0.5
        ElseIf UCase(cat) = "FOURNITURES DE BUREAU ET SCOLAIRES" Then
            fd = poids * 1000 * 0.75
        ElseIf UCase(cat) = "MATERIAUX DE CONSTRUCTION" Then
            fd = poids * 1000 * 1

        ElseIf UCase(cat) = "PIECES DE RECHANGE" Then
            fd = poids * 1000 * 1.5
        ElseIf UCase(cat) = "DIVERS" Then
            fd = poids * 1000 * 2
        Else
            Console.WriteLine("catégorie incorrecte")
            fd = 0
        End If
        Return fd
    End Function

    'fonction qui calcule les frais de contrôle de qualité 
    Function controle(ByVal fd As Long) As Long
        Dim focc As Long
        focc = fd * 0.04
        Return focc
    End Function

    'fonction qui calcule les frais de manutention 
    Function manutention(ByVal poids As Integer) As Long
        Dim fm As Long
        If poids >= 0 And poids <= 100 Then
            fm = poids * 1000 * 0.005
        ElseIf poids > 100
            fm = 100 * 1000 * 0.005 + (poids - 100) * 1000 * 0.003
        Else
            Console.WriteLine("poids incorrect")
            fm = 0
        End If
        Return fm
    End Function

    'fonction qui calcule les frais d'emmagasinage 
    Function emmagasinage(ByVal nbreC As Integer, ByVal nbJ As Integer) As Long
        Dim fe As Long
        fe = 20 * nbreC * nbJ
        Return fe
    End Function
End Module

EXERCICE 15

EXERCICE 15

Un magasin de la place organise le payement de salaire de ses employés à l’aide des rubriques : salaire de base (sb) et prime familiale (pf) :

Les salaires de base exprimés en unité monétaire sont déterminés à partir des grades, suivant le tableau ci-après :

Grade Salaire de base
Gérant 200
Comptable 180
Caissier 160
Facturier 150
Livreur 130
Vendeur 110

La prime familiale est composée de deux parties : de la prime mariage (pm) et de la prime enfant (pe). La prime mariage est octroyée à tous les agents qui ne sont pas célibataires (c.à.d. mariés, divorcés ou veufs). Elle vaut 2% du salaire de base de l’agent.

La prime enfant est calculée en fonction du nombre d’enfants vivants de moins de 19 ans. Elle est calculée de la manière suivante : Jusqu’à 5 enfants, chacun génère une prime fixe de 50. A partir du 6ème enfant, la prime fixe devient de 20. Enfin, pas de prime à partir du 11e enfant.

On vous demande d’écrire un programme Visual basic en mode console constitué d’un module principal et des fonctions chargées de calculer : le salaire de base, la prime mariage et la prime enfant.

Solution

Solution


Module Module1
    Sub Main()
        Dim grade, etat_civil As String
        Dim nef, sb, pe, pm, pf, sn As Integer
5:      Console.WriteLine("Entrez le grade de l'agent")
        grade = Console.ReadLine()
        Console.WriteLine("Entrez son état civil")
        etat_civil = Console.ReadLine()
        Console.WriteLine("Entrez le nombre d'enfants")
        nef = CInt(Console.ReadLine())
        'Appel des fonctions
        sb = salaireBase(grade)
        pm = primeMariage(etat_civil, sb)
        pe = PrimeEnfant(nef)
        pf = pm + pe
        If sb = 0 Or pe = -1 Or pm = -1 Then
            Console.WriteLine("Données incorrectes, recommencez")
            GoTo 5
        Else
            sn = sb + pf
            Console.WriteLine("Le salaire net vaut : " & sn)
        End If
        Console.ReadLine()
    End Sub
    'fonction qui calcule le salaire de base
    Function salaireBase(ByVal grade As String) As Integer
        Dim sb As Integer
        If UCase(grade) = "GERANT" Then
            sb = 200
        ElseIf UCase(grade) = "COMPTABLE" Then
            sb = 180
        ElseIf UCase(grade) = "CAISSIER" Then
            sb = 160
        ElseIf UCase(grade) = "FACTURIER" Then
            sb = 150
        ElseIf UCase(grade) = "LIVREUR" Then
            sb = 130
        ElseIf UCase(grade) = "VENDEUR" Then
            sb = 110
        Else
            sb = 0
        End If
        Return sb
    End Function

    'fonction qui calcule la prime mariage
    Function primeMariage(ByRef etatCivil As String, ByVal sb As Integer) As Integer
        Dim pm As Integer
        If UCase(etatCivil) <> "CELIBATAIRE" Or UCase(etatCivil) <> "MARIE(E)" Or UCase(etatCivil) <> "DIVORCE(E)" Or UCase(etatCivil) <> "VEUF(VE)" Then
            pm = -1
        End If

        If UCase(etatCivil) = "CELIBATAIRE" Then
                pm = 0
            Else
                pm = sb * 0.02
        End If
        Return pm
    End Function

    'fonction qui calcule la prime enfant
    Function PrimeEnfant(ByRef nef As Integer) As Integer
        Dim pe As Integer
        Select Case (nef)
            Case 0 To 5
                pe = nef * 50
            Case 6 To 10
                pe = 5 * 50 + (nef - 5) * 20
            Case Is > 10
                pe = 5 * 50 + 5 * 20
            Case Else
                pe = -1
        End Select
        Return pe
    End Function
End Module


EXERCICE 16

EXERCICE 16

Ecrire un programme Visual basic en mode console qui lit une phrase, une lettre se trouvant dans la phrase et une autre lettre quelconque, et ensuite le programme remplace à chaque occurrence la première lettre par la deuxième

Solution

Solution


Module Module1
    Sub Main()
        Dim chaine, lettre1, lettre2 As String
        Dim test As Boolean = False
        Dim i As Integer
        Console.WriteLine("Entrez la chaine")
        chaine = Console.ReadLine()
1:      Console.WriteLine("Entrez la lettre à remplacer")
        lettre1 = Console.ReadLine()
        'on vérifie si la lettre se trouve dans la chaine
        For Each caractere As String In chaine
            If caractere = lettre1 Then
                test = True
            End If
        Next
        If test = True Then
            GoTo 5
        Else
            Console.WriteLine("La lettre de se trouve pas dans la chaine, recommencez")
            GoTo 1
        End If
        'remplacement
5:      Console.WriteLine("Entrez la lettre de remplacement")
        lettre2 = Console.ReadLine()
        For i = 1 To Len(chaine)
            If Mid(chaine, i, 1) = lettre1 Then
                Mid(chaine, i, 1) = lettre2
            End If
        Next
        Console.WriteLine("La chaine après remplacement est : " & chaine)
        Console.ReadLine()
    End Sub
End Module

EXERCICE 17

EXERCICE 17

Ecrire un programme Visual basic en mode console qui demande un mot puis donne le mot miroir. Par exemple, si l’utilisateur saisit DIUMI, le programme affiche « IMUID ».

Solution

Solution


Module Module1
    Sub Main()
        Dim mot, s As String
        Dim i As Integer
        Console.WriteLine("Entrez le mot")
        mot = Console.ReadLine()
        For i = 1 To Len(mot) \ 2
            s = Mid(mot, i, 1)
            Mid(mot, i, 1) = Mid(mot, Len(mot) - i + 1, 1)
            Mid(mot, Len(mot) - i + 1, 1) = s
        Next
        Console.WriteLine("Le mot miroir est : " & mot)
        Console.ReadLine()
    End Sub
End Module

EXERCICE 18

EXERCICE 18

Ecrire un programme qui permet de dire si un mot est un mot palindrome, c.à.d. identique à son mot miroir. Exemple : KAYAK, ESSE….

Solution

Solution


Module Module1
    Sub Main()
        Dim mot As String
        Dim i As Integer = 1
        Dim test As Boolean = True
        Console.WriteLine("Entrez le mot")
        mot = Console.ReadLine()
        For i = 1 To Len(mot) \ 2
            If Mid(mot, i, 1) <> Mid(mot, Len(mot) - i + 1, 1) Then
                test = False
            End If
        Next
        If test = True Then
            Console.WriteLine("Le mot est palindrome")
        Else
            Console.WriteLine("Le mot n'est pas palindorme")
        End If
        Console.ReadLine()
    End Sub
End Module


EXERCICE 19

EXERCICE 19

Ecrire en Visual basic mode console une procédure decale1 qui reçoit en argument un tableau d’entiers t (à une dimension) et un entier positif inferieur la taille du tableau, puis décale les éléments du tableau d’un pas n vers la gauche de façon circulaire. Si le tableau initialement :

5 2 3 0 8 7 3 1

Si n=2, la procédure le transforme en :

3 1 5 2 3 0 8 7

Solution

Solution


Module Module1
    Sub Main()
        Dim m, n As Integer
        Console.WriteLine("Entrez la taille du tableau")
        m = CInt(Console.ReadLine())
        Dim T(m - 1) As Integer
        Do
            Console.WriteLine("Entrez le décalage")
            n = CInt(Console.ReadLine())
        Loop Until n < m
        For I As Integer = 0 To T.Length - 1
            Console.WriteLine("entrer l'élément n°  " & I + 1)
            T(I) = CInt(Console.ReadLine())
        Next
        decale1(T, n)
    End Sub
    Sub decale1(ByRef A() As Integer, ByVal n As Integer)
        Dim k As Integer = A.Length
        Dim b(k - 1) As Integer
        Dim i As Integer
        For i = 0 To k - n - 1
            b(i) = A(i + n)
        Next
        For i = 0 To n - 1
            b(k - n + i) = A(i)
        Next
        Console.WriteLine(" voici le nouveau tableau après décalage")
        For i = 0 To k - 1
            Console.WriteLine(b(i).ToString)
        Next
        Console.ReadLine()
    End Sub
End Module

EXERCICE 20

EXERCICE 20

Ecrire une procédure en Visual basic mode console qui détermine, puis affiche le plus grand entier pair contenu dans un tableau d’entiers strictement positifs. Attention si le tableau ne contient aucun entier pair, la procédure affichera le message « Le tableau ne contient aucun entier pair »

Solution

Solution


Module Module1
    Sub Main()
        Dim n, i As Integer
        Console.WriteLine("Entrez la taille du tableau")
        n = CInt(Console.ReadLine())
        Dim A(n - 1) As Integer
        Console.WriteLine("Lecture des éléments du tableau")
        For i = 0 To n - 1
5:          Console.WriteLine("Entrez l'élément n° " & i + 1)
            A(i) = CInt(Console.ReadLine())
            If A(i) < 0 Then
                Console.WriteLine("entrez un nombre positif seulement, recommencez")
                GoTo 5
            End If
        Next
        affiche_pair(A)
        Console.ReadLine()
    End Sub
    Sub affiche_pair(ByVal A() As Integer)
        Dim max, i As Integer
        max = 0
        For i = 0 To A.Length - 1
            If A(i) Mod 2 = 0 Then
                If A(i) > max Then
                    max = A(i)
                End If
            End If
        Next
        If max = 0 Then
            Console.WriteLine("Le tableau ne contient aucun entier pair")
        Else
            Console.WriteLine("Le plus grand entier pair du tableau est: " & max)
        End If
    End Sub
End Module

pdf Retrouvez ce cours en version pdf
Télécharger
EXERCICES PRECEDENTS
EXERCICES SUIVANTS