ESTALMAT Andalucía Oriental Desarrollo del software OBJETOS ALGORITMOS PROGRAMA EVENTOS CÓDIGO EN GAMBAS FUNCIONANDO Introducción a la Programación Matemática. 1 L. Cabello & P. Villegas Lenguajes de programación Algoritmos y programas Algoritmo: Describe los pasos a seguir y el orden de ejecución Programa: Realiza una determinada actividad de forma organizada. Código: Son las miles de líneas que hay que escribir en un lenguaje de programación para que funcione el programa. 2 Lenguajes de programación ✔Crear programas para resolver problemas ✔Necesitamos un software = lenguaje de programación Lenguajes de programación Lenguaje que usan los programadores para comunicar instrucciones a un ordenador y poder ejecutar un programa. Se pueden dividir en dos categorías fundamentales: Lenguajes de bajo nivel Diseñados para ejecutarse en un ordenador determinado. Lenguajes de alto nivel Se puede utilizar en cualquier ordenador. No ofrecen necesariamente mayores capacidades de programación, pero sí mejora la interacción programador-máquina. Cuanto más alto es el nivel del lenguaje, más sencillo es comprenderlo y utilizarlo. 3 Lenguajes de alto nivel Hay 4 para todos los gustos – Estructurados (Gambas, C, Pascal, Basic, etc.) – Funcionales (CAML, Haskell) – Declarativos (Prolog) – Orientados a Objetos (Gambas, C++, C#, VB.NET, Smalltalk, Java) – Orientados a Aspectos – Manejado por eventos (Gambas, Visual Basic, C,..) – Híbridos (Lisp, Visual Basic) – Incomprensibles.... Cada enfoque tiene sus ventajas y desventajas Cada uno es más apropiado para ciertas cosas Gambas Almost Gambas Almost M eans Means Basic Gambas Casi Significa Basic BASIC El nombre de Gambas responde al acrónimo recursivo ( ). En realidad no podemos considerarlo un clon de BASIC, puesto que Gambas también está muy inspirado por el lenguaje de programación Java. 5 ...de verdad? Entorno de programación Gambas ¿QUÉ ES GAMBAS? Gambas no es solo un lenguaje de programación, es también un entorno de programación visual para desarrollar aplicaciones gráficas o de consola. Hace posible el desarrollo de aplicaciones complicadas muy rápidamente. El programador diseña las ventanas de forma gráfica, arrastra objetos desde la caja de herramientas y escribe el código en BASIC para cada objeto. Implementa tres formas de programar: Programación estructurada (o procedimental) Programación orientada a objetos Programación manejada por eventos ¿ES GAMBAS SOFTWARE LIBRE? Sí. Gambas se distribuye con la licencia GPL GNU (General Public Licence). Significa que se distribuye con el código fuente y respeta las cuatro libertades definidas por la Free Software Fundation. El IDE de Gambas ELEMENTOS DE GAMBAS Para poder desarrollar y ejecutar programas en Gambas, son necesarios los siguientes elementos: Un compilador, que se encargará de transformar el código fuente y archivos que formen parte de un proyecto hecho en Gambas, es un programa ejecutable. Un intérprete capaz de hacer que los programas hechos en Gambas sean ejecutados por el sistema operativo. Un entorno de desarrollo que facilite la programación y diseño de las interfaces gráficas de los programas. Componentes que añaden funcionalidad al lenguaje. La palabra componente en Gambas tiene un significado específico, ya que no alude a partes genéricas, sino a librerías específicas que le dotan de más posibilidades. En la actualidad existen componentes para usar xml, conexiones de red, opengl, ODBC, distintas bases de datos, escritorios basados en qt, en gtk, etc. El IDE de Gambas Aplicación de consola: Primer ejemplo 1. Aplicaciones>programación> Gambas2 y clic en nuevo proyecto: 2. Selecciona aplicación consola y pulsa siguiente 3. Elige directorio para guardar el proyecto y pulsa siguiente 4. Escribe el nombre, título y pulsa OK. Pulsa OK otra vez. Se ha creado el proyecto 5.Botón secundario sobre Mmain y clic en renombrar. Cámbiaselo y haz doble clic sobre él. 6.Escribe la línea que falta. Pulsa el Boton . Observa la consola. Aplicación gráfica: Ejemplo 1. Crea un nuevo proyecto 2. Tipo: Aplicación gráfica GTK+ 3. Nombre: SaludosEstalmat2 4. Renombra Fmain por FSaludosEstalmat2 5. Doble Clic en FsaludosEstalmat2 para abrir el formulario. 6. En la ventana propiedades cambiamos el color del fondo, ponemos un icono y cambiamos la propiedad Text yescribimos Fsaludos. 7. Agrega 4 controles: 1 textlabel y tres Button. Cambia las propiedades Name y Text: TextLabel1->Name:txtlAnuncio->Text:GASEOSA LA... Button1->Name:butOcultar->Text:Ocultar Anuncio Button2->Name:butSaludar->Text:Saludar Button3->Name:butSalir->Text:Salir Cambia las Propiedades de color de txtlAnuncio 8. Programemos los eventos de los botones. Haz doble clic en el Button Ocultar anuncio y escribe donde está el cursor: txtlAnuncio.Visible = FALSE 9. Vuelve al formulario y haz doble clic sobre el Button Saludar y escribe: Message.Info("Hola Estalmat") 10. Lo mismo sobre el button Salir: ME.Close Controles para formularios en Gambas GALERÍA DE CONTROLES Label: Label Es una etiqueta simple que contiene una línea de texto de poca longitud. Su función es mostrar un texto en una posición dentro de un formulario. TextLabel: TextLabel Similar al Label, pero puede mostrar texto formateado con HTML. Ejemplo: TextLabel1.Text=”<b>Texto con HTML</b><br>Dentro de una<i>etiqueta</i>.” TextBox: TextBox Es una caja de texto, de una sola línea, en la cual el usuario puede modificar, copiar, cortar o borrar texto. TextArea: TextArea Se trata de una caja de texto que es capaz de contener múltiples líneas. PictureBox: PictureBox Tiene la función de mostrar una imagen. Responde a eventos del ratón, por lo que puede ser empleado como botón personalizado. ListBox: ListBox Es una lista simple. Se añaden o eliminan elementos que se representan como una línea de texto cada uno. La propiedad Mode determina si el usuario no puede seleccionar ninguno, solo uno o varios. ListView: ListView Similar al ListBox. Puede representar un icono junto con cada elemento de la lista, y cada uno de ellos está identificado por una clave única de texto, que nos permite hacer búsquedas de los elementos por su clave. ComboBox: ComboBox Es una lista desplegable. El usuario solo ve el elemento seleccionado en cada momento y puede desplegar la lista para seleccionar uno u otro. Ventanas para mostrar información DIÁLOGOS (Mensajes) La clase Message se encarga de mostrar una ventana modal al usuario, en la cual podemos definir un texto, que será una información o una pregunta, y una serie de botones para elegir una opción. Message.Info: se utiliza para mostrar un mensaje meramente informativo. Solo permite definir un botón que normalmente tendrá un texto como OK o Aceptar. Ejemplo: Messaje.info (“esto es un mensaje”) Message.Delete: se utiliza para indicar que se va a proceder a eliminar algo (archivos, registros de una tabla, etc), y se solicita al usuario su confirmación. Message.Error: Se emplea para indicar un mensaje de error. Message.Question: es una pregunta al usuario, generalmente para confirmar una acción o una opción de configuración. Message.Warning: advierte al usuario de que la acción que va a realizar supone un cierto peligro, por ejemplo, pérdida de datos de una tabla que podrían ser útiles aún. Ventanas para mostrar información Los métodos de la clase Message devuelven un número entero que denota el botón que el usuario pulsó. En este sentido, podemos personalizar los mensajes, con la cantidad de botones que queramos y el mensaje que deseemos. Ejemplo: Dim Respuesta as Integer Respuesta=Message.Warning(“¿Desea cerrar el programa?”, “Si”, “No”, “De repente”) IF Respuesta=1 THEN Message.Info(“Gracias por usar el Programa”) Me.close ELSE Message.Info(“A ver si te decides...”) ENDIF Variables en Gambas VARIABLE es una porción de memoria del ordenador que se utiliza en Gambas para guardar un dato (información) y a la que se le asigna un identificador. Radio=4 DECLARACIÓN DE VARIABLES Para poder utilizar una variable hay que declararla(?). Sintaxis de declaración de una variable que se va a utilizar en un procedimiento (subrutina) o en una función: DIM nombre_variable AS tipo_variable tipo_variable: hace referencia al tipo de dato de la variable: número entero, cadena, decimal, boleano, etc. DIM Nombre AS String; DIM Radio AS float ÁMBITO DE LAS VARIABLES Las variables que se declaren en un subrutina o función solo se usarán dentro de ellas. Cuando terminen se destruirán. Esto permite utilizar el mismo nombre de variable dentro de distintas subrutinas y su valor nunca se confundirá o mezclará. Variables en Gambas Para declarar una variable al principio del Módulo o Clase se usa la sintaxis: [STATIC] (PUBLIC | PRIVATE) nombre_variable AS tipo_variable Si se define PRIVATE: estará disponible dentro de todo el fichero, pero no será accesible desde otros ficheros del mismo proyecto. Si se define PUBLIC: se podrá acceder a la variable desde un fichero del proyecto distinto a donde se declaró. Si se define STATIC: Se usa en los archivos de clase, no en los Módulos. Sirve para definir un comportamiento especial en todos los objetos de una misma clase. Datos en Gambas Los tipos de datos, que se pueden asignar a las variables, soportados por Gambas, son los siguientes: Boolean: Boolean solo acepta valores True o False. Byte: Byte representa un número entero positivo entre 0 y 255. Short: Short representa un número entero con valores posibles entre ­32.768 y +32.767 Integer: Integer representa un número entero con valores posibles entre ­ 2.147.483.648 y +2.147.483.647. Long: Long representa un número entero con valores posibles entre: ­9.223.372.036.854.775.808 y +9.223.372.036.854.775.807 Single: Single representa un número real, con decimales, con valores posibles entre ­ 1.7014118E+38 y +1,7014118E+38. Float: Float representa un número real, con decimales, con valores posibles entre ­8,98846567431105E+307 y + 8,98846567431105E+307. Date: Date almacena valores de fecha y hora. Internamente la fecha y la hora se almacenan en formato UTC. String: String se usa para almacenar una cadena de texto. Variant: Variant significa cualquier tipo de dato, es decir, se puede almacenar integer, single, boolean, etc. Object: Object representa cualquier objeto creado en Gambas. Conversión de datos en Gambas Cbool(expresión): convierte la expresión a un valor booleano. Dim Positivo As Boolean. Positivo= Cbool(5 < 0). En positivo está False Cshort(expresión), Cint(expresión) o Cinteger(expresión), y Clong(expresión): convierte respectivamente, la expresión en un número de tipo Short, Integer y Long. Cdate(expresión): convierte la expresión en una fecha. Debe tener cuidado porque solo admite formato de fecha en inglés mes/día/año hora:minutos:segundos. Ejemplo: Cdate(“09/06/1972) 01:45:12”), donde 06 será el día 06 y no el mes 06. CStr (expresión): convierte la expresión en una cadena de texto sin tener en cuenta la configuración local. Str$(expresión): convierte la expresión en una cadena de texto, teniendo en cuenta la configuración local. ejemplo. Str$(CDate(“09/06/1972 01:45:12”)) devuelve: “06/09/1972 01:45:12” Val(expresión): convierte una cadena de texto en un tipo Boolean, Date o alguno de los tipos numéricos, dependiendo del contenido de la expresión. Operadores Matemáticos en Gambas Además de los operadores matemáticos (+,-,*,/) ya conocidos en casi todos los lenguajes de programación, citamos los siguientes: ^ es el operador de potencia. Ejemplo: 4^3=64 Para la división hay dos operadores adicionales, DIV y MOD, MOD que devuelven respectivamente, la parte entera del resultado de la división y el resto. Ejemplo: Dim Numero As Integer. Numero = 9 DIV 2 , Numero = 9 MOD 4. ¿Qué hay en Numero después de la primera asignación? ¿Después de la segunda? Existen también funciones matemáticas para realizar cálculos más complejos: Abs(numero): calcula el valor absoluto de un número. Dec(numero): Dec(numero) decrementa un número. Frac(numero): Frac(numero) devuelve la parte decimal de un número. Inc(numero): Inc(numero) incrementa un número. Int(numero): Int(numero) devuelve la parte entera de un número. Max(numero1, numero2, ...): ...) devuelve el número mayor. Min(numero1, numero2, ...): ...) devuelve el número menor. Round(numero,decimales): Round(numero,decimales) redondea un número con los decimales deseados. Rnd([mínimo],[máximo]): Rnd([mínimo],[máximo]) devuelve un número aleatorio comprendido entre mínimo y máximo. Cadenas de texto en Gambas Existe un manejador de cadenas de texto que permite concatenarlas directamente, se trata del símbolo &. Ejemplo: Dim nombre AS String Dim Apellidos AS String Nombre=”Manuel” Apellidos=”Álvarez Gómez” PRINT Apellidos & “, “ & Nombre La salida en consola será: Álvarez Gómez, Manuel Control del flujo en Gambas If ... Then ... Else: Es la sentencia mas común para tomar una decisión: Sintaxis Básica: IF expresión THEN <líneas de sentencias> ENDIF IF expresión THEN <líneas de sentencias> ELSE <líneas de sentencias> ENDIF Si se ejecuta una sola instrucción: IF expresión THEN sentencia_a_ejecutar. Ejemplo: IF edad > 20 THEN PRINT “Adulto” Ejemplo: Ejemplo: Ejemplo DIM edad AS Integer edad=18 IF Edad > 20 THEN PRINT “Adulto” PRINT “Qué mayor” ENDIF IF Edad > 18 THEN PRINT “Adulto” PRINT “Qué mayor” ELSE PRINT “ Menor” ENDIF IF Edad < 2 AND edad > 0 THEN PRINT “Bebe” ELSE IF Edad < 12 THEN PRINT “Niño” ELSE IF edad < 18 THEN PRINT “Joven” ELSE PRINT “Adulto” ENDIF Teorema de Pitágoras 1. Abre un proyecto de consola, en nombre pones Hipotenusa y el formulario lo renombras como Mhipotenusa. Haces doble clic sobre el nombre y escribes: 2. Diseña un solución gráfica para el teorema de Pitágoras. La solución está en los apuntes que te entregamos. Control del flujo en Gambas Control SELECT CASE. Esta sentencia produce un código limpio y cómodo de leer. Su sintaxis en el recuadro de la izquierda y un ejemplo en la derecha: SELECT [CASE] Expresión [CASE expresión [TO expresión #2] [, ...] ... ] [CASE expresión [TO expresión #2] [, ...] ... ] [ {CASE ELSE | DEFAULT} ... } END SELECT Ejemplo: DIM edad AS Integer Edad=Rnd(0, 100) SELECT CASE edad CASE 0 TO 2 PRINT “Bebe” CASE 2 TO 12 PRINT “Niño” CASE 18 PRINT “Bingo, ya puedes votar” CASE 13 TO 17 PRINT “Joven” CASE ELSE PRINT “Adulto” END SELECT Bucles o iteraciones en Gambas Control FOR Generalmente usado cuando se necesita contar o realizar una acción un número determinado de veces. Sintaxis: FOR variable = Expresión TO Expresión [ STEP expresión ] <líneas de sentencias> NEXT Ejemplo: DIM n AS Integer FOR n = 10 TO 1 STEP ­1 PRINT n NEXT Estructuras de repetición en Gambas Control WHILE y REPEAT Cuando se requiere repetir la ejecución de una porción del código en varias ocasiones dependiendo de una condición, tenemos dos instrucciones distintas: La sintaxis de ambas es: WHILE Condición ... instrucciones WEND REPEAT ... instrucciones UNTIL Condición Ejemplos DIM Queda as Integer Queda=36 WHILE (Queda Mod 2 = 0) Queda=Queda / 2 PRINT Queda WEND ----DIM Queda as Integer Queda=36 REPEAT Queda=Queda / 2 PRINT Queda UNTIL (Queda Mod 2 = 0) Ejercicios prácticos 2. Diseña una solución en Gambas que averigüe cuántos números enteros positivos menores que un cierto número p entero positivo dado de antemano, tienen como únicos factores primos al 2, 3 ó 5. (Por ejemplo: 2, 3, 5, 6, 8, 10, 12, 15, 30, 60, ...) Ejercicios prácticos 1. Crea una calculadora básica con cinco operaciones, con el formulario de la imagen y que funcione de la siguiente manera: Introduces un valor en el textBox elegimos la operación (+,*,-,/), introduces el segundo valor y le das al button “=”. En caso de elegir el factorial después del primer valor se elige la operación factorial y a continuación se pulsa el buton “=” GAMBAS http://gambasdoc.org http://gambasrad.org http://en.wikibooks.org/wiki/Gambas http://gambas.sourceforge.net http://www.gambas-es.org/ 27