Professional Documents
Culture Documents
Programación para Topografía
Programación para Topografía
Notas de clase
Programación
para
Topografía
Gonzalo Jiménez C.
Julián Garzón B.
Facultad de Ingeniería
Programa de Topografía
Armenia, 2007
2007
Notas de clase
Programación
para
Topografía
Primer borrador
Topografía
Este documento es una guía de enseñanza básica para aquellos estudiantes
de Topografía que se inician en el asombroso mundo de la programación y
que desean tener una visión estructurada para analizar y solucionar Algoritmos,
problemas, desarrollando la capacidad de pensar racionalmente a cerca de
soluciones alternativas y los resultados de aplicarlas, es decir de hacer
diagramas de flujo
elecciones inteligentes. El lenguaje que se utiliza es seudocódigo, lo cual es de datos, y
una característica muy importante porque facilita al alumno concentrarse
en las estructuras de datos y algoritmos asociados a ella sin necesidad de
programas
relacionarlas a un complejo lenguaje de programación.
Tabla de contenido Geomática
Tabla de contenido
1. Algoritmos, su representación, y programas .................... 7
1.1 Conceptos básicos de programación ................................... 7
1.1.1 Programar .................................................................................. 7
1.1.2 Dato............................................................................................ 7
1.1.3 Información ................................................................................ 7
1.1.4 Procesamiento de datos ............................................................ 7
1.2 Algoritmos y programas ..................................................... 8
1.3 Características de los algoritmos ........................................ 8
1.4 Pasos del desarrollo de un programa .................................. 9
1.4.1 Análisis del problema ................................................................. 9
1.4.2 Diseño del algoritmo .................................................................. 9
1.4.3 Codificación.............................................................................. 10
1.4.4 Implementación y depuración ................................................. 10
1.4.5 Pruebas .................................................................................... 12
1.4.5.1 Prueba de escritorio .................................................................... 12
1.4.5.2 Prueba manual de datos de muestra .......................................... 12
1.4.5.3 Prueba por un grupo selecto de usuarios potenciales................ 12
1.4.6 Documentación del programa ................................................. 14
1.4.6.1 Manual de usuario y manual del analista ................................... 14
1.4.7 Mantenimiento del programa ................................................. 15
1.5 La lógica como aspecto fundamental de la programación . 15
1.5.1 Argumentos ............................................................................. 16
1.5.2 Premisas y conclusión .............................................................. 16
1.6 Tipos de datos .................................................................. 18
1.6.1 Datos simples ........................................................................... 19
1.6.1.1 Enteros ........................................................................................ 19
1.6.1.2 Reales .......................................................................................... 19
1.6.1.3 Caracteres ................................................................................... 20
1.6.1.4 Cadenas ....................................................................................... 20
1.6.1.5 Datos lógicos ............................................................................... 21
1.7 Identificadores, constantes, variables y operadores ......... 21
1.7.1 Identificadores ......................................................................... 21
1.7.2 Constantes ............................................................................... 22
Geomática Programación para Topografía
Bibliografía................................................................... 191
Capítulo 1
Algoritmos, su
representación, y
programas
Objetivo general:
Objetivos específicos:
3
Programación para Topografía Geomática
Tabla de contenido
1. Algoritmos, su
representación, y
programas
Debe estar bien definido. Si se sigue un algoritmo más de una vez, los
resultados deben ser los mismos.
1.4.3 Codificación
1.4.5 Pruebas
Errores de ejecución
Errores de diseño
Errores de especificación
A los programadores a través del manual del analista para que recuerden
aspectos de la elaboración del programa o en caso que otras personas
puedan actualizarlo o modificarlo (darle mantenimiento) y no son
Es el paso final del desarrollo del software. Alrededor del 75% del costo
total del ciclo de vida de un programa se destina al mantenimiento. El
propósito del mantenimiento es garantizar que los programas en uso
estén libres de errores de operación y sean eficientes y efectivos.
1.5.1 Argumentos
Cuando el razonamiento se expresa con palabras, recibe el nombre de
"argumento". Un argumento es un grupo cualquiera de proposiciones o
enunciados que forman premisas y conclusiones. Este puede constar de
varias premisas pero de una sola conclusión.
Ejemplo No 1:
Expresiones como “por tanto”, “por lo cual”, “de ello se deduce”, sirven
para introducir la conclusión de un argumento, en tanto que “pues” y
“porque” se usan para introducir las premisas.
Ejemplo No 2:
Ejemplo No 3:
Todos los datos tienen un tipo asociado a ellos, que sirve para poder
conocer con qué tipo de información se va a trabajar.
Enteros
Reales
Simples Caracteres
Booleanos
Datos
Unidimensionales
Arreglos
Bidimensionales
Estructurados
Cadena de caracteres
Registros
1.6.1.1 Enteros
Es un subconjunto finito de los números, su característica principal es
que no tienen punto decimal, su rango depender del lenguaje en el que
se vaya a codificar el algoritmo. El rango depende de cuantos bits utilice
para codificar el número, normalmente 2 bytes, Para números positivos,
con 16 bits se pueden almacenar:
Ejemplo No 4:
1.6.1.2 Reales
Estos números siempre tienen un punto decimal y pueden ser positivos o
negativos. Un número real consiste de un número entero y una parte
decimal.
Ejemplo No 5:
1.6.1.3 Caracteres
Es un conjunto finito y ordenado de caracteres que el computador
reconoce. Un dato de este tipo contiene solo un carácter.
Ejemplo No 6:
1.6.1.4 Cadenas
Es una sucesión de caracteres que se encuentran delimitados por una
comilla (apóstrofe). La longitud de una cadena de caracteres es el
número de ellos comprendidos entre los separadores o delimitadores,
por lo general en todos los lenguajes de programación la máxima
longitud que puede tomar una cadena es de 255 caracteres.
Ejemplo No 7:
‘Topografía’
‘Ingeniería Geomática’
‘7-46-01-48’
1.7.1 Identificadores
1.7.2 Constantes
1.7.3 Variables
1.7.4 Operadores
+ Suma 12+7 19
** (Mayor) Potencia
Multiplicación,
*, /, mod, div división, módulo,
división entera
+, - Suma, resta
(Menor)
Ejemplo No 8:
a 10 / 2 7 384.8125 / 15 1
a 10 / 2 7 25.6541 1
a 10 / 2 18.6541 1
a 5 18.6541 1
a 93.2705 1
a 92.2705
Ejemplo No 9:
b 7 2 25 10div5 13 6
b 14 25 10div5 13 6
b 350 2 13 6
b 350 26 6
b 376 6
b 370
Ejemplo No 10:
A 10 B 4
( A 5 B 2 / 2) ( B 2div 2)
( A 5 100 / 2) ( B 2div 2)
( A 5 50) ( B 2div 2)
100 ( B 2div 2)
100 (16div 2)
100 4
Falso
(Mayor)
No No P No es cierto que P
P Q ̃P ̃Q PoQ P^Q
Y: para que el resultado sea verdadero, las dos condiciones deben ser
verdaderas.
Operadores Jerarquía
() (Mayor)
**
*, /, div, mod
No
O (Menor)
Tabla 1-6 Tabla de verdad jerarquía de todos los operadores (aritméticos, relacionales y lógicos)
1.7.5 Asignaciones
Ejemplo No 11:
Variables
I, TOPO, J : entero
DIR, INV : real
CAR : caracter
BAND : booleano
1. I0
2. I I+1
3. TOPO 0
4. J 5**2 div 3
5. CAR ‘a’
6. TOPO J div I
7. DIR TOPO/3
8. BAND (8>5) y (15<2**3)
9. INV TOPO*5/J**2
10. I I*3
11. DIR DIR/5
12. BAND BAND o (I=J)
13. I DIR
14. CAR J
1 0
2 1
3 0
4 8
5 a
6 8
7 2.66
8 Falso
9 0.625
10 3
11 0.532
12 Falso
13 Error
14 Error
Ejemplo No 12:
Pasos:
Tel D I D I D I
1.8.2.2 Entrada
Se utiliza para introducir datos de entrada. Expresa lectura.
1.8.2.3 Proceso
Representa cualquier serie de transferencia de datos u operaciones
aritméticas internas del computador. En su interior se expresan
asignaciones.
1.8.2.4 Decisión
Sirve para verificar el resultado de una expresión, en su interior se
almacena una condición, y dependiendo del resultado de evaluación de
la misma se sigue solo por uno de los caminos alternativos. Este símbolo
se utiliza en la estructura selectiva si entonces y en las estructuras
repetitivas repetir y mientras.
No
Si
Si No
1.8.2.7 Salida
Símbolo utilizado para representar la impresión de un resultado. Expresa
escritura.
1.8.2.8 Flujos
Son utilizadas para representar el progreso de los pasos en la secuencia;
la punta de la flecha indica la dirección del flujo del proceso.
1.8.2.9 Conector
Es un punto de referencia que indica donde debe continuar el diagrama
de flujo. Se utiliza para indicar un cambio en el flujo normal de datos
dentro de una misma página.
1.8.2.10 Conector
Es un punto de referencia que se usa como conexión entre páginas
diferentes.
1.8.2.11 Procedimiento
Este símbolo sustituye a todo un sub-programa. Para continuar con el
flujo normal del programa se debe resolver el sub-problema que se
enuncia en su interior.
Inicio
Fin
No se deben cruzar
3. Todas las líneas utilizadas para indicar la dirección del flujo del
diagrama deben estar conectadas. La conexión puede ser a un
símbolo que exprese lectura, proceso, decisión, conexión,
impresión o fin de diagrama.
Entrada/Salida
Proceso
Decisión
Transferencia
Final.
Ejemplo No 13:
Inicio
Magnitud angular
Magnitud No Imposible
Angular
<360º
Si
Posible
Fin
Ejemplo No 14:
Trabajo de campo
Medición ángulos,
distancias (campo)
No
Error
Angular
aceptable
Si
GP. No
aceptable
Si
Ajuste poligonal
Datos ajustados
Fin
Ejemplo No 15:
A,B,C
Si Si
A>B B>C A,B,C
No No
Si Si
A>C B,A,C A>C A,C,B
No No
Si C,A,B
B>C B,C,A
No
C,B,A
Fin
1.8.5 Seudocódigo
Ejemplo No 16:
/*
Cod: T-001
Nombre: area_triangulo
*/
inicio
area=(base*altura)/2
fin
Ejemplo No 17:
/*
Cod: T-002
Nombre: area_triangulo_heron
*/
variables
L1: numerico // lado 1
L2: numerico // lado 2
L3: numerico // lado 3
S: numerico // semiperimetro
area: numerico // area
inicio
cls()
area = sqrt(S*(S-L1)*(S-L2)*(S-L3))
fin
Ejemplo No 18:
/*
Cod: T-003
Nombre: distancia_entre_dos_puntos
*/
variables
N1: numerico // Norte punto 1
E1: numerico // Este punto 1
N2: numerico // Norte punto 2
E2: numerico // Este punto 2
d: numerico // distancia
inicio
cls()
d = sqrt(((E2-E1)^2)+((N2-N1)^2))
fin
Ejemplo No 19:
/*
Cod: T-004
Nombre: proyecciones
variables
angulo : numerico
grados : numerico
minutos : numerico
segundos : numerico
angulo_radianes: numerico
pm : numerico // proyeccion meridiana
pp : numerico // proyeccion paralela
dh : numerico // distancia horizontal
constantes
PI = 3.141592654
inicio
cls()
grados = int(angulo)
minutos = (int((angulo-int(angulo))*100))/60
segundos = ((angulo*100-(int(angulo*100)))*100)/3600
angulo_radianes = (grados+minutos+segundos)*PI/180
pm = dh*cos(angulo_radianes)
pp = dh*sin(angulo_radianes)
fin
A = 2 ; B = -2 ; C = 4
Variables
I, CONT, J : entero
POS1, POS2 : real
TEXT : caracter
BAND : booleano
1. I0
2. I I+4 mod 3
3. CONT 4
4. J 5**2 div 3
5. TEXT ‘topo’
6. POS1 J div I
7. POS2 J/3
8. CONT (84>5) o (15<2**3)
9. I POS2*5/J**2
10. I I*3
11. CONT POS1+POS2/5
12. BAND BAND o (I=J)
13. I CONT
14. TEXT J
Estructuras
algorítmicas de
selección
Objetivo general:
Evaluar una o más condiciones que permitan una serie de acciones que se deben
cumplir en el momento de tomar una decisión.
Objetivos específicos:
53
Programación para Topografía Geomática
Tabla de contenido
2. Estructuras
algorítmicas de
selección
2.1 Introducción
La especificación formal de algoritmos tiene utilidad cuando el algoritmo
requiere una descripción más complicada que una lista sencilla de
instrucciones. Este es el caso cuando existen un número de posibles
alternativas resultantes de la evaluación de una determinada condición
llamadas estructuras lógicas selectivas, esta toma de decisiones se basa
en la evaluación de una o más condiciones que señalarán el camino a
tomar. Hay situaciones en las que dicho camino se realiza en cascada; es
decir se toma una decisión, se marca el camino a seguir, se vuele a tomar
otra decisión y así sucesivamente, por este motivo para lograr la solución
de un problema se debe aplicar un árbol de decisión.
No
Condición
Si
Acción
Donde:
Ejemplo No 20:
/*
Cod: T-005
Nombre: azimut
variables
azimut: numerico
inicio
cls()
si (azimut<=360)
{
imprimir ("\n se encuentra en el rango permitido")
}
fin
Inicio
azimut
Azimut<360 No
Si
Se encuentra en el
rango permitido
Fin
Si No
Condición
Acción1 Acción2
Donde:
Ejemplo No 21:
/*
Cod: T-006
Nombre: azimut_2
*/
variables
azimut: numerico
inicio
cls()
si (azimut<=360)
{
imprimir ("\n se encuentra en el rango permitido")
sino
imprimir ("\n el valor se encuentra por fuera del
rango")
}
fin
Inicio
azimut
Si No
Azimut<360
Se encuentra en Se encuentra
el rango fuera del rango
permitido
Fin
Selector
Acción N+1
Donde:
Ejemplo No 22:
/*
Cod: T-007
Nombre: rumbo
*/
Variables
azimut: numerico
rumbo: numerico
opcion: numerico
inicio
cls()
eval
{
caso(opcion==1)
imprimir("\n Ingrese el valor del rumbo (NE): ")
leer (rumbo)
azimut=rumbo
imprimir("\n\n El valor del azimut es: ",azimut)
caso(opcion==2)
imprimir("\n Ingrese el valor del rumbo (SE): ")
leer (rumbo)
azimut=180-rumbo
imprimir("\n\n El valor del azimut es: ",azimut)
caso(opcion==3)
imprimir("\n Ingrese el valor del rumbo (SW): ")
leer (rumbo)
azimut=180+rumbo
imprimir("\n\n El valor del azimut es: ",azimut)
caso(opcion==4)
imprimir("\n Ingrese el valor del rumbo (NW): ")
leer (rumbo)
azimut=360-rumbo
imprimir("\n\n El valor del azimut es: ",azimut)
sino
imprimir("\n Opcion errada...")
}
Fin
Si No
Condicion1
No
Selector
Condicion5
Si
No Si No
Acción21 Acción 51
Condicion3 Condicion4
Si
.
.
.
Si condición1
entonces
Si selector1 igual
Valor1: Hacer acción21
Valor2:
Si condicion3 entonces
Hacer acción31
{ fin condicional si }
De otra forma:
Si condición4
entonces
Hacer acción41
sino
Hacer acción42
{ fin condicional si}
{ fin condicional si }
sino
si condición5 entonces
Hacer acción51
{ fin condicional si }
{ fin condicional si }
.
.
.
Ejemplo No 23:
Inicio
Num
Si No
Num=0
Nulo Si No
Num>0
Positivo Negativo
Fin
/*
Cod: T-008
Nombre: nulo_positivo_negativo
*/
inicio
cls()
si (num==0)
{
imprimir ("\n El número es cero")
sino
si (num>0)
{
imprimir ("\n El número es positivo")
sino
imprimir ("\n El número es negativo")
}
}
fin
Ejemplo No 24:
/*
Cod: T-009
Nombre: nulo_positivo_negativo_2
*/
variables
inicio
si(entero>0)
{
si(entero>=1 and entero<=9)
{
imprimir("\n El numero es positivo, y tiene una
cifra")
}
si (entero>=10 and entero<=99)
{
imprimir("\n El numero es positivo, y
tiene dos cifras")
}
}
si (entero<0)
{
si(entero>=-9 and entero<=-1)
{
imprimir("\n El numero es negativo y tiene una
cifra")
}
si (entero>=-99 and entero<=-10)
{
imprimir("\n El numero es negativo y
tiene dos cifras")
}
}
si(entero==0)
{
imprimir("\n El numero es cero")
}
fin
Ejemplo No 25:
Inicio
Si No
A=0
Nulo Si No
-1**A > 0
Par Impar
Fin
/*
Cod: T-010
Nombre: nulo_par_impar
variables
num: numerico
inicio
cls()
si (num==0)
{
imprimir ("\n El número es neutro")
sino
si ((-1)^num>0) // ... otra opción sería con
el módulo de la división: si
(num%2==0)
{
imprimir ("\n El número es par")
sino
imprimir ("\n El número es impar")
}
}
fin
Ejemplo No 26:
/*
Cod: T-011
Nombre: rumbo_distancia
constantes
PI: 3.14159265358979
variables
inicio
cls()
/* Entrada de coordenadas */
DH=sqrt((N2-N1)^2+(E2-E1)^2)
sino
si(E2-E1==0 and N2<N1)
{
imprimir("\n\n El rumbo es
Sur")
imprimir ("\n\n La distancia
horizontal es: ", DH)
terminar()
sino
si(N2-N1==0 and E2>E1)
{
imprimir("\n\n El Rumbo es
Este")
imprimir ("\n\n La distancia
horizontal es: ", DH)
terminar()
sino
si (N2-N1==0and E2<E1)
{
imprimir("\n\nEl rumbo
es Oeste")
imprimir ("\n\n La
distancia horizontal
es: ", DH)
terminar()
}
}
}
}
si (N2-N1>0)
{
imprimir("\n\n El rumbo de la línea es: ")
imprimir ("\r N ")
sino
imprimir ("\r S")
}
RBO = arctan((E2-E1)/(N2-N1))
grados=int(aux)
minutos=int((aux-grados)*60)
segundos=(((aux-grados)*60)-(int((aux-grados)*60)))*60
si (segundos-int(segundos)>=0.50)
{
segundos=int(segundos)+1
sino
segundos=int(segundos)
}
imprimir(grados,"\rº")
imprimir(minutos,"\r'")
imprimir(segundos,"\r''")
si (E2-E1>0)
{
imprimir ("\rE")
sino
imprimir ("\r W")
}
fin
Estructuras
algorítmicas de
repetición
Objetivo general:
Utilizar una estructura para hacer que una parte el código se repita un número finito
de veces ahorrando tiempo y líneas de código.
Objetivos específicos:
77
Programación para Topografía Geomática
Tabla de contenido
3. Estructuras
algorítmicas de
repetición
3.1 Introducción
El diseño de los computadores está hecho especialmente para aquellas
aplicaciones en las que una operación o conjunto de operaciones deben
repetirse muchas veces.
Los ciclos son estructuras de control que permiten ejecutar varias veces
una operación. Existen varios tipos de ciclos:
No
Condicion1
Si
Acción1
Ejemplo No 27:
/*
Cod: T-012
Nombre: mientras
*/
variables clave: cadena
geomatica: cadena
inicio
cls()
fin
Acción1
No
Condicion1
Si
Ejemplo No 28:
/*
Cod: T-013
Nombre: repetir
*/
variables
inicio
cls()
repetir
imprimir ("\n Entre el valor : ")
leer (num)
si (num==0)
{
cont=cont+1
}
i=i+1
hasta (i==n)
fin
Mientras Repetir
Las instrucciones del cuerpo del ciclo se Las instrucciones del cuerpo del ciclo
ejecutan en forma repetitiva si la se ejecutan si la condición es falsa
condición es verdadera
Las acciones del ciclo se pueden ejecutar Las acciones del ciclo se ejecutan por
cero o más veces lo menos una vez
Valor Inicial
Acción1
Incremento
No
Valor Final
Si
Esta estructura accionará el ciclo las veces que sea necesario, llevando
de manera automática un control sobre el número de iteraciones o
pasos a través del cuerpo del bucle.
Ejemplo No 29:
/*
Cod: T-014
Nombre: desde
*/
variables i: numerico
inicio
cls()
fin
Ejemplo No 30:
Análisis:
La serie se inicia en cero (0), luego sigue uno (1), y el siguiente término
será la suma de los dos anteriores.
0, 1, 0+1 = 0, 1, 1
Luego
0, 1, 1, 1+1 = 0, 1, 1, 2
Y así sucesivamente
0, 1, 1, 2, 2+1 = 0, 1, 1, 2, 3
/*
Cod: T-015
Nombre: Fibonacci
*/
variables
a: numerico
b: numerico
n: numerico // número de elementos de la serie
i: numerico // auxiliar del ciclo
fibo: numerico // almacena el nuevo valor de la serie
inicio
cls()
a=0
b=1
fibo=a+b
a=b
b=fibo
}
fin
1 1 1 1
1− + − +⋯±
2 3 4 𝑁
Estructuras de datos
Objetivo general:
Objetivos específicos:
93
Programación para Topografía Geomática
Tabla de contenido
4. Estructuras
de datos
4.1 Introducción
Todas las variables que se han considerado hasta ahora son de tipo
simple. Una variable de tipo simple consiste de una sola caja de memoria
y sólo puede contener un valor cada vez. Una variable de tipo
estructurado consiste en toda una colección de casillas de memoria. Los
tipos de datos estudiados: entero, real, caracter, son considerados como
datos de tipo simple, puesto que una variable que se define con alguno
de estos tipos sólo puede almacenar un valor a la vez, es decir, existe
una relación de uno a uno entre la variable y el número de elementos
(valores) que es capaz de almacenar. En cambio un dato de tipo
estructurado, como el arreglo, puede almacenar más de un elemento
(valor) a la vez, con la condición de que todos los elementos deben ser
del mismo tipo, es decir, que se puede tener un conjunto de datos
enteros, reales, etc.
4.3 Arreglos
Un arreglo es una colección de datos del mismo tipo, que se almacenan
en posiciones consecutivas de memoria y reciben un nombre común.
Para referirse a un determinado elemento de un arreglo se deberá
utilizar un índice, que especifique su posición relativa.
Homogénea: Todos los elementos del arreglo deben ser del mismo tipo.
Unidimensionales (vectores)
Bidimensionales (matrices)
Tridimensionales
4.3.1 Vectores
Los índices son los que permiten acceso a los componentes del arreglo
en forma individual, para hacer referencia a un componente de un
arreglo se necesitan el nombre del arreglo y el índice del elemento.
Con tipo se declara el tipo de dato para todos los elementos del arreglo.
El tipo de los elementos no tiene que ser necesariamente el mismo que
el de los índices.
Importante:
Lectura
Búsqueda
Modificación
Eliminación
4.4.1 Lectura
Ejemplo No 31
/*
Cod: T-016
variables
inicio
cls()
si (n<10)
{
desde i=1 hasta n paso 1 // ciclo que permite
leer el vector
{
imprimir ("\n Entre el elemento: ", i,": ")
leer (y)
a[i]=y
}
sino
imprimir ("\n No hay espacio para insertar
los elementos...")
}
imprimir("\t }")
fin
4.4.2 Búsqueda
Ejemplo No 32
Cod: T-016
variables
inicio
cls()
si (n<10)
{
desde i=1 hasta n paso 1 // ciclo que permite
leer el vector
{
imprimir ("\n Entre el elemento: ", i,": ")
leer (y)
a[i]=y
}
sino
imprimir ("\n No hay espacio para insertar
los elementos...")
}
imprimir("\t }")
fin
4.4.3 Modificación
inicio
Si No
n>=1
i=1
band =falso El vector se
encuentra vacío
No
i<=n
Band=falso
Si
Si A[i]=x No
y i=i+1
A[i]=y
Band=verdadero
No
Band=falso
Si
El elemento x
no está en el
vector
fin
/*
Cod: T-018
*/
variables
a:vector[10] numerico
i:numerico //variable de control del ciclo e índice del arreglo
n:numerico //almacena el número actual de elementos del arreglo
p:numerico //almacena el elemento en el vector
x:numerico //representa el elemento que se va a modificar
y:numerico //representa al elemento que se introduce y modifica
al elemento x
band: logico //cambia su valor a verdadero si encuentra el
elemento a modificar
inicio
cls()
si (n<10)
{
desde i=1 hasta n paso 1 // ciclo que permite
leer el vector
{
imprimir ("\n Entre el elemento: ", i,":")
leer (p)
a[i]=p
}
sino
i=1
si (n>=1)
{
imprimir ("\n Entre el elemento que se va a
modificar: ")
leer (x)
a[i]=y
band=TRUE
sino
i=i+1
}
}
si (band==FALSE)
{
imprimir("\n El
elemento no está en el
arreglo")
}
sino
imprimir ("\n El arreglo está vacío")
}
imprimir("\t ]")
fin
4.4.4 Eliminación
inicio
Si n>=1 No
i=1
El elemento x
band =falso
no está en el
vector
i<=n
No
Band=falso
Si
Si No
A[i]=x
k=i
K<=n No
Si
A[k]=a[k+1]
k = k+1
No
Band=falso
Si
El elemento x
no está en el
vector Figura 4-5 Diagrama de flujo
Eliminación
fin
/*
Cod: T-019
variables
a:vector[10] numerico
i:numerico // variable de control del ciclo e índice del arreglo
n:numerico // almacena el número actual de elementos del arreglo
x: numerico // almacena la variable que se ha de eliminar
y: numerico // indice que almacena el elemento cuando se lee el vector
k: numerico // variable de control del ciclo interno
band: logico // cambia su valor si encuentra el elemento a eliminar
inicio
cls()
si (n<10)
{
desde i=1 hasta n paso 1
{
imprimir ("\n\n Entre el elemento: ", i,": ")
leer (y)
a[i]=y
}
sino
imprimir ("\n No hay espacio para insertar
el elemento...")
}
si (n>=1)
{
imprimir ("\n Entre el elemento a eliminar: ")
leer (x)
i=1
band=FALSE
mientras(k<=n)
{
a[k]=a[k+1]
k=k+1
}
sino
i=i+1
}
}
si (band==FALSE)
{
imprimir ("\n El elemento ",x, " no está en
el arreglo...")
}
sino
imprimir ("\n El arreglo está vacío...")
}
imprimir("\t }")
fin
Ejemplo No 35
/*
Cod: T-020
*/
variables
inicio
cls()
si (n<=100)
{
sino
imprimir ("\n No hay espacio para insertar
las coordenadas...")
}
cls()
p2=(este[i]*norte[i+1])
acu2=acu2+p2
}
/* finaliza ciclo que hace el cálculo de los productos */
area = abs(acu1-acu2)/2
fin
4.5.1 Inserción
4.5.2 Búsqueda
inicio
Si No
n<=100
fin
Busca
i=1
No
i ≤ n and a[i]<x
Si
i=i+1
Si i>n or a[i]>x No
pos=-i pos=i
Fin módulo
Busca
Inserta
Si pos>0 No
El elemento ya n=n+1
existe pos=pos*(-1)
i=n
No
i≥(pos+1)
Si
a[i]=a[i-1]
i=i-1
a[pos]=x
Fin módulo
Inserta
Ejemplo No 36
/*
Cod: T-021
*/
variables
a:vector[10] numerico
i:numerico // variable de control del ciclo e índice del arreglo
n:numerico // almacena el número actual de elementos del arreglo
x: numerico // almacena el elemento en el nuevo vector
pos: numerico // determina la posición del elemento a buscar
y: numerico // indice que almacena el elemento cuando se lee el vector
inicio
cls()
si (n<10)
{
a[i]=y
}
sino
imprimir ("\n No hay espacio para insertar
el elemento...")
}
si (n<10)
{
/* inicia proceso que busca el nuevo elemento del vector */
i=1
si (i>n or a[i]>x)
{
pos=i*-1
sino
pos=i
}
sino
imprimir ("\n No hay espacio para insertar
el elemento...")
}
si (pos>0)
{
sino
n=n+1
pos=pos*-1
i=n
mientras (i>=(pos+1))
{
a[i]=a[i-1]
i=i-1
}
a[pos]=x
}
/* termina proceso que inserta el nuevo elemento del vector */
imprimir("\t }")
fin
4.5.3 Eliminación
inicio
Si No
n>0
Busca El vector se
encuentra vacío
Elimina
fin
Busca
i=1
No
i ≤ n and a[i]<x
Si
i=i+1
Si No
i>n or a[i]>x
pos=-i pos=i
Fin módulo
Busca
Elimina
Si No
pos ≤ 0
El elemento no n=n-1
existe
i=pos
I≤n No
Si
a[i]=a[i+1]
i=i+1
Fin módulo
elimina
Ejemplo No 37:
/*
Cod: T-022
*/
variables
a:vector[10] numerico
i:numerico // variable de control del ciclo e índice del arreglo
n:numerico // almacena el número actual de elementos del arreglo
x: numerico // almacena el elemento en el nuevo vector
pos: numerico // determina la posición del elemento a buscar
y: numerico // indice que almacena el elemento cuando se lee el vector
inicio
cls()
si (n<10)
{
imprimir ("\n importante....entre los elementos del
vector en forma ordenada...")
a[i]=y
}
sino
imprimir ("\n No hay espacio para insertar
el elemento...")
}
si (n<10)
{
/* inicia proceso que busca el nuevo elemento del vector */
leer (x)
i=1
si (i>n or a[i]>x)
{
pos=i*-1
sino
pos=i
}
sino
imprimir ("\n No hay espacio para insertar
el elemento...")
}
si (pos<=0)
{
imprimir("\n El elemento NO existe...")
sino
n=n-1
i=pos
mientras (i<=n)
{
a[i]=a[i+1]
i=i+1
}
}
imprimir("\t }")
fin
Las matrices son declaradas exactamente igual que los vectores, excepto
que se especifica más de una dimensión entre los corchetes:
4.6.2 Lectura
Cuando se introdujo la lectura en vectores se iban asignando valores a
cada uno de los componentes. Lo mismo sucede con los arreglos
bidimensionales, sin embargo como sus elementos deben referenciarse
con dos índices, se deben utilizar dos ciclos para lograr la lectura de
elementos consecutivos.
inicio
i=1
i≤4 No
Si
j=1
No
i≤3
Si
Elemento [i,j]
mat[i,j] = elemento
j = j+1
i = i+1
Fin
Ejemplo No 38:
/*
Cod: T-023
*/
constantes
MAX_FIL=4
MAX_COL=3
variables
mat:matriz[MAX_FIL,MAX_COL] numerico
i:numerico // variable de control del ciclo e índice de la matriz para
leer filas
j: numerico // variable de control del ciclo e índice de la matriz para
leer columnas
e: numerico // variable que almacena el elemento ingresado por el
usuario
inicio
cls()
i=1
mientras (i<=4)
{
j=1
mientras (j<=3)
{
imprimir ("\n Entre el elemento de la
posición ",i,",",j, ": ")
leer (e)
mat[i,j]=e
j=j+1
}
i=i+1
}
imprimir_matriz()
fin
subrutina imprimir_matriz()
variables
f, c : numerico
inicio
es decir, en vez del tamaño se coloca un asterisco para indicar que dicho
valor aún no se conoce.
leer (n)
dim (v, n)
inicio
leer (cant_fil, cant_col)
dim (M, cant_fil, cant_col)
inicio
leer (cant_fil)
dim (M, cant_fil)
Ejemplo No 39:
/*
Cod: T-024
*/
variables
inicio
cls()
f=1
c=1
sino
imprimir ("\n Entre el azimut de la línea ", i, "-
",1,": " )
}
leer (angulo)
angulo_rad()
mat[f,c]=angulo
si(i<= cant_fil-1)
{
imprimir("\n Entre la distancia de la línea ",i, "-
", i+1, ": ")
sino
imprimir ("\n Entre la distancia de la línea ", i,
"-",1,": " )
}
leer (dist)
mat[f,c+1]=dist
acu_per=acu_per+dist
pm=dist*cos(angulo_radianes)
mat[f,c+2]=pm
acu_pm=acu_pm+pm
pp=dist*sin(angulo_radianes)
mat[f,c+3]=pp
acu_pp=acu_pp+pp
f=f+1
}
c=5
desde f=1 hasta cant_fil paso 1
{
mat[f,c]=(acu_pm/acu_per)*mat[f,2] // cpm
mat[f,c+1]=(acu_pp/acu_per)*mat[f,2] // cpp
mat[f,c+2]=(mat[f,3]-mat[f,5]) // pmc
mat[f,c+3]=(mat[f,4]-mat[f,6]) // ppc
imprimir_matriz()
fin
/*****************************************************************/
subrutina angulo_rad()
variables
grados : numerico
minutos : numerico
segundos : numerico
constantes
PI = 3.141592654
inicio
grados = int(angulo)
minutos = (int((angulo-int(angulo))*100))/60
segundos = ((angulo*100-(int(angulo*100)))*100)/3600
angulo_radianes = (grados+minutos+segundos)*PI/180
fin
/*****************************************************************/
subrutina imprimir_matriz()
variables
f, c : numerico
inicio
cls()
fin
Subrutinas
Objetivo general:
Objetivos específicos:
139
Programación para Topografía Geomática
Tabla de contenido
5. Subrutinas
5.1 Introducción
Las subrutinas son un componente fundamental de programación: ellas
permiten modularizar un programa, es decir, que un programa este
compuesto de programas más pequeños, comprensibles y manejables.
Se puede conceptualizar como un subprograma, porque ella no solo
agrupa y da un nombre a un conjunto de sentencias lógicamente
relacionadas, sino que además puede tener sus propias variables y
constantes, permitiendo así reutilizar el código y evitar su repetición
dentro de un programa.
Para utilizar una función es necesario saber el tipo de dato que devuelve,
su identificador, y los parámetros que se deben proporcionar.
5.2 Identificadores
La mayoría de los programas tienen una estructura tipo árbol, el
programa principal es la raíz y de este penden muchas ramas
(procedimientos y funciones).
Ejemplo No 40:
/*
Cod: T-025
Nombre: subrutinas
*/
variables
n : numerico
Variable global
inicio
Programa
principal
n = 100
sub_1()
imprimir ("\n", n)
sub_2 ("GEOMATICA")
fin
/***************************/
subrutina sub_1()
Variable local
variables
inicio
n : numerico
inicio
/********************/
inicio
imprimir ("\n", n)
fin
5.3 Funciones
Una función es una subrutina que produce un valor que puede ser
utilizado por la parte del programa que la llamó. El valor producido y
retornado por la función puede ser de cualquier tipo.
Ejemplo No 41:
/*
Cod: T-026
Nombre: subrutinas_2
variables
num1: numerico
num2: numerico
res: numerico
inicio
cls()
res = suma(num1,num2)
/*************************************************/
variables
resultado: numerico
inicio
resultado=a+b
retorna(resultado)
fin
Ejemplo No 42:
/*
Cod: T-027
Nombre: subrutinas_3
*/
variables
angulo : numerico
pm : numerico // proyeccion meridiana
constantes
PI = 3.141592654
inicio
cls()
pm = dh*cos(ang_rad(angulo))
pp = dh*sin(ang_rad(angulo))
fin
/********************************************************************/
variables
grados : numerico
minutos : numerico
segundos : numerico
angulo_radianes : numerico
inicio
grados = int(angulo)
minutos = (int((angulo-int(angulo))*100))/60
segundos = ((angulo*100-(int(angulo*100)))*100)/3600
angulo_radianes = (grados+minutos+segundos)*PI/180
retorna(angulo_radianes)
fin
5.3 Procedimientos
Un procedimiento es una subrutina que no retorna un valor y que realiza
una tarea específica.
Ejemplo No 43:
/*
Cod: T-028
*/
inicio
imprimir_mensaje()
fin
subrutina imprimir_mensaje()
inicio
fin
Ejemplo No 44:
/*
Cod: T-029
*/
variables
inicio
cls()
to=25
correccion_temperatura(l,to)
fin
/***********************************************/
variables
ct: numerico
inicio
to=20
ct=0.000012*l*(t-to)
fin
Introducción a Visual
Basic
Objetivo general:
Objetivos específicos:
155
Programación para Topografía Geomática
Tabla de contenido
6. Introducción a
Visual Basic
6.1 Introducción
La palabra “Visual” hace referencia al método que se utiliza para crear la
interfaz gráfica de usuario, la cual se puede crear arrastrando objetos
con el ratón dentro del formulario.
6.2 Variables
Son aquellos valores que pueden o no cambiar al resolver un problema.
Las variables poseen su nombre y su valor, los nombres de las variables
El nombre de una variable tiene que comenzar con una letra, puede
tener hasta 255 caracteres, y debe ser único dentro de su ámbito.
Entero
Integer % -32.768 a 32.767
(2 bytes)
Coma flotante.
Precisión
Single ! -3,40E+38 a 3,40E+38
simple
(4 bytes)
Coma flotante.
Precisión
Double # -1.79E+308 a 1.79E+308
doble
(8 bytes)
Cadena de
caracteres de
String longitud fija Ninguno 64K
(1 byte por
caracter)
Cadena de
caracteres de
longitud
String variable $ Hasta 231
(10 bytes + 1
byte por
caracter)
Bolean
Boolean Ninguno True o False
(2 bytes)
6.3 Constantes
Son aquellos valores que no cambian al resolver un problema. Las
constantes numéricas pueden contener: Dígitos, un signo, punto decimal
y E (Notación exponencial, E significa potencia 1 de 10).
Para nombrar una constante, se usan las mismas reglas que se aplican
para nombrar variables. Ejemplo:
6.4 Operadores
En Visual Basic se soportan distintos tipos de operadores, en la tabla que
a continuación los muestra se encuentran de mayor a menor prioridad
respecto a cómo se evalúan cuando varios de ellos intervienen en la
misma expresión. Los operadores que se encuentran en el mismo
renglón poseen igual prioridad. Las operaciones que se incluyen entre
paréntesis se evalúan primero, ejecutándose primero los paréntesis más
internos.
Exponenciación ^
Cambio de signo -
Multiplicación y división *, /
Aritmético
División entera \
Resto de división entera Mod
Suma y resta +, -
Igual =
Diferente <>
Menor <
Relacional
Mayor >
Menor o igual <=
Mayor o igual >=
Negación Not
Y lógica And
Lógico O lógica Or
Or exclusiva Xor
Equivalencia Eqv
En Visual Basic se usa la función InputBox con la que visualiza una caja
de diálogo, con un mensaje que indica al usuario el tipo de información
que se debe ingresar; devuelve como resultado un valor de tipo String
que corresponde con el dato entrado por el usuario.
Sintaxis:
Ejemplo No 45:
Formulario
Ventana
Propiedades
Figura 6-2
Caja de herramientas
Ventana de posición del formulario
'entrada de datos
edad = InputBox("Edad:", , 0)
direccion = InputBox("Direccion:")
programa_academico = InputBox("Programa Academico:")
semestre = InputBox("Semestre:")
fecha_nacimiento = InputBox("Fecha nacimiento:", , #16/04/1977#)
'salida de datos
End Sub
Es necesario saber que se deben declarar los tipos de dato que se van a
utilizar en la aplicación, esto se hace en la parte inicial del código
(realmente se pueden declarar en cualquier parte del código, pero se
recomienda que sea en el encabezamiento del mismo) en el ejemplo
anterior son:
Ejemplo No 46:
Con esta aplicación se busca que cuando el usuario entre los valores de
ángulo horario y azimut siguiente, y pulse el botón calcular, se actualice
el contenido de las otras cajas con los resultados correspondientes. Por
lo tanto el evento es pulsar el botón calcular, que en Visual Basic se
llama Click.
Una vez colocados los controles y ajustados sus tamaños (los de los
controles) se ajusta el tamaño del formulario. La interfaz obtenida debe
ser como la siguiente:
Para hacer que una aplicación responda a los eventos que sobre ella se
producen, se debe unir a cada uno de sus objetos el código que sea
necesario como respuesta al evento ocurrido. Por esta razón se debe
escribir un procedimiento asociado con el botón Calcular y conducido
por el evento Click que actualice automáticamente el contenido de la
caja de texto Valor en Centímetros.
'declaracion de variables
Dim centimetros As Double
Dim pulgadas As Double
'Procesos
pulgadas = pul.Text
centimetros = pulgadas * 2.54
'salida
centi.Text = Format(centimetros, "0.00")
End Sub
Ejemplo No 47:
Fórmula:
𝑎+𝑏+𝑐
𝑠=
2
𝑎𝑟𝑒𝑎 = √𝑠 ∙ (𝑠 − 𝑎) ∙ (𝑠 − 𝑏) ∙ (𝑠 − 𝑐)
Dim a As Single
Dim b As Single
Dim c As Single
Dim area As Single
Dim s As Single
'procesos
a = lado_a.Text
b = Lado_b.Text
c = Lado_c.Text
s = (a + b + c) / 2
'salida
End Sub
Ejemplo No 48:
'declaracion de variables
Dim c As Single
Dim r As Single
Dim d As Single
Dim x As Single
'procesos
c = corte.Text
r = relleno.Text
d = distancia.Text
x = ((c / (c + r))) * d
'salida
End Sub
Ejemplo No 49:
'declaracion de variables
'procesos
norte1 = n1.Text
este1 = e1.Text
norte2 = n2.Text
este2 = e2.Text
'salida
End Sub
If … Then
If … Then … Else
Select Case
For … Next
While … Wend
Do … Loop
6.6.1 Sentencia If
Condición No Acción 2
Si
Acción 1
Ejemplo No 50:
End If
If condición 1 Then
Sentencias 1
[ElseIf condicion 2 Then
sentencias 2]
[Else
sentencias n]
End If
No No
Condición 1 Condición 2
Sentencias n
Si Si
Sentencias 1 Sentencias 2
Ejemplo No 51:
Realizar una rutina que arroje como resultado el menor de tres números
a,b,c.
If a < b Then
If a < c
menor = a
Else
menor = c
End If
Print menor
Ejemplo No 52:
'Delcaración de variables
Dim opcion As String
Case 1:
MsgBox ("1. Ajuste por el Método de la Brújula")
Case 2:
MsgBox ("2. Ajuste por el Método del Tránsito")
Case 3:
MsgBox ("3. Ajuste por el Método de Crandall")
Case 4:
MsgBox ("4. Ajuste por el Método XY")
Case 5:
MsgBox ("5. Ajuste por el Método de Mínimos Cuadrados")
Case Else:
MsgBox ("Su opción es herrada...")
End Select
End Sub
Ejemplo No 53:
Dim i As Integer
For i = 0 To 10 Step 2
MsgBox (i)
Next
End Sub
Ejemplo No 54:
Dim a As Integer
a = 0
While (a < 10)
a = a + 1
a = InputBox("Entre un valor entero", "", a, 200, 100)
Wend
End Sub
Forma1:
Do[{While¦Until} condición]
[sentencias]
[Exit Do]
[sentencias]
Loop
Forma2:
Do
[sentencias]
[Exit Do]
[sentencias]
Loop[{While¦Until} condición]
Ejemplo No 54:
Dim i As Integer
Dim suma As Integer
i=1
Print suma
End Sub
Private Sub Form_Click()
Dim i As Integer
Dim suma As Integer
i=99
Do
suma=suma+1
i=i-2
Loop Until (i < 99)
Print suma
End Sub
Bibliografía
189
Programación para Topografía Geomática
Bibliografía
Davis, Raymond E., Foote, Francis S. and Kelly Joe W.. Surveying: Theory
and Practice. 5th. Ed.. McGraw-Hill Co.. New York 1966. 1096 págs.
Sitios web:
www.leica.com
www.topcon.com
www.sokkia.com
www.profsurv.com
www.elagrimensor.com.ar