Sub CalculAnnuite() Const TITRE As String = "Calcul d'annuité de remboursement d'un emprunt"



Documents pareils
Algorithmique et programmation : les bases (VBA) Corrigé

Corrigé des TD 1 à 5

Examen Médian - 1 heure 30

Correction TD algorithmique

Feuille TD n 1 Exercices d algorithmique éléments de correction

Recherche dans un tableau

Programmation VBA/Excel. Programmation VBA. Pierre BONNET. Masters SMaRT & GSI - Supervision Industrielle P. Bonnet

Programmation Objet - Cours II

Programmation Visual Basic. Visite guidée d'un programme Visual Basic 6.0


Cours d algorithmique pour la classe de 2nde

Présentation du langage et premières fonctions

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

STAGE IREM 0- Premiers pas en Python

Organigramme / Algorigramme Dossier élève 1 SI

Initiation à la programmation en Python

Fiche mathématiques financières

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Travaux Pratiques de Commande par ordinateur 1 TRAVAUX PRATIQUES

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Programmation C++ (débutant)/instructions for, while et do...while

Introduction à MATLAB R

SNT4U16 - Initiation à la programmation TD - Dynamique de POP III - Fichiers sources

.NET - Classe de Log

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Application 1- VBA : Test de comportements d'investissements

Enoncé et corrigé du brevet des collèges dans les académies d Aix- Marseille, Montpellier, Nice Corse et Toulouse en Énoncé.

Taux d évolution moyen.

Cours Informatique Master STEP

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

CORRECTION EXERCICES ALGORITHME 1

Vous revisiterez tous les nombres rencontrés au collège, en commençant par les nombres entiers pour finir par les nombres réels.

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Algorithmique et Programmation, IMA

Introduction à l étude des Corps Finis

Equations cartésiennes d une droite

Déroulement. Evaluation. Préambule. Définition. Définition. Algorithmes et structures de données 28/09/2009

Exercices - Polynômes : corrigé. Opérations sur les polynômes

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

L ALGORITHMIQUE. Algorithme

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Baccalauréat ES Pondichéry 7 avril 2014 Corrigé

Complément d information concernant la fiche de concordance

Découverte du tableur CellSheet

Algorithmique & programmation

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Série TD 3. Exercice 4.1. Exercice 4.2 Cet algorithme est destiné à prédire l'avenir, et il doit être infaillible! Exercice 4.3. Exercice 4.

Formation VBA 3 Interagir

Baccalauréat S Antilles-Guyane 11 septembre 2014 Corrigé

3 Financement et emprunts

Visual Basic for Applications

Plan du cours Cours théoriques. 29 septembre 2014

Complexité. Licence Informatique - Semestre 2 - Algorithmique et Programmation

Résolution de systèmes linéaires par des méthodes directes

Travail de projet sur VBA

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

1 Année LMD-STSM Algorithmique et Programmation. Série de TD 2

Algorithmique avec Algobox

Tp 1 correction. Structures de données (IF2)

Rappels sur les suites - Algorithme

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

Continuité en un point

PROGRAMMATION EVENEMENTIELLE sur EXCEL

Applications des mathématiques pdf. Introduction à la Programmation en Visual Basic 6

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Programmation linéaire

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

Chapitre 1 : Évolution COURS

Probabilités. Rappel : trois exemples. Exemple 2 : On dispose d un dé truqué. On sait que : p(1) = p(2) =1/6 ; p(3) = 1/3 p(4) = p(5) =1/12

Licence Sciences et Technologies Examen janvier 2010

Chapitre 2 Devine mon nombre!

Notions fondamentales du langage C# Version 1.0

L emprunt indivis - généralités

Java Licence Professionnelle CISII,

Algorithme. Table des matières


FORMATION au VBA Pour EXCEL. Version 2007 & +

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Cours d Informatique

Algorithmes et programmation en Pascal. Cours

Paginer les données côté serveur, mettre en cache côté client

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

CRÉER UNE BASE DE DONNÉES AVEC OPEN OFFICE BASE

Programmer en JAVA. par Tama

OCL - Object Constraint Language

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

INF6304 Interfaces Intelligentes

Création d'un site dynamique en PHP avec Dreamweaver et MySQL

LE PROBLEME DU PLUS COURT CHEMIN

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

ACTIVITÉ DE PROGRAMMATION

Algorithmique & Langage C IUT GEII S1. Notes de cours (première partie) cours_algo_lgc1.17.odp. Licence

Maple: premiers calculs et premières applications

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

1. Structure d'un programme FORTRAN 95

Probabilités Loi binomiale Exercices corrigés

EXPLOITATIONS PEDAGOGIQUES DU TABLEUR EN STG

GENERALITES II. ORGANISATION ET ORGANES DE L EXAMEN III. INSCRIPTION A L EXAMEN, FRAIS ET CONDITIONS D ADMISSION IV. CONTENU ET MATIERE DE L EXAMEN

Transcription:

TD1 : traduction en Visual BASIC des exemples du cours sur les structures de contrôle de l'exécution page 1 'TRADUCTION EN VBA DES EXEMPLES ALGORITHMIQUES SUR LES STRUCTURES 'DE CONTROLE DE L'EXECUTION (conditionnelles et repetitives) ' 'C. Monteil (mailto:monteil@ensat.fr) - INP/ENSAT (http://www.ensat.fr) Sub CalculAnnuite() 'ROLE Déterminer la valeur de chaque annuité de remboursement ' d'un emprunt à partir du montant de l'emprunt, du taux ' d'intérêt annuel et de la durée de l'emprunt. On affiche ' également le taux d'intérêt global équivalent. ' ' Info. saisies : Capital emprunté (Euros) ' Taux d'intérêt annuel (%) ' Durée de l'emprunt (années) ' ' Affichages : Annuité de remboursement (Euros) ' Taux d'intérêt global équivalent (%) ' 'TEST pour un capital de 10000 Euros sur 5 ans a 10% ' l'annuite vaut 2637.97 Euros et le taux global 0.319 (31,9%) Const TITRE As String = "Calcul d'annuité de remboursement d'un emprunt" Dim Annuite As Currency, Capital As Currency Dim TauxAnnuel As Double, TauxGLOBAL As Double Dim Duree As Integer 'Nombre d'années '1.saisie des données : Afficher "Capital emprunté (en Euros) : " Saisir Capital, 10000 Afficher "Durée de l'emprunt (en années) : " Saisir Duree, 5 Afficher "Taux d'intérêt annuel (en %) : " Saisir TauxAnnuel, 10 '2.calcul de l'annuité et du taux global TauxAnnuel = TauxAnnuel / 100 'normalisation : 100% = 1 Annuite = Capital * TauxAnnue1 / (1-1 / (1 + TauxAnnuel) ^ Duree) TauxGL0BAL = Duree * Annuite / Capital - 1 '3.affichage des résultats Afficher "Montant de chaque annuité : " & Format(Annuite, "0.00 ") Afficher "Taux d'intérêt global : " & Format(TauxGLOBAL, "0.0%") Sub Equation1erDegre() ' ROLE: tester la structure de contrôle Si...Alors...Sinon ' sur l'exemple de resolution d'une equation du 1er degre ' DONNEES : les 2 coefficients a et b de l'equation a*x+b = 0 ' RESULTAT: la racine de l'equation (si elle existe) Dim CoefA As Double, CoefB As Double, Racine As Double EffacerEcran "Equation du 1er degré a.x + b = 0" '1.saisie des données Afficher "Coefficient a :" : Saisir CoefA, 2 Afficher "Coefficient b :" : Saisir CoefB, -10 '2.resolution et affichage de la solution If CoefA = 0 Then If CoefB = 0 Then Afficher "Equation indeterminee!" Afficher "Equation impossible!" Racine = -CoefB / CoefA : Afficher "Racine = " & Racine Sub DivisionEuclidienne() ' ROLE: tester la structure de contrôle Do... Loop sur l'exemple ' de calcul du quotient et du reste d'une division euclidienne ' DONNEES : le dividende n et le diviseur d ' RESULTATS: le quotient q et le reste r Dim n As Integer, d As Integer 'dividende et diviseur Dim q As Integer, r As Integer 'quotient et reste EffacerEcran "Division euclidienne" '1.saisie des données Do 'saisie de n avec vérification n>=0 Afficher "Entrer un nombre n (entier >= 0)": Saisir n, 20 Loop Until n >= 0 Do 'saisie de d avec vérification d>0 Afficher "Entrer un diviseur d (entier > 0)": Saisir d, 7 Loop Until d > 0 '2.calcul du quotient q et du reste r q = 0: r = n Do While r >= d 'invariant: n = d.q + r q = q + 1 : r = r - d Afficher " Pas n " & q & " : " & n & " - " & q & " * " & d & " = " & r Loop '3.affichage du résultat Afficher "Division de " & N & " par " & d & ": quotient = " & q & ", reste = " & r

TD1 : traduction en Visual BASIC des exemples du cours sur les structures de contrôle de l'exécution page 2 Sub Equation2ndDegre() ' ROLE afficher les racines d'une équation du second degré ' de la forme: CoefA.x2 + CoefB.x + CoefC = 0 ' TEST DE LA STRUCTURE DE CONTROLE Select Case ' DONNEES : les 3 coefficients a, b et c de l'equation a*x^2 + b*x + c = 0 ' RESULTATS: la (ou les) racine(s) de l'equation (si elles existent) Const INDETERMINE = 1, IMPOSSIBLE = 2, AUCUNE_RACINE = 3, _ UNE_RAC_SIMPLE = 4, UNE_RAC_DOUBLE = 5, DEUX_RACINES = 6 Dim CoefA As Double, CoefB As Double, CoefC As Double 'coefficients Dim Racine1 As Double, Racine2 As Double 'racines Dim Determinant As Double Dim CodeCas As Single 'code du cas correspondant : cf. constantes EffacerEcran "Résolution d'une équation du 2nd degré" '1.saisie des données Afficher "Coefficient a : " Saisir CoefA, 1 Afficher "Coefficient b : " Saisir CoefB, -1 Afficher "Coefficient c : " Saisir CoefC, -1 '2.résolution If CoefA = 0 Then 'équation du 1er degré If CoefB = 0 Then If CoefC = 0 Then CodeCas = INDETERMINE CodeCas = IMPOSSIBLE Racine1 = -CoefC / CoefB: CodeCas = UNE_RAC_SIMPLE 'équation du 2nd degré Determinant = CoefB ^ 2-4 * CoefA * CoefC If Determinant > 0 Then Racine1 = (-CoefB - Sqr(Determinant)) / (2 * CoefA) Racine2 = (-CoefB + Sqr(Determinant)) / (2 * CoefA) CodeCas = DEUX_RACINES If Determinant = 0 Then Racine1 = -CoefB / (2 * CoefA) CodeCas = UNE_RAC_DOUBLE CodeCas = AUCUNE_RACINE '3.affichage des solutions Select Case CodeCas Case INDETERMINE Caractères Espace et Souligné pour signifier le prolongement d'une même instruction sur 2 lignes différentes Forme abrégée du If (puisque Then est suivi d'une instruction sur la même ligne) : absent et implicite en fin de ligne Afficher "Equation indéterminée" Case IMPOSSIBLE Afficher "Equation impossible" Case AUCUNE_RACINE Afficher "Pas de racines réelles" Afficher "pas de chance!" Case UNE_RAC_SIMPLE Afficher "Une seule racine " & Racine1 Case UNE_RAC_DOUBLE Afficher "Une racine double" & Racine1 Case DEUX_RACINES Afficher "Deux racines " & Racine1 & " et " & Racine2 Case Afficher "Cas non prevu!!!" End Select Sub CalculMoyenne() ' ROLE: saisir plusieurs notes et afficher leur moyenne ' TEST DE LA STRUCTURE DE CONTROLE Pour ' DONNEES : le nombre de notes a saisir, et chaque note ' RESULTAT: la moyenne des notes saisies Dim NbNotes As Integer 'nombre de notes Dim Total As Integer 'total des notes saisie jusqu'alors Dim Note As Integer 'derniere note saisie Dim Numero As Integer 'numéro de la note à saisir EffacerEcran "Calcul de la moyenne de plusieurs notes" '1.saisie du nombre de notes Afficher "Indiquer le nombre de notes a saisir : " Saisir NbNotes, 4 If NbNotes <= 0 Then Afficher "Nombre de notes (" & NbNotes & ") non valide!" '2.boucle de saisie des notes avec cumul du total Total = 0 For Numero = 1 To NbNotes ' saisir une note et cumuler Afficher "Note " & Numero & "? " Saisir Note, 10 + Numero Total = Total + Note Next Numero '3.affichage du resultat Afficher "La moyenne des " & NbNotes & " notes vaut " & Total / NbNotes

TD2 : algorithmes sur les structures de contrôle de l'exécution page 1 Titre (énoncé implicite) Rôle (énoncé explicite) Particularités somme des nombres de 1 à n Donnée : un nombre entier n >= 1 Résultat : un nombre Somme = 1 + 2 +... + n On affichera pour vérification le nombre : n * (n+1) / 2 Exemple : n = 5 => S = 1 + 2 + 3 + 4 + 5 = 15 boucle simple avec cumul puissance entière d'un nombre quelconque Données : un nombre x (réel non nul), une puissance n (entier positif ou nul) Résultat : un nombre y = x n (rappel : la puissance 0 d'un nombre quelconque non nul vaut 1, et non 0) Méthode : y est calculé sans utiliser l'exponentiation directe, mais par un produit de n facteurs : y = x * x * * x Exemples : 2 3 = 8, 2 0 = 1 test de nombre premier Donnée : un nombre entier n > 1 Résultat : indiquer s'il est premier, sinon Afficher son 1 er diviseur Exemple : 15 n'est pas premier (1 er diviseur = 3) affichage de nombres parfaits tableau de remboursement d'un emprunt Nombre parfait = nombre égal à la somme de ses diviseurs (lui-même étant exclu) Donnée : un nombre entier n > 1 Résultat : indiquer s'il est parfait ou non, et Afficher la liste de ses diviseurs et leur somme Exemple : 6 est parfait (liste de ses diviseurs 1+2+3 = 6) (autres nombres < 10000 : 28 = 1+2+4+7+14 ; 496 = 1+2+4+8+16+31+62+124+248 ; 8128=1+2+4+8+16+32+64+127+254+508+1016+2032+4064) Données : capital emprunté ( ), taux d'intérêt annuel (%), durée emprunt (années) Résultats : - annuité de remboursement ( ), intérêts totaux ( ) et taux d'intérêt global (%) - pour chaque année : montant des intérêts de l'année, de la part de capital remboursée, et du capital restant à rembourser - Afficher ensuite pour vérification le cumul des intérêts annuels, des parts en capital annuelles, et le rapport (en pourcentage) entre ces 2 grandeurs Exemple : emprunt de 10 000 à 10% pendant 3 ans => annuité = 4 021.15, intérêts totaux = 2 063.44, taux global = 20.6% Année Part intérêt Part capital Capital restant du 1 1 000.00 3 021.15 6 978.85 2 697.89 3 323.26 3 655.59 3 365.56 3 655.59 0.00 Total 2 063.44 10 000.00 (rapport : 20.6%) boucle simple avec cumul multiplicatif boucle de recherche à double condition d'arrêt boucle avec cumul partiel boucle avec plusieurs variables interdépendantes et plusieurs cumuls

Programme CalculerSommeNombres Rôle : calcule la somme des n premiers nombres entiers (n = nombre à saisir) Saisie : un nombre entier n >= 1 Affichage : un nombre Somme = 1 + 2 +... + n On affichera pour vérification le nombre : n * (n+1) / 2 _Exemple: n = 5 => Somme = 1 + 2 + 3 + 4 + 5 = 15 Var n, Somme, i : entier TD2 : algorithmes sur les structures de contrôle de l'exécution page 2 Programme TesterNombrePremier Rôle : indique si un nombre saisi au clavier est premier Saisie : un nombre entier n > 1 Affichage : indique s'il est premier, sinon affiche son 1er diviseur _Exemple : 15 n'est pas premier (1er diviseur = 3) Var n, d : entier _ ExisteDiviseur : booléen {vrai si on trouve un diviseur} {1.saisie de la donnée} Afficher ("Entrer un nombre strictement positif"); Saisir (n) {2.calcul de la somme} Somme 0 Pour i de 1 à n Répéter {Somme = somme des nombres de 1 à i} _Somme Somme + i {3.affichage du résultat} Afficher ("La somme des ", n, " premiers nombres entiers vaut ", Somme) Afficher ("Vérification : ", n, "*(", n, "+1)/2 = ", n * (n + 1) / 2) Programme CalculerPuissanceEntiere Rôle : élever un nombre réel (saisi au clavier) à une puissance entière (saisie au clavier) (rappel : la puissance 0 d'un nombre quelconque non nul vaut 1, et non 0) Saisie : un nombre x (réel non nul), un exposant n (entier positif ou nul) Affichage : un nombre y = x puissance n Exemples : 2 puissance 3 = 8, 2 puissance 0 = 1 _NOTA : on n'utilise pas l'opérateur d'exponentiation, mais une boucle multiplicative Var x, y : réel; _ n, i : entier {1.saisie des données} Afficher ("Entrer un nombre réel non nul"); Saisir (x) Afficher ("Entrer un nombre entier positif (exposant)"); Saisir (n) {2.calcul de la puissance} y 1 Pour i de 1 à n répéter {y = x puissance i} _y y * x {3.affichage du résultat} Afficher (x, " puissance ", n, " vaut ", y) {1.saisie de la donnée} Afficher ("Entrer un nombre supérieur à 1"); Saisir (n) {2.boucle de recherche du 1er diviseur autre que 1 et le nombre} d 2 ; ExisteDiviseur FAUX {a priori, pas de diviseur} Tant que (d < n) et Non ExisteDiviseur Répéter {teste si d divise n} _ Si n Mod d = 0 Alors ExisteDiviseur VRAI Sinon d d + 1 {3.affichage du résultat} Si ExisteDiviseur Alors Afficher (n, " n'est pas premier (premier diviseur : ", d, ")") Sinon _ Afficher (n, " est premier") Programme TesterNombreParfait Rôle : indique si un nombre saisi au clavier est parfait : un nombre est dit "parfait" s'il est égal à la somme de ses diviseurs (lui-même étant exclu) Saisie : un nombre entier n > 1 Affichage : indiquer s'il est parfait ou non, et afficher la liste et la somme de ses diviseurs _Exemple : 28 est parfait (diviseurs : 1 + 2 + 4 + 7 + 14 = 28) Var n, d, SommeDiviseurs : entier _ ChaineDiviseurs : chaîne {liste des diviseurs trouvés} {1.saisie de la donnée} Afficher ("Entrer un nombre supérieur à 1"); Saisir (n) {2.boucle de cumul des diviseurs} SommeDiviseurs 1; ChaineDiviseurs "1" {1 est forcement un diviseur} Pour d de 2 à n - 1 répéter {teste si d divise n ; si oui, l'ajoute à SommeDiviseurs} Si n Mod d = 0 Alors SommeDiviseurs SommeDiviseurs + d ChaineDiviseurs ChaineDiviseurs & "+" & d {3.affichage du résultat} Si SommeDiviseurs <> n Alors Afficher (n, " n'est pas parfait ") Sinon _ Afficher (n, " est parfait ") Afficher ("Somme de ses diviseurs : ", ChaineDiviseurs, " = ", SommeDiviseurs)

Programme CalculerRemboursementEmprunt Rôle : Déterminer la valeur de chaque annuité de remboursement d'un emprunt à partir du montant de l'emprunt ( ), du taux d'intérêt annuel (%) et de la durée de l'emprunt (années). On affiche également le tableau de remboursement en indiquant pour chaque année la part d'intérêts remboursée, la part de capital remboursée, et le capital restant a rembourser TEST : emprunt de 10 000 à 10% pendant 3 ans => annuité = 4 021.15, intérêts totaux = 2 063.44, taux global = 20.6% Année Part intérêt Part capital Capital restant du 1 1 000.00 3 021.15 6 978.85 2 697.89 3 323.26 3 655.59 3 365.56 3 655.59 0.00 _ Total 2 063.44 10 000.00 (rapport : 20.6%) Var Annuite, Capital, FraisTotaux, TauxAnnuel, TauxGLOBAL : réel Duree {Nombre d'années}, An {année courante lors du parcours du tableau} : entier _ PartInteret, PartCapital, CapitalRestant, CumulInteret, CumulCapital : réel {1.saisie des données} Afficher ("Capital emprunté (en Euros) : ") ; Saisir (Capital) Afficher ("Durée de l'emprunt (en années) : ") ; Saisir (Duree) Afficher ("Taux d'intérêt annuel (en %) : ") ; Saisir (TauxAnnuel) {2.calcul et affichage de l'annuité et des frais totaux} TauxAnnuel TauxAnnuel / 100 {normalisation : 100% = 1} Annuite Capital * TauxAnnuel / (1-1 / (1 + TauxAnnuel) ^ Duree) FraisTotaux Duree * Annuite - Capital TauxGLOBAL FraisTotaux / Capital Afficher ("Montant de chaque annuité : ", Annuite) Afficher ("Frais totaux : ", FraisTotaux) Afficher ( "Taux d'intérêt global : ", TauxGLOBAL) {3.calcul et affichage du tableau de remboursement} Afficher ("Année", "Part intérêt", "Part capital", "Capital restant du") CumulInteret 0: CumulCapital 0: CapitalRestant Capital Pour An de 1 à Duree Répéter {calcule et affiche les résultats à la fin de l'année An} PartInteret CapitalRestant * TauxAnnuel CumulInteret CumulInteret + PartInteret PartCapital Annuite - PartInteret CumulCapital CumulCapital + PartCapital CapitalRestant CapitalRestant - PartCapital _ Afficher (An, PartInteret, PartCapital, CapitalRestant) Afficher ("Cumul des intérêts : ", CumulInteret) Afficher ("Cumul du capital : ", CumulCapital) Afficher ("Rapport Intérêts/Capital : ", CumulInteret / CumulCapital) TD2 : algorithmes sur les structures de contrôle de l'exécution page 3

TD3 : traduction en Visual BASIC des algorithmes du TD2 sur les structures de contrôle de l'exécution page 1 Sub CalculerSommeNombres() 'ROLE : calcule la somme des n premiers nombres entiers (n = nombre à saisir) 'Info à saisir : un nombre entier n >= 1 'Affichages : un nombre Somme = 1 + 2 +... + n ' pour vérification le nombre : n * (n+1) / 2 'Exemple: n = 5 => s = 1 + 2 + 3 + 4 + 5 = 15 Const TITRE As String = "Somme des n premiers nombres entiers" Dim n As Integer, Somme As Integer, i As Integer '1.saisie de la donnee Afficher "Entrer un nombre strictement positif" Saisir n, 5 '2.calcul de la somme Somme = 0 For i = 1 To n 'Somme = somme des nombres de 1 à i} Somme = Somme + i Next i '3.affichage du resultat Afficher "La somme des " & n & " premiers nombres entiers vaut " & Somme Afficher "Vérification : " & n & "*(" & n & "+1)/2 = " & n * (n + 1) / 2 Sub CalculerPuissanceEntiere() 'ROLE : élever un nombre reel (saisi au clavier) à une puissance entiere (saisie au clavier) ' (rappel : la puissance 0 d'un nombre quelconque non nul vaut 1, et non 0) 'Infos à saisir : un nombre x (réel non nul), une puissance n (entier positif ou nul) 'Affichage : un nombre y = x puissance n 'Exemples : 2 puissance 3 = 8, 2 puissance 0 = 1 'NOTA : on n'utilise pas l'operateur d'exponentiation, mais une boucle multiplicative Const TITRE As String = "Puissance entière d'un nombre réel" Dim x As Double, n As Integer, Puissance As Double, i As Integer '1.saisie des donnees Afficher "Entrer un nombre réel non nul": Saisir x, 2 Afficher "Entrer un nombre entier (exposant)": Saisir n, 10 '2.calcul de la puissance Puissance = 1 For i = 1 To n 'Puissance = x puissance i} Puissance = Puissance * x Next i '3.affichage du resultat Afficher x & " puissance " & n & " vaut " & Puissance Sub TesterNombrePremier() 'ROLE : indique si un nombre saisi au clavier est premier 'Info à saisir: un nombre entier n > 1 'Affichage : indique s'il est premier, sinon affiche son 1er diviseur 'Exemple : 15 n'est pas premier (1er diviseur = 3) Const TITRE As String = "Test de nombre premier" Dim n As Integer, d As Integer, ExisteDiviseur As Boolean 'vrai si on trouve un diviseur '1.saisie de la donnee Afficher "Entrer un nombre supérieur à 1": Saisir n, 15 '2.boucle de recherche du 1er diviseur autre que 1 et le nombre d = 2: ExisteDiviseur = False ' a priori, pas de diviseur Do While (d < n) And Not ExisteDiviseur 'teste si d divise n If n Mod d = 0 Then ExisteDiviseur = True d = d + 1 Loop '3.affichage du resultat If ExisteDiviseur Then Afficher n & " n'est pas premier (premier diviseur : " & d & ")" Afficher n & " est premier" Sub TesterNombreParfait() 'ROLE : indique si un nombre saisi au clavier est parfait : un nombre est dit ' "parfait" s'il est égal à la somme de ses diviseurs (lui-même étant exclu) 'Info à saisir: un nombre entier n > 1 'Affichage : indiquer s'il est parfait ou non, et afficher la somme de ses diviseurs 'Exemple : 28 est parfait (diviseurs 1 + 2 + 4 + 7 + 14 = 28) Const TITRE As String = "Test de nombre parfait" Dim n As Integer, d As Integer, SommeDiviseurs As Integer Dim ChaineDiviseurs As String 'liste des diviseurs trouvés '1.saisie de la donnee Afficher "Entrer un nombre superieur à 1": Saisir n, 28 '2.boucle de cumul des diviseurs SommeDiviseurs = 1: ChaineDiviseurs = "1" '1 est forcement un diviseur For d = 2 To n - 1 'teste si d divise n ; si oui, l'ajoute a SommeDiviseurs If n Mod d = 0 Then SommeDiviseurs = SommeDiviseurs + d ChaineDiviseurs = ChaineDiviseurs & "+" & d Next d '3.affichage du resultat If SommeDiviseurs <> n Then Afficher n & " n'est pas parfait " Afficher n & " est parfait " Afficher "Somme de ses diviseurs : " & ChaineDiviseurs & " = " & SommeDiviseurs

Sub CalculerRemboursementEmprunt() 'ROLE : Déterminer la valeur de chaque annuité de remboursement ' d'un emprunt à partir du montant de l'emprunt (Euros), du taux ' d'intérêt annuel (%) et de la durée de l'emprunt (annees). ' On affiche également le tableau de remboursement en indiquant ' pour chaque année la part d'interets remboursee, la part de ' capital remboursee, et le capital restant a rembourser 'TEST : emprunt de 10 à 10% pendant 3 ans ' => annuité = 4 021.15, intérêts totaux = 2 063.44, taux global = 20.6% 'Année Part intérêt Part capital Capital restant du '1 1 000.00 3 021.15 6 978.85 '2 697.89 3 323.26 3 655.59 '3 365.56 3 655.59 0.00 'Total 2 063.44 10.00 (rapport : 20.6%) Const TITRE As String = "Remboursement d'un emprunt" Dim Annuite As Currency, Capital As Currency, FraisTotaux As Currency Dim TauxAnnuel As Double, TauxGLOBAL As Double, Duree As Integer 'Nombre d'années Dim PartInteret As Currency, PartCapital As Currency, CapitalRestant As Currency Dim An As Integer 'annee courante Dim Message As String 'message multi-lignes a afficher apres la boucle de calcul Dim CumulInteret As Currency, CumulCapital As Currency '1.saisie des données : Afficher "Capital emprunté (en Euros) : " : Saisir Capital, 10000 Afficher "Durée de l'emprunt (en années) : " : Saisir Duree, 3 Afficher "Taux d'intérêt annuel (en %) : " : Saisir TauxAnnuel, 10 '2.calcul et affichage de l'annuité et des frais totaux TauxAnnuel = TauxAnnuel / 100 'normalisation : 100% = 1 Annuite = Capital * TauxAnnuel / (1-1 / (1 + TauxAnnuel) ^ Duree) FraisTotaux = Duree * Annuite - Capital TauxGLOBAL = FraisTotaux / Capital Afficher "Montant de chaque annuité : " & Format(Annuite, "# ##0.00 ") Afficher "Frais totaux : " & Format(FraisTotaux, "# ##0.00 ") Afficher "Taux d'intérêt global : " & Format(TauxGLOBAL, "0.0%") '3.calcul et affichage du tableau de remboursement Afficher "Année", "Part intérêt", "Part capital", "Capital restant du" CumulInteret = 0: CumulCapital = 0: CapitalRestant = Capital For An =1 To Duree 'calcule les resultats a la fin de l'annee An PartInteret = CapitalRestant * TauxAnnuel : CumulInteret = CumulInteret + PartInteret PartCapital = Annuite - PartInteret : CumulCapital = CumulCapital + PartCapital CapitalRestant = CapitalRestant - PartCapital Afficher An, Format(PartInteret, "# ##0.00 "), _ Format(PartCapital, "# ##0.00 "), Format(CapitalRestant, "# ##0.00 ") Next An Afficher "TOTAUX : ", Format(CumulInteret, "# ##0.00 "), Format(CumulCapital, "# ##0.00 ") Afficher "Rapport Intérêts/Capital : " & Format(CumulInteret / CumulCapital, "0.0%") TD3 : traduction en Visual BASIC des algorithmes du TD2 sur les structures de contrôle de l'exécution page 2

TD4 - Procédures et fonctions Titre Description Particularités Corrigé du TD2 distribution du corrigé du TD2 (TD2.DOC) (4 pages) (uniquement algo, pas VBA) procédure Echanger (pdx, pdy) programme Tester_Procedure_Echanger procédure CalculerSommeDiviseurs programme ChercherNombresParfaits fonction SommeDiviseurs programme ChercherNombresPremiers programme ChercherNbAmis Saisir (pdvariable, pdvaleurpardefaut) en s'inspirant du programme TesterNombreParfait du TD2, définir un programme ChercherNombresParfaits recherchant les nombres parfaits inférieurs à une limite fixée (par ex. 30) et utilisant une procédure CalculerSommeDiviseurs (pdnombre, pdsomme, pddiviseurs ) où pddiviseurs = chaîne des diviseurs "1+2 + " définir une fonction SommeDiviseurs (pdnb) : entier renvoyant la somme des diviseurs seule (sans la liste) et appelant la procédure précédente CalculerSommeDiviseurs ; tester cette fonction en définissant un programme ChercherNombresPremiers affichant la liste des nombres 1 ers inférieurs à une borne fixée définir un programme ChercherNbAmis recherchant les nombres amis inférieurs ou égaux à une borne à saisir au clavier : 2 nombres sont amis si la somme des diviseurs de l'un est égal à l'autre nombre, et réciproquement Mode de passage des paramètres? (la procédure équivaut à : pdvariable pdvaleurpardefaut, ou bien : pdvariable Valeur tapée par l'utilisateur) Paramètres en mise à jour - permutation de 2 variable Procédure avec 2 sorties Fonction appelant une procédure 2 appels d'une même fonction Carte fonctionnelle des appels de procédures / fonctions : Proc. ChercherNombresParfaits Proc. ChercherNombresPremiers Proc. ChercherNbAmis Fonc. SommeDiviseurs Proc. CalculerSommeDiviseurs Traduction en Visual BASIC : cf. TD5.doc et TD5b.xls

TD4 - Procédures et fonctions Procédure Echanger (pdx, pdy) ROLE : échanger le contenu des paramètres pdx et pdy M.A J. pdx, pdy : réel Var z : réel _z pdx ; pdx pdy ; pdy z Programme Tester_Procedure_Echanger ROLE : tester le fonctionnement de la procedure Echanger Var variable1, variable2 : réel variable1 1 ; variable2 2 Afficher ("Avant appel : variable 1 = ", variable1, ", variable 2 = ", variable2) Echanger (variable1, variable2) _Afficher ("Après appel : variable 1 = ", variable1, ", variable 2 = ", variable2) Procédure CalculerSommeDiviseurs (pdnombre, pdsomme, pdliste) ROLE : calculer la somme des diviseurs d'un nombre (lui-meme exclu) _ ainsi que la liste des diviseurs trouves sous la forme "1+2+..." ENTREE pdnombre : entier {nombre a traiter} SORTIE pdsomme : entier {somme des diviseurs de pdnombre (pdnombre exclu)} _ pdliste : chaine {contenant la liste sous forme d'addition} Var d : entier pdsomme 1 ; pdliste "1" {1 est forcement un diviseur} Pour d de 2 à pdnombre - 1 répéter {teste si d divise pdnombre ; si oui, l'ajoute} Si pdnombre Mod d = 0 Alors _ pdsomme pdsomme + d ; pdliste pdliste & "+" & d Programme ChercherNombresParfaits ROLE : afficher les nombres parfaits inférieurs a une borne saisie au clavier Var nmax, n, SommeDiviseurs : entier ; ChaineDiviseurs : chaîne {liste des diviseurs trouvés} {1.saisir la borne de recherche} Afficher ("Entrer une borne de recherche (>1) ") ; Saisir (nmax) {2.boucle de calcul et affichage des nombres parfaits inférieurs à nmax} Pour n de 2 à nmax répéter {tester si n est parfait} {2.1.calculer la somme de ses diviseurs} CalculerSommeDiviseurs (n, SommeDiviseurs, ChaineDiviseurs) {2.2.afficher le resultat} Si SommeDiviseurs = n Alors _Afficher ( n, " est parfait (", ChaineDiviseurs, " = ", SommeDiviseurs, ")" ) Fonction SommeDiviseurs(pdNb) : entier ROLE : renvoyer la somme des diviseurs d'un nombre (lui-meme exclu) ENTREE pdnb : entier {nombre a traiter} {Nota : cette fonction appelle la procédure CalculerSommeDiviseurs} Var SommeDiv : entier ; ListeDiv : chaîne CalculerSommeDiviseurs (pdnb, SommeDiv, ListeDiv) _ SommeDiviseurs SommeDiv Programme ChercherNombresPremiers ROLE : afficher les nombres premiers inférieurs à une borne saisie au clavier Var nmax, n : entier {1.saisir la borne de recherche} Afficher ( "Saisir une borne de recherche (>1) :" ) ; Saisir ( nmax) {2.boucle de calcul et affichage des nombres premiers inférieurs à nmax} Pour n de 2 à nmax répéter {tester si n est premier} Si SommeDiviseurs(n) = 1 Alors _Afficher (n, " est premier") Programme ChercherNombresAmis ROLE: Afficher les couples de nombres amis inferieurs a une limite choisie ; 2 nombres N et P sont amis si la somme des diviseurs de N est egale a P et si la somme des diviseurs de P est egale a N _ EXEMPLE : 220 et 284 sont amis Var BorneMaxi : entier {borne maximale de recherche} _ n, SommeN, p : entier {variables locales auxiliaires} {1.saisir la borne de recherche} Afficher ( "entrez la borne de recherche (>1): " ) ; Saisir (BorneMaxi) {2.boucle de calcul et affichage des couples de nombres amis inférieurs à Bornemaxi} Pour n de 2 à BorneMaxi répéter {tester si n peut etre ami avec un autre nombre} {2.1.calculer la somme des diviseurs de n} SommeN SommeDiviseurs(n) {2.2.filtrer les sommes inférieures au nombre n} Si SommeN < n Alors {2.3.calculer la somme des diviseurs de SommeN=p} p SommeN {seul candidat possible} Si SommeDiviseurs(p) = n Alors Afficher (n, " est ami avec ", p) Institut National Polytechnique de Toulouse Claude MONTEIL Ecole Nationale Supérieure Agronomique de Toulouse

Sub Echanger(ByRef pdx As Double, ByRef pdy As Double) 'ROLE : echanger le contenu des 2 paramètres spécifiés 'M.A J.pd x,pd y Dim z As Double z = pdx: pdx = pdy: pdy = z Sub Tester_Procedure_Echanger() 'ROLE : tester le fonctionnement de la procedure Echanger Dim variable1 As Double, variable2 As Double variable1 = 1: variable2 = 2 Afficher "Avant appel : variable 1 = " & variable1 & ", variable 2 = " & variable2 Echanger variable1, variable2 Afficher "Après appel : variable 1 = " & variable1 & ", variable 2 = " & variable2 Sub CalculerSommeDiviseurs(ByVal pdnombre As Integer, _ ByRef pdsomme As Integer, ByRef pdlistediviseurs As String) 'ROLE : calculer la somme des diviseurs d'un nombre (lui-meme exclu) ' ainsi que la liste des diviseurs trouves sous la forme "1+2+..." 'ENTREE pdnombre : nombre a traiter 'SORTIE pdsomme : somme des diviseurs de n (n exclu) ' pdlistediviseurs : chaine contenant la liste des diviseurs sous forme d'addition Dim d As Integer pdsomme = 1: pdlistediviseurs = "1" '1 est forcement un diviseur For d = 2 To pdnombre - 1 'teste si d divise Nombre ; si oui, l'ajoute If pdnombre Mod d = 0 Then pdsomme = pdsomme + d : pdlistediviseurs = pdlistediviseurs & "+" & d Next d Sub ChercherNombresParfaits() 'ROLE : afficher les nombres parfaits inférieurs a une borne saisie au clavier 'EXEMPLES : 6, 28, 496 et 8128 sont les nombres parfaits inférieurs à 10000 Dim nmax As Integer, n As Integer, SommeDiviseurs As Integer Dim ChaineDiviseurs As String 'liste des diviseurs trouvés EffacerEcran "Nombres parfaits" '1.saisir la borne de recherche Afficher "Entrer une borne de recherche (>1) ": Saisir nmax, 500 '2.boucle de calcul et affichage des nombres parfaits inférieurs à nmax For n = 2 To nmax 'tester si n est parfait '2.1.calculer la somme de ses diviseurs CalculerSommeDiviseurs n, SommeDiviseurs, ChaineDiviseurs '2.2.afficher le resultat If SommeDiviseurs = n Then Afficher n & " est parfait (" & ChaineDiviseurs & " = " & SommeDiviseurs & ")" Next n TD5 : traduction en Visual BASIC des algorithmes du TD4 sur les procédures et fonctions page 1 Function SommeDiviseurs(ByVal pdnb As Integer) As Integer 'ROLE : renvoyer la somme des diviseurs d'un nombre (lui-meme exclu) 'ENTREE pdnb : nombre a traiter 'NOTA : cette fonction appelle la procédure CalculerSommeDiviseurs Dim SommeDiv As Integer, ListeDiv As String CalculerSommeDiviseurs pdnb, SommeDiv, ListeDiv SommeDiviseurs = SommeDiv End Function Sub ChercherNombresPremiers() 'ROLE : afficher les nombres premiers inférieurs à une borne saisie au clavier Dim nmax As Integer, n As Integer EffacerEcran "Nombres premiers" '1.saisir la borne de recherche Afficher "Saisir une borne de recherche (>1) :" Saisir nmax, 50 '2. boucle de calcul et affichage des nombres premiers inférieurs à nmax For n = 2 To nmax 'tester si n est premier If SommeDiviseurs(n) = 1 Then Afficher n & " est premier" Next n Sub ChercherNombresAmis() 'ROLE: Afficher les couples de nombres amis inferieurs a une limite saisie au clavier ' 2 nombres N et P sont amis si la somme des diviseurs de N est egale a P ' et si la somme des diviseurs de P est egale a N 'EXEMPLES : (220,284), (1184,1210), (2620,2924), (5020,5564) (couples < 10000) Dim BorneMaxi As Integer 'borne maximale de recherche Dim n As Integer, SommeN As Integer Dim p As Integer, SommeP As Integer EffacerEcran "Nombres Amis" '1.saisir la borne de recherche Afficher "entrez la borne de recherche (>1): " Saisir BorneMaxi, 300 '2.boucle de calcul et affichage des couples de nombres amis inférieurs à BorneMaxi For n = 2 To BorneMaxi 'tester si n peut etre ami avec un autre nombre '2.1.calculer la somme des diviseurs de n SommeN = SommeDiviseurs(n) '2.2.filtrer les sommes supérieures au nombre n If SommeN > n Then '2.3.calculer la somme des diviseurs de SommeN p = SommeN 'seul candidat possible If SommeDiviseurs(p) = n Then Afficher n & " est ami avec " & p Next n Institut National Polytechnique de Toulouse Claude MONTEIL Ecole Nationale Supérieure Agronomique de Toulouse