Documente Academic
Documente Profesional
Documente Cultură
Notas de clase
Programacin
para
Topografa
Gonzalo Jimnez C.
Julin Garzn B.
Facultad de Ingeniera
Programa de Topografa
Armenia, 2007
2007
Notas de clase
Programacin
para
Topografa
Primer borrador
Topografa
Este documento es una gua de enseanza bsica para aquellos estudiantes
de Topografa que se inician en el asombroso mundo de la programacin y
que desean tener una visin 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 seudocdigo, lo cual es de datos, y
una caracterstica 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 programacin.
Tabla de contenido Geomtica
Tabla de contenido
1. Algoritmos, su representacin, y programas .................... 7
1.1 Conceptos bsicos de programacin ................................... 7
1.1.1 Programar .................................................................................. 7
1.1.2 Dato............................................................................................ 7
1.1.3 Informacin ................................................................................ 7
1.1.4 Procesamiento de datos ............................................................ 7
1.2 Algoritmos y programas ..................................................... 8
1.3 Caractersticas de los algoritmos ........................................ 8
1.4 Pasos del desarrollo de un programa .................................. 9
1.4.1 Anlisis del problema ................................................................. 9
1.4.2 Diseo del algoritmo .................................................................. 9
1.4.3 Codificacin.............................................................................. 10
1.4.4 Implementacin y depuracin ................................................. 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 Documentacin 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 lgica como aspecto fundamental de la programacin . 15
1.5.1 Argumentos ............................................................................. 16
1.5.2 Premisas y conclusin .............................................................. 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 lgicos ............................................................................... 21
1.7 Identificadores, constantes, variables y operadores ......... 21
1.7.1 Identificadores ......................................................................... 21
1.7.2 Constantes ............................................................................... 22
Geomtica Programacin para Topografa
Bibliografa................................................................... 191
Captulo 1
Algoritmos, su
representacin, y
programas
Objetivo general:
Objetivos especficos:
3
Programacin para Topografa Geomtica
Tabla de contenido
1. Algoritmos, su
representacin, y
programas
1.4.3 Codificacin
1.4.5 Pruebas
Errores de ejecucin
Errores de diseo
Errores de especificacin
A los programadores a travs del manual del analista para que recuerden
aspectos de la elaboracin 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
propsito del mantenimiento es garantizar que los programas en uso
estn libres de errores de operacin 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 conclusin.
Ejemplo No 1:
Ejemplo No 2:
Ejemplo No 3:
Todos los datos tienen un tipo asociado a ellos, que sirve para poder
conocer con qu tipo de informacin 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 nmeros, su caracterstica 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 nmero, normalmente 2 bytes, Para nmeros positivos,
con 16 bits se pueden almacenar:
Ejemplo No 4:
1.6.1.2 Reales
Estos nmeros siempre tienen un punto decimal y pueden ser positivos o
negativos. Un nmero real consiste de un nmero 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 carcter.
Ejemplo No 6:
1.6.1.4 Cadenas
Es una sucesin de caracteres que se encuentran delimitados por una
comilla (apstrofe). La longitud de una cadena de caracteres es el
nmero de ellos comprendidos entre los separadores o delimitadores,
por lo general en todos los lenguajes de programacin la mxima
longitud que puede tomar una cadena es de 255 caracteres.
Ejemplo No 7:
Topografa
Ingeniera Geomtica
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
Multiplicacin,
*, /, mod, div divisin, mdulo,
divisin entera
+, - Suma, resta
(Menor)
Ejemplo No 8:
a 10 / 2 7 68 15 33 45 2 / 16 / 3 / 15 1
a 10 / 2 7 68 15 33 2025 / 16 / 3 / 15 1
a 10 / 2 7 68 15 33 126.5625 / 3 / 15 1
a 10 / 2 7 68 495 126.5625 / 3 / 15 1
a 10 / 2 7 68 495 42.1875 / 15 1
a 10 / 2 7 427 42.1875 / 15 1
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 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 Jerarqua
() (Mayor)
**
*, /, div, mod
No
O (Menor)
Tabla 1-6 Tabla de verdad jerarqua de todos los operadores (aritmticos, relacionales y lgicos)
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
2 00 270 (90)
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
aritmticas internas del computador. En su interior se expresan
asignaciones.
1.8.2.4 Decisin
Sirve para verificar el resultado de una expresin, en su interior se
almacena una condicin, y dependiendo del resultado de evaluacin de
la misma se sigue solo por uno de los caminos alternativos. Este smbolo
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
Smbolo utilizado para representar la impresin 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 direccin 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 pgina.
1.8.2.10 Conector
Es un punto de referencia que se usa como conexin entre pginas
diferentes.
1.8.2.11 Procedimiento
Este smbolo 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 lneas utilizadas para indicar la direccin del flujo del
diagrama deben estar conectadas. La conexin puede ser a un
smbolo que exprese lectura, proceso, decisin, conexin,
impresin o fin de diagrama.
Entrada/Salida
Proceso
Decisin
Transferencia
Final.
Ejemplo No 13:
Inicio
Magnitud angular
Magnitud No Imposible
Angular
<360
Si
Posible
Fin
Ejemplo No 14:
Trabajo de campo
Medicin 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 Seudocdigo
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
( A A 5 B 21 / 2) ( B (12div 2) 4 C mod 7)
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
algortmicas de
seleccin
Objetivo general:
Evaluar una o ms condiciones que permitan una serie de acciones que se deben
cumplir en el momento de tomar una decisin.
Objetivos especficos:
53
Programacin para Topografa Geomtica
Tabla de contenido
2. Estructuras
algortmicas de
seleccin
2.1 Introduccin
La especificacin formal de algoritmos tiene utilidad cuando el algoritmo
requiere una descripcin ms complicada que una lista sencilla de
instrucciones. Este es el caso cuando existen un nmero de posibles
alternativas resultantes de la evaluacin de una determinada condicin
llamadas estructuras lgicas selectivas, esta toma de decisiones se basa
en la evaluacin de una o ms condiciones que sealarn el camino a
tomar. Hay situaciones en las que dicho camino se realiza en cascada; es
decir se toma una decisin, se marca el camino a seguir, se vuele a tomar
otra decisin y as sucesivamente, por este motivo para lograr la solucin
de un problema se debe aplicar un rbol de decisin.
No
Condicin
Si
Accin
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
Condicin
Accin1 Accin2
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
Accin 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
Accin21 Accin 51
Condicion3 Condicion4
Si
.
.
.
Si condicin1
entonces
Si selector1 igual
Valor1: Hacer accin21
Valor2:
Si condicion3 entonces
Hacer accin31
{ fin condicional si }
De otra forma:
Si condicin4
entonces
Hacer accin41
sino
Hacer accin42
{ fin condicional si}
{ fin condicional si }
sino
si condicin5 entonces
Hacer accin51
{ 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 nmero es cero")
sino
si (num>0)
{
imprimir ("\n El nmero es positivo")
sino
imprimir ("\n El nmero 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 nmero es neutro")
sino
si ((-1)^num>0) // ... otra opcin sera con
el mdulo de la divisin: si
(num%2==0)
{
imprimir ("\n El nmero es par")
sino
imprimir ("\n El nmero 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 lnea 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
algortmicas de
repeticin
Objetivo general:
Utilizar una estructura para hacer que una parte el cdigo se repita un nmero finito
de veces ahorrando tiempo y lneas de cdigo.
Objetivos especficos:
77
Programacin para Topografa Geomtica
Tabla de contenido
3. Estructuras
algortmicas de
repeticin
3.1 Introduccin
El diseo de los computadores est hecho especialmente para aquellas
aplicaciones en las que una operacin o conjunto de operaciones deben
repetirse muchas veces.
Los ciclos son estructuras de control que permiten ejecutar varias veces
una operacin. Existen varios tipos de ciclos:
No
Condicion1
Si
Accin1
Ejemplo No 27:
/*
Cod: T-012
Nombre: mientras
*/
variables clave: cadena
geomatica: cadena
inicio
cls()
fin
Accin1
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 condicin es falsa
condicin es verdadera
Las acciones del ciclo se pueden ejecutar Las acciones del ciclo se ejecutan por
cero o ms veces lo menos una vez
Valor Inicial
Accin1
Incremento
No
Valor Final
Si
Esta estructura accionar el ciclo las veces que sea necesario, llevando
de manera automtica un control sobre el nmero de iteraciones o
pasos a travs del cuerpo del bucle.
Ejemplo No 29:
/*
Cod: T-014
Nombre: desde
*/
variables i: numerico
inicio
cls()
fin
Ejemplo No 30:
Anlisis:
La serie se inicia en cero (0), luego sigue uno (1), y el siguiente trmino
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 // nmero 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 especficos:
93
Programacin para Topografa Geomtica
Tabla de contenido
4. Estructuras
de datos
4.1 Introduccin
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 slo puede contener un valor cada vez. Una variable de tipo
estructurado consiste en toda una coleccin 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 slo puede almacenar un valor a la vez, es decir, existe
una relacin de uno a uno entre la variable y el nmero de elementos
(valores) que es capaz de almacenar. En cambio un dato de tipo
estructurado, como el arreglo, puede almacenar ms de un elemento
(valor) a la vez, con la condicin 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 coleccin de datos del mismo tipo, que se almacenan
en posiciones consecutivas de memoria y reciben un nombre comn.
Para referirse a un determinado elemento de un arreglo se deber
utilizar un ndice, que especifique su posicin relativa.
Homognea: 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
Bsqueda
Modificacin
Eliminacin
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 Bsqueda
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 Modificacin
inicio
Si No
n>=1
i=1
band =falso El vector se
encuentra vaco
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 nmero 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 vaco")
}
imprimir("\t ]")
fin
4.4.4 Eliminacin
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
Eliminacin
fin
/*
Cod: T-019
variables
a:vector[10] numerico
i:numerico // variable de control del ciclo e ndice del arreglo
n:numerico // almacena el nmero 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 vaco...")
}
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 clculo de los productos */
area = abs(acu1-acu2)/2
fin
4.5.1 Insercin
4.5.2 Bsqueda
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 mdulo
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 mdulo
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 nmero actual de elementos del arreglo
x: numerico // almacena el elemento en el nuevo vector
pos: numerico // determina la posicin 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 Eliminacin
inicio
Si No
n>0
Busca El vector se
encuentra vaco
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 mdulo
Busca
Elimina
Si No
pos 0
El elemento no n=n-1
existe
i=pos
In No
Si
a[i]=a[i+1]
i=i+1
Fin mdulo
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 nmero actual de elementos del arreglo
x: numerico // almacena el elemento en el nuevo vector
pos: numerico // determina la posicin 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 ms de una dimensin 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
i4 No
Si
j=1
No
i3
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
posicin ",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 tamao se coloca un asterisco para indicar que dicho
valor an 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 lnea ", i, "-
",1,": " )
}
leer (angulo)
angulo_rad()
mat[f,c]=angulo
si(i<= cant_fil-1)
{
imprimir("\n Entre la distancia de la lnea ",i, "-
", i+1, ": ")
sino
imprimir ("\n Entre la distancia de la lnea ", 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 especficos:
139
Programacin para Topografa Geomtica
Tabla de contenido
5. Subrutinas
5.1 Introduccin
Las subrutinas son un componente fundamental de programacin: ellas
permiten modularizar un programa, es decir, que un programa este
compuesto de programas ms pequeos, comprensibles y manejables.
Se puede conceptualizar como un subprograma, porque ella no solo
agrupa y da un nombre a un conjunto de sentencias lgicamente
relacionadas, sino que adems puede tener sus propias variables y
constantes, permitiendo as reutilizar el cdigo y evitar su repeticin
dentro de un programa.
Para utilizar una funcin es necesario saber el tipo de dato que devuelve,
su identificador, y los parmetros que se deben proporcionar.
5.2 Identificadores
La mayora de los programas tienen una estructura tipo rbol, el
programa principal es la raz 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 funcin 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 funcin 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 especfica.
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
Introduccin a Visual
Basic
Objetivo general:
Objetivos especficos:
155
Programacin para Topografa Geomtica
Tabla de contenido
6. Introduccin a
Visual Basic
6.1 Introduccin
La palabra Visual hace referencia al mtodo que se utiliza para crear la
interfaz grfica de usuario, la cual se puede crear arrastrando objetos
con el ratn 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.
Precisin
Single ! -3,40E+38 a 3,40E+38
simple
(4 bytes)
Coma flotante.
Precisin
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 numricas pueden contener: Dgitos, un signo, punto decimal
y E (Notacin 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 continuacin los muestra se encuentran de mayor a menor prioridad
respecto a cmo se evalan cuando varios de ellos intervienen en la
misma expresin. Los operadores que se encuentran en el mismo
rengln poseen igual prioridad. Las operaciones que se incluyen entre
parntesis se evalan primero, ejecutndose primero los parntesis ms
internos.
Exponenciacin ^
Cambio de signo -
Multiplicacin y divisin *, /
Aritmtico
Divisin entera \
Resto de divisin entera Mod
Suma y resta +, -
Igual =
Diferente <>
Menor <
Relacional
Mayor >
Menor o igual <=
Mayor o igual >=
Negacin Not
Y lgica And
Lgico O lgica Or
Or exclusiva Xor
Equivalencia Eqv
En Visual Basic se usa la funcin InputBox con la que visualiza una caja
de dilogo, con un mensaje que indica al usuario el tipo de informacin
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 posicin 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 aplicacin, esto se hace en la parte inicial del cdigo
(realmente se pueden declarar en cualquier parte del cdigo, pero se
recomienda que sea en el encabezamiento del mismo) en el ejemplo
anterior son:
Ejemplo No 46:
Con esta aplicacin se busca que cuando el usuario entre los valores de
ngulo horario y azimut siguiente, y pulse el botn calcular, se actualice
el contenido de las otras cajas con los resultados correspondientes. Por
lo tanto el evento es pulsar el botn calcular, que en Visual Basic se
llama Click.
Una vez colocados los controles y ajustados sus tamaos (los de los
controles) se ajusta el tamao del formulario. La interfaz obtenida debe
ser como la siguiente:
Para hacer que una aplicacin responda a los eventos que sobre ella se
producen, se debe unir a cada uno de sus objetos el cdigo que sea
necesario como respuesta al evento ocurrido. Por esta razn se debe
escribir un procedimiento asociado con el botn Calcular y conducido
por el evento Click que actualice automticamente el contenido de la
caja de texto Valor en Centmetros.
'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:
Frmula:
++
=
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
Condicin No Accin 2
Si
Accin 1
Ejemplo No 50:
End If
If condicin 1 Then
Sentencias 1
[ElseIf condicion 2 Then
sentencias 2]
[Else
sentencias n]
End If
No No
Condicin 1 Condicin 2
Sentencias n
Si Si
Sentencias 1 Sentencias 2
Ejemplo No 51:
Realizar una rutina que arroje como resultado el menor de tres nmeros
a,b,c.
If a < b Then
If a < c
menor = a
Else
menor = c
End If
Print menor
Ejemplo No 52:
'Delcaracin de variables
Dim opcion As String
Case 1:
MsgBox ("1. Ajuste por el Mtodo de la Brjula")
Case 2:
MsgBox ("2. Ajuste por el Mtodo del Trnsito")
Case 3:
MsgBox ("3. Ajuste por el Mtodo de Crandall")
Case 4:
MsgBox ("4. Ajuste por el Mtodo XY")
Case 5:
MsgBox ("5. Ajuste por el Mtodo de Mnimos Cuadrados")
Case Else:
MsgBox ("Su opcin 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[{WhileUntil} condicin]
[sentencias]
[Exit Do]
[sentencias]
Loop
Forma2:
Do
[sentencias]
[Exit Do]
[sentencias]
Loop[{WhileUntil} condicin]
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
Bibliografa
189
Programacin para Topografa Geomtica
Bibliografa
Davis, Raymond E., Foote, Francis S. and Kelly Joe W.. Surveying: Theory
and Practice. 5th. Ed.. McGraw-Hill Co.. New York 1966. 1096 pgs.
Sitios web:
www.leica.com
www.topcon.com
www.sokkia.com
www.profsurv.com
www.elagrimensor.com.ar