introduccion programacion open office basic

Upload: 4r13l2009

Post on 13-Jul-2015

331 views

Category:

Documents


2 download

TRANSCRIPT

OpenOffice Basic

Ferm Vil

BA-1

Introduccin a la programacin en OpenOffice.org Basic

Ferm Vil

OpenOffice Basic

Ferm Vil

BA-2

1.- Nuestro primer programaEl OpenOffice Basic es un lenguaje de programacin completo (es una versin de BASIC), que nos permite crear aplicaciones visuales interactivas y completas por medio de nuestro OpenOffice. - Ejecuta el OpenOffice Calc - Asegrate que el nivel de seguridad est bajo. Es decir: Men Herramientas Opciones... OpenOffice.org: Seguridad [Seguridad de Macros...] Bajo (no recomendado) . [Aceptar] [Aceptar] - Graba el libro de clculo (que de momento est vaco) como Macro01 en TuCarpeta - Men Herramientas Macros Organizar macros OpenOffice.org Basic ...

Haz clic en [Editar] Acabamos de acceder al Module1 de nuestro fichero Macro01, observa la pestaa del ngulo inferior izquierdo:

Es el lugar donde escribiremos nuestros programas en OpenOffice Basic. Observa que de hecho nos encontramos en una ventana separada del Macro01.ods:

Borra todo lo que aparece en el Editor del Basic, exceptuando:

OpenOffice Basic

Ferm Vil

BA-3

Todas las lneas, precedidas por REM representan comentarios para el programador. Es decir a efectos de programa tanto da dejar la lnea como ponerla. - Escribe en el Editor del Basic, el siguiente programa:

- Clic en el icono Guardar y cierra la ventana correspondiente al editor de OooBasic (Mis macros y dilogos.Standard OpenOffice.org Basic) - Vamos a ejecutar nuestro programa: Men Herramientas Macros Ejecutar macro ... Clic en [+] de Mis macros Clic en [+] de Standard de Mis macros Clic en Module 1 [Ejecutar] Si todo funciona correctamente, en la celda D9 de nuestra hoja de clculo, aparece la frase Hola Mundo Sitate en el Editor del Basic para visualizar el programa, es decir: Men Herramientas Macros Organizar macros OpenOffice.org Basic ... [Editar] 1) Bsicamente existen dos tipos de programas: procedimientos o funciones. Nuestro programa es un procedimiento porque empieza por Sub y acaba por End Sub 2) Observa la estructura de un procedimiento (llamado tambin subprocedimiento): Sub NombreDelPrograma Sentencia 1 Sentencia 2 Sentencia 3 ... ... End Sub 3) Las primeras lneas de un programa se usan normalmente para declarar los elementos que utilizaremos en el programa. Para ello, en el BASIC, se utiliza la clusula Dim: Dim Hoj As Object Dim Cel As Object Declaramos dos objetos (nuestro BASIC, permite la POO: programacin orientada a objetos), que sern, el primero una hoja de clculo y el segundo una celda.

OpenOffice Basic

Ferm Vil

BA-4

4) Hoj = ThisComponent.Sheets(0) Definimos el objeto Hoj como nuestro documento (ThisComponent = este componente), concretamente la Hoja 1 (Sheets(0) = Hoja 1). Se empieza a contar por 0, igual que en las coordenadas que vemos a continuacin. 5) Cel = Hoj.getCellByPosition(3,8) Definimos el objeto Cel como la celda de la Hoja de clculo (Hoj) de coordenadas (3,8). Coordenadas de una celda = (X , Y) 1 coordenada: X , nmero de columna = x + 1 2 coordenada: Y , nmero de fila = y + 1 Es decir: Nmero de columna = 3 + 1 = 4, por lo tanto: A, B, C, D Nmero de fila: 8 + 1 = 9, por lo tanto fila 9 En definitiva, se trata de la ceda : D9 6) Cel.SetFormula(Hola Mundo) En el objeto Cel, construido anteriormente, escribe el texto (SetFormula), que tenemos entre comillas y parntesis.

2.- BotonesLa forma de ejecutar el programa: Men Herramientas Macros Ejecutar macro... Seleccionar el programa y [Ejecutar] es bastante laborioso; veamos otra forma de hacerlo, pero antes ... - Sitate en el Editor del Basic del Macro01 y escribe (a continuacin del Prog01):

- Sitate en la Hoja 1 del Macro01.ods Graba el libro de clculo: clic en Guardar Ejecuta el programa Prog02. Es decir: Men Herramientas Macros Ejecutar macro ... Selecciona el Prog02 (en Mis macros Standard Module 1) y [Ejecutar] Si todo funciona correctamente, en la Hoja2, celda B2 tenemos la frase Hola Mundo Si comparas nuestro programa Prog02 con el anterior, aparte de la hoja, ahora estamos en la Sheets(1). La sintaxis corresponde a la POO: el operador punto para separar los diferentes objetos hasta llegar a un ltimo objeto, que no es ms que una propiedad o un mtodo (accin). Es decir, en nuestro caso: Objeto1.SubObjetoA.SubObjetoB.Mtodo Objeto1 = ThisComponent (este componente, en nuestro caso un libro de clculo) SubObjetoA = Sheets(1) (la hoja 2 del libro anterior) SubObjetoB = getCellByPosition(1,1) (la celda B2 del objeto anterior) Mtodo = SetFormula(Hola Mundo) (accin = escribe en el objeto anterior, Hola Mundo) - Borra el Hola Mundo de la Hoja2 y sitate en la Hoja1 Vamos a ejecutar nuestro Prog02, utilizando un botn ...

Necesitamos la barra de iconos Campos de control de formulario, en caso de no estar presente Haz lo siguiente:

OpenOffice Basic

Ferm Vil

BA-5

Men Ver Barras de Herramientas ... Clic en Campos de control de formulario de la nueva barra.

- Clic en el botn:

Segn la versin de OpenOffice, la imagen del botn puede ser diferente. - Marca un recuadro que abarque la celda B2 (estamos en la Hoja1) aproximadamente:

