Documente Academic
Documente Profesional
Documente Cultură
HP PRIME
"CURSO DE PROGRAMACIN EN
LA CALCULADORA HP PRIME"
ndice General ii
ndice de Cuadros vi
I CLASES I 1
I INTRODUCCIN 2
1.1 Conociendo la Calculadora . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2 Programacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3 Programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.4 Problemas y algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.4.1 Ejemplo de algoritmos . . . . . . . . . . . . . . . . . . . . . . . . 5
II PROGRAMACIN EN HP PPL 6
2.1 Estructura de comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2 Comentarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.3 Catalogo de programas . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.4 Creacin de un nuevo programa . . . . . . . . . . . . . . . . . . . . . . . 8
2.4.1 Desde la HP PRIME . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.4.2 Desde el software de conectividad de la HP PRIME. . . . . . . . . 9
ii
ndice General
V BIFURCACIONES Y BUCLES 29
5.1 Bifurcacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
5.1.1 Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
5.1.2 Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
5.1.3 Comando IF THEN . . . . . . . . . . . . . . . . . . . . . . . . . 30
5.1.4 Comando IF THEN ELSE . . . . . . . . . . . . . . . . . . . . . . 31
5.1.5 Comando CASE . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
5.1.6 Comando IFERR . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
5.1.7 Comando IFERR ELSE . . . . . . . . . . . . . . . . . . . . . . . 34
5.1.8 Ejemplo 01 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
5.2 Bucle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5.2.1 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5.2.2 Comando FOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
5.2.3 Comando FOR STEP . . . . . . . . . . . . . . . . . . . . . . . . 37
5.2.4 Comando FOR DOWN . . . . . . . . . . . . . . . . . . . . . . . 38
5.2.5 Comando FOR STEP DOWN . . . . . . . . . . . . . . . . . . . . 39
5.2.6 Comando WHILE . . . . . . . . . . . . . . . . . . . . . . . . . . 40
5.2.7 Comando REPEAT . . . . . . . . . . . . . . . . . . . . . . . . . 41
5.2.8 Comando BREAK . . . . . . . . . . . . . . . . . . . . . . . . . . 42
5.2.9 Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
VI CADENAS 44
6.1 Definicin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
6.2 ASC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
6.3 LOWER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
6.4 CHAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
6.5 DIM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
6.6 STRING . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
iii
ndice General
VIILISTAS Y MATRICES 47
7.1 Array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
7.2 Listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
7.2.1 Creacin de listas . . . . . . . . . . . . . . . . . . . . . . . . . . 48
7.2.2 SORT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
7.2.3 CONCAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
7.2.4 Posicin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
7.2.5 Tamao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
7.2.6 EDITLIST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
7.3 Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
7.3.1 ADDCOL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
7.3.2 ADDROW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
7.3.3 DELCOL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
7.3.4 DELROW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
7.3.5 EDITMAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
7.3.6 REDIM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
7.3.7 REPLACE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
7.3.8 SCALE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
7.3.9 SCALEADD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
7.3.10 SUB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
7.3.11 SWAPCOL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
7.3.12 SWAPROW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
7.3.13 Posicin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
7.4 Comandos especiales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
7.4.1 GETKEY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
7.4.2 ISKEYDOWN . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
7.5 Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
VIIIObjetos Grficos 55
8.1 Comando de ingreso de datos . . . . . . . . . . . . . . . . . . . . . . . . 56
8.1.1 MOUSE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
8.1.2 WAIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
8.2 Comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
8.2.1 DRAWMENU . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
8.2.2 FREEZE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
8.2.3 RGB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
8.2.4 LINE P . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
8.2.5 RECT P . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
8.2.6 TEXTOUT P . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
8.2.7 BLIT P . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
8.3 Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
iv
ndice General
IX Procedimientos y Subrutinas 74
v
NDICE DE CUADROS
vi
NDICE DE FIGURAS
vii
PARTE I
Proyecto: CURSO DE PROGRAMACIN EN LA
CALCULADORA HP PRIME
CAPTULO
INTRODUCCIN
2
QSG_Fir.book Page iii Tuesday, July 2, 2013 11:09 AM
Figura No 1.1:
Conociendo la calculadora HP PRIME
iii
iii
1.2 Programacin | Capitulo I
1.2 Programacin
Indicar a la calculadora qu es lo que tiene que hacer.
Qu es programar?
Decirle a un tonto muy rpido exactamente lo que tiene que hacer Especificar la estructura
y el comportamiento de un programa, as como probar que el programa realiza su tarea
adecuadamente y con un rendimiento aceptable.
1.3 Programa
Transforma entrada en salida.
1. Secuencia de instrucciones
2. Instrucciones que entiende la computadora
3. Y que persiguen un objetivo: resolver un problema!
Por otra parte, un algoritmo consta de tres secciones o mdulos principales. En la figura
1.2 podemos observar las secciones que constituyen un algoritmo.
El mdulo 1 representa la operacin o accin que permite el ingreso de los datos del
problema.
El mdulo 2 representa la operacin o conjunto de operaciones secuenciales, cuyo objetivo
es obtener la solucin al problema.
4
1.4 Problemas y algoritmos | Capitulo I
1.4.1.1 Ejemplo 1
1.2 Diagramas de flujo
Elaborar un algoritmo para calcular el promedio final de la materia de algoritmos. Dicha
Un diagrama de flujo representa la esquematizacin grfica de un algoritmo. En
calificacin se compone delos siguientes porcentajes.
realidad muestra grficamente los pasos o procesos a seguir para alcanzar la solu
55% cin
delde promedio finalSudecorrecta
un problema. sus calificaciones
construccinparciales (3)
es sumamente importante porque
a partir del mismo se escribe
30% de la calificacin de promedio un programa en algn lenguaje de programacin. Si
el diagrama de flujo est completo y correcto, el paso del mismo a un lenguaje de
15% programacin
de la calificacin de un trabajo
es relativamente simplefinal
y directo.
A continuacin en la tabla 1.1 presentamos los smbolos que utilizaremos, y
una explicacin de los mismos. Estos satisfacen las recomendaciones de la Jn-
ternational
1.4.1.2 Ejemplo 2Organization for Standardizatior' (ISO) y la American National
Standards Institute (ANSI).
Elabora un algoritmo para
A continuacin en leer un numero
la figura y determinar
1.3 presentamos las si es parque
etapas o impar.
debemos seguir
en la construccin de un diagrama de flujo.
1.4.1.3 Ejemplo 3
Solicitar unReglas
1.2.1 entero para
y determinar s es mltiplo
la construccin de 3 y adems
de diagramas que se encuentre en el rango
de flujo
(100-200).
Debemos recordar que un diagrama de flujo debe ilustrar grficamente los pasos
o procesos a seguir para alcanzar la solucin de un problema. Los smbolos pre
1.4.1.4 Ejemplo 4
sentados, colocados adecuadamente, permiten crear una estructura grfica flexi
ble que
Desarrolle un ilustra losque
algoritmo pasos a seguir
realice para alcanzar
la sumatoria un resultado
de los nmeros enterosespecfico. El entre
comprendidos
diagrama de flujo facilitar ms tarde la escritura del programa en algn lenguaje
el 1 ydeelprogramacin.
10, es decir, 1 + 2 + 3 + . . . . + 10.
1.4.1.5 Ejemplo 5
Determinar la hipotenusa de un tringulo rectngulo conocidas las longitudes de sus dos
www.FreeLibros.com
catetos. Desarrolle el algoritmo correspondiente.
1.4.1.6 Ejemplo 6
Desarrolle un algoritmo que permita leer dos nmeros y ordenarlos de menor a mayor, si es
el caso.
5
II
CAPTULO
PROGRAMACIN EN HP PPL
Este lenguaje esta orientado a secuencias y permite 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.
EXPORT MYPROGAM()
BEGIN
PIXON(1,1);
END;
Los comandos se separan con punto y coma (;). Los comandos que aceptan varios
argumentos incluyen a estos ltimos entre parntesis, separados por comas( , ). Por ejemplo.
6
2.2 Comentarios | Capitulo II
En este manual, los argumentos opcionales a los comandos aparecen dentro de corchetes,
como se ha mostrado anteriormente. En el ejemplo TEXTOUTP , una variable grfica (G)
podra especificarse como segundo argumento. El valor predeterminado es G0, que contiene
siempre la pantalla mostrada en ese momento. Por lo tanto, la sintaxis mas completa del
comando TEXTOUTP es:
2.2 Comentarios
Cuando una lnea de un programa empieza con dos barras diagonales, //, se ignorar el
resto de la lnea. Esto le permite introducir comentarios en el programa:
EXPORT MYPROGAM()
BEGIN
PIXON(1,1);
//Esta linea es solo un comentario.
END;
7
2.4 Creacin de un nuevo programa | Capitulo II
Figura No 2.1:
Se ingresa presionando los botones Shift + 1
8
2.4 Creacin de un nuevo programa | Capitulo II
EXPORT HOLAMUNDO()
BEGIN
END;
9
2.4 Creacin de un nuevo programa | Capitulo II
: Sugerencia
Un nombre de programa solo puede contener caracteres alfanumricos (letras y nmeros)
y el carcter de subrayado. El primer carcter debe ser una letra. Por ejemplo,
HELLO_WORLD y Programa2 son nombres de programa vlidos, mientras que HELLO
WORLD (no se permiten espacios) y 2Program! (empieza con un nmero e incluye un
signo !) no son vlidos.
10
III
CAPTULO
VARIABLES Y OBJETOS
Son valores asignados en la memoria con un nombre dentro de un programa que se requieren
constantemente para ser operados.
Las variables en un programa de HP Prime pueden utilizarse para almacenar nmeros,
listas, matrices, objetos de grficos y cadenas. El nombre de una variable debe tener
una secuencia de carcteres alfanumricos (letras y nmeros), comenzado con una letra.
Los nombres reconocen maysculas y minsculas, por lo tanto las variables denominadas
VarTem y varTEM son diferentes.
1. Reales.
11
3.1 Variables Globales | Capitulo III
2. Complejos.
3. Listas.
4. Matrices.
12
3.1 Variables Globales | Capitulo III
5. Grficos.
6. Configuracin.
7. Sistema.
13
3.1 Variables Globales | Capitulo III
14
3.2 Variables locales. | Capitulo III
Figura No 3.2:
Variables de usuario
3.3 Objetos
Son valores asignados en una variable para ser operados dentro de un programa.
15
3.4 Declaracin de variables | Capitulo III
Cuadro No 3.1 :
Tipo de objetos o identificadores de variables
Valor asignado Nombre objeto
0 Real
1 Entero
2 Cadena
3 Compleja
4 Matriz
5 Error
6 Lista
8 Funcin
9 Unidad
EXPORT HOLAMUNDO()
BEGIN
LOCAL var1;
LOCAL var2:="";
LOCAL var3:=(0,0);
LOCAL var4:=[0];
LOCAL var5:=[[0]];
LOCAL var6:={};
LOCAL var7:=)0);
END;
16
3.4 Declaracin de variables | Capitulo III
Figura No 3.4:
Declaracion de variables
17
IV
CAPTULO
INGRESO Y SALIDA DE DATOS
En este captulo aprenderemos cmo ingresar valores por el teclado y/o pantalla y hacer
que estos se guarden en variables. Nos permitir hacer programas cuya ejecucin cambie
segn un valor que ingresemos.
4.1.1 Funcin
Los programas mas simples no necesitan de la creacin de formularios. Con la asignacin
de variables le es suficiente para poder operar y funcionar adecuadamente.
Ejemplo :
EXPORT RArea(b,h)
BEGIN
18
4.1 Ingreso de datos | Capitulo IV
LOCAL Area;
Area:=b*h;
RETURN "Area="+Area;
END;
INPUT(V,[title],[label],[help],[valor_reset],[valor_inicial])
INPUT({V},[{title}],[{label}],[{help}],[{valor_reset}],[{valor_inicial}])
EXPORT AREACALC()
19
4.1 Ingreso de datos | Capitulo IV
BEGIN
LOCAL radio;
INPUT(radio, "Radio del circulo","R = ","Enter radius",1);
END;
Figura No 4.1:
Formularios Interactivos
20
4.1 Ingreso de datos | Capitulo IV
Figura No 4.3:
Declaracion de variables
EXPORT RInput
BEGIN
LOCAL Aa,Bb, Cc,Dd,Ee;
INPUT
(
{
{Aa,[0],{25,25,0}},
{Bb,[1],{25,20,1}},
{Cc,[6],{25,25,2}},
{Dd,{"Esc A","Esc B","Esc C","Esc D"},{25,25,3}},
{Ee,0,{25,25,4}}
},
"TITULO DEL FORMULARIO",
{
"Etiqueta 1: ",
"Etiqueta 2: ",
"Etiqueta 3 : ",
"Etiqueta 4 : ",
"Etiqueta 5 : "
},
{
"Ayuda 1",
"Ayuda 2",
"Ayuda 3",
"Ayuda 4",
21
4.2 Formularios interactivos | Capitulo IV
"Ayuda 5"
},
{2.5,20,{2,5},2,0},
{2.5,20,{2,5},2,0}
);
END;
Figura No 4.4:
Ingreso de datos a travs de la pantalla tctil
22
4.3 Otros | Capitulo IV
Figura No 4.5:
Formularios Interactivos
Figura No 4.6:
Formularios interactivos
4.3 Otros
Tambin se puede personalizar el ingreso de datos a travs de matrices, vectores, listas,
etc.
23
4.4 Salida de datos | Capitulo IV
Ejemplo:
EXPORT AREACALC()
BEGIN
LOCAL radio,ar;
INPUT(radio, "Radio del circulo","R = ","Enter radius",1);
ar:=PI*radio^2;
MSGBOX("El area del circulo es:" + ar);
END;
Procesando el programa.
PRINT(expresion o cadena);
Ejemplo:
24
4.4 Salida de datos | Capitulo IV
EXPORT AREACALC()
BEGIN
LOCAL radio,ar;
INPUT(radio, "Radio del circulo","R = ","Enter radius",1);
ar:=PI*radio^2;
PRINT("El radio es: " +ar);
END;
Procesando el programa.
Figura No 4.7:
Formularios interactivos
4.5 Ejercicios
25
4.5 Ejercicios | Capitulo IV
4.5.1 Ejercicio 1
Figura No 4.8:
Formularios interactivos
4.5.2 Ejercicio 2
Figura No 4.9:
Formularios interactivos
26
4.5 Ejercicios | Capitulo IV
4.5.3 Ejercicio 3
Figura No 4.10:
Formularios interactivos
EXPORT MI()
BEGIN
//1 ->Declaracion de variables.
LOCAL a , b, Ix, Iy, Icg;
27
4.5 Ejercicios | Capitulo IV
Procesando el programa.
28
V
CAPTULO
BIFURCACIONES Y BUCLES
5.1 Bifurcacin
Un condicional en la programacin es una sentencia o grupo de sentencias que puede
ejecutarse o no en funcin del valor de una condicin.
Los tipos ms conocidos de condicionales son el SI (IF) y el SEGN (case), aunque tambin
podramos mencionar al lanzamiento de errores como una alternativa ms moderna para
evitar los cierres inesperados de nuestros programas.
5.1.1 Operadores
La calculadora HP Prime realiza clculos en funcin del siguiente orden de precedencia. Las
funciones con la misma precedencia se evalan de izquierda a derecha.
29
5.1 Bifurcacin | Capitulo V
5.1.2 Ejemplos
5.1.2.1 Ejemplo 1
Elabore un programa que pida al usuario dos numero e imprima el mayor de ellos.
5.1.2.2 Ejemplo 2
Elabore un programa que pida un numero y si diga si es o no mltiplo de 3.
5.1.2.3 Ejemplo 3
Elabore un programa que pida un numero y si diga si es o no mltiplo de 3.
5.1.2.4 Ejemplo 4
Dado 3 nmeros deducir cual es el central.
5.1.2.5 Ejemplo 5
Que dados dos nmeros n1 y n2 se quiere dividir n1 entre n2 siempre y cuando n2 no sea
cero, determinar e imprimir el resultado de la divisin en caso contrario imprimir No se
puede dividir.
5.1.2.6 Ejemplo 6
Que lea dos temperaturas, imprimir Hace Frio si la temperatura es inferior a 15o , en caso
contrario imprimir Hace Calor.
IF prueba THEN
comandos
END;
Ejemplo :
EXPORT C1(A)
BEGIN
PRINT();
IF A<10 THEN
PRINT("EL NUMERO INGRESADO ES MENOR QUE 10");
END;
END;
Procesando el programa.
30
5.1 Bifurcacin | Capitulo V
IF prueba THEN
comandos 1
ELSE
comandos 2
END;
Ejemplo :
EXPORT C1(A)
BEGIN
PRINT();
IF A<10 THEN
PRINT("EL NUMERO INGRESADO ES MENOR QUE 10");
ELSE
PRINT("EL NUMERO INGRESADO ES MAYOR QUE 10");
END;
END;
Procesando el programa.
31
5.1 Bifurcacin | Capitulo V
CASE
IF prueba1 THEN
comandos1
END;
IF prueba2 THEN
comandos2
END;
...
[DEFAULT comandos]
END;
EXPORT C1(A)
BEGIN
PRINT();
CASE
IF A<10 THEN
PRINT("EL NUMERO INGRESADO ES MENOR QUE 10");
END;
IF A=10 THEN
32
5.1 Bifurcacin | Capitulo V
Procesando el programa.
IFERR
comandos1
THEN
comandos2
END;
Ejemplo :
EXPORT C1(A)
BEGIN
PRINT();
IFERR
PRINT("LA INVERSA DEL NUMERO ES:" + 1/A);
THEN
PRINT("INGRESE UN NUM DIFERENTE DE CERO");
33
5.1 Bifurcacin | Capitulo V
END;
END;
Procesando el programa.
IFERR
comandos1
THEN
comandos2
ELSE
comandos3
END;
5.1.8 Ejemplo 01
Clculo de tipo de flujo en tuberas.
5.1.8.1 Datos:
Q = 0.1 m3/s
D = 10 pulg.
= 1.14 106 m2/s
5.1.8.2 Donde:
4Q
Re = (5.1)
D
34
5.2 Bucle | Capitulo V
5.2 Bucle
Los ciclos repetitivos tambin llamados lazos o bucles permiten repetir una operacin o
secuencia de operaciones en funcin de ciertas condiciones. Es un segmento de un algoritmo
o programa cuyas instrucciones se repiten un nmero determinado de veces mientras se
cumpla una determinada condicin. Consta de tres partes:
1. Decisin.
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.
5.2.1 Ejercicios
5.2.1.1 Ejercicio 1
Que lea un numero N y calcule la suma de los nmeros menores que N.
5.2.1.2 Ejercicio 2
Que lea un numero N y que permita calcular el promedio de los nmeros menores que N.
5.2.1.3 Ejercicio 3
Que lea N nmeros ingresados por teclado y decir si son mltiplo de 5.
5.2.1.4 Ejercicio 4
Que permita mostrar los N primeros nmeros naturales.
35
5.2 Bucle | Capitulo V
5.2.1.5 Ejercicio 5
Que permita mostrar los N primeros nmeros impares.
5.2.1.6 Ejercicio 6
Que permita mostrar la suma de los N primeros nmeros pares.
5.2.1.7 Ejercicio 7
Que calcule la siguiente suma:
x x x
S =1+ + + ...
1 2 3
5.2.1.8 Ejercicio 8
Que muestre las tablas de multiplicar del numero 9.
5.2.1.9 Ejercicio 9
Que lea N nmeros y que muestre el mayor de ellos.
5.2.1.10 Ejercicio 10
Calcule la suma y el promedio de los nmeros pares menores o iguales que un numero K
ledo al comienzo.
5.2.1.11 Ejercicio 11
Que calcule el factorial de un nmero N ingresado por el teclado.
Ejemplo :
36
5.2 Bucle | Capitulo V
EXPORT BUCLES(A)
BEGIN
//1 ->Declaracion de variables.
LOCAL Factorial,i;
FOR i:=1 TO A DO
Factorial:=i*Factorial;
END;
Procesando el programa.
37
5.2 Bucle | Capitulo V
comandos
END;
Ejemplo :
EXPORT BUCLES(A,b)
BEGIN
//1 ->Declaracion de variables.
LOCAL Mult,i;
Procesando el programa.
38
5.2 Bucle | Capitulo V
Ejemplo :
EXPORT BUCLES(A,b)
BEGIN
//1 ->Declaracion de variables.
LOCAL i;
PRINT();
FOR i:=A DOWNTO b DO
PRINT("Numero " + i );
END;
END;
Procesando el programa.
39
5.2 Bucle | Capitulo V
WHILE prueba DO
comandos
END;
Ejemplo :
EXPORT BUCLES(A)
BEGIN
//1 ->Declaracion de variables.
LOCAL Factorial,i;
WHILE i<=A DO
Factorial:=i*Factorial;
i:=i+1;
END;
Procesando el programa.
40
5.2 Bucle | Capitulo V
REPEAT
comandos
UNTIL prueba ;
EXPORT BUCLES(A)
BEGIN
//1 ->Declaracion de variables.
LOCAL Factorial,i;
REPEAT
i:=i+1;
Factorial:=i*Factorial;
UNTIL i=A;
41
5.2 Bucle | Capitulo V
Procesando el programa.
BREAK(n);
5.2.9 Ejemplos
5.2.9.1 Ejemplo 1
Calcule la suma de los nmeros ingresados en una lista.
EXPORT LISTAS()
BEGIN
//1 ->Declaracion de variables.
LOCAL List:={},i,n,Suma;
42
5.2 Bucle | Capitulo V
{
"Ingrese una lista de numeros"
},
{{1,2,3,4,5}},
{{1,2,3,4,5}}
);
5.2.9.2 Ejemplo 2
Calcule el rea de cualquier polgono ingresando sus coordenadas.
43
VI
CAPTULO
CADENAS
6.1 Definicin
Una cadena es una secuencia de carcteres entre comillas (""). Para poner comillas dobles
en una cadena, use dos comillas consecutivas. Las cadenas se pueden utilizar en los
diferentes tipos de salida de datos en los programas.
EXPORT CPRINT()
BEGIN
LOCAL Variable;
PRINT();
PRINT("La Variable A = " + Variable + "metros");
END;
EXPORT CTEXTOUT()
BEGIN
LOCAL Variable:=10;
RECT();
TEXTOUT_P("La Variable A = " + Variable + " metros", 10, 10 ,1);
WAIT;
44
6.2 ASC | Capitulo VI
END;
EXPORT CMSGBOX()
BEGIN
LOCAL Variable:=10;
MSGBOX("La Variable A = " + Variable + " metros");
END;
6.2 ASC
Devuelve una lista que contiene los cdigos ASCII de cadena.
Sintaxis: ASC(cadena)
Por ejemplo:
6.3 LOWER
Convierte caracteres en maysculas a una cadena en minsculas.
Sintaxis: LOWER(cadena)
Ejemplos:
6.4 CHAR
Devuelve la cadena correspondiente a los cdigos de carcter en vector o el cdigo nico
del entero.
Sintaxis 1: CHAR(cadena)
Sintaxis 2: CHAR(entero)
Ejemplos:
45
6.5 DIM | Capitulo VI
6.5 DIM
Devuelve a la cantidad de caracteres en cadena.
Sintaxis: DIM(cadena)
Ejemplos:
6.6 STRING
Evala la expresin y devuelve el resultado como una cadena. Los parmetros adicionales
especifican cmo se muestran los nmeros.
Si se especifica el Modo, debe ser:
Cuadro No 6.1 :
Tipo de objetos o identificadores de variables
Valor Asignado Nombre del Objeto
0 Utilice la configuracin actual
1 Estndar
2 Fijo
3 Cientfico
4 Ingeniera
5 Flotante
6 Redondeo
7 Fraccin
46
VII
CAPTULO
LISTAS Y MATRICES
7.1 Array
Un array es una coleccin de datos del mismo tipo, que se almacena en posiciones consec-
utivas de memoria y reciben un nombre comn. Para referirse a un determinado elemento
de un array se debera utilizar un ndice, que especifique su posicion relativa en el array. Los
array podran ser.
1 Unidimensionales Vectores.
2 Bidimensionales Matrices o tablas.
3 Multidimensionales con 3 o mas dimensiones.
Figura No 7.1:
Tipos de array
47
7.2 Listas | Capitulo VII
7.2 Listas
Una lista consta de nmeros reales o complejos separados por comas, expresiones o matrices,
todos entre llaves. Por ejemplo, una lista puede contener una secuencia de nmeros reales
como 1,2,3. Las listas representan una forma prctica de agrupar objetos relacionados.
Puede realizar operaciones realizadas con las listas en Inicio y en los propios programas.
Hay diez variables de lista disponibles, denominadas de L0 a L9. Puede utilizarlas en
clculos o expresiones en Inicio o en un programa. Recupere el nombre de la lista del men
Vars. ( ) o escriba su nombre con el teclado.
Ejemplos:
7.2.2 SORT
Ordena los elementos de la lista en orden ascendente.
Sintaxis: SORT(lista)
Ejemplos:
7.2.3 CONCAT
Concatena dos listas para formar una nueva lista.
Sintaxis: CONCAT(lista1,lista2)
Ejemplos:
7.2.4 Posicin
Devuelve la posicin de un elemento en la lista. El elemento puede ser un valor, una variable
o una expresin.
Si hay ms de una instancia del elemento, devuelve la posicin de la primera incidencia del
elemento. Si no hay ninguna incidencia del elemento especifcado, devuelve un valor 0.
48
7.3 Matrices | Capitulo VII
Ejemplos 1:
7.2.5 Tamao
Devuelve el nmero de elementos de una lista o una lista que contiene las dimensiones de
un vector o matriz.
Sintaxis 1: SIZE(lista)
Sintaxis 2: SIZE(Vector)
Sintaxis 3: SIZE(Matriz)
Ejemplos:
7.2.6 EDITLIST
Inicia el Editor de lista cargando listvar y muestra la lista especifcada. Si se utiliza en
programacin, retorna al programa cuando el usuario pulsa .
Sintaxis: EDITLIST(listvar)
Ejemplos:
7.3 Matrices
Algunos comandos de matriz toman como su argumento el nombre de la variable de matriz
sobre la cual se aplica el comando. Los nombres vlidos son las variables globales M0M9
o una variable local que contenga una matriz. Tambin puede introducir una matriz
directamente como un argumento para el comando.
49
7.3 Matrices | Capitulo VII
7.3.1 ADDCOL
Inserta los valores en vector en una nueva columna insertada antes de nmero-columna en
la matriz especificada. El nmero de valores en el vector debe ser igual a la cantidad de
filas de la matriz.
Sintaxis: ADDCOL(nombrematriz, vector, nmero-columna)
7.3.2 ADDROW
Inserta los valores en vector en una nueva fila insertada antes de nmero-fila en la matriz
especificada.
Sintaxis: ADDROW(nombrematriz, vector, nmero-fila)
7.3.3 DELCOL
Elimina la columna nmero-columna de la matriz.
Sintaxis: DELCOL(nombre, nmero-columna)
7.3.4 DELROW
Elimina la fila nmero-fila de la matriz.
Sintaxis: DELROW(nombre,nmero-fila)
7.3.5 EDITMAT
Inicia el Editor de matriz y muestra la matriz especificada. Si se utiliza en programacin,
vuelve al programa cuando el 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.
Sintaxis: EDITMAT(matvar)
Ejemplos:
7.3.6 REDIM
Redimensiona la matriz o vector especificado a tamao. Para una matriz, tamao es una
lista de dos nmeros enteros (n1, n2). Para un vector, tamao es una lista que contiene
un nmero entero (n). Se mantienen los valores existentes en la matriz. El valor de relleno
ser 0.
50
7.3 Matrices | Capitulo VII
7.3.7 REPLACE
Reemplaza parte de una matriz o vector almacenado en matriz con un objeto comenzando
por la posicin de inicio. El inicio para una matriz es una lista que contiene dos nmeros;
para un vector, es un nico nmero.
Sintaxis: REPLACE(nombre, inicio, objeto)
7.3.8 SCALE
Multiplica el nmero fila de la matriz especificada por valor.
Sintaxis: SCALE(nombre, valor, nmero-fila)
7.3.9 SCALEADD
Multiplica fila1 de la matriz (nombre) por valor y, a continuacin, aade este resultado a
fila2 de la matriz (nombre) y sustituye fila1 por el resultado.
Sintaxis: SCALEADD(nombre, valor, fila1, fila2)
7.3.10 SUB
Extrae un subobjeto (una parte de una lista, matriz o grfico) y lo guarda en nombre. Inicio
y fin se especifican por medio de una lista de dos nmeros para una matriz, un nmero para
un vector o para listas, o un par ordenado, (X,Y), para grficas: SUB(M11,2,2,2)
Sintaxis: SUB(nombre, inicio, fin)
7.3.11 SWAPCOL
Intercambia columna1 y columna2 de la matriz especificada (nombre).
Sintaxis: SWAPCOL(nombre, columna1, columna2)
7.3.12 SWAPROW
Intercambia fila1 y fila2 en la matriz especificada (nombre).
Sintaxis: SWAPROW(nombre, fila1, fila2)
51
7.4 Comandos especiales | Capitulo VII
7.3.13 Posicin
Devuelve la posicin de un elemento de la matriz dada.
Ejemplos 2 - lenguaje de programcin HP PPL:
INPUT
7.4.2 ISKEYDOWN
Sintaxis: INPUT(var,[title], [label], [help], [reset_value],
[initial_value])
Devuelve true(verdadero) (distinto de cero) si la tecla cuyo id-tecla se proporciona est
Sintaxis: INPUT({vars},[ttulo],
presionada actualmente y falso (0) si no es as. [{etiquetas}], [{ayuda}],
[{restablecer_valores}], [{valores_iniciales}])
Sintaxis: ISKEYDOWN(id-tecla)
La forma ms sencilla de este comando abre un cuadro de dilogo con el ttulo dado y un campo denominad
etiqueta, y muestra el contenido de ayuda en la parte inferior. El cuadro de dilogo incluye las teclas de men
CANCEL y OK. El usuario puede ingresar un valor en el campo etiquetado. Si el usuario presiona la tecla de
men OK, la variable var se actualiza con el valor introducido y el comando devuelve52 1. Si el usuario presion
la tecla de men CANCEL, la variable no se actualiza y devuelve 0.
En las formas ms complejas del comando, se utilizan listas para crear un cuadro de dilogo con varios
7.5 Ejemplos | Capitulo VII
7.5 Ejemplos
Ejemplo 1
Desarrolle una funcion que encuentre el mximo y mnimo valor en una lista de listas
de numeros naturales.
Solucin:
Codigo Fuente :
EXPORT MaxLista()
BEGIN
// 1->Declarando variables
LOCAL Lista:={2,3,15,7,10},i,n,mayor,menor;
// 2->Ingreso de datos
INPUT
(
{
{Lista,[6],{25,70,0}}
},
"MAX VALOR LISTA",
{
"Lista: "
},
{
"Ingrese una lista {a,b,c,...,z}"
},
{Lista},
{Lista}
);
// 3->Proceso del programa
n:=SIZE(Lista);
mayor:=Lista(1);
menor:=Lista(1);
FOR i:=1 TO n DO
IF Lista(i)>mayor THEN
mayor:=Lista(i)
END;
IF Lista(i)<menor THEN
menor:=Lista(i)
53
7.5 Ejemplos | Capitulo VII
END;
END;
// 4->Proceso del programa
MSGBOX("El Maximo valor de la lista es: " + mayor + " y el minimo es: " + -
menor );
END;
Ejemplo 2
Calcular el promedio de n valores almacenados en un vector. determinar adems
cuantos son menor que el promedio, imprimir el promedio, el nmero de datos menores
que el promedio y una lista de valores menores que el promedio.
Ejemplo 3
Hacer un algoritmo que llene una matriz de m * n y que imprima cuantos de los
nmeros almacenados son ceros, cuntos son positivos y cuntos son negativos.
54
VIII
CAPTULO
Objetos Grficos
> RECT();
> ARC(G0, 0, 0, 100);
> WAIT(1);
Las trece restantes trabajan con coordenadas de pxel donde el pxel 0,0 es el pxel superior
izquierdo de la GROB y 320, 240 es el inferior derecho. Las funciones de este segundo
55
8.1 Comando de ingreso de datos | Capitulo VIII
> RECT();
> ARC_P(G0, 100, 100, 100);
> WAIT(1);
EXPORT CMOUSE()
BEGIN
LOCAL tocar;
REPEAT
RECT();
tocar:=B->R(MOUSE());
WAIT(-1);
IF SIZE(tocar(1))=0 THEN
MSGBOX(tocar);
END;
UNTIL ISKEYDOWN(4);
END;
8.1.2 WAIT
Pausa la ejecucin del programa durante n segundos. Con ningn argumento o con n = 0,
pausa la ejecucin durante un minuto.
56
8.1 Comando de ingreso de datos | Capitulo VIII
Sintaxis: WAIT(n)
Si n=-1, pausa la ejecucin hasta que se pulsa una tecla o exista una actividad del mouse,
devolviendo el cdigo de la tecla o una lista de la forma {tipo, x, y, dx, dy }.
x, y : : eslaposicindelevento
Donde: =
tipo : eseltipodeactividad
Cuadro No 8.1 :
Tipo de objetos o identificadores de variables
Tipo Descripcin
0 : mouse hacia abajo
1 : movimiento del mouse
2 : mouse hacia arriba
3 : Clic del mouse
5 : estiramiento del mouse
6 : rotacin del mouse
7 : clic largo del mouse
EXPORT Programa()
BEGIN
LOCAL SALIR,accion;
RECT();
REPEAT
RECT();
accion:=B->R(WAIT(-1));
IF TYPE(accion)==6 THEN // Tipo de argumento Lista.
IF accion(1)==1 THEN
MSGBOX("Movimiento del mouse: "+accion(1));
END;
IF accion(1)==3 THEN
MSGBOX("Clic del mouse: "+accion(1));
END;
IF accion(1)==7 THEN
MSGBOX("Clic largo del mouse: "+accion(1));
END;
END;
57
8.2 Comandos | Capitulo VIII
8.2 Comandos
8.2.1 DRAWMENU
Dibuja un men de seis botes en la parte inferior de la pantalla, con etiquetas cadena1,
cadena2,..., cadena6.
Sintaxis: DRAWMENU(cadena1, cadena2, . . . , cadena6).
EXPORT MENU()
BEGIN
RECT();
DRAWMENU("Menu 1","Menu 2","Menu 3","Menu 4","Menu 5","Menu 6");
WAIT(-1);
END;
8.2.2 FREEZE
Pausa la ejecucin de un programa hasta que se pulse una tecla. Esto evita que la pantalla se
redibuje despus de finalizada la ejecucin del programa, dejando la visualizacin modificada
en la pantalla para que el usuario la vea.
Sintaxis: FREEZE
EXPORT ()
BEGIN
RECT();
DRAWMENU("Menu 1","Menu 2","Menu 3","Menu 4","Menu 5","Menu 6");
58
8.2 Comandos | Capitulo VIII
FREEZE;
END;
8.2.3 RGB
La descripcin RGB (del ingls Red, Green, Blue; rojo, verde y azul) de un color hace
referencia a su composicin de la intensidad de los colores primarios con que se forma: el
rojo, el verde y el azul. Este un modelo de color basado en lo q se conoce como sntesis
aditiva, con lo que es posible representar a un color por la mezcla por adicin de los tres
colores luz primarios.
Figura No 8.1:
Modelo aditivo de colores rojo, verde, azul.
Para indicar con qu proporcin se mezcla cada color, le asignamos un valor a cada uno de
los colores primarios, as, por ejemplo, el valor 0 significa que no interviene en la mezcla, y
en la medida que ese valor aumenta, aportar ms intensidad a la mezcla.
Devuelve un nmero entero que puede utilizarse como el parmetro de color para una
funcin de dibujo, en base a los valores de los componentes rojo, verde y azul (cada uno
de 0 a 255).
Sintaxis: RGB(R, G, B, [A])
EXPORT CRGB()
BEGIN
RECT(RGB(0,0,255,0.5));
DRAWMENU("Menu 1","Menu 2","Menu 3","Menu 4","Menu 5","Menu 6");
FREEZE;
END;
8.2.4 LINE P
El formato bsico de LINE P LINE dibuja una lnea entre las coordenadas pxel
cartesiano del grfico utilizando el color especificado.
Sintaxis: LINE P([G], x1, y1, x2, y2, [color])
59
8.2 Comandos | Capitulo VIII
EXPORT ()
BEGIN
END;
8.2.5 RECT P
Dibuja un rectngulo en G entre los puntos x1,y1 y x2,y2 utilizando color del borde para el
permetro y color de relleno para el interior.
Sintaxis: RECT P([G, x1, y1, x2, y2, colorborde, colorrelleno])
EXPORT ()
BEGIN
END;
8.2.6 TEXTOUT P
Dibuja un texto utilizando un color en el grfico G en la posicin x, y usando un tamao
de fuente.
0: fuente actual seleccionada en la pantalla Configuracin de Inicio,
1: Tamao 10
2: Tamao 12
3: Tamao 14
4: Tamao 16
5: Tamao 18
6: Tamao 20
7: Tamao 22
Sintaxis: TEXTOUT P(texto [ ,G], x, y [ ,fuente, c1, ancho, c2])
EXPORT ()
BEGIN
END;
8.2.7 BLIT P
Copia la regin de srcGRB entre el punto (sx1, sy1) al punto (sx2, sy2) en la regin de
trgtGRB entre los puntos (dx1, dy1) y (dx2, dy2).
Sintaxis: BLIT P([trgtGRB, dx1, dy1, dx2, dy2], [srcGRB, sx1, sy1, sx2, sy2,c])
60
8.3 Ejemplo | Capitulo VIII
EXPORT ()
BEGIN
END;
8.3 Ejemplo
Ejemplo 1
Ingresos Personalizados.
Solucin:
Como se vio en los capitulos anteriores el ingreso de datos se realiza por medio del comando,
propio de la HP-PRIME, INPUT la desventaja de este comando es que no se puede
personalizar. A continuacion se realizar un ejemplo del ingreso de datos perzonalizado
con el uso de los comandos WAIT Y MOUSE.
PASO 1:
Estructura de programacin.
//------------------------------------------------
// VARIABLES GLOBALES
//------------------------------------------------
Gp:=G1;
CXAp,CYAp;
CX,CY;
Bas:=10,Alt:=10;
Accion;
Fe:=1;
//------------------------------------------------
// VARIABLES COLORES
//------------------------------------------------
Blue:=RGB(0,0,#CDh); //-->Definiendo Color Azul
Red:=RGB(#CDh,0,0); //-->Definiendo Color Rojo
White:=RGB(255,255,255);
Plomo:=RGB(192,192,192);
DarkBlue:=RGB(33,115,231);
AzulTit:=RGB(33,84,163);
MCuad:=RGB(246,143,71);
FCuad:=RGB(192,192,192);
Fondo:=RGB(239,247,247);
61
8.3 Ejemplo | Capitulo VIII
CTexto:=RGB(33,115,231);
CTexto2:=RGB(195,56,56);
//------------------------------------------------
// FUNCIONES DECLARADAS
//------------------------------------------------
FGROBP();
FFORM_A();
EDITFORM();
EDF();
EDITC();
FRECT();
FRECT_B();
FPRE_A();
FCAL();
//------------------------------------------------
// NOMBRE : INICIO PROGRAMA
// DESCRIPCION : Inicio del programa
//------------------------------------------------
EXPORT Form()
BEGIN
END;
PASO 2:
Creacion de nuestro pantalla principal del programa.
FGROBP()
BEGIN
LOCAL accion,salir:=0,cx,cy;
RECT();
REPEAT
RECT();
DRAWMENU("Datos","Calculo","","","","Salir");
accion:=B->R(WAIT(-1));
62
8.3 Ejemplo | Capitulo VIII
cx:=accion(2);
cy:=accion(3);
IF cy>=219 AND cy<=240 THEN
CASE
IF cx>=0 AND cx<=51 THEN
FFORM_A();
END;
IF cx>=53 AND cx<=104 THEN
FCAL();
END;
IF cx>=265 AND cx<=319 THEN
//MENU 6
salir:=4;
MSGBOX("Hasta pronto");
END;
END;
END;
END;
END;
UNTIL salir==4;
END;
PASO 3:
Codigo del formulario.
FFORM_A()
BEGIN
RECT(Fondo);
LOCAL R_Bas:={},R_Alt:={},R_ok:={},mx,my;
LOCAL Salir;
RECT_P({0,1},{320,17},DarkBlue,AzulTit);
63
8.3 Ejemplo | Capitulo VIII
TEXTOUT_P("INGRESO DE DATOS",100,3,2,White);
TEXTOUT_P(" Base=",90,28,2);
TEXTOUT_P("Altura=",90,48,2);
R_ok:={{127,70},{197,87}};
RECT_P({127,70},{197,87},DarkBlue,AzulTit);
TEXTOUT_P("OK" ,155,73,2,White,90,AzulTit);
R_Bas:={{135,25},{185,40}};
R_Alt:={{135,45},{185,60}};
RECT_P({1,88},{318,218},DarkBlue,White);
REPEAT
EDITFORM(STRING(Bas,1),R_Bas,AzulTit,White);
EDITFORM(STRING(Alt,1),R_Alt,AzulTit,White);
Accion:=WAIT(-1);
IF TYPE(Accion)=6 THEN
IF Accion(1)==0 THEN
mx:=Accion(2);
my:=Accion(3);
CASE
IF R_Bas(1,1)<mx<R_Bas(2,1) AND R_Bas(1,2)<my<R_Bas(2,2) THEN
Bas:=EDITC(Bas,R_Bas,"Ingrese la base (m)");
FPRE_A();
END;
IF R_Alt(1,1)<mx<R_Alt(2,1) AND R_Alt(1,2)<my<R_Alt(2,2) THEN
Alt:=EDITC(Alt,R_Alt,"Ingrese la altura (m)");
FPRE_A();
END;
IF R_ok(1,1)<mx<R_ok(2,1) AND R_ok(1,2)<my<R_ok(2,2) THEN
Salir:=1;
END;
END;
END;
END;
64
8.3 Ejemplo | Capitulo VIII
UNTIL Salir==1;
END;
PASO 4:
Funciones complementarios para la creacion de nuestro formulario.
//------------------------------------------------
// NOMBRE : OPERACION BOTONES
// DESCRIPCION : DIbuja una region cuadrada
//------------------------------------------------
FPRE_A()
BEGIN
LOCAL Fe_X,Fe_Y,b,h;
//Calculo de escala.
Fe_X:=250/Bas;
Fe_Y:=90/Alt;
IF Fe_X<Fe_Y THEN
Fe:=Fe_X;
ELSE
Fe:=Fe_Y;
END;
b:=Bas*Fe;
h:=Alt*Fe;
//Dibuja el
RECT_P({1,88},{318,218},DarkBlue,White);
FRECT(b,h,150,163,Red);
END;
//------------------------------------------------
// NOMBRE : DIBUJA RECTANGULO
// DESCRIPCION :
//------------------------------------------------
FRECT(b,h,xc,yc,col)
BEGIN
LOCAL x,y,x2,y2;
65
8.3 Ejemplo | Capitulo VIII
x:=xc+b/2;
y:=yc+h/2;
x2:=xc-b/2;
y2:=yc-h/2;
LINE_P(x,y,x2,y,col); //top
LINE_P(x,y2,x2,y2,col); // bottom
LINE_P(x,y,x,y2,col); //left
LINE_P(x2,y,x2,y2,col); // right
TEXTOUT_P(TRUNCATE(Bas,1),xc-10,y2-12,2,Plomo);//Texto 1
TEXTOUT_P(TRUNCATE(Alt,1),x+10,yc-5,2,Plomo);//Texto 1
END;
FRECT_B(Gr,b,h,xc,yc,col)
BEGIN
LOCAL x,y,x2,y2;
x:=xc+b/2;
y:=yc+h/2;
x2:=xc-b/2;
y2:=yc-h/2;
LINE_P(Gr,x,y,x2,y,col); //top
LINE_P(Gr,x,y2,x2,y2,col); // bottom
LINE_P(Gr,x,y,x,y2,col); //left
LINE_P(Gr,x2,y,x2,y2,col); // right
TEXTOUT_P(TRUNCATE(Bas,1),Gr,xc-10,y2-12,2,Plomo);//Texto 1
TEXTOUT_P(TRUNCATE(Alt,1),Gr,x+10,yc-5,2,Plomo);//Texto 1
END;
//------------------------------------------------
// NOMBRE : CUADRO DE REGIONES
// DESCRIPCION : DIbuja una region cuadrada
//------------------------------------------------
EDITFORM(Dato,Region,ColorA,ColorB)
BEGIN
RECT_P(Region(1),Region(2),ColorA,ColorB);
TEXTOUT_P(Dato,Region(1)+4,1);
66
8.3 Ejemplo | Capitulo VIII
END;
//------------------------------------------------
// NOMBRE : TECLAS PARA NUMEROS
// DESCRIPCION : Reconoce la teclas de HP en un campo.
//------------------------------------------------
Tecla()
BEGIN
LOCAL Val,Rs;
Val:=Accion;
CASE
IF 31<=Val<35 THEN 25Rs END;
IF Val=35 THEN RETURN "/"; END;
IF 36<=Val<40 THEN 33Rs END;
IF Val=40 THEN RETURN ""; END;
IF 41<=Val<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;
STRING(Val-Rs,1);
END;
//------------------------------------------------
// NOMBRE : EDICION DE LOS CAMPOS.
// DESCRIPCION : Reconoce la teclas de HP en un campo.
//------------------------------------------------
EDITC(Dato,Region,Ayuda)
BEGIN
LOCAL NDato:=STRING(Dato,1),mx,my;
NDatoDato;
REPEAT
EDITFORM(NDato+"!",Region,MCuad,FCuad);
RECT_P({5,225},{320,240},Fondo);
TEXTOUT_P(Ayuda,5,227,2);
Accion:=B->R(WAIT(-1));
67
8.3 Ejemplo | Capitulo VIII
IF TYPE(Accion)=0 THEN
CASE
IF Accion==4 THEN
DatoNDato; BREAK;
END;
IF Accion==30 THEN
IFERR EXPR(NDato) THEN DatoNDato; END;
BREAK;
END;
IF Accion==19 THEN
IF DIM(NDato)<=1 THEN
""NDato;
ELSE
LEFT(NDato,DIM(NDato)-1)NDato;
END;
END;
DEFAULT
NDato+TeclaNDato;
END;
ELSE
IF SIZE(Accion)<1 AND NOT(Region(1,1)<Accion(2)<Region(2,1) AND -
Region(1,2)<Accion(3)<Region(2,2)) THEN
IFERR EXPR(NDato) THEN DatoNDato; END;
BREAK;
END;
END;
UNTIL 0;
RECT_P({5,223},{320,240},Fondo);
EXPR(NDato)NDato;
EDITFORM(STRING(NDato,1),Region,AzulTit,White);
NDato;
END;
PASO 5:
Codigo: Calculo de las propiedades geometricas de un rectangulo.
//------------------------------------------------
// NOMBRE :
// DESCRIPCION : Calcula propiedades de la seccion
68
8.3 Ejemplo | Capitulo VIII
//------------------------------------------------
FCAL()
BEGIN
LOCAL x,y;
DIMGROB_P(G2,320,480,Fondo);
RECT_P(G2,{0,1},{320,17},DarkBlue,AzulTit);
TEXTOUT_P("RESULTADOS DEL PROGRAMA ",G2,80,3,2,White);
Area:=Bas*Alt;
Perimetro:=4*Bas*Alt;
Icg:=Bas*Alt^3/12;
Ix:= Icg+Bas*Alt*(Alt/2)^2;
Iy:= Icg+Bas*Alt*(Bas/2)^2;
y:=30;
TEXTOUT_P(" Seccion Rectangular:",G2,5,y+5,3,CTexto2);
y:=75;
LOCAL b,h;
b:=Bas*Fe;
h:=Alt*Fe;
FRECT_B(G2,b,h,150,y+h/2,Red);
y:=y+h+20;
TEXTOUT_P(" Calculo del area Y perimetro:",G2,5,y+5,3,CTexto2);
TEXTOUT_P("-> Area = "+Area+" m2",G2,20,y+25,2,CTexto);
TEXTOUT_P("-> Perimetro = "+Perimetro+" m",G2,20,y+40,2,CTexto);
y:=y+60;
TEXTOUT_P(" Calculo de la Inercia de la seccion:",G2,5,y+5,3,CTexto2);
TEXTOUT_P("-> Icg = "+Area+" m4",G2,20,y+25,2,CTexto);
TEXTOUT_P("-> Ix = "+Area+" m4",G2,20,y+40,2,CTexto);
TEXTOUT_P("-> Iy = "+Area+" m4",G2,20,y+55,2,CTexto);
69
8.3 Ejemplo | Capitulo VIII
BLIT_P(G0,G2);
x:=0;y:=100;
REPEAT
WAIT(-1);
IF ISKEYDOWN(12) THEN
y:=MIN(y+120*ISKEYDOWN(12),240);
BLIT_P(G0,0,0,G2,x,y,320+x,240+y);
END;
IF ISKEYDOWN(2) THEN
y:=MAX(y-120*ISKEYDOWN(2),0);
BLIT_P(G0,0,0,G2,x,y,320+x,240+y);
CONTINUE;
END;
UNTIL ISKEYDOWN(4);
END;
Ejemplo 1
Desarrolle una aplicacion que calcule el error de cierre de un poligono en un
levantamiento topografico.
Solucin:
//------------------------------------------------
// VARIABLES GLOBALES
//------------------------------------------------
n:=3;
dAz:=1;Azz:={84,50,00};dC:=1;CE:=100;CN:=100;Az:=0;
Ang:={};GMS:=[[0]],Lad:=[0];SUMAng:=0;
//------------------------------------------------
// VARIABLES COLORES
//------------------------------------------------
White:=RGB(255,255,255);
Plomo:=RGB(192,192,192);
70
8.3 Ejemplo | Capitulo VIII
//------------------------------------------------
// FUNCIONES DECLARADAS
//------------------------------------------------
FInDat();
FMOUSEP();
//------------------------------------------------
// NOMBRE : INICIO PROGRAMA POLIGONAL
// DESCRIPCION : Inicio del programa
//------------------------------------------------
EXPORT Poligonal()
BEGIN
END;
//------------------------------------------------
EXPORT Poligonal()
BEGIN
LOCAL accion,cx,cy,salir;
REPEAT
RECT_P();
DRAWMENU("Datos","Proceso","Resultados","","","Salir");
accion:=B->R(WAIT(-1));
IF TYPE(accion)==6 THEN
IF accion(1)==3 THEN
cx:=accion(2);
cy:=accion(3);
IF cy>=219 AND cy<=240 THEN
CASE
IF cx>=0 AND cx<=51 THEN
//Accion del mouse
END;
IF cx>=53 AND cx<=104 THEN
//Accion del mouse
END;
IF cx>=106 AND cx<=157 THEN
//Accion del mouse
END;
IF cx>=265>= AND cx<=319 THEN
71
8.3 Ejemplo | Capitulo VIII
salir:=4;
END;
END;
END;
END;
END;
UNTIL salir==4;
END;
FInDat()
BEGIN
//Formulario de ingreso 1
INPUT
(
{
{n,[0],{40,20,3}}
},
"NUMERO DE LADOS",
{"n: "},
{"Ingrese el numero de lados"},
{n},{n}
);
//Declarando variables locales
LOCAL LA,LB,j,A,B,C;
LA:={};
LB:={};
//Proceso para concatenar los vertices del poligono
FOR j:=1 TO n DO
A:=char(64+j);
IF j==n THEN
B:=char(65);
ELSE
B:=char(65+j);
END;
C:=A+B;
LA:=CONCAT(LA,C);
LB:=CONCAT(LB,A);
END;
72
8.3 Ejemplo | Capitulo VIII
//Formulario de ingreso 2
INPUT
(
{
{dAz,LA,{20,15,1}},
{Az,[6],{60,35,1}},
{dC,LB,{40,15,3}},
{CE,[0],{20,20,5}},
{CN,[0],{60,20,5}}
},
"INGRESO DEL AZIMUT Y CORDENADAS",
{
"Tramo:","Azimut:","Punto:","Coor E:","Coor N:"
},
{
"Tramo Azimut conocido","Ingrese Azimut {G,M,S}","Punto de -
coordenada conocida","Ingrese cordenadas este","Ingrese cordenadas -
norte"
},
{dAz,Az,dC,CE,CN},
{dAz,Az,dC,CE,CN}
);
//Tabla ingreso de datos Angulos.
Az:=Azz(1)+Azz(1)/60+Azz(1)/3600;
GMS:=MAKEMAT(0,n,3);
LB:=CONCAT(LB," ");
GMS:=EDITMAT(GMS,{"Introduzca angulos de los -
vert.",LB,{"G","M","S",""}});
FOR i:=1 TO n DO
GMS(i,1)+GMS(i,2)/60+GMS(i,3)/3600->Ang(i);
END;
//Tabla ingreso de datos Lados.
Lad:=MAKEMAT(0,n);
LA:=CONCAT(LA," ");
Lad:=EDITMAT(Lad,{"Introduzca dist. de los lados",LA,{"Dist. (m)",""}});
END;
73
IX
CAPTULO
Procedimientos y Subrutinas
74