Escolar Documentos
Profissional Documentos
Cultura Documentos
del Quindo
Facultad de Ingeniera
Programa de Topografa
Armenia 2004
Con Aplicaciones en Topografa
Gonzalo Jimnez C.
Profesor Programa de Topografa
Universidad del Quindo
CONTENIDO
1. Generalidades..1
2. Estructura Secuencial....11
3. Funciones .....23
4. Estructuras de Decisiones..33
5. Estructuras de Ciclos.....43
6. Estructura de Datos........53
Bibliografa61
Gonzalo Jimnez Cleves
Profesor Universidad del Quindo
Facultad de Ingeniera
Topgrafo Universidad del Quindo
Especialista en Computacin para la Docencia Universidad del Quindo - Universidad Antonio Nario
Magster en Ingeniera de Sistemas Universidad del Valle
gjcleves@uniquindio.edu.co
GENERALIDADES
1. C++
Fue desarrollado por Kernighan y Richie en 1972, en la mitad de los ochenta Bjarne
Stroustrup basado en C y Simula crea el C++, el primer borrador del estndar C++ se
publico en 1995. En la actualidad, el C++ es un lenguaje verstil, potente y general. Su
xito entre los programadores profesionales le ha llevado a ocupar el primer puesto como
herramienta de desarrollo de aplicaciones.
Pasos para la solucin de un problema: Para resolver es problema es necesario tener en cuenta lo
siguiente
1. Describir el problema
2. Analizar el problema
5. Codificar el programa
7. Documentar el programa
Programa Fuente: Programa escrito en lenguaje fuente
Numrico: Smbolo empleado para representar un dgito decimal y con los cuales se puede efectuar
operaciones aritmticas.
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 deben comenzar con una letra y pueden constar de
un nmero de letras y dgitos. El C++ tiene reservadas varias palabras que no pueden ser usadas
como nombres de variables.
Variables
Numricas
Cadena de Caracteres
Variables arreglo
Numrico De Cadena de
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).
OPERADORES
Aritmticos
Suma + Resta
-
Multiplicacin *
Divisin /
Divisin entera (Resto) %
Relacinales
Igual a ==
Diferente !=
Menor que <
Mayor que >
Menor igual <=
Mayor igual >=
Lgicos
Negacin !
Y Lgica &&
O Lgica
ARITMTICOS
LOGICOS
En ocasiones se necesita expresar una condicin que implica ms de dos cantidades o una relacin ms
compleja que la simple igualdad u orden.
Ejemplo
Condicin Valor
(2>1) && (3>2) Verdad
(2>1) && (3=2) Falso
(2<1) && (2=2) Falso
(2=3) && (3<1) Falso
(2=2) || (3>4) Verdad
(3>1) || (4=2) Verdad
(2=1) || (3>2) Verdad
(2=7) || (1>2) Verdad
Prioridad Operador
1 ()
2 Funciones
3 */
4 %
5 +-
Ejemplo
A = 3*(7+1)+(3/(2+4*2+(1/3)+2)-1)
= 3*(7+1)+(3/(2+4*2+.33+2)-1)
= 3*(7+1)+(3/12.33-1)
= 3*8+(3/12.33-1)
= 3*8+(0.24-1)
= 3*8+(-0.76)
= 3*8-0.76
= 23.24
Ejemplo
EXPRESIN DE ASIGNACIN
Son las expresiones que asigna a las variables o a las constantes, un valor
determinado. Este valor puede ser una constante, una variable o el resultado de un
clculo. Su forma general es:
Ejemplo
W = 12;
D = K * S;
R = PI /180 * A;
S = (A+B+C)/2;
P = E /D;
Incremento (++)
x = x + 5;
a=a+1;
a++;
Decremento (--)
Es equivalente a ++ pero en vez de incrementar disminuye el valor de la variable. Equivale a restar uno a la
variable.
a = a - 1;
En forma abreviada
a--;
Problemas
IT _______________________
F2 _______________________
Paso _______________________
3*5 _______________________
%D _______________________
**a _______________________
Z _______________________
7F _______________________
/Q _______________________
GR _______________________
5>2 _______________________
(2=2) || (3>1) _______________________
4=3 _______________________
(1=1) && (3<>5) _______________________
7 ! =7 _______________________
4 !=1 _______________________
4>= 6 _______________________
(7>2) || (3=1) _______________________
1< 5 _______________________
(3=3) && (4>7) _______________________
a b c
S
2
D KSSen2
E Vm Vv
V TV
So
r
CR
D
hcr
100
A=BxH/2
N 4 = 180
a-+
* = +2/-6
1\ 3 = R / T&
SEN(Y) = ( w/E) * -1
N = E *2 -( 3+4) - 2
Como empezar
Una vez este en Windows seleccione el siguiente icono y con el Mouse de le doble clic.
Turbo C++.lnk
Y presione OK.
Para ejecutar un programa seleccione el icono , aparecer un pantalla con los resultados
o la lista de los errores.
Para llamar un archivo existente seleccione el icono , escoja el archivo y presione OK.
Inmediatamente se carga el programa.
ESTRUCTURA
SECUENCIAL
2. ESTRUCTURA SECUENCIAL
Esta se caracteriza porque cada accin se ejecuta en orden estricto una detrs de otra. El
flujo del programa coincide con el orden en que se encuentre escrito las instrucciones.
Laestructurageneraldeunprogramaeslasiguiente
Declaraciones globales
- Funciones
- Variables
Func1()
{
Func2()
{
Es importante tener en cuenta que La directiva #include le indica al compilador que lea el
archivo fuente que viene a continuacin de ella y su contenido lo inserte en la posicin
donde se encuentre dicha directiva. A continuacin se presenta una lista de las directivas
mas conocidas con una breve descripcin
Directiva Descripcin
STADIO.H Rutinas de flujos para C
STDLIB.H Rutinas de biblioteca estndar
MATH.H Funciones matemticas
STRING.H Funciones de cadena
IOSTREAM.H Rutinas de flujos para C++
IO.H Tratamiento de archivos
CONIO.H E/S a travs del teclado y el puerto
CTYPE.H Funciones de caracteres
TIME.H Unidades de fecha y hora
Variables
Una variable es un objeto cuyo valor puede cambiar durante el desarrollo del programa.
Ejemplo:
int gp;
Constantes
Algunas veces necesario utilizar un valor que no se modifica a lo largo de un programa. En C++, una
constante se declara escribiendo const delante de la palabra reservada en la declaracin.
Ejemplo:
C++ ofrece tambin otro mtodo para especificar constantes: la directiva del compilador #define, el formato
de esta es, seguida de dos cadenas de caracteres separados por espacios en blanco.
Ejemplo:
#define PI 3.141592654
Son algunas palabras cuyo significado est predeterminado y no se puede utilizar con otro fin.
El uso de cin nos da la posibilidad de que el usuario introduzca datos en vez de mostrarlos.
No nos permite mostrar texto en la pantalla.
Ejemplo:
Programa
#include <iostream.h>
float num;
main()
{
cin >> num;
}
Pantalla
2.2.2. Scanf
#include <stdio.h>
float prueba;
main()
{
scanf( %f , &prueba);
}
Esta sentencia proporciona un mecanismo para visualizar datos en la pantalla. Estos datos
pueden ser constantes, variables o expresiones.
Ejemplo:
#include <iostream.h>
main()
{
cout << "Yo estudio en la Universidad del Quindo";
}
Veamos el mismo programa en dos reglones usando \n para una nueva lnea
#include <iostream.h>
main()
{
cout << "Yo estudio en la\nUniversidad del Quindio";
}
Yo estudio en la
Universidad del Quindo
2.3.2. Printf
Es muy similar a cout con ms parmetros. Sirve para presentar informacin por pantalla.
Para especificar la cantidad de enteros y decimales en la salida de datos, %8.2f significa
que son ocho espacios con dos decimales de una variable float.
#include <stdio.h>
main()
{
float prueba = 814.159265;
printf("Resultado: %8.2f \n",prueba);
}
Ejemplo
Resultado: 814.16
2.4.1. Clrscr
Esta funcin borra la pantalla y adems sita el cursor en la posicin (1, 1), en la esquina superior izquierda.
Ejemplo
#include <stdio.h>
#include <conio.h>
main()
{
clrscr();
printf("Topografia \n");
printf("Armenia");
printf(" (Quindio)");
}
Topografia
Armenia (Quindio)
2.4.2. Gotoxy
Coloca el cursor en la posicin (x,y), primero se pone la columna (x) y luego la fila (y). La esquina superior
izquierda es la posicin (1, 1).
Ejemplo
#include <stdio.h>
#include <conio.h>
main()
{
gotoxy( 15, 10 ); printf( "Colombia" );
gotoxy( 25, 10 ); printf( "Armenia" );
}
Colombia Armenia
2.5. Comentarios ( /* */ o // )
Hay dos formas de hacer comentarios una empieza con /* y termina con los caracteres */
/* COMENTARIO */
La otra se inicia con // las dos barras marcan el comienzo y el fin de la lnea el final.
// COMENTARIO
PROBLEMAS RESUELTOS
Programa
// ESCALA
// GJC
// 2004-07-04
#include <stdio.h>
float T, D, P;
main()
{
// ENTRADA DE DATOS
printf ("TERRENO:");
scanf ("%f",&T);
printf ("DENOMINADOR:");
scanf ("%f",&D);
// CALCULO
P = T/D;
// RESULTADOS
printf("PAPEL: %10.2f\n",P);
Programa
#include <stdio.h>
float C, P;
main()
{
// ENTRADA DE DATOS
printf ("PULGADAS:");
scanf ("%f",&P);
// CALCULO
C = P*2.54;
// RESULTADOS
printf("CENTIMETROS %10.2f\n",C);
}
3. Dados los tres lados de un triangulo. Hallar su rea.
Programa
// LADOS DE UN TRIANGULO
// GJC
// 2004-07-05
#include <stdio.h>
#include <math.h>
float A,B,C,S,R;
main()
{
// ENTRADA DE DATOS
printf("Lados de un triangulo -> Area\n");
printf ("\n");
printf ("A:");
scanf ("%f",&A);
printf ("B:");
scanf ("%f",&B);
printf ("C:");
scanf ("%f",&C);
// CALCULOS
S=(A+B+C)/2;
R=sqrt(S*(S*(S-A)*(S-B)*(S-C)));
// RESULTADOS
printf("AREA: %10.2f\n",R);
}
Programa
#include <stdio.h>
#include <math.h>
float A,B,C,D,E;
main()
{
// ENTRADA DE DATOS
printf("Distancia por Coordenadas\n");
printf ("\nX1:");
scanf ("%f",&A);
printf ("X2:");
scanf ("%f",&B);
printf ("X3:");
scanf ("%f",&C);
printf ("X4:");
scanf ("%f",&D);
// CALCULOS
E=sqrt(pow((C-A),2)+pow((D-B),2));
// RESULTADOS
printf ("\n");
printf("DISTANCIA: %10.2f m\n",E);
5. Calcular el punto de ceros, a partir de la altura de corte, lleno y la distancia entre estas.
Programa
// PUNTO DE CEROS
// GJC
// 2004-07-05
#include <stdio.h>
#include <math.h>
float C,D,R,X;
main()
{
// ENTRADA DE DATOS
printf("PUNTO DE CEROS\n");
printf ("\nAltura de corte :");
scanf ("%f",&C);
printf ("\nAltura de lleno :");
scanf ("%f",&R);
printf ("\nDistancia :");
scanf ("%f",&D);
// CALCULOS
X=(C/(C+R))*D;
// RESULTADOS
printf("\nDistancia de ceros : %10.2f m\n",X);
}
PROBLEMAS PROPUESTOS
1. Escriba un programa que calcule el error por tensin en una medicin realizada con cinta.
D Ctg
2
3. Escriba un programa que calcule la nota definitiva sabiendo que los porcentajes son: 20%,
20%,20%,10%,30%
5. Escriba un programa que calcule el valor del rumbo dado un azimut en el tercer cuadrante.
6. Dado la distancia geomtrica y la altura (diferencia de nivel). Calculo por le mtodo exacto y
aproximado la distancia horizontal.
#include <stdio.h>
float A,B,C,D,F,G,L,K,P,X,Y;
main(
{
// ENTRADA DE DATOS
// RESULTADOS
printf("\nX: %10.2f \n",X);
printf("\nY: %10.2f \n",Y);
FUNCIONES
3.1. Generalidades
Una funcin sirve para realizar tareas concretas y simplificar el programa. Nos sirve para
evitar tener que escribir el mismo cdigo varias veces. Pueden ser ejecutadas cuantas veces
sea necesario.
Las funciones son de una gran utilidad en los programas. Nos ayudan a que sean ms legibles y ms cortos.
Con ellos estructuramos mejor los programas.
Sin embargo nosotros tambin podemos definir nuestras propias funciones. Pocas veces se ve un programa un
poco complejo que no use funciones. Una de ellas, que usamos siempre, es la funcin main.
cuerpo de la funcin;
return 0;
}
El tipo_de_variable: Cuando una funcin se ejecuta y termina debe devolver un valor. Este valor puede ser
cualquiera de los tipos de variables que hemos visto anteriormente en Tipos de datos (int, char, float, double)
o un tipo de dato definido por nosotros (esto lo veremos ms adelante). El valor que devuelve la funcin suele
ser el resultado de las operaciones que se realizan en la funcin, o si han tenido xito o no.
Tambin podemos usar el tipo void. Este nos permite que podamos devolver cualquier tipo de variable o
ninguna.
Definicin de variables: Dentro de la funcin podemos definir variables que slo tendrn validez dentro de la
propia funcin. Si declaramos una variable en una funcin no podemos usarla en otra.
Return: Antes hemos indicado que la funcin devuelve un valor. La sentencia return se usa para esto. El dato
que se pone despus de return es el dato que se devuelve. Puede ser una constante o una variable. Debe ser
del mismo tipo que tipo_de_variable.
return(expresin)
return;
Argumentos: Estos son variables que se pasan como datos a una funcin. Deben ir separados por una coma.
Cada variable debe ir con su tipo. En los ejemplos a continuacin se llama a la funcin desde main, as que
tenemos que definirlas antes que main.
Ejemplo
// EJEMPLO DE FUNCION
// GJC
// 2004-07-06
#include <iostream.h>
#include <stdio.h>
// funcion 1
void funcion1(void)
{
cout<<"Hola\n";
return;
}
// funcion 2
void funcion2(void)
{
cout<<"Como\n";
return;
}
//Funcion 3
void funcion3(void)
{
cout<<"Estas\n";
return;
}
main()
{
// En un orden
funcion1();
funcion2();
funcion3();
printf("\n");
// En otro orden
funcion2();
funcion3();
funcion1();
}
Hola
Como
Estas
Como
Estas
Hola
Ejemplo
Tomemos el programa resulto numero cuatro del capitulo anterior y convirtmoslo con el
uso de funciones.
float A,B,C,D,E;
// ENTRADA DE DATOS
void entrada(void)
{
printf("Distancia por Coordenadas\n");
printf ("\nX1:");
scanf ("%f",&A);
printf ("X2:");
scanf ("%f",&B);
printf ("X3:");
scanf ("%f",&C);
printf ("X4:");
scanf ("%f",&D);
return;
}
// CALCULOS
void calculos(void)
{
E=sqrt(pow((C-A),2)+pow((D-B),2));
return;
}
// RESULTADOS
void resultados(void)
{
printf ("\n");
printf("DISTANCIA: %10.2f m\n",E);
return;
}
main()
{
entrada();
calculos();
resultados();
}
Funciones Descripcin
abs() Devuelve el valor absoluto de un argumento de
tipo entero
acos(),acosl() Arco Coseno
asin(), asinl() Arco Seno
atan(),atanl() Arco tangente
atan2(),atan2l() Arco tangente de dos nmeros
ceil(), ceill() El mayor valor entero
cos(), cosl() Coseno
cosh(),Coshl() Coseno hiperblico
exp(), exp.() Valor exponencial
fabs(), fabsl() Valor absoluto
floor() floorl() Valor mas pequeo
fmod(), fmodl() Modulo ( resto)
frexp(), frexpl() Descompone el numero en la mantisa y el
exponente
hypot(), hypotl() Hipotenusa
labs() Devuelve el valor absoluto de u argumento de
tipo long (entero largo)
ldexp(), ldexpl() x por 2 elevado a la potencia exp.
log(), logl() Logaritmo natural
Log10(), log10l() Logaritmo en base 10
modf(), modf1() Mantisa y exponente
pow(),powl() x elevado a y
pow10(),pow10l() 10 elevado a la potencia de x
sin(), sinl() Seno
sinh(), sinhl() Seno hiperblico
tan(), tanl() Tangente
tanh(), tanhl() Tangente hiperblica
Ejemplo
// FUNCIONES TRIGONOMETRICAS
// GJC
// 2004-07-06
#include <stdio.h>
#include <math.h>
#define PI 3.1415624
float A,B,C,D,R;
main()
{
// ENTRADA DE DATOS
printf("Funciones Trigonometricas\n\n");
printf ("Escriba un angulo en grados:");
scanf ("%f",&A);
// CALCULOS
R = PI/180*A;
B= sin(R);
C= cos(R);
D= tan(R);
// RESULTADOS
printf("seno : %10.2f\n",B);
printf("Coseno : %10.2f\n",C);
printf("Tangente: %10.2f\n",D);
}
PROBLEMAS RESUELTOS
Programa
#include <iostream.h>
#include <stdio.h>
// funcion
void funcion(void)
{
cout<<"Planimetria\n\n";
return;
}
main()
{
funcion();
funcion();
funcion();
funcion();
}
// AREA DE UN CIRCULO
// GJC
// 2004-07-10
#include <iostream.h>
#include <stdio.h>
#include <math.h>
#define PI 3.141592654
float A,R;
// ENTRADA DE DATOS
void entrada(void)
{
printf("Areade un circulo\n");
printf ("\nRadio :");
scanf ("%f",&R);
return;
}
// CALCULOS
void calculos(void)
{
A=PI*pow(R,2);
return;
}
// RESULTADOS
void resultados(void)
{
printf ("\n");
printf("Area : %10.2f m\n",A);
return;
}
main()
{
entrada();
calculos();
resultados();
}
Programa
#include <stdio.h>
#include <math.h>
#define PI 3.14152654
float A,B,C,R,G,M;
main()
{
// ENTRADA DE DATOS
printf("Funciones Seno - Coseno\n\n");
printf ("Escriba un angulo en grados:");
scanf ("%f",&G);
printf("minutos :");
scanf ("%f",&M);
// CALCULOS
A= G+M/60;
R= A*PI/180;
B= sin(R);
C= cos(R);
// RESULTADOS
printf("Seno : %10.8f\n",B);
printf("Coseno : %10.8f\n",C);
}
// Grados Decimales
// GJC
// 2004-07-06
#include <stdio.h>
float A,G,M,S;
main()
{
// ENTRADA DE DATOS
printf("Angulo en decimales\n\n");
printf ("Grados :");
scanf ("%f",&G);
printf("Minutos :");
scanf ("%f",&M);
printf("Segundos :");
scanf ("%f",&S);
// CALCULOS
A= G+M/60+S/3600;
// RESULTADOS
printf("Grados decimales : %10.8f\n",A);
}
// CALCULO DE PM Y PP
// GJC
// 2004-7-12
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>
#define PI 3.141592654
// DECLARACION DE VARIABLES
float AR,DH,X,Y,G,M,S,A;
void angulor(void)
{
// ENTRADAS
gotoxy(10,7);
cout<<"ENTRE EL VALOR DEL ANGULO GG.MMSS:";
cin>>A;
// PROCESOS
G = int(A);
M = (int((A-int(A))*100))/60;
S = (A*100-(int(A*100)))/36;
AR= (G+M+S) * PI/180.0;
}
main()
{
gotoxy(10,5);
cout<<"ENTRE EL VALOR DEL LA DISTANCIA :";
cin>>DH;
angulor();
X= DH*cos(AR);
Y= DH*sin(AR);
gotoxy(10,12);
printf("PM : %10.2f\n",X);
gotoxy(10,14);
printf("PP : %10.2f\n",Y);
}
PROBLEMAS PROPUESTOS
4.1. Generalidades
EJEMPLO
// OPERADOR CONDCIONAL
// GJC
// 2004-07-12
#include <stdio.h>
main()
{
int a;
int b;
Introduzca un nmero: 10
b toma el valor: 4
4.1.2. Sentencia if
La palabra if significa si (condicional), pero supongo que esto ya lo sabas. Su formato es el siguiente:
if ( condicin )
{
Instrucciones a ejecutar
}
EJEMPLO
// EJEMPLO DE IF
// GJC
// 2004-07-12
#include <stdio.h>
main()
{
int num;
Introduzca un nmero: 11
El nmero es MAYOR QUE 10
Esta sentencia permite realizar un bifurcacin, ejecutando una parte u otra del programa
segn cumpla o no cierta condicin. La forma general es la siguiente:
if ( condicin )
{
bloque que se ejecuta si se cumple la condicin;
}
else
{
bloque que se ejecuta si no se cumple la condicin;
}
EJEMPLO
#include <stdio.h>
main()
{
int a;
int b;
printf( "Introduzca un nmero " );
scanf( "%i", &a );
if ( a<10 )
{
b = 2;
}
else
{
b = 4;
}
printf ( "'b' toma el valor: %i\n", b );
}
Introduzca un nmero: 10
b toma el valor: 4
Introduzca un nmero: 5
b toma el valor: 2
Esta sentencia permite realizar una ramificacin mltiple, ejecutando una entre varias
partes del programa segn se cumpla entre n condiciones. La forma general es la siguiente:
if ( condicin 1 )
{
bloque que se ejecuta si se cumple la condicin 1;
}
else if (condicin 2)
{
bloque que se ejecuta si se cumple la condicin 2;
}
else if (condicin 3)
{
bloque que se ejecuta si se cumple la condicin 3;
}
else if ()
{
bloque que se ejecuta si se cumple la condicin n;
}
PROGRAMA
main()
{
int a;
printf( "Introduzca un nmero: " );
scanf( "%i", &a );
if ( a<10 )
{
printf ( "El nmero introducido era menor de 10.\n" );
}
else if ( a>10 && a<50 )
{
printf ( "El nmero est entre 10 y 50 \n" );
}
else if ( a>50 )
{
printf( "El nmero es mayor que 50\n" );
}
printf( "Fin del programa\n" );
}
Introduzca un nmero:20
El nmero est entre 10 y 50
Fin del programa
Estas sentencias son una estructura de control que permite la seleccin de un conjunto de acciones a partir de
una lista de diferentes opciones. La instruccin if permite solo dos alternativas, mientras switch permite ms
de dos.Su forma general es:
switch ( variable )
{
case opcin 1:
Cdigo a ejecutar si la variable tiene el valor de la opcin 1;
break;
case opcin 2:
Cdigo a ejecutar si la variable tiene el valor de la opcin 2;
break;
default:
Cdigo que se ejecuta si la variable tiene
un valor distinto a los anteriores
break;
}
EJEMPLO
// EJEMPLO DE switch
// GJC
// 2004-07-12
#include <stdio.h>
main()
{
int num;
printf( "Introduzca un nmero: " );
scanf( "%i", &num );
switch( num )
{
case 1:
printf( "Es un 1\n" );
break;
case 2:
printf( "Es un 2\n" );
break;
case 3:
printf( "Es un 3\n" );
break;
default:
printf( "No es ni 1, ni 2, ni 3\n" );
}
}
Introduzca un nmero: 2
Es un 2
Otra ejecucin
Introduzca un nmero: 8
No es ni 1, ni 2, ni 3
PROBLEMAS RESUELTOS
PROGRAMA
// Nota
// GJC
// 2004-07-12
#include <stdio.h>
float N;
main()
{
// Entrada de Datos
printf( "Introduzca la nota: " );
scanf( "%f", &N );
// Resultados
if ( N >=3 )
{
printf( "Gano" );
}
else
{
printf( "Perdio" );
}
}
PROGRAMA
// CALCULO DE PM Y PP
// GJC & JGB
// 2004-7-12
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>
#define PI 3.141592654
// DECLARACION DE VARIABLES
float A,G,M,S,AR,DH,DO,HS,HI;
void angulor(void)
{
// ENTRADAS
cout<<"VALOR DEL ANGULO GG.MMSS:";
cin>>A;
// PROCESOS
G = int(A);
M = (int((A-int(A))*100))/60;
S = (A*100-(int(A*100)))/36;
AR= (G+M+S) * PI/180.0;
}
main()
{
cout<<"DISTANCIA OBLICUA :";
cin>>DO;
if ( DO <= 0)
{
cout<<"HS :";
cin>>HS;
cout<<"HI :";
cin>>HI;
S = fabs(HS-HI);
}
angulor();
DH = DO * sin(AR);
printf("\nDH : %10.2f\n",DH);
3. Escriba un programa que calcule el rumbo y la distancia a partir de dos puntos con
coordenadas.
PROGRAMA
// DECLARACION DE VARIABLES
float N,E,M,MM,F,P,W,G,MI,S,D,V;
main()
{
// ENTRADA
printf ("Coordenadas\n");
printf ("\nN1:");
scanf ("%f",&N);
printf ("E1:");
scanf ("%f",&E);
printf ("\n");
printf ("N2:");
scanf ("%f",&M);
printf ("E2:");
scanf ("%f",&F);
printf ("\n");
printf ("Rumbo : ");
if ( N-M >0 )
{
printf( "N" );
}
else
{
printf( "S" );
}
P=fabs((E-F)/(N-M));
V=atan(P);
W=V*180/PI;
G=int(W);
MM=(W-G)*60;
MI=int(MM);
S=int((MM-MI)*60+.5);
printf("%3.0f",W);
printf ("");
printf("%2.0f",MI);
printf ("");
printf("%2.0f",S);
printf ("");
if ( E-F >0 )
{
printf( "E" );
}
else
{
printf( "W" );
}
D=sqrt(pow((N-M),2)+pow((E-F),2));
printf("\nDH : %10.2f\n",D);
}
PROGRAMA
#include <iostream.h>
#include <stdio.h>
float a,g,m,mm,s,r,ar;
int c;
void salida(void)
{
g=int(r);
mm=(r-g)*60;
m=int(mm);
s=int((mm-m)*60+.5);
printf("\nAzimut:");
printf("%3.0f",g);
printf ("");
printf("%2.0f",m);
printf ("");
printf("%2.0f",s);
printf ("");
}
main()
{
printf ("\n Cuadrante 1:NE 2: SE 3:SW 4:NW :");
scanf ("%i",&c);
printf ("\n Rumbo :");
scanf ("%f",&a);
g = int(a);
m = int((a-g)*100);
s = a*100-(int(a*100));
ar= (g+m/60+s/36);
switch( c )
{
case 1:
r=ar;
salida();
break;
case 2:
r= 180-ar;
salida();
break;
case 3:
r=180+ar;
salida();
break;
case 4:
r=360-ar;
salida();
break;
default:
printf ("\n Intente de nuevo");
}
}
PROBLEMAS PROPUESTOS
4. Se desea disear un programa que escriba los valores de los das de la semana en
funcin del valor de una variable del da introducido por teclado.
5. Modifique programa para convertir rumbos a azimutes para que convierte los
rumbos Norte, Este, Oeste y Sur
ESTRUCTURAS
DE CICLOS
5.1. Generalidades
A la hora de adelantarse en los conocimientos de programacin hay que disponerse a conocer las estructuras de
ciclos. Este es uno de los aspectos ms importantes de la programacin.
En condiciones normales, las sentencias se van ejecutando ordenadamente, y una sola vez cada una de ellas, hasta
llegar al final del programa. Sin embargo, en muchas ocasiones es necesario que algunas sentencias se ejecuten
repetidamente en determinado nmero de veces, constituyendo lo que se denomina Bucle
Este tipo de sentencias denominados iterativas, ciclos repetitivas, se ejecutan bajo el control de una condicin
impuesta, cuyo cumplimiento o no determina su repeticin.
En algunas ocasiones un bucle no se termina nunca porque nunca se cumple la condicin. Un bucle que nunca
termina se denomina un bucle infinito o sin fin. Los bucles sin fin no intencionados son perjudiciales para la
programacin y se deben evitar siempre.
While
Do While
For
5.2. While
While quiere decir mientras. Aqu se ejecuta el bloque de instrucciones mientras se cumpla la condicin impuesta
en while.
EJEMPLO
// EJEMPLO while
// GJC
// 2004-7-18
#include <stdio.h>
main()
{
int c= 0;
while ( c<10 )
{
c++;
printf( "Ya voy por el %i, parar en el 10 \n", c );
}
}
Este programa imprime en pantalla los valores del 1 al 10. Cuando i=10 ya no se cumple la condicin. Una cosa
importante, si hubisemos cambiado el orden de las instrucciones a ejecutar:
PROGRAMA
// EJEMPLO while
// GJC
// 2004-7-18
#include <stdio.h>
main()
{
int c= 0;
while ( c<10 )
{
printf( "Ya voy por el %i, parar antes del 10 \n", c);
c++;
}
}
En esta ocasin se imprimen los valores del 0 al 9. Cuidado con esto, que a veces produce errores difciles de
encontrar.
5.3. Do While
La sentencia do while es una estructura de control de bucles en la que se realizan las sentencias del interior del
bucle mientras que se cumpla una condicin, es decir, la condicin sea verdadera.
El formato del bucle do-while es:
do
{
Instrucciones a ejecutar
} while ( condicin );
La diferencia entre while y do-while es que en este ltimo, la condicin va despus del conjunto de instrucciones a
ejecutar. De esta forma, esas instrucciones se ejecutan al menos una vez.
PROGRAMA
// EJEMPLO while
// GJC
// 2004-7-18
#include <stdio.h>
main()
{
int c= 1;
do
{
printf( "Ya voy por el %i, parar antes del 10 \n", c);
c++;
}
while ( c<10 );
}
5.4. For
Ejecuta el bucle encerrado entre ambas instrucciones tantas veces como sea necesario; hasta que la variable inicial
alcance el valor final, partiendo del valor inicial establecido y en incrementos sucesivos.
Si el valor inicial de la variable es menor que el valor final, los incrementos deben ser positivos ya que en caso
contrario la secuencia de instrucciones no se ejecutara. De igual modo si el valor inicial es mayor que el valor final,
el incremento debe ser en este caso negativo, es decir, decremento. Al incremento o decremento se le suele
denominar paso.
En este caso asignamos un valor inicial a la variable i . Ese valor es cero. Esa es la parte de dar valores iniciales.
Luego tenemos <100.
Esa es la parte condiciones. En ella ponemos la condicin es que i sea menor que 100, de modo que el bucle se
ejecutar mientras i sea menor que 100. Es decir, mientras se cumpla la condicin. Luego tenemos la parte de
incrementos, donde indicamos cunto se incrementa la variable.
Como vemos, el for va delante del grupo de instrucciones a ejecutar, de manera que si la condicin es falsa, esas
instrucciones no se ejecutan ni una sola vez.
Cuidado: No se debe poner un ";" justo despus de la sentencia for, pues entonces sera un bucle vaco y las
instrucciones siguientes slo se ejecutaran una vez.
EJEMPL0:
// EJEMPLO for
// GJC
// 2004-7-18
#include <stdio.h>
void main()
{
int i;
for ( i=0 ; i<100 ; i++ ); // Cuidado con este punto y coma
{
printf( "Topografia\n" );
}
}
Topografia
Tambin puede suceder que quieras ejecutar un cierto nmero de veces una sola instruccin (como sucede en
nuestro ejemplo). Entonces no necesitas las llaves "{}":
// EJEMPLO for
// GJC
// 2004-7-18
#include <stdio.h>
void main()
{
int i;
for ( i=0 ; i<10 ; i++ )
{
printf( "Topografia\n" );
}
}
o tambin:
// EJEMPLO for
// GJC
// 2004-7-18
#include <stdio.h>
void main()
{
int i;
for ( i=0 ; i<10 ; i++ )
printf( "Topografia\n" );
}
Topografia
Topografia
Topografia
Topografia
Topografia
Topografia
Topografa
Topografa
Topografa
Topografa
Sin embargo, es mejor poner las llaves aunque slo haya una instruccin; a veces al aadir una segunda instruccin
ms tarde se te olvidan las comillas y no te das cuenta. Parece sencillo, pero muchas veces, cuando programas, son
estos los pequeos fallos los que te vuelven loco.
En otros lenguajes, como Basic, la sentencia for es muy rgida. En cambio en C++ es muy flexible. Se puede omitir
cualquiera de las secciones (inicializacin, condiciones o incrementos). Tambin se pueden poner ms de una
variable a inicializar, ms de una condicin y ms de un incremento. Por ejemplo, el siguiente programa sera
perfectamente correcto:
EJEMPLO:
// EJEMPLO for
// GJC
// 2004-7-18
#include <stdio.h>
main()
{
int i, j;
PROBLEMAS RESUELTOS
// Numeros Naturales
// GJC
// 2004-07-18
#include <iostream.h>
#include <stdio.h>
int s, i;
main()
{
s=0;
i=0;
while(i<10)
{
i++;
s=s+i;
}
printf("Suma : %i ",s);
}
2. Escriba un programa para obtener la suma de los nmeros pares hasta 1000 inclusive.
// Numeros Naturales
// GJC
// 2004-07-18
#include <iostream.h>
#include <stdio.h>
int s,n;
main()
{
s=2;
n=4;
do
{
s=s+n;
n=n+2;
}
while(n<1000);
printf("Suma : %i",n);
}
3. Calcular el promedio de cinco notas (20% cada una) de N estudiantes
PROGRAMA
// NOTAS
// GJC
// 2004-07-18
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
int i,n;
float a,b,c,d,e,f;
main()
{
printf("NUMERO DE ESTUDIANTES:");
scanf ("%i",&n);
for ( i=0; i<n; i++)
{
printf ("\nNota 1:");
scanf ("%f",&a);
printf ("\nNota 2:");
scanf ("%f",&b);
printf ("\nNota 3:");
scanf ("%f",&c);
printf ("\nNota 4:");
scanf ("%f",&d);
printf ("\nNota 5:");
scanf ("%f",&e);
f=(a+b+c+d+e)/5;
printf( "\nDefinitiva %3.2f", f );
}
}
4. Escriba un programa que calcule las proyecciones y coordenadas de un polgono abierto, sin ningn control a
partir de azimutes y distancias horizontales.
PROGRAMA
// Poligonal abierta
// GJC
// 2004-7-18
#include <iostream.h>
#include <stdio.h>
#include <math.h>
#define pi 3.141592654
float a,g,m,s,ar,x,y;
float n,e,q,b,c,d,u;
int ne,i,j,r,z;
void angulo(void)
{
g = int(a);
m = int((a-g)*100);
s = a*100-(int(a*100));
ar= (g+m/60+s/36)*pi/180;
}
main()
{
printf ("\n POLIGONO ABIERTO");
printf ("\n Numero de estaciones :");
scanf ("%i",&ne);
printf ("\n Coordenadas iniciales");
printf ("\n Norte:");
scanf ("%f",&n);
printf ("\n Este :");
scanf ("%f",&e);
for (j=0; j<ne; j++)
{
printf ("\n Est %i",j+1);
printf ("\n # DE RADIACIONES:");
scanf ("%i",&r);
if (r>0)
{
for (i=0;i<r;i++)
{
z++;
printf ("\n Rad %i",z);
printf ("\n Azimut:");
scanf ("%f",&a);
printf ("\n DH :");
scanf ("%f",&b);
angulo();
c=ar;
x=b*cos(c);
y=b*sin(c);
q=n+x;
u=e+y;
printf( "\nPM: %5.2f", x);
printf( "\nPP: %5.2f", y);
printf( "\nN : %5.2f", q);
printf( "\nE : %5.2f", u);
printf( "\n_________________");
}
}
printf ("\n Azimut:");
scanf ("%f",&a);
printf ("\n DH :");
scanf ("%f",&d);
angulo();
c=ar;
x=d*cos(c);
y=d*sin(c);
n=n+x;
e=e+y;
printf( "\nPM: %5.2f", x);
printf( "\nPP: %5.2f", y);
printf( "\nN : %5.2f", n);
printf( "\nE : %5.2f", e);
printf( "\n_________________");
}
printf( "\nfin");
}
PROGRAMA
// Grado de Precision
// GJC
// 2004-7-18
#include <iostream.h>
#include <stdio.h>
#include <math.h>
#define pi 3.141592654
float a,g,m,s,ar,x,y,f;
float c,d,p,gp;
int ne,j;
void angulo(void)
{
g = int(a);
m = int((a-g)*100);
s = a*100-(int(a*100));
ar= (g+m/60+s/36)*pi/180;
}
main()
{
printf ("\n Grado de Precision ");
printf("\n_____________________");
printf ("\n Numero de estaciones :");
scanf ("%i",&ne);
for (j=0; j<ne; j++)
{
printf ("\n Est %i",j+1);
}
f=sqrt(pow(x,2)+pow(y,2));
gp=p/f;
printf( "\nPerimetro: %8.2f", p);
printf( "\nEc : %8.2f", f);
printf( "\nGP = 1/ %8.2f", gp);
printf( "\n_____________________");
}
PROBLEMASPROPUESTOS
2. Escriba un programa que calcule los azimutes de una poligonal a partir del azimut de la lnea 1-2 y todos
sus ngulos horarios.
3. Modifique el programa de grado de precisin para que trabaje con ngulos por deflexiones.
4. Escriba un programa que realice un ajuste angular de una poligonal por deflexiones
5. Modifique al programa que calcula: El permetro, error de cierre y grado de precisin, para que trabaje
con ngulos horarios
ESTRUCTURA
DE DATOS
6.1 Definicin
Es una coleccin de datos, y la forma en que estn relacionados unos con otros determina el
tipo de estructura.
Clasificacin
Formacin
Vectores ( unidimensional )
Matrices ( Bidimensional )
Tridimensional
6.1. Formaciones
Son una coleccin o conjunto de posiciones de memoria que tiene el mismos nombre de la variable, es decir,
un conjunto de datos numricos o de cadena que tiene el mismo nombre. Una formacin puede ser de una
dimensin (vector) o de varias dimensiones (matrices).
Es una lista de un nmero finito de datos del mismo tipo, que se referencia por un nombre comn y un
nmero de orden que son consecutivos 1,2,3,4,...n.
Las variables que representan las formaciones se denominan variables de subndice. Cada elemento puede
tener asignado un valor y se puede manipular de igual forma que cualquier otra variable.
La dimensin de un vector es el nmero de elementos que componen el vector, una variable de subndice
tiene el formato general.
Ejemplo:
int edad[5];
float sueldo [20];
char iniciales [14];
Representacin de un vector
Caractersticas
Es una formacin con filas y columnas que tiene dos dimensiones. Como antes se utilizaron variables
subindicadas para representar los elementos individuales de los arreglos; en el caso de una matriz el primer
subndice representar la fila y el segundo subndice indicar la columna, en forma flota A [3] [4] representa
el elemento de la cuarta fila, y la tercera columna del matriz A; es ms se har referencia a una matriz que
tenga m filas y n columnas como una matriz m x n.
Ejemplo:
PROBLEMASRESUELTOS
// Vector
// GJC
// 2004-8-01
#include <iostream.h>
#include <stdio.h>
float a[6];
int i;
main()
{
// entrada
for (i=1; i<6; i++)
{
printf ("\n A [%i] :",i);
scanf ("%f",&a[i]);
}
// Salida
for (i=1; i<6; i++)
{
printf ("\n A[%i] %f",i,a[i]);
}
}
// matriz
// GJC
// 2004-08-02
#include <iostream.h>
#include <stdio.h>
float a[4][4];
int i,j;
main()
{
// entrada
for (i=1; i<4; i++)
{
for (j=1; j<4; j++)
{
printf ("\n A[%i][%i] :",i,j);
scanf ("%f",&a[i][j]);
}
}
// Salida
for (i=1; i<4; i++)
{
for (j=1; j<4; j++)
{
printf ("\n A[%i][%i] %2.3f",i,j,a[i][j]);
}
}
}
// Area
// GJC
// 2004-08-04
#include <iostream.h>
#include <stdio.h>
#include <math.h>
main()
{
// entrada
printf("\n rea ( mximo 100 puntos)");
printf("\n Numero de puntos:");
scanf ("%i",&a);
for (i=0; i<a; i++)
{
j=i+1;
printf ("\n Punto %i",j);
printf ("\n Norte :");
scanf ("%f",&n[i]);
printf ("\n Este :");
scanf ("%f",&e[i]);
}
n[a+1]=n[0];
e[a+1]=e[0];
/ Mtodo de la Brjula
// GJC
// 2004-08-05
#include <iostream.h>
#include <stdio.h>
#include <math.h>
#include <conio.h>
#define pi 3.141592654
void angulo(void)
{
g = int(a);
m = int((a-g)*100);
s = a*100-(int(a*100));
ar= (g+m/60+s/36)*pi/180;
}
main()
{
// entrada
printf("\n Metodo de la Brujula");
printf("\n Numero de Estaciones:");
scanf ("%i",&ne);
clrscr();
for (i=0; i<ne; i++)
{
clrscr();
j=i+1;
printf ("\n Estacion %i",j);
printf ("\n Distancia :");
scanf ("%f",&d[i]);
printf ("\n Azimut :");
scanf ("%f",&a);
angulo();
az[i]=ar;
sm+=d[i]*cos(az[i]);
sp+=d[i]*sin(az[i]);
p+=d[i];
}
ec=sqrt(pow(sm,2)+pow(sp,2));
dg=p/ec;
printf("\n ec : %5.2f",ec);
printf("\n GP = 1/ %5.2f",dg);
cm=-sm/p;
cp=-sp/p;
printf ("\n Norte :");
scanf ("%f",&n);
printf ("\n Este :");
scanf ("%f",&e);
PROBLEMASPROPUESTOS
1. Escriba un programa que sume los elementos de las filas y las columnas de una
matriz dada.
Aguilar Joyanes L. y Rodrguez Castran H. C++, McGraw-Hill. Espaa. 1999. 367 Pgs.
Anderson James M., Mikhail Edward M., Introduccin a la Topografa. McGraw Hill.
Mxico. 1988. 753 Pgs.
Davis, Raymond E., Foote, Francis S. and Kelly Joe W.. Surveying: Theory and Practice. 5th.
Ed.. McGraw-Hill Co.. New York 1966. 1096 pgs.
Garca de Jalon de la Fuente Javier y otros. Aprenda lenguaje ANSI C como si estuviera en
primero. Universidad de Navarra, Espaa. 1998. 71 pgs.
Garca de Jalon de la Fuente Javier y otros. Aprenda lenguaje C++ como si estuviera en
primero. Universidad de Navarra, Espaa. 1998. 83 pgs.
Gmez G., Gilberto. Jimnez C. Gonzalo. Topografa Analtica. Armenia. 2003. 223 Pgs.
Gmez Montoya. Carlos Eduardo y Julin Esteban Gutirrez Posada, C++ Volumen I:
Fundamentos. POL Editores, Armenia 2001, 252 Pgs.
Jimnez Cleves Gonzalo, Informtica en Topografa. Universidad del Quindo, Armenia (Q),
1990. 114 Pgs.
Papas Chris H., William H. Murray, Visual C++ 6.0. McGraw-Hill. Mxico. 1999. 945 Pgs.
Wolf, Paul R.. y Brinker, Russell C. Topografa. 9a. Ed.. Alafomega Mxico. 1997. 834 Pgs.
www.leica.com
www.topcon.com
www.sokkia.com
www.profsurv.com
www.elagrimensor.com.ar