- Con el botn que acabamos de crear seleccionado, accede a su men contextual. Selecciona la opcin: Campo de Control... Solapa: General Propiedad Ttulo: borra Botn y escribe en su lugar Prog02 Solapa: Acontecimientos Sita el cursor de escritura en el campo Botn del ratn pulsado y clic en su [...] [Asignar] Mis macros Standard Module 1 - Prog02 [Aceptar] [Aceptar] Cierra la ventana Propiedades: Botn (clic en la X de su extremo superior derecho)

Haz clic en el icono Modo Diseo: para salir del modo diseo y volver al modo ejecucin. Segn la versin de OpenOffice, la imagen del botn puede ser diferente. Vamos a probar el botn: - Clic en [Prog02] - Si todo funciona correctamente en B2 de Hoja2, tendremos Hola Mundo Borra el texto anterior y vuelvelo a probar. Por ltimo graba la hoja Macro01.ods con el mismo nombre y cirrala

3.- Cuadros de dilogo estndardEn los programas anteriores, hemos utilizado celdas de una hoja de clculo, para escribir resultados. Aparte de los cuadros de dilogo personalizados, que veremos ms adelante, podemos utilizar los llamados Cuadros de dilogo estndar. - Crea una hoja de clculo nueva (Men Archivo Nuevo Hoja de Clculo) y grbala como Macro02.ods en TuCarpeta - Accede al Editor del Basic del Macro02.ods Men Herramientas Macros Organizar macros OpenOffice.org Basic ...

OpenOffice Basic

Ferm Vil

BA-6

Si seleccionas: Mis macros Standard Module 1 vers que aparecen los programas Prog01 y Prog02. Por defecto, al crear un programa, nos colocamos automticamente en Mis macros y al escribir el o los programas en el Standard de Mis macros, stos sern accesibles desde cualquier documento OOo. A partir de ahora grabaremos nuestros programas en el documento correspondiente, es decir:

Selecciona Standard de Macro02.ods [Nuevo] Acepta el nombre Module1

- Escribe los programas:

- Vuelve a la pantalla del Macro02.ods (Hoja1), vamos a crear un botn para ejecutar el Prog03, es decir: Con la barra Campos de control de formulario a la vista.

Clic en el icono Botn: Marca un recuadro que abarque a la celda B2 (un poco ms grande) Accede al men contextual del botn acabado de insertar Haz clic en la opcin Campo de Control... Establece como propiedad Ttulo: Prog03 (Solapa: General) Pestaa: Acontecimientos En el campo Botn del ratn pulsado, asigna el programa Prog03 de Macro02.ods (Standard Module1) Sal del modo diseo: clic en el icono Modo Diseo:

- Prueba el funcionamiento del botn; si todo va bien, tendremos:

- Crea otro botn, pero ahora asociado al Prog04:

En este caso tendremos:

OpenOffice Basic

Ferm Vil

BA-7

Est claro que el cuadro de dilogo MsgBox tiene muchas posibilidades, ya las estudiaremos ms adelante en detalle. Ahora nos interesa un cuadro de dilogo que nos permita entrar datos ... Sitate en el Editor del Basic del Macro02.ods y escribe el siguiente programa:

- Sitate en la Hoja1 del Macro02.ods y crea un botn que has de asociar al Prog05:

- Ejecuta el Prog05, es decir, clic en [Prog05]. Si todo funciona correctamente, debera pasar algo as:

- Vamos a estudiar el Prog05 (sitate en el editor del Basic, para visualizarlo): Dim nom As String, ciudad As String Declaramos dos variables (nom y ciudad) de texto (String) nom = InputBox(Escribe tu nombre) InputBox es un cuadro de dilogo estndar, que contiene un mensaje (que es lo que escribimos entre comillas y parntesis) y un campo en blanco; donde el usuario del programa puede escribir lo que quiera. En el momento de hacer clic en el [Aceptar] del InputBox, lo que hemos escrito en el campo que estaba vaco, se entiende como un texto (ya veremos cuando necesitemos un nmero) y se guarda en la variable de nombre nom. MsgBox mensaje1 & variable1 & mensaje2 & Chr$(13) & variable2 ... Observa en primer lugar, el operador de concanetacin (unir), se trata del ampersand y lo que hace es unir los diferentes elementos que opera; estos elementos pueden ser: . El texto que sea encerrado entre comillas . Variables . Chr$(13): que representa la pulsacin de un [Return], o si t quieres: fuerza a una nueva lnea lo que viene a continuacin.

OpenOffice Basic

Ferm Vil

BA-8

Para acabar este apartado, vamos a hacer un programa que mezcle los cuadros de dilogo estndar y los elementos de nuestros documentos Calc (celdas en nuestro caso)... - Sitate en el Editor del Basic y escribe:

- Sitate en Macro02.ods Crea un botn asociado a Prog06 Prueba el funcionamiento del programa Espero que te funcione correctamente Graba el libro de clculo con el mismo nombre Macro02.ods

4.- Tipos de VariableOpenOffice Basic soporta los tipos numricos, cadenas, booleanos y objetos variables. Los objetos son usados principalmente para referirse a los elementos internos del OpenOffice como documentos, tablas, etc. Con un objeto podremos usar sus correspondientes propiedades y mtodos. Si usamos Dim:los tipos numricos son inicializados en cero y las cadenas como la cadena vaca Los tipos ms utilizados (no los nicos): - Tipo Boolean: puede tomar los valores True (verdadero = -1) y o False (falso = 0) - Tipo String: cadena de texto Si escribimos el carcter $ al final del nombre, automticamente definimos un String Es decir: Dim nom$ es equivalente a Dim nom As String - Tipo Integer: nmero entero Nmero de 32.768 a +32.767 Dim x%

Es equivalente a y

Dim x As Integer +2.147.483.647

- Tipo Long: nmero largo Nmero entero entre: -2.147.483.648 - Tipo Double: nmero decimal

- Crea un nuevo libro de clculo, que debers grabar como Macro03.ods en TuCarpeta - Accede al Editor del Basic (debers crear un Module1) del Macro03 y escribe el siguiente procedimiento:

