Descargar

Introducción a la programación en Open office.org Basic (página 3)

Enviado por Fermí Vilà


Partes: 1, 2, 3, 4, 5
edu.red

– Sitúate en la hoja de cálculo (Hoja1). Crea un botón asociado al procedimiento Prog14 y pruébalo: – 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 línea demasiado larga, podemos redistribuirla en varias líneas, sin más que escribir el símbolo de subrayado al final de la línea (o cada línea), precedido de un espacio. Es decir: las líneas de programa: s = s + “Valor de x después de pasar por el contador x=x+3” + Chr(9) + _ cStr(x)) + Chr(10) • •

• • • • •

• son en realidad una sóla línea. Declaramos una cadena: Dim s As String y la inicializamos a nada: s=””. No sería necesario ya que al declararla, automáticamente se inicializa a “nada”. x=x+3 es un contador, instrumento muy utilizado en “programación”, que nos permite añadir 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 función Chr(9) es equivalente a pulsar la tecla de tabulación: [Tab] La función 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 disminuténdolo en 2 unidades y en el segundo lugar multiplicándolo por 3. El operador “suma” entre “Strings” se comporta como el operador de concatenación “&”. 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 práctica, acumulamos en “s” muchos datos, que al incluir el Chr(9) y el Chr(10) se organizan en diferentes líneas (Chr(10)) y columnas (Chr(91)). Observa la técnica que utilizamos en este procedimiento: “Acumulamos en s una serie de datos, durante la ejecución de todo programa y que mostramos al final: MsgBox s” – Escribe en el Editor de Basic del Macro05.ods, el siguiente procedimiento:

edu.red

– Sitúate en la hoja de cálculo (Hoja1). Crea un botón asociado al procedimiento Prog15 y ejecútalo 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 carácter. • Or Significa, evidentemento “o”

– Escribe el siguiente procedimiento: – Crea un botón asociado al programa Prog16 y ejecuta el programa unas cuantas veces, buscando detenidamente lo que sucede: observa qué técnica más sencilla tenemos, para interrumpir un programa o volver a empezar. Acabamos de ver un programa con el operador lógico “Or”, vamos a ver ahora uno con el operador lógico “And”: utilizaremos este operador cuando sea preciso que para ejecutar un bloque de instrucciones se cumpla más de una condición. Observa que deberán cumplirse todas las condiciones …

– Escribe en el Macro05.ods el siguiente procedimiento: – Crea un botón asociado al programa Prog17 y ejecuta el programa unas cuantas veces. Considera el caso: “Patatas” y “Total >50”:

edu.red

– 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, podríamos pensar que es mejor no declarar las variables. Pero hay un problema: el tipo Variant es el que consume más memoria. La conclusión, 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 línea. Viene a ser el operador contrario al “carácter de subrayado, precedido de un espacio en blanco”, que nos permitía separar en varias líneas, una única sentencia.

7.- Otras estructuras de programación

Crea un nuevo libro de cálculo y grábalo con el nombre Macro06.ods en TuCarpeta

Accede al Editor de Basic (deberás crear el Module1 en Macro06.ods) y escribe el siguiente procedimiento: – Crea un botón (en Hoja1), asociado al procedimiento Prog18 y ejecuta el programa unas cuantas veces.

edu.red

– La estructura de programación “Select Case” Select Case variable Case a Sentencia1 Sentencia2 … Case b Sentencia3 Sentencia4 … Case Else Sentencia5 Sentencia6 … End Select Viene a ser una generalización de la estructura If – Then: según el valor de la “variable”, se ejecutarán unas sentencias u otras. Veamos a continuación una generalización 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 número total de preguntas") bien=Val(InputBox("Escribe el número 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 & "Número de preguntas =" & num & Chr(10) s=s & "Número 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("Número de preguntas " & cStr(num)) Cel3.SetFormula("Número de correctas " & cStr(bien)) Cel4.SetFormula("Nota Cuantitativa " & cStr(notanum))

edu.red

Cel5.SetFormula("Nota Cualitativa " & notacual) End Sub

– Crea en Hoja1 un botón asociado al procedimiento anterior y ejecútalo varias veces, para comprobar su funcionamiento. Veamos a continuación otra estructura de programación, en esta ocasión de tipo repetitivo.

– Escribe en el “Editor de Basic” del Macro06.ods el siguiente procedimiento: – Crea en Hoja1 un botón asociado al procedimiento Prog20 y ejecútalo varias veces, para comprobar su funcionamiento.

– Estudio del Prog20 • La estructura “For – To – Next”

For indice = número1 To número2 Sentencia 1 Sentencia 2 Sentencia 3 … Next

edu.red

El bloque de sentencias 1, 2, 3, … se repiten desde el número1 hasta el número2 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” más el nuevo número “Valor”.

– Escribe en el “Editor de Basic” de Macro06.ods el procedimiento: – Crea un botón asociado al procedimiento Prog21y ejecuta el programa. Si todo funciona correctamente, se rellenará el rango H11:H15 de los números 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 botón 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:

edu.red

– Crea un botón 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 botón, en la Hoja2 de Macro06.ods, asociado al procedimiento Prog24 y ejecútalo varias veces.

– La estructura de programación Do While – Loop

Do While condición Sentencia1 Sentencia2 … Loop Mientras se cumpla la “condición”, se repetirá la ejecución de las sentencias 1, 2, etc.

– Escribe en el “Editor de Basic” del Macro06.ods el siguiente procedimiento: – Crea un botón, en la Hoja2, asociado al procedimiento Prog25 y ejecútalo.

– En el Prog16 vimos una forma de volver a empezar, pero sólo una vez, en cambio en el Prog25 gracias a la estructura “Do While – Loop”, disponemos de una tècnica para repetir la ejecución 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 algún valor en el “InputBox” correspondiente al campo “nombre”, de forma que si al preguntar el “nombre”, no escribimos nada, se terminará la ejecución del bloque correspondiente al Do While – Loop

edu.red

– Escribe: – Crea un botón asociado al procedimiento Prog26 y ejecútalo varias veces. Debes tener en cuenta que las celdas de la hoja de cálculo correspondientes a una fecha, deberás formatearlas así: como fechas.

Al introducir una fecha utilizando el InputBox, por defecto, deberás utilizar la notación inglesa: primero el mes y después el día. – Graba el libro de cálculo Macro06.ods con el mismo nombre. Crea un nuevo libro de cálculo, que deberás grabar como Macro07.ods en TuCarpeta y crea un “Module1”

Programa que suma todos los números que queramos

– Escribe en el Editor de Basic de Macro07 el siguiente procedimiento:

edu.red

– Crea un botón, en la Hoja1 de Macro07, asociado al procedimiento anterior y ejecútalo unas quantas veces.

edu.red

Programa que nos resuelve una equación 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 ecuación de 2º grado") Else b=CDbl(InputBox("Coeficiente de x= ")) Hoj.GetCellByPosition(4,1).SetFormula("Coeficiente de x = " & cStr(b)) c=CDbl(InputBox("Término independiente = ")) Hoj.GetCellByPosition(4,2).SetFormula("Término Independiente = " & cStr(c)) dis=b^2-4*a*c If dis=0 then x=(-b)/(2*a) Hoj.GetCellByPosition(4,4).SetFormula("La ecuación tiene una solución = " & cStr(x)) End If If dis<0 then Hoj.GetCellByPosition(4,4).SetFormula("Las soluciones son imaginarias") End If If dis>0 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 botón, en la Hoja1 de Macro07, asociado al procedimiento anterior y ejecútalo para los casos: • a=0 • a=1 ; b=1 ; c=1 • a=1; b=-4; c=4 • a=1; b=1; c=-6 • Pruébalo también para valores decimales. – Nota que la función Sqr(), es una función incorporada al Basic del OpenOffice, que nos permite calcular la raíz cuadrada de un número..

edu.red

Suma y Producto de los múltiplos de 2 inferiores a 30

– Escribe en el “Editor del Basic” del Macro07 el siguiente procedimiento: – Crea un botón, en la Hoja1 de Macro07, asociado al procedimiento anterior y ejecútalo para probarlo

Cálculo del factorial de un número

– Escribe en el “Editor del Basic” de Macro07.ods el siguiente procedimiento: – Crea un botón, en la Hoja2 de Macro07 asociado al Prog30 y pruébalo varias veces.

– Recuerda que el factorial de un número “x” es x! = x(x-1)(x-2)(x-3)…3.2.1

edu.red

Programa que calcula los 10 primeros múltiplos del número que queramos, por último nos da la suma y el producto de todos ellos.

– Escribe: – Crea un botón en la Hoja2 de Macro07 asociado al Prog31 y puébalo varias veces

edu.red

Tabla de valores de la función y = x2 – 5x + 10

– Escribe en el “Editor del Basic” del Macro07.ods, el siguiente procedimiento: – Crea un botón, en la Hoja2 de Macro07, asociado al Prog32 y ejecútalo.

edu.red

Cálculo de la hipotenusa de un triángulo rectángulo. El programa tiene la opción de volver a empezar.

– Escribe en el “Editor del Basic” del Macro07.ods, el programa: – Crea un botón, en la Hoja2 de Macro07 asociado al Prog33 y calcula unas cuantas “hipotenusas”… – Observa: UCase(cadena): es una función incorporada al “OpenOffice Basic”, que transforma todas las letras de “cadena” a mayúsculas.

Es decir, que escribir: UCase(opc) = “S” es equivalente a escribir: opc = “S” Or opc = “s”, pero más corto.

edu.red

Programa que calcula el número “e”

– Escribe en el “Editor del Basic” del Macro07, el siguiente programa: – Crea un botón, en la Hoja2 de Macro07 asociado a Prog34 y ejecútalo … – Observa: Exp(número) es una función incorporada al “OpenOffice Basic”, que nos da como resultado “e” elevado al “número”. Por lo tanto: Exp(1) = e

edu.red

Ejercicios

4) Crea un nuevo libro de cálculo de nombre EjerM04.ods que contenga un procedimiento de nombre EjerM04, que haga lo siguiente: – – – – El procedimiento nos pide que escribamos dos números positivos menores de 57 El programa nos da como resultado el producto de los dos números Si los números 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 cálculo de nombre EjerM05.ods que contenga un procedimiento de nombre EjerM05 que haga lo siguiente: El programa nos va pidiendo números, hasta que escribimos el número 9999, por último el programa nos da como resultado el número de números introducidos, exceptuando el 9999

6) Crea un nuevo libro de cálculo de nombre EjerM06.ods que contenga un procedimiento de nombre EjerM06 que haga lo siguiente: El programa escribe todos los múltiplos de 23 inferiores a 1000 y por último nos da la suma de todos ellos.

7) Crea un nuevo libro de cálculo de nombre EjerM07.ods, que contenga un procedimiento de nombre EjerM07 que haga lo siguiente: – – – El programa hace una tabla de valores de la función y = sen(7x-5) El programa nos pide los dos valores de “x” (valores máximo y mínimo de la tabla de valores El programa nos pide el incremento (variación) de la “x”. 8) Crea un nuevo libro de cálculo de nombre EjerM08.ods que contenga un procedimiento de nombre EjerM08, que sirva para calcular un cateto de un triángulo rectángulo 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 cálculo 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 cálculo 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” debería ser de la forma: 11) Haz un nuevo libro de cálculo de nombre EjerM11.ods, que contenga un procedimiento de nombre EjerM11 que escriba los 15 primeros múltiplos de 7, su suma y su producto. El programa ha de tener la posibilidad de volver a empezar.

edu.red

12) Crea un nuevo libro de cálculo de nombre EjerM12.ods, que contenga un procedimiento de nombre EjerM12, que sirva para calcular el área de un triángulo o el área de un rectángulo o el área de un círculo. El programa ha de tener la posibilidad de volver a empezar.

13) Crea un nuevo libro de cálculo 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 además nos dé el módulo de los dos vectores y también el módulo 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) Módulo de v = a2 + b2 + c2 La “salida” debería ser de la forma: 14) Crea un nuevo libro de cálculo de nombre EjerM14.ods, que contenga un procedimiento de nombre EjerM14, y que funcione de la siguiente forma: El programa nos pide un número y da como resultado la tabla de multiplicar del número introducido.

15) Crea un nuevo libro de cálculo de nombre EjerM15.ods, que contenga un procedimiento de nombre EjerM15, y que funcione de la siguiente forma: El programa calcula el número “e” mediante el desarrollo en serie: e = 1 + 1/1! + 1/(2!) + 1/(3!) + 1/(4!) + … + 1/(50!)

edu.red

8.- Arrays

– Crea un nuevo libro de cálculo, que has de grabar con el nombre Macro08.ods en TuCarpeta. Crea un Module1 y sitúate en su interior para escribir: – Crea un botón en la Hoja1 del Macro08.ods, asociado al procedimiento anterior y ejecútalo, 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 dimensión. Y no es más que una variable que consta de tres números Double, en realidad tres variables double. Para acceder a los elementos de nuestro “array” hemos de utilizar la notación: 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 más complicado …

Observa la siguiente tabla:

Resulta que cada día 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 botón en la Hoja2 del Macro08.ods, asociado al procedimiento anterior y ejecútalo:

edu.red

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 inútil.

Vamos a modificar el procedimiento anterior para que nos calcule el “número total de horas trabajadas a la semana” …

Escribe en el Module1 de Macro08.ods: – Crea un botón en la Hoja2 del Macro08.ods, asociado al programa Prog37 y ejecútalo

Si todo funciona correctamente: – Escribe en el Macro08, el procedimiento:

edu.red

– Crea un botón en la Hoja2 del Macro08.ods, asociado al procedimiento Prog38 y ejecútalo varias veces.

– Observa de qué forma definimos un array dinámico: al principio del programa, no sabemos el número de elementos (Dim x() As Double); cuando ya sabemos el número de elementos: ReDim x(número) As Double

Programa que calcula, dada una serie de 5 números, la media aritmética, las desviaciones respecto a la media, la desviación media, la varianza y la desviación típica. – 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 estadística: " & Chr(10) For i=1 To 5 num(i)=CDbl(InputBox("¿Número?")) s=s & cStr(num(i)) & Chr(10) sum=sum+num(i) Next med=sum/5 s=s & Chr(10): s=s & "Media Aritmética = " & 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 & "Desviación Media = " & cStr(desmed) s=s & Chr(10) s=s & "Varianza = " & cStr(vari) & Chr(10)

Partes: 1, 2, 3, 4, 5
 Página anterior Volver al principio del trabajoPágina siguiente