Resolver triángulos en Visual Basic. Parte 3/3



Documentos relacionados
Resolver triángulos en Visual Basic. Parte 2/3

Ejemplos de conversión de reales a enteros

Programa completo de resolución de ecuaciones de 2º grado

Visual Basic 1. Empleo de módulos y Procedimientos. Procedimientos definidos por el usuario

Formulario VBA en Excel. Creación del formulario. Actividad grado 10.

PROCEDIMIENTOS Y FUNCIONES DE LA PROGRAMACIÓN (VISUAL BASIC)

Gráficos de funciones en Visual Basic

MANUAL DE USO PROGRAMA DE GESTIÓN AGENCIAS DE VIAJES

SIMPLE Cuentas Corrientes

Programa diseñado y creado por Art-Tronic Promotora Audiovisual, S.L.

AGREGAR UN EQUIPO A UNA RED Y COMPARTIR ARCHIVOS CON WINDOWS 7

Tipos de variables en Visual Basic (integer, single, double, string, object, etc.). Ejemplos. (CU00308A)

Tecnologías de la Información. Apuntes de programación en Visual Basic 6.0

Tutorial Básico de vbscript

La ventana de Microsoft Excel

Actualización en módulo NÓMINA

Herramientas CONTENIDOS. MiAulario

MANUAL APLICACIÓN. SOFTWARE GESTIÓN DE CLÍNICAS DENTALES

LABORATORIO Nº 1 Sistemas de Información asociados a los Formularios en Excel

CAPÍTULO 2 INTERFASE VISUAL BASIC 6.0

Asignar permisos a usuarios de Active Directory en una carpeta compartida.

Prerrequisitos El alumno debe conocer y dominar los aspectos básicos de programación.

Plataforma e-ducativa Aragonesa. Manual de Administración. Bitácora

CÓMO CREAR NUESTRO CATÁLOGO

6.1. Conoce la papelera

VISUAL BASIC Diseño de Formularios MDI y Menús - Proyectos Aplica

Ecuaciones de primer grado con dos incógnitas

Uso de Visual C++ Pre-Practica No. 3

CONCEPTOS BASICOS. Febrero 2003 Página - 1/10

Manual para el uso del Correo Electrónico Institucional Via Webmail

[MANUAL DE CAPACITACION SPARH NET]

Cómo acceder a bases de datos?

Introducción a Moodle

... Formas alternativas de escribir un texto. Columnas. anfora CAPÍTULO 4

DISEÑADOR DE ESCALERAS

Tema 2. Espacios Vectoriales Introducción

HIPERVÍNCULOS. Es posible asignar un vínculo a un texto, a una imagen, o a parte de una imagen

Comencemos a programar con. Entrega 09

Caso práctico: Proyecto Usuario y contraseña

En términos generales, un foro es un espacio de debate donde pueden expresarse ideas o comentarios sobre uno o varios temas.

Nota 2. Luis Sierra. Marzo del 2010

Ejercicios de Trigonometría

Actividades con GeoGebra

Cuentas Contables. Para Generar y/o modificar las cuentas contables hay que ir a: Parámetros Plan de Cuentas Cuentas Contables

Guía para el tratamiento en Allegro de recibos para centros no pertenecientes a la Generalitat Valenciana.

Comencemos a programar con. Entrega 10. Estructuras de Control II

UTILIZACIÓN DE UNA CUENTA DE CORREO ELECTRÓNICO (NUEVO) Acceso al correo electrónico

COMO CREAR UNA PÁGINA WEB 2-INTRODUCCIÓN A DREAWEAVER

En la siguiente imagen se muestra la pantalla principal del portafolio de un usuario que será utilizado para explicar cada aspecto del mismo.

Manual de usuario para Facturación Electrónica 2011

PROGRAMA PARA LA RECEPCIÓN VALIDACIÓN Y RESGUARDO DE DOCUMENTOS FISCALES VERSIÓN 1.00 MANUAL DE OPERACIÓN

Manual de usuario de Parda Programa de Almacenamiento y Recuperación de Datos Automático