- Sitate en el Macro03.ods y crea un botn de ttulo: Prog07, asociado al procedimiento Prog07. - Ejecuta el procedimiento Prog07 de la siguiente forma:

OpenOffice Basic

Ferm Vil

BA-9

Veamos:

Clic en [Prog07] Ante la primera ventana, haz lo que te dice el programa: Escribe lo que quieras y [Aceptar] o pulsa[Return] Nmero de Columna ?, escribe 5 y [Return] Nmero de Fila ?, escribe 7 y [Return] Si todo funciona correctamente, en la celda E7 (quinta columna, septima fila), aparece lo que has escrito primeramente.

- Sitate en el Editor del Basic y observa: Declaramos x e y como Integer ya que representarn las coordenadas de una celda InputBox ( ) devuelve un texto. Val(InputBox( )) devuelve un nmero. Dicho de otra forma: Val es una funcin que convierte una cadena que representa nmeros, en dichos nmeros (integer). - Sitate en el Editor del Basic de Macro03.ods y escribe el siguiente procedimiento:

- Sitate en el Macro03.ods y crea un botn de Ttulo = Prog08, asociado al procedimiento Prog08 - Ejecuta el procedimiento de la siguiente forma: Clic en [Prog08] Escribe como base del rectngulo 3,07 Escribe como altura del rectngulo 2,15 Si todo funciona correctamente en la celda B21, tendremos el nmero 6,6005 (siempre y cuando aumentemos el nmero de decimales) Veamos: - Sitate en el Editor del Basic y observa: Coordenadas = (1,20) = 2 columna 21 fila = B21 La base y la altura (bas, alt) se declaran Double, ya que pueden ser decimales. La funcin CDbl( ), convierte una cadena de caracteres en nmero double Cel.SetValue(bas*alt) bas*alt es un nmero. La funcin que escribe un nmero en una celda es SetValue. De la misma forma que lo hace SetFormula si es un texto.

Sitate en el Editor del Basic de Macro03.ods y escribe el siguiente procedimiento:

- Sitate en Macro03.ods y crea un botn de Titulo = Prog09, asociado al procedimiento Prog09 - Ejecuta el procedimiento de la siguiente manera: Clic en [Prog09] Escribe como radio de la circunferencia: 3,5812 Observa que pi = 3,14159265358979

OpenOffice Basic

Ferm Vil

BA-10

Si todo va bien en G7 aparece 22,50134322 (debers aumentar el nmero de decimales de la celda)

Veamos: - Sitate en el Editor del Basic y observa: Coordenadas = (6,6) = 7 columna 7 fila = G7 longi =2*pi*radi Asignamos (el operador de asignacin es el =) a la variable longi el resultado del producto 2*pi*radi. pi, es una constante incorporada al lenguaje cuyo valor es 3,14159265358979 Observa que &, concatena sin problema texto y nmeros: pi = & pi - Sitate en el Editor del Basic de Macro03.ods y escribe el siguiente procedimiento:

- Sitate en Macro03.ods y crea un botn de Ttulo = Prog10, asociado al procedimiento Prog10 - Ejecuta el procedimiento de la siguiente manera: Clic en el botn [Prog10] Base del tringulo = 3,75 Altura del tringulo = 2,17 Si todo funciona correctamente tendremos:

- Observa el Prog10, el nico elemento nuevo es cStr(), funcin que convierte un nmero a una cadena de caracteres. En efecto: SetFormula(cadena): coloca en la celda correspondiente el texto cadena bas es Double, por lo tanto SetFormula(Base = & cStr(bas)), es decir, en la celda correspondiente se escribir el texto Base = y a continuacin (operador &) el texto bas ya que la funcin cStr, lo convierte en texto. - Para acabar este apartado: sitate en el Module1 y escribe el siguiente procedimiento:

OpenOffice Basic - Escribe en la Hoja1:

Ferm Vil

BA-11

Siendo en botn [Calcular], el botn de Ttulo= Calcular, asignado al procedimiento Prog11 - Prueba el funcionamiento del procedimiento anterior de la siguiente forma: Escribe en la celda E3 = 3,4 Clic en [Calcular] Si todo funciona correctamente, en la celda E5, aparece 36,316811 (=3,4*3,4*pi) Veamos, es importante porque estamos interactuando con el interface del Calc (no estamos utilizando ni el InputBox, ni el MsgBox)... - Sitate en el Editor del Basic del Macro.03. para investigar el procedimiento: Prog11 Cel1, representa la celda E3 ya que Cel1 = Hoj.getCellByPosition(4,2): 5columna, 3 fila. Cel2, representa la celda E5 ya que Cel2=Hoj.getCellByPositiuon(4,4): 5 columna, 5 fila En Cel1 nostros escribimos un dato (numrico): para que el programa lo recoja hacemos Cel1.getValue,concretamente lo asignamos a la variable radi: radi=Cel1.getValue Si fuera texto, haramos: Cel1.getFormula En Cel2 el programa ha de escribir un nmero, es decir: Cel2.SetValue(). Si fuera texto, escribiramos: Cel3.SetF0rmula()

OpenOffice Basic

Ferm Vil

BA-12

Ejercicios1) Crea un nuevo libro de clculo de nombre EjerM01.ods que contenga un procedimiento de nombre EjerM01, que se ejecute con un botn y funcione de la siguiente forma: - El programa nos pregunta nuestro nombre - El programa nos pregunta nuestra edad (en aos, claro) - El programa escribe en la hoja de clculo, nuestro nombre y a continuacion los das que tenemos de vida hasta el momento, de la siguiente forma:

2) Crea un nuevo libro de clculo de nombre EjerM02.ods que contenga un procedimiento de nombre EjerM02, que se ejecute con un botn y haga lo siguiente: - El programa nos pide un nmero entero - El programa nos muestra el doble, el triple y el cuadruple del nmero que habamos introducido de la siguiente forma:

