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
1j
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