Rocky G. Ayala Bizarro Ivan A. Ayala Bizarro PROGRAMACION 2019 A Programación en HP PPL aplicado a la ingeniería civil Ayacucho – Perú Hola Mundo Rocky G. Ayala Bizarro Ivan A. Ayala Bizarro Programación en HP PPL aplicado a la ingeniería civil Rocky Ayala Bizarro, editor Programación en HP PPL aplicado a la ingeniería civil Autores : Rocky G. Ayala Bizarro Ivan A. Ayala Bizarro Editado por: Rocky G. Ayala Bizarro Jr. 28 de Julio N° 590 - Ayacucho Telef. 965954710 riayala@uc.cl Ayacucho - Perú Primera edición, febrero 2019 Tiraje: 100 ejemplares Hecho el Depósito Legal en la Biblioteca Nacional del Perú N°:2019-05880 IBSN: 978-612-004-315-5 Queda prohibida la reproducción total o parcial de este libro por cualquier medio electrónico o mecánico, sin autorización por escrito de los autores. A nuestros padres quienes apostaron siempre en la educación y en nuestra formación personal para enfrentar las adversidades con dignidad y respecto. Índice General CAPÍTULO 1 Conceptos Básicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.1. La programación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.1.1. ¿Qué es un lenguaje de programación? . . . . . . 4 1.1.2. Creación de un programa . . . . . . . . . . . . . . . . . . 6 1.2. Algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.2.1. Ejercicios propuestos. . . . . . . . . . . . . . . . . . . . . . 9 1.3. Conociendo la Calculadora . . . . . . . . . . . . . . . . . . . . . 10 1.4. Características de la calculadora . . . . . . . . . . . . . . . . 11 1.4.1. Diseño y software . . . . . . . . . . . . . . . . . . . . . . . 11 1.4.1.1. Programación . . . . . . . . . . . . . . . . . . . . 12 1.5. Características del Emulador . . . . . . . . . . . . . . . . . . . 12 1.5.1. Emulador de la calculadora HP PRIME . . . . . 12 1.6. Características del Kit de conectividad . . . . . . . . . . . 13 1.6.1. Firmware de la calculadora HP PRIME. . . . . . 14 1.7. Notepad++. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.7.1. Configuración de Notepad++ . . . . . . . . . . . . . . 15 CAPÍTULO 2 Programación en HP PPL . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.1. Estructura de comandos . . . . . . . . . . . . . . . . . . . . . . . 18 2.2. Comentarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.3. Catalogo de programas. . . . . . . . . . . . . . . . . . . . . . . . . 19 2.4. Creación de un nuevo programa . . . . . . . . . . . . . . . . 20 2.4.1. Desde la HP PRIME (emulador y física). . . . . 20 2.4.2. Desde el software de conectividad de la HP riayala@uc.cl PRIME. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 CAPÍTULO 3 ii Indice General Programación en HP PPL aplicado a la ingeniería civil Variables y Objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.1. Declaración de variables . . . . . . . . . . . . . . . . . . . . . . . 24 3.1.1. Tipos de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.1.2. Reserva de memoria . . . . . . . . . . . . . . . . . . . . . 26 3.2. Variables Globales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.2.1. Variables globales en un programa . . . . . . . . 26 3.2.1.1. ¿Cómo se declara? . . . . . . . . . . . . . . . 27 3.2.2. Variables globales de exportación . . . . . . . . . 27 3.2.3. Variables de inicio. . . . . . . . . . . . . . . . . . . . . . . 28 3.2.3.1. ¿Cómo se utilizan?. . . . . . . . . . . . . . . 30 3.3. Variables locales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 3.3.1. Variables locales dentro de un subprograma o función. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.3.2. Variables locales como parámetro formal . . 32 3.4. Variables de aplicaciones y de usuario . . . . . . . . . . . 32 3.4.1. Variables de aplicaciones. . . . . . . . . . . . . . . . . 32 3.4.2. Variables de usuario . . . . . . . . . . . . . . . . . . . . . 33 3.5. Identificadores de variables . . . . . . . . . . . . . . . . . . . . 33 3.6. Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 3.6.1. Operadores aritméticos. . . . . . . . . . . . . . . . . . . 34 3.6.2. Operadores relacionales . . . . . . . . . . . . . . . . . 34 3.6.3. Operadores lógicos . . . . . . . . . . . . . . . . . . . . . . 35 3.6.4. Operadores de asignación . . . . . . . . . . . . . . . . 35 3.6.5. Ejemplo de operadores . . . . . . . . . . . . . . . . . . 36 3.6.6. Operaciones con cadenas . . . . . . . . . . . . . . . . 36 3.7. Palabras reservadas. . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 CAPÍTULO 4 4.1. Ingreso de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 4.1.1. Ingreso de datos como Función . . . . . . . . . . . . 42 iii riayala@uc.cl Estructuras Secuenciales y Manejo de Gráficos. . . . . . . 41 Indice General Programación en HP PPL 4.1.2. Comando INPUT . . . . . . . . . . . . . . . . . . . . . . . . . 43 4.1.3. Comando CHOOSE . . . . . . . . . . . . . . . . . . . . . . . 46 4.1.4. Pantalla táctil . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 4.1.5. Formularios interactivos . . . . . . . . . . . . . . . . . 47 4.1.6. Ingreso de datos a través de matrices y vectores 48 4.1.6.1. Comando EDITMAT. . . . . . . . . . . . . . . 48 4.1.6.2. Comando EDITLIST . . . . . . . . . . . . . . . 49 4.1.7. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 4.2. Salida de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 4.2.1. Comando MSGBOX . . . . . . . . . . . . . . . . . . . . . . 51 4.2.2. Comando PRINT. . . . . . . . . . . . . . . . . . . . . . . . . 51 4.2.3. Salida de datos a través de gráficos. . . . . . . . 52 4.2.4. Ejercicios resueltos . . . . . . . . . . . . . . . . . . . . . . 53 4.3. Introducción al manejo de gráficos . . . . . . . . . . . . . . 54 4.3.1. Variables gráficas . . . . . . . . . . . . . . . . . . . . . . . . 54 4.3.2. Coordenadas cartesianas y de píxel . . . . . . . 54 4.3.2.1. Coordenadas cartesianas . . . . . . . . . 55 4.3.2.2. Coordenadas de píxel.. . . . . . . . . . . . 56 4.3.3. Comandos de dibujo. . . . . . . . . . . . . . . . . . . . . 56 4.3.4. Comando BLIT P . . . . . . . . . . . . . . . . . . . . . . . . 57 4.3.4.1. Comando RGB . . . . . . . . . . . . . . . . . . . 63 4.3.4.2. Comando LINE P . . . . . . . . . . . . . . . . 64 4.3.4.3. Comando RECT P. . . . . . . . . . . . . . . . 64 4.3.4.4. Comando TEXTOUT P . . . . . . . . . . . . 64 4.3.4.5. Comando DRAWMENU. . . . . . . . . . . 65 4.3.4.6. ICON . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 riayala@uc.cl 4.3.4.7. Ejercicios resueltos . . . . . . . . . . . . . . 67 4.4. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 CAPÍTULO 5 iv Indice General Programación en HP PPL aplicado a la ingeniería civil Estructuras de Programación . . . . . . . . . . . . . . . . . . . . . 73 5.1. Estructuras selectivas . . . . . . . . . . . . . . . . . . . . . . . . . . 74 5.1.1. Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 5.1.1.1. Operadores relacionales y lógicos . . 74 5.1.1.2. Prioridad de operadores. . . . . . . . . . . 75 5.1.2. Estructura IF THEN . . . . . . . . . . . . . . . . . . . . . . 75 5.1.2.1. La expresión condicional . . . . . . . . . . 76 5.1.3. Estructura IF THEN ELSE . . . . . . . . . . . . . . . . . 77 5.1.4. Estructura CASE . . . . . . . . . . . . . . . . . . . . . . . . . 78 5.1.5. Estructura IFERR . . . . . . . . . . . . . . . . . . . . . . . . 79 5.1.6. Estructura IFERR ELSE. . . . . . . . . . . . . . . . . . . . 80 5.1.7. Estructuras de decisión anidadas . . . . . . . . . . 81 5.1.8. Ejercicios Aplicativos. . . . . . . . . . . . . . . . . . . . . 82 5.1.9. Ejercicios propuestos. . . . . . . . . . . . . . . . . . . . . 86 5.2. Estructuras repetitivas.. . . . . . . . . . . . . . . . . . . . . . . . . 87 5.2.1. Estructura FOR . . . . . . . . . . . . . . . . . . . . . . . . . . 88 5.2.1.1. Estructura FOR STEP . . . . . . . . . . . . . . 90 5.2.1.2. Estructura FOR DOWN . . . . . . . . . . . 90 5.2.1.3. Estructura FOR STEP DOWN. . . . . . . 91 5.2.2. Estructura WHILE . . . . . . . . . . . . . . . . . . . . . . . 91 5.2.3. Estructura REPEAT . . . . . . . . . . . . . . . . . . . . . . 92 5.2.4. Comandos BREAK y CONTINUE . . . . . . . . . . . 94 5.2.5. Estructuras iterativas anidadas . . . . . . . . . . . 95 5.2.6. Ejercicios aplicativos. . . . . . . . . . . . . . . . . . . . . 96 5.2.7. Ejercicios propuestos.. . . . . . . . . . . . . . . . . . . 102 CAPÍTULO 6 Arreglos: Matrices, Vectores y Listas. . . . . . . . . . . . . . . 105 Declaración de arreglos . . . . . . . . . . . . . . . . . . . . . . . 107 6.2. Listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 6.2.1. Creación de listas . . . . . . . . . . . . . . . . . . . . . . . 107 v riayala@uc.cl 6.1. Indice General Programación en HP PPL 6.2.2. Comandos para el manejo de listas. . . . . . . 108 6.2.2.1. Comando SORT . . . . . . . . . . . . . . . . . 108 6.2.2.2. Comando CONCAT . . . . . . . . . . . . . . 108 6.2.2.3. Comando POS . . . . . . . . . . . . . . . . . . 108 6.2.2.4. Comando SIZE. . . . . . . . . . . . . . . . . . 109 6.2.2.5. Comando EDITLIST . . . . . . . . . . . . . 109 6.2.3. Ejemplo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 6.3. Matrices y vectores . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 6.3.1. Vectores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 6.3.2. Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .111 6.3.3. Comandos para matrices. . . . . . . . . . . . . . . . 112 6.3.3.1. Comando ADDCOL . . . . . . . . . . . . . . 112 6.3.3.2. Comando ADDROW. . . . . . . . . . . . . 112 6.3.3.3. Comando DELCOL . . . . . . . . . . . . . . 112 6.3.3.4. Comando DELROW . . . . . . . . . . . . . 112 6.3.3.5. Comando EDITMAT . . . . . . . . . . . . . 113 6.3.3.6. Comando REDIM . . . . . . . . . . . . . . . 113 6.3.3.7. Comando REPLACE. . . . . . . . . . . . . . 113 6.3.3.8. Comando SCALE . . . . . . . . . . . . . . . . 114 6.3.3.9. Comando SUB . . . . . . . . . . . . . . . . . . 114 6.3.3.10. Comando SWAPCOL. . . . . . . . . . . . 114 6.3.3.11. Comando SWAPROW . . . . . . . . . . . 114 6.4. Ejercicios aplicativos. . . . . . . . . . . . . . . . . . . . . . . . . . 115 6.4.1. Ejercicios propuestos. . . . . . . . . . . . . . . . . . . . 120 CAPÍTULO 7 riayala@uc.cl Subprogramas y Manejo de Gráficos. . . . . . . . . . . . . . . 121 7.1. Subrutinas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 7.2. Funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 7.3. Diseño de una función . . . . . . . . . . . . . . . . . . . . . . . . 123 7.3.1. Definición de una función . . . . . . . . . . . . . . . 123 vi Indice General Programación en HP PPL aplicado a la ingeniería civil 7.3.2. Invocación de una Función . . . . . . . . . . . . . . 124 7.3.3. Ejemplo de funciones . . . . . . . . . . . . . . . . . . . 124 7.4. Manejo de gráficos . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 7.4.1. Comando GETKEY . . . . . . . . . . . . . . . . . . . . . . 130 7.4.2. ISKEYDOWN . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 7.5. Comando MOUSE . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 7.6. Comando WAIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 7.7. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 CAPÍTULO 8 Introducción al modo CAS . . . . . . . . . . . . . . . . . . . . . . . 155 8.1. ¿Qué es CAS? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 8.1.1. Vista de CAS. . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 8.1.2. Cálculos con CAS . . . . . . . . . . . . . . . . . . . . . . . 157 8.2. CAS en PPL PRIME . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 Índice de Figuras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 vii riayala@uc.cl Índice de Tablas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 Presentación En la actualidad la carreta de ingeniería civil, se encuentra a la vanguardia de los últimos softwares o programas, los mismos que reducen el tiempo en los cálculos de diseño y simulación que se presentan constantemente en la ingeniería. Es así, que la presente publicación se enfoca a la difusión de rutinas de programación en el lenguaje HP PPL, las mismas que son herramientas constantes en la ingeniería civil, demostrando de manera precisa, sencilla y práctica para la utilización de este lenguaje. Con el avance de la tecnología y los diversos lenguajes de programación, se ha puesto en práctica el desarrollo automatizado de procesos repetitivos en una calculadora o computadora. Los principales objetivos de esta publicación son mostrar los procedimientos, herramientas y conocimiento de las bondades y facilidades para el uso adecuado y eficiente del lenguaje de programación HP PPL. La presente publicación consta de ocho capítulos que los guiarán en su aprendizaje en el conocimiento de la programación, desde los aspectos básicos hasta llegar a conocer los conceptos más usados de la programación, como son los arreglos, cadenas de caracteres y la programación en el modo CAS de la calculadora, las estructuras avanzadas de datos y considerando el tema de interés en la programación, como son: el ordenamiento, la búsqueda y la selección de los algoritmos. Toda esto se describe y se analiza en cada uno de los ocho capítulos de los que consta la presente publicación. La estructura se organizada como sigue: 1 Conceptos básicos. 2 Programación en HP PPL. 3 Variables y objetos. 4 Estructura secuenciales y manejo de gráficos. 5 Estructuras de programación. 6 Arreglos: Matrices, vectores y listas. 7 Subprogramas y manejo de gráficos. 8 Introducción al modo CAS. Para complementar el aprendizaje de la programación, el libro está acompañado de la descripción de todos los programas creados y los fragmentos de códigos fuentes. Los autores. riayala@uc.cl Programación en HP PPL 2 Capítulo 1 Conceptos Básicos Resumen 1.1 1.2 1.3 1.4 1.5 1.6 1.7 La programación, 4 Algoritmos, 7 Conociendo la Calculadora, 10 Características de la calculadora, 11 Características del Emulador, 12 Características del Kit de conectividad, 13 Notepad++, 14 1.1 La programación | Capítulo 1 Programación en HP PPL 1.1 La programación 1.1.1¿Qué es un lenguaje de programación? Cuando hablamos de un lenguaje de programación lo que en verdad queremos decir es un lenguaje artificial que expresa lo que denominamos computaciones. Las computaciones representan un término genérico para cualquier tipo y variante de algoritmo, proceso o medida que pueda ser ejecutada por una máquina o sistema complejo tal como una computadora o calculadora. En sentido estricto, los lenguajes de programación son variados y se caracterizan por ser utilizados para crear aplicaciones y software de cualquier tipo. En este caso nos referimos al desarrollo de programas que se encargan del control del comportamiento de la máquina, sistema u ordenador. El comportamiento específico se define mediante algoritmos predefinidos y pre-escritos. En resumen, el lenguaje de programación es la combinación de símbolos y reglas que permiten la elaboración de programas con los cuales la computadora u otras máquinas puede realizar tareas o resolver problemas de manera eficiente. Los lenguajes de programación se clasifican en: 1. Lenguaje máquina. Las instrucciones son directamente entendibles por la computadora y no necesitan traductor para que la CPU (unidad de procesamiento central) pueda entender y ejecutar el programa. riayala@uc.cl Utiliza un código binario (0 y 1), se basa en bits (abreviatura inglesa de dígitos binarios). 2. Lenguaje de bajo nivel (ensamblador) Las instrucciones 4 1.1 La programación | Capítulo 1 Programación en HP PPL aplicado a la ingeniería civil se escriben en códigos alfabéticos conocidos como mnemotécnicos. 3. Lenguaje de alto nivel Es semejante al lenguaje humano (en general en inglés), lo que facilita la elaboración y comprensión del programa. Por ejemplo, HP PPL, Basic, Pascal, Cobol, Fortran, C, etcétera. ¿Qué es un Programa? Antes de explicar lo que significa programar, necesitamos que entiendan lo que es un programa. Todo el mundo está acostumbrado ya a los programas, están familiarizados con este concepto gracias al uso de Smartphones y Tablets, computadoras, calculadoras Un programa no es más que un conjunto de pasos que tiene Figure 1.1 Funcionamiento de un programa que realizar un ordenador para desempeñar una tarea o conseguir un objetivo concreto. Todos los programas tienen en común que funcionan de una manera casi parecida, partiendo de un conjunto de datos iniciales, realizan una serie de operaciones sobre ellos para obtener un conjunto de datos finales. ¿Qué es programar? Podemos decir que programar es codificar instrucciones Programar Es decirle a un tonto muy rápido para realizar una actividad en un lenguaje de programación exactamente lo que tiene que específico con la finalidad de que sean ejecutadas por la hacer computadora o máquinas (HP PRIME) para solucionar un “ La programación es el arte de problema. expresar soluciones a problemas Figure 1.2 Secuencia de un programa. para que una computadora pueda Fase 2 Fase 3 ENTRADA PROCESO SALIDA de datos de datos de datos ejecutar dichas soluciones. — Bjarne Stroustrup 5 riayala@uc.cl Fase 1 1.1 La programación | Capítulo 1 Programación en HP PPL 1.1.2Creación de un programa El desarrollo de un programa o de un conjunto de aplicaciones se basa en un concepto llamado ciclo de vida. Son una serie de etapas o fases que hay que seguir secuencialmente. Las fases o etapas son: Figure 1.3 Secuencia de un programa. La programación es sólo una etapa del proceso de desarrollo. ¿Para que sirve programar? Programar Básicamente, podemos resumir que programar es una ¡sirve para todo! actividad que sirve para todo, que está presente en nuestro día a día y nos facilita las tareas que realizamos. Esta respuesta se basa en poner sobre la mesa la cantidad de dispositivos informáticos y electrónicos que existen y sobre riayala@uc.cl los que se pueden instalar programas: Ordenadores SmartTV Calculadoras Tablets Smartphones Smartwatches, etc. Además de indicar en el número de dispositivos, puedes explicar para qué sirve programar indicando ciertas 6 1.2 Algoritmos | Capítulo 1 Programación en HP PPL aplicado a la ingeniería civil actividades cotidianas en las que los programas ayudan a las personas en su día a día: Programas para los supermercados Programas para las tiendas Programas para los restaurantes Ordenadores de a bordo de los coches, etc. 1.2 Algoritmos Se denomina algoritmo al conjunto de pasos ordenados y finitos que permiten resolver un problema o tarea específica. Los algoritmos son independientes del lenguaje de programación y de la computadora que se vaya a emplear “ La definición más simple de algoritmo es que es una secuencia de reglas que toman datos de entradas y los transforman en datos de salidas. — Jorge Pérez para ejecutarlo. Todo algoritmo debe ser: Finito. En tamaño o número de instrucciones (tiene un primer paso y un último paso) y tiempo de ejecución (debe terminar en algún momento). Por lo tanto, debe tener un punto particular de inicio y fin. Preciso. Debe tener un orden entre los pasos. Definido. No debe ser ambiguo (dobles interpretaciones); si se ejecuta el mismo algoritmo el resultado siempre será el mismo, sin importar las entradas proporcionadas. General. Debe tolerar cambios que se puedan presentar en la definición del problema. forma de algoritmo. Existen dos tipos de algoritmos, los que se desarrollan para ser ejecutados por una computadora, 7 riayala@uc.cl Toda actividad que realizamos la podemos expresar en 1.2 Algoritmos | Capítulo 1 Programación en HP PPL llamados algoritmos computacionales, y los que realiza el ser humano, es decir, algoritmos no computacionales. Los algoritmos ejecutados por una computadora pueden ser representado gráfica o numéricamente, de modo que las sucesivas acciones no dependan de la sintaxis de ningún lenguaje de programación, sino que la descripción se emplee para su transportación en un programa. Los métodos usuales para representar un algoritmo son: 1 Diagrama de flujo. 2 Diagrama N-S (Nassi-Schneiderman). 3 Lenguaje de especificación de algoritmos: pseudocódigo. 4 Lenguaje español, inglés. 5 Fórmulas. Por otra parte, un algoritmo consta de tres secciones o módulos principales. En la figura 1.4 podemos observar las secciones que constituyen un algoritmo. El módulo 1 representa la operación o acción que permite el ingreso de los datos del problema. El módulo 2 representa la operación o conjunto de operaciones secuenciales, cuyo objetivo es obtener la solución al problema (Estructura). El módulo 3 representa una operación o conjunto de operaciones que permiten comunicar al exterior el o los resultados alcanzados. Figure 1.4 Módulo o secciones de un algoritmo. riayala@uc.cl ALGORITMO Datos de entrada 8 Procesamiento Impresión de de Datos resultados 1.2 Algoritmos | Capítulo 1 Programación en HP PPL aplicado a la ingeniería civil 1.2.1Ejercicios propuestos Ejemplo 1 Elaborar un algoritmo para calcular el promedio final de la materia de algoritmos. Dicha calificación se compone delos siguientes porcentajes. 55% —–del promedio final de sus calificaciones parciales (3) 30% —– de la calificación de promedio 15% —– de la calificación de un trabajo final Ejemplo 2 Elabora un algoritmo para leer un número y determinar si es par o impar. Ejemplo 3 Solicitar un entero y determinar sí es múltiplo de 3 y además que se encuentre en el rango (100-200). Ejemplo 4 Desarrolle un algoritmo que realice la sumatoria de los números enteros comprendidos entre el 1 y el 10, es decir, 1 + 2 + 3 + …. + 10. Ejemplo 5 Determinar la hipotenusa de un triángulo rectángulo conocidas las longitudes de sus dos catetos. Desarrolle el algoritmo correspondiente. Ejemplo 6 Desarrolle un algoritmo que permita leer dos números y ordenarlos de menor a mayor, si es el caso. Ejemplo 7 Realice un algoritmo que a partir de proporcionarle la velocidad de un automóvil, expresada en kilómetros por hora, proporcione la velocidad en metros por segundo. Ejemplo 8 Desarrolle un algoritmo que permita leer un Ejemplo 9 Desarrolle un algoritmo que permita determinar el área y volumen de un cilindro dado su 9 riayala@uc.cl valor entero positivo N y determinar si es primo o no. 1.3 Conociendo la Calculadora | Capítulo 1 Programación en HP PPL radio (R) y altura (H). Ejemplo 10 Determinar la hipotenusa de un triángulo rectángulo conocidas las longitudes de sus dos catetos. Desarrolle el algoritmo correspondiente. 1.3 Conociendo la Calculadora La calculadora gráfica HP Prime es una calculadora potente de fácil uso, diseñada específicamente para la enseñanza de matemáticas. Esta calculadora Ofrece cientos de funciones y comandos e incluye un sistema algebraico computacional (CAS, por sus siglas en inglés) para cálculos simbólicos. Además de la amplia biblioteca de funciones y comandos, la calculadora incluye un conjunto de aplicaciones de HP. Una Figure 1.5 Calculadora HP PRIME aplicación de HP es una aplicación especial diseñada para ayudarle a explorar una rama concreta de las matemáticas o para resolver un tipo de problema concreto. Más adelante en este ejemplar se explica a detalle los algoritmos, funciones, estructuras y comandos para crear aplicaciones o programas. Figure 1.6 Calculadora HP PRIME La HP Prime es la más reciente generación de una calculadora gráfica fabricada por Hewlett-Packard (HP). Contiene características inteligentes, comunes de los teléfonos con una pantalla táctil y aplicaciones pre-incluidas con posibilidad de crear nuestras propias aplicaciones. Hay dos modos de cálculo, una pantalla principal de cálculo numérico que se accede pulsando la tecla H también conocida como vista HOME y una vista riayala@uc.cl de cálculo simbólico que se accede pulsando la tecla C. La calculadora HP Prime también dispone de su propio lenguaje de programación que puede utilizar para explorar Tabla 1.1 Leyenda del teclado 10 y resolver problemas matemáticos. 1.4 Características de la calculadora | Capítulo 1 Programación en HP PPL aplicado a la ingeniería civil Figure 1.7 Conociendo la calculadora HP PRIME 1.4 Características de la calculadora HP Prime es una calculadora gráfica introducida por Hewlett-Packard en 2013 y actualmente fabricado por HP Inc. Fue diseñado con características parecidas a las de los teléfonos inteligentes , como a todo color de pantalla táctil de visualización y la posibilidad de ampliar la funcionalidad por medio de aplicaciones descargables. 1.4.1Diseño y software La interfaz gráfica de usuario de HP Prime cuenta con dos pantallas de inicio separadas, una de las cuales contiene un sistema de álgebra computacional (CAS) integrado basado en el motor de código abierto y gratuito Xcas/Giac 1.4.9. La calculadora modelo G1 tiene una batería de 1500 mAh, El modelo G2 viene con una batería con una capacidad de 2000 mAh. 11 riayala@uc.cl que se espera que dure hasta 15 horas con una sola carga. 1.5 Características del Emulador | Capítulo 1 Programación en HP PPL 1.4.1.1 Programación La calculadora admite la programación en un nuevo lenguaje de programación similar a Pascal, ahora denominado PPL PRIME (para Prime Programming Language, pero originalmente también conocido como HP Basic) que también admite la creación de aplicaciones. Esto se basa en un lenguaje introducido en el HP 38G y construido en modelos posteriores. Tabla 1.2 Características de la calculadora. Fecha Tipo de visualización Tamaño de la pantalla Procesador Versión de Actualización TFT LCD multitáctil a todo color de 16 bits 320 × 240 píxeles (3.5 � / 8.9 cm en diagonal) G2: 528 MHz NXP i.MX 6ULL MCIMX6Y2 ( núcleo Cortex A7 ) 1.5 Características del Emulador 1.5.1Emulador de la calculadora HP PRIME El emulador HP Prime es un programa para PC que copia la interfaz de usuario, la pantalla y el teclado del HP Prime en la PC. riayala@uc.cl Figure 1.8 Emulador para S.O. Windows. 12 1.6 Características del Kit de conectividad | Capítulo 1 Programación en HP PPL aplicado a la ingeniería civil Versiones del emulador Tabla 1.3 Historial de versiones. Fecha Versión de Actualización 2018/10/31 v2.1.14181 (2018-10-16) 2018/07/22 v13865 (2018-07-06) 2018/02/21 v13441 (2018-02-12) 2018/02/01 v13333 (2018-01-24) 2017/02/11 v11226 (2016-12-08) 2016/09/11 v10637 (2016-08-29) 2013/12/22 Inicial Dado que el emulador posee la misma funcionalidad que el HP Prime, es posible preparar las lecciones en la PC y la presentación de la calculadora mediante un proyector o una pizarra. 1.6 Características del Kit de conectividad Software basado en el S.O. Windows para conectarse a la calculadora HP Prime. Versiones del kit de conectividad HP Fecha Versión de Actualización 2018/10/31 v2.1.14181 (2018-10-16) 2018/07/22 v13865 (2018-07-06) 2018/02/21 v13441 (2018-02-12) 2018/02/01 v13333 (2018-01-24) 2017/02/11 v11226 (2016-12-08) 2016/09/11 v10637 (2016-08-29) 2013/12/2 v5442 (2013-11-25) 2013/12/22 versión inicial También es útil para la creación de programas ya que cuenta 13 riayala@uc.cl Tabla 1.4 Historial de versiones. 1.7 Notepad++ | Capítulo 1 Programación en HP PPL con un editor de códigos HP PPL. 1.6.1Firmware de la calculadora HP PRIME El firmware es una clase específica de software para la calculadora HP PRIME que proporciona el control de bajo nivel para el hardware específico del dispositivo. Versiones del firmware de la calculadora HP PRIME Tabla 1.5 Historial de versiones. Fecha Versión de Actualización 2018/10/31 v2.1.14181 (2018-10-16) 2018/07/22 v13865 (2018-07-06) 2018/02/21 v13441 (2018-02-12) 2018/02/01 v13333 (2018-01-24) 2017/07/14 v12066 (2017-07-10) 2016/09/11 v10637 (2016-08-29) 2013/12/22 versión inicial El firmware proporciona un entorno operativo estandarizado para la HP PRIME, actúa como el sistema operativo completo de la calculadora, realizando todas las funciones de control, monitoreo y manipulación de datos. 1.7 Notepad++ Notepad ++ es un editor de código fuente gratuito que admite varios idiomas. Al ejecutarse en el entorno de MS Windows, su uso se rige por la licencia GPL. Está basado en el componente de edición Scintilla, escrito en C ++ y utiliza la API y STL de Win32 pura, lo que garantiza riayala@uc.cl una mayor velocidad de ejecución y un tamaño de programa más pequeño. Al optimizar tantas rutinas como sea posible Figure 1.9 Logotipo programa Notepad++ 14 sin perder la facilidad de uso, Notepad++ utiliza menos CPU. 1.7 Notepad++ | Capítulo 1 Programación en HP PPL aplicado a la ingeniería civil Para facilitar la programación en la calculadora HP PRIME, se recomienda utilizar éste editor de códigos con una configuración creada con la finalidad de escribir códigos ordenados y computables para la calculadora HP Prime Programming Language (HP PPL), ya que escribir códigos en el kit de conectividad a veces es incómodo y no es muy fácil de usar (sin soporte para buscar / reemplazar), por lo que Notepad ++ es una opción mucho más amigable. Estos archivos no solo agregan resaltado de sintaxis sino también documentación para casi 600 funciones, mostrando la sintaxis de los parámetros y descripciones detalladas a medida que se escribe el código. 1.7.1Configuración de Notepad++ Figure 1.10 Importar un archivo de configuración a Notepad++. Sugerencia De la figura 1.10 con el botón Importar se puede llevar el archivos Estilo-HPPRIME(RAB), para poder configurar el Lenguaje de programación PPL PRIME en el programa Estilo-HPPRIME(RAB), es el archivo de configuración 15 riayala@uc.cl Notepad ++. 1.7 Notepad++ | Capítulo 1 Programación en HP PPL para la codificación del lenguaje HP PPL en el software Notepad++. Este archivo se carga al programa desde el menú Lenguaje -> Defina su Lenguaje y seleccionando el botón Importar, tal como se muestra en la figura. Este archivo, trae más de 600 funciones del lenguaje de programación HP PPL para el resaltado de sintaxis en el programa Notepad++, también se puede descargar desde la página : riayala@uc.cl https://www.hpcalc.org/details/7564. 16 Capítulo 2 Programación en HP PPL Resumen 2.1 2.2 2.3 2.4 Estructura de comandos, 18 Comentarios, 19 Catalogo de programas, 19 Creación de un nuevo programa, 20 2.1 Estructura de comandos | Capítulo 2 Programación en HP PPL Es un lenguaje que está orientado a secuencias que permiten el manejo de datos de una forma muy aprovechable, por lo que se precisa indicar que estas consideraciones pueden llegar a ser exclusivas de PPL. 2.1 Estructura de comandos Recordar Los comandos que aceptan Los programas pueden contener cualquier número de subrutinas (cada una de las cuales es una función varios argumentos incluyen a estos últimos entre paréntesis, o procedimiento). Las subrutinas se inician con un separados por comas (,). encabezado que consta del nombre seguido por paréntesis que contienen una lista de parámetros o argumentos, separados por comas. El cuerpo de una subrutina consta de una secuencia de instrucciones incluidas entre un par BEGIN−END . Por ejemplo, el cuerpo de un programa simple, denominado MYPROGRAM , podría parecerse a esto: Recordar Los comandos se separan con punto y coma (;). Código 2.1: Hola Mundo 1 2 3 4 EXPORT MYPROGAM() BEGIN RETURN "Hola Mundo"; END; Por ejemplo. RECT_P() Comando sin parámetros TEXTOUT_P() EXPORT MYPROGAM() BEGIN RECT_P(); //Comando RECT TEXTOUT_P("Texto impreso",100, 100,3); //TEXTOUT_P WAIT(2); //Comando WAIT END; Comando con 4 parámetros, 3 obligatorios y 1 opcional. En ocasiones, opcionales. WAIT() Comando con 1 parámetro obligatorio. los argumentos de un comando son Si se omite un argumento, se utiliza un valor predeterminado en su lugar. En el caso del comando TEXTOUT_P(1,2,3,4,5,6,7,8); podría utilizarse un cuarto, quinto, riayala@uc.cl sexto, séptimo u octavo argumento que especificara una característica del texto el cual es opcional, al igual que el parámetro 2 ( [G] ), el cual hace referencia a la variable 18 2.2 Comentarios | Capítulo 2 Programación en HP PPL aplicado a la ingeniería civil gráfica. TEXTOUT_P(texto,[G],posicion x, posicion y, [fuente],[color 1],[ancho],[color 2]); En este manual, los argumentos opcionales a los comandos aparecen dentro de corchetes, como se ha mostrado anteriormente. En el ejemplo TEXTOUT_P , la variable gráfica (G) tiene un valor predeterminado que es G0 , que contiene siempre la pantalla mostrada en ese momento. Por lo tanto, la sintaxis mas completa del comando contiene 8 parámetros entre obligatorios y opcionales. En resumen se concluye que cada comando puede tener parámetros obligatorios y opcionales. 2.2 Comentarios Cuando una línea de un programa empieza con dos barras diagonales, // , se ignorará el resto de la línea. Esto le permite introducir comentarios en el programa: EXPORT MYPROGAM() BEGIN TEXTOUT_P("Conociendo los comentarios",100, 100,3); //Esta linea es solo un comentario. WAIT(2); //Otro comentario. END; 2.3 Catalogo de programas El catálogo de programas es donde se ejecutan, depuran y guardan los programas. También se puede cambiar el nombre de los programas o eliminarlos y es donde se inicia el editor de programas. programas. También se pueden ejecutar programas desde Figure 2.1 Catálogo de programas Vista de inicio o desde otros programas. 19 riayala@uc.cl El editor de programa es donde se crean y editan los 2.4 Creación de un nuevo programa | Capítulo 2 Programación en HP PPL Ingresar al catálogo de programas : S + y 2.4 Creación de un nuevo programa Existen dos maneras practicas para crear un nuevo programa la primera es desde la misma HP PRIME y la segunda utilizando el software de conectividad de la HP Prime: 2.4.1Desde la HP PRIME (emulador y física) Se sigue los siguientes pasos: 1 Abra el catálogo de programas (S + y) y seleccionar el menú Nuevo. 2 Introduzca un nombre para el nuevo programa. 3 Presione OK. Se crea automáticamente una plantilla para el programa. La plantilla consta de un encabezado para riayala@uc.cl una función del mismo nombre que el programa, que encerrará las instrucciones de la función. 20 2.4 Creación de un nuevo programa | Capítulo 2 Programación en HP PPL aplicado a la ingeniería civil EXPORT HOLAMUNDO() BEGIN END; 2.4.2Desde el software de conectividad de la HP PRIME. Se sigue los siguientes pasos: 1 Abra el software de conectividad de la HP PRIME. 2 En Programas presione anticlick y seleccione en la ventana que se abre la opción Nuevo introduzca el nombre del programa y le teclee enter. 3 Se crea automáticamente una ventana nueva para el programa. Sugerencia: Un nombre de programa solo puede contener caracteres alfanuméricos (letras y números) y el carácter de subrayado. El primer carácter debe ser una letra. Por ejemplo, hola_mundo y Programa2 son nombres de programa válidos, mientras que holamundo (no se permiten espacios) y 2Program (empieza con un 21 riayala@uc.cl número) no son válidos. 2.4 Creación de un nuevo programa | Capítulo 2 Programación en HP PPL Figure 2.2 Vista de las herramientas de trabajo del software Kit de Conectividad. riayala@uc.cl Figure 2.3 Creación de un nuevo programa. 22 Capítulo 3 Variables y Objetos Resumen 3.1 3.2 3.3 3.4 3.5 3.6 3.7 Declaración de variables, 24 Variables Globales, 26 Variables locales, 30 Variables de aplicaciones y de usuario, 32 Identificadores de variables, 33 Operadores, 34 Palabras reservadas., 38 3.1 Declaración de variables | Capítulo 3 Programación en HP PPL Una variable es un dato cuyo valor puede cambiar durante el desarrollo del algoritmo o ejecución del programa. Es decir, representará un valor almacenado en la memoria que puede modificarse en cualquier momento o conservarse para ser usado tantas veces como se desee. Hay diferentes tipos de variables: enteras, reales, caracteres, cadenas, etc. Una variable que es de cierto tipo y sólo puede tomar valores que correspondan a ese tipo. Si se intenta asignar un valor de tipo diferente se producirá un error. Las variables en el lenguaje de programación PPL PRIME pueden utilizarse para almacenar números, listas, matrices, objetos de gráficos y cadenas. El nombre de una variable debe tener una secuencia de caracteres alfanuméricos (letras y números), comenzado con una letra. 3.1 Declaración de variables Recordar Los nombres reconocen mayúsculas y minúsculas, Todas las variables deben ser declaradas antes de ser usadas. Cada variable por lo tanto tiene asociado un tipo , un por lo tanto las variables nombre denominadas VarTem y varTEM como identificadores palabras reservadas del lenguaje de son diferentes. programación HP PPL. (identificador) y un valor . No se admiten Existen 4 formas para declarar variables en el lenguaje de programación PPL PRIME. 1 Fuera de todos los subprogramas o funciones (global programa). 2 Dentro de un subprograma o función (local). 3 Como parámetro formal en una función (local). 4 Como parámetro de exportación (global calculadora). Adicionalmente existen las Variables de Inicio, que están declarados por defecto dentro de la calculadora. Recordar En general los datos se dividen riayala@uc.cl en estas categorías. 1. Numérico. 2. Cadenas. 3. Lógicos. 24 3.1.1Tipos de datos Los diferentes objetos de información con los que un programa trabaja se conocen colectivamente como datos. Todos los datos tienen un tipo asociado con ellos; el tipo de 3.1 Declaración de variables | Capítulo 3 Programación en HP PPL aplicado a la ingeniería civil un dato es el conjunto (rango) de valores que puede tomar durante el programa. Por ejemplo, el tipo de un dato determina la naturaleza del conjunto de valores que puede tomar una variable. En la tabla 3.1 apreciamos que cada tipo de dato en lenguaje HP PPL está delimitado por un rango de valores. El tipo de dato asociado a una variable limita el conjunto de datos que puede almacenar, así como las operaciones aplicables sobre esa variable. Por lo tanto NO se podrán calcular operaciones propias de otros tipos de datos. El lenguaje de programación PPL PRIME trabaja con varios tipos de datos; los programas creados operan sobre éstos procesándolos para solucionar un problema específico. La asignación de tipos a los datos tiene dos objetivos principales: 1 Detectar errores de operaciones en programas. 2 Determinar cómo ejecutar las operaciones. Tipo Definición Ejemplo Numérico 0 10.25 Binarios ♯entero[b] ♯11b Hexadecimal ♯entero[h] ♯E4h Cadena “” “Hola Mundo” Compleja (0,0) (5,2) Matriz [[0]] [[1,2][2,1]] Vector [0] [2,1,3,10] Lista {} { 2,1,3,10 } Expresión ’0’ ’5’ 25 riayala@uc.cl Tabla 3.1 Tipo dato predefinido en la calculadora HP PRIME. 3.2 Variables Globales | Capítulo 3 Programación en HP PPL 3.1.2Reserva de memoria Recordar Una variable es un lugar Cuando declaramos una variable le estamos diciendo al compilador que debe reservar espacio en la memoria de la donde se puede almacenar temporalmente un dato; las calculadora, que a cada espacio en la memoria le asigne un variables nos permiten guardar nombre y un número determinado de bytes, dependiendo información. del tipo de dato asignado; también se le dice qué tipos de datos puede almacenar. En PPL PRIME una variable es una posición de memoria de la calculadora con nombre. Las variables globales 1 2 Reservan memoria hasta 3 4 resetear la calculadora. 5 Las variables globales (programa): 6 7 Reservan memoria hasta 8 reiniciar calculadora. 9 10 Las variables locales: 11 (exportación): EXPORT varA: varB; varC; EXPORT MYPROGAM() LOCAL var1; //Real. LOCAL var2:=""; //Cadena. LOCAL var3:=(0,0); //Complejo. LOCAL var4:=[0]; //Vector. LOCAL var5:=[[0]]; //Matriz. LOCAL var6:={}; //Lista. LOCAL var7:='0'; //Expresion. END; Reservan memoria hasta salir del programa donde 3.2 Variables Globales se declaró dicha variable. Son aquellos valores que se declaran en un programa y pueden ser reconocidos en cualquier otro programa de la calculadora (visible en cualquier lugar de la calculadora) o solo en el mismo programa.. “ Estos variables se clasifican en los siguientes tipos: Cualquier variable global es siempre culpable hasta que se demuestre lo contrario. 3 Variables de inicio. ser modificadas en cualquier lugar dentro del código fuente, riayala@uc.cl 2 Variables globales de exportación. — Martin Fowler las variables globales pueden por lo tanto hacen que los programas sean más difíciles de depurar y mantener. 26 1 Variables globales en un programa. 3.2.1Variables globales en un programa Son aquellos variables que se declaran dentro de un programa, y pueden ser utilizados en todos los subprogramas o funciones de dicho programa. 3.2 Variables Globales | Capítulo 3 Programación en HP PPL aplicado a la ingeniería civil 3.2.1.1 ¿Cómo se declara? Estas variables se declaran fuera de los subprogramas o funciones y antes de ser utilizados. En las línea de código 1 y 2 se 1 2 VarG1; //Variable Global sin asignar VarG2:=5; //Variable Global asignado 3 4 5 6 EXPORT Ejemplo() BEGIN VarG1:=10+VarG2; END; 7 8 9 10 Funcion1() BEGIN VarG1:=100+VarG2; END; 11 12 13 14 Funcion2() BEGIN VarG1:=1000+VarG2; END; declaran las variables globales VarG1 y VarG2 los cuales son utilizadas en todo el programa. 3.2.2Variables globales de exportación Son variables que después de ejecutar el programa, esta puede ser exportada desde el programa utilizando el comando EXPORT . Para hacer esto, el primer comando en el Sugerencia La declaración de este tipo de variables se puede utilizar para la creación de una pequeña programa (es decir, en una línea por encima del nombre del base de datos en el lenguaje de programa) sería EXPORT Variable. Si se le asigna un valor a programación PPL PRIME. la Variable, el nombre aparece en el menú de variables a y es visible de forma global. Esta característica permite una interactividad amplia y poderosa entre diferentes entornos de la calculadora HP Prime. Tenga en cuenta que si otro programa exporta una variable con el mismo nombre, estará activa la variable exportada con su valor asignado más recientemente. En el programa le solicita al usuario el valor de RADIUS y exporta la variable para poder usarla fuera y también dentro Figure 3.1 Variable global de exportación 27 riayala@uc.cl del programa. 3.2 Variables Globales | Capítulo 3 Programación en HP PPL 1 EXPORT RADIUS; 2 3 4 5 6 7 EXPORT GETRADIUS() BEGIN LOCAL Area; Area:=PI()*RADIUS^2; RETURN Area; END; La figura 3.2.2 muestra a la variable RADIUS de forma global, el cual ya puede ser exportado por otro programa. 3.2.3Variables de inicio Recordar Estas variables no necesitan ser declaras. Son las variables que poseen nombres reservados en la calculadora, es decir ya están declarados por defecto dentro de la calculadora y no necesitan ser declarados nuevamente, osea se puede usar de manera libre dependiendo del tipo da de dato asignado por defecto. ¡Cuidado! El dato almacenado en estas Por ejemplo, las variables integradas A a Z pueden variables puede ser modificado utilizarse para almacenar números reales, Z0 a Z9 pueden por otro programa que utilice utilizarse para almacenar números complejos, M0 a M9 dicha variable. pueden utilizarse para almacenar matrices y vectores y así sucesivamente. Estos nombres están reservados. No se pueden usar para otros datos. Por ejemplo, no puede darle a un programa el nombre M1ni almacenar un número real en una variable denominada Z8. riayala@uc.cl Estos variables se clasifican en los siguientes tipos: Nro Tipo 1 Real (A, B, C...Z) 2 Complejos (Z0, Z1, Z2...Z9) 3 Listas (L0, L1, L2...L9) 4 Matrices (M0, M1, M2...M9) 5 Gráficos (G0, G1, G2...G9) 6 Configuración 7 Sistema Tabla 3.2 28 Leyenda del teclado 1. Reales. 3.2 Variables Globales | Capítulo 3 Programación en HP PPL aplicado a la ingeniería civil 2. Complejos. 3. Listas. Estos nombres están reservados solo para el tipo LISTA y no se pueden usar para otros tipos de datos. 4. Matrices. Estos nombres están reservados solo para el tipo MATRIZ y no se pueden usar para otros tipos de datos. Estos nombres están reservados solo para el tipo MATRIZ y no se pueden usar para otros tipos de datos. 29 riayala@uc.cl 5. Gráficos. 3.3 Variables locales | Capítulo 3 Programación en HP PPL 6. Configuración. 7. Sistema. 3.2.3.1 ¿Cómo se utilizan? Estas variables se utilizan según el tipo de dato asignado por una operación, por ejemplo, si se desea sumar dos números reales puede asignarse con la variable A , y si se desea realizar operaciones con matrices se debe asignar con la variable M1 . Figure 3.2 Resultados del programa VarInicio 1 2 3 4 5 6 EXPORT VarInicio() BEGIN A:=10 + 20; M1:=[[1,1],[1,1]] + [[2,2],[2,2]]; RETURN {A,M1}; END; 3.3 Variables locales Recordar Las variables locales hacen que riayala@uc.cl los programas sean más fáciles de depurar y mantener. En un programa puede declarar variables para usar solo dentro de una función específica. El uso de variables locales le permite declarar y utilizar variables que no afectarán el resto de la calculadora. Las variables locales no están vinculadas a un tipo particular; es decir, puede almacenar 30 números reales, enteros, listas, matrices y expresiones simbólicas en una variable con cualquier nombre local. ¡Cuidado! Estos variables se clasifican en los siguientes tipos: Aunque el sistema te permite 1 Variables locales dentro de un subprograma o función. 2 Variables locales como parámetro formal. almacenar distintos tipos en la misma variable local, esto es una mala práctica de programación y 3.3 Variables locales | Capítulo 3 Programación en HP PPL aplicado a la ingeniería civil debe ser evitada. Estas variables dejan de existir una vez que la función es ejecutada. Las variables locales se vuelven a crear cada vez que la función es llamada, o ejecutada. Estas variables no son accesibles para otras funciones o para el programa principal y, como tal, por lo general están implementados utilizando un tipo especial de estructura de datos, conocido como pila. 3.3.1Variables locales dentro de un subprograma o función Para declarar las variables locales de este grupo se utiliza el comando LOCAL , considerando que primero se debe declarar ¡Cuidado! Máximo se puede declarar 8 variables con el comando LOCAL. la variable para luego ser utilizada. La sintaxis para declarar este tipo de variables es la Recordar No se puede repetir la siguiente: declaración de una misma variable en una sola línea. EXPORT VarLocal() BEGIN LOCAL Var1, Var2, Var3, ..., Var8; //Solo se podran utilizar en esta funcion. RETURN Var8; END; 7 8 9 10 11 12 Funcion1() BEGIN LOCAL Var1:=5, Var2:=[0], Var3:={0}; //Solo se podran utilizar en esta funcion. RETURN Var2; END; Como se mencionó anteriormente Recordar Todo los tipos de variable pueden ser asignados con algún tipo de dato, ya sea numérico, matriz, vector, lista, etc. Tal como se muestra en la linea 9 del programa VarLocal. y para realizar operaciones con las variables es necesario declararlo con un valor inicial vació o algún valor que se le puede 31 riayala@uc.cl 1 2 3 4 5 6 3.4 Variables de aplicaciones y de usuario | Capítulo 3 Programación en HP PPL asignar dependiendo al tipo de dato que se desea utilizar en el programa. Esto también es funcional para las variables globales. Recordar Todos los tipos de variables 1 2 pueden ser una combinación 3 4 de letras, números, caracteres, 5 símbolos sin dejar espacios entre 6 7 ellos. 8 9 10 EXPORT Variables() BEGIN LOCAL var1; LOCAL var2:=""; LOCAL var3:=(0,0); LOCAL var4:=[0]; LOCAL var5:=[[0]]; LOCAL var6:={}; LOCAL var7:=`0`; END; 3.3.2Variables locales como parámetro formal Otra manera de declarar las variables locales es como un parámetro de una función creada dentro del programa, a continuación, se muestra un ejemplo de ello. La función VarParametro tiene 3 parámetros (Var1,Var2,Var3) que se comportarán como variables locales. 1 2 3 4 5 6 7 EXPORT VarParametro(Var1,Var2,Var3) BEGIN Var1:= 2+2; Var2:= Var1^3; Var3:= Var2+Var1; RETURN Var3; END; 3.4 Variables de aplicaciones y de usuario Las aplicaciones y programas creados en el lenguaje de programación PPL PRIME contienen variables creados por defecto o con el comando EXPORT . riayala@uc.cl 3.4.1Variables de aplicaciones. Son las variables que se utilizan para almacenar datos en Figure 3.3 Variables de aplicaciones 32 las aplicaciones o para cambiar la configuración de la 3.5 Identificadores de variables | Capítulo 3 Programación en HP PPL aplicado a la ingeniería civil aplicación. Poseen nombres reservados y no pueden ser creados por el usuario. 3.4.2Variables de usuario Son variables creadas por el usuario. Puede crear variables de usuario en un programa o por asignación en la vista de inicio. Las variables de usuario creadas por asignación o exportadas desde un programa aparecerán en el menú de usuario Vars. Figure 3.4 Variables de usuario. 3.5 Identificadores de variables Son valores asignados en una variable para ser operados dentro de un programa. Tipo de objetos o identificadores de variables. Valor asignad Nombre objeto 0 Real 1 Entero 2 Cadena 3 Compleja 4 Matriz 5 Error 6 Lista 8 Función 9 Unidad Sugerencia Estos objetos sirven en la creación de formularios para el ingreso de un tipo específico de dato. 33 riayala@uc.cl Tabla 3.3 3.6 Operadores | Capítulo 3 Programación en HP PPL Vimos que podíamos definir variables, ahora estas variables están asociarlas a un tipo de objeto específico del lenguaje PPL PRIME, estos objetos se muestran en la tabla 3.3. 3.6 Operadores Un operador es un símbolo que permite relacionar dos datos en una expresión y evaluar el resultado de la operación. La calculadora HP PRIME se apoyan esencialmente en la realización de numerosas operaciones aritméticas y matemáticas de diferente complejidad. Los operadores fundamentales son: 1 Aritméticos. 2 Relacionales. 3 Lógicos. 4 Asignación. 3.6.1Operadores aritméticos. Recordar alt + 92 : ˆ alt + 47: / Los operadores aritméticos +, −, *, /, ^ pueden ser utilizados con tipos enteros, reales, matrices, listas y sirven para realizar operaciones aritméticas básicas. Por ejemplo si a:=15 y b:=5 , vemos los resultados con los diferentes operadores aritméticos. 3.6.2Operadores relacionales Recordar alt + 60 : < alt + 62 : > alt + 61 : = Describen una relación entre dos valores; por lo tanto, se usan para expresar condiciones y comparar dos valores. El resultado de una expresión relacional es un valor tipo lógico riayala@uc.cl o booleano, sólo puede ser verdadero o falso. El lenguaje HP PPL representa como verdadero el valor 1 y como falso el valor 0. relacionales. 34 En la tabla 3.4 se muestran los operadores Tabla 3.4 3.6 Operadores | Capítulo 3 Programación en HP PPL aplicado a la ingeniería civil Tipo de operadores relacionales. Valor asignado Nombre objeto > Mayor que < Menor que == , = Igual que >= , ≥ Mayor o igual que <= , ≤ Menor o igual q ue ≠ Distinto a 3.6.3Operadores lógicos Las expresiones lógicas1 pueden combinarse para formar 1. Para la evaluación de expresiones expresiones más complejas utilizando los operadores lógicas es importante conocer la lógicos. En la tabla 3.5 se muestran dichos operadores. Estos tabla de verdad. operadores trabajan con operandos que son expresiones lógicas. Tabla 3.5 Tipo de operadores relacionales. Valor asignado Nombre objeto AND y OR o NOT no 3.6.4Operadores de asignación El operador de asignación permite evaluar una expresión y asignar el resultado en una variable. El en lenguaje de programación PPL PRIME, existen dos maneras de asignar una expresión como se muestra a continuación . Con la asignación anterior le estaremos indicando a la calculadora que evalúe la expresión y la almacene en la variable que define el identificador . Estos operadores 35 riayala@uc.cl Identificador:=Expresion; ExpresionIdentificador; 3.6 Operadores | Capítulo 3 Programación en HP PPL permiten transferir el dato de una variable a otra. 3.6.5Ejemplo de operadores En el código 3.1 se muestra el uso de los operadores mas utilizados en la programación. Código 3.1: Operadores Figure 3.5 Resultados del programa Operadores 1 2 3 4 5 6 7 8 9 10 11 EXPORT Operadores() BEGIN LOCAL r,m,l,e,a:=5,b:=4,c:=2,d:=9; LOCAL y; r:=a^b;//Asignacion y operadores aritmetico. a+bm; //Asignacion y operador aritmetico. l:=b>d; //Operador relacionales. e:=r<c; //Operador relacionales. y:=l AND e; //Operador logico. RETURN {r,m,l,e,y}; END; 3.6.6Operaciones con cadenas Los caracteres son un tipo de datos que siempre deben estar declarados entre comillas (“ ”), generalmente sirven para la impresión de textos, fórmulas, y o ayudas en los formularios Figure 3.6 Resultados del programa CTEXTOUT de entradas. Una cadena puede concatenarse con los diferentes tipos de datos que existen, dándonos como resultado una nueva variable del tipo cadena, por ejemplo: Figure 3.7 Resultados del programa CPRINT 1 2 3 4 5 6 7 >> "a"+2 = "a2" >> "a"+2.25 = "a2.22" >> "a "+2 = "a 2" >> "a+"+2 = "a+2" >> "a"+{1,2,3} = "{a1,a2,a3} " >> "a"+[1,2,3] = "a[1,2,3]" >> "Resultado="+10 = "Resultado=10" También existen diferentes comandos para trabajar con las riayala@uc.cl cadenas. 1 Cadenas en comando PRINT. Figure 3.8 Resultados del programa CMSGBOX 36 3.6 Operadores | Capítulo 3 Programación en HP PPL aplicado a la ingeniería civil EXPORT CPRINT() BEGIN LOCAL Var:=10000; PRINT(); PRINT("La Variable A = " + Var + " metros"); END; 2 Cadenas en el comando TEXTOUT. EXPORT CTEXTOUT() BEGIN LOCAL Var:=10; RECT(); TEXTOUT_P(" A = " + Var + " metros", 10, 10 ,1); WAIT; END; 3 Cadenas en el comando MSGBOX. EXPORT CMSGBOX() BEGIN LOCAL Var:=10; MSGBOX("La Variable A = " + Var + " metros"); END; A continuación se conocerá algunos comandos con lo que podrás manejar las variables de tipo cadena. Comando STRING Evalúa una expresión y devuelve el resultado como una cadena. Si se especifica el Modo, debe ser los valores de la tabla 3.3. Sintaxis: STRING(Expresión,[Modo],[Precision],[Separador]) Los parámetros [Modo], [Precision] y [Separador] especifican cómo se muestran los números. 37 riayala@uc.cl Figure 3.9 Resultados del comando STRING. 3.7 Palabras reservadas. | Capítulo 3 Programación en HP PPL Ejemplo STRING en Home 3.1 STRING(F1), F1(X) = COS(X) devuelve "COS(X)" STRING(2/3), devuelve 0,666666666667 STRING(M1), devuelve "[[1,2,3], [4,5,6]]" Comando DIM Devuelve el número de caracteres de cadena o las dimensiones de la Matriz. Sintaxis: DIM(cadena)o DIM(matriz) Ejemplo DIM en Home 3.2 DIM("12345") devuelve 5 DIM([[1,2],[4,5],[7,8]]) devuelve {3,2} DIM({"12345","HP PRIME"}) devuelve {5,8} Recordar Si n>DIM(str) o n<0 , DIM Comando LEFT Dada una cadena y un número entero n, devuelve la cadena completa. devuelve los primeros caracteres n de la cadena. Sintaxis: LEFT(str,n) Ejemplo LEFT en Home 3.3 LEFT("HP−PRIME",3) devuelve "HP−" LEFT("HP−PRIME",−1) devuelve "HP−PRIME" LEFT("PRIME",7) devuelve "PRIME" Sugerencia En tu programa puedes Comando CHAR utilizar este comando para códigos de caracteres UNICODE numéricos en Lista o Vector. para convertir tus datos de tipo cadena a un caracteres UNICODE. Devuelve la cadena correspondiente a los Sintaxis: CHAR(vector), CHAR(entero)o CHAR(lista) Ejemplo CHAR en Home 3.4 CHAR([82,77,72]) devuelve "RMH" CHAR({52,67,89,52,52}) devuelve "4CY44" 3.7 Palabras reservadas. Son palabras propias del lenguaje, ya que el creador del Recordar Existen más de 600 funciones riayala@uc.cl que ya tienen sus palabras reservadas, por lo tanto no pueden ser declaras como variables. 38 mismo les dio un uso específico. No se pueden utilizar como identificadores. Tabla 3.6 3.7 Palabras reservadas. | Capítulo 3 Programación en HP PPL aplicado a la ingeniería civil Tipo de objetos o identificadores de variables. Lenguaje PPL PRIME Función que realiza COS Calcula el coseno de un ángulo. SIN Calcula el seno de un ángulo. COT Calcula la cotangente de un ángulo. CSC Calcula la cosecante de un ángulo. DET Calcula el determinante de una matriz. EXP eX TAN Calcula la tangente de un ángulo. LOG Calcula el logaritmo de un número. LU Realiza la factorización de una matriz. SQRT Calcula la raíz cuadrada ABS() Calcula el valor absoluto 39 riayala@uc.cl ... riayala@uc.cl 3.7 Palabras reservadas. | Capítulo 3 Programación en HP PPL 40 Capítulo 4 Estructuras Secuenciales y Manejo de Gráficos Resumen 4.1 4.2 4.3 4.4 Ingreso de datos, 42 Salida de datos, 50 Introducción al manejo de gráficos, 54 Ejercicios, 72 4.1 Ingreso de datos | Capítulo 4 Programación en HP PPL En este capítulo aprenderemos cómo ingresar valores por el teclado y/o pantalla y hacer que estos se guarden en variables. Nos permitirá hacer programas cuya ejecución cambie según un valor que ingresemos. 4.1 Ingreso de datos Ingreso de datos Consiste en asignar a una o más variables, uno o más valores (datos) recibidos desde el exterior. La entrada de datos consiste en colocar en la memoria principal datos provenientes desde algún dispositivo de entrada ( teclado, pantalla, etc. ) para que la calculadora, de acuerdo a un programa, realice una tarea. Existen Muchas maneras de ingreso de datos en la creación de programas; el más simple es utilizando el comando INPUT con sus diferentes variables, también se puede realizar el ingreso de datos a través de la pantalla táctil de la calculadora y uno más avanzado es con la creación formularios interactivos. Entonces tenemos las siguientes maneras para el ingreso de datos en el lenguaje de programación PPL PRIME. 1 Ingreso de datos como parámetro de una función. 2 Ingreso de datos con el comando INPUT . 3 Ingreso de datos con el comando CHOOSE . 4 Ingreso de datos a través de la pantalla táctil. 5 Ingreso de datos con formularios interactivos. 6 Ingreso de datos a través de matrices y vectores. 4.1.1Ingreso de datos como Función Los programas más simples no necesitan de la creación de formularios basta con la asignación de variables para poder operar y funcionar adecuadamente. Esto se puede riayala@uc.cl realizar mediante el ingreso de datos como parámetro de una función. Al momento de crear un programa se le asigna al nombre 42 4.1 Ingreso de datos | Capítulo 4 Programación en HP PPL aplicado a la ingeniería civil del programa los parámetros que serían las variables del programa. Esto quedaría de la siguiente manera; EXPORT−RArea(b,h) , donde b y h son las variables locales del programa. Ejemplo Propiedades geométricas de un rectángulo 4.1 Elabore un programa el cual calcule las propiedades geométricas de un rectángulo, dado su base y altura como dato de ingreso. Solución: El código 4.1 calcula las propiedades dinámicas de un rectángulo. Código 4.1: RArea 5 6 7 8 9 10 11 EXPORT RArea(b,h) BEGIN //Declarando las variables locales utilizadas. LOCAL Area,Perimetro,Inercia; //Proceso de calculo. Area:=b*h; Perimetro:=2*b+2*h; Inercia:=b*h^3/12; Figure 4.1 Programa RArea desde HOME //Salida de datos. RETURN {"A="+Area,"2P="+Area,"I="+Area}; END; 4.1.2Comando INPUT Este comando permite crear un formulario más desarrollado para el ingreso de datos Figure 4.2 Formulario del ingreso de datos programa RArea La forma más sencilla de este comando abre un cuadro de diálogo con el título dado y un campo denominado etiqueta, y muestra el contenido de ayuda en la parte inferior. El cuadro de diálogo incluye las teclas de menú CANCEL y OK. Se puede ingresar un valor en el campo etiquetado. En las formas más complejas del comando, se utilizan listas para crear un cuadro de diálogo con varios campos. Si las Figure 4.3 Resultados del programa RArea variables son una lista, cada elemento puede ser un nombre 43 riayala@uc.cl 1 2 3 4 4.1 Ingreso de datos | Capítulo 4 Programación en HP PPL de variable o una lista que usa la siguiente Sintaxis Forma simple I: INPUT(Var,tit,etiq) Forma simple II: INPUT(Var,tit,etiq,ayud,reset,ini) Forma compleja I: INPUT({Var},{tit},{etiq}) Forma compleja II: INPUT({Var},{tit},{etiq},{ayud},{reset},{ini}) Propiedades de Var { Aa ,[0] ,{25,30,0} } → Caja real. { Bb ,[1] ,{25,30,1} } → Caja donde: Var : Propiedades de las Variables para cada caja de entrada. tit : Titulo del formulario (cadena). entero. { Cc ,[6] ,{25,30,2} } → Caja lista. { Dd ,{”a”} ,{25,30,3} } → Choose. { Ee ,0 ,{25,30,4} } → Check. etiq : Etiqueta para cada caja de entrada (cadena). ayud : Textos de ayuda para cada caja de entrada (cadena). reset : Datos de reseteo para cada caja de entrada. ini : Datos de inicio para cada caja de entrada. Con respecto a las propiedades de las variables Var para cada caja de entrada, este tendrá 3 parámetros obligatorios Var={1,2,3} de los cuales se detallará. Parámetro 1. Variables asignadas para cada caja de entrada. Parámetro 2. Tipo de ingreso ([objeto]=cajas de entrada, 0= caja tipo check, { cadenas } = entrada tipo choose). Parámetro 3. Dimensiones y posición de las diferentes tipos de entrada {tamaño, posición x, nivel }. Ejemplo Area de un círculo - INPUT simple 4.2 Programa que calcula el área de un círculo, dado radio como dato de ingreso. Solución: riayala@uc.cl El código 4.2 calcula el área de un círculo. Figure 4.4 Ingreso de datos del programa CArea 44 4.1 Ingreso de datos | Capítulo 4 Programación en HP PPL aplicado a la ingeniería civil Código 4.2: RArea 1 2 3 4 5 6 7 EXPORT CArea() BEGIN LOCAL radio,area; INPUT(radio, "Area","R = ","Ingrese radio",1); area:=PI()*radio^2; RETURN area; END; La forma mas simple del comando INPUT no necesita detallar la propiedades de las cajas de entrada de la variable. Ejemplo Forma completa 4.3 Elabore un código que permita crear un formulario de ingreso de datos con todos los parámetros del comando INPUT. Sugerencia Puede utilizar estos códigos Solución: Estructura del comando INPUT: como referencia(plantilla) para crear formularios de entrada con el comando INPUT Código 4.3: RInput EXPORT RInput BEGIN LOCAL Aa,Bb, Cc,Dd,Ee; INPUT ( { {Aa,[0],{40,30,0}}, {Bb,[1],{40,30,1}}, {Cc,[6],{40,30,2}}, {Dd,{"EscA","EscB","EscC"},{40,45,3}}, {Ee,0,{40,0,5}} }, "TITULO DEL FORMULARIO", { "Etiqueta 1: ", "Etiqueta 2: ", "Etiqueta 3: ", "Etiqueta 4: ", "Etiqueta 5: " }, { "Ayuda 1", "Ayuda 2", "Ayuda 3", "Ayuda 4", "Ayuda 5" }, {2.5,20,{2,5},2,0}, {2.5,20,{2,5},2,0} ); END; Figure 4.5 Ejecución del programa RInput Figure 4.6 Ejecución del programa RInput ¡Cuidado! Posición X + Tamaño < 100, para no tener problemas con la compilación del programa. 45 riayala@uc.cl 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 4.1 Ingreso de datos | Capítulo 4 Programación en HP PPL Las variables Son asignadas de la siguiente manera. {Aa,[0],{40,30,0}} donde: Aa : Variable asignada para la caja de entrada 1. [0] : Tipo de objeto ([0] = real, [6] = lista,[1] = entero) ver tabla 3.3. {40,30,0} : {Tamaño, Posición X, Nivel} Tamaño caja = 40 ; Posición X = 30 ; nivel = 0. {Dd,{"Esc A","Esc B","Esc C"},{40,45,3}} donde: Dd : Variable. {"Esc A","Esc B","Esc C"} : entrada choose. {40,45,3} : {Tamaño, Posición X, Nivel} Tamaño caja = 40 ; Posición X = 45 ; nivel = 3. {Ee,0,{40,0,5}} donde: Ee : Variable asignada para la caja de entrada 5. 0 : Caja tipo Check. {40,0,5} : {Tamaño, Posición X, Lineas Y} Tamaño caja = 0 ; Posición X = 40 ; nivel = 5. 4.1.3Comando CHOOSE Este comando muestra un cuadro de elección con los parámetros obligatorios "titulo" y los parámetros o elementos con las cadenas "elem1","elem2",...,"elemn" . Si el usuario selecciona un objeto, las variables var se actualizarán para contener el número del objeto riayala@uc.cl seleccionado (un número entero, 1, 2, 3,...); de lo contrario, almacena 0 en var esto pasa si el usuario sale sin realizar una selección. 46 4.1 Ingreso de datos | Capítulo 4 Programación en HP PPL aplicado a la ingeniería civil Sintaxis CHOOSE(var, "titulo", "elem1", "elem2",...,"elemn") Ejemplo Forma completa 4.4 Programa que ejcute el comando, después de ejecutar wl comando CHOOSE, el valor de N se actualizará para contener 0, 1, 2 o 3. El comando IF THEN ELSE hace que el nombre de la persona seleccionada se imprima en el terminal. Solución: Código del programa: Código 4.4: PChoose EXPORT PChoose() BEGIN CHOOSE(N, "SeleccionarHero", "Euler", "Gauss", "Newton"); IF N==1 THEN PRINT("Ha seleccionado Euler"); ELSE IF N==2 THEN PRINT("Ha seleccionado Gauss"); ELSE PRINT("Ha seleccionado Newton"); END; END; END; 4.1.4Pantalla táctil Figure 4.7 Ejecución del programa PChoose Figure 4.8 Ingreso de datos a través de la pantalla táctil La calculadora HP PRIME permite el ingreso de datos a través de su pantalla táctil, para ello utiliza los comandos MOUSE y WAIT , en capítulos posteriores se desarrollara a detalle este tipo de ingreso de datos. También se debe conocer el manejo de los gráficos Figure 4.9 Ejemplo 1 de formularios Interactivos en la programación, ya sea en coordenadas de pixel o coordenadas cartesianas, entendiendo todo referido a la declaración de variables gráficas y el uso del comando BLIT . 4.1.5Formularios interactivos Este tipo de ingreso de datos consiste en crear un formulario personalizado al gusto del programador. Al igual que el Figure 4.10 Ejemplo 2 de formularios Interactivos 47 riayala@uc.cl 1 2 3 4 5 6 7 8 9 10 11 12 13 4.1 Ingreso de datos | Capítulo 4 Programación en HP PPL ingreso a través de la pantalla táctil la creación de este tipo de formularios necesita un conocimiento avanzado sobre programación el cual se irá desarrollando en cada capítulo de este libro. 4.1.6Ingreso de datos a través de matrices y vectores También se puede personalizar el ingreso y salida de datos a través de matrices, vectores y listas, para ello se utiliza los comandos EDITMAT y EDITLIST . 4.1.6.1 Comando EDITMAT Permite editar o ver una matriz específica. Este comando devuelve la matriz editada al finalizar. En programación nos permitirá ingresar y editar datos tipo matrices. Sintaxis Forma básica. EDITMAT(matriz); Forma avanzada. EDITMAT(matriz,{"TITULO",{"Fila"},{"Columna"}},[Var]); Si Var=0 , la matriz quedará bloqueada y será de solo lectura. Figure 4.11 Ejecución del programa iMatriz Ejemplo EDITMAT 4.5 Programa para el ingreso de datos a través de una matriz. Solución: Código del programa: Código 4.5: iMatriz riayala@uc.cl Figure 4.12 Ejecución del programa iMatriz 48 1 2 3 4 5 6 EXPORT iMatriz() BEGIN M1:=[[2,2],[3,3]]; M2:=EDITMAT(M1); M3:=EDITMAT(M1,{"TITULO",{"F1","F2",""} ,{"C1","C2",""}}); END; 4.1 Ingreso de datos | Capítulo 4 Programación en HP PPL aplicado a la ingeniería civil 4.1.6.2 Comando EDITLIST Permite editar o ver una listas específica. Este comando devuelve la listas editada al finalizar. En programación nos permitirá ingresar y editar datos tipo listas. Sintaxis Forma básica. EDITLIST(matrizvar); Forma avanzada. EDITMAT(matriz,"TITULO",[Var]); Si Var=0 , la lista quedará bloqueada y será de solo lectura. Ejemplo EDITLIST 4.6 Programa para el ingreso de datos a través de una iLista. Figure 4.13 Ejecución del programa iLista Solución: Código del programa: Código 4.6: iLista EXPORT iLista() BEGIN L1:={1,2,3,4,5}; L2:=EDITLIST(L1); END; 4.1.7Ejercicios Para cada caso, realizar el código fuente en el lenguaje PPL PRIME de los formularios mostrados. Ejercicio 1 Realizar el código fuente para el siguiente formulario. 49 riayala@uc.cl 1 2 3 4 5 4.2 Salida de datos | Capítulo 4 Programación en HP PPL Ejercicio 2 Realizar el código fuente para el siguiente formulario. Ejercicio 3 Realizar el código fuente para el siguiente formulario. 4.2 Salida de datos Salida de datos Consiste en llevar hacia el exterior los valores (datos) Los datos de salida son datos derivados, es decir, obtenidos a partir de los datos de entrada. Por esta razón, a los obtenidos de la evaluación de un datos de salida se les considera más significativos que a los conjunto de expresiones. datos de entrada. Ambos tipos de datos son información (textos y imágenes) que maneja la calculadora. Sin embargo, en un sentido más filosófico, a los datos de entrada se les considera la materia prima de los datos de salida, considerados estos como la verdadera información. Al igual que el ingreso de datos la calculadora presenta una gama de formatos de salida de datos por defecto y personalizadas entre ellos tenemos. riayala@uc.cl 1 Comando MSGBOX . 2 Comando PRINT . 3 A través de Gráficos. 50 4.2 Salida de datos | Capítulo 4 Programación en HP PPL aplicado a la ingeniería civil 4 A través de matrices y listas. 4.2.1Comando MSGBOX Muestra un cuadro de mensaje con el valor de la expresión o cadena dada, en donde muchas veces se utiliza la concatenación de cadenas para obtener etiquetas en los resultados. Sintaxis Forma I. MSGBOX(expresion,[ok−cancel]); Forma II. MSGBOX(cadena,[ok−cancel]); Si ok−cancel=1 (verdadero), muestra las teclas de menú OK Y CANCELAR el caso contrario muestra solo la tecla del menú OK. Figure 4.14 Ingreso del valor R = 10 Ejemplo Área de un circulo. 4.7 Programa que calcula el área de un círculo, dado radio como dato de ingreso el radio. Solución: Código del programa: Código 4.7: ACir 1 2 3 4 5 6 7 EXPORT ACir() BEGIN LOCAL radio,ar; INPUT(radio,"Radio:","R = ","Radio(m)",1); ar:=PI*radio^2; MSGBOX("El area del circulo es:" + ar + " m2"); END; Figure 4.15 Ejecutando el programa: Impresión a través de MSGBOX 1. El terminal es un mecanismo de visualización de la salida de texto de un programa que muestra solo cuando se ejecutan los comandos Imprime el resultado de una expresión o cadena en el terminal1 . También se utiliza la concatenación de cadenas para obtener etiquetas en los resultados. Sintaxis Forma I. PRINT(expresion); PRINT. Recordar Para crear una pantalla nueva se debe escribir el siguiente comando, PRINT(); (Borrar el terminal) esto para no generar impresiones anteriores hechas con PRINT . 51 riayala@uc.cl 4.2.2Comando PRINT 4.2 Salida de datos | Capítulo 4 Programación en HP PPL Forma II. PRINT(cadena); Si ok−cancel=1 (verdadero), muestra las teclas de menú OK Y CANCELAR el caso contrario muestra solo la tecla del menú OK. Ejemplo Área de un circulo. 4.8 Programa que calcula el área de un círculo, dado radio Figure 4.16 Ingreso del valor R = 10 como dato de ingreso el radio. Solución: Código del programa: Código 4.8: ACir Figure 4.17 Ejecutando el programa: Impresión a través de PRINT 1 2 3 4 5 6 7 8 EXPORT AREACALC() BEGIN LOCAL radio,ar; INPUT(radio, "R:","R = ","Radio(m)",1); ar:=PI*radio^2; PRINT(); PRINT("El radio es: " +ar); END; 4.2.3Salida de datos a través de gráficos. El manejo de gráficos permiten realizar la salida o impresión de datos y resultados ya sea de manera textual o gráfica. Para obtener un resultado textual generalmente se utiliza el comando TEXTOUT_P , y otros comandos más para los resultados gráficos. riayala@uc.cl Figure 4.18 Vista de resultados de manera textual y gráfica. 52 4.2 Salida de datos | Capítulo 4 Programación en HP PPL aplicado a la ingeniería civil 4.2.4Ejercicios resueltos Ejercicio 4.1 Momento de Inercia. Realizar un programa donde se calcule el momento de inercia geométrico de un rectángulo con respecto al eje X y Y. 1. Variables de entrada: Longitud de Base del rectángulo y altura del rectángulo. 2. Proceso: Calculo de Momentos de inercia. 3. Salida de datos: Momento de inercia con respecto al eje X y Y. Solución: Código del programa. Código 4.9: Momento de Inercia EXPORT MI() BEGIN //1 ‐>Declaracion de variables. LOCAL a , b, Ix, Iy, Icg; 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 //2 ‐>Ingreso de datos. INPUT ( { {a ,[0],{ 25,25,0}}, {b ,[0],{ 25,20,1}} }, "MOMENTO DE INERCIA" , { " Base: " , " Altura : " }, { " Ingrese la base del rectangulo (cm)" , " Ingrese la altura del rectangulo (cm)" }, {25,20 }, {25,20 } ); 24 25 26 27 //3 ‐>Calculo de momentos de inercia. Icg:=b*a^3/12; Ix:=Icg+b*a*(a/2)^2; Iy:=Icg+b*a*(b/2)^2; 28 29 30 //4 ‐>Salida de datos. PRINT(); //‐>limpiar pantalla PRINT(" CALCULO DE MOMENTO DE INERCIA"); Figure 4.19 Formulario de entrada del programa MI. Figure 4.20 Ejecutando el programa, vista de los resultados 53 riayala@uc.cl 1 2 3 4 4.3 Introducción al manejo de gráficos | Capítulo 4 Programación en HP PPL 31 32 33 34 35 36 37 38 PRINT(""); PRINT("1.−Momento de inercia I_cg"); PRINT(" Icg =" + Icg + " cm"); PRINT("2.−Momento de inercia Ixx"); PRINT(" Ixx =" + Ix + " cm"); PRINT("3.−Momento de inercia Iyy"); PRINT(" Iyy =" + Iy + " cm"); END; 4.3 Introducción al manejo de gráficos 4.3.1Variables gráficas Recordar La variable G0 es siempre el gráfico de la pantalla actual. Existen 10 variables de gráficos integradas en HP Prime llamadas G0−G9 . actual. Recordar Las variables desde G1 hasta el G9 se utilizan para almacenar todo tipo de objetos gráficos. G1 G0 es siempre el gráfico de la pantalla a G9 pueden utilizarse para almacenar los objetos gráficos temporales (abreviados GROBs2 ) al programar aplicaciones que usen gráficos. Son temporales y por consiguiente, se borran al apagar la calculadora. Se pueden usar veintiséis funciones para modificar Recordar Existen 26 funciones para el manejo de gráficos; 13 para las variables de gráficos. Trece de ellas trabajan con coordenadas cartesianas utilizando el plano cartesiano coordenadas cartesianas y 13 definido en la aplicación actual por las variables Xmin , para píxeles. Xmax , Ymin e Ymax . Las trece restantes trabajan con coordenadas de píxel donde el píxel 0,0 es el píxel superior 2. Son objetos gráficos creados en la pantalla izquierdo de la pantalla y 320, 240 es el inferior derecho. Las funciones de este segundo conjunto tienen un sufijo _P para el nombre de la función. 4.3.2Coordenadas cartesianas y de píxel Como se detalló en la sección anterior la calculadora HP PRIME presenta dos sistemas de coordenadas basadas en su riayala@uc.cl pantalla física que sirven para el manejo adecuado de los gráficos. 54 4.3.2.1 Coordenadas cartesianas El sistema de coordenadas cartesianas tienen el plano Recordar Este sistema dependen cartesiano definido en la aplicación actual por las variables básicamente de los valores Xmin , asignados a las variables Xmin, Xmax , Ymin e Ymax , en la figura 4.21 muestra las características de este sistema. Figure 4.21 Sistema de coordenadas cartesianas. Ymax, Xmax y Ymin Recordar Los valores de Xmax y Ymin no coinciden con la esquina inferior derecha de la pantalla 4.3 Introducción al manejo de gráficos | Capítulo 4 Programación en HP PPL aplicado a la ingeniería civil Sugerencia No es recomendable utilizar las coordenadas cartesianas en la creación de programas ! Importante : • Las variables Xmin, Ymax, Xmax y Ymin ya están definidos en el sistema. • Las coordenadas cartesianas están orientadas a representaciones matemáticas, estadísticas y similares. • Sin importar el tamaño de las variables gráficas, el punto fijo siempre será el [0,0], bajo ese fundamento es que podemos interactuar los diversos objetos gráficos con los comandos de dibujo. Un ejemplo práctico es el siguiente. 1 2 3 4 5 6 7 8 9 10 EXPORT CCartesianas() BEGIN FREEZE; Xmin:=10; Ymax:=100; Ymin:=20; Xmax:=90; RECT; RECT(Xmin,Ymin,Xmax,Ymax,RGB(240,0,0), RGB(240,240,240)); LINE(10,10,100,100); LINE(50,40,80,20,RGB(0,0,240)); END; Figure 4.22 Ejecutando el programa, vista de los resultados 55 riayala@uc.cl Código 4.10: Coordenadas Cartesianas 4.3 Introducción al manejo de gráficos | Capítulo 4 Programación en HP PPL 4.3.2.2 Coordenadas de píxel. Recordar La pantalla de la calculadora Las coordenadas de píxel son usadas comúnmente en tiene dimensiones de 320x240 cualquier dispositivo, puesto que se basan directamente píxeles. en las referencias del hardware, es decir que las pantallas siempre suelen basarse en referencias de píxel donde el punto [0,0] se encuentra en la esquina superior izquierda de la pantalla. Sin importar el tamaño de las variables gráficas, el punto fijo siempre será el [0,0], bajo ese fundamento es que podemos interactuar los diversos objetos gráficos con los comandos de dibujo. Recordar los comandos gráficos que Figure 4.23 Sistema de coordenadas de píxel. funcionan con píxeles tienen un sufijo _P incluído en su nombre. Recordar Todos los comandos gráficos tienen un parámetro opcionalel cual les permite almacenar el gráficos en una variables. Es recomendable utilizar este tipo de coordenadas para la creación de programas en el lenguaje PPL PRIME. Sugerencia Hay ocasiones donde no es importante almacenar los gráficos en una de las variables gráficas G0−G9 4.3.3Comandos de dibujo. Los comandos de dibujo tienen tareas como inicializar, dimensionar, editar píxeles, interactuar con el contenido Recordar Después o antes de realizar gráficos siempre es necesario riayala@uc.cl pausar o congelar la ejecución del programa para poder visualizar los gráficos en la pantalla actual. 56 entre gráficos y consultar datos; el formato común de estos comandos requieren parámetros como la variable gráfica a editar y las características de la acción. A continuación se verán los comandos mas utilizados en un programa. Comando FREEZE Este comando pausa la ejecución de un programa hasta que se pulse una tecla. Esto evita que la pantalla se congele después de finalizada la ejecución del programa, dejando la visualización modificada en la pantalla para que el usuario lo vea. Sintaxis FREEZE; Recordar Para realizar gráficos almacenados en una variable, Comando DIMGROB P Define las dimensiones wxh de un GROBs en una variable gráfica definida ( G ) con una siempre es necesario definir las dimensiones de trabajo, por defecto este comando toma dimensiones dados como parámetros. Este comando hace las dimensiones de 320x240 que se inicia el gráfico G con los parámetros dados. píxeles. 4.3 Introducción al manejo de gráficos | Capítulo 4 Programación en HP PPL aplicado a la ingeniería civil Sintaxis Tipo I: DIMGROB_P(G, w, h, [color]) ¡Cuidado! Tipo II: La variable gráfica G es un DIMGROB_P(DIMGROB_P(G, lista)) parámetro obligatorio para este Ejemplo Manejo del comando DIMGROB P. Creamos un objeto gráfico con dimensiones 640,480 píxeles. Solución: Código del programa: DIMGROB_P(G1,320,480); La pantalla de la calculadora solo admite una dimensión en píxles de 320x240, y muchas veces es necesario tener un área de trabajo con dimensiones mayores para ello se utiliza el comando DIMGROB P donde es sus parámetros se definen las dimensiones 640x480 como se muestra en la figura 4.3.3. Para poder acceder a las dimensiones que sobrepasan la pantalla se hace uso del comando BLIT P. 4.3.4Comando BLIT P Es importante conocer este comando ya que nos permite Figure 4.24 Creación de un GROB de trabajo con dimensiones 320x480 píxeles Sugerencia En la práctica, se agrega 1 a cada sx1 y sx2 para obtener la región correcta. 57 riayala@uc.cl 4.9 comando 4.3 Introducción al manejo de gráficos | Capítulo 4 Programación en HP PPL realizar muchas tareas importantes en el manejo de gráficos. Estas tareas pueden ser: 1 Insertar gráficos a la pantalla actual. 2 Mezclar gráficos. 3 Copiar gráficos (total o parcialmente). 4 Estirar una imagen. 5 Mezclar gráficos con transparencia. Sintaxis Tipo I: BLIT_P(Gf,Gi); Sugerencia Tipo II: Eliminar el contenido de las BLIT_P(Gf,dx1,dy1,dx2,dy2,Gi,sx1,sy1,sx2,sy2,[c],[alpha]) variables gráficas antes de finalizar el programa, ya que este Este comando copia la región de Gi (sx1, sy1, sx2, sy2) en la no se eliminará hasta apagar la región de Gf (dx1, dy1, dx2, dy2). calculadora, se puede realizar con la siguiente instrucción: donde: DIMGROB_P(G1,0,0). Gf : es cualquier variable gráfica. Recordar Los gráficos se deben El valor predeterminado es G0. entender como objetos de Gi : es otra variable gráfico. almacenamiento al igual que las c : puede ser cualquier color especificado. Si no variables comunes, solo usarlas se especifica, se copiarán todos los píxeles de si es necesario. Gi. Recordar Esto se logra a través del alpha : transparencia, alpha=255 es completamente opaco.. programa DIMGROB, el cual convierte una imagen Ejemplo en formato bmp a ICON, 4.10 El comando BLIT_P permite insertar gráficos en la pantalla este ultimo es leído por el de la calculadora, a través de un programa creado. lenguaje de programación de la calculadora. Insertar imágenes a la pantalla actual. Solución: Código del programa: Sugerencia Se debe verificar el tamaño en Código 4.11: PBLITa riayala@uc.cl pixeles de la imagen que se desea insertar, fácilmente se puede verificar con el software PAINT 58 1 2 3 4 ICON Imagen 89504E470D0A1...; //Continua EXPORT PBLITa() BEGIN RECT_P(G1); 5 6 7 8 9 4.3 Introducción al manejo de gráficos | Capítulo 4 Programación en HP PPL aplicado a la ingeniería civil BLIT_P(G1,"Imagen",0,0); BLIT_P(G1,"Imagen",−100,−100); BLIT_P(G0,G1); FREEZE; END; Figure 4.25 Programa PBLITa Ejemplo Copiar gráficos total. 4.11 La principal función del comando BLIT_P es de reemplazar las variables gráficas. Solución: Código del programa: Código 4.12: PBLITb 1 2 3 4 5 6 7 8 9 10 11 12 cA:=RGB(220,220,220); cB:=RGB(255,0,0); EXPORT PBLITb() BEGIN RECT_P(G1); RECT_P(G1,80,80,205,140,cB,cA); RECT_P(G1,0,0,320,20,cB,cA); RECT_P(G1,0,220,320,240,cB,cA); TEXTOUT_P("Hola Mundo",G1,100,100,4); BLIT_P(G0,G1); FREEZE; END; Figure 4.26 Programa PBLITb Ejemplo Copiar gráficos parcial. El comando BLIT_P también nos permite realizar el reemplazo de variables gráficas definidas en una coordenada específica. Solución: Código del programa: Figure 4.27 Programa PBLITc 59 riayala@uc.cl 4.12 4.3 Introducción al manejo de gráficos | Capítulo 4 Programación en HP PPL Código 4.13: PBLITc 1 2 3 4 5 6 7 8 EXPORT PBLITc() BEGIN LOCAL radio,ar; INPUT(radio, "R:","R = ","Radio(m)",1); ar:=PI*radio^2; PRINT(); PRINT("El radio es: " +ar); END; Ejemplo Reducir el tamaño de una imagen. 4.13 También haciendo un buen uso de los parámetros del comando BLIT_P podemos lograr reducir el tamaño en píxeles de un gráfico. Solución: Código del programa: Código 4.14: PBLITd Figure 4.28 Programa PBLITd 1 2 cA:=RGB(220,220,220); cB:=RGB(255,0,0); 3 4 5 EXPORT PBLITd() BEGIN RECT_P(G0); 6 7 8 9 10 11 12 13 RECT_P(G1); RECT_P(G1,80,80,205,140,cB,cA); RECT_P(G1,0,0,320,20,cB,cA); RECT_P(G1,0,220,320,240,cB,cA); TEXTOUT_P("Hola Mundo",G1,100,100,4); BLIT_P(G0,50,50,270,190,G1); FREEZE; END; Ejemplo Estirar una imagen. 4.14 El comando BLIT_P nos permite aumentar el tamaño en píxeles de un gráfico. Solución: Código del programa: riayala@uc.cl Código 4.15: PBLITe Figure 4.29 60 Programa PBLITe 1 2 cA:=RGB(220,220,220); cB:=RGB(255,0,0); 3 4 EXPORT PBLITe() BEGIN 5 6 7 8 9 10 11 12 4.3 Introducción al manejo de gráficos | Capítulo 4 Programación en HP PPL aplicado a la ingeniería civil RECT_P(G1); RECT_P(G1,80,80,205,140,cB,cA); RECT_P(G1,0,0,320,20,cB,cA); RECT_P(G1,0,220,320,240,cB,cA); TEXTOUT_P("Hola Mundo",G1,100,100,4); BLIT_P(G0,−20,−20,340,260,G1); FREEZE; END; Ejemplo Mezclar gráficos con transparencia. 4.15 Haciendo uso de los parámetros c y alpha se logra crear transparencia al realizar el reemplazo de los gráficos con el comando BLIT_P . Solución: Código del programa: Código 4.16: PBLITf 1 2 3 cA:=RGB(220,220,220); cB:=RGB(255,0,0); cC:=RGB(0,0,255); 4 5 6 7 8 9 10 11 EXPORT Programa() BEGIN RECT_P(G0); RECT_P(G1); RECT_P(G1,80,80,205,140,cB,cA); RECT_P(G1,0,0,320,20,cB,cA); RECT_P(G1,0,220,320,240,cB,cA); TEXTOUT_P("Hola Mundo",G1,100,100,4); 12 13 14 BLIT_P(G0,G1,0,0,320,240,cC,100); FREEZE; END; Figure 4.30 Programa PBLITf Ejemplo Mezclar gráficos con transparencia. 4.16 Creación de gráficos haciendo uso del los comandos de dibujo. Solución: Código del programa: 1 2 3 4 5 EXPORT AboutESP() BEGIN RECT_P(); DIMGROB_P(G1,320,240); RECT_P(G1,RGB(255,255,255)); Figure 4.31 Programa AboutESP 61 riayala@uc.cl Código 4.17: AboutESP 4.3 Introducción al manejo de gráficos | Capítulo 4 Programación en HP PPL 6 7 8 9 10 11 LINE_P(G1,0,197,320,50,RGB(0,0,0)); LINE_P(G1,52,153,265,55,RGB(40,220,170)); LINE_P(G1,57,165,44,137,RGB(0,0,0)); LINE_P(G1,270,68,260,41,RGB(0,0,0)); RECT_P(G1,0,0,320,26,RGB(0,160,128)); TEXTOUT_P("Distancia entre dos puntos",G1,25,2,4,RGB(255,255,255)); 12 13 14 15 16 TEXTOUT_P("(x1,y1)",G1,55,175,2,RGB(0,0,0)); TEXTOUT_P("(x2,y2)",G1,270,79,2,RGB(0,0,0)); TEXTOUT_P("●",G1,56,162,3,RGB(255,0,0)); TEXTOUT_P("●",G1,268,65,3,RGB(255,0,0)); TEXTOUT_P("distancia=?",G1,100,85,5,RGB(255,0,0));//this one I need to rotate. 17 18 19 20 21 TRIANGLE_P(G1,255,57,257,61,266,54,RGB(0,0,0)); TRIANGLE_P(G1,62,151,51,154,60,146,RGB(0,0,0)); BLIT_P(G0,G1); FREEZE; END; Ejemplo Rotar textos. 4.17 Haciendo uso de los parámetros c y alpha se logra crear transparencia al realizar el reemplazo de los gráficos con el comando BLIT_P . Solución: Código del programa: Código 4.18: AboutESP riayala@uc.cl Figure 4.32 Programa PBLITf 1 2 3 4 5 6 7 8 9 10 11 12 RotateG(Tx,Gr,ang) BEGIN DIMGROB(Gr,320,240); LOCAL tmp; LOCAL mat:=[[cos(ang),sin(ang)],[−sin(ang),cos(ang)]]; FOR X:=0 TO grobh(Tx) DO FOR Y FROM 0 TO grobw(Tx) DO tmp:=mat*[[X],[Y]]; PIXON_P(Gr,X,Y,GETPIX_P(Tx,tmp(1,1),tmp(2,1))); END; END; END; 13 14 15 16 17 18 19 20 21 22 23 EXPORT AboutESP() BEGIN RECT(); DIMGROB_P(G1,320,240); RECT_P(G1,RGB(255,255,255)); LINE_P(G1,0,197,320,50,RGB(0,0,0)); LINE_P(G1,52,153,265,55,RGB(40,220,170)); LINE_P(G1,57,165,44,137,RGB(0,0,0)); LINE_P(G1,270,68,260,41,RGB(0,0,0)); RECT_P(G1,0,0,320,26,RGB(0,160,128)); TEXTOUT_P("Distancia entre dos puntos", G1,25,2,4,RGB(255,255,255)); 24 25 26 62 TEXTOUT_P("(x1,y1)",G1,55,175,2,RGB(0,0,0)); TEXTOUT_P("(x2,y2)",G1,270,79,2,RGB(0,0,0)); TEXTOUT_P("●",G1,56,162,3,RGB(255,0,0)); 27 TEXTOUT_P("●",G1,268,65,3,RGB(255,0,0)); 28 29 30 31 DIMGROB(G3,320,240); TEXTOUT_P("distancia=?",G3,60,130,5,RGB(255,0,0)); RotateG(G3,G2,−0.4); // Rotar 0.4 radianes BLIT_P(G1,G2,RGB(255,255,255)); 32 33 TRIANGLE_P(G1,255,57,257,61,266,54,RGB(0,0,0)); TRIANGLE_P(G1,62,151,51,154,60,146,RGB(0,0,0)); 34 35 36 4.3 Introducción al manejo de gráficos | Capítulo 4 Programación en HP PPL aplicado a la ingeniería civil BLIT_P(G0,G1); FREEZE; END; 4.3.4.1 Comando RGB La descripción RGB (del inglés Red, Green, Blue; «rojo, verde Sugerencia La composición de colores RGB y azul») de un color hace referencia a su composición de se puede obtener de cualquier la intensidad de los colores primarios con que se forma: el software que tenga las opciones rojo, el verde y el azul. Este un modelo de color basado en de visualización de colores lo q se conoce como síntesis aditiva, con lo que es posible avanzados. Por ejemplo el programa Paint. representar a un color por la mezcla por adición de los tres colores luz primarios. Sintaxis RGB(R, G, B, [Alpha]) Devuelve un número entero que puede utilizarse como una variable de color para una función de dibujo, en base a los valores de los componentes rojo, verde y azul (cada uno de 0 a 255). Figure 4.33 Modelo aditivo de colores rojo, verde, azul. Si Alpha es mayor a 128, devuelve el color marcado como transparente. Ejemplo RGB(255,0,128); // devuelve 16711808. ¡Cuidado! HP Prime no admite la combinación de canales alfa. 4.18 Para un uso adecuado de estos colores, es recomendable declararlos ya sea como variables globales o locales. Estos colores pueden ser usados en los parámetros de las diferentes funciones de dibujos. 4.19 col2:=RGB(0,0,255); EXPORT Ejemplo9() BEGIN 63 riayala@uc.cl Ejemplo col1:=RGB(255,0,0,180); 4.3 Introducción al manejo de gráficos | Capítulo 4 Programación en HP PPL RECT_P(G1,col1);//patanlla roja transparente. LINE_P(G1,0,0,80,80,col2); //dibuja una línea azul. BLIT(G0,G1); FREEZE; END; 4.3.4.2 Comando LINE P El formato básico de LINE_P ó LINE dibuja una línea entre las coordenadas píxel ó cartesiano del gráfico utilizando el color especificado. Sintaxis Tipo I: LINE_P([G], x1, y1, x2, y2) Tipo II: LINE_P([G], x1, y1, x2, y2, color) 4.3.4.3 Comando RECT P Dibuja un rectángulo en la variable gráfica G entre los puntos x1, y1 y x2, y2 utilizando color del borde para el perímetro y color de relleno para el interior. Sintaxis Limpiar pantalla: RECT_P([G]) Tipo I: RECT_P([G], x1, y1, x2, y2) Tipo II: RECT_P([G], x1, y1, x2, y2, colorborde, colorrelleno) Ejemplo EXPORT BOX() 4.20 BEGIN RECT_P(G1); //Limpia la pantalla gráfica. RECT_P(G1,40,90,#000000); BLIT(G0,G1); FREEZE; END; 4.3.4.4 Comando TEXTOUT P riayala@uc.cl Dibuja un texto utilizando un color en el gráfico G en la posición x, y usando un tamaño de fuente. 64 4.3 Introducción al manejo de gráficos | Capítulo 4 Programación en HP PPL aplicado a la ingeniería civil Sintaxis Tipo I: TEXTOUT_P("texto",[G],x,y) Tipo II: TEXTOUT_P("texto",[G],x,y,fuente,c1,ancho,c2) donde: Texto : Dato de tipo caracter. G : Variable tipo gráfico. fuente : Ver tabla 4.1. c1 : Color del texto. c2 : Color del fondo del texto. Tabla 4.1 Tamaño de fuente para el comando TEXTOUT Valor asignad Nombre objeto 0 Tamaño HP. 1 Tamaño 10. 2 Tamaño 12. 3 Tamaño 14. 4 Tamaño 16. 5 Tamaño 18. 6 Tamaño 20. 7 Tamaño 22. Ejemplo EXPORT PISERIES() BEGIN LOCAL sign; K:=2; A:=4; sign:=−1; RECT(); TEXTOUT_P("N=",0,0); TEXTOUT_P ("PI APPROX =",0,30); TEXTOUT_P(K,35,0,2,#FFFFFF,100,#333399); TEXTOUT_P(A,90,30,2,#000000,100,#99CC33); END; 4.3.4.5 Comando DRAWMENU Dibuja un menú de seis botones en la parte inferior de la pantalla, con etiquetas cadena1, cadena2,..., cadena6. Figure 4.34 Ejecutando el programa iMENU 65 riayala@uc.cl 4.21 4.3 Introducción al manejo de gráficos | Capítulo 4 Programación en HP PPL Sintaxis DRAWMENU({"cadena1", "cadena2", ..., "cadena6"} Ejemplo EXPORT iMENU() 4.22 BEGIN DRAWMENU("ABC", "ROCKY","", "DEF"); FREEZE; END; 4.3.4.6 ICON La directiva ICON permite crear más objetos gráficos locales a un programa (conserva cambios), para ello se necesita el programa DIMGROB Generator con el que obtenemos un código hexadecimal de la imagen solicitada. Sintaxis ICON Variable codigohexadecimal Ejemplo ICON icono1 89504E470D0A1A0A0000000D494844520... 4.23 azul:=RGB(255,0,0); EXPORT iICON() BEGIN RECT_P(); RECT_P("icono1",10,30,80,25,azul); TEXTOUT_P("icono1","icono1",40,50,6,azul); BLIT_P(100,90,"icono1"); //Muestra el icono1. FREEZE; END; ! Importante : • Es recomendable no abusar el uso de este comando ya que ha sido el causante de fallas de memoria. • Un objeto gráfico creado a partir de Figure 4.35 Ejecutando el programa iICON permanece en memoria RAM aunque sea local al riayala@uc.cl programa (así fue diseñado). 66 ICON , 4.3 Introducción al manejo de gráficos | Capítulo 4 Programación en HP PPL aplicado a la ingeniería civil 4.3.4.7 Ejercicios resueltos Ejercicio 4.2 Manejo de Gráficos 1. Con los comandos gráficos necesarios realice el siguiente dibujo. Solución: Código del programa. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 ICON RABa 89504E470D0A1A0A0000000D4948... Plomo:=RGB(220,220,220); LigthBlue:=RGB(150,177,210); DarkBlue:=RGB(33,115,231); White:=RGB(250,255,255); Fondo:=RGB(239,247,247); AzulA:=RGB(53,117,211); AzulB:=RGB(0,28,84); AzulM:=RGB(34,62,176); RedM:=RGB(153,27,30); EXPORT FAyu() BEGIN LOCAL xx:=25,yy:=50,dx:=265,dy:=148; DIMGROB_P(G3,320,240); RECT(G3,White); BLIT_P(G0,0,0,G3,0,0,320,240,Plomo,120); RECT_P(G3,xx,yy,xx + dx,yy + dy,AzulB,Fondo); RECT_P(G3,xx−1,yy,xx + dx + 1,yy + dy,AzulB,Fondo); BLIT_P(G3,"RABa",−(xx + 1),−(yy + 1)); TEXTOUT_P("DYS",G3,xx + 100,yy + 1 + 3,3,AzulM); TEXTOUT_P("AB",G3,xx + 103 + 21,yy + 1,4,AzulM); TEXTOUT_P("v2.3",G3,xx + 103 + 45,yy + 1 + 6,2,RedM); TEXTOUT_P("Analisis Dinamico y Estatico para Edificaciones",G3,xx + 38,yy + 22,1,DarkBlue); RECT_P(G3,xx + 34,yy + 20,xx + dx,yy + 20,DarkBlue,DarkBlue); yy:=yy−15; TEXTOUT_P("Version 2.3:",G3,xx + 10,yy + 50,2,AzulB); TEXTOUT_P("−Rigidez global",G3,xx + 30,yy + 65,2,AzulM); yy:=yy + 18; TEXTOUT_P("−Rigidez lateral",G3,xx + 30,yy + 65,2,AzulM); yy:=yy + 18; TEXTOUT_P("−Metrado de cargas",G3,xx + 30,yy + 65,2,AzulM); yy:=yy + 18; TEXTOUT_P("−Analisis Modal 2D Y 3D",G3,xx + 30,yy + 65,2,AzulM); yy:=yy + 18; TEXTOUT_P("−Analisis Estatico 2D y 3D",G3,xx + 30,yy + 65,2,AzulM); xx:=25;yy:=50; BLIT_P(G0,xx−2,yy,xx + dx + 2,yy + dy + 2,G3,xx−2,yy,xx + dx + 2,yy + dy + 2); FREEZE; END; 67 riayala@uc.cl Código 4.19: Graficos 4.3 Introducción al manejo de gráficos | Capítulo 4 Programación en HP PPL Ejercicio 4.3 Manejo de Gráficos 2. La creación de gráficos nos permite insertar cierto tipo de apariencia para utilizar botones en la programación de HP PPL, con los comandos gráficos necesarios realice el siguiente dibujo. Solución: Código del programa. Código 4.20: Momento de Inercia 1 2 white:=rgb(255,255,255), blue:=rgb(0,0,240); 3 4 5 6 7 8 9 EXPORT P_APol() BEGIN FREEZE; DIMGROB_P(G1,320,240); RECT_P(); //Dibujar los menus de la parte superior. LOCAL R_In,R_Au,R_Ca; 10 11 12 R_In:={0,0,100,30}; R_Ca:={100,0,220,30}; R_Au:={220,0,320,30}; 13 14 15 RECT_P(G1,R_In(1),R_In(2),R_In(3),R_In(4), white,blue); RECT_P(G1,R_Ca(1),R_Ca(2),R_Ca(3),R_Ca(4), white,blue); RECT_P(G1,R_Au(1),R_Au(2),R_Au(3),R_Au(4), white,blue); 16 17 18 19 //Textos en los Botones. TEXTOUT_P("Reporte",G1,R_In(1)+18,R_In(2)+10,2, white); TEXTOUT_P("Datos",G1,R_Ca(1)+38,R_Ca(2)+10,2, white); TEXTOUT_P("Dibujar",G1,R_Au(1)+35,R_Au(2)+10,2, white); 20 21 BLIT_P(G0,G1); END; riayala@uc.cl Ejercicio 4.4 Manejo de Gráficos 3. La creación de gráficos nos permite insertar cierto tipo de apariencia para utilizar botones en la programación 68 4.3 Introducción al manejo de gráficos | Capítulo 4 Programación en HP PPL aplicado a la ingeniería civil de HP PPL, con los comandos gráficos necesarios realice el siguiente dibujo. Solución: Código del programa. También se pueden realizar diferentes tipos de entrada de datos, como pueden ser cajas editables, cajas tipo selección y otros mas. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 PlomoA:=RGB(220,220,220); DarkBlue:=RGB(33,115,231); White:=RGB(250,255,255); Fondo:=RGB(239,247,247); AzulA:=RGB(53,117,211); AzulTit:=RGB(29,79,137); Black:=RGB(0,0,0); Plomo:=PlomoA; vNCc:=4; vAcomp:=5; vAsc:=3.96; vC1Asc:={2,2,2,2,2,2}; vT1Asc:={"Ø5”/8","Ø5”/8","Ø5”/8","Ø5”/8","Ø5”/8","Ø5”/8"}; vRAsic:={4,7,10,13,16,19}; vAAsic:={3.96,0.32,0.32,0.32,0.32,0.32}; vC2Asc:={0,0,0,0,0,0}; vT2Asc:={"Ø5”/8","Ø5”/8","Ø5”/8","Ø5”/8","Ø5”/8","Ø5”/8"}; vTAs:={"Ø1”/4","Ø3”/8","Ø1”/2","Ø5”/8","Ø3”/4","Ø7”/8","”Ø1"}; vN1Asc:={4,1,1,1,1,1}; vN2Asc:={4,1,1,1,1,1}; REGCUA(); REGCHO(); EXPORT FCAsMuCom() BEGIN LOCAL R_vNC:={},R_vC1As:={},R_vT1As:={},R_vAs:={},R_vC2As:={},R_vT2As:={}; LOCAL dx,dy,nxR_Cont:={},R_Acep:={},R_vRAsi:={},R_vAAsi:={},R_Graf:={}; LOCAL mx,my,ss,Lx,Ly,Lyy,xi,yi; LOCAL R_RR:={},R_R:={},r,m,sum,R_Repor:={},R_Ten:={}; LOCAL R_vAcomp:={}; //−‐>Regiones o cuadros para editar texto RECT(Fondo); RECT_P({0,1},{320,17},DarkBlue,AzulTit); TEXTOUT_P("DATOS DE As : ACERO COMPRESION",60,3,2,White); 69 riayala@uc.cl Código 4.21: FCAsMuCom riayala@uc.cl 4.3 Introducción al manejo de gráficos | Capítulo 4 Programación en HP PPL 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 dx:=250;dy:=5; Lx:=65;Ly:=150; //‐> Seccion dx:=10;dy:=−10; Lyy:=(vNCc+1)*20; RECT_P({dx−5,35 + dy},{dx + 305,dy + 80+Lyy},DarkBlue,Fondo); TEXTOUT_P("� As Propuesto",dx,30 + dy,2,Black,90,Fondo); TEXTOUT_P("Capas :",5 + dx,45 + dy,2); TEXTOUT_P("Acomp :",120 + dx,45 + dy,2); TEXTOUT_P("Cant",112 + dx,65 + dy,2); TEXTOUT_P("Tipo",158 + dx,65 + dy,2); TEXTOUT_P("R_i",211 + dx,65 + dy,2); TEXTOUT_P("As_i",263 + dx,65 + dy,2); R_vNC:={{50 + dx,45 + dy−2},{100 + dx,45 + dy + 14}}; R_vAcomp:={{140 + dx,45 + dy−2},{190 + dx,45 + dy + 14}}; R_vAs:={{135+100 + dx,45 + dy−2},{190 +100+ dx,45 + dy + 14}}; REGCUA(STRING(vNCc,1),R_vNC,AzulTit,White); REGCUA(STRING(vAcomp,1),R_vAcomp,AzulTit,White); REGCUA(STRING(vAsc,1),R_vAs,AzulTit,White); FOR m:=0 TO vNCc DO xi:=5+dx;yi:=82+dy+20*m; R_vC1As(m+1):={{xi,yi−2},{xi+30,yi+14}}; R_vT1As(m+1):={{xi+40,yi−2},{xi+85,yi+14}}; TEXTOUT_P(" + ",xi+85,yi−5,5); R_vC2As(m+1):={{xi+105,yi−2},{xi+135,yi+14}}; R_vT2As(m+1):={{xi+145,yi−2},{xi+190,yi+14}}; R_vRAsi(m+1):={{xi+200,yi−2},{xi+230,yi+14}}; R_vAAsi(m+1):={{xi+240,yi−2},{xi+295,yi+14}}; REGCUA(STRING(vC1Asc(m+1),1),R_vC1As(m+1),AzulTit,White); REGCUA(STRING(vC2Asc(m+1),1),R_vC2As(m+1),AzulTit,White); REGCUA(STRING(vRAsic(m+1),1),R_vRAsi(m+1),AzulTit,White); REGCUA(STRING(vAAsic(m+1),1),R_vAAsi(m+1),AzulTit,White); REGCHO(vTAs(vN1Asc(m+1)),R_vT1As(m+1),AzulTit,Plomo); REGCHO(vTAs(vN2Asc(m+1)),R_vT2As(m+1),AzulTit,Plomo); END; //‐>Botton Aceptar R_Acep:={{250,204},{310,222}}; RECT_P(R_Acep(1),R_Acep(2),DarkBlue,Plomo); TEXTOUT_P("Aceptar",R_Acep(1,1) + 8,R_Acep(1,2) + 3,2); //‐>Botton Graficar R_Graf:={{175,204},{235,222}}; RECT_P(R_Graf(1),R_Graf(2),DarkBlue,Plomo); TEXTOUT_P("Grafico",R_Graf(1,1) + 8,R_Graf(1,2) + 3,2);\\ //‐>Reporte R_Repor:={{100,204},{160,222}}; RECT_P(R_Repor(1),R_Repor(2),DarkBlue,Plomo); TEXTOUT_P("Reporte",R_Repor(1,1) + 8,R_Repor(1,2) + 3,2); //‐>As−Comp R_Ten:={{25,204},{85,222}}; RECT_P(R_Ten(1),R_Ten(2),DarkBlue,Plomo); TEXTOUT_P("As−Ten",R_Ten(1,1) + 8,R_Ten(1,2) + 3,2); FREEZE; END; 88 89 90 91 92 REGCUA(Dato,Region,ColorA,ColorB) BEGIN RECT_P(Region(1),Region(2),ColorA,ColorB); TEXTOUT_P(Dato,Region(1) + 4,1); END; 70 65 66 67 68 69 70 71 72 73 74 75 4.3 Introducción al manejo de gráficos | Capítulo 4 Programación en HP PPL aplicado a la ingeniería civil REGCHO(Dato,Region,ColorA,ColorB) BEGIN LOCAL L,xf,yf; L:=Region(2,1); xf:=Region(2,1); yf:=Region(2,2); RECT_P(Region(1),Region(2),ColorA,PlomoA); TEXTOUT_P(Dato ,Region(1) + 4,1); TEXTOUT_P(" �" ,L−12,Region(1,2),3); TEXTOUT_P("|" ,L−14,Region(1,2)−3,4); END; Ejercicio 4.5 Manejo de Gráficos 4. Por último se puede utilizar los gráficos para crear reportes. Solución: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 AzulTit:=RGB(29,79,137); RedA:=RGB(195,56,56); DarkBlue:=RGB(33,115,231); White:=RGB(250,255,255); TxFrac(); EXPORT FRAsMuDoble() BEGIN LOCAL i,x,y,k,V,H,Gi:=G2; LOCAL ax,ay,sa,r,sum; LOCAL MEle:=[[0]]; V:=1800; H:=640; DIMGROB_P(G2,H,V); RECT(G2); RECT_P(G2,{0,1},{320,17},DarkBlue,DarkBlue); TEXTOUT_P("CALCULO DEL Mu − As DOBLE REFUERZO",G2,10,1.5,3,White); LOCAL dx,dy; //−Cuantias a Tension. dx:=5;dy:=dy+20; TEXTOUT_P("3−Calculo de las cuantias",G2,dx,dy,2,RedA); dx:=10; TEXTOUT_P("a) Esfuerzo en compresion y tension del acero",G2,dx,dy+15,2,DarkBlue); dx:=20;dy:=dy−30; TEXTOUT_P("f's = " + 45.7 + " kg/cm2",G2,dx,dy+60,2,AzulTit); dx:=10;dy:=dy+70; TEXTOUT_P("a) Cuantia del acero compresion",G2,dx,dy+15,2,DarkBlue); 71 riayala@uc.cl Código 4.22: FRAsMuDoble 4.4 Ejercicios | Capítulo 4 Programación en HP PPL 26 27 28 29 30 31 32 33 34 35 36 37 38 dx:=20; TxFrac(G2,"ρ' = "," As'","b*d",dx−5,dy + 30,35,AzulTit); TEXTOUT_P("ρ' = " + 40.5 ,G2,dx,dy+60,2,AzulTit); dx:=10;dy:=dy+70; TEXTOUT_P("a) Cuantia del acero tension",G2,dx,dy+15,2,DarkBlue); dx:=20; TxFrac(G2,"ρ = "," As","b*d",dx−5,dy + 30,35,AzulTit); TEXTOUT_P("ρ = " + 18.7 ,G2,dx,dy+60,2,AzulTit); dx:=10;dy:=dy+70; TEXTOUT_P("b) Cuantia balanceada",G2,dx,dy+15,2,DarkBlue); BLIT_P(G0,G2); FREEZE; END; 39 40 41 42 43 44 45 46 47 TxFrac(Gr,Tx,Num,Den,xo,yo,L,TCol) BEGIN LOCAL nN,nD,nT; nN:=DIM(Num);nD:=DIM(Den);nT:=DIM(Tx); TEXTOUT_P(Tx,Gr,xo + 4,yo + 5,2,TCol); TEXTOUT_P(Num,Gr,xo + nT*7 + 2,yo,2,TCol); RECT_P(Gr,{xo + nT*7,yo + 12},{xo + nT*7 + L,yo + 12.30},TCol); TEXTOUT_P(Den,Gr,xo + nT*8 + 5,yo + 17,2,TCol); END; 4.4 Ejercicios Ejercicio 1 Elabore un programa en el lenguaje de programación PPL PRIME, el cual calcule el momento de inercia de un rectángulo Ejercicio 2 Cree un programa que calcule la resistencia última de una viga dado su base, peralte, f’c, fy y el recubrimiento. Ejercicio 3 Desarrolle un programa que muestre gráficamente las coordenada UTM en el punto cualquiera a riayala@uc.cl partir del punto inicial dado. 72 Capítulo 5 Estructuras de Programación Resumen 5.1 5.2 Estructuras selectivas, 74 Estructuras repetitivas., 87 Capítulo 3 Programación estructurada 3.5.1 Estructura de control selectiva simple si (if) Diagrama de flujo 5.1 Estructuras selectivas | Capítulo 5 2 Pseudocódigo Lenguaje C Estructura de control que dirige a la computadora para ejecutar una o más instrucciones solamente si la condición es verdadera. Si la condición es falsa no realiza ninguna acción. Programación en HP PPL El término condición lo utilizaremos a lo largo de este libro para referirnos a una o más condiciones. Existen dos formas de representarlo, dependiendo del número de si (condición) ifinstrucciones (condición) que se desean realizar V F condición si la condición se cumple: 5.1 Estructuras selectivas inst 1 inst 1 inst 2 inst 2 1. Si se requiere ejecutar una sola instrucción, cuando se cumpla la condición se representa de la siguiente sino else forma: Inst 1 Inst 2 Diagrama de flujo Pseudocódigo Lenguaje C En la programación, como en la vida real, es necesario F V condición evaluar las circunstancias y actuar en consecuencia, pues Inst 1 no siempre se puede establecer por anticipado el curso de las acciones. En la ejecución de un programa, Si la condición se cumple se realiza la instrucción 1, pero si la condición no se cumple se realiza la instrucción 2. Figure 5.1 Condición simple Diagrama de flujo muchas expresiones estarán supeditadas al cumplimiento Pseudocódigo Lenguaje C de determinadas condiciones; por ello, el programador ha de identificar estas situaciones y especificar, en el programa, _I0406.indd 50 e programación F V condición 38 qué hacer en cada caso. 2/17/11 5:29 PM Implementar una decisión implica evaluar una o más n 1, ejecutar las instrucciones del bloque 1. Inst 3 Inst 1 Inst 4 Inst 2 ión 1, pero SÍ se verifica la condición 2 , ejecutar las instrucciones variables para determinar si cumple una o más condiciones y establecer un flujo de acciones para cada resultado verificado ninguna de las condiciones anteriores, ejecutar las instruc- posible. Las acciones pueden consistir en ejecutar una flujo del programa continúa por la instrucción siguiente a la estructura o más expresiones o en omitirlas, o en seleccionar una Figure 5.2 Condición doble TLAB y el Si diagrama de se flujo, se muestran eninstrucciones la Figura 5.7. la condición cumple se realizan las 1 y secuencia 2, pero si no se cumple se realizarán las instrucde instrucciones de entre dos o más alternativas ciones 3 y 4. disponibles. 3.5.3 Anidamiento o escalonamiento si-si no-si (if-else-if) Condición 1 Bloque 1 Sí El concepto de anidamiento es muy utilizado en la programación y consiste en insertar (anidar) una o estrucLas estructuras selectivas alternativas pueden ser: No tura dentro de otra. La expresión “si anidados” se refiere a que podemos utilizar una sentencia si (if ) dentro de otra sentencia Bloque si (if ). EstoCondición se emplea2 cuandoSíse tienen que2cumplir varias condiciones para poder ejecutar una acción. Simples. Uno de los aspectos más confusos de las sentencias si 1 (if ) en el lenguaje de programación es el si (if ) No anidado. Un si (if ) anidado es una sentencia si (if ) que es el objeto de otro si (if ) o si no (else). La razón por la Dobles. que los si (ifBloque ) anidados confuso saber qué else se asocia con qué si (if ). 3 son tan problemáticos es que resulta 2 2 3 Múltiples. Figuremúltiple: 5.3 Condición múltiple tructura condicional IF- ELSEIF - ELSE. a_I0406.indd 52 un ejemplo de utilización de este tipo de estructura. Los tipos más conocidos de condicionales son el SI (IF) y 2/17/11 5:29 PM el SEGÚN (CASE), aunque también podríamos mencionar al minación del signo de un número: positivo, negativo o nulo. lanzamiento de errores como una alternativa más moderna para evitar los cierres inesperados de nuestros programas. l número tiene signo positivo’ l numero tiene signo negativo’ 5.1.1Operadores l numero es nulo’ riayala@uc.cl 5.1.1.1 Operadores relacionales y lógicos Los operadores lógicos describen una relación entre dos valores; por lo tanto, se usan para expresar condiciones 74 Potencia (^ o **) / ,mod Programación en HP PPL aplicado *a,la ingeniería civil 1, 2 y comparar dos valores. En la tabla 5.2 se muestran los operadores relacionales. 1 2.6.2 Regla asociativa Los operadores en una misma expresión con igual nivel de prioridad se evalúan de a en ella apreciamos la prioridad de todos1.los operadores en lenguaje C. Las expresiones lógicas pueden combinarse para formar Capítulo 3 Programación Tabla 2.12 Prioridad de50los operadores en C estructurada Tabla 5.1 Tipo de operadores lógicos. Valor asignado NombreCategoría objeto del operador Ejemplos Agrupación y OR o NOT no Suma y sustracción aritmética 2,11,22,!, sizeof(tipo) La expresión condicional Multiplicación, división y residuo Operadores de igualdad Ejemplos Tipo de operadores relacionales. y o < Menor que de asignación Operadores <= , ≤ ≠ 5 x 559;, !5 if (x) //La condición es verdadera. Izquierda a || Izquierda a ?: Derecha a El último ejemplo es el más utilizado durante este curso. Mayor que Operador condicional >= , ≥ Derecha a operadores. Estos operadores *, /, %es una expresión booleana. Si el resultado Izquierda La condición de la ea trabajan con operandos que son 1, 2 Izquierda a • es cero, se considera una condición falsa. expresiones lógicas. • no es,, cero, se considera una condición cierta. ,5, .,.5 Izquierda a if (5.7) //La condición es falsa, comparamos dos valores. a && Izquierda Nombre objeto > == , = As Izquierda a En la tabla 5.1 se muestran dichos Operadores monarios Valor asignado expresiones más complejas Operadores Si llueve, llevar paraguas. utilizando los eloperadores lógicos. ( ), [ ] AND Operadores de relación Tabla 5.2 5.1 Estructuras selectivas | Capítulo 5 anidados se evalúan de dentro hacia afuera. 2. Dentro de una misma expresión o subexpresión, se evalúan en el siguiente orde Existen tres tipos de estructuras de control selectivas; ést 5, 15, 25, * 5, 5/5, %5 Derecha a a) Simple if. b) Doble if-else. Igual que Bloque de sentencias instrucción Los operadores de asignación tienen menor prioridadoque todos loscompuesta otros opera raciones monarios, aritméticos, de relación, de igualdad y lógicos se realizan antes Se denomina bloque de sentencias a un conjunto de instrucc C11, Java se utilizan llaves que abren y cierran { }. orden de las operaciones en pseudocódigo es: Menor o igual que Mayor o igual que En lenguajes como Pascal, Modula, Delphi, Ada, se utiliz Estas instrucciones se toman como una sola sentencia en Distinto a Ejemplos Pseudocódigo L inicio { 5.1.1.2 Prioridad de operadores. inst 1 inst 2 inst 3 ………. inst n La calculadora HP Prime realiza cálculos en función del siguiente orden de precedencia. Las funciones con la misma precedencia se evalúan de izquierda a derecha. fin } 3.5.1 Estructura dedecontrol selectiva simple Figure 5.4 Orden las operaciones Estructura de control que dirige a la computadora para ejec Otro Los ejemplo en C: anidados condición es verdadera. Si la condición es falsa no realiza nin paréntesis 1 Expresiones entre paréntesis. El término condición lo utilizaremos a lo largo de este lib Recordar Existen dos formas de representarlo, dependiendo del nú Los operadores de asignación si la condición se cumple: tienen menor prioridad que 1. Si se requiere ejecutar una sola instrucción, cuando se cu forma: todos los otros operadores. se evalúan de dentro hacia fuera. 2 Raíz n-ésima ( SQRT ) 3 Potencia, 10n Cap 02_Corona_I0406.indd 18 multiplicación, división y módulo. 4 Negación, Diagrama de flujo Pseudocód 5 Suma y resta. F 6 Operadores relacionales (ver tabla 5.2). 7 Operadores lógicos (ver tabla 5.1) condición V 5.1.2Estructura IF THEN Figure 5.5 Diagrama de flujo IF THEN Cap 03_Corona_I0406.indd 50 75 riayala@uc.cl Inst 1 5.1 Estructuras selectivas | Capítulo 5 Programación en HP PPL Esta instrucción evalúa un valor lógico, una expresión relacional o una condición lógica y retorna un valor lógico, con base en éste se toma una decisión simple o doble.. Esta estructura tiene la siguiente sintaxis. Sintaxis IF condicion THEN instruccion END; Evalúa una condición. Si la condición es verdadero (distinto de 0) entonces ejecuta instrucción. De lo contrario, no sucede nada. 5.1.2.1 La expresión condicional Sugerencia ISKEYDOWN(tecla) La expresión condicional es una es una expresión booleana. devuelve una El cual toma dos valores que son 0 si es falso y 1 si es expresión booleana. verdadero. Existen muchos comandos o funciones el cual directamente toman estas expresiones booleanas sin tener que usar las operaciones relacionales o lógicos. Ejemplo Valor absoluto de un número. 5.1 El valor absoluto o módulo de un número real es su valor numérico sin tener en cuenta su signo, sea este positivo (+) o negativo (-). Así, por ejemplo, 3 es el valor absoluto de +3 y de -3. Elaborar un programa el cual calcule el valor absoluto de un número. Solución: El valor absoluto de un número es el mismo número para Figure 5.6 Ingreso de datos:programa ValorAbsoluto el caso de los positivos y el número cambiado de signo para los negativos. riayala@uc.cl Código 5.1: ValorAbsoluto Figure 5.7 Resultado:programa ValorAbsoluto 76 1 2 3 4 5 6 7 EXPORT ValorAbsoluto(num) BEGIN PRINT(); IF num<0 THEN num :=num*−1 END; PRINT("EL VALOR ABSOLUTO DEL NUMERO ES = " + num); Diagrama de flujo Pseudocódigo Lenguaje C F 8 END; V condición si (condición) if (condición) inst 1 sino 5.1.3 5.1 Estructuras selectivas | Capítulo 5 Programación en HP PPL aplicado a la ingeniería civil inst 1 inst 2 else inst 2 Inst 2 IF THEN ELSEInst 1 Estructura Se implementa una estructura de decisión doble cuando se cuenta con dos opciones para continuar la ejecución del algoritmo y éstas dependen de una condición; es decir, que se cuenta con una o más instrucciones para el caso que Si la condición se cumple se realiza la instrucción 1, pero si la condición no se cumple se realiza la instruc- la condición ción 2. sea verdadera y con otra u otro conjunto de instrucciones para el caso de que sea falsa. Diagrama de flujo Pseudocódigo F Lenguaje C V condición Inst 3 Inst 1 Inst 4 Inst 2 Figure 5.8 Diagrama de flujo de la estructura IF THEN ELSE Si la condición se cumple se realizan las instrucciones 1 y 2, pero si no se cumple se realizarán las instrucciones 3 y 4. Sintaxis IF condicion THEN 3.5.3 Anidamiento o escalonamiento si-si no-si (if-else-if) instruccion 1 El concepto de anidamiento es muy utilizado en la programación y consiste en insertar (anidar) una estrucELSE tura dentro de otra. instruccionLa 2 expresión “si anidados” se refiere a que podemos utilizar una sentencia si (if ) dentro de otra sentencia si (if ). Esto se emplea cuando se tienen que cumplir varias condiciones para poder ejecutar una acción. END; Uno de los aspectos más confusos de las sentencias si (if ) en el lenguaje de programación es el si (if ) anidado. Un si (if ) anidado es una sentencia si (if ) que es el objeto de otro si (if ) o si no (else). La razón por la Ingreso de si (if ). que los si (if ) anidados son tan problemáticos es que resulta confuso qué else5.9 se asocia con qué Evalúa condición. Si condición es verdadero (distinto de 0),saberFigure datos:programa Compara10 ejecuta instrucción 1, de lo contrario, ejecuta instrucción 2. Comparar un numero con el valor de 10. Ejemplo Cap 03_Corona_I0406.indd 52 2/17/11 5:29 PM Elabore un programa, que sirva para saber si el valor ingresado es mayor o menor que el número 10. Solución: Figure 5.10 Resultado:programa Compara10 77 riayala@uc.cl 5.2 5.1 Estructuras selectivas | Capítulo 5 Programación en HP PPL Código 5.2: Compara10 1 EXPORT Compara10(A) 2 BEGIN e programación 38 3 PRINT(); 4 IF A<10 THEN 5 PRINT("EL NUMERO INGRESADO ES MENOR QUE 10"); n 1, ejecutar las instrucciones del bloque 1. 6 ELSE 7 PRINT("EL NUMERO INGRESADO ES MAYOR QUE 10"); ión 1, pero SÍ se verifica la condición 2 , ejecutar las instrucciones 8 END; 9 END; verificado ninguna de las condiciones anteriores, ejecutar las instruc- 5.1.4Estructura CASE flujo del programa continúa por la instrucción siguiente a la estructura TLAB y el diagrama de flujo, se muestran en la Figura 5.7. Cuando se tiene mas de una alternativa (bifurcación Condición 1 Sí Bloque 1 múltiple) para evaluar una condición, se utiliza la estructura No 2 Condición 2 de programación CASE , el cual ejecuta múltiples estructuras Sí Bloque 2 simples en el orden determinado por el programador. No Sintaxis CASE Bloque 3 IF condicion1 THEN instruccion 1 Figuremúltiple: 5.11 Diagrama de flujo de tructura condicional IF- ELSEIF - ELSE. la estructura CASE un ejemplo de utilización de este tipo de estructura. END; IF condicion2 THEN Recordar minación del signoComo de un se número: positivo, negativo o nulo. muestra en el diagrama de flujo, esta estructura termina cuando una de las condiciones es l número tiene signo positivo’ verdadera l numero tiene signo negativo’ instruccion 2 END; IF condicion3 THEN instruccion 3 END; ... [DEFAULT instrucion] END; l numero es nulo’ Sugerencia Si se utiliza varias estructuras simples, el programa tiene que Evalúa condición1. Si es verdadero, ejecuta instrucción1 leer todas aun si fueran falsas, y cierra el CASE. De lo contrario, evalúa condición2. Si es esto genera mayor gasto de verdadero, ejecuta instrucción2 y cierra el CASE. Continúa memoria y mayor tiempo de evaluando pruebas hasta que encuentra una verdadera. proceso. Si no encuentra ninguna prueba verdadera, ejecuta los instrucción predeterminados, si se proporcionan. Ejemplo Número romano. riayala@uc.cl 5.3 Elaborar un programa que lea un número arábigo y muestra su equivalente en romano, pero sólo contemple los 5 primeros números, de manera que si el número 78 5.1 Estructuras selectivas | Capítulo 5 Programación en HP PPL aplicado a la ingeniería civil digitado es superior a 5 se mostrará un mensaje de error: número no válido. Solución: La solución de este ejemplo se facilita utilizando la estructura de decisión múltiple, ya que para cada valor hay un equivalente. Código 5.3: NumeroRomano EXPORT NumeroRomano(num) BEGIN PRINT(); CASE IF num==1 THEN PRINT("El numero ROMANO equivalente: I "); END; IF num==2 THEN PRINT("El numero ROMANO equivalente: II "); END; IF num==3 THEN PRINT("El numero ROMANO equivalente: III "); END; IF num==4 THEN PRINT("El numero ROMANO equivalente: IV "); END; IF num==5 THEN PRINT("El numero ROMANO equivalente: V "); END; PRINT("Numero no válido"); END; END; ! Figure 5.12 Resultados: programa NumeroRomano Figure 5.13 Resultados: programa NumeroRomano Importante : • La estructura de programación CASE se limita a 127 bifurcaciones. 5.1.5Estructura IFERR Sugerencia Es importante utilizar esta Muchas veces es pasado por alto algunas condiciones de estructura para disminuir los cálculo o asignación, por ello los programas creados no errores de cálculo que necesitan son lo suficientemente atractivos y eficientes ya que con alguna condición el mas mínimo dato mal ingresado genera una falla y hace que se cierre, es mas muchas veces se tiene que ingresar Recordar Generalmente engloba a las nuevamente los datos, el cual es una pérdida de tiempo para operaciones de cálculos o el usuario. también a las funciones 79 riayala@uc.cl 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 5.1 Estructuras selectivas | Capítulo 5 Programación en HP PPL Para solución, se puede utilizar la estructura de programación IFERR THEN ELSE . Esta estructura Se caracteriza esencialmente por detectar errores tanto de asignación o de cálculo de un programa. Sintaxis IFERR instruccion1 THEN instruccion2 END; Ejecuta la secuencia de instruccion1. Si se produce un error durante la ejecución de instruccion1, ejecuta la secuencia de instruccion2. Ejemplo División. 5.4 Antes de ejecutar una división es necesario verificar que el divisor sea diferente de cero, ya que en caso contrario se generará un error de cómputo y el programa se cancelará. En consecuencia, es necesario utilizar la sentencia IFERR para decidir si se ejecuta la división o se muestra un Figure 5.14 Resultados para num=5 y den=0 mensaje de error. Solución: Código 5.4: Division Figure 5.15 Resultados para num=5 y den=10 Recordar La estructura de programación 1 2 3 4 5 6 7 8 9 10 11 12 EXPORT Division(num,den) BEGIN PRINT(); LOCAL resul; IFERR resul:=num/den; //Operacion que puede generar error. PRINT("Calculos correctamente"); PRINT("La division es=" + resul); THEN PRINT("Ocurrio un error"); END; END; IFERR , puede facilitar la creacion de programas con la cantidad riayala@uc.cl mínima posible de errores. 5.1.6Estructura IFERR ELSE La estructura IFERR ELSE, es un detector de errores con dos condiciones, es utilizado para casos específicos de programas. 80 5.1 Estructuras selectivas | Capítulo 5 Programación en HP PPL aplicado a la ingeniería civil Sintaxis IFERR instruccion1 THEN instruccion2 ELSE instruccion3 END; Ejecuta la secuencia de instruccion1. Si se produce un error durante la ejecución de instruccion1, ejecuta la secuencia de instruccion2. De lo contrario, ejecuta la secuencia de instruccion3. 5.1.7Estructuras de decisión anidadas El concepto de anidadas se refiera a que una estructura se encuentra dentro de otra del mismo tipo. se utiliza en varios casos, más Las estructuras de decisión IF−THEN , IF−THEN−ELSE y CASE implican la selección de una de dos alternativas. Es posible también utilizar la instrucción para diseñar estructuras de selección que contengan más de dos alternativas. Recordar El anidamiento o la anidación adelante veremos los ciclos anidados, los cuales son la base de los arreglos bidimensionales o matrices. Por ejemplo, una estructura IF−THEN puede contener otra, y así sucesivamente cualquier número de veces; a su vez, dentro de cada estructura pueden existir diferentes acciones. La sintaxis para una de las combinaciones de estas estructuras anidadas es: Sintaxis IF condicion THEN instrucion1 IF condicion THEN instrucion2 ELSE instrucion3 END; END; Ejemplo Tipo del triangulo. Elabore un programa que sirva para identificar el tipo de triángulo conociendo sus tres lados. Solución: 81 riayala@uc.cl 5.5 5.1 Estructuras selectivas | Capítulo 5 Programación en HP PPL El valor absoluto de un número es el mismo número para el caso de los positivos y el número cambiado de signo para los negativos. Código 5.5: TipoTriangulo Figure 5.16 Ingreso de datos: programa TipoTriangulo 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 EXPORT TipoTriangulo(la1,la2,la3) BEGIN LOCAL Tipo; IF la1==la2 AND la2==la3 THEN Tipo:="Equilatero"; ELSE IF la1==la2 OR la2==la3 OR la1==la3 THEN Tipo:="Isosceles"; ELSE Tipo:="Escaleno"; END; END; PRINT(); PRINT("El tringulo es: " + Tipo); END; Figure 5.17 Resultado: programa TipoTriangulo 5.1.8Ejercicios Aplicativos. Ejercicio 5.1 Tipo de flujo en tuberías. Matemáticamente, el Re es un parámetro adimensional que expresa la relación entre las fuerzas de inercia y las fuerzas de viscosidad o de fricción en el interior de una corriente, que se expresa para una tubería de sección circular, de la siguiente forma: Re = Re < 2100 4Q πνD ⇒ Flujo laminar 2100 ≤ Re < 4100 ⇒ Flujo en transición riayala@uc.cl Re ≥ 4100 ⇒ Flujo turbulento Elabore un programa que calcule el tipo de flujo para los siguientes datos en una tubería cerrada. 82 Q = 0.1m3 /s, D = 10pulg , ν = 1.14 × E −6 Solución: Sugerencia El uso de las variables globales pueden en un sentido pueden Código 5.6: TipoFlujo 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 EXPORT TipoFlujo() BEGIN //Variables. LOCAL Caudal,Diametro,Viscosidad,Re,Tipo; //Ingreso de datos. INPUT ( { {Caudal,[0],{25,25,0}}, {Diametro,[0],{25,20,1}}, {Viscosidad,[0],{25,25,2}} }, "FLUJO EN TUBERIAS", { "Q:", "D:", "v:" }, { "Caudal m3/s", "m", "m2/s" }, {0.1,10,1.14e−6}, {0.1,10,1.14e−6} ); //Proceso. Re:=4*Caudal/(PI()*Viscosidad*Diametro); CASE IF Re < 2100 THEN Tipo:="LAMINAR"; END; IF 2100<=Re < 4100 THEN Tipo:="de TRANSICION"; END; IF Re > 4100 THEN Tipo:="TURBULENTO"; END; END; //Salida de resultados. DIMGROB_P(G1,320,240); RECT_P(); TEXTOUT_P("RESULTADOS",G1,120,10,3); TEXTOUT_P("El tipo de flujo es "+Tipo,G1,10,40,2); BLIT_P(G0,G1); WAIT(−1); END; ser de gran ayuda para los usuarios del programa, ya que se puede lograr que se guarden los últimos datos de ingreso al formulario. 5.1 Estructuras selectivas | Capítulo 5 Programación en HP PPL aplicado a la ingeniería civil Las variables Caudal, Diametro y Viscosidad se deben declarar como variables globales asignándoles unos valores iniciales Caudal:=0.1; , Diametro:=10; , Viscosidad:=1.14e−6; ; también se debe modificar el parámetro de reseteo e inicial del comando INPUT (lineas 23 y 24 del código 5.6), 0.1,10,1.14e−6 por las siguientes variables Caudal,Diametro,Viscosidad , con estas modificaciones el programa será capas de abrir en el formulario los últimos datos que se ingreso. Figure 5.18 Ingreso de datos: programa TipoFlujo 5.6 Escriba un programa que convierte rumbos y distancias a coordenadas cartesianas de un punto. Tomar en cuenta la siguiente tabla de transformación. Figure 5.19 Resultado: programa TipoFlujo 83 riayala@uc.cl Ejemplo Rumbos y distancias a coordenada cartesiana. 5.1 Estructuras selectivas | Capítulo 5 Programación en HP PPL Cuadrante Azimut NE Igual al Rumbo. SE 180° - Rumbo SW 180° + Rumbo NW 360° - Rumbo Solución: El proceso puede ser programado fácilmente en la calculadora HP PRIME. Código del programa. Código 5.7: Cuadrante Figure 5.20 Ingreso de datos: programa Cuadrante Figure 5.21 Resultado: programa Cuadrante Sugerencia El uso de las variables globales pueden en un sentido pueden ser de gran ayuda para los usuarios del programa, ya que se puede lograr que se guarden los últimos datos de ingreso al riayala@uc.cl formulario. 84 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 EXPORT Cuadrante() BEGIN LOCAL Rumbo,Cuadrante,Distancia,Azimut,CX,CY; //Ingreso de datos. INPUT ( { {Rumbo,[0],{25,25,0}}, {Cuadrante,{"NE","SE","SW","NW"},{25,20,1}}, {Distancia,[0],{25,25,2}} }, "RUMBO A COORDENADAS CARTESIANA", { "Rumbo:", "Cuadrante:", "Distancia:" }, { "Ingrese el rumbo en grados (°).", "Elija el cuadrante.", "Ingrese la distancia (m)." }, {13.85,2,320.71}, {13.85,2,320.71} ); //Convirtiendo Rumbo en Azimut. CASE IF Cuadrante==1 THEN Azimut:=Rumbo; Cuadrante:="NE"; END; IF Cuadrante==2 THEN Azimut:=180−Rumbo; Cuadrante:="SE"; END; IF Cuadrante==3 THEN Azimut:=180+Rumbo; Cuadrante:="SW"; END; IF Cuadrante==4 THEN 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 5.1 Estructuras selectivas | Capítulo 5 Programación en HP PPL aplicado a la ingeniería civil Azimut:=360−Rumbo; Cuadrante:="NW"; END; END; //Convirtiendo Azimut a coordenadas. CX:=Distancia*SIN(PI()*Azimut/180); CY:=Distancia*COS(PI()*Azimut/180); //Impresion de datos. DIMGROB_P(G1,320,240); RECT_P(); TEXTOUT_P("RESULTADOS",G1,120,10,3); TEXTOUT_P("1−RUMBOS A COORDENADAS X y Y",G1,5,30,3); TEXTOUT_P("Rumbo = " + Rumbo + " " +Cuadrante,G1,5,50,3); TEXTOUT_P("Azimut = " + Azimut,G1,5,50,3); TEXTOUT_P("Coordenada X = "+CX,G1,5,50,3); TEXTOUT_P("Coordenada Y = "+CY,G1,5,50,3); BLIT_P(G0,G1); WAIT(−1); END; Para poder cargar los últimos datos que se ingresó cada vez que se inicie el programa se puede modificar algunas linea de código como se muestra a continuación. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 Rumbo:=13.85; Cuadrante:=2; Distancia:=320.71; EXPORT Cuadrante() BEGIN LOCAL Azimut,CX,CY; //Ingreso de datos. INPUT ( { {Rumbo,[0],{25,25,0}}, {Cuadrante,{"NE","SE","SW","NW"},{25,20,1}}, {Distancia,[0],{25,25,2}} }, "RUMBO A COORDENADAS CARTESIANA", { "Rumbo:", "Cuadrante:", "Distancia:" }, { "Ingrese el rumbo en grados (°).", "Elija el cuadrante.", "Ingrese la distancia (m)." }, {Rumbo,Cuadrante,Distancia}, {Rumbo,Cuadrante,Distancia} ); //Convirtiendo Rumbo en Azimut. CASE IF Cuadrante==1 THEN Azimut:=Rumbo; Cuadrante:="NE"; END; IF Cuadrante==2 THEN 85 riayala@uc.cl Código 5.8: Cuadrante con variables globales 5.1 Estructuras selectivas | Capítulo 5 Programación en HP PPL 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 Azimut:=180−Rumbo; Cuadrante:="SE"; END; IF Cuadrante==3 THEN Azimut:=180+Rumbo; Cuadrante:="SW"; END; IF Cuadrante==4 THEN Azimut:=360−Rumbo; Cuadrante:="NW"; END; END; //Convirtiendo Azimut a coordenadas. CX:=Distancia*SIN(PI()*Azimut/180); CY:=Distancia*COS(PI()*Azimut/180); //Impresion de datos. DIMGROB_P(G1,320,240); RECT_P(); TEXTOUT_P("RESULTADOS",G1,120,10,3); TEXTOUT_P("1−RUMBOS A COORDENADAS X y Y",G1,5,30,3); TEXTOUT_P("Rumbo = " + Rumbo + " " +Cuadrante,G1,5,50,3); TEXTOUT_P("Azimut = " + Azimut,G1,5,50,3); TEXTOUT_P("Coordenada X = "+CX,G1,5,50,3); TEXTOUT_P("Coordenada Y = "+CY,G1,5,50,3); BLIT_P(G0,G1); WAIT(−1); END; 5.1.9Ejercicios propuestos. Ejemplo 1 Elabore un programa que pida al usuario dos numero e imprima el mayor de ellos. Ejemplo 2 Elabore un programa que pida un numero y si diga si es o no múltiplo de 3. Ejemplo 3 Elabore un programa que pida un numero y si diga si es o no múltiplo de 3. Ejemplo 4 Dado 3 números deducir cual es el central. Ejemplo 5 Que dados dos números n1 y n2 se quiere dividir n1 entre n2 siempre y cuando n2 no sea cero, determinar e imprimir el resultado de la división en caso riayala@uc.cl contrario imprimir “No se puede dividir”. Ejemplo 6 Que lea dos temperaturas, imprimir “Hace Frio” si la temperatura es inferior a 15º, en caso contrario 86 imprimir “Hace Calor”. 5.2 Estructuras repetitivas. Es muy común encontrar en la práctica algoritmos cuyas operaciones se deben ejecutar un número repetido de veces. Recordar Bucles, ciclo o iteración. Es un segmento de un Si bien las instrucciones son las mismas, los datos sobre algoritmo o programa, cuya(s) los que se opera varían. El conjunto de instrucciones que instrucción(es) se repite(n) un se ejecutan repetidamente se llama ciclo. Es un segmento número conocido o indefinido de un algoritmo o programa cuyas instrucciones se repiten 5.2 Estructuras repetitivas. | Capítulo 5 Programación en HP PPL aplicado a la ingeniería civil de veces mientras se cumpla una determinada condición. un número determinado de veces mientras se cumpla una determinada condición y consta de tres partes: 1 Decisión del bucle. 2 Cuerpo del bucle 3 Salida del bucle. Dentro de los ciclos se utilizan contadores y acumuladores, que regulan que el ciclo llegue a su fin. 1 Contador: Es un tipo de variable que incrementa o Contador Veces = Veces + 1 decrementa su valor en un valor constante. Cuando decimos incrementa estamos sumando. Acumulador Suma:=Suma+Numero Ejemplo: Veces = Veces + 1 Como se puede observar a la variable ”veces” se le está incrementando un valor constante (1); es decir a su contenido le sumas el valor y se vuelve a guardar en la misma variable. Es una variable cuyo valor se incrementa o decremento en una cantidad constante en cada iteración. Puede ser positivo (incrementos, uno e uno) o negativo 2 Acumulador: Es una variable que incrementa o decrece su contenido en cantidades variables. Ejemplo: Nomina = Nomina + sueldo 87 riayala@uc.cl (decremento, uno en uno). 5.2 Estructuras repetitivas. | Capítulo 5 Programación en HP PPL En el lenguaje de programacion PPL PRIME, existen muchas estructuras de codigo que realizan repeticiones, tal pueden ser. 1 FOR. ión 40 2 WHILE. 3 REPEAT. xada: FOR ntar la repetición de un cierto conjunto de instrucciones Entre tantos, son las estructuras repetitivas mas utilizados l del bucle, llamada también ı́ndice, que va recorriendo en determinado. Para cada valor del ı́ndice en dicho to de instrucciones. por los programadores. rma de escribir esta estructura en MATLAB y el organiones se ejecuta una vez para cada valor del indice, que omponente del vector V, de longitud N. 5.2.1Estructura FOR La estructura repetir conocida comúnmente como FOR , k=1 k>N es la estructura algorítmica adecuada para utilizar en un ciclo que se ejecutará un número definido de veces. Este V F Instrucciones tipo de estructura está presente en todos los lenguajes de programación, para ello se utiliza una variable de control del bucle, llamada también índice, que va recorriendo un k = k+1 conjunto pre-fijado de valores en un orden determinado. Para cada valor del índice en dicho conjunto, se ejecuta una Figure 5.22 Diagrama de la estructura FOR ATLAB y diagrama de flujo. El indice del bucle recorre ura FOR, véanse los 5.8 y 5.9 para calcular la Algoritmos Sugerencia El valor de la variable de vez el mismo conjunto de instrucciones. En la Figura 5.22 se han representado la forma de escribir esta estructura en PPL PRIMEy el diagrama correspondiente: el bloque de instrucciones se ejecuta una vez para cada valor del indice k, que va aumentando control k puede ser utilizado ede ser utilizado o onono dentro del conjunto de instrucciones dentro del conjunto de sucesivamente en cada ciclo hasta llegar al numero N. debe ser modificado. instrucciones que forman parte l indice puede ser vacı́o (N=0). En ese caso, Sintaxis el bloque Tipo I: del cuerpo del FOR , pero no FOR k FROM inicio TO N DO , es decir, incluir una de la otra, con la restricción debedentro ser modificado. instruccion ue estar completamente contenida en uno de los bloques END; plo, el Algoritmo 5.10. Recordar El conjunto de valores que debe riayala@uc.cl recorrer el indice puede ser vacío (N=0). En ese caso, el Tipo II: FOR k:=inicio TO N DO instruccion END; bloque de instrucciones no se ejecuta ninguna vez. 88 Define la variable var con el valor de inicio y siempre que 5.2 Estructuras repetitivas. | Capítulo 5 Programación en HP PPL aplicado a la ingeniería civil el valor de esta variable sea inferior o igual a N, ejecuta la secuencia de instruccion, y luego incremente 1 a la variable k. Lo resaltaste de este comando es que ejecuta un número especificado de veces y de modo automático controla el número de iteraciones o pasos a través del cuerpo del bucle. Ejemplo Factorial de un número. 5.7 El factorial de un entero positivo n, el factorial de n o n factorial se define en principio como el producto de todos los números enteros positivos desde 1 (es decir, los números naturales) hasta n. Entonces elaborar un programa que sirva para calcular el factorial de un número entero positivo dado. n! = n Y k k=1 Solución: Código 5.9: Factorial EXPORT Factorial(num) BEGIN //1 ‐>Declaracion de variables. LOCAL Factorial,i; //2 ‐>Proceso de datos Factorial:=1; FOR i:=1 TO num DO Factorial:=i*Factorial; END; //3 ‐>Salida de datos PRINT(); PRINT("El factorial de "+num + " es igual a " +Factorial ); END; Figure 5.23 Resultado del programa Factorial para num=5 A partir de la estructura de programación FOR tambien podemos obtener algunas variantes donde son casos específicos los cuales pueden incrementar el contador en un valor definido. 89 riayala@uc.cl 1 2 3 4 5 6 7 8 9 10 11 12 13 5.2 Estructuras repetitivas. | Capítulo 5 Programación en HP PPL 5.2.1.1 Estructura FOR STEP Sintaxis FOR k:=inicio TO fin [STEP incremento] DO instruccion END; Define la variable k con el valor inicio y siempre que el valor de esta variable sea inferior o igual a fin ejecuta la secuencia de instruccion y luego suma incremento a k. Ejemplo Producto de números. 5.8 Elabore un programa donde realice el producto de los n primeros números tomados de a en a. Solución: Código 5.10: Producto 1 2 3 4 5 6 7 8 9 10 11 12 13 Figure 5.24 Resultado del programa Producto A=5 y b=2 EXPORT Producto(A,b) BEGIN //1 ‐>Declaracion de variables. LOCAL Mult,i; //2 ‐>Proceso de datos Mult:=1; FOR i:=1 TO A STEP b DO Mult:=i*Mult; END; //3 ‐>Salida de datos PRINT(); PRINT("Producto de los primeros "+ A +"numeros tomados de" +b+ " en "+ b+ " es igual a " + Mult ) END; 5.2.1.2 Estructura FOR DOWN Sintaxis FOR k:=inico DOWNTO fin DO instruccion END; Define la variable k con el valor inicio y siempre que el valor de esta variable sea mayor o igual a fin, ejecuta la secuencia de instrucciones, y luego resta 1 (decremento) a k. Ejemplo title= Números consecutivos. 5.9 Imprima los “n” primeros números consecutivos mayor a riayala@uc.cl menor hasta un número dado. Figure 5.25 Resultado del programa Producto A=5 y b=2 90 Solución: 5.2 Estructuras repetitivas. | Capítulo 5 Programación en HP PPL aplicado a la ingeniería civil Código 5.11: Consecutivos 1 2 3 4 5 6 7 8 9 10 EXPORT Consecutivos(A,b) BEGIN //1 ‐>Declaracion de variables. LOCAL i; //2 ‐>Proceso de datos y salida de datos PRINT(); FOR i:=A DOWNTO b DO PRINT("Numero " + i ); END; END; 5.2.1.3 Estructura FOR STEP DOWN Sintaxis FOR k:=inicio DOWNTO fin [STEP incremento] DO instruccion END; 3.6 Estructura de control repetitiva o de iteración condicional Define la variable k con el valor inicio y siempre que el valor de esta variable sea mayor o igual a fin ejecuta la secuencia de instruccion y luego resta decremento a k. nuación) 5.2.2 if (D,50) printf(“%f,%f\n”,A,C*2); printf(“%f,%f,%f,%f\n”,A,B,C,D); Estructura WHILE b5b%2; } Recordar else printf(“%f,%f\n”,B,D/2); printf(“%d,%d,%d,%d,%d\n”,e,d*2,b,a14,c); La estructura algorítmica mientras, comúnmente conocida getch(); getch (); return 0; utilizar en un como WHILE , es la estructura adecuada para return 0; } ciclo cuando NO sabemos el número de veces que éste se No es necesario declarar un contador, si se hay la necesidad se declara dentro del bucle. ha de repetir. Dicho número depende de las proposiciones dentro del ciclo. Sintaxis WHILE condicion DO instrucciones computadoras Su están diseñadas primordialmente para aquellas aplifuncionamiento es evidente, a la vista del diagrama: ones en las cuales una operación o conjunto de ellas deben repetirse No de una vez. Condición 1 Al comienzo de cada iteración se evalúa la expresión La repetición de una acción (una o varias instrucciones) se lleva a lógica (condición). Si o mientras se cumpla cierta condición; para que la acción termine, la es VERDADERO, se que ejecuta el conjunto 2 Si el resultado ón misma debe modificar la(s) variable(s) de control interviene(n) Acción a condición. Dicha de condición puede estar predefinida enrepite el ci-el instrucciones y se vuelve a iterar, escomo decir, se desde (for); o no predeterminada, como en los bucles mientras (while) paso 1. cer-mientras (do_while). Figure 5.26 Diagrama de la es FALSO, se algoritmo detiene la oejecución delcuya(s) 3 Si el resultado Bucles, ciclo o iteración. Es un segmento de un programa, instrucción(es) se repite(n) estructura WHILE número conocido o indefinido de veces mientras se cumpla una determinada condición. En cada vuelta ciclo comprueba si la condición es verdadera, rompiéndose el ciclo cuando es falsa. La condición en algún 91 mento tiene que ser falsa ya que en caso contrario el bucle se hará infinito. riayala@uc.cl k:=k+1; //contador. 6 Estructura de control repetitiva o de iteración condicional END; 5.2 Estructuras repetitivas. | Capítulo 5 Programación en HP PPL ciclo WHILE y el programa se sigue ejecutando por la instrucción siguiente al END. Ejemplo Número PI. 5.10 π (pi) es la relación entre la longitud de una circunferencia y su diámetro en geometría euclidiana. Es un número irracional y una de las constantes matemáticas más importantes. Se emplea frecuentemente en matemáticas, física e ingeniería. El valor numérico de π se puede obtener Estructura de control repetitiva o de iteración condicional 79 con la siguiente expresión. π=4 m X (−1)i i=1 2i + 1 Se desea obtener el numero π cuando se cumpla im = 1000 b5b%2; o cuando perror siendo el error máximo 0.01. Figure 5.27 Ingreso de datos: programa NumeroPI ,%d,%d,%d,%d\n”,e,d*2,b,a14,c); Solución: eturn 0; Código 5.12: NumeroPI Figure 5.28 Resultado: programa eraciónNumeroPI condicional aplietirse Acción Si No eva a ne, la ne(n) el ciwhile) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 EXPORT NumeroPI(emax) BEGIN //1 ‐>Declaracion de variables. LOCAL pi,i,e; //2 ‐>Proceso de datos. i:=0; pi:=0; e:=ABS(PI()−pi); //Error. WHILE e>emax DO pi:=pi+4*((−1)^i)/(2*i+1); //Calculo e:=ABS(PI()−pi); i:=i+1; //Acumulador. END; //3 ‐>Salida de datos. PRINT(); PRINT("PI con "+ i + " iteraciones y un error aproximado de " + e + " es " + pi ); END; Condición 5.2.3Estructura REPEAT rama, cuya(s) instrucción(es) se repite(n) En la sentencia WHILE , la condición de ejecución del bucle se estructura WHILE determinada condición. En cada vuelta verifica antes de haber ejecutado éste por primera vez. Por Recordar lo cuando es falsa. La condición en algún tanto, es necesario inicializar las variables empleadas para No es necesario declarar un rá infinito. riayala@uc.cl Figure 5.29 Diagrama de la contador, y si lo hay se declara determinar su ejecución antes de entrar por primera vez en dentro del bucle. éste, lo cual puede tener como consecuencia que el bucle no anderas 92 e a variables que van incrementando o 5.2 Estructuras repetitivas. | Capítulo 5 Programación en HP PPL aplicado a la ingeniería civil llegue a ejecutarse nunca. Si queremos evitar ambas cosas, es decir: 1 Tener que inicializar las variables de control del bucle. 2 Ejecutar al menos una vez el bucle. debemos emplear la sentencia REPEAT . En esta sentencia, el número de iteraciones depende de la evaluación de una condición, como en la de WHILE , pero esta evaluación se realiza después de cada ejecución del bucle. instrucciones Recordar Por la forma de ejecución de UNTIL condicion ; este bucle es muy utilizado por Sintaxis REPEAT los programadores para realizar Repite la secuencia de instrucciones hasta que el valor de la condición sea verdadero (distinto de 0). Es decir, repite programas con gráficos (Detiene o congelan los gráficos de la pantalla indefinidamente hasta mientras la condición sea falso. que la condición sea verdadera) Ejemplo Raíz cuadrada. 5.11 Para calcular la raíz cuadrada de un numero N se elige un valor inicial y la cantidad de iteraciones. xn−1 + xn = N xn−1 2 Solución: Código 5.13: RaizCuadrada EXPORT RaizCuadrada(num,emax) BEGIN //1 ‐>Declaracion de variables. LOCAL i,iraiz,fraiz,error; iraiz:=0.5; //Raiz inicial. IF num<=0 THEN MSGBOX("El numero ingresado no es positivo"); ELSE //2 ‐>Proceso de datos REPEAT fraiz:=0.5*(iraiz+num/iraiz); error:=ABS((fraiz−iraiz)/fraiz); iraiz:=fraiz; i:=i+1; Figure 5.30 Ingreso de datos: programa NumeroPI Figure 5.31 Resultado: programa NumeroPI 93 riayala@uc.cl 1 2 3 4 5 6 7 8 9 10 11 12 13 14 5.2 Estructuras repetitivas. | Capítulo 5 Programación en HP PPL UNTIL error<emax; //3 ‐>Salida de datos PRINT(); PRINT("Raiz cuadrada de "+num+" es "+fraiz); PRINT("Ralculado con " + i +" iteraciones"); PRINT("Con un error de " + error); END; END; 15 16 17 18 19 20 21 22 5.2.4Comandos BREAK y CONTINUE En ocasiones es necesario interrumpir la ejecución de un ciclo de repetición en algún punto interno del bloque de instrucciones que se repiten. Lógicamente, ello dependerá de que se verifique o no alguna condición. La interrupción puede hacerse de dos formas: 1 Abandonando el ciclo de repetición definitivamente. Algoritmos y estructuras programación Algoritmos y estructuras de de programación 43 43 2 Abandonando la iteración en curso, pero comenzando la siguiente. Abandonando la iteración en curso, comenzando la siguiente. 2. 2. Abandonando la iteración en curso, peropero comenzando la siguiente. En el lenguaje de programación PPL PRIME, la primera instrucciones para poner en práctica tienen nombres diversos en distintos los distintos lenguajes LasLas instrucciones para poner estoesto en práctica tienen nombres diversos en los lenguajes de de BREAKBREAK y la segunda opción se implementa con la instrucción programación. En MATLAB, la primera opción se implementa con la instrucción y la segunda programación. En MATLAB, la primera opción se implementa con la instrucción BREAK y la segunda la instrucción CONTINUE. Ambas pueden utilizarse tanto romper un ciclo FOR como un ciclo concon la instrucción CONTINUE. Ambas pueden tanto parapara romper unpueden ciclo FOR como un ciclo CONTINUE . Ambas utilizarse tanto conutilizarse la instrucción WHILE. Cuando se utiliza la orden BREAK dentro de ciclo un ciclo el ı́ndice del bucle conserva, WHILE. Cuando se utiliza la orden BREAK dentro de un FOR,FOR, el ı́ndice del bucle conserva, fuerafuera para romper un ciclo FOR , un ciclo WHILE o como un ciclo del mismo, el último valor que tomó. del mismo, el último valor que tomó. REPEAT Véanse correspondientes diagramas de. flujo en Figuras las Figuras y 5.11. Véanse los los correspondientes diagramas de flujo en las 5.105.10 y 5.11. Condición Condición WHILE WHILE TRUETRUE FALSE FALSE Condición Condición WHILE WHILE FALSEFALSE TRUETRUE Instrucciones-1 Instrucciones-1 TRUE TRUE Condición Condición BREAK BREAK ruptura ruptura FALSE FALSE Instrucciones-1 Instrucciones-1 TRUE TRUECondición Condición CONTINUE CONTINUE ruptura ruptura FALSEFALSE riayala@uc.cl Instrucciones-2 Instrucciones-2 Figure 5.32 Diagrama de flujo de Instrucciones-2 Instrucciones-2 Figure 5.33 Diagrama de flujo de la Figura Diagrama flujo de la 5.11:5.11: de flujo de laderuptura Figura 5.10: Diagrama de flujo deruptura la ruptura Figura Figura Diagrama de flujo la ruptura la5.10: ruptura de ciclode BREAK ruptura deDiagrama ciclo CONTINUE de de ciclo BREAK. de ciclo CONTINUE. ciclo BREAK. de ciclo CONTINUE. 94 5.5.7 de de elección entre varios casos: SWITCH 5.5.7Estructura Estructura elección entre varios casos: SWITCH Este tipotipo de de estructura permite decidir entre varios caminos posibles, en función del valor que que Este estructura permite decidir entre varios caminos posibles, en función del valor Este comando hace el rompimiento de los bucles, el argumento opcional n deshace n niveles de bucles. La Recordar Cuando se utiliza la orden BREAK dentro de un ciclo FOR , el índice ejecución retoma en la primera instrucción después del del bucle conserva, fuera del bucle. Sin un argumento, sale desde un único bucle. mismo, el ultimo valor que Sintaxis >>BREAK; tomo. >>BREAK(n); >>CONTINUE; 5.2 Estructuras repetitivas. | Capítulo 5 Programación en HP PPL aplicado a la ingeniería civil 5.2.5Estructuras iterativas anidadas Las estructuras iterativas, al igual que las de decisión, se pueden anidar; es decir, se pueden colocar una dentro de otra. Recordar Las estructuras FOR, WHILE y REPEAT se pueden anidar entre ellos. El anidamiento se conforma por un ciclo externo y uno o más ciclos internos, donde cada vez que se repite el ciclo externo, los internos se reinician y ejecutan todas las iteraciones definidas. Las estructuras iterativas vistas hasta ahora pueden anidarse entre ellos mismos o también es posible anidarlos como una combinación con cada una de esas estructuras. Sintaxis FOR k:=inicio1 TO N DO instrucciones1 FOR m:=inicio2 TO M DO instrucciones2 END; END; Ejemplo Reloj digital. El tiempo se mide en horas, minutos y segundos, las horas están conformadas por minutos y los minutos por segundos, de manera que si se escribe un ciclo para las horas, otro para los minutos y otro para los segundos, el ciclo de los minutos en cada iteración deberá esperar a que se ejecuten las 60 iteraciones del ciclo de los segundos (0-59) y el de las horas deberá esperar que se ejecute el de 95 riayala@uc.cl 5.12 5.2 Estructuras repetitivas. | Capítulo 5 Programación en HP PPL los minutos (0-59). Solución: Para implementar un reloj digital es necesario declarar tres variables, para controlar: horas, minutos y segundos. Cada una de estas variables controla un ciclo, así: los segundos se incrementan desde 0 a 59, los minutos también desde 0 a 59 y las horas desde 1 a 12 o de 1 a 24. Figure 5.34 Resultado: programa RelojDigital Figure 5.35 Resultado: programa RelojDigital Código 5.14: RelojDigital 1 2 3 4 5 6 7 8 9 10 11 12 13 14 EXPORT RelojDigital() BEGIN //1 ‐>Declaracion de variables. LOCAL hora,minuto,segundo; //2 ‐>Proceso y salida. FOR hora:=1 TO 12 DO FOR minuto:=0 TO 59 DO FOR segundo:=0 TO 59 DO PRINT(); PRINT(hora + ":" + minuto + ":" + segundo); END; END; END; END; 5.2.6Ejercicios aplicativos. Ejercicio 5.2 Método de newton Raphson. Tal vez, de las fórmulas para localizar raíces, la fórmula de Newton-Raphson sea la más ampliamente utilizada. El método de Newton-Raphson se deduce a partir de una interpretación geométrica basado en la pendiente de la función dada. La ecuación 5.1, se conoce como la fórmula de Newton Raphson. riayala@uc.cl xi+1 = xi − f (xi ) f ′ (xi ) (5.1) a partir de esta fórmula elaborar un programa que sirva para calcular la raíz de una ecuación dada con el 96 5.2 Estructuras repetitivas. | Capítulo 5 Programación en HP PPL aplicado a la ingeniería civil método de Newton Raphson. Solución: Código del programa. Código 5.15: NEWTON-ENL FUNC:='e^(−X)−X'; xi:=0; ni:=20; er:=0.001; EXPORT NEWTON_ENL() BEGIN LOCAL Niter,error,cond,x1; RECT_P(); INPUT( { {FUNC,[8],{20,40,1}}, {xi,[0],{20,20,2}}, {ni,[0],{20,20,3}}, {er,[0],{20,20,4}} }, "Newton−Raphson ", {"f(x):", "xi:", "ni:", "tol:" }, {"f(X)", "x inicial", "Maximo numero de iteraciones", "tolerancia" } ); Niter:=0; REPEAT Niter:=Niter+1; X:=xi; x1:=xi−(EVAL(FUNC))/(EVAL(diff(FUNC,X))); error:=ABS(((x1−xi)/x1))*100; IF (error<er) OR (ni < Niter) THEN cond:=1; ELSE xi:=x1; END; UNTIL cond>0; RECT_P(); IF error<er THEN TEXTOUT_P("*RESPUESTA",50,5); TEXTOUT_P("−La raiz es: "+x1,5,25); TEXTOUT_P("−Iteraciones: "+Niter,5,45); ELSE TEXTOUT_P("*RESPUESTA",50,5); TEXTOUT_P("−Divergencia o convergencia lenta",5,25); TEXTOUT_P("−Iteraciones: "+Niter,5,45); END; WAIT(−1); END; Figure 5.36 Ingreso de datos: programa NEWTON-ENL Figure 5.37 Resultado: programa NEWTON-ENL 97 riayala@uc.cl 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 5.2 Estructuras repetitivas. | Capítulo 5 Programación en HP PPL Tony Quispe Ejercicio 5.3 Programa gráfico de proceso en espera. Crear un programa con los bucles o estructuras repetitivas que sirvan para mostrar una pantalla de un proceso en espera con gráficos dinámicos, Solución: Código del programa Cargando1. Código 5.16: Cargando1 Figure 5.38 Cargando1 Resultado: programa Figure 5.39 Cargando1 Resultado: programa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 //Declarando funciones. CIRCULO(); EXPORT Cargando() BEGIN LOCAL x,y,x0,y0,i,a,r; LOCAL t,j; t:=10; x0:=160; y0:=120; r:=30; IF SIN(π/2)==1 THEN a:=π/6; ELSE a:=30; END; RECT_P(); FOR j:=0 TO 12*t−1 DO RECT_P(125,85,195,155,RGB(255,255,255)); TEXTOUT_P("Cargando...",135,115,1,RGB(0,0,255)); FOR i:=0 TO 11 DO CIRCULO(G0, x0+r*COS(a*(12*t+i−1−j)), y0+r*SIN(a*(12*t+i−1−j)) , (3.5−i/4),RGB(0,0,255) END; END; END; //Funcion CIRCULO(Gp,x1,y1,RAD,COL) BEGIN LOCAL j,a; IF SIN(π/2)==1 THEN a:=π/36; ELSE a:=36; END; FOR j:=1 TO 72 DO LINE_p(Gp,x1,y1,x1+RAD*COS(j*a),y1+RAD*SIN(j*a),COL); END; END; Esau Guerrero Ejercicio 5.4 Programa gráfico de proceso en espera. riayala@uc.cl Crear un programa con los bucles o estructuras repetitivas que sirvan para mostrar una pantalla de un proceso en espera con gráficos dinámicos, 98 5.2 Estructuras repetitivas. | Capítulo 5 Programación en HP PPL aplicado a la ingeniería civil Solución: Código del programa Cargando2. Código 5.17: Cargando2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 EXPORT Cargando() BEGIN LOCAL j,t,r,xc,yc,x,y; t:=10; //−‐>Tiempo que demorara el cargando r:=15; //radio. RECT_P(); TEXTOUT_P("Cargando...",143,145,1,RGB(128,128,128)); xc:=165; yc:=115; FOR j:=1 TO 360/5 DO x:=xc+r*COS(5*j); y:=yc+r*SIN(5*j); TEXTOUT_P("•",x,y,1,RGB(220,220,200)); END; FOR j:=1 TO 360/5 DO x:=xc+r*COS(5*j); y:=yc+r*SIN(5*j); TEXTOUT_P("•",x,y,1,RGB(255,0,0)); WAIT(0.15); END; END; Esau Guerrero Ejercicio 5.5 Figure 5.40 Cargando2 Resultado: programa Figure 5.41 Resultado: programa Cargando2 Gráficos dinámicos. Crear un programa utilizando los bucles para generar gráficos dinámicos Solución: Código del programa Cargando2. Código 5.18: HolaMundo EXPORT HolaMundo() c1:=RGB(0,0,180); c2:=RGB(255,255,255); c3:=RGB(180,0,0); BEGIN LOCAL i,j,p,a,x; p:=3; //−‐>Numero de ciclos. x:=130; RECT_P(c2); RECT_P(x−10,100,x+80,130,c3); RECT_P(x−1,108,x+70,120,c2); FOR i:=1 TO p DO FOR j:=1 TO 21 DO IF j<=10 THEN a:=LEFT("HOLA MUNDO",j); TEXTOUT_P(a,x+70−7*j,110,1,c1); TEXTOUT_P(a,x+71−7*j,110,1,c1); Figure 5.42 Resultado: programa HolaMundo Figure 5.43 Resultado: programa HolaMundo 99 riayala@uc.cl 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 5.2 Estructuras repetitivas. | Capítulo 5 Programación en HP PPL 18 19 20 21 22 23 24 25 26 27 28 29 WAIT(0.5); RECT_P(x+1,110,x+70,119,c2); ELSE a:=RIGHT("HOLA MUNDO ",22−j); TEXTOUT_P(a,x,110,1,c1); TEXTOUT_P(a,x+1,110,1,c1); WAIT(0.5); RECT_P(x,110,x+70,119,c2); END; END; END; END; Esau Guerrero Ejercicio 5.6 Método estático o de fuerzas equivalentes. El Método Estático, supone el efecto del sismo equivalente a un sistema de fuerzas horizontales estáticas, que actúan independientemente y no simultáneamente según la dirección de los pórticos principales y secundarios. Dichas fuerzas horizontales se consideran aplicadas al nivel de cada piso, y cuya línea de acción pasa por el centro de gravedad de las cargas verticales de dicho piso. La norma peruana sismoresistente E030-2018, da las siguientes expresiones para el cálculo del a fuerza sísmica Fi . Fi = αi × V ; αi = Pi (h)k n X ; V = Pi (h)j Z · U · C · ·S hn · P; T = R CT j=1 donde: n : numero de pisos del edificio. k : es un exponente relacionado con el periodo fundamental. T : periodo fundamental. riayala@uc.cl T ≤ 0.5 s ⇒ k = 1.0 T > 0.5 s ⇒ k = (0.75 + 0.5 · T ) ≤ 2.0 100 5.2 Estructuras repetitivas. | Capítulo 5 Programación en HP PPL aplicado a la ingeniería civil Elaborar un programa que calcule dichas fuerzas horizontal dados los siguientes datos. n = 8 (Numero de Pisos). H = 3 m (Altura de piso.). Z = 2.5 (Zona sísmica). U = 1.3 (Factor de uso). S = 1.3 (Factor del suelo). Peso = 1200 kgf (Peso del edificio). Solución: Código del programa. Código 5.19: FuerzaEstatica EXPORT FuerzaEstatica() BEGIN //Variables. LOCAL nP,HP,Re,zZ,zU,zS,zC,Peso; LOCAL zR,rV,rF,rT,vCT,rkα,i,i; LOCAL j,rSum; vCT:=35; //Para edificio de concreto armado. //Ingreso de datos. INPUT ( { {nP,[0],{60,25,0}}, {HP,[0],{60,25,1}}, {zZ,[0],{60,25,2}}, {zU,[0],{60,25,3}}, {zS,[0],{60,25,4}}, {zC,[0],{60,25,5}}, {zR,[0],{60,25,6}}, {Peso,[0],{60,25,7}} }, "FUERZAS EQUIVALENTE", { "Pisos:", "Altura de Pisos:", "Factor zona:", "Fator de uso:", "Factor de suelo:", "Factor C:", "R:", "Peso piso:" }, { "Ingrese el numero de pisos", "Ingrese la altura tipica de los pisos (m)", "Ingrese factor de zona", "Ingrese factor de uso", "Ingrese factor de suelo", "Ingrese factor dependiente del periodo", "Ingrese factor reduccion sismica", Figure 5.44 Ingreso de datos: programa NumeroPI Figure 5.45 NumeroPI Resultado: programa Para los datos propuestos la fuerza en cada piso es de 198.05 kgf, esto por que para toda la altura y el peso para cada piso se ingresa con un valor típico. En el capítulo siguiente se verán el manejo de listas y matrices donde sería posible el ingreso de la altura y peso de cada piso. 101 riayala@uc.cl 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 5.2 Estructuras repetitivas. | Capítulo 5 Programación en HP PPL 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 "Ingrese el peso tipico de cada piso (kgf)" }, {8,3,2.5,1.3,1.3,2.5,8,1200}, {8,3,2.5,1.3,1.3,2.5,8,1200} ); //Proceso. rV:=zZ*zU*zC*zS/zR*Peso; rT:=nP*HP/vCT; IF rT <= 0.5 THEN rk:=1; ELSE rk:=0.75+0.5*rT; IF rk > 2 THEN rk:=2; END; END; //Salida de datos. PRINT(); PRINT("CALCULO DE LAS FUERZAS EN CADA PISO"); PRINT("Peso total del edificio = "+ nP*Peso); PRINT("Altura total del edificio = "+ nP*HP); PRINT("Cortante V= "+ rV); PRINT("Periodo T= "+ rT); PRINT("FUERZAS EN CADA PISO"); PRINT(""); FOR i:=1 TO nP DO rSum:=0; FOR j:=1 TO nP DO rSum:=rSum+Peso*HP^rk; END;α i:=Peso*HP^rk/rSum; rF:=αi*rV; PRINT("Fuerza en el Piso " + i + " = " + rF); END; END; 5.2.7Ejercicios propuestos. Ejercicio 1 Que lea un numero N y calcule la suma de los números menores que N. Ejercicio 2 Que lea un numero N y que permita calcular el promedio de los números menores que N. Ejercicio 3 Que lea N números ingresados por teclado y decir si son múltiplo de 5. Ejercicio 4 riayala@uc.cl naturales. 102 Que permita mostrar los N primeros números Ejercicio 5 5.2 Estructuras repetitivas. | Capítulo 5 Programación en HP PPL aplicado a la ingeniería civil Que permita mostrar los N primeros números impares. Ejercicio 6 Que permita mostrar la suma de los N primeros números pares. Ejercicio 7 Que calcule la siguiente suma: S =1+ Ejercicio 8 x x x + + ... 1 2 3 Que muestre las tablas de multiplicar del número 9. Ejercicio 9 Que lea N números y que muestre el mayor de ellos. Ejercicio 10 Calcule la suma y el promedio de los números pares menores o iguales que un numero K leído al comienzo. Ejercicio 11 Que calcule el factorial de un número N 103 riayala@uc.cl ingresado por el teclado. riayala@uc.cl 5.2 Estructuras repetitivas. | Capítulo 5 Programación en HP PPL 104 Capítulo 6 Arreglos: Matrices, Vectores y Listas Resumen 6.1 6.2 6.3 6.4 Declaración de arreglos, 107 Listas, 107 Matrices y vectores, 110 Ejercicios aplicativos., 115 dos y tres dimensiones. un índice. Cuando los elementos del arreglo son glos se dice que es multidimensional, tienen un índice ensión y se les denomina matrices. En las figuras 82, Figura 82. Representación gráfica de un vector muestran las representaciones gráficas de arreglos de s dimensiones. Datos del arreglo Posición o índicegráfica 1 de un 2 vector 3 Figura 82. Representación 4 5 Programación en HP PPL 6 7 Un arreglo es un tipo de dato estructurado que almacena en tos del arreglo sola variable un conjunto limitado de datos o elementos sición o83. índice 1 2 3gráfica 4 de5 una6matriz 7 de dosuna Figura Representación dimensiones Figure 6.1 Unidimensional del mismo tipo. Los datos se llaman elementos del arreglo Índice de columnas: j 1 de una 2 matriz 3 de4 dos dimensiones 5 6 Representación gráfica ndice de1 1 1,1 filas: i 2 3 4 1 1,1 Índice de columnas: j 2 3 2 3 4 5 2,3 y su posición se numera consecutivamente: 1, 2, 3…n. Un arreglo en lenguaje HP PPL inicia en la posición uno, por lo 6 tanto el i-ésimo elemento está en la posición i, es decir si el arreglo llamado a tiene n elementos, sus nombres son a[1], 2,3 4 4,6 Diseño de algoritmos Figure 6.2 a[2], ..., a[n]. El tipo de elementos almacenados en el arreglo puede ser cualquier tipo de dato. Bidimensional 4,6 Figura 84. Representación gráfica de una matriz de tres dimensiones Para acceder a un elemento específico de un arreglo se usa 1,2,3 2 un índice o subíndice. 1,5,1 1 1,1,1 237 Un arreglo se caracteriza por: 237 3 5,5,4 4 5,5,1 5 1 2 3 4 1 5 2 3 4 1 Ser una lista de un número finito de n elementos del mismo tipo.. Figure 6.3 Tridimensional Como se puede apreciar en las gráficas, un vector es una lista Tener un único nombre de variable que representa a 2 una cuyos elementos se identifican con un solo índice, mientras que matriz de dos dimensiones requiere dos índices: uno para filas y otro para columnas; y una matriz de tres dimensiones requiere tres todos los elementos y éstos se diferencian por un índice índices ya que la estructura es análoga a un artefacto tridimensional, como si fuera una caja con largo, ancho y alto, dividida en o subíndice.. compartimentos igualmente tridimensionales. Teóricamente se pueden definir matrices de dos, tres, cuatro o más dimensiones; no Acceder de manera directa o aleatoria a los elementos obstante, en la práctica es común utilizar vectores y matrices 3 de dos dimensiones, pero no de tres o más. En lo que sigue de este capítulo se estudia el manejo de vectores y matrices de dos individuales del arreglo, por el nombre del arreglo y el dimensiones. índice o subíndice.. 5.3 MANEJO DE VECTORES Un vector es una estructura de datos estática correspondiente a Los arreglos pueden ser. una colección de datos del mismo tipo que se agrupan bajo un mismo nombre y se diferencias unos de otros por la posición que ocupan en la estructura. 1 Unidimensionales −→ Vectores o Listas. 2 Bidimensionales −→ Matrices o tablas. 238 3 Multidimensionales con 3 o mas dimensiones. Recordar Los arreglos tipo listas pueden Cuando un arreglo está conformado por datos simples, están conformados por datos como números o caracteres, se dice que es lineal o que tiene de un solo índice o de dos una sola dimensión (unidimensional) y se les da el nombre índices, por ello pueden de vectores o listas; éstos tienen sólo un índice. Cuando los riayala@uc.cl ser unidimensionales o bidimensionales elementos del arreglo son también arreglos se dice que es multidimensional, tienen un índice por cada dimensión y se les denomina matrices o también listas. En las figuras 106 6.1 Declaración de arreglos | Capítulo 6 Programación en HP PPL aplicado a la ingeniería civil 6.1, 6.2 y 6.3 se muestran las representaciones gráficas de arreglos de una, dos y tres dimensiones. 6.1 Declaración de arreglos Existen 3 tipos de arreglos que se pueden manejar en el lenguaje de programación HP PPL, las cuales se mencionan a continuación. 1 2 3 4 5 6 7 >>L1:={}; //declaracion de una variable tipo lista(vacia). >>L1:={1,2,4,5}; //declaracion de una variable tipo lista. >>L1:={{1,2},2,[[2,9],[5,7]],5}; //declaracion de una variable tipo lista. >>M1:=[0]; //declaracion de una variable tipo vector(vacia). >>L1:=[1,2,7,8,5]; //declaracion de una variable tipo vector. >>L1:=[[0]]; //declaracion de una variable tipo matriz(vacia). >>L1:=[[1,4,5],[4,1,5]]; //declaracion de una variable tipo matriz. 6.2 Listas Una lista consta de números reales o complejos separados por comas, expresiones o matrices, todos entre llaves. Recordar Las listas pueden almacenar o contener todo los tipos Por ejemplo, una lista puede contener una secuencia de de variables, desde reales, números reales como 1,2,3. Las listas representan una forma complejos, matrices, vectores, práctica de agrupar objetos relacionados. listas, expresiones... hasta las variables declarados para Puede realizar operaciones realizadas con las listas en Inicio operaciones CAS. y en los propios programas. Hay diez variables de lista disponibles, denominadas de L0 a L9. Puede utilizarlas en cálculos o expresiones en Inicio o en un programa. Recupere el nombre de la lista del menú a o escriba su nombre con el teclado. >>A:={3,7,12,19}; // Lista A declarada. >>b:=A(3); obtenemos b=12 6.2.1Creación de listas Para crear una lista se utiliza el comando MAKELIST y su sintaxis es: 107 riayala@uc.cl 1 2 6.2 Listas | Capítulo 6 Programación en HP PPL Sintaxis MAKELIST(expresión,[variable],[principio],[final],[incremento]) Recordar Las listas pueden almacenar Calcula una secuencia de elementos para crear una nueva cualquier tipo de dato, sea lista. numérico o caracteres L1:=1,2,3,2,1,4,3,5 Sintaxis 1 >>MAKELIST(A,A,1,5,1) devuelve {1,2,3,4,5} L1:=”uno”,”dos” 6.2.2Comandos para el manejo de listas. 6.2.2.1 Comando SORT Este comando ordena los elementos de la lista en orden ascendente. Sintaxis SORT(lista); Se muestra un ejemplo del uso de este comando. 1 >>SORT({2,5,3}) devuelve {2,3,5} 6.2.2.2 Comando CONCAT Concatena dos listas para formar una nueva lista. Sintaxis CONCAT(lista1,lista2); Se muestra un ejemplo del uso de este comando. 1 >>CONCAT({1,2,3},{4}) devuelve {1,2,3,4}. 6.2.2.3 Comando POS Devuelve la posición de un elemento en la lista. El elemento puede ser un valor, una variable o una expresión. Si hay más de una instancia del elemento, devuelve la posición de la primera incidencia del elemento. Si no hay ninguna incidencia del elemento especificado, devuelve un riayala@uc.cl valor 0. Sintaxis POS(lista, elemento) Se muestra un ejemplo del uso de este comando. 108 1 6.2 Listas | Capítulo 6 Programación en HP PPL aplicado a la ingeniería civil >>POS({3,7,12,19},12) devuelve 3 6.2.2.4 Comando SIZE Devuelve el número de elementos de una lista o una lista que contiene las dimensiones de un vector o matriz. Sintaxis SIZE(lista) SIZE(Vector) SIZE(Matriz) Se muestra un ejemplo del uso de este comando. 1 2 >>SIZE({1,2,3}) devuelve 3 >>SIZE([[1 2 3], [4 5 6]]) devuelve {2, 3} 6.2.2.5 Comando EDITLIST Inicia el Editor de lista cargando listvar y muestra la lista especificada. Si se utiliza en programación, retorna al programa cuando el usuario pulsa. Sintaxis EDITLIST(listvar) Se muestra un ejemplo del uso de este comando. 1 2 >>EDITLIST(L1) devuelve lista L1 editable. >>L2:=EDITLIST(L1) devuelve lista L1 editable y lo guarda en la lista L2. 6.2.3Ejemplo. Ejemplo Suma de elementos de una lista. 6.1 Dado una lista con números reales, crear un programa que Figure 6.4 Ingreso de datos calcula la suma de dichos elementos. Solución: 1 2 3 4 5 EXPORT SumLista() BEGIN //1 ‐>Declaracion de variables. LOCAL List:={1,2,3,4,5},i,n,Suma; //2 ‐>Ingreso de datos. Figure 6.5 Resultados del programa 109 riayala@uc.cl Código 6.1: SumLista 6.3 Matrices y vectores | Capítulo 6 Programación en HP PPL 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 INPUT ( { {List ,[6],{25,50,3}} }, "Suma" , { " Numeros: " }, { "Ingrese una lista de numeros" } ); //3 ‐>Calculo del area del poligono. n:=length(List); //‐> Elementos de la lista FOR i:=1 TO n DO Suma:=Suma+List(i); END; //4 ‐>Salida de datos. PRINT(); //‐> Limpia la pantalla PRINT("La suma de los numeros es:" +Suma); END; 6.3 Matrices y vectores 6.3.1Vectores Recordar Las vectores son arreglos Un vector es una estructura de datos estática correspondiente a una colección de datos del mismo unidimensionales y solo contienen datos del mismo tipo, tipo que se agrupan bajo un mismo nombre y se diferencias pueden ser reales, complejos, unos de otros por la posición que ocupan en la estructura. caracteres, etc. Para acceder a un elemento de un vector y llevar a cabo operaciones como: asignación, lectura, impresión y conformación de expresiones, es necesario escribir el identificador (nombre) del arreglo y entre PARÉNTESIS la Recordar Para recorrer un vector se utiliza una estructura iterativa (FOR, posición a la que se hace referencia, de la forma: 1 2 >>M1:=[3,7,12,19]; // Vector M1 declarada. >>b:=M1(3); obtenemos b=12 WHILE, REPEAT) controlada por una variable que comienza riayala@uc.cl en 1, para hacer referencia Muchas operaciones que se aplican sobre vectores incluyen a la primera posición, y se a todos los elementos, en estos casos es necesario acceder incrementa de uno en uno hasta consecutivamente desde la primera hasta la última posición, alcanzar el tamaño del vector. a esto se le llama recorrido de un vector. 110 1 2 3 4 5 6 7 8 9 10 6.3 Matrices y vectores | Capítulo 6 Programación en HP PPL aplicado a la ingeniería civil EXPORT VectorRecorrido() BEGIN Local nVec:=[1,3,6,8,7,4,3],nV,nP,i; nV:=length(nVec); PRINT(); FOR i:=1 TO nV DO nP:=nVec(i); PRINT(nP); END; END; La variable i representa la posición de cada uno de los elementos; de este modo, cualquier operación que se defina sobre vector[i] al interior del ciclo se llevará a cabo sobre cada uno de los elementos del vector. 6.3.2Matrices Una matriz es un conjunto de elementos dispuestos a lo largo de m filas y n columnas, conocidas también como diagrama de doble entrada. En programación se define una matriz como una estructura Recordar Las matrices son arreglos bidimensionales y solo contienen datos del mismo tipo y pueden ser reales, complejos, caracteres, etc. de datos estática que bajo un identificador almacena una colección de datos del mismo tipo, es un arreglo de dos dimensiones, organizado en forma de filas y columnas; y por lo tanto utiliza dos índices para identificar los elementos. Para hacer referencia a un elemento de una matriz es Recordar Para recorrer una matriz se necesario especificar el identificador o nombre de la matriz precisan dos ciclos anidados: y entre PARÉNTESIS el índice de filas y el índice de uno para desplazarse por las filas y otro por las columnas. columnas, de la forma: >>M1:=[[3,7,12,19],[2,5,6,0]]; // Matriz M1 declarada. >>b:=M1(2,3); obtenemos b=5 Para recorrer una matriz se precisan dos ciclos anidados: uno para desplazarse por las filas y otro por las columnas. 111 riayala@uc.cl 1 2 6.3 Matrices y vectores | Capítulo 6 Programación en HP PPL 1 2 3 4 5 6 7 8 9 10 11 12 13 EXPORT MatrizRecorrido() BEGIN Local nMat:=[1,3,6,8,7,4,3],nC,nF,nM,j,i; nF:=SIZE(1); nC:=SIZE(2); PRINT(); FOR i:=1 TO nF DO FOR j:=1 TO nC DO nM:=nVec(j,i); PRINT(nM); END; END; END; 6.3.3Comandos para matrices 6.3.3.1 Comando ADDCOL Inserta los valores en vector en una nueva columna insertada antes especificada. de número-columna en la matriz El número de valores en el vector debe ser igual a la cantidad de filas de la matriz. Sintaxis ADDCOL(nombrematriz, vector, número−columna) 6.3.3.2 Comando ADDROW Inserta los valores en vector en una nueva fila insertada antes de número-fila en la matriz especificada. Sintaxis ADDROW(nombrematriz, vector, número−fila) El número de valores en el vector debe ser igual al número de columnas de la matriz. 6.3.3.3 Comando DELCOL Elimina la columna número-columna de la matriz. Sintaxis DELCOL(nombre, número−columna) riayala@uc.cl 6.3.3.4 Comando DELROW Elimina la fila número-fila de la matriz. Sintaxis DELROW(nombre,número−fila) 112 6.3.3.5 Comando EDITMAT Inicia el Editor de matriz y muestra la matriz especificada. Recordar EDITMAT sirve para el ingreso y Si se utiliza en programación, vuelve al programa cuando el salida de datos de matrices usuario presiona. A pesar de que este comando devuelve la matriz que ha sido editada, EDITMAT no puede ser utilizado como un argumento en otros comandos de matriz. 6.3 Matrices y vectores | Capítulo 6 Programación en HP PPL aplicado a la ingeniería civil Sintaxis Forma básica. EDITMAT(matriz); Forma avanzada. EDITMAT(matriz,{"TITULO",{"Fila"},{"Columna"}},[Var]); Si Var=0 , la matriz quedará bloqueada y será de solo lectura. Ejemplo EDITMAT 6.2 Programa para el ingreso de datos a través de una matriz. Solución: Código del programa: EXPORT iMatriz() BEGIN M1:=[[2,2],[3,3]]; M2:=EDITMAT(M1); M3:=EDITMAT(M1,{"TITULO",{"F1","F2",""} ,{"C1","C2",""}}); END; 6.3.3.6 Comando REDIM Redimensiona la matriz o vector especificado a tamaño. Para una matriz, tamaño es una lista de dos números enteros (n1, n2). Para un vector, tamaño es una lista que contiene un número entero (n). Se mantienen los valores existentes en la matriz. El valor de relleno será 0. Sintaxis REDIM(nombre, tamaño) 6.3.3.7 Comando REPLACE matriz con un objeto comenzando por la posición de inicio. El inicio para una matriz es una lista que contiene dos 113 riayala@uc.cl Reemplaza parte de una matriz o vector almacenado en 6.3 Matrices y vectores | Capítulo 6 Programación en HP PPL números; para un vector, es un único número. Sintaxis REPLACE(nombre, inicio, objeto) REPLACE también funciona con listas, gráficos y cadenas. >>REPLACE("123456", 2, "GRM") devuelve "1GRM56" 6.3.3.8 Comando SCALE Multiplica el número-fila de la matriz especificada por valor. Sintaxis SCALE(nombre, valor, número−fila) 6.3.3.9 Comando SUB Extrae un subobjeto (una parte de una lista, matriz o gráfico) y lo guarda en nombre. Inicio y fin se especifican por medio de una lista de dos números para una matriz, un número para un vector o para listas, o un par ordenado, (X,Y), para gráficas: SUB(M11,2,2,2) Sintaxis SUB(nombre, inicio, fin) 6.3.3.10 Comando SWAPCOL Intercambia columna1 y columna2 de la matriz especificada (nombre). Sintaxis SWAPCOL(nombre, columna1, columna2) 6.3.3.11 Comando SWAPROW Intercambia fila1 y fila2 en la matriz especificada (nombre). riayala@uc.cl Sintaxis SWAPROW(nombre, fila1, fila2) 114 6.4 Ejercicios aplicativos. | Capítulo 6 Programación en HP PPL aplicado a la ingeniería civil 6.4 Ejercicios aplicativos. Ejercicio 6.1 Máximos y mínimos en listas. Desarrolle una función que encuentre el máximo y mínimo valor en una lista de listas de números naturales. Solución: Código Fuente : Código 6.2: MaxLista EXPORT MaxLista() BEGIN // 1‐>Declarando variables LOCAL Lista:={2,3,15,7,10},i,n,mayor,menor; // 2‐>Ingreso de datos INPUT ( { Figure 6.6 {Lista,[6],{25,70,0}} }, "MAX VALOR LISTA", { "Lista: " }, { "Ingrese una lista {a,b,c,...,z}" } ); // 3‐>Proceso del programa n:=SIZE(Lista); mayor:=Lista(1); Figure 6.7 menor:=Lista(1); programa FOR i:=1 TO n DO IF Lista(i)>=mayor THEN mayor:=Lista(i); ELSE menor:=Lista(i); END; END; // 4‐>Proceso del programa MSGBOX("El Maximo valor de la lista es: " + mayor + " y el minimo es: " + menor ); END; Ejercicio 6.2 Ingreso de datos Resultados del Rigidez ensamblada de estructuras planas. Desarrolle una función que encuentre el máximo y mínimo valor en una lista de listas de números naturales. 115 riayala@uc.cl 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 6.4 Ejercicios aplicativos. | Capítulo 6 Programación en HP PPL En este ejercicio se extiende el método de rigidez para cadenas de barras sometidas a tensión axial, a las armaduras o cerchas, compuestas de barras articuladas. Matriz de rigidez de un elemento de sometido a tensión axial. Cx × Cy −Cx2 −Cx × Cy Cy2 −Cx × Cy −Cy2 −Cx × Cy Cx2 Cx × Cy −Cy2 Cx × Cy Cy2 Cx2 EA Cx × Cy K= L −Cx2 −Cx × Cy Figure 6.8 Crear un programa el cual nos permita obtener la Ingreso de datos matriz de rigidez ensamblada de cualquier estructura. 1000 kg 2 1 2 1 Figure 6.9 3 Ingreso de datos 3 4m Solución: Código Fuente : Código 6.3: RigidezGlobal riayala@uc.cl Figure 6.10 Ingreso de datos Figure 6.11 Resultados del programa 116 3m 1 2 3 4 nE:=3;nN:=3;vE:=1;vA:=1;cN:=[[0]]; cC:=[[0]];vAr:=[[0]]; FUNTIONA(); FUNTIONB(); 5 6 7 8 9 10 11 12 13 EXPORT RigidezGlobal() BEGIN cN:=[[0,0],[4,3],[6,0]]; //Nudos. cC:=[[1,2],[2,3],[3,1]]; //Elementos. // 1‐>Ingreso de datos INPUT ( { {nE,[0],{35,40,0}}, 2m ); 32 33 34 //Coordenada de nudos. LOCAL i,j; cN:=EDITMAT(cN,{"Coordenada Numeros",{},{"x","y",""} }); 35 36 37 38 39 40 //Conectividad. FOR i:=1 TO nE DO cC(i,3):= vA; cC(i,4):= vE; END; cC:=EDITMAT(cC, {"Elementos Conectividad", {}, {"N−i", "N−f", "Area", "Elasticida"} }); 41 42 LOCAL vK:=[[0]],ni,nj,NA:={},NB:={},sum,op,de; vK:=MAKEMAT(0,2*nN,2*nN); }, "ANALISIS ARMADURA 2D", { "Nro Elementos: ", "Nro Nudos: ", "E: ", "A: " }, { "Numero de elementos de la armadura", "Numero de nudos de la armadura", "Modulo de elasticidad", "Area de las secciones" } Figure 6.12 Resultados del programa //Rigidez de cada elemento y ensamblado. LOCAL x1,y1,x2,y2,q1x,q1y,q2x,q2y; LOCAL le,ke:=[[0]],rig,pp:=[[0]],l,j,m,i; LOCAL x1,x2,x3,x4; FOR j:=1 TO nE DO ni:=cC(j,1); nj:=cC(j,2); NA(1):=cN(ni,1); NA(2):=cN(ni,2); NB(1):=cN(nj,1); NB(2):=cN(nj,2); op:=NB−NA; x1:=NA(1); y1:=NA(2); x2:=NB(1); y2:=NB(2); q1x:=ni*2−1; q1y:=ni*2; q2x:=nj*2−1; q2y:=nj*2; le:=SQRT(op(1)^2+op(2)^2); l:=(x2−x1)/le; m:=(y2−y1)/le; rig:=cC(j,4)*cC(j,3)/le; ke:=rig*[[l^2, l*m, −l^2, −l*m], [l*m, m^2, −l*m, −m^2], [−l^2, −l*m, l^2, l*m], [−l*m, −m^2, l*m, m^2]]; pp:=FUNTIONA(vK,q1x,q1y,q2x,q2y)+ke; vK:=FUNTIONB(pp,q1x,q1y,q2x,q2y,vK); END; EDITMAT(vK,); END; 117 riayala@uc.cl {nN,[0],{35,40,1}}, {vE,[0],{35,50,2}}, {vA,[0],{35,50,3}} 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 6.4 Ejercicios aplicativos. | Capítulo 6 Programación en HP PPL aplicado a la ingeniería civil 6.4 Ejercicios aplicativos. | Capítulo 6 Programación en HP PPL 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 FUNTIONA(MatSub,x1,x2,x3,x4) BEGIN LOCAL jj,Matriz:=[[0]]; Matriz(4,4):=0; Matriz(1,1):=MatSub(x1,x1); Matriz(1,2):=MatSub(x1,x2); Matriz(1,3):=MatSub(x1,x3); Matriz(1,4):=MatSub(x1,x4); Matriz(2,1):=MatSub(x2,x1); Matriz(2,2):=MatSub(x2,x2); Matriz(2,3):=MatSub(x2,x3); Matriz(2,4):=MatSub(x2,x4); Matriz(3,1):=MatSub(x3,x1); Matriz(3,2):=MatSub(x3,x2); Matriz(3,3):=MatSub(x3,x3); Matriz(3,4):=MatSub(x3,x4); Matriz(4,1):=MatSub(x4,x1); Matriz(4,2):=MatSub(x4,x2); Matriz(4,3):=MatSub(x4,x3); Matriz(4,4):=MatSub(x4,x4); RETURN Matriz; END; 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 FUNTIONB(MatSub,x1,x2,x3,x4,Matriz) BEGIN Matriz(x1,x1):=MatSub(1,1); Matriz(x1,x2):=MatSub(1,2); Matriz(x1,x3):=MatSub(1,3); Matriz(x1,x4):=MatSub(1,4); Matriz(x2,x1):=MatSub(2,1); Matriz(x2,x2):=MatSub(2,2); Matriz(x2,x3):=MatSub(2,3); Matriz(x2,x4):=MatSub(2,4); Matriz(x3,x1):=MatSub(3,1); Matriz(x3,x2):=MatSub(3,2); Matriz(x3,x3):=MatSub(3,3); Matriz(x3,x4):=MatSub(3,4); Matriz(x4,x1):=MatSub(4,1); Matriz(x4,x2):=MatSub(4,2); Matriz(x4,x3):=MatSub(4,3); Matriz(x4,x4):=MatSub(4,4); RETURN Matriz; END; Ejercicio 6.3 Integración numérica por ROMBERG La integración de romberg es una técnica diseñada para obtener integrales numéricas de funciones de manera eficiente, que se basa en aplicaciones sucesivas de la regla del trapecio. Sin embargo, a través de las manipulaciones matemáticas, se riayala@uc.cl alcanzan mejores resultados con menos trabajo. 118 Ij,k = 6.4 Ejercicios aplicativos. | Capítulo 6 Programación en HP PPL aplicado a la ingeniería civil 4k−1 Ij+1,k+1 − Ij,k−1 4 1 I = I(h2 ) − I(h1 ) k−1 4 −1 3 3 Solución: Código Fuente : Código 6.4: MaxLista TRAPECIO(); ROMBERG(); 3 4 5 6 FUNC:='0.2+25*X−200*X^2+675*X^3−900*X^4+400*X^5'; xi:=0; xf:=0.8; nn:=3; 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 EXPORT ROMBERGC() BEGIN LOCAL i,TRA; LOCAL sum,Fx,k,a,b,tipo,count; LOCAL error,itfn,a_ini,b_ini; LOCAL fi,fm,ff,K,ii; PRINT; INPUT ( { {FUNC,[8],{20,40,1}}, {xi,[0],{20,15,2}}, {xf,[0],{20,15,3}}, {nn,[0],{20,15,4}} }, "Regla de Trapecio ", { "f(x)", "xi", "xf", "n" }, { "f(X)", "x inicial", "x final", "# numero de valores de integral" } ); 34 35 36 K:=MAKEMAT(0,nn,2); count:=1; ff:=1; 37 38 39 40 41 42 43 44 45 WHILE ff<((2^(nn−1))+1) DO X:=xi; sum:=EVAL(FUNC); a:=sum; k:=(xf−xi)/ff; i:=xi+k; ii:=1; WHILE ii<ff DO X:=i; Figure 6.13 Ingreso de datos Figure 6.14 Resultados del programa Figure 6.15 Resultados del programa 119 riayala@uc.cl 1 2 6.4 Ejercicios aplicativos. | Capítulo 6 Programación en HP PPL 46 47 48 49 50 51 52 53 54 55 56 57 58 59 a:=a+2*EVAL(FUNC); i:=i+k; ii:=ii+1; END; X:=xf; b:=a+EVAL(FUNC); TRA:=(k*b)/2; K(count,1):=ff; K(count,2):=TRA; ff:=2^count; count:=count+1; END; MSGBOX("respuesta"); EDITMAT(K,{"TRAPECIO",{"1"},{"#Segmentos","Resp"}}); 60 61 62 63 64 65 66 LOCAL N,k,n,j,ii; LOCAL M1:=[[0]],VAR:={},nu,de; FOR k:=1 TO nn DO M1(k,1):= K(k,2); END; N:=SIZE(M1); n:=(N(1)); 67 68 69 70 71 FOR j:=2 TO (n) DO FOR ii:=1 TO (n+1−j) DO M1(ii,j):=((4^(j−1))*M1((ii+1),(j−1)) − M1((ii),(j−1)))/((4^(j−1))−1); END; END; 72 73 74 75 76 77 FOR k:=1 TO (nn−1) DO VAR(1):="TRAPECIO"; nu:=4^k; de:=4^k−1; VAR(k+1):=nu+"/"+de; END; 78 79 EDITMAT(M1,{"ROMBERG",{"1"},VAR}); END; Tony Quispe 6.4.1Ejercicios propuestos. Ejercicio 1 Calcular el promedio de n valores almacenados en un vector. determinar además cuantos son menor que el promedio, imprimir el promedio, el número de datos menores que el promedio y una lista de valores menores que el promedio. riayala@uc.cl Ejercicio 2 Hacer un algoritmo que llene una matriz de m * n y que imprima cuantos de los números almacenados son ceros, cuántos son positivos y cuántos son negativos. 120 Capítulo 7 Subprogramas y Manejo de Gráficos Resumen 7.1 7.2 7.3 7.4 7.5 7.6 7.7 Subrutinas, 122 Funciones, 122 Diseño de una función, 123 Manejo de gráficos, 130 Comando MOUSE, 133 Comando WAIT, 135 Ejercicios, 138 7.1 Subrutinas | Capítulo 7 Programación en HP PPL 7.1 Subrutinas A lo largo de este documento se han propuesto y explicado numerosos ejemplos; no obstante, estos han sido pensados para ilustrar un tema en particular y no tienen la complejidad de los problemas reales, en los que la solución puede incluir miles, cientos de miles o millones de líneas de código fuente. Los programas diseñados para solucionar problemas reales de procesamiento de datos, que atienden conjuntos grades de requisitos y responden a múltiples restricciones, aquellos que se denomina software de dimensión industrial no pueden emprenderse como una sola pieza, pues su construcción, corrección y mantenimiento resultaría una tarea demasiado difícil y costosa. La estrategia más difundida para reducir la complejidad se conoce como divide y vencerás. Ésta consiste en descomponer el problema que se quiere resolver en un determinado número de sub-problemas más pequeños, resolver sucesiva e independientemente todos los sub-problemas, luego combinar las soluciones obtenidas para, de esta manera, solucionar el problema original. 7.2 Funciones Sugerencia Las funciones deben ser declaradas antes de ser llamadas, El concepto de función en el campo de la programación fue tomado de las matemáticas y consiste en establecer una o bien ser utilizado lineas relación entre dos conjuntos: origen y espejo, donde a cada después de su creación. elemento del primero le corresponde uno del segundo una riayala@uc.cl función es una operación que toma uno o más valores y genera un nuevo valor como resultado. A los valores que entran a la función se les denomina argumentos. 122 Diseño de una función | Capítulo 7 Programación en HP PPL aplicado a la ingeniería civil 7.3 Diseño de una función En la calculadora HP PRIME las funciones tienen dos partes: la definición y la implementación. 7.3 7.3.1Definición de una función Ésta incluye tres elementos estos son: 1 La definición. 2 El identificador o nombre de la función. 3 La lista de parámetros. 4 El retorno. Código 7.1: Funciones 1 2 FUNCION1(); FUNCION2(); 3 4 5 6 7 8 9 10 11 12 EXPORT Funciones() BEGIN LOCAL val1,val2; val1:=FUNCION1(); val2:=FUNCION2(10,40,30); RECT_P(); TEXTOUT_P(val1,20,40); TEXTOUT_P(val2,20,60); WAIT(1); END; 13 14 15 16 17 18 19 20 FUNCION1() BEGIN LOCAL a,b,c,r; a:=10; b:=50; c:=70; r:=a+b+c; END; 21 22 23 24 25 26 FUNCION2(a,b,c) BEGIN LOCAL r; r:=a+b+c; RETURN r; END; Figure 7.1 Resultados del programa Funciones Recordar El valor retornado de una función siempre es la última línea ejectuada, por lo que se puede omitir esta instrucción cuando el valor retornado es la última línea dentro del código de 123 riayala@uc.cl la función. 7.3 Diseño de una función | Capítulo 7 Programación en HP PPL 7.3.2Invocación de una Función La invocación o llamada a una función se hace escribiendo su nombre y la lista de parámetros que ésta requiere, de la forma: Al ejecutarse un algoritmo o un programa, en el momento en que se encuentra la invocación de una función, el control de ejecución pasa a la función. En la ejecución de la función, la primera tarea que se realiza es la declaración de las variables locales y su inicialización con los datos proporcionados como parámetros. Por eso, es muy importante tener en cuenta que los argumentos escritos al invocar la función y la lista de parámetros definidos en el diseño de la función deben coincidir en tipo y en cantidad, en caso contrario se presentará un error y la ejecución de la función se cancelará. En el momento en que la ejecución de la función encuentra la palabra retornar el control vuelve exactamente a la línea donde se invocó la función con el resultado del cálculo efectuado. El resultado devuelto por una función puede almacenarse en una variable, puede ser enviado directamente a un dispositivo de salida o puede utilizarse como argumento para otra función, como se muestra en las expresiones a, b y c, respectivamente. 7.3.3Ejemplo de funciones Ejemplo Resaltar Ecuaciones. riayala@uc.cl 7.1 Funcion el cual resalte las ecuaciones creadas. Solución: 124 Diseño de una función | Capítulo 7 Programación en HP PPL aplicado a la ingeniería civil Código 7.2: TxEQ 1 2 3 4 5 6 TxEQ(Gr,Eeq,xo,yo,L,H,TCol) BEGIN RECT_P(Gr,{xo,yo},{xo + L,yo + H},TCol,PlomoA); RECT_P(Gr,{xo + 0.2,yo + 0.2},{xo + L−0.2,yo + H−0.2},TCol,PlomoA); TEXTOUT_P(Eeq,Gr,xo + 5,yo + 5,2,TCol); END; Ejemplo División de dos caracteres. 7.2 7.3 Función el cual imprima una división de dos caracteres. Solución: Código 7.3: TxFrac 1 2 3 4 5 6 7 8 9 TxFrac(Gr,Tx,Num,Den,xo,yo,L,TCol) BEGIN LOCAL nN,nD,nT; nN:=DIM(Num);nD:=DIM(Den);nT:=DIM(Tx); TEXTOUT_P(Tx,Gr,xo + 4,yo + 5,2,TCol); TEXTOUT_P(Num,Gr,xo + nT*7 + 2,yo,2,TCol); RECT_P(Gr,{xo + nT*7,yo + 12},{xo + nT*7 + L,yo + 12.30},TCol); TEXTOUT_P(Den,Gr,xo + nT*8 + 5,yo + 17,2,TCol); END; Ejemplo Redondeo de números 7.3 Esta función mejora las características del comando ROUND. Solución: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 DEC(num,dec) BEGIN CASE IF ABS(num)<0.0000001 THEN num:=0; END; IF 1>num>0 THEN num:=ROUND(num,−dec); END; IF num>=1 THEN num:=ROUND(num,dec); END; IF −1<num<0 THEN num:=ROUND(num,−dec); END; IF num<=−1 THEN num:=ROUND(num,dec); END; IF num==0 THEN num:=0; END; END; RETURN num; END; 125 riayala@uc.cl Código 7.4: DEC 7.3 Diseño de una función | Capítulo 7 Programación en HP PPL Ejemplo Redondeo de números en listas 7.4 Esta función depende del código 7.4 Solución: Código 7.5: DECL 1 2 3 4 5 6 7 8 DECL(list,dec) BEGIN LOCAL N:=length(list),j; FOR j:=1 TO N DO list(j):=DEC(list(j),dec); END; RETURN list; END; Ejemplo Redondeo de números en matrices 7.5 Esta función depende del código 7.4 Solución: Código 7.6: DECM 1 2 3 4 5 6 7 8 9 10 DECM(Matr,dec) BEGIN LOCAL Nf:=rowDim(Matr),Nc:=colDim(Matr),i,j; FOR j:=1 TO Nc DO FOR i:=1 TO Nf DO Matr(i,j):=DEC(Matr(i,j),dec); END; END; RETURN Matr; END; Ejemplo Redondeo de números en vectores 7.6 Esta función depende del código 7.4 Solución: Código 7.7: DECV 1 2 3 4 5 6 7 8 DECV(vect,dec) BEGIN LOCAL N:=length(vect),j; FOR j:=1 TO N DO vect(j):=DEC(vect(j),dec); END; RETURN vect; END; riayala@uc.cl Ejemplo ID del teclado 7.7 Esta función realiza el ingreso del teclado numérico, sirve para crear formularios de ingreso de datos interactivos. 126 Diseño de una función | Capítulo 7 Programación en HP PPL aplicado a la ingeniería civil Solución: Código 7.8: DECV Tecla() BEGIN LOCAL Val=Accion,Rs; CASE IF 31<=Val<35 THEN Rs:=25; END; IF Val=35 THEN RETURN "/"; END; IF 36<=Val<40 THEN Rs:=33; END; IF Val=40 THEN RETURN "*"; END; IF 41<=Val<45 THEN Rs:=41; END; IF Val=45 THEN RETURN "−"; END; IF Val=47 THEN RETURN "0"; END; IF Val=48 THEN RETURN "."; END; IF Val=50 THEN RETURN " + "; END; DEFAULT RETURN CHAR({32,32}); END; STRING(Val−Rs,1); END; 7.3 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 Ejemplo Crear Reportes 7.8 Esta función con la ayuda del comando BLIT_P crea varias pantallas que con los botones U y D. Solución: 1 2 3 4 5 6 7 8 9 10 EXPORT Reporte() BEGIN LOCAL x:=0,y:=0; REPEAT x:=MAX(MIN(x,320/2),0); y:=MAX(MIN(y+100*ISKEYDOWN(12) − 100*ISKEYDOWN(2),3900),0); BLIT_P(G0,0,0,G2,x,y,320,240+y); WAIT(); UNTIL ISKEYDOWN(4); END; 127 riayala@uc.cl Código 7.9: Reporte riayala@uc.cl 7.3 Diseño de una función | Capítulo 7 Programación en HP PPL Ejemplo Crear CHOOSE personalizado 7.9 Esta función crea una pequeña ventana donde puedes seleccionar una opción dada. Solución: Código 7.10: FCHOOSE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 128 FCHOOSE(Ini,Nom,x,y,L,let,ColA,ColB,ColC,ColD) BEGIN LOCAL i,can,cc; can:=length(Nom); cc:=can; //‐>Caja del Choose RECT_P(x,y,x + L,y + 3,ColD,ColA); //‐>Choose FOR i:=1 TO can DO RECT_P({x,y + 20*i−17},{x + L,y + 20*i + 1},ColA); TEXTOUT_P("� " + Nom(i),x + 5,y + 20*i−11,let,ColB); END; RECT_P(x,y + 20*Ini−17,x + L,y + 20*Ini + 1,ColB,ColC); TEXTOUT_P("� " + Nom(Ini),x + 5,y + 20*Ini−11,let,ColD); //‐>Condicion LOCAL mx,my,Ss:=1,v:=Ini,vo:=Ini; REPEAT Accion:=→BR(WAIT(−1)); CASE IF TYPE(Accion)==6 THEN IF Accion(1)==3 THEN mx:=Accion(2); my:=Accion(3); FOR j:=1 TO can DO IF x<mx<x + L AND (y + 20*(j−1) + 4)<my<(y + 20*(j−1) + 24) THEN v:=j; FOR i:=1 TO can DO RECT_P({x,y + 20*i−17},{x + L,y + 20*i + 1},ColA); TEXTOUT_P("� " + Nom(i),x + 5,y + 20*i−11,let,ColB); END; RECT_P(x,y + 20*j−17,x + L,y + 20*j + 1,ColB,ColC); TEXTOUT_P("� " + Nom(v),x + 5,y + 20*v−11,let,ColD); WAIT(0.2); BREAK(2); END; END; IF (mx<x OR mx>x + L) OR (my<y OR my>(y + 20*can−17) ) THEN v:=0;BREAK; END; END; END; IF ISKEYDOWN(2) THEN vo:=v; v:=v−1; IF v<1 THEN v:=can; vo:=1; END; FOR i:=1 TO can DO RECT_P({x,y + 20*i−17},{x + L,y + 20*i + 1},ColA); TEXTOUT_P("� " + Nom(i),x + 5,y + 20*i−11,let,ColB); END; RECT_P(x,y + 20*v−17,x + L,y + 20*v + 1,ColB,ColC); TEXTOUT_P("̞� " + Nom(v),x + 5,y + 20*(v)−11,let,ColD); END; IF ISKEYDOWN(12) THEN vo:=v; v:=v + 1; IF v>can THEN v:=1; END; FOR i:=1 TO can DO RECT_P({x,y + 20*i−17},{x + L,y + 20*i + 1},ColA); TEXTOUT_P("� " + Nom(i),x + 5,y + 20*i−11,let,ColB); END; RECT_P(x,y + 20*v−17,x + L,y + 20*v + 1,ColB,ColC); TEXTOUT_P("� " + Nom(v),x + 5,y + 20*(v)−11,let,ColD); END; IF ISKEYDOWN(30) THEN BREAK; END; IF ISKEYDOWN(4) THEN IF Ini==1 THEN v:=0;BREAK; ELSE v:=vo;BREAK; END; END; END; UNTIL Ss==2; RETURN v; END; 7.3 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 Diseño de una función | Capítulo 7 Programación en HP PPL aplicado a la ingeniería civil Ejemplo Ventanas de mensajes 7.10 Esta función crea una pequeña ventana donde puedes seleccionar una opción dada. Solución: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 FMECO(T1,T2,x,y,L,H,s,CoA,CoB,CoC) BEGIN LOCAL R_Ace,R_Can,Cond,mx,my; FILLPOLY_P({(0,0), (320,0), (320,240), (0,240), (0,0)}, CoB, 150); RECT_P(x,y,x + L,y + H,CoA,CoC); RECT_P(x + 1,y + 1,x + L−1,y + H−1,CoA,CoC); TEXTOUT_P("?",x + 4,y,7,CoA); TEXTOUT_P(T1,x + 19,y + 4,2,CoC); TEXTOUT_P(T2,x + 19,y + 16,2,CoC); R_Ace:={{x + L/2−45−15,y + 33},{x + L/2−5,y + 55}}; RECT_P(R_Ace(1),R_Ace(2),CoA,CoB); TEXTOUT_P("Aceptar",R_Ace(1,1) + 5,R_Ace(1,2) + 5,2); R_Can:={{x + L/2 + 10,y + 33},{x + L/2 + 15 + 50,y + 55}}; RECT_P(R_Can(1),R_Can(2),CoA,CoB); TEXTOUT_P("Cancelar",R_Can(1,1) + 4,R_Can(1,2) + 5,2); REPEAT WAIT(−1)�Accion; IF TYPE(Accion)==6 THEN IF Accion(1)==0 THEN mx:=Accion(2); 129 riayala@uc.cl Código 7.11: Reporte 7.4 Manejo de gráficos | Capítulo 7 Programación en HP PPL 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 my:=Accion(3); CASE IF (R_Ace(1,1))<mx<R_Ace(2,1) AND R_Ace(1,2)<my<R_Ace(2,2) THEN Cond:=1; RECT_P(R_Ace(1),R_Ace(2),CoA,CoA); TEXTOUT_P("Aceptar",R_Ace(1,1) + 5,R_Ace(1,2) + 4,1); WAIT(0.1); BREAK; END; IF R_Can(1,1)<mx<R_Can(2,1) AND R_Can(1,2)<my<R_Can(2,2) THEN Cond:=0; RECT_P(R_Can(1),R_Can(2),CoA,CoA); TEXTOUT_P("Cancelar",R_Can(1,1) + 4,R_Can(1,2) + 4,1); WAIT(0.1); BREAK; END; END; END; ELSE IF Accion=4 THEN Cond:=0; BREAK; END END; UNTIL 0; RETURN Cond; END; 7.4 Manejo de gráficos En la sección 4.3 se refirió al manejo de las variables y algunos comandos gráficos, en esta sección nos centraremos en el uso de los comandos GETKEY , ISKEYDOWN , WAIT , MOUSE con los cuales dándoles un buen uso pueden utilizarse para crear funciones y programas muy intuitivas con la pantalla táctil de estas calculadoras. 7.4.1Comando GETKEY Este comando nos sirve para poder interactuar con el riayala@uc.cl teclado de la calculadora HP PRIME. 130 GETKEY Programación en HP PPL aplicado a la ingeniería civil Manejo de gráficos | Capítulo 7 Sintaxis: GETKEY Devuelve el ID (identificador) de la primera tecla en el búfer del teclado, o –1 si no se pulsó ninguna tecla 7.4 Figure 7.2la última Valores de teclasLos obtenidos con el comando desde llamada a GETKEY. ID de tecla son enteros de 0 a 50, numerados desde la esquina superior izquierda (tecla 0) a la esquina inferior derecha (tecla 50) como se muestra en la figura 27-1. GETKEY INPUT Sintaxis K:=GETKEY Sintaxis: INPUT(var,[“title”], [“label”], [“help”], [reset_value], [initial_value]) Sintaxis:elINPUT({vars},[“título”], [{“etiquetas”}], [{“ayuda”}], Devuelve ID(identifcador) de la primera tecla en el búfer [{restablecer_valores}], [{valores_iniciales}]) del teclado, o -1 si nodese pulsó ninguna tecladedesde La forma más sencilla este comando abre un cuadro diálogola conúltima el título dado y un campo denominado etiqueta, y muestra el contenido de ayuda en la parte inferior. El cuadro de diálogo incluye las teclas de menú llamada a y OK. GETKEY . Los IDingresar de tecla son enteros de 0 a Si50, CANCEL El usuario puede un valor en el campo etiquetado. el usuario presiona la tecla de menú OK, la variable var se actualiza con el valor introducido y el comando devuelve 1. Si el usuario presiona numerados desde la esquina izquierda (tecla 0) a la tecla de menú CANCEL, la variablesuperior no se actualiza y devuelve 0. En las formas más complejas del(tecla comando, se utilizan para crear un la esquina inferior derecha 50) comolistas se muestra encuadro la de diálogo con varios campos. Si var es una lista, cada elemento puede ser un nombre de variable o una lista que usa la siguiente sintaxis. figura ??. En el código 7.12, al presionar las teclas 42 (y), 43 (z), 44 (3), 37 (u), 38 (v), 39 (w) o 32 (q), el programa imprimirá un mensaje y con la tecla 4(&) terminará el bucle indefinido REPEAT y el programa. Figure 7.3 Resultados del programa Comandos de programa 599 1 2 3 4 5 6 7 8 9 10 EXPORT FGETKEY() BEGIN LOCAL K:=0; RECT_P(0,0,320,220,RGB(250,250,250)); TEXTOUT_P("C U R S O H P P R I M E",70,10,6); RECT_P(0,40,339,41,RGB(0,0,0)); DRAWMENU("RAB","","","","",""); REPEAT K:=GETKEY; CASE Figure 7.4 Resultados del programa 131 riayala@uc.cl Código 7.12: FGETKEY 7.4 Manejo de gráficos | Capítulo 7 Programación en HP PPL 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 IF K==42 THEN RECT_P(0,60,320,220,RGB(250,250,250)); TEXTOUT_P("Tecla 42",70,70,4); END; IF K==43 THEN RECT_P(0,60,320,220,RGB(250,250,250)); TEXTOUT_P("Tecla 43",70,70,4); END; IF K==44 THEN RECT_P(0,60,320,220,RGB(250,250,250)); TEXTOUT_P("Tecla 44",70,70,4); END; IF K==37 THEN RECT_P(0,60,320,220,RGB(250,250,250)); TEXTOUT_P("Tecla 37",70,70,4); END; IF K==38 THEN RECT_P(0,60,320,220,RGB(250,250,250)); TEXTOUT_P("Tecla 38",70,70,4); END; IF K==39 THEN RECT_P(0,60,320,220,RGB(250,250,250)); TEXTOUT_P("Tecla 39",70,70,4); END; IF K==32 THEN RECT_P(0,60,320,220,RGB(250,250,250)); TEXTOUT_P("Tecla 32",70,70,4); END; END; UNTIL K==4; END; 7.4.2ISKEYDOWN Al igual que el comando GETKEY pero con un valor de salida verdadero o falso, nos permite manejar el teclado de la calculadora. Sintaxis ISKEYDOWN(id−tecla) Devuelve true(verdadero) (distinto de cero) si la tecla cuyo Figure 7.5 Resultados del programa id-tecla se proporciona está presionada actualmente y falso (0) si no es así. En el código 7.13, al presionar las teclas 42 (y), 43 (z), 44 (3), 37 (u), 38 (v), 39 (w) o 32 (q), el programa imprimirá un mensaje y con la tecla 4(&) riayala@uc.cl terminará el bucle indefinido REPEAT y el programa. Figure 7.6 Resultados del programa 132 Comando MOUSE | Capítulo 7 Programación en HP PPL aplicado a la ingeniería civil Código 7.13: FISKEYDOWN EXPORT FISKEYDOWN() BEGIN RECT_P(0,0,320,220,RGB(255,255,255)); TEXTOUT_P("C U R S O H P P R I M E",70,10,6); RECT_P(0,40,339,41,RGB(0,0,0)); DRAWMENU("RAB","","","","",""); REPEAT CASE IF ISKEYDOWN(42) THEN RECT_P(0,60,320,220,RGB(250,250,250)); TEXTOUT_P("Tecla 42",70,70,4); END; IF ISKEYDOWN(43) THEN RECT_P(0,60,320,220,RGB(250,250,250)); TEXTOUT_P("Tecla 43",70,70,4); END; IF ISKEYDOWN(44) THEN RECT_P(0,60,320,220,RGB(250,250,250)); TEXTOUT_P("Tecla 44",70,70,4); END; IF ISKEYDOWN(37) THEN RECT_P(0,60,320,220,RGB(250,250,250)); TEXTOUT_P("Tecla 37",70,70,4); END; IF ISKEYDOWN(38) THEN RECT_P(0,60,320,220,RGB(250,250,250)); TEXTOUT_P("Tecla 38",70,70,4); END; IF ISKEYDOWN(39) THEN RECT_P(0,60,320,220,RGB(250,250,250)); TEXTOUT_P("Tecla 39",70,70,4); END; IF ISKEYDOWN(32) THEN RECT_P(0,60,320,220,RGB(250,250,250)); TEXTOUT_P("Tecla 32",70,70,4); END; END; UNTIL ISKEYDOWN(4); END; 7.5 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 7.5 Comando MOUSE Este comando es utilizado para obtener un dato como Sintaxis 1 Identificador Acción 0 para nuevo se desea programar con variables gráficas es importante 1 para completado conocer el tipo de variables y los datos obtenidos a través 2 para arrastrar de este. 3 para alargar 4 para girar 5 para un clic largo MOUSE(indice) Devuelve dos listas que describen la ubicación actual Tabla 7.1 Tipo de acción al tocar la pantalla de cada puntero posible (listas vacías si no se utilizan 133 riayala@uc.cl respuesta al tocar la pantalla táctil de la calculadora, si 7.5 Comando MOUSE | Capítulo 7 Programación en HP PPL punteros). La salida es {x, y, z original, y original, tipo } donde el tipo de objeto o identificador de variables puede ser: Ejemplo Hacer uso del comando MOUSE, en su forma básica. 7.11 Solución: Código 7.14: CMOUSE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Figure 7.7 Programa CMOUSE EXPORT CMOUSE() BEGIN LOCAL tocar; RECT_P(); REPEAT tocar:=B →R(MOUSE()); WAIT(−1); IF SIZE(tocar(1))≠0 THEN RECT_P(); TEXTOUT_P("{tocar} :",10,100); TEXTOUT_P(tocar,70,100); END; UNTIL ISKEYDOWN(4); END; La variable tocar almacena una lista {x, y, z original, y original, tipo } que fue asignada desde MOUSE el cual fue convertida de un número hexadecimal a uno decimal a través del comando B‐>R esto para una mejor interpretación de estos datos. El valor de la lista dependerá del tipo de acción realizada en la pantalla táctil, Con el comando MOUSE y el buen manejo de los gráficos permitirán a los programadores crear un sin fin de funciones y programas, a continuación se menciona algunos de estos. 1 Botones y menus personalizados. 2 Interfaz propia. 3 Formularios interactivos. 4 Salidas de datos a través de gráficos. 5 Ingreso de datos a través del mouse. riayala@uc.cl Ejemplo 7.12 Figure 7.8 Programa PruebaMouse 134 En este ejemplo se programó la impresión de parámetros del comando MOUSE. Comando WAIT | Capítulo 7 Programación en HP PPL aplicado a la ingeniería civil Solución: Código 7.15: PruebaMouse EXPORT PruebaMouse() BEGIN LOCAL CoA:=RGB(0,0,0); LOCAL CoB:=RGB(255,255,255); LOCAL accion; LOCAL lista:={"Completo", "Arrastrar", "Estirar", "Rotar", "Click Largo", "Nuevo"}; RECT_P(); Figure 7.9 Programa TEXTOUT_P("MOUSE PRUEBA",100,10,3,CoA,320,CoB); TEXTOUT_P("Variable:",20,50,3,CoA,320,CoB); PruebaMouse TEXTOUT_P("MOUSE(0) [x]:",20,70,3,CoA,320,CoB); TEXTOUT_P("MOUSE(1) [y]:",20,90,3,CoA,320,CoB); TEXTOUT_P("MOUSE(2) [x0]:",20,110,3,CoA,320,CoB); TEXTOUT_P("MOUSE(3) [y0]:",20,130,3,CoA,320,CoB); TEXTOUT_P("MOUSE(4) []:",20,150,3,CoA,320,CoB); TEXTOUT_P("Modo Click:",20,170,3,CoA,320,CoB); REPEAT IF MOUSE(4)<>−1 THEN IFERR RECT_P(G0,130,50,320,190); accion:=→BR(MOUSE()); TEXTOUT_P(accion,G0,130,50,3,CoA,320,CoB); TEXTOUT_P(accion(1,1),130,70,3,CoA,320,CoB); TEXTOUT_P(accion(1,2),130,90,3,CoA,320,CoB); TEXTOUT_P(accion(1,3),130,110,3,CoA,320,CoB); TEXTOUT_P(accion(1,4),130,130,3,CoA,320,CoB); TEXTOUT_P(accion(1,5),130,150,3,CoA,320,CoB); TEXTOUT_P(lista(accion(1,5)),130,170,3,CoA, 320,CoB); THEN END; END; UNTIL 0; // End Repeat Test1 END; 7.6 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 7.6 Comando WAIT Parámetro durante n segundos. Sintaxis 1 WAIT(n) Si el valor del parámetro n=0 entonces el comando pausará la ejecución durante un minuto. También se puede utilizar para obtener un dato como respuesta al tocar la pantalla táctil de la calculadora, el cual sencillamente puede sustituir al comando MOUSE . Para un segundo uso se debe declara el parámetro −1 de la siguiente forma: WAIT(−1) , con esto este comando esperará Acción 0 mouse hacia abajo 1 movimiento del mouse 2 mouse hacia arriba 3 Clic del mouse 5 estiramiento del mouse 6 rotación del mouse 7 clic largo del mouse Tabla 7.2 Acciones del comenado WAIT Recordar WAIT(−1) es una alternativa al comando MOUSE 135 riayala@uc.cl Este comando sirve para pausar la ejecución de un programa 7.6 Comando WAIT | Capítulo 7 Programación en HP PPL una acción o actividad de la pantalla táctil (mouse) o el teclado devolviendo el código de la tecla id-tecla o una lista de la forma como dato la lista {tipo, x, y, dx, dy }. Recordar El comando WAIT(−1) será tipo asignado a una variable que puede ser del tipo lista o el tipo Donde: = entero lista: Cuando se hace uso de la : es la acción o actividad en la pantalla táctil. x, y: : es la posición inicial del evento. dx, dy: : es la posición final del evento. pantalla táctil. entero: Cuando se hace uso del Con el comando WAIT(−1) y el buen manejo de los gráficos teclado. permitirán a los programadores crear un sin fin de funciones y programas, a continuación se menciona algunos de estos. ¡Cuidado! El tipo de acción 5(estiramiento) la respuesta del comando WAIT 1 Botones y menus personalizados. será una lista que tendrá dos 2 Interfaz propia. parámetros adicionales, dx,dy 3 Formularios interactivos. 4 Salidas de datos a través de gráficos. ¡Cuidado! 5 Ingreso de datos a través del mouse. El tipo de acción 2(mouse hacia Ejemplo abajo) la respuesta del comando WAIT será una lista con el tipo7.13 2: Manejo del comando WAIT En este ejemplo se codificó una prueba de todos los tipos {tipo} de acción que se pueden obtener con el comando WAIT(−1) ; Solución: Código 7.16: PruebaWait riayala@uc.cl Figure 7.10 Programa PruebaWait Figure 7.11 Programa PruebaWait 136 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 EXPORT PruebaWait() BEGIN LOCAL accion; LOCAL CoB:=RGB(255,255,255); RECT_P(); TEXTOUT_P("WAIT PRUEBA",100,5,3); TEXTOUT_P("Variable:",20,30,3); TEXTOUT_P("WAIT(2) [x]:",20,50,3); TEXTOUT_P("WAIT(3) [y]:",20,70,3); TEXTOUT_P("WAIT(4) [dx]:",20,90,3); TEXTOUT_P("WAIT(5) [dy]:",20,110,3); TEXTOUT_P("Tipo accion:",20,130,3); REPEAT accion:=→BR(WAIT(−1)); IF TYPE(accion)==6 THEN RECT_P(120,20,320,240,CoB); TEXTOUT_P(accion,130,30,3); IF accion(1)≠2 THEN TEXTOUT_P(accion(2),130,50,3); TEXTOUT_P(accion(3),130,70,3); END; IF accion(1)==5 THEN TEXTOUT_P(accion(4),130,90,3); TEXTOUT_P(accion(5),130,90,3); TEXTOUT_P("Estirar",130,130,3); END; CASE IF accion(1)==0 THEN TEXTOUT_P("Mouse abajo",130,130,3); END; IF accion(1)==1 THEN TEXTOUT_P("Arrastrar",130,130,3); END; IF accion(1)==2 THEN TEXTOUT_P("Mouse atras",130,130,3); END; IF accion(1)==3 THEN TEXTOUT_P("Click",130,130,3); END; IF accion(1)==6 THEN TEXTOUT_P("Rotar",130,130,3); END; IF accion(1)==7 THEN TEXTOUT_P("Click Largo",130,130,3); END; END; ELSE RECT_P(120,20,320,240,CoB); TEXTOUT_P(accion,130,30,3); TEXTOUT_P("Teclado",130,130,3); END; UNTIL ISKEYDOWN(4); END; 7.6 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 Comando WAIT | Capítulo 7 Programación en HP PPL aplicado a la ingeniería civil Figure 7.12 Programa PruebaWait Dependiendo del programa que se desea crear pueden utilizarse los diferentes tipos de acción en la pantalla del comando WAIT . Por ejemplo si desea crear botones, cajas de entrada de datos, se utilizara el tipo 3(click o un toque simple en la pantalla), para crear ingreso de datos a través de variables gráficas se puede utilizar tipo 7 (click largo), para realizar la acción de acercar o alejar la pantalla se puede utilizar el tipo 5(estiramiendo del mouse). Ejemplo Manejo del comando WAIT Una aplicación simple de este comando es la creación de botones. Solución: Para realizar la creación de botones, es necesario tener 137 riayala@uc.cl 7.14 7.7 Ejercicios | Capítulo 7 Programación en HP PPL definidos exactamente las regiones de cada botón. Código 7.17: PBoton Figure 7.13 Programa PBoton Figure 7.14 Programa PBoton 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 Ca:=rgb(255,0,0), Cb:=rgb(240,240,240); EXPORT PBoton() BEGIN DIMGROB_P(G1,320,240); RECT(); //Dibujar los menus de la parte superior. LOCAL R_I,R_A,R_C; R_I:={0,0,100,30}; R_C:={100,0,220,30}; R_A:={220,0,320,30}; RECT_P(G1,R_I(1),R_I(2),R_I(3),R_I(4),Ca,Cb); RECT_P(G1,R_C(1),R_C(2),R_C(3),R_C(4),Ca,Cb); RECT_P(G1,R_A(1),R_A(2),R_A(3),R_A(4),Ca,Cb); //Textos en los Botones. TEXTOUT_P("Reporte",G1,R_I(1)+18,R_I(2)+10,2,Ca); TEXTOUT_P("Datos",G1,R_C(1)+38,R_C(2)+10,2,Ca); TEXTOUT_P("Dibujar",G1,R_A(1)+35,R_A(2)+10,2,Ca); BLIT_P(G0,G1); LOCAL accion,x,y; REPEAT accion:=WAIT(−1); IF TYPE(accion)==6 THEN IF accion(1)==3 THEN x:=accion(2); y:=accion(3); CASE IF R_I(1)<x<R_I(3) AND R_I(2)<y<R_I(4) THEN RECT_P(G1,0,31,320,240); TEXTOUT_P("BOTON 1",G1,100,100); END; IF R_C(1)<x<R_C(3) AND R_C(2)<y<R_C(4) THEN RECT_P(G1,0,31,320,240); TEXTOUT_P("BOTON 2",G1,100,100); END; IF R_A(1)<x<R_A(3) AND R_A(2)<y<R_A(4) THEN RECT_P(G1,0,31,320,240); TEXTOUT_P("BOTON 3",G1,100,100); END; END; END; END; BLIT(G0,G1); UNTIL 0; END; 7.7 Ejercicios Como se vio en los capítulos anteriores el ingreso de datos riayala@uc.cl se realiza por medio del comando, propio de la HP-PRIME, INPUT la desventaja de este comando es que no se puede personalizar. A continuación, se realizará un ejemplo del 138 Ejercicios | Capítulo 7 Programación en HP PPL aplicado a la ingeniería civil ingreso de datos personalizado con el uso de los comandos WAIT Y MOUSE. Ejercicio 7.1 Área de un polígono. 7.7 El área del polígono irregular se puede calcular mediante dos procedimientos alternativos: el método de triangulación o el determinante de Gauss. El método más común es dividir el polígono en N triángulos (siendo N el número de lados del polígono) y calcular el área como suma de las áreas de los triángulos. Para este ejemplo se calculará por la determinante de Gauss. Supone dibujar la figura sobre un plano cartesiano, fijando las coordenadas de cada uno de los vértices del polígono. Sean los vértices del polígono: La fórmula es la (x1, y1), (x2, y2), ...(xN, yN ). siguiente: 1 A= 2 x1 y1 x1 .. . y2 .. . xN yN x1 y1 Se ha de recorrer el polígono en el sentido contrario al de las agujas del reloj, Solución: Figure 7.15 Pantalla principal Nuestro programa estará estructurado por variables globales, variables de colores, declaración de funciones, inicio del programa y los subprogramas. del programa con el siguiente código. Figure 7.16 Ingreso de datos, Matriz 139 riayala@uc.cl Primero se creará la interfaz gráfica para el ingreso de datos riayala@uc.cl 7.7 Ejercicios | Capítulo 7 Programación en HP PPL Código 7.18: Área de un polígono 1 2 3 4 5 6 7 8 9 10 //Variables globales vMouse; V_In:=[[0,0],[10,0],[5,10]]; //Fuciones F_Cal(); //Variable de colores white:=rgb(255,255,255); red:=rgb(255,0,0); blue:=rgb(0,0,255); plomo:=rgb(220,220,220); 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 EXPORT P_APol() BEGIN DIMGROB_P(G1,320,240); LOCAL R_In,R_Au,R_Ca; R_In:={0,0,100,30}; R_Ca:={100,0,220,30}; R_Au:={220,0,320,30}; //Regiones−Botones. RECT_P(G1,R_In(1),R_In(2),R_In(3),R_In(4),blue,plomo); RECT_P(G1,R_Ca(1),R_Ca(2),R_Ca(3),R_Ca(4),blue,plomo); RECT_P(G1,R_Au(1),R_Au(2),R_Au(3),R_Au(4),blue,plomo); //Textos−Botones. TEXTOUT_P("Coordenada",G1,R_In(1)+18,R_In(2)+10,2,blue); TEXTOUT_P("Calcular",G1,R_Ca(1)+38,R_Ca(2)+10,2,blue); TEXTOUT_P("Nuevo",G1,R_Au(1)+35,R_Au(2)+10,2,blue); BLIT_P(G0,G1); 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 //Pantalla tactil LOCAL dx,dy,tipo; REPEAT vMouse:=→BR(WAIT(−1)); IF TYPE(vMouse)==6 THEN // acción 6 se refiere a una lista. tipo:=vMouse(1); IF tipo==3 THEN dx:=vMouse(2); dy:=vMouse(3); CASE IF R_In(1)<=dx<=R_In(3) AND R_In(2)<=dy<=R_In(4) THEN V_In:=EDITMAT(V_In,"Coordenadas del polígono"); END; IF R_Ca(1)<=dx<R_Ca(3) AND R_Ca(2)<=dy<R_Ca(4) THEN F_Cal(); //Llamando a la funcion. END; IF R_Au(1)<=dx<R_Au(3) AND R_Au(2)<=dy<R_Au(4) THEN RECT_P(G1,0,31,320,240,white); END; END; END; END; IF TYPE(vMouse)==0 THEN IF vMouse==4 THEN BREAK; END; END; BLIT_P(G0,G1); UNTIL 0; END; El programa consta de una interfaz o formulario donde se 140 Ejercicios | Capítulo 7 Programación en HP PPL aplicado a la ingeniería civil dispuso de 3 botones, el cual está condicionado con las regiones o coordenadas de estos. El cálculo del programa se realizó en la función F_Cal() , el 7.7 cual se muestra en el siguiente código. Código 7.19: Función FCal F_Cal() BEGIN RECT_P(G1,0,31,320,240); LOCAL n,nF,i,mD,mI,Ar; LOCAL d,Per; n:=SIZE(V_In); nF:=n(1); mD:=0; d:=0; FOR i:=1 TO nF DO IF i==nF THEN mD:=V_In(i,1)*V_In(1,2)+mD; mI:=V_In(i,2)*V_In(1,1)+mI; d:=SQRT( (V_In(i,1)−V_In(1,1))^2 + (V_In(i,2)−V_In(1,2))^2 )+d; ELSE mD:=V_In(i,1)*V_In(i+1,2)+mD; mI:=V_In(i,2)*V_In(i+1,1)+mI; d:=SQRT( (V_In(i,1)−V_In(i+1,1))^2 + (V_In(i,2)−V_In(i+1,2))^2 )+d; END; END; Ar:=ROUND(ABS(mD−mI)/2,2); //Area Per:=ROUND(d,2);//Perimetro TEXTOUT_P("Area= "+Ar+" m2",G1,5,40,2,red); TEXTOUT_P("Perimetro= "+Per+" m",G1,5,55,2,red); //−Dibujo del Poligono LOCAL xc,yc; FOR i:=1 TO nF DO xc:=V_In(i,1)+xc; yc:=V_In(i,2)+yc; END; xc:=xc/nF; yc:=−yc/nF;//Coordenas del C.G. del POL. LOCAL Vx:=[0],Vy:=[0],dPx,dPy,Fex,Fey,Fe; //*Tranformar Matriz en Vector. FOR i:=1 TO nF DO Vx(i):=V_In(i,1); Vy(i):=V_In(i,2); END; dPx:=MAX(Vx)−MIN(Vx); dPy:=MAX(Vy)−MIN(Vy); Fex:=260/dPx; //*Calculo del Factor de Escala. Fey:=140/dPy; IF Fex<Fey THEN Fe:=Fex; ELSE Fe:=−Fey; END; LOCAL xo,yo; xo:=ABS(xc*Fe−160); yo:=ABS(yc*Fe+150); //*Dibujando el Poligono LOCAL Lista:={}; Figure 7.17 Resultados del programa Figure 7.18 Resultados del programa 141 riayala@uc.cl 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 7.7 Ejercicios | Capítulo 7 Programación en HP PPL 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 FOR I FROM 1 TO nF DO Lista(I):={xo+V_In(I,1)*Fe,yo+V_In(I,2)*Fe}; END; FILLPOLY_P(G1,Lista,blue,210); LOCAL x1,y1,x2,y2,xa,ya; FOR i:=1 TO nF DO IF i==nF THEN x1:=V_In(i,1)*Fe+xo; y1:=V_In(i,2)*Fe+yo; ELSE x1:=V_In(i,1)*Fe+xo; y1:=V_In(i,2)*Fe+yo; END; xa:=ROUND(V_In(i,1),1); ya:=ROUND(V_In(i,2),1); TEXTOUT_P(xa+","+ya,G1,x1,y1−5,1,red); END; END; Ejercicio 7.2 Ecuación de 2do Grado. Una ecuación de segundo grado o ecuación cuadrática de una variable es una ecuación que tiene la expresión general: ax2 + bx + c = 0 donde x es la variable, y a, b y c constantes. Para una ecuación cuadrática con coeficientes reales o complejos existen siempre dos soluciones, no necesariamente distintas, llamadas raíces. La fórmula general para la obtención de raíces es: x= −b ± √ b2 − 4ac 2a Elaborar un programa que calcule las raíces de una ecuación cuadrática. Solución: riayala@uc.cl Este programa se realizó utilizando interfaz propia para el ingreso de datos, el cual resuelve una ecuación de 2do grado. El programa Eq2do se estructuró con varias funciones, entre 142 Ejercicios | Capítulo 7 Programación en HP PPL aplicado a la ingeniería civil las que podemos destacar y tenerlo como plantilla para otros programa son Tecla, FReTx, FRe, FEdit. cA:=RGB(239,247,247); cB:=RGB(255,0,0); cC:=RGB(235,235,235); cD:=RGB(0,0,255); cE:=RGB(255,255,255); 6 7 8 a:=1; b:=5; c:=6; 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 touch; accion; FRe(); FEdit(); FReTx(); FCal(); EXPORT Eq2do() BEGIN LOCAL R_a,R_b,R_c; //Coordenadas de cada rectangulo. R_a:={50,50,120,70}; R_b:={50,90,120,110}; R_c:={50,130,120,150}; //Dibujando en el Formulario. RECT(cA); TEXTOUT_P("ECUACION DE 2do GRADO",75,2,3); TEXTOUT_P("ax^2 + bx + c = 0",95,20,3); TEXTOUT_P("Solucion",190,60,3); FReTx("a:",a,R_a,cB,cC); FReTx("b:",b,R_b,cB,cC); FReTx("c:",c,R_c,cB,cC); LOCAL tipo,x,y; REPEAT touch:=WAIT(−1); IF TYPE(touch)==6 THEN tipo:=touch(1); IF tipo==3 OR tipo==0 THEN x:=touch(2); y:=touch(3); CASE IF R_a(1)<x<R_a(3) AND R_a(2)<y<R_a(4) THEN a:=FEdit(a,R_a, "Ingrese a",cB,cC,cA); FCal(); END; IF R_b(1)<x<R_b(3) AND R_b(2)<y<R_b(4) THEN b:=FEdit(b,R_b, "Ingrese b",cB,cC,cA); FCal(); END; IF R_c(1)<x<R_c(3) AND R_c(2)<y<R_c(4) THEN c:=FEdit(c,R_c, "Ingrese b",cB,cC,cA); FCal(); END; END; END; END; UNTIL ISKEYDOWN(4); END; Figure 7.19 Pantalla principal del programa Figure 7.20 Resultdos del programa Eq2do 143 riayala@uc.cl 1 2 3 4 5 7.7 Código 7.20: Eq2do 7.7 Ejercicios | Capítulo 7 Programación en HP PPL Código 7.21: Función FCal 1 2 3 4 5 6 7 8 9 10 11 12 13 FCal() BEGIN LOCAL x1,x2; RECT_P(130,80,320,240,cA); IFERR x1:=(−b+SQRT(b^2−4*a*c))/(2*a); x2:=(−b−SQRT(b^2−4*a*c))/(2*a); TEXTOUT_P("x1= "+x1,180,90,3); TEXTOUT_P("x2= "+x2,180,110,3); THEN TEXTOUT_P("Error Calculos", 180,90,3,cB); END; END; Código 7.22: Función FReTx y FRe Figure 7.21 Ingreso de datos personalizado 1 2 3 4 5 6 7 FReTx(Et,Var,Reg,CA,CB) BEGIN LOCAL n:=5*(DIM(Et)+1); RECT_P(Reg(1),Reg(2), Reg(3),Reg(4),CA,CB); TEXTOUT_P(Var,Reg(1) + 4,Reg(2)+4,2); TEXTOUT_P(Et,Reg(1)−n, Reg(2)+4,2); END; 8 9 10 11 12 FRe(Var,Reg,CA,CB) BEGIN RECT_P(Reg(1),Reg(2), Reg(3),Reg(4),CA,CB); TEXTOUT_P(Var,Reg(1)+4,Reg(2)+4,2); END; Código 7.23: Función Tecla y FEdit riayala@uc.cl Figure 7.22 Verificación de errores de cálculo 144 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Tecla() BEGIN LOCAL Val,Rs; Val:=accion; CASE IF ≤31Val<35 THEN Rs:=25 END; IF Val=35 THEN RETURN "/"; END; IF ≤36Val<40 THEN Rs:=33 END; IF Val=40 THEN RETURN "*"; END; IF ≤41Val<45 THEN Rs:=41 END; IF Val=45 THEN RETURN "−"; END; IF Val=47 THEN RETURN "0"; END; IF Val=48 THEN RETURN "."; END; IF Val=50 THEN RETURN "+"; END; DEFAULT RETURN ""; END; STRING(Val−Rs,1); END; 19 20 21 22 23 24 25 26 FEdit(Va,Rg,Ayuda,c1,c2,cF) BEGIN LOCAL nD,x,y,n; nD:=STRING(Va,1); Va:=nD; REPEAT FRe(nD+"�",Rg,cD,cC); RECT_P({0,224},{320,240},cE,cE); Ejercicio 7.3 7.7 n:=6*(DIM(nD)+4); TEXTOUT_P("−"+Ayuda,n,227,1,cC); TEXTOUT_P(nD+"�",5,227,2); accion:=→BR(WAIT(−1)); IF TYPE(accion)==0 THEN CASE IF accion==4 THEN nD:=Va; BREAK; END; IF accion==30 THEN IFERR EXPR(nD); THEN nD:=Va; END; BREAK; END; IF accion==19 THEN IF DIM(nD)≤1 THEN nD:=""; ELSE nD:=LEFT(nD,DIM(nD)−1); END; END; DEFAULT nD:=nD+Tecla; END; ELSE IF accion(1)==3 THEN x:=accion(2); y:=accion(3); IF NOT(Rg(1)<x<Rg(3) AND Rg(2)<y<Rg(4)) THEN IFERR EXPR(nD); THEN nD:=Va; END; BREAK; END; END; END; UNTIL 0; RECT_P({0,224},{320,240},cF,cF); nD:=EXPR(nD); FRe(STRING(nD,1),Rg,c1,c2); nD; END; Circulo de Mohr. El círculo de Mohr es una técnica usada en ingeniería y geofísica para representar gráficamente un tensor simétrico (de 2x2 o de 3x3) y calcular con ella momentos de inercia, deformaciones y tensiones, adaptando los mismos a las características de una circunferencia (radio, centro, etc). 145 riayala@uc.cl 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 Ejercicios | Capítulo 7 Programación en HP PPL aplicado a la ingeniería civil 7.7 Ejercicios | Capítulo 7 Programación en HP PPL Este método fue desarrollado hacia 1882 por el ingeniero civil alemán Christian Otto Mohr. Para este caso se utilizará la notación bidimensional el cual tiene las siguiente formulación. Centro del círculo de Mohr: C= σx + σy 2 Radio de la circunferencia de Mohr: s r= σx + σy 2 2 2 + τxy Las tensiones máxima y mínima vienen dados en términos de esas magnitudes simplemente por: σx + σy 2 σx + σy σmin = r − 2 σmax = r + Crear un programa que dibuje el circulo Mohr. Solución: Este programa se realizó utilizando interfaz propia para el ingreso de datos, el cual dibuja la dirección de los esfuerzo Figure 7.23 Pantalla principal del programa dados según el signo que se le asigne. El programa Mohr se estructuró con varias funciones, entre las que podemos destacar y tenerlo como plantilla para otros programa son, la función EDITFORM y EDITC. riayala@uc.cl Código 7.24: MOHR Figure 7.24 Pantalla principal del programa 146 1 2 3 4 // VARIABLES GLOBALES Accion;σ x:=10;σ y:=−8;τ 7.7 xy:=12;α :=−30;σ prom:=1;τ max:=1;σ max:=1;σ min:=1;θ p1:=1;θ p2:=1; kup:=1; kdow:=1; vMouse; // FUNCIONES DECLARADAS FGROBP(); FFORM_A(); EDITFORM(); EDITC(); FPRE_A(); FPRE_C(); //Variable de colores Fondo:=RGB(239,247,247); white:=rgb(255,255,255); red:=rgb(255,0,0); blue:=rgb(0,0,255); gris:=rgb(230,230,230); plomo:=rgb(210,210,210); green:=rgb(0,255,0); bordeC:=RGB(33,115,231); fondoC:=white; textoC:=RGB(33,115,231); fondoIC:=white; bordeIC:=RGB(192,192,192); textoIC:=RGB(0,0,0); botonC:=RGB(33,84,163); botonB:=RGB(33,84,163); // Inicio del programa EXPORT MOHR() BEGIN DIMGROB_P(G1,320,240); LOCAL R_Dat,R_Sal,R_Aut; R_Dat:={0,0,100,30}; R_Aut:={100,0,220,30}; R_Sal:={220,0,320,30}; RECT_P(G1,R_Dat(1),R_Dat(2),R_Dat(3),R_Dat(4), blue,plomo); RECT_P(G1,R_Aut(1),R_Aut(2),R_Aut(3),R_Aut(4), blue,plomo); RECT_P(G1,R_Sal(1),R_Sal(2),R_Sal(3),R_Sal(4), blue,plomo); TEXTOUT_P("DATOS",G1,R_Dat(1)+35,R_Dat(2)+10,2,blue); TEXTOUT_P("AUTOR",G1,R_Aut(1)+35,R_Aut(2)+10,2,blue); TEXTOUT_P("SALIR",G1,R_Sal(1)+35,R_Sal(2)+10,2,blue); //Graficso G2 RECT_P(G1,0,31,320,479,blue,gris); RECT_P(G1,1,32,319,478,blue,gris); BLIT_P(G0,G1); //Pantalla tactil LOCAL dx,dy,tipo; REPEAT vMouse:=→BR(WAIT(−1)); IF TYPE(vMouse)==6 THEN // acción 6 se refiere a una lista. tipo:=vMouse(1); IF tipo==3 THEN dx:=vMouse(2); dy:=vMouse(3); CASE IF R_Dat(1)<=dx<=R_Dat(3) AND R_Dat(2)<=dy<=R_Dat(4) THEN 147 riayala@uc.cl 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 Ejercicios | Capítulo 7 Programación en HP PPL aplicado a la ingeniería civil 7.7 Ejercicios | Capítulo 7 Programación en HP PPL 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 FGROBP FFORM_A; BLIT(G0,G1); END; IF R_Aut(1)<=dx<R_Aut(3) AND R_Aut(2)<=dy<R_Aut(4) THEN FGROBP(); BLIT(G0,G1); END; IF R_Sal(1)<=dx<R_Sal(3) AND R_Sal(2)<=dy<R_Sal(4) THEN RECT_P(G0,RGB(0,0,180,180)); TEXTOUT_P("Gracias por utilizar el programa", G0, 40, 100, 4, red); WAIT(3); BREAK; END; END; END; END; UNTIL 0; END; Código 7.25: Función Autor Esta función nos permite crear un formulario de textos, para 1 2 3 4 5 6 7 8 FFORM A 9 10 Esta función nos permite crear 11 un formulario de ingreso de 12 datos personalizados, el cual los 13 14 gráficos se dibujan por defecto 15 en la variable G0 , y para obtener 16 17 una respuesta ante una acción 18 19 de la pantalla táctil se utilizó el 20 comando WAIT(−1) , esta función a 21 su vez contienen otras funciones 22 ello se utilizó el comando BLIT_P FGROBP() BEGIN LOCAL xx:=25,yy:=50,dx:=265,dy:=148; DIMGROB_P(G3,320,240); RECT_P(G3,white); BLIT_P(G0,0,0,G3,0,0,320,240,plomo,120); RECT_P(G3,xx,yy,xx + dx,yy + dy,blue,Fondo); RECT_P(G3,−xx1,yy,xx + dx + 1,yy + dy,blue,Fondo); TEXTOUT_P("Circulo Mohr",G3,xx + 100,yy + 1 + 3,3,blue); TEXTOUT_P("v0.1",G3,xx + 140 + 45,yy + 1 + 6,2,red); TEXTOUT_P("Calculo del circulo de Mohr",G3,xx + 70,yy + 22,1,blue); RECT_P(G3,xx + 34,yy + 20,xx + dx,yy + 20,blue,blue); yy:=−yy15; TEXTOUT_P("−Fundamentos Pogramacion",G3,xx + 30,yy + 65,2,blue); yy:=yy + 18; TEXTOUT_P("−Autor:",G3,xx + 30,yy + 65,2,blue); yy:=yy + 18; TEXTOUT_P("Tony Quispe",G3,xx + 80,yy + 65,2,blue); yy:=yy + 18; TEXTOUT_P("UNSCH",G3,xx + 80,yy + 65,2,blue); yy:=yy + 18; TEXTOUT_P("2019",G3,xx + 80,yy + 65,2, blue); xx:=25;yy:=50; BLIT_P(G0,−xx2,yy,xx + dx + 2,yy + dy + 2,G3,−xx2,yy,xx + dx + 2,yy + dy + 2); WAIT(−1); END; una que dibujará los esfuerzos FPRE_A(); de poder ingresar los datos en riayala@uc.cl los recuadros creados EDITC(); . Figure 7.25 Formulario de ingreso de datos 148 Código 7.26: Función FFORM A y otra que s encargará 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 FFORM_A() BEGIN RECT_P(Fondo); LOCAL σR_x:={},σR_y:={},R_ok:={}; LOCAL Salir,mx,my,τR_xy:={},αR_:={}; RECT_P({0,1},{320,17},botonB,botonC); TEXTOUT_P("INGRESO DE DATOS",{100,3},2,white);σ R_x:={{30,25},{100,25+15}};σ R_y:={{135,25},{205,25+15}};τ R_xy:={{240,25},{310,25+15}};α R_:={{5,65},{50,65+15}}; TEXTOUT_P("σx =",σR_x(1,1)−5*5,σR_x(1,2)+3,2); TEXTOUT_P("σy =",σR_y(1,1)−5*5,σR_y(1,2)+3,2); TEXTOUT_P("τxy =",τR_xy(1,1)−5*6,τR_xy(1,2)+3,2); TEXTOUT_P(" θ:",αR_(1,1)+13,αR_(1,2)−18,4); R_ok:={{2,203},{50,203+15}}; 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 RECT_P(R_ok(1),R_ok(2),botonB,botonC); TEXTOUT_P("OK" ,R_ok(1,1)+16,R_ok(1,2)+3,2,white,90,textoC); RECT_P({60,50},{318,218},blue,white); FPRE_A(); REPEAT EDITFORM(STRING(σx,1),σR_x,bordeC,fondoC); EDITFORM(STRING(σy,1),σR_y,bordeC,fondoC); EDITFORM(STRING(τxy,1),τR_xy,bordeC,fondoC); EDITFORM(STRING(α,1),αR_,bordeC,fondoC); 7.7 17 18 19 20 21 22 23 24 25 Ejercicios | Capítulo 7 Programación en HP PPL aplicado a la ingeniería civil Accion:=WAIT(−1); IF TYPE(Accion)==6 THEN IF Accion(1)==3 THEN mx:=Accion(2); my:=Accion(3); CASE IF σR_x(1,1)<mx<σR_x(2,1) AND σR_x(1,2)<my<σR_x(2,2) THENσ x:=EDITC(σx,σR_x,"Ingrese esfuerzo en x",Fondo); FPRE_A(); END; IF σR_y(1,1)<mx<σR_y(2,1) AND σR_y(1,2)<my<σR_y(2,2) THENσ y:=EDITC(σy,σR_y,"Ingrese esfuerzo en y",Fondo); FPRE_A(); END; IF τR_xy(1,1)<mx<τR_xy(2,1) AND τR_xy(1,2)<my<τR_xy(2,2) THENτ xy:=EDITC(τxy,τR_xy,"Ingrese cortante",Fondo); FPRE_A(); END; IF αR_(1,1)<mx<αR_(2,1) AND αR_(1,2)<my<αR_(2,2) THENα FPRE A Esta función se encarga de crear el dibujo de los esfuerzo en el formulario de ingreso de datos. :=EDITC(α,αR_,"Ingrese angulo",Fondo); FPRE_A(); END; IF R_ok(1,1)<mx<R_ok(2,1) AND R_ok(1,2)<my<R_ok(2,2) THEN IFERR FPRE_C(); THEN RECT_P(G1,{2,32},{318,230},white,gris); END; Salir:=1; END; Figure 7.26 Dibujo de los esfuerzos, cambian de acuerdo al signo asignado END; END; END; UNTIL Salir==1; END; 1 2 3 FPRE_A() BEGIN RECT_P({60,50},{318,218},blue,white); Figure 7.27 Dibujo de los esfuerzos, cambian de acuerdo al signo asignado 149 riayala@uc.cl Código 7.27: Función FPRE A riayala@uc.cl 7.7 Ejercicios | Capítulo 7 Programación en HP PPL 150 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 LOCAL xc,yc,x1,x2,x3,x4,r:=60; LOCAL y1,y2,y3,y4,tetha:=45; xc:=190; yc:=136; x1:=xc−r*COS(tetha); y1:=yc−r*SIN(tetha); x2:=xc+r*COS(tetha); y2:=y1; x3:=x2; y3:=yc+r*SIN(tetha); x4:=x1; y4:=y3; FILLPOLY_P({(x1,y1),(x2,y2),(x3,y3),(x4,y4)},blue,180); LINE_P(x1,y1,x2,y2,blue); LINE_P(x2,y2,x3,y3,blue); LINE_P(x3,y3,x4,y4,blue); LINE_P(x4,y4,x1,y1,blue); //Fuerzas LOCAL f:=10; IF τxy<0 THEN LINE_P(x1+f,y1−f,x2−f,y2−f,red); LINE_P(x2−f,y2−f,x2−f−10,y2−f−5,red); LINE_P(x2+f,y2+f,x3+f,y3−f,red); LINE_P(x3+f,y3−f,x3+f+5,y3−f−10,red); LINE_P(x3−f,y3+f,x4+f,y4+f,red); LINE_P(x4+f,y4+f,x4+f+10,y4+f+5,red); LINE_P(x4−f,y4−f,x1−f,y1+f,red); LINE_P(x1−f,y1+f,x1−f−5,y1+f+10,red); ELSE LINE_P(x1+f,y1−f,x2−f,y2−f,red); LINE_P(x2−f,y2−f,x2−f−10,y2−f−5,red); LINE_P(x2+f,y2+f,x3+f,y3−f,red); LINE_P(x2+f,y2+f,x2+f+5,y2+f+10,red); LINE_P(x3−f,y3+f,x4+f,y4+f,red); LINE_P(x4+f,y4+f,x4+f+10,y4+f+5,red); LINE_P(x4−f,y4−f,x1−f,y1+f,red); LINE_P(x4−f,y4−f,x4−f−5,y4−f−10,red); END; 42 43 44 45 46 47 48 49 50 51 52 53 54 LOCAL g:=yc+(y2−y1)/2; f:=45; IF σx>0 THEN LINE_P(x2,g,x2+f,g,green); LINE_P(x2+f,g,x2+f−10,g−5,green); LINE_P(x1,g,x1−f,g,green); LINE_P(x1−f,g,x1−f+10,g+5,green); ELSE LINE_P(x2,g,x2+f,g,green); LINE_P(x2,g,x2+10,g+5,green); LINE_P(x1,g,x1−f,g,green); LINE_P(x1,g,x1−10,g−5,green); END; 55 56 57 58 59 60 61 62 63 64 g:=xc;f:=40; IF σy<0 THEN LINE_P(g,y1,g,y1−f,green); LINE_P(g,y1,g+5,y1−10,green); LINE_P(g,y3,g,y3+f,green); LINE_P(g,y3,g−5,y3+10,green); ELSE LINE_P(g,y1,g,y1−f,green); LINE_P(g,y1−f,g+5,y1−f+10,green); LINE_P(g,y3,g,y3+f,green); END; Código 7.28: Función FPRE C 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 FPRE C Esta función se encarga de FPRE_C() crear el dibujo del círculo de BEGINσ Mohr en la pantalla principal, prom:=ROUND((σxσ+y)/2,2);τ max:=ROUND(SQRT((σxσ−y)τ/2^2+xy^2),2);σ reemplazando la variable gráfica max:=ROUND(σpromτ+max,2);σ G1 a G0 . min:=ROUND(σpromτ−max,2); //Angulo Principal.θ p1:=ROUND(1/2*ATAN(τ2*xy/(σxσ−y)),2);θ p2:=ROUND(θ90+p1,2); //Dibujo del Circulo de Mhor RECT_P(G1,{2,32},{318,230},white,gris); LOCAL xo,yo,xa,ya,xc,yc,x1,y1; LOCAL x2,y2,x3,y3,x4,y4,ra:=80; FOR I:=1 TO 20 DO xo:=3+15*I;yo:=32+15*I; LINE_P(G1,xo,33,xo,230,plomo); IF I<15 THEN LINE_P(G1,3,yo,318,yo,plomo); END; Figure 7.28 Dibujo deL círculo de END; Mohr xc:=160; yc:=135; ARC_P(G1,xc,yc,ra,red); ARC_P(G1,xc,yc,2,red); TEXTOUT_P("C",G1,xc+2,yc+3,1,red); TEXTOUT_P("C=("σ+prom+",0)", G1, 318−5*(DIM(STRING(σprom))+7), 33, 1, red); LOCAL p1,p2; xa:=ra*COS(θ−2*p1); ya:=ra*SIN(θ−2*p1); x1:=xc+xa; y1:=yc−ya; x2:=xc−xa; y2:=yc+ya; //Esfuerzo Normal. IF θp1>0 THEN IF τxy<0 THEN p1:={xc−ra*COS(θ2*p1),yc−ra*SIN(θ2*p1)}; p2:={xc+ra*COS(θ2*p1),yc+ra*SIN(θ2*p1)}; LINE_P(G1,p1,p2,blue); TEXTOUT_P("(σxτ,xy)",G1,p1(1),p1(2),1,blue); TEXTOUT_P("(σyτ,xy)",G1,p2(1),p2(2),1,blue); ELSE p1:={xc−ra*COS(θ2*p1),yc−ra*SIN(θ2*p1)}; p2:={xc+ra*COS(θ2*p1),yc+ra*SIN(θ2*p1)}; LINE_P(G1,p1,p2,blue); TEXTOUT_P("(σyτ,xy)",G1,p1(1),p1(2),1,blue); TEXTOUT_P("(σxτ,xy)",G1,p2(1),p2(2),1,blue); END; ELSE IF τxy<0 THEN p1:={xc+ra*COS(θ2*p1),yc+ra*SIN(θ2*p1)}; p2:={xc−ra*COS(θ2*p1),yc−ra*SIN(θ2*p1)}; LINE_P(G1,p1,p2,blue); TEXTOUT_P("(σxτ,xy)",G1,p1(1),p1(2),1,blue); TEXTOUT_P("(σyτ,xy)",G1,p2(1),p2(2),1,blue); 151 7.7 67 LINE_P(g,y3+f,g−5,y3+f−10,green); END; riayala@uc.cl 65 66 Ejercicios | Capítulo 7 Programación en HP PPL aplicado a la ingeniería civil 7.7 Ejercicios | Capítulo 7 Programación en HP PPL 56 57 58 59 60 61 62 63 ELSE p1:={xc+ra*COS(θ2*p1),yc+ra*SIN(θ2*p1)}; p2:={xc−ra*COS(θ2*p1),yc−ra*SIN(θ2*p1)}; LINE_P(G1,p1,p2,blue); TEXTOUT_P("(σxτ,xy)",G1,p2(1),p2(2),1,blue); TEXTOUT_P("(σyτ,xy)",G1,p1(1),p1(2),1,blue); END; END; 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 LINE_P(G1,3,yc,317,yc); //Eje X. TEXTOUT_P("σ",G1,305,yc−20,4,red); LOCAL xf,xcc; xf:=(raσ*min)τ/max; xcc:=xc−ra−xf; IF 3<xcc<318 THEN LINE_P(G1,xcc,33,xcc,230); //Eje Y. TEXTOUT_P("τ",G1,xcc−10,30,4,red); END; IF xcc>=318 THEN LINE_P(G1,300,33,300,230); //Eje Y. TEXTOUT_P("τ",G1,280,30,4,red); END; IF xcc<=3 THEN LINE_P(G1,8,33,8,230); //Eje Y. TEXTOUT_P("τ",G1,12,30,4,red); END; 81 82 83 84 85 86 87 88 89 90 EDITFORM y Tecla Código 7.29: Funciones EDITFORM y Tecla Estas funciones son dos complementos para poder crear los ingresos de datos en cada recuadros creado en el ARC_P(G1,xc−ra,yc,2,blue); ARC_P(G1,xc+ra,yc,2,blue); ARC_P(G1,xc,yc+ra,2,blue); ARC_P(G1,xc,yc−ra,2,blue); TEXTOUT_P(σmax,G1,xc+86,yc+2,1,red); TEXTOUT_P(σmin,G1, xc−ra−5*(DIM(STRING(σmin))+1), yc+3, 1, red); TEXTOUT_P(τ−max,G1,xc,yc+ra+3,1,red); TEXTOUT_P("θp1="θ+p1,G1,4,190,1,red); TEXTOUT_P("θp2="θ+p2,G1,4,210,1,red); END; 1 2 3 4 5 EDITFORM(Dato,Region,ColorA,ColorB) BEGIN RECT_P(Region(1),Region(2),ColorA,ColorB); TEXTOUT_P(Dato,Region(1)+4,1); END; 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 Tecla() BEGIN LOCAL Val,Rs; Val:=Accion; CASE IF ≤31Val<35 THEN �25Rs END; IF Val=35 THEN RETURN "/"; END; IF ≤36Val<40 THEN �33Rs END; IF Val=40 THEN RETURN "*"; END; IF ≤41Val<45 THEN �41Rs END; IF Val=45 THEN RETURN "−"; END; IF Val=47 THEN RETURN "0"; END; IF Val=48 THEN RETURN "."; END; IF Val=50 THEN RETURN "+"; END; DEFAULT RETURN ""; END; riayala@uc.cl formulario de entrada. 152 EDITC Código 7.30: Función EDITC Esta función permite poder 1 EDITC(Dato,Region,Ayuda,CFondo) editar, eliminar, escribir dígitos 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 en un recuadro creado en el BEGIN LOCAL NDato:=STRING(Dato,1),mx,my,NN; formulario de entrada. Dato:=NDato; REPEAT EDITFORM(NDato+">",Region,bordeIC,fondoIC); RECT_P({0,224},{320,240},bordeIC,fondoIC); NN:=6*(DIM(NDato)+3.5); TEXTOUT_P("−"+Ayuda,NN,227,1,plomo); TEXTOUT_P(NDato+">",5,227,2,textoIC); Accion:=→BR(WAIT(−1)); IF TYPE(Accion)==0 THEN CASE IF Accion==4 THEN NDato:=Dato; BREAK; END; Figure 7.29 Ingreso de datos a IF Accion==30 THEN través de recuadros personalizados IFERR EXPR(NDato) THEN NDato:=Dato; END; BREAK; END; IF Accion==19 THEN IF DIM(NDato)≤1 THEN NDato:=""; ELSE NDato:=LEFT(NDato,DIM(NDato)−1); END; END; DEFAULT NDato:=NDato+Tecla; END; ELSE IF Accion(1)==3 THEN mx:=Accion(2); my:=Accion(3); IF NOT(Region(1,1)<mx<Region(2,1) AND Region(1,2)<my<Region(2,2)) THEN IFERR EXPR(NDato) THEN NDato:=Dato; END; BREAK; END; END; END; UNTIL 0; RECT_P({0,224},{320,240},CFondo,CFondo); NDato:=EXPR(NDato); EDITFORM(STRING(NDato,1),Region,textoC,white); RETURN NDato; END; 153 7.7 STRING(Val−Rs,1); END; riayala@uc.cl 22 23 Ejercicios | Capítulo 7 Programación en HP PPL aplicado a la ingeniería civil riayala@uc.cl 7.7 Ejercicios | Capítulo 7 Programación en HP PPL 154 Capítulo 8 Introducción al modo CAS Resumen 8.1 8.2 ¿Qué es CAS?, 156 CAS en PPL PRIME, 157 8.1 ¿Qué es CAS? | Capítulo 8 Programación en HP PPL 8.1 ¿Qué es CAS? Un sistema algebraico computacional (CAS) que permite realizar cálculos simbólicos de forma predeterminada, este sistema funciona en modo exacto y ofrece precisión infinita. Por otra parte, los cálculos que no se hacen en el sistema algebraico computacional como, por ejemplo, los que se realizan en la vista de INICIO o por parte de una aplicación, son cálculos numéricos y, a veces, aproximaciones limitadas por la precisión de la calculadora (hasta 12 dígitos significativos en el caso de la calculadora HP Prime). El CAS ofrece cientos de funciones, entre ellas, álgebra, cálculos, cálculos de ecuaciones, polinomios y más. Puede seleccionar una función del menú Sistema algebraico computacional, uno de los menús del cuadro de herramientas. 8.1.1Vista de CAS Los cálculos del sistema algebraico computacional se realizan en la vista del sistema algebraico computacional. La vista del sistema algebraico computacional es casi idéntica a la vista de Inicio. Se genera un historial de cálculos y puede seleccionar y copiar cálculos previos de la misma forma Figure 8.1 Vista principal del modo CAS que puede hacerlo en la vista de Inicio, así como almacenar objetos en variables. Para abrir la vista del sistema algebraico computacional, presione. Caparece en blanco en la parte izquierda de la riayala@uc.cl barra de título para indicar que se encuentra en la vista del sistema algebraico computacional y no en la vista de Inicio. 156 8.2 CAS en PPL PRIME | Capítulo 8 Programación en HP PPL aplicado a la ingeniería civil 8.1.2Cálculos con CAS Con una excepción, puede realizar cálculos en el sistema algebraico computacional exactamente de la misma forma que lo haría en la vista de Inicio. (La excepción es que no hay modo de entrada RPN en la vista del sistema algebraico computacional, solo los modos Algebraico y Libro de texto). Todas las teclas de operadores y funciones funcionan en la vista del sistema algebraico computacional de la misma Figure 8.2 Vista principal del modo CAS forma que en la vista de Inicio. No obstante, la principal diferencia es que la visualización predeterminada de las respuestas es simbólica en lugar de numérica. Las funciones del sistema algebraico computacional más utilizadas están disponibles en el menú de este sistema, que es uno de los menús del cuadro de herramientas. Para mostrar el menú, pulse el botón b. (Si el menú Sistema algebraico computacional no está abierto de forma predeterminada, toque C). 8.2 CAS en PPL PRIME En el lenguaje de programacion PPL PRIME se incluye el sistema algebraico computacional (CAS) a través del siguiente comando. Sintaxis CAS.funcion(); CAS.variable; este comando nos permite operar las funciones del modo CAS. Ejemplo Integral y derivada de una función Programa que calcula la integral y derivada de una función. Solución: 157 riayala@uc.cl 8.1 8.2 CAS en PPL PRIME | Capítulo 8 Programación en HP PPL Código 8.1: E1 CAS 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 EXPORT E1_CAS() BEGIN LOCAL SALIR,accion,FX; F1:="X^2+2*X−2"; F2:=CAS.diff(F1); F3:=CAS.int(F1); PRINT(); PRINT("FUNCION: "+F1); PRINT("DERIVADA: "+F2); PRINT("INTEGRAL: "+F3); //Evaluar la funcion. X:=10; FX:=eval(F1); PRINT("PARA X=10 ‐>F(X)= "+FX); END; Ejemplo Integral y derivada de una función 8.2 Programa que calcula el SENO del número 45 sumado el contador del bucle, si la operación se realiza con CAS, solo mostrará simbólicamente la operación, pero si se utiliza el comando evalf evaluará esa operación. Solución: Código 8.2: Foo riayala@uc.cl 1 2 3 4 5 6 7 8 9 10 11 158 EXPORT Foo() BEGIN LOCAL i,p,r; PRINT(); FOR i:=0 TO 3 DO p:=CAS.SIN(45+i); PRINT(p); r:=evalf(p); PRINT(r); END; END; Indice de Figuras Programación en HP PPL aplicado a la ingeniería civil Índice de Figuras Figura 1.1. Funcionamiento de un programa . . . . . . . . . . . 5 Figura 1.2. Secuencia de un programa. . . . . . . . . . . . . . . . . 5 Figura 1.3. Secuencia de un programa. . . . . . . . . . . . . . . . . 6 Figura 1.4. Módulo o secciones de un algoritmo. . . . . . . . . 8 Figura 1.5. Calculadora HP PRIME . . . . . . . . . . . . . . . . . . . 10 Figura 1.6. Calculadora HP PRIME . . . . . . . . . . . . . . . . . . . 10 Figura 1.7. Conociendo la calculadora HP PRIME . . . . . . . 11 Figura 1.8. Emulador para S.O. Windows. . . . . . . . . . . . . . 12 Figura 1.9. Logotipo programa Notepad++ . . . . . . . . . . . . 14 Figura 1.10. Importar un archivo de configuración a Notepad++. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Figura 2.1. Catálogo de programas . . . . . . . . . . . . . . . . . . 19 Figura 2.2. Vista de las herramientas de trabajo del software Kit de Conectividad. . . . . . . . . . . . . . . . . . . . . . 22 Figura 2.3. Creación de un nuevo programa.. . . . . . . . . . . 22 Figura 3.1. Variable global de exportación . . . . . . . . . . . . 27 Figura 3.2. Resultados del programa VarInicio . . . . . . . . . 30 Figura 3.3. Variables de aplicaciones. . . . . . . . . . . . . . . . . 32 Figura 3.4. Variables de usuario. . . . . . . . . . . . . . . . . . . . . 33 Figura 3.5. Resultados del programa Operadores . . . . . . 36 Figura 3.6. Resultados del programa CTEXTOUT . . . . . . . 36 Figura 3.7. Resultados del programa CPRINT . . . . . . . . . . 36 Figura 3.9. Resultados del comando STRING. . . . . . . . . . . 37 Figura 4.1. Programa RArea desde HOME . . . . . . . . . . . . 43 159 riayala@uc.cl Figura 3.8. Resultados del programa CMSGBOX . . . . . . . 36 Indice de Figuras Programación en HP PPL Figura 4.2. Formulario del ingreso de datos programa RArea . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 Figura 4.3. Resultados del programa RArea . . . . . . . . . . . 43 Figura 4.4. Ingreso de datos del programa CArea . . . . . .44 Figura 4.5. Ejecución del programa RInput . . . . . . . . . . . 45 Figura 4.6. Ejecución del programa RInput . . . . . . . . . . . 45 Figura 4.7. Ejecución del programa PChoose . . . . . . . . . . 47 Figura 4.8. Ingreso de datos a través de la pantalla táctil. 47 Figura 4.9. Ejemplo 1 de formularios Interactivos . . . . . . 47 Figura 4.10.Ejemplo 2 de formularios Interactivos . . . . . . 47 Figura 4.11. Ejecución del programa iMatriz . . . . . . . . . . .48 Figura 4.12.Ejecución del programa iMatriz . . . . . . . . . . .48 Figura 4.13.Ejecución del programa iLista . . . . . . . . . . . . .49 Figura 4.14.Ingreso del valor R = 10 . . . . . . . . . . . . . . . . . . 51 Figura 4.15.Ejecutando el programa: Impresión a través de MSGBOX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 Figura 4.16.Ingreso del valor R = 10 . . . . . . . . . . . . . . . . . . 52 Figura 4.17. Ejecutando el programa: Impresión a través de PRINT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 Figura 4.18.Vista de resultados de manera textual y gráfica. 52 Figura 4.19.Formulario de entrada del programa MI. . . . . 53 Figura 4.20.Ejecutando el programa, vista de los resultados 53 Figura 4.22.Ejecutando el programa, vista de los resultados 55 Figura 4.21.Sistema de coordenadas cartesianas. . . . . . . . 55 riayala@uc.cl Figura 4.23.Sistema de coordenadas de píxel. . . . . . . . . . . 56 Figura 4.24.Creación de un GROB de trabajo con dimensiones 320x480 píxeles . . . . . . . . . . . . . 57 Figura 4.26.Programa PBLITb . . . . . . . . . . . . . . . . . . . . . . . 59 160 Indice de Figuras Programación en HP PPL aplicado a la ingeniería civil Figura 4.27.Programa PBLITc. . . . . . . . . . . . . . . . . . . . . . . . 59 Figura 4.25.Programa PBLITa. . . . . . . . . . . . . . . . . . . . . . . . 59 Figura 4.28.Programa PBLITd . . . . . . . . . . . . . . . . . . . . . . . 60 Figura 4.29.Programa PBLITe. . . . . . . . . . . . . . . . . . . . . . . . 60 Figura 4.30.Programa PBLITf . . . . . . . . . . . . . . . . . . . . . . . . 61 Figura 4.31.Programa AboutESP . . . . . . . . . . . . . . . . . . . . . 61 Figura 4.32.Programa PBLITf . . . . . . . . . . . . . . . . . . . . . . . . 62 Figura 4.33.Modelo aditivo de colores rojo, verde, azul. . . 63 Figura 4.34.Ejecutando el programa iMENU . . . . . . . . . . . 65 Figura 4.35.Ejecutando el programa iICON . . . . . . . . . . . .66 Figura 5.1. Condición simple . . . . . . . . . . . . . . . . . . . . . . . 74 Figura 5.2. Condición doble . . . . . . . . . . . . . . . . . . . . . . . . 74 Figura 5.3. Condición múltiple. . . . . . . . . . . . . . . . . . . . . . 74 Figura 5.4. Orden de las operaciones. . . . . . . . . . . . . . . . . 75 Figura 5.5. Diagrama de flujo IF THEN. . . . . . . . . . . . . . . . 75 Figura 5.6. Ingreso de datos:programa ValorAbsoluto . . . 76 Figura 5.7. Resultado:programa ValorAbsoluto . . . . . . . . 76 Figura 5.9. Ingreso de datos:programa Compara10 . . . . . 77 Figura 5.10.Resultado:programa Compara10. . . . . . . . . . . 77 Figura 5.8. Diagrama de flujo de la estructura IF THEN ELSE 77 Figura 5.11. Diagrama de flujo de la estructura CASE . . . . 78 Figura 5.12.Resultados: programa NumeroRomano . . . . . 79 Figura 5.13.Resultados: programa NumeroRomano . . . . . 79 Figura 5.14.Resultados para num=5 y den=0 . . . . . . . . . . . 80 Figura 5.15.Resultados para num=5 y den=10 . . . . . . . . . . 80 Figura 5.17. Resultado: programa TipoTriangulo . . . . . . . . 82 Figura 5.18.Ingreso de datos: programa TipoFlujo . . . . . . 83 161 riayala@uc.cl Figura 5.16.Ingreso de datos: programa TipoTriangulo . . 82 Indice de Figuras Programación en HP PPL Figura 5.19.Resultado: programa TipoFlujo. . . . . . . . . . . . 83 Figura 5.20.Ingreso de datos: programa Cuadrante . . . . . 84 Figura 5.21.Resultado: programa Cuadrante . . . . . . . . . . . 84 Figura 5.22.Diagrama de la estructura FOR . . . . . . . . . . . . 88 Figura 5.23.Resultado del programa Factorial para num=589 Figura 5.24.Resultado del programa Producto A=5 y b=2 . 90 Figura 5.25.Resultado del programa Producto A=5 y b=2 . 90 Figura 5.26.Diagrama de la estructura WHILE . . . . . . . . . . 91 Figura 5.27.Ingreso de datos: programa NumeroPI. . . . . . 92 Figura 5.28.Resultado: programa NumeroPI . . . . . . . . . . . 92 Figura 5.29.Diagrama de la estructura WHILE . . . . . . . . . . 92 Figura 5.30.Ingreso de datos: programa NumeroPI. . . . . . 93 Figura 5.31.Resultado: programa NumeroPI . . . . . . . . . . . 93 Figura 5.32.Diagrama de flujo de la ruptura de ciclo BREAK 94 Figura 5.33.Diagrama de flujo de la ruptura de ciclo CONTINUE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 Figura 5.34.Resultado: programa RelojDigital . . . . . . . . . . 96 Figura 5.35.Resultado: programa RelojDigital . . . . . . . . . . 96 Figura 5.36.Ingreso de datos: programa NEWTON-ENL . . 97 Figura 5.37.Resultado: programa NEWTON-ENL . . . . . . . 97 Figura 5.38.Resultado: programa Cargando1. . . . . . . . . . . 98 Figura 5.39.Resultado: programa Cargando1. . . . . . . . . . . 98 Figura 5.40.Resultado: programa Cargando2. . . . . . . . . . . 99 Figura 5.41.Resultado: programa Cargando2. . . . . . . . . . . 99 Figura 5.42.Resultado: programa HolaMundo. . . . . . . . . . 99 Figura 5.43.Resultado: programa HolaMundo. . . . . . . . . . 99 riayala@uc.cl Figura 5.44.Ingreso de datos: programa NumeroPI. . . . . 101 Figura 5.45.Resultado: programa NumeroPI . . . . . . . . . . 101 162 Indice de Figuras Programación en HP PPL aplicado a la ingeniería civil Figura 6.1. Unidimensional . . . . . . . . . . . . . . . . . . . . . . . 106 Figura 6.2. Bidimensional. . . . . . . . . . . . . . . . . . . . . . . . . 106 Figura 6.3. Tridimensional . . . . . . . . . . . . . . . . . . . . . . . . 106 Figura 6.4. Ingreso de datos . . . . . . . . . . . . . . . . . . . . . . . 109 Figura 6.5. Resultados del programa . . . . . . . . . . . . . . . . 109 Figura 6.6. Ingreso de datos . . . . . . . . . . . . . . . . . . . . . . . 115 Figura 6.7. Resultados del programa . . . . . . . . . . . . . . . . 115 Figura 6.8. Ingreso de datos . . . . . . . . . . . . . . . . . . . . . . . 116 Figura 6.9. Ingreso de datos . . . . . . . . . . . . . . . . . . . . . . . 116 Figura 6.10.Ingreso de datos . . . . . . . . . . . . . . . . . . . . . . . 116 Figura 6.11. Resultados del programa . . . . . . . . . . . . . . . . 116 Figura 6.12.Resultados del programa . . . . . . . . . . . . . . . . 117 Figura 6.13.Ingreso de datos . . . . . . . . . . . . . . . . . . . . . . . 119 Figura 6.14.Resultados del programa . . . . . . . . . . . . . . . . 119 Figura 6.15.Resultados del programa . . . . . . . . . . . . . . . . 119 Figura 7.1. Resultados del programa Funciones . . . . . . . 123 Figura 7.3. Resultados del programa . . . . . . . . . . . . . . . . 131 Figura 7.4. Resultados del programa . . . . . . . . . . . . . . . . 131 Figura 7.2. Valores de teclas obtenidos con el comando GETKEY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 Figura 7.5. Resultados del programa . . . . . . . . . . . . . . . . 132 Figura 7.6. Resultados del programa . . . . . . . . . . . . . . . . 132 Figura 7.7. Programa CMOUSE. . . . . . . . . . . . . . . . . . . . . 134 Figura 7.8. Programa PruebaMouse. . . . . . . . . . . . . . . . . 134 Figura 7.9. Programa PruebaMouse. . . . . . . . . . . . . . . . . 135 Figura 7.10. Programa PruebaWait . . . . . . . . . . . . . . . . . . 136 Figura 7.12. Programa PruebaWait . . . . . . . . . . . . . . . . . . 137 Figura 7.13. Programa PBoton . . . . . . . . . . . . . . . . . . . . . . 138 163 riayala@uc.cl Figura 7.11. Programa PruebaWait . . . . . . . . . . . . . . . . . . 136 Indice de Figuras Programación en HP PPL Figura 7.14. Programa PBoton . . . . . . . . . . . . . . . . . . . . . . 138 Figura 7.15. Pantalla principal . . . . . . . . . . . . . . . . . . . . . . 139 Figura 7.16. Ingreso de datos, Matriz . . . . . . . . . . . . . . . . 139 Figura 7.17. Resultados del programa . . . . . . . . . . . . . . . . 141 Figura 7.18. Resultados del programa . . . . . . . . . . . . . . . . 141 Figura 7.19. Pantalla principal del programa . . . . . . . . . . 143 Figura 7.20.Resultdos del programa Eq2do . . . . . . . . . . . 143 Figura 7.21. Ingreso de datos personalizado. . . . . . . . . . . 144 Figura 7.22.Verificación de errores de cálculo . . . . . . . . . 144 Figura 7.23.Pantalla principal del programa . . . . . . . . . . 146 Figura 7.24.Pantalla principal del programa . . . . . . . . . . 146 Figura 7.25.Formulario de ingreso de datos. . . . . . . . . . . 148 Figura 7.26.Dibujo de los esfuerzos, cambian de acuerdo al signo asignado . . . . . . . . . . . . . . . . . . . . . . . . 149 Figura 7.27.Dibujo de los esfuerzos, cambian de acuerdo al signo asignado . . . . . . . . . . . . . . . . . . . . . . . . 149 Figura 7.28.Dibujo deL círculo de Mohr . . . . . . . . . . . . . . 151 Figura 7.29.Ingreso de datos a través de recuadros personalizados . . . . . . . . . . . . . . . . . . . . . . . . 153 Figura 8.1. Vista principal del modo CAS . . . . . . . . . . . . 156 riayala@uc.cl Figura 8.2. Vista principal del modo CAS . . . . . . . . . . . . 157 164 Indice de Tablas Programación en HP PPL aplicado a la ingeniería civil Índice de Tablas Tabla 1.1. Leyenda del teclado . . . . . . . . . . . . . . . . . . . . . 10 Tabla 1.2. Características de la calculadora. . . . . . . . . . . 12 Tabla 1.3. Historial de versiones. . . . . . . . . . . . . . . . . . . . 13 Tabla 1.4. Historial de versiones. . . . . . . . . . . . . . . . . . . . 13 Tabla 1.5. Historial de versiones. . . . . . . . . . . . . . . . . . . . 14 Tabla 3.1. Tipo dato predefinido en la calculadora HP PRIME. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 Tabla 3.2. Leyenda del teclado . . . . . . . . . . . . . . . . . . . . . 28 Tabla 3.3. Tipo de objetos o identificadores de variables.33 Tabla 3.4. Tipo de operadores relacionales. . . . . . . . . . . . 35 Tabla 3.5. Tipo de operadores relacionales. . . . . . . . . . . . 35 Tabla 3.6. Tipo de objetos o identificadores de variables.39 Tabla 4.1. Tamaño de fuente para el comando TEXTOUT65 Tabla 5.1. Tipo de operadores lógicos. . . . . . . . . . . . . . . . 75 Tabla 5.2. Tipo de operadores relacionales. . . . . . . . . . . . 75 Tabla 7.1. Tipo de acción al tocar la pantalla . . . . . . . . . 133 165 riayala@uc.cl Tabla 7.2. Acciones del comenado WAIT . . . . . . . . . . . . 135 Programación en HP PPL aplicado a la ingeniería civil