3) Crea un nuevo libro de clculo de nombre EjerM03.ods, que contenga dos procedimientos de nombre EjerM03 y EjerM03bis que funcionen de la siguiente forma:

El botn [Calcular] est asociado al EjerM03 que calcula el determinante y el botn [Otro], que corresponde al EjerM03bis, lo nico que hace es asignar la cadena vaca () a las cuatro celdas. Observa que en nuestro programa no hay ningn InputBox ni MsgBox.

OpenOffice Basic

Ferm Vil

BA-13

5.- La estructura If then End IfCrea un nuevo libro de clculo y grbalo con el nombre Macro04.ods en TuCarpeta Accede al Editor del Basic (debers crear el Module1 en Macro04.ods) y escribe el siguiente programa:

- Sitate en la hoja de clculo. Crea un botn asociado al procedimiento Prog12 y prubalo. - Espero que te funcione correctamente en las dos versiones: Contestando a la pregunta con la palabra Pepe Contestando cualquier cosa que no sea Pepe - Estudio del Prog12 En la funcin InputBox, hemos escrito dos parmetros: el primero Estructura IF THEN ESLSE, es el que aparece en el interior del cuadro inputbox y el segundo no es ms que el ttulo de la ventana InputBox:

Si escribimos un solo argumento, ste es el mensaje que aparece en el interior del cuadro, y no aparece ningn ttulo en la ventana. Observa la estructura de programacin IF THEN ELSE. Constituye la estructura de programacin ms simple: Si se cumple la condicin, entonces haz lo siguiente, si no se cumple, haz esto otro. Es decir: Si (If) escribo Pepe entonces (then) aparecen dos cuadros, el primer cuadro con el mensaje Hola Pepe, el segundo cuadro con el mensaje No te conozco. En caso contrario (Else), es decir, si no escribo Pepe: aparece el mensaje Lo siento me he equivocado. Bsicamente, con la estructura IF THEN ELSE, conseguimos una bifurcacin del programa: el si entonces o el caso contrario. Veamos, que no nicamente representa una bifurcacin, en el siguiente procedimiento (debido a que utilizamos todas las posibilidades de la estructura). - Sitate en el Editor del Basic de Macro04 y escribe el siguiente procedimiento:

OpenOffice Basic

Ferm Vil

BA-14

- Sitate en la hoja de clculo (no te olvides de ir grabando los cambios). Crea un botn asociado al procedimiento Prog13 y prubalo como mnimo tres veces: para un nmero mayor de 100, para un nmero menor de 100 y escribiendo precisamente el 100. Espero que te funcione correctamente: Observa en definitiva, la sintaxis completa de la estructura: If condicin1 Then Sentencia 1 Sentencia 2 ... ElseIf condicin2 Then Sentencia 3 Sentencia 4 ... ElseIf condicin3 Then Sentencia 5 Sentencia 6 ... ... ... Else Sentencia 7 Sentencia 8 ... End If Debes tener en cuenta que las lneas de programa: sentencia 7, sentencia 8, ... slo se ejecutarn si no se cumple ninguna de las condiciones que hemos considerado en la estructura.

6.- Contadores. Operadores LgicosCrea un nuevo libro de clculo y grbalo con el nombre Macro05.ods en TuCarpeta Accede al Editor del Basic (debers crear el Module1 en Macro05) y escribe el siguiente procedimiento:

OpenOffice Basic

Ferm Vil

BA-15

- Sitate en la hoja de clculo (Hoja1). Crea un botn asociado al procedimiento Prog14 y prubalo:

- Ejecuta varias veces el programa, observando detenidamente su resultado y el mismo programa ya que nos encontramos con elementos nuevos, veamos Si al escribir un programa, nos encontramos con una lnea demasiado larga, podemos redistribuirla en varias lneas, sin ms que escribir el smbolo de subrayado al final de la lnea (o cada lnea), precedido de un espacio. Es decir: las lneas de programa: s = s + Valor de x despus de pasar por el contador x=x+3 + Chr(9) + _ cStr(x)) + Chr(10) son en realidad una sla lnea. Declaramos una cadena: Dim s As String y la inicializamos a nada: s=. No sera necesario ya que al declararla, automticamente se inicializa a nada. x=x+3 es un contador, instrumento muy utilizado en programacin, que nos permite aadir al valor de X tres unidades. Si se lee de la siguiente forma, creo que se entiende mejor: El nuevo valor de X es igual al anterior valor de x + tres unidades. La funcin Chr(9) es equivalente a pulsar la tecla de tabulacin: [Tab] La funcin Chr(10) es equivalente a pulsar la tecla [Return] o [Intro]. Equivale a Chr$(13) x=x-2, x=x*3 son dos contadores de x, en el primer caso modificar el valor de x disminutndolo en 2 unidades y en el segundo lugar multiplicndolo por 3. El operador suma entre Strings se comporta como el operador de concatenacin &. Es decir: sumar dos textos es equivalente a unirlos: colocarlos uno al lado del otro. s es una cadena (string) que pasa por diferentes contadores: s = s + ... En la prctica, acumulamos en s muchos datos, que al incluir el Chr(9) y el Chr(10) se organizan en diferentes lneas (Chr(10)) y columnas (Chr(91)). Observa la tcnica que utilizamos en este procedimiento: Acumulamos en s una serie de datos, durante la ejecucin de todo programa y que mostramos al final: MsgBox s

- Escribe en el Editor de Basic del Macro05.ods, el siguiente procedimiento:

OpenOffice Basic

Ferm Vil

BA-16

- Sitate en la hoja de clculo (Hoja1). Crea un botn asociado al procedimiento Prog15 y ejectalo varias veces: prueba las diferentes posibilidades: H, h, V, v, cualquier cosa. - Observa el Prog15: String*1 Significa string, es decir, texto pero de longitud 1, o sea, un solo carcter. Or Significa, evidentemento o - Escribe el siguiente procedimiento:

- Crea un botn asociado al programa Prog16 y ejecuta el programa unas cuantas veces, buscando detenidamente lo que sucede: observa qu tcnica ms sencilla tenemos, para interrumpir un programa o volver a empezar. Acabamos de ver un programa con el operador lgico Or, vamos a ver ahora uno con el operador lgico And: utilizaremos este operador cuando sea preciso que para ejecutar un bloque de instrucciones se cumpla ms de una condicin. Observa que debern cumplirse todas las condiciones ... - Escribe en el Macro05.ods el siguiente procedimiento:

- Crea un botn asociado al programa Prog17 y ejecuta el programa unas cuantas veces. Considera el caso: Patatas y Total >50:

OpenOffice Basic

Ferm Vil

BA-17

- Estudio del Prog17: Observa en primer lugar que no declaramos ninguna variable y el programa funciona exactamente igual. Si no declaramos una variable, por dfecto, el OpenOffice considerar a esta variable tipo Variant, esto es un tipo indefinido de variable que toma el valor correcto cuando adquiere o asignamos un valor. Bajo este punto de vista, podramos pensar que es mejor no declarar las variables. Pero hay un problema: el tipo Variant es el que consume ms memoria. La conclusin, pues, es declarar todas las variables, aunque el BASIC no nos lo exija. Observa el uso del operador dos puntos :, nos permite escribir varias sentencias distintas de un programa en una sola lnea. Viene a ser el operador contrario al carcter de subrayado, precedido de un espacio en blanco, que nos permita separar en varias lneas, una nica sentencia.

7.- Otras estructuras de programacinCrea un nuevo libro de clculo y grbalo con el nombre Macro06.ods en TuCarpeta Accede al Editor de Basic (debers crear el Module1 en Macro06.ods) y escribe el siguiente procedimiento:

- Crea un botn (en Hoja1), asociado al procedimiento Prog18 y ejecuta el programa unas cuantas veces.

OpenOffice Basic

Ferm Vil

BA-18

- La estructura de programacin Select Case Select Case variable Case a Sentencia1 Sentencia2 ... Case b Sentencia3 Sentencia4 ... Case Else Sentencia5 Sentencia6 ... End Select Viene a ser una generalizacin de la estructura If Then: segn el valor de la variable, se ejecutarn unas sentencias u otras. Veamos a continuacin una generalizacin en las condiciones del Select Case ... Escribe (en Macro06) el siguiente procedimiento: Sub Prog19 Dim num As Integer, notanum As Integer Dim bien As Integer, notacual As String, s As String Dim hoj As Object, Cel1 As Object, Cel2 As Object Dim Cel3 As Object, Cel4 As Object, Cel5 As Object Hoj=ThisComponent.Sheets(0) Cel1=Hoj.getCellByPosition(4,4):Cel2=Hoj.getCellByPosition(4,5) Cel3=Hoj.getCellByPosition(4,6):Cel4=Hoj.getCellByPosition(4,7) Cel5=Hoj.getCellByPosition(4,8) num=Val(InputBox("Escribe el nmero total de preguntas") bien=Val(InputBox("Escribe el nmero de respuestas acertadas") notanum=10*bien/num Select Case notanum Case 0 to 1 notacual="Muy Deficiente" Case 2 to 3 notacual="Deficiente" Case 4 notacual="Insuficiente" Case 5 notacual="Suficiente" Case 6 notacual="Bien" Case 7 to 8 notacual="Notable" Case 9 to 10 notacual="Excelente" End Select s="Nota Cualitativa" & Chr(10) & Chr(10) s=s & "Nmero de preguntas =" & num & Chr(10) s=s & "Nmero de correctas = " & bien & Chr(10) s=s & "Nota cualitativa = " & cStr(notanum) & Chr(10) s=s & "Nota cualitativa : " & notacual MsgBox s Cel1.SetFormula("Nota Cualitativa") Cel2.SetFormula("Nmero de preguntas " & cStr(num)) Cel3.SetFormula("Nmero de correctas " & cStr(bien)) Cel4.SetFormula("Nota Cuantitativa " & cStr(notanum))

OpenOffice Basic

Ferm Vil

BA-19

Cel5.SetFormula("Nota Cualitativa " & notacual) End Sub - Crea en Hoja1 un botn asociado al procedimiento anterior y ejectalo varias veces, para comprobar su funcionamiento.

Veamos a continuacin otra estructura de programacin, en esta ocasin de tipo repetitivo. - Escribe en el Editor de Basic del Macro06.ods el siguiente procedimiento:

- Crea en Hoja1 un botn asociado al procedimiento Prog20 y ejectalo varias veces, para comprobar su funcionamiento.

- Estudio del Prog20 La estructura For To Next For indice = nmero1 To nmero2 Sentencia 1 Sentencia 2 Sentencia 3 ... Next

OpenOffice Basic

Ferm Vil

BA-20

El bloque de sentencias 1, 2, 3, ... se repiten desde el nmero1 hasta el nmero2 de unidad en unidad

Observa de qu forma acumulamos la suma, utilizamos un contador del tipo: Total = Total + Valor. Es decir, el nuevo valor de Total es el anterior valor de Total ms el nuevo nmero Valor.

- Escribe en el Editor de Basic de Macro06.ods el procedimiento:

- Crea un botn asociado al procedimiento Prog21y ejecuta el programa. Si todo funciona correctamente, se rellenar el rango H11:H15 de los nmeros pares 2, 4, 6, 8, 10 - Observa: For i=2 To 10 Step 2 Desde i=2 hasta i=10 de dos en dos (step = paso) Vamos a hacer un programa que nos permita calcular la media de 5 notas ... - Escribe en el Editor de Basic de Macro06 el procedimiento: -

Crea un botn asociado al procedimiento Prog22 y ejecuta varias veces el programa. Vamos a por otro ejercicio de for to next: escribe en el Editor de Basic del Macro06, el procedimiento:

OpenOffice Basic

Ferm Vil

BA-21

- Crea un botn asociado al procedimiento Prog23 y ejecuta varias veces el programa. Vamos a estudiar la estructura repetitiva Do While ... Loop ... - Escribe en el Editor de Basic del Macro06.ods el siguiente procedimiento:

- Crea un botn, en la Hoja2 de Macro06.ods, asociado al procedimiento Prog24 y ejectalo varias veces. - La estructura de programacin Do While - Loop Do While condicin Sentencia1 Sentencia2 ... Loop Mientras se cumpla la condicin, se repetir la ejecucin de las sentencias 1, 2, etc. - Escribe en el Editor de Basic del Macro06.ods el siguiente procedimiento:

- Crea un botn, en la Hoja2, asociado al procedimiento Prog25 y ejectalo. - En el Prog16 vimos una forma de volver a empezar, pero slo una vez, en cambio en el Prog25 gracias a la estructura Do While Loop, disponemos de una tcnica para repetir la ejecucin de un programa (volver a empezar), tantas veces como queramos. Vamos a complicar el programa, se trata de crear un procedimiento que sirva para incluir registros en una base de datos. El programa ir pidiendo datos mientras escribamos algn valor en el InputBox correspondiente al campo nombre, de forma que si al preguntar el nombre, no escribimos nada, se terminar la ejecucin del bloque correspondiente al Do While Loop

OpenOffice Basic - Escribe:

Ferm Vil

BA-22

Crea un botn asociado al procedimiento Prog26 y ejectalo varias veces. Debes tener en cuenta que las celdas de la hoja de clculo correspondientes a una fecha, debers formatearlas as: como fechas. Al introducir una fecha utilizando el InputBox, por defecto, debers utilizar la notacin inglesa: primero el mes y despus el da.

Graba el libro de clculo Macro06.ods con el mismo nombre.

Crea un nuevo libro de clculo, que debers grabar como Macro07.ods en TuCarpeta y crea un Module1

Programa que suma todos los nmeros que queramos - Escribe en el Editor de Basic de Macro07 el siguiente procedimiento:

OpenOffice Basic

Ferm Vil

BA-23

- Crea un botn, en la Hoja1 de Macro07, asociado al procedimiento anterior y ejectalo unas quantas veces.

OpenOffice Basic

Ferm Vil

BA-24

Programa que nos resuelve una equacin de 2 grado - Escribe en el Editor del Basic del Macro07 el siguiente programa: Sub Prog28 Dim a As Double, b As Double, c As Double Dim dis As Double, x1 As Double, x2 As Double Dim x As Double, Hoj As Object a=CDbl(InputBox("Coeficiente de x^2")) Hoj=ThisComponent.Sheets(0) Hoj.GetCellByPosition(4,0).SetFormula("Coeficiente de x^2 = " & cStr(a)) If a=0 then Hoj.GetCellByPosition(4,1).SetFormula("No es una ecuacin de 2 grado") Else b=CDbl(InputBox("Coeficiente de x= ")) Hoj.GetCellByPosition(4,1).SetFormula("Coeficiente de x = " & cStr(b)) c=CDbl(InputBox("Trmino independiente = ")) Hoj.GetCellByPosition(4,2).SetFormula("Trmino Independiente = " & cStr(c)) dis=b^2-4*a*c If dis=0 then x=(-b)/(2*a) Hoj.GetCellByPosition(4,4).SetFormula("La ecuacin tiene una solucin = " & cStr(x)) End If If dis0 then x1=(-b+Sqr(dis))/(2*a): x2=(-b-Sqr(dis))/(2*a) Hoj.GetCellByPosition(4,4).SetFormula("x1 = " & cStr(x1)) Hoj.GetCellByPosition(4,5).SetFormula("x2 = " & cStr(x2)) End If End If End Sub - Crea un botn, en la Hoja1 de Macro07, asociado al procedimiento anterior y ejectalo para los casos: a=0 a=1 ; b=1 ; c=1 a=1; b=-4; c=4 a=1; b=1; c=-6 Prubalo tambin para valores decimales. - Nota que la funcin Sqr(), es una funcin incorporada al Basic del OpenOffice, que nos permite calcular la raz cuadrada de un nmero..

OpenOffice Basic

Ferm Vil

BA-25

Suma y Producto de los mltiplos de 2 inferiores a 30 - Escribe en el Editor del Basic del Macro07 el siguiente procedimiento:

- Crea un botn, en la Hoja1 de Macro07, asociado al procedimiento anterior y ejectalo para probarlo

Clculo del factorial de un nmero - Escribe en el Editor del Basic de Macro07.ods el siguiente procedimiento:

- Crea un botn, en la Hoja2 de Macro07 asociado al Prog30 y prubalo varias veces. - Recuerda que el factorial de un nmero x es x! = x(x-1)(x-2)(x-3)...3.2.1

OpenOffice Basic

Ferm Vil

BA-26

Programa que calcula los 10 primeros mltiplos del nmero que queramos, por ltimo nos da la suma y el producto de todos ellos. - Escribe:

- Crea un botn en la Hoja2 de Macro07 asociado al Prog31 y pubalo varias veces

OpenOffice Basic

Ferm Vil

BA-27

Tabla de valores de la funcin y = x2 5x + 10 - Escribe en el Editor del Basic del Macro07.ods, el siguiente procedimiento:

- Crea un botn, en la Hoja2 de Macro07, asociado al Prog32 y ejectalo.

OpenOffice Basic

Ferm Vil

BA-28

Clculo de la hipotenusa de un tringulo rectngulo. El programa tiene la opcin de volver a empezar. - Escribe en el Editor del Basic del Macro07.ods, el programa:

- Crea un botn, en la Hoja2 de Macro07 asociado al Prog33 y calcula unas cuantas hipotenusas...

- Observa: UCase(cadena): es una funcin incorporada al OpenOffice Basic, que transforma todas las letras de cadena a maysculas. Es decir, que escribir: UCase(opc) = S es equivalente a escribir: opc = S Or opc = s, pero ms corto.

OpenOffice Basic Programa que calcula el nmero e

Ferm Vil

BA-29

- Escribe en el Editor del Basic del Macro07, el siguiente programa:

- Crea un botn, en la Hoja2 de Macro07 asociado a Prog34 y ejectalo ...

- Observa: Exp(nmero) es una funcin incorporada al OpenOffice Basic, que nos da como resultado e elevado al nmero. Por lo tanto: Exp(1) = e

OpenOffice Basic

Ferm Vil

BA-30

Ejercicios4) Crea un nuevo libro de clculo de nombre EjerM04.ods que contenga un procedimiento de nombre EjerM04, que haga lo siguiente: - El procedimiento nos pide que escribamos dos nmeros positivos menores de 57 - El programa nos da como resultado el producto de los dos nmeros - Si los nmeros no son positivos o son mayores de 57, el programa nos lo dice. - El programa nos pregunta al final si queremos volver a empezar 5) Crea un nuevo libro de clculo de nombre EjerM05.ods que contenga un procedimiento de nombre EjerM05 que haga lo siguiente: El programa nos va pidiendo nmeros, hasta que escribimos el nmero 9999, por ltimo el programa nos da como resultado el nmero de nmeros introducidos, exceptuando el 9999 6) Crea un nuevo libro de clculo de nombre EjerM06.ods que contenga un procedimiento de nombre EjerM06 que haga lo siguiente: El programa escribe todos los mltiplos de 23 inferiores a 1000 y por ltimo nos da la suma de todos ellos. 7) Crea un nuevo libro de clculo de nombre EjerM07.ods, que contenga un procedimiento de nombre EjerM07 que haga lo siguiente: - El programa hace una tabla de valores de la funcin y = sen(7x-5) - El programa nos pide los dos valores de x (valores mximo y mnimo de la tabla de valores - El programa nos pide el incremento (variacin) de la x. 8) Crea un nuevo libro de clculo de nombre EjerM08.ods que contenga un procedimiento de nombre EjerM08, que sirva para calcular un cateto de un tringulo rectngulo a partir del otro cateto y la hipotenusa, de la siguiente forma: - El programa nos pide el valor de la hipotenusa - El programa nos pide el valor de un cateto - Si el cateto es mayor que la hipotenusa, el programa nos da un mensaje de error y se acaba. - El programa nos da como resultado el valor del otro cateto y nos pregunta si queremos volver a empezar. 9) Crea un nuevo libro de clculo de nombre EjerM09.ods, que contenga un procedimiento de nombre EjerM09 y que sirva para resolver ecuaciones de 2 grado del tipo: ax2 + bx = 0 10) Crea un nuevo libro de clculo de nombre EjerM10.ods, que contenga un procedimiento de nombre EjerM10 y que sirva para resolver sistemas de ecuaciones del tipo: ax + by = c dx + ey = f Prueba el funcionamiento del programa para el caso a=1, b=-2, c=-3, d=3, e=1, f=5, si todo funciona correctamente: x=1, y=2. La salida debera ser de la forma:

11) Haz un nuevo libro de clculo de nombre EjerM11.ods, que contenga un procedimiento de nombre EjerM11 que escriba los 15 primeros mltiplos de 7, su suma y su producto. El programa ha de tener la posibilidad de volver a empezar.

OpenOffice Basic

Ferm Vil

BA-31

12) Crea un nuevo libro de clculo de nombre EjerM12.ods, que contenga un procedimiento de nombre EjerM12, que sirva para calcular el rea de un tringulo o el rea de un rectngulo o el rea de un crculo. El programa ha de tener la posibilidad de volver a empezar. 13) Crea un nuevo libro de clculo de nombre EjerM13.ods que contenga un procedimiento de nombre EjerM13 que funcione de la siguiente forma: dados dos vectores del espacio, el programa calcula su producto escalar, producto vectorial y adems nos d el mdulo de los dos vectores y tambin el mdulo del producto vectorial. Recordemos: v=(a,b,c) p=(d,e,f) Producto Escalar = ad + be + cf Producto Vectorial = (bf ec, de-af, ae-bd) Mdulo de v =

a 2 + b2 + c 2

La salida debera ser de la forma:

14) Crea un nuevo libro de clculo de nombre EjerM14.ods, que contenga un procedimiento de nombre EjerM14, y que funcione de la siguiente forma: El programa nos pide un nmero y da como resultado la tabla de multiplicar del nmero introducido. 15) Crea un nuevo libro de clculo de nombre EjerM15.ods, que contenga un procedimiento de nombre EjerM15, y que funcione de la siguiente forma: El programa calcula el nmero e mediante el desarrollo en serie: e = 1 + 1/1! + 1/(2!) + 1/(3!) + 1/(4!) + ... + 1/(50!)

OpenOffice Basic

Ferm Vil

BA-32

8.- Arrays- Crea un nuevo libro de clculo, que has de grabar con el nombre Macro08.ods en TuCarpeta. Crea un Module1 y sitate en su interior para escribir:

- Crea un botn en la Hoja1 del Macro08.ods, asociado al procedimiento anterior y ejectalo, observando detenidamente lo que sucede. - Estudio del Prog35: Dim a(1 To 3) As Double Definimos lo que se llama aaray o matriz o vector o arreglo de una dimensin. Y no es ms que una variable que consta de tres nmeros Double, en realidad tres variables double. Para acceder a los elementos de nuestro array hemos de utilizar la notacin: a(1) = primer elemento; a(2)=segundo elemento; a(3)= tercer elemento El programa anterior es muy bonito, pero no sirve para nada, vamos a hacer un programa un poco ms complicado ... Observa la siguiente tabla: Inicio Fin Lunes 8 14 Martes 10,5 17 Miercoles 6 13,5 Jueves 9 13 Viernes 7 18

Resulta que cada da de la semana hacemos una jornada laboral distinta, en el ejemplo de la tabla (que representa el horario laboral de una semana determinada), el lunes empezamos a trabajar a las 8h y terminamos a las 2h de la tarde, el martes empezamos a las 10h y media y terminamos a las 17h, etc. Vamos a hacer un programa para introducir y guardar los datos de dicha tabla. - Escribe en el Module1 del Macro08.ods el siguiente procedimiento:

- Crea un botn en la Hoja2 del Macro08.ods, asociado al procedimiento anterior y ejectalo:

OpenOffice Basic

Ferm Vil

BA-33

En este programa hemos trabajado con un array bidimensional o matriz de dos dimensiones: a( 1 To 2 , 1 To 5 ) Sus elementos: a(1,1), a(1,2), a(1,3), a(1,4), a(1,5) A(2,1), a(2,2), a(2,3), a(2,4), a(2,5) El procedimiento Prog36, hemos de reconocer que est muy bien para utilizar matrices bidimensionales y ciclos anidados, pero es completamente intil. Vamos a modificar el procedimiento anterior para que nos calcule el nmero total de horas trabajadas a la semana ... Escribe en el Module1 de Macro08.ods:

- Crea un botn en la Hoja2 del Macro08.ods, asociado al programa Prog37 y ejectalo Si todo funciona correctamente:

- Escribe en el Macro08, el procedimiento:

OpenOffice Basic

Ferm Vil

BA-34 -

Crea un botn en la Hoja2 del Macro08.ods, asociado al procedimiento Prog38 y ejectalo varias veces. - Observa de qu forma definimos un array dinmico: al principio del programa, no sabemos el nmero de elementos (Dim x() As Double); cuando ya sabemos el nmero de elementos: ReDim x(nmero) As Double

Programa que calcula, dada una serie de 5 nmeros, la media aritmtica, las desviaciones respecto a la media, la desviacin media, la varianza y la desviacin tpica.

Escribe en el Module1 del Macro08.ods el siguiente programa: Sub Prog39 Dim s As String, sum As Double, med As Double Dim num(1 To 5) As Double Dim desv(1 To 5) As Double Dim sum1 As Double, sum2 As Double, i As Integer Dim desmed As Double, vari As Double, dt As Double s="":sum=0:sum1=0:sum2=0 s=s & "Valores de la serie estadstica: " & Chr(10) For i=1 To 5 num(i)=CDbl(InputBox("Nmero?")) s=s & cStr(num(i)) & Chr(10) sum=sum+num(i) Next med=sum/5 s=s & Chr(10): s=s & "Media Aritmtica = " & cStr(med) s=s & Chr(10) & "Desviaciones" & Chr(10) For i=1 To 5 desv(i)=Abs(num(i)-med) sum1=sum1+desv(i) sum2=sum2+desv(i)*desv(i) s=s & cStr(desv(i)) & " - " Next desmed=sum1/5 vari=sum2/5 dt=Sqr(vari) s=s & Chr(10) s=s & "Desviacin Media = " & cStr(desmed) s=s & Chr(10) s=s & "Varianza = " & cStr(vari) & Chr(10)

OpenOffice Basic

Ferm Vil

BA-35

s=s & "Desviacin Tpica = " & cStr(dt) MsgBox s End Sub - Crea un botn en la Hoja2 del Macro08.ods, asociado al procedimiento anterior y ejecuta el programa para el caso:

9.- Procedimientos y FuncionesSe define como procedimiento y/o funcin a un bloque de cdigo que realiza alguna tarea. Hasta ahora, hemos construido los programas utilizando un nico procedimiento, pero a medida que los programas (y los problemas) crecen, se va haciendo necesaria la inclusin de ms procedimientos. Una funcin es lo mismo que un procedimiento con la salvedad, que la funcin devuelve un valor al procedimiento o funcin que lo llama. - Crea un nuevo libro de clculo, que debers grabar como Macro09.ods en TuCarpeta. Crea un Module1 y escribe:

- Crea un botn en la Hoja1 del Macro09.ods, asociado al procedimiento Prog40 y ejecuta el programa varias veces. Observa la sintaxis de una funcin: declaramos los parmetros (en nuestro caso v1 y v2) y declaramos tambin el tipo de dato que devuelve la funcin, Integer en nuestro caso.

OpenOffice Basic

Ferm Vil

BA-36

Observa de qu forma llamamos a una funcin: NombreFuncin (lista de parmetros), en nuestro ejemplo: Suma(n1,n2) - Vamos a trabajar con ms funciones ... Sitate en el Module1 del Macro09 y escribe:

Y

- Crea en Hoja1 de Macro09.ods dos botones de nombre: [Prog41] y [Prog42] asociados a los procedimientos 41 y 42 y ejectalos:

Vamos a por otra funcin ... - Escribe en el Module1 del Macro09:

- Crea en Hoja1 de Macro09.ods un botn de nombre [Prog43] asociado al procedimiento Prog43 y ejectalo. - Escribe en el Module1 del Macro09.ods:

OpenOffice Basic

Ferm Vil

BA-37

- Crea en la Hoja1 del Macro09, un botn de nombre [Prog44] asociado al procedimiento Prog44 y ejectalo.

10.- Nmeros Aleatorios- Crea un nuevo libro de clculo, que debers grabar como Macro10.ods en TuCarpeta. Crea un Module1 y escribe los siguientes procedimientos:

OpenOffice Basic

Ferm Vil

BA-38

- Crea en la Hoja1 de Macro10.ods dos botones de nombre: [Prog45] y [Prog46], asociados a los procedimientos 45 y 46 y ejectalos. - La funcin RND Cada vez que el ordenador procesa una lnea que contiene la sentencia Rnd, en la celda correspondiente aparece un nmero aleatorio, decimal entre 0 y 1. El nmero puede ser cero, pero nunca 1. El nmero de decimales es 14 (recuerda que en la hoja de clculo, por defecto aparecen slo 2) En realidad la serie de nmeros Rnd es pseudoaleatoria, para conseguir que la funcin Rnd genere verdaderos nmeros aleatorios, en el programa hemos de anteponer la sentencia Randomize, que es lo que consideraremos en el siguiente programa. Observa las siguientes relaciones: X=Rnd Y=6*Rnd Z=Int(6*Rnd) W=Int(6*Rnd)+1 En general: Int((y-x)*Rnd+x) Int((y+1-x)*Rnd+x) nmero entero aleatorio entre x e y (incluido x, excluido y) nmero entero aleatorio entre x e y (incluidos los dos) 0 X