-->

Menú principal

miércoles, 11 de abril de 2018

TIC 2º Bachillerato - Tema 4.- Elementos de Programación

Desarrollo de una aplicación en Gambas para convertir temperaturas

En esta aplicación vamos a convertir temperaturas de grados celsius a grados fahrenheit y viceversa. Lo primero es entrar en gambas y crear un proyecto nuevo llamado "Temperaturas".
A continuación procedemos a crear el formulario poniendo la etiqueta principal con el título de la aplicación "Conversión de grados celsius a fahrenheit y viceversa". Añadimos los campos valueBox donde vamos a introducir los grados celsius y fahrenheit, con sus respectivas etiquetas. Y finalmente añadimos un botón "Convertir" para realizar la conversión en ambas direcciones. Si introducimos los grados en celsius convierte a fahrenheit y si introducimos los grados fahrenheit los convierte a celsius.

Añadimos también un botón para borrar los datos introducidos y calculados y hacer una nueva conversión. Ahora hacemos doble clic en el botón "Convertir" e introducimos las siguientes instrucciones:

Public Sub Button_Convertir_Click()
  Dim celsius As Integer
  Dim far As Integer
  If ValueBox_Celsius.Text <> 0 Then
    celsius = ValueBox_Celsius.Text
    far = celsius * 9 / 5 + 32
    ValueBox_Fah.Text = far
  Endif
  If ValueBox_Fah.Text <> 0 Then
    far = ValueBox_Fah.Text
    celsius = (far - 32) * 5 / 9
    ValueBox_Celsius.Text = celsius
  Endif
 
End

En el botón "Borrar" blanqueamos los números introducidos o calculados en los valueBox. Este sería el código a introducir en el evento clic del botón.

Public Sub Button_Borrar_Click()
  ValueBox_Celsius.Text = ""
  ValueBox_Fah.Text = ""
End


Por último cuando hacemos clic en el botón "Salir" ejecutamos el comando Quit:

Public Sub Button_Salir_Click()
  Quit
End



Desarrollo de una aplicación en Gambas para calcular una ecuación de segundo grado

La ecuación de 2º grado es de la forma: a*X² + b*X + c = 0

Tenemos que crear un formulario con tres campos ValueBox donde el usuario va a introducir los valores de los coeficientes a,b y c. El formulario puede tener este aspecto:

Una vez creados los tres ValueBox para los coeficientes a, b y c tenemos que crear un botón para calcular el resultado o las soluciones de la ecuación. Como la ecuación va a tener dos soluciones tenemos que crear otros dos campos ValueBox donde vamos a poner los valores de cada una de las soluciones.


Ahora a los campos donde vamos a introducir los coeficientes les llamanos ValueBox_a, ValueBox_b y ValueBox_c. A los campos que van a mostrar las soluciones de la ecuación les llamamos ValueBox_x1 y ValueBox_x2. Al botón le llamamos Button_calcular, que tendrá el siguiente código:

Public Sub Button_Calcular_Click()

  Dim a As Integer
  Dim b As Integer
  Dim c As Integer
  Dim x1 As Float
  Dim x2 As Float
  Dim x3 As Float
  Dim x As Float
  Dim respuesta As Integer
   
  a = ValueBox_a.Text
  b = ValueBox_b.Text
  c = ValueBox_c.Text
  If (b ^ 2 - 4 * a * c) < 0 Then
    x1 = (b ^ 2 - 4 * a * c)
    Message.Title = "Los coeficientes introducidos dan una raiz negativa"
    Message.Title = "Atención: raiz negativa" & x1
    respuesta = Message.Warning("Los coeficientes introducidos dan una raiz negativa", "Introducir nuevos coeficientes")
    ValueBox_a.SetFocus
  Else
    x1 = Sqr(b ^ 2 - 4 * a * c)
    x2 = (- b + x1) / 2 * a
    x3 = (- b - x1) / 2 *a
    ValueBox_x1.Value = x2
    ValueBox_x2.Value = x3
  Endif
 
End


En el código del botón calcular hemos declarado las siguientes variables

a --> valor del coeficiente a
b --> valor del coeficiente b
c --> valor del coeficiente c

Estos coeficientes van a ser valores enteros por eso los hemos declarado como Integer. Ademas hemos declarado las variables x1,x2,x3 como variables en coma flotante o float, para realizar los cálculos. Y la variable respuesta que devuelve el valor del botón seleccionado cuando aparece el mensaje de error.

Lo primero que tenemos que hacer es comprobar si los coeficientes introducidos dan un valor negativo, lo cual produciría una raiz negativa y no podríamos realizar el cálculo de las dos soluciones de la ecuación.

Si el valor de raiz(b² - 4ac) es negativo presentamos un mensaje solicitando nuevos coeficientes, en caso contrario seguimos con el cálculo y obtenemos las dos soluciones de la ecuación, colocando sus valores en los valuebox correspondientes.

En este ejercicio hemos aprendido a usar el procedimiento de comparación con la sentencia If Then Else.
Hemos aprendido a mostrar mensajes al usuario a través de pantalla. También hemos usado la función raiz y cuadrado, y las operaciones de multiplicación, suma y resta.

A continuación vamos a representar la gráfica de la ecuación en un objeto llamado "DrawingArea" situado en la pestaña "Container" de la barra de objetos insertables en el formulario.


Una vez creado el objeto DrawingArea en nuestro formulario, lo ajustamos al tamaño máximo posible del formulario.
En la zona de declaración de variables al principio de Fmain.Class tenemos que declarar las siguientes variables:

Public hPicture As Picture
Public a As Integer
Public b As Integer
Public c As Integer
Public ancho As Integer
Public alto As Integer

Todas estas variable son públicas para poder recuperar sus valores en cualquier objeto del programa. La variable hPicture declara un objeto Picture. Las variables a,b y c son los coeficientes de la ecuación y las variables ancho y alto definen las medidas del área de dibujo.

Dentro del evento Draw del objeto DrawingArea debemos colocar el siguiente código:

Public Sub DrawingArea_Draw()
  Paint.Begin(DrawingArea)
    If hPicture Then Paint.DrawPicture(hPicture, 0, 0)
  Paint.End
End


En el evento Open del formulario que se ejecuta al iniciar la aplicación debemos poner el código:

Public Sub Form_Open()
  'Paint.Begin(DrawingArea)
  DrawingArea.cached = False
  hPicture = New Picture(DrawingArea.Width, DrawingArea.Height, True)
  hPicture.Fill(&HC3DDFF)
  DibujaEjes()
End

Hay que crear una subrutina llamada "DibujaEjes" para dibujar los ejes horizontal y vertical y los indicadores de escala o numeración. Esta subrutina debe tener el siguientes código:

Public Sub DibujaEjes()
  Dim x As Integer             'Aquí declaramos las variables x e y
  Dim y As Integer
  Paint.Begin(hPicture)      'Iniciamos el objeto picture con la clase Begin
      ancho = DrawingArea.Width     'Ponemos el ancho del área de dibujo en la variable ancho
      alto = DrawingArea.Height        'Ponemos el alto del área de dibujo en la variable alto
  
      Paint.Rectangle(0, 0, ancho, alto)     'Dibujamos un rectángulo en el perímetro del área de dibujo
      Paint.LineWidth = 1                          'Definimos el ancho de linea al valor 1
      ' Dibujamos los ejes horizontal y vertical
      Paint.MoveTo(ancho / 2, 0)
      Paint.LineTo(ancho / 2, alto)
      Paint.MoveTo(0, alto / 2)
      Paint.LineTo(ancho, alto / 2)
      Paint.Translate(ancho / 2, alto / 2)       ' traslada el origen de coordenadas 
      Paint.Scale(1, -1)
      For x = -400 To 400 Step 10
        Paint.MoveTo(x, -3)
        Paint.LineTo(x, 3)
      Next
      For y = -200 To 200 Step 10
        Paint.MoveTo(-3, y)
        Paint.LineTo(3, y)
      Next
      Paint.Stroke()
      
  Paint.End 
  
End


Y ahora tenemos que crear otra subrutina para dibujar los puntos a la que llamamos "DibujaPuntos":

Public Sub DibujaPuntos()
  Dim x As Float
  Dim y As Float
  DrawingArea.Clear
  DrawingArea.Refresh
  DrawingArea.Cached = True
  Paint.Begin(hPicture)
    Paint.Translate(ancho / 2, alto / 2)       ' traslada el origen de coordenadas 
    Paint.Scale(1, -1)                             ' Cambia la dirección del eje Y
    Paint.Brush = Paint.Color(Color.Red)       ' Pone en rojo el color de la brocha
    Paint.LineWidth = 3                        ' Define el ancho de línea
    For x = -20 To 20
      y = a * x ^ 2 + b * x + c
      Print x, y
      Paint.Arc(x, y, 1)       ' Dibuja un círculo cuyo centro está en las coordenadas x,y
      Paint.Stroke(True)       ' Pla propiedad trazar a true
      Paint.Brush = Paint.Color(Color.Yellow)    ' Cambia color de la brocha a amarillo
      Paint.Fill()
    Next
    'Draw.Point(10, 20)
    DrawingArea.Cached = False
    
  Paint.End 
End

Esta subrutina es invocada desde el botón dibujar

Public Sub Button_Dibujar_Click()
 DibujaPuntos()
End

El resultado debe ser el siguiente, donde podemos ver el área de dibujo en color azul claro como fondo, los ejes el color negro y los puntos de la gráfica en color amarillo:



Podemos cambiar el color de los puntos a otro color simplemente cambiando la línea de código:
Paint.Brush = Paint.Color(Color.Yellow)    ' Cambia color de la brocha a amarillo
por esta otra para obtener el color rojo:
Paint.Brush = Paint.Color(Color.red)    ' Cambia color de la brocha a rijo