VISUAL BASIC DANS OPENOFFICE Résumé 1. Ouvrir un nouveau
Transcription
VISUAL BASIC DANS OPENOFFICE Résumé 1. Ouvrir un nouveau
VISUAL BASIC DANS OPENOFFICE Résumé 1. 2. Ouvrir un nouveau module visual basic Ouvrir OpenOffice, sauvegarder le classeur sous un nom quelconque (par ex : « algo ») Outils/Macros/Gérer les macros/OpenOffice.org Basic Créer Nouveau/ Module 1 (Si un module a déjà été créé, ALT-F11 permet de l’ouvrir directement- le sélectionner et éditer-) Les algorithmes présentés function signal(x) Do while x>1 x=x-2 loop Do while x<-1 x=x+2 loop if x>0 then signal=1-x else signal =x+1 end if end function Les fonctions : Signal, Fiel ‘ function périodique (période 2) Function fiel(n) ' factoriel n en récursif if n<0 or n<>Int(n) then fiel="n doit être entier positif" Else if n=0 then fiel=1 Else fiel=n*fiel(n-1) end if end if end function Une procédure : tirage Sub tirage ' tirage de 5 nombres distincts parmi 35 dim a(5) as integer ' la matrice a accueillera les 5 nombres choisis : a(1), a(2) … a(5) For i = 1 to 5 indice=0 Do until indice=1 indice=1 b=int(rnd*35) ' b = un nombre au hasard parmi 0,1,2,...34 for j=1 to i-1 ' boucle permettant de savoir si b a été déjà choisi if a(j)= b then ' b ne convient pas: il a été déjà été choisi (le jème) indice=0 j=i ' pour sortir de la boucle j end if next loop ' si indice = 0, il faut chercher un autre nombre, sinon a(i)=b ' b convient : il est stocké next ' classement des nombres choisis dans l’ordre croissant ' …. Ce sera à vous de le faire ' …. ' placement des noms des élèves choisis dans les cellules D2->D6 de la feuille "procedure" du classeur page=thisComponent.getSheets.getByName("procedure") For j = 1 to 5 page.getCellByPosition(4,j).value=a(j)+1 z = page.getCellByPosition(0,a(j)).string page.getCellByPosition(3,j).string=z ' on le met à la bonne place dans la feuille D2->D6 next End Sub 3. Les exercices à faire Exercice 1 : En s’inspirant de la fonction signal: Créer une fonction « chaine » périodique de période 4 telle que: sur [-1;1], chaine(x) = x² sur [-2;-1[, chaine(x) = x+2 sur ]1;2[, chaine(x) = 2-x Tracer la représentation graphique de cette fonction sur [-8;8] dans le tableur. Exercice 2 : En s’inspirant de la fonction fiel: Créer la suite de fibonnaci : U0 = 1, U1 = 1 et pour tout entier n >1, Un = Un-1 + Un-2 à l’aide d’une fonction récursive appelée « suite » Refaire sur le tableur la feuille ci-dessous Exercice 3 : Modifier la procédure « tirage » de sorte à ce que les noms d’élèves tirés soit en ordre alphabétiques (c’est-à-dire que les nombres choisis doivent être en ordre croissant). On pourra utiliser l’algorithme de tri ci-contre: Début algorithme de tri 1j Répéter tant que j < n si a(j+1) < a(j) alors a(j) a(j+1) si j >1 alors j-2 j fin du si fin du si j+1 j fin du répéter Fin algorithme Exercice supplémentaire pour les plus mordus : Créer 2 fonctions nbdiv et divis qui à tout entier naturel non nul raisonnable n associe le nombre de diviseurs et l’ensemble des diviseurs. 4. Fonctions bien utiles dans Visual Basic Mathématiques: sin, cos, tan, atan : sinus, cosinus, tangente, arc tangente exp, log : exponentiel et logarithme népérien sqr, ^, rnd : racine carrée, puissance, aléa de ]0;1[ int, abs, sgn : partie entière, valeur absolue, signe (renvoie -1,0,1 suivant le signe) +, *, -, /, mod : opérations habituelles et modulo (reste de la division euclidienne) Textes: str, val : convertit un nombre en chaîne de caractère, et inversement str(3,5) est la chaîne « 3,5 », val(« 3,5 ») est le nombre 3,5. left(« texte »,n) , right(« texte »,n) : renvoie les n caractère de gauche (de droite) du « texte » left(« MATHEMATIQUES »,3) est égal à « MAT » mid(« texte »,n,p) : renvoie la partie du texte à partir du nième caractère et de longueur p « texte1 » & « texte2 » : concatène les deux textes «algo» & « rithme » est égal à « algorithme » len : donne la longueur d’un texte len(« algo ») est égal à 4. Chercher et mettre des informations dans une feuille du classeur: truc = thisComponent.getSheets.getByName(« machin ») : place dans la variable truc « l’objet » feuille appelée machin du classeur dans lequel est la procédure. truc.getCellByPosition(col,lig).string : est le texte contenue dans la cellule repérée par la colonne col et ligne lig de la feuille désignée par truc (cf au-dessus). Par exemple: si dans la feuille appelée machin du classeur la cellule B3 contient le texte « chien », A = truc.getCellByPosition(1,2).string met dans la variable A le mot « chien » truc.getCellByPosition(1,2).string = « chat » met le mot « chat » dans la cellule B3 Attention: La colonne A correspond à la colonne 0, la colonne B correspond à la colonne 1… La ligne 1 du classeur correspond à la ligne 0 de visual basic truc.getCellByPosition(col,lig).value : est le nombre contenu dans la cellule repérée par la colonne col et ligne lig de la feuille désignée par truc. Cela marche comme précédemment: on peut récupérer un nombre d’une cellule ou bien mettre un nombre dans une cellule Corrigé des exercices Exercice 1 : Fonction chaine function chaine(x) Do while x>2 x=x-4 loop Do while x<-2 x=x+4 loop if x<-1 then chaine=x+2 else if x>1 then chaine=2-x else chaine=x^2 end if end if end function Exercice 2 : Fonction suite: Function suite(n) ' Fibonnaci en récursif if n<0 or n<>Int(n) then suite="n doit être entier positif" Else if n<=1 then suite=1 else suite=suite(n-1)+suite(n-2) end if end if end function Exercice 3 : Tri dans la procédure tirage: ' classement des nombres choisis (partie de programme à placer au bon endroit de la procédure tirage) j=1 Do while j<5 if a(j+1)<a(j) then b=a(j) a(j)=a(j+1) a(j+1)=b if j>1 then j=j-2 endif endif j=j+1 loop Exercice supplémentaire: fonctions nbdiv et divis function nbdiv(n) ' nb de diviseurs de n q=2 s=1 do while q<=n do until n mod q = 0 q=q+1 loop s=s+1 q=q+1 loop nbdiv=s end function function divis(n) ' liste des diviseurs de n q=2 s="1" do while q<=n do until n mod q = 0 q=q+1 loop s=s & "," & q q=q+1 loop divis=s end function