Guia de realización de un GIG personal en nuestra página web (

UNIVERSIDAD DE MEDELLÍN NUEVO PORTAL WEB MANUAL DE USUARIO GESTOR DE CONTENIDOS

/05/2009

1.4.- D E S I G U A L D A D E S

Sitios remotos. Configurar un Sitio Remoto

CAPÍTULO VI PREPARACIÓN DEL MODELO EN ALGOR. En este capítulo, se hablará acerca de los pasos a seguir para poder realizar el análisis de

GUIA COMPLEMENTARIA PARA EL USUARIO DE AUTOAUDIT. Versión N 02 Fecha: 2011-Febrero Apartado: Archivos Anexos ARCHIVOS ANEXOS

Gestión de Subtotales en Documentos de Venta WhitePaper Febrero de 2007

Sistema Integrado de Control de Presencia Dactilar

Uso del Programa Gantt Project

UNIDAD 1. LOS NÚMEROS ENTEROS.

Adaptación al NPGC. Introducción. NPGC.doc. Qué cambios hay en el NPGC? Telf.: Fax.:

2_trabajar con calc I

Enviar Felicitación Navideña por con Off. 2007

CONFEDERACIÓN DE EMPRESARIOS DE MÁLAGA

Ejemplo de programa básico en Visual Basic. Option Explicit, Form, Dim, String, etc. (CU00310A)

MANEJANDO FICHEROS Y CARPETAS

Selección de los puntos de montaje

APUNTES DE WINDOWS. Windows y sus Elementos INSTITUTO DE CAPACITACIÓN PROFESIONAL. Elementos de Windows

UAM MANUAL DE EMPRESA. Universidad Autónoma de Madrid

Instituto Nacional de Formación Docente. Tutorial 5 Líneas de Tiempo con Timerime

BASES DE DATOS EN VISUAL BASIC ACCESS + SQL

PLATAFORMA EDUCATIVA UDECNET

V Manual de Portafirmas V.2.3.1

Apuntes de ACCESS. Apuntes de Access. Campos de Búsqueda:

Creación de Funciones de Conducción

Plataforma Educativa Web Tec

Módulo I - Word. Iniciar Word Finalizar Word Definición de elementos de pantalla Escribir texto en un documento El cursor...

GUIA APLICACIÓN DE SOLICITUDES POR INTERNET. Gestión de Cursos, Certificados de Aptitud Profesional y Tarjetas de Cualificación de Conductores ÍNDICE

MANUAL DE USUARIO CMS- PLONE

Operación Microsoft Access 97

Primeros Pasos INTRODUCCIÓN A APLICACIONES WINDOWS. Introducción

PESTAÑA DATOS - TABLAS EN EXCEL

2. Doctores 2.1. Dar de alta un doctor 2.2. Buscar un doctor 2.3. Editar un doctor 2.4. Borrar un doctor

MANUAL PARA LA ACTUALIZACIÓN Y CREACIÓN DE DEPENDENCIAS EN EL SISTEMA CREG ENTREGA-RECEPCIÓN

Programa de resolución de ecuaciones de primero y segundo grado

Concesionario de coches

Cómo acceder a Google Drive? Tiene más funcionalidades una cuenta de Google?

Guía de uso del Cloud Datacenter de acens

Profr. Efraín Soto Apolinar. La función lineal. y = a 0 + a 1 x. y = m x + b

MANUAL DE MOVIE MAKER

342 SOBRE FORMAS TERNARIAS DE SEGUNDO GRADO.

CAPÍTULO IV BREVE DESCRIPCIÓN DE LA INFRAESTRUCTURA DE CÓMPUTO VISUAL BASIC 6.0 PARA WINDOWS

MANUAL DE USUARIO DE LA APLICACIÓN DE ACREDITACION DE ACTIVIDADES DE FORMACION CONTINUADA. Perfil Entidad Proveedora

MINI MANUAL PARA CREAR FORMULARIOS CON PHP Marzo 2007

Transcripción:

Artículo Revista digital Matemática, Educación e Internet (www.cidse.itcr.ac.cr/revistamate/). Vol. 3, N o 1. Agosto Diciembre 2002. Resolver triángulos en Visual Basic. Parte 3/3 Introducción Luis Acuña P. lacuna@itcr.ac.cr Escuela de Matemática Instituto Tecnológico de Costa Rica En las dos columnas anteriores desarrollamos un conjunto de funciones y subrutinas para resolver triángulos usando las leyes de senos y cosenos, así como un formulario para graficar la solución a escala. En esta columna terminaremos el proyecto desarrollando el formulario principal que recibirá los datos del usuario, llamará las funciones apropiadas para resolver el problema y mostrará la solución en forma gráfica. Pero primero hay una mejora a lo que ya hicimos: En el formulario frmtriángulo el cuadro pictriángulo debería tener verdadera la propiedad AutoRedraw. Esto hará que el gráfico se redibuje automáticamente luego de que el formulario hubiere sido cubierto por otra ventana de Windows. Página 1 de 14

1.1 Diseño del formulario principal Ahora pasemos al trabajo nuevo. El diseño del formulario principal será como en esta figura: Página 2 de 14

El triángulo está formado por tres controles de tipo Line. En sus vértices hay tres cuadros de texto, todos formando un arreglo llamado txtángulo. El superior tiene índice 1, el izquierdo 2 y el derecho 3. Para crearlos se puede colocar un cuadro de texto en el vértice superior, darle nombre txtángulo y asignar el valor 1 a la propiedad Index. Luego se crea el segundo con el mismo nombre y con Index igual a 2. De manera semejante se crea el tercero. Junto a los lados del triángulo hay un arreglo de cuadros de texto. Ellos comparten el nombre txtlado y tienen índices 1 (el inferior), 2 (el derecho) y 3 (el izquierdo). Por último, hay tres botones de comando llamados cmdborrar (que borrará los datos para empezar de nuevo), cmdresolver (que resolverá el problema) y cmdterminar (que terminará el programa). El segundo tiene la propiedad Default verdadera para que se active cuando el usuario presiona [Enter]. Ah, hay algo más. Cerca de la esquina superior izquierda hay cuatro etiquetas con el texto que se muestra en la figura. Y ahora sí es todo con respecto al diseño del formulario. 1.2 Programación del formulario principal Resolver el triángulo no será difícil luego de todo el trabajo que ya hicimos en las columnas anteriores. Tedioso sí, porque hay muchos casos que investigar individualmente. De hecho, como son seis las medidas del triángulo y el usuario puede indicar tres cualesquiera de ellas, habrá un total de ( 6 3 ) = 20 posibilidades que investigar (sólo 19 son válidas, porque el caso AAA no tiene solución). Pero aparte de considerar cada una de las posibilidades, nuestro trabajo en este formulario no será complicado. Empecemos por programar los cuadros de texto para que seleccionen todo su contenido cuando reciban el foco. Private Sub txtángulo_gotfocus(index As Integer) Página 3 de 14

Al recibir el foco txtángulo(index).selstart = 0 txtángulo(index).sellength = Len(txtÁngulo(Index).Text) End Sub Private Sub txtlado_gotfocus(index As Integer) Al recibir el foco txtlado(index).selstart = 0 txtlado(index).sellength = Len(txtLado(Index).Text) End Sub Deshagámonos de los botones de borrar y terminar, que son prácticamente triviales: Private Sub cmdborrar_click() Borrar los seis cuadros de texto Dim i As Byte For i = 1 To 3 txtángulo(i).text = "" txtlado(i).text = "" Next End Sub Página 4 de 14 Private Sub cmdterminar_click() Salir del programa End End Sub

1.2.1 El botón cmdresolver Aquí es donde está el trabajo importante. Vamos a empezar por validar y contar los datos. Si un cuadro de texto está vacío, su valor (según la función Val) es cero; por eso contaremos como válidos los datos mayores que cero y como inválidos los menores que cero, pero no contaremos los que valgan cero. En Visual Basic una expresión lógica tiene el valor 0 si es falsa o el valor 1 si es verdadera. Por eso la fórmula NumÁngulos = NumÁngulos - (A(i) > 0) incrementa el contador NumÁngulos sólo si A(i) > 0. (En la columna anterior convinimos que los tres ángulos serían A(1), A(2) y A(3), y que los lados respectivamente opuestos serían L(1), L(2) y L(3).) La siguiente validación consiste en que el número de datos sea exactamente tres. Y si es así entonces el programa considerará los distintos casos según el número de ángulos indicados: Si se indican cero ángulos estamos en el caso LLL. Si se indica un ángulo estamos en LAL o LLA. Si son dos ángulos, el caso es ALA o AAL. Y si son tres ángulos estamos en el caso AAA, que no tiene solución. En cada uno de los casos se investiga más en detalle cuáles exactamente son los datos para llamar la subrutina apropiada con los parámetros en el orden correcto. Cada una de las subrutinas para resolver los distintos casos retornará medidas iguales a cero cuando no haya solución; por eso la condición A(1) * A(2) * A(3) * L(1) * L(2) * L(3) = 0 (cierta si alguna de las medidas es cero) indicará que el triángulo no tiene solución. En caso contrario, la solución encontrada se grafica en frmgráfico. Bueno, no exactamente. Lo anterior estaría bien si no fuera porque algunos casos tienen dos soluciones. Para acomodar esos casos lo que haremos será crear una copia de frmgráfico para cada solución. En Página 5 de 14

Visual Basic es muy fácil crear varias copias de un formulario con la sintaxis Dim frmcopia As New frmoriginal, donde frmoriginal es un formulario que ya existe (como frmgráfico en nuestro caso) y frmcopia es el nombre de la copia. Todo lo que necesitamos hacer para graficar la solución es escribir Dim frmgraf As New frmgráfico frmgraf.show Cuando hay dos soluciones (solamente en el caso LLA) necesitamos crear dos copias del formulario. Pero también necesitamos tres variables adicionales para la segunda solución. Vamos a crear una subrutina LLADosSols que reciba seis parámetros: los tres primeros, por valor, serán los datos, y los tres últimos, por referencia, serán la solución. Pero son dos soluciones! Sí, entonces esta subrutina guardará la segunda solución en tres variables locales, graficará la primera para desentenderse de ella y retornará (en los parámetros por referencia) la segunda para que cmdresolver_click la grafique más tarde. La subrutina LLADosSols es así: Private Sub LLADosSols(ByVal L1 As Double, ByVal L2 As Double, ByVal A2 As Double, _ ByRef A1 As Double, ByRef A3 As Double, ByRef L3 As Double) Resolver caso LLA con dos soluciones. Guarda la segunda solución en variables locales, grafica la primera solución y pasa la segunda a las variables globales correspondientes. Página 6 de 14 Para guardar la segunda solución: Dim anga2 As Double, angc2 As Double, C2 As Double Resolver el triángulo

CasoLLA L1, L2, A2, A1, A3, L3, anga2, angc2, C2 Si hay segunda solución debe haber también primera: If anga2 * angc2 * C2 <> 0 Then Entonces graficar la primera y pasar datos de la segunda: Dim frmgraf As New frmgráfico frmgraf.show A1 = anga2: A3 = angc2: L3 = C2 End Sub Como vemos, aquí se crea y se muestra una copia de frmgráfico en una variable local llamada frmgraf. Normalmente las variables locales desaparecen al terminar una subrutina, pero ahora el formulario frmgraf permanece mientras sea visible, aunque la subrutina haya terminado. El usuario decidirá cuándo lo cierra con el botón Cerrar del gráfico o el botón Terminar del formulario principal. Al retornar el control a cmdresolver_click, la subrutina LLADosSols habrá dejado en las variables globales correspondientes la segunda solución, la cual será graficada al final de cmdresolver_click. Esto es lo que falta en el programa: Página 7 de 14 Private Sub cmdresolver_click() Calcular las tres medidas restantes Dim i As Byte Dim NumÁngulos As Byte, NumLados As Byte números de datos Leer, validar y contar los datos:

For i = 1 To 3 Ángulo i-ésimo: A(i) = Val(txtÁngulo(i).Text) * pi_180 If A(i) < 0 Then MsgBox "El ángulo " & i & " no puede ser negativo.", _ vbcritical, "Error en los datos" txtángulo(i).setfocus Exit Sub NumÁngulos = NumÁngulos - (A(i) > 0) contarlo Lado i-ésimo: L(i) = Val(txtLado(i).Text) If L(i) < 0 Then MsgBox "El lado " & i & " no puede ser negativo.", _ vbcritical, "Error en los datos" txtlado(i).setfocus Exit Sub NumLados = NumLados - (L(i) > 0) contarlo Next Página 8 de 14 Ver que sean exactamente tres datos: If NumÁngulos + NumLados <> 3 Then MsgBox "El número de datos debe ser igual a 3.", _

vbcritical, "Error en los datos" Exit Sub Proceder según el número de ángulos conocidos Select Case NumÁngulos Case 0 tres lados conocidos: LLL CasoLLL L(1), L(2), L(3), A(1), A(2), A(3) Case 1 un ángulo y dos lados: LAL o LLA El ángulo conocido puede ser A(1), A(2) o A(3) If A(1) > 0 Then El lado desconocido puede ser L(1), L(2) o L(3) If L(1) = 0 Then LAL: L2,A1,L3 CasoLAL L(2), A(1), L(3), A(2), L(1), A(3) ElseIf L(2) = 0 Then LLA: L3,L1,A1 LLADosSols L(3), L(1), A(1), A(3), A(2), L(2) Else LLA: L2,L1,A1 LLADosSols L(2), L(1), A(1), A(2), A(3), L(3) Página 9 de 14 ElseIf A(2) > 0 Then If L(2) = 0 Then LAL: L1,A2,L3

CasoLAL L(1), A(2), L(3), A(1), L(2), A(3) ElseIf L(1) = 0 Then LLA: L3,L2,A2 LLADosSols L(3), L(2), A(2), A(3), A(1), L(1) Else LLA: L1,L2,A2 LLADosSols L(1), L(2), A(2), A(1), A(3), L(3) ElseIf A(3) > 0 Then If L(3) = 0 Then LAL: L1,A3,L2 CasoLAL L(1), A(3), L(2), A(1), L(3), A(2) ElseIf L(2) = 0 Then LLA: L1,L3,A3 LLADosSols L(1), L(3), A(3), A(1), A(2), L(2) Else LLA: L2,L3,A3 LLADosSols L(2), L(3), A(3), A(2), A(1), L(1) Case 2 dos ángulos y un lado: ALA o AAL El lado conocido puede ser L(1), L(2) o L(3) If L(1) > 0 Then El ángulo desconocido puede ser A(1), A(2) o A(3) If A(1) = 0 Then ALA: A2,L1,A3 CasoALA A(2), L(1), A(3), L(2), A(1), L(3) ElseIf A(2) = 0 Then AAL: A1,A3,L1 Página 10 de 14

CasoAAL A(1), A(3), L(1), A(2), L(3), L(2) Else AAL: A1,A2,L1 CasoAAL A(1), A(2), L(1), A(3), L(2), L(3) ElseIf L(2) > 0 Then If A(2) = 0 Then ALA: A1,L2,A3 CasoALA A(1), L(2), A(3), L(1), A(2), L(3) ElseIf A(1) = 0 Then AAL: A2,A3,L2 CasoAAL A(2), A(3), L(2), A(1), L(3), L(1) Else AAL: A2,A1,L2 CasoAAL A(2), A(1), L(2), A(3), L(1), L(3) ElseIf L(3) > 0 Then If A(3) = 0 Then ALA: A1,L3,A2 CasoALA A(1), L(3), A(2), L(1), A(3), L(2) ElseIf A(2) = 0 Then AAL: A3,A1,L3 CasoAAL A(3), A(1), L(3), A(2), L(1), L(2) Else AAL: A3,A2,L3 CasoAAL A(3), A(2), L(3), A(1), L(2), L(1) Página 11 de 14

Case 3 tres ángulos: AAA MsgBox "No hay solución si sólo se conocen los ángulos.", _ vbcritical, "Error en los datos" Exit Sub End Select Hay solución? If A(1) * A(2) * A(3) * L(1) * L(2) * L(3) = 0 Then MsgBox "No hay solución para esos datos.", _ vbcritical, "Datos inválidos" Else Crear nuevo formulario para esta solución Dim frmgraf As New frmgráfico frmgraf.show End Sub Página 12 de 14

1.3 El programa ahora calcula la o las soluciones para cualquier conjunto de datos, o indica si el conjunto es inválido. Los formularios con las soluciones se conservan hasta que el usuario los cierre individualmente (con el botón Cerrar de cada gráfico) o termine el programa (con el botón Terminar del formulario principal, que cerrará todos los formularios). Y así terminamos un gran proyecto, con muy buenos resultados. En la siguiente figura vemos las soluciones del ejemplo que mencionamos en la columna anterior: a = 15, b = 13 y B = 53.13. Página 13 de 14

Página 14 de 14