Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
CONTENIDO
1. INTRODUCCIN 5
1.2. C++
2.3. VARIABLES
16
16
18
20
3. PROGRAMACIN ESTRUCTURADA
20
20
22
23
31
32
34
36
4. SUBPROGRAMAS 39
4.1. CLASIFICACIN DE LOS SUBPROGRAMAS 40
4.1.1. PROCEDIMIENTOS O SUBRUTINAS
40
4.1.2. FUNCIONES 46
4.1.3. LIBRERAS
49
53
71
71
2
5.1.1. TRY
72
5.1.2. THROW
72
5.1.3. CATCH72
6. ARREGLOS
74
88
98
100
8. ARCHIVOS 105
8.1. MANEJO DE ARCHIVOS DE DATOS 105
9. ANEXOS
108
111
117
117
118
118
3
Introduccin a dev C++
PRESENTACIN
Este material se ha diseado para ayudar a personas que necesitan asesora
especfica para desarrollar alguna aplicacin en su actividad como
estudiante o profesional.
De esta manera, el texto est dirigido a
estudiantes y profesores de cualquier rea, fundamentalmente a estudiantes
de ingeniera o temas relacionados con las tecnologas de la informacin y
comunicacin.
El texto explica la programacin estructurada de una manera natural,
partiendo de lo ms sencillo hacia lo ms complejo, incrementando el nivel
de complejidad en cada captulo que se avance. Esta versin no incluye la
Programacin Orientada a Objetos, tema que ser incluido en una prxima
versin. La programacin estructurada se ha proyectado en todas las ramas
del saber, fundamentalmente para aquellos lectores que no necesitan la
programacin objetual.
El texto es entonces de carcter prctico, enriquecido con la experiencia
como docente universitario de este tema por varios aos. El contenido no
supone -de ninguna manera- tener algn conocimiento anterior sobre
programacin, ya que en forma didctica, va guiando al lector, incluso
partiendo desde la definicin de lo que es un lenguaje de programacin y las
facilidades que brinda dev C++ para programar, cmo puede instalarse y las
ventajas sobre otras versiones de C++.
El lector encontrar todas las formas de representacin de las instrucciones
con formatos explicados de forma sencilla y las estructuras de
representacin de datos tanto en memoria como en medios externos.
El
autor
deja
disposicin
4
Introduccin a dev C++
1. INTRODUCCIN
1.1. LENGUAJE DE PROGRAMACIN
Un lenguaje de programacin es un conjunto de reglas de sintaxis diseadas para
representar instrucciones que, escritas de la manera adecuada, pueden dar solucin
a un problema. Este conjunto de instrucciones se llama programa fuente y es
ejecutado a travs de un computador.
Los programas creados por el usuario ejercen un control fsico y lgico sobre la
mquina o procesador, el cual reconoce las instrucciones sealadas en el programa,
gracias a otro programa llamado compilador. El compilador se encarga de traducir
las instrucciones del programa a un lenguaje de mquina binario, creando un nuevo
programa llamado programa objeto, el cual es llevado al procesador y es
ejecutado instruccin por instruccin.
1.2. C++
El lenguaje de programacin C++ fue creado por Bjarne Stroustrup en los 80's.
Su trabajo consisti en llevar ms all, el ya famoso lenguaje de programacin C, e
implementar un lenguaje que permitiera la manipulacin de objetos, dejando el
compilador de C. Los ficheros fuente de C++ tienen la extensin *.cpp (de C plus,
denominacin en ingles del lenguaje).
1.4. DEV-C++
Dev-C++ es un IDE para el lenguaje de programacin C++, es un programa libre
publicado bajo la licencia pblica GNU y se basa en GCC (GNU Compiler Colection)
como compilador. Se puede obtener gratis en la pgina web de los creadores
(http://www.bloodshed.net/devcpp.html).
6
Introduccin a dev C++
int main () {
}
A partir de ste, podemos generar la estructura del cdigo fuente necesaria para
realizar una aplicacin mediante el lenguaje de programacin C++ as:
2.2. LIBRERAS
Las libreras, en un lenguaje de programacin, son cdigos escritos previamente
que definen funciones que se utilizan frecuentemente en los programas. Algunas
de las libreras ms utilizadas son:
iostream
Permite utilizar funciones para entrada y salida de datos. Pertenece a la biblioteca
estndar de C++,
Funciones: cout, cin, cerr, etc.
conio2
Es una librera que funciona en sistemas operativos con DOS como MS Windows.
Permite utilizar funciones de manejo avanzado de la consola. No pertenece a la
biblioteca estndar de C++,
Funciones: getch( ), textcolor( ), textbackground( ), clrscr( ), etc.
math (se debe incluir, lo mismo la conio2)
Esta librera permite el uso de funciones matemticas esenciales. Hace parte de la
biblioteca estndar de C++. Algunas de sus funciones son:
7
Introduccin a dev C++
NOMBRE
abs(i)
TIPO
Int
LIBRERIA
Stdlib.h
acos(d)
double
Math.h
asin(d)
double
Math.h
atan(d)
double
Math.h
atan(d1,d2)
double
Math.h
atof(s)
double
Stdlib.h
atoi(s)
int
Stdlib.h
atol(s)
long
Stdlib.h
calloc(n,s)
Void
(puntero)
alloc.h y
stdlib.h
ceil(d)
double
Math.h
cos(d)
double
Math.h
cosh(d)
double
Math.h
difftime
double
Time.h
DESCRIPCION
Devuelve el
valor absoluto de
i
Devuelve el
coseno inverso
de d
Devuelve el
seno inverso de
d
Devuelve la
tangente inversa
de d
Devuelve la
tangente inversa
de d1/d2
Convierte la
cadena s en una
cantidad doubl
(valor real)
Convierte la
cadena s a un
entero
Convierte la
cadena s a un
entero largo
Reserva
memoria para
una formacin
de n elementos,
cada uno de s
bytes. Devuelve
un puntero al
principio del
espacio
reservado.
Devuelve un
valor
redondeado al
siguiente entero
mayor
Devuelve el
Coseno de d
Devuelve el
Coseno
hiperblico de d
Devuelve la
SINTAXIS
Int abs(int i);
Double acos(double
d);
Double asin(double
d);
Double atan(double
d);
Double atan
(double d1, double
d2;)
Double atof(const
char *cadena)
Int atoi(const
char*cadena)
Long atol(const
char*cadena)
Void *calloc ( size_t
n;size_t s);
Double ceil(double
d);
Double cos(double
d);
Double cosh(double
d);
Double
8
(l1,l2)
exit(u)
void
Stdlib.h
exp(d)
double
Math.h
fabs(d)
double
Math.h
fclose(f)
int
Stdio.h
feof(f)
int
Stdio.h
fgetc(f)
int
Stdio.h
fgets(s,i,f)
Char
(puntero)
Stdio.h
floor(d)
double
Math.h
fmod(d1,d2)
double
Math.h
diferencia en
tiempo l1(hora
2)-l2(hora 1),
donde l1 y l2
representan el
tiempo
transcurrido
despus de un
tiempo base
Cierra todos los
archivos, buffers
y termina el
programa
Eleva e a la
potencia d
Devuelve el
valor absoluto de
d
Cierra el archivo
f. devuelve el
valor 0 si el
archivo e ha
cerrado con
xito.
Determina se ha
encontrado un
fin de archivo. Si
es as, devuelve
un valor distinto
de cero, en otro
caso devuelve 0.
Lee un carcter
del archivo f
Lee una cadena
s, con i
caracteres, del
archivo f
Devuelve un
valor
redondeado al
entero menor
ms cercano
Devuelve el
resto de d1/d2
difftime( time_t
hora2, time_t
hora1);
Void exit(int u)
u es el estado de
terminacin
Double exp (double
d);
Double fabs(double
d)
Int fclose (FILE *f);
Double
fmod(double d1,
double d2);
9
Introduccin a dev C++
fopen(s1,s2)
File
(puntero)
Stdio.h
Abre un archivo
llamado s1, del
tipo s2.
Devuelve un
puntero al
archivo. S2
puede ser:
-r: Archivo
para la lectura.
-w: Archivo
vacio para la
escritura.
-a: Archivo
para escritura al
final de este.
-r+: Archivo
para
lectura/escritura.
-w+: Archivo
vacio para
lectura/escritura
-a+: Archivo
para lectura y
aadir.
-rb: Archivo
binario para la
lectura.
-wb: Archivo
binario para la
escritura.
-ab: Archivo
binario para
aadir.
-rb+: Archivo
binario para la
lectura/escritura.
-wb+: Archivo
binario para la
lectura/escritura.
-ab +: Archivo
binario para
lectura y aadir.
fprintf(f,)
int
Stdio.h
Escribe datos en
el archivo f
frexp(i,d)
double
Math.h
Toma el numero i
y obtiene su
notacin
cientfica al
10
Introduccin a dev C++
fputc(c,f)
int
Stdio.h
fputs(s,f)
int
Stdio.h
fread(s,i1,i2,f
int
Stdio.h
free(p)
void
Stdio.h
fseek(f,l,i)
int
Stdio.h
ftell(f)
Long int
Stdio.h
fwrite(s,i1,i2,
int
Stdio.h
f)
descomponerlo
en dos partes: la
mantisa, que es
retornada por la
funcin, y el
exponente, que
es colocado en d
Escribe un
carcter en el
archivo f
Escribe una
cadena de
caracteres en el
archivo f
Lee i2
elementos, cada
uno de tamao
i1 bytes, desde
el archivo f hasta
la cadena s)
Libera un bloque
de memoria
reservada cuyo
principio est
indicado por p
Mueve el
puntero al
archivo f una
distancia de l
bytes desde la
posicin i, la cual
puede ser:
-SEEK_SET:
Principio de
archivo
-SEEK_CUR:
Posicin actual
del puntero
-SEEK_END: Final
del archivo
Devuelve la
posicin actual
del puntero
dentro del
archivo f
Escribe i2
elementos, cada
uno de tamao
i1, desde la
cadena s hasta
Int fputc(int c,
FILE*f);
Int fputs(const
char*cad, FILE*f);
Size_tfread(void*s,s
ize_t i1,size_t i2,
FILE*f);
Void
free(void*dir_memo
ria);
Int fseek(FILE*f,
long despla,int
origen);
Long int
ftell(FILE*f);
Size_t fwrite(const
void*s,size_t
i1,size_t i2,FILE*f);
11
Introduccin a dev C++
getc(f)
int
Stdio.h
getchar()
int
Stdio.h
gets(s)
char
(puntero)
Stdio.h
isalnum(c)
int
Ctype.h
isalpha(c)
int
Ctype.h
isascii(c)
int
Ctype.h
iscntrl(c)
int
Ctype.h
isdigit(c)
int
Ctype.h
el archivo f
Lee un carcter
del archivo f
Lee un carcter
desde el
dispositivo de
entrada estndar
Lee una cadena
de caracteres
desde el
dispositivo de
entrada estndar
Determina si el
argumento es
alfanumrico.
Devuelve un
valor distinto de
cero si es cierto;
en otro caso
devuelve 0,
Determina si el
argumento es
alfabtico.
Devuelve un
valor distinto de
cero si es cierto;
en otro caso
devuelve 0.
Determina si el
argumento es un
carcter ASCII.
Devuelve un
valor distinto de
cero si es cierto;
en otro caso
devuelve 0
Determina si el
argumento es un
carcter ASCII de
control.
Devuelve un
valor distinto de
cero si es cierto;
en otro caso
devuelve 0
Determina si el
argumento es un
digito decimal.
Devuelve un
valor distinto de
Int getc(FILE*f);
Int getchar(void);
Char*gets(char*cad
);
12
Introduccin a dev C++
isgraph(c)
int
Ctype.h
islower(c)
int
Ctype.h
isodigit(c)
int
Ctype.h
isprintf(c)
int
Ctype.h
ispunct(c)
int
Ctype.h
cero si es cierto;
en otro caso
devuelve 0
Determina si el
argumento es un
carcter ASCII
grafico (hex
0x21-0x7e; octal
041 -176).
Devuelve un
valor distinto de
cero si es cierto;
en otro caso
devuelve 0
Determina si el
argumento es
una minscula.
Devuelve un
valor distinto de
cero si es cierto;
en otro caso
devuelve 0
Determina si el
argumento es un
digito octal.
Devuelve un
valor distinto de
cero si es cierto;
en otro caso
devuelve 0
Determina si el
argumento es un
carcter ASCII
imprimible (hex
0x20-0x7e; octal
040 -176).
Devuelve un
valor distinto de
cero si es cierto;
en otro caso
devuelve 0
Determina si el
argumento es un
carcter de
puntuacin.
Devuelve un
valor distinto de
cero si es cierto;
en otro caso
devuelve 0
13
Introduccin a dev C++
isspace(c)
int
Ctype.h
isupper(c)
int
Ctype.h
isxdigit(c)
int
Ctype.h
labs(l)
Long int
Math.h
ldexp(i,d)
double
Math.h
log(d)
double
Math.h
log10
double
Math.h
malloc(u)
Void(punte
ro)
Stdlib.h
Determina si el
argumento es un
espacio en
blanco Devuelve
un valor distinto
de cero si es
cierto; en otro
caso devuelve 0
Determina si el
argumento es
una mayscula.
Devuelve un
valor distinto de
cero si es cierto;
en otro caso
devuelve 0
Determina si el
argumento es un
digito
hexadecimal.
Devuelve un
valor distinto de
cero si es cierto;
en otro caso
devuelve 0
Devuelve el
valor absoluto de
l
Toma dos
nmeros: una
mantisa y un
exponente y
calcula el
numero en punto
flotante o
notacin
cientfica
Devuelve el
Logaritmo
natural de d
Devuelve el
Logaritmo en
base 10 de d
Reserva u bytes
de memoria,
devuelve un
puntero al
principio del
espacio
reservado
Double log(double
d);
Double
log10(double d);
Void*malloc(size_t
u);
14
Introduccin a dev C++
modf(d,*iptr)
double
Math.h
pow(d1,d2)
double
Math.h
printf()
int
Stdio.h
putc(c,f)
Int
Stdio.h
putchar(c)
Int
Stdio.h
puts(c)
Int
Stdio.h
rand()
int
Stdio.h
rewind(f)
void
Stdio.h
scanf()
Int
Stdio.h
Retorna la parte
decimal de d.
guarda la parte
entera en el
objeto apuntado
por iptr
Devuelve d1
elevado a la
potencia de d2
Escribe datos en
dispositivo de
salida estndar.
Segn el tipo de
dato se debe
colocar:
-%c: Carcter
-%d:Entero
decimal
-%e: Real
-%f: Punto
flotante
-%s:Cadena de
caracteres
-%x:
Hexadecimal sin
signo.
Escribe un
carcter en el
archivo f
Escribe un
carcter en el
dispositivo de
salida de
estndar
Escribe una
cadena de
caracteres en el
dispositivo de
salida de
estndar
Devuelve un
entero positivo
aleatorio
Mueve el
puntero al
principio del
archivo f
Lee datos en el
dispositivo de
entrada
Double
modf(double
valor,double *iptr)
Double pow(double
d1,double d2);
Int printf(const
char*formato
[,argumento,]);
Int putc(int
c,FILE*f);
Int putchar(int c);
Int puts(const
char*cad);
Int rand(void);
Void rewind(FILE*f);
Int scanf(const
char*formato
[,direccin,]);
15
sin(d)
double
Math.h
sinh(d)
double
Math.h
sqrt(d)
double
Math.h
srand(u)
void
Stdlib.h
strcmp(s1,s2
int
String.h
int
String.h
char
String.h
strcmpi(s1,s
2)
strcpy(s1,s2)
estndar. Estos
datos pueden
ser de tipo:
-%c: Carcter
-%d:Entero
decimal
-%e: Real
-%f: Punto
flotante
-%s:Cadena de
caracteres
-%x:
Hexadecimal sin
signo.
Devuelve el
Seno de d
Devuelve el
Seno hiperblico
de d
Devuelve la Raz
cuadrada de d
Inicializa el
generador de
nmeros
aleatorios
Compara dos
cadenas de
caracteres
lexicogrficamen
te. Devuelve un
valor negativo si
s1<s2; 0 si s1 y
s2 son idnticas;
y un valor
positivo si s1>s2
Compara dos
cadenas de
caracteres
lexicogrficamen
te, sin
diferenciar
maysculas de
minsculas.
Devuelve un
valor negativo si
s1<s2; 0 si s1 y
s2 son idnticas;
y un valor
positivo si s1>s2
Copia la cadena
Int strcmpi(const
char*s1,const
char*s2);
Int strcpy(const
16
strlen(s)
int
String.h
strset(c,s)
Char(punte
ro)
String.h
system(s)
int
String.h
tan(d)
double
Math.h
tanh(d)
double
Math.h
time(p)
Long int
Time.h
toascii (c)
int
Ctype.h
tolower (c)
int
Ctype.h
toupper (c)
int
Ctype.h
de caracteres s2
en la cadena s1
Devuelve el
numero de
caracteres de
una cadena
Pone todos los
caracteres de s a
c (excluyendo el
carcter nulo del
final)
Pasa la orden al
sistema
operativo.
Devuelve cero si
la orden se
ejecuta
correctamente,
en otro casi
devuelve un
valor distinto
Devuelve la
Tangente de d
Devuelve la
Tangente
hiperblica de d
Devuelve el
numero de
segundos
transcurridos
despus de un
tiempo base
designado
Convierte el
valor del
argumento a
ASCII
Convierte una
letra a minscula
Convierte una
letra a
mayscula
char*s1,const
char*s2);
Size_t strlen(const
char*s);
Char*strset(char*ca
d, int c);
System(comd);
Double tan(double
d);
Double tanh(double
d);
Time_t time(time_t
*h);
2.3. VARIABLES
Una variable del lenguaje C++ conserva, en trminos generales, las propiedades de
una variable matemtica. Una variable es un elemento cuyo valor puede cambiar
17
Introduccin a dev C++
NOMBRE
Char
Unsigned char
string
short int
unsigned short
int
long long
bool
float
double
long double
DESCRIPCIN
Caracter o entero
pequeo
TAMA
O*
1 byte
2 bytes
Cadena de caracteres
Variable
Entero corto
Entero positivo
2 bytes
2 bytes
Entero
4 bytes
Entero largo
Booleano (verdadero o
falso)
Nmero de punto
flotante
Nmero de punto
flotante de doble
precisin
Long de punto flotante
de doble precisin
8
bytes
RANGO*
Ver tabla ASCII al final del
documento**
Es tcnicamente un arreglo (o
vector) de datos tipo char
-32768 a 32767
0 a 65535
Con signo de -2147483648 a
2147483647
Sin signo de 0 a 4294967295
Con signo de -9223372036854775807
a 9223372036854775807 Sin signo de
0 a 18446744073709551615
1 byte
true o false (1 o 0)
4 bytes
8 bytes
12 bytes
* Los valores dependen de la arquitectura utilizada. Los mostrados son los que
generalmente se encuentran en una mquina tpica de arquitectura 32 bits.
**Los caracteres se representan utilizando el tipo char, que tiene slo 1 byte de
tamao. Este tipo se utiliza para representar los 255 caracteres de la tabla de
caracteres del sistema. El tipo char es tambin un tipo entero, ya que puede tomar
valores de 0 a 255.
(tabla de caracteres ASCII en anexos al final del documento)
18
Introduccin a dev C++
int nombreDeLaVaiable;
//int es el tipo de la variable, en este caso es entero
nombreDeLaVariable = expresion;
//ver nota *
int x;
char y;
char z;
x = (10*5)+12;
y = 'a';
z = 65;
La definicin y la asignacin de una variable se pueden hacer en una sola lnea as:
\: debido a que las comillas estn reservadas para encerrar texto, este smbolo
har que el programa reconozca las comillas como texto y no como principio o fin
de texto.
\\: permite mostrar el caracter '\' en pantalla.
DESCRIPCIN
Asignacin
Asignacin con suma
Asignacin con resta
Asignacin con multiplicacin
Asignacin con divisin
Asignacin con mdulo
Asignacin con desplazamiento
Asignacin con desplazamiento
Asignacin con AND lgico
Asignacin con XOR binario
Asignacin con OR binario
Aritmticos:
OPERADOR
*
+
/
%
DESCRIPCIN
Multiplicacin
Suma
Resta
Divisin
Residuo de la operacin o mdulo
Comparacin:
OPERADOR
!=
==
<=
<
>=
>
DESCRIPCIN
Diferente
Igualdad
Menor o igual que
Menor que
Mayor o igual que
Mayor que
Booleanos:
20
Introduccin a dev C++
OPERADOR
&&
||
^
!
DESCRIPCIN
Operacin lgica
Operacin lgica
Operacin lgica
Operacin lgica
AND
OR
XOR
NOT
Otros Operadores
OPERADOR
[]
()
++
--
DESCRIPCIN
Arreglo
Argumento de funcin o agrupacin
Aumento en 1
Decremento en 1
3.
PROGRAMACIN
ESTRUCTURADA
La programacin estructurada es una forma de escribir programas de computador
(programacin) de manera clara. Para ello utiliza nicamente tres estructuras:
secuencia, seleccin e iteracin.
Estructura secuencial. Una estructura de programa es secuencial si se ejecuta
una tras otra a modo de secuencia, es decir, que una instruccin no se ejecuta
hasta que finaliza la anterior.
Estructura selectiva o de seleccin.
La estructura selectiva permite la
realizacin de una instruccin u otra segn un criterio. Slo una de estas
instrucciones se ejecutar.
21
Introduccin a dev C++
Estructura iterativa.
Un bucle iterativo, o iteracin de una secuencia de
instrucciones, hace que se repitan mientras se cumpla una condicin, en un
principio el nmero de iteraciones no tiene por qu estar determinado.
El lenguaje C++ hereda de C las caractersticas de un lenguaje estructurado, as
como le agrega funcionalidades de la orientacin a objetos. La estructura general
del lenguaje es secuencial, es decir, las instrucciones se ejecutan una seguida de
las otras, pero, C++ provee adems ciertas estructuras para controlar el flujo
secuencial de una aplicacin, para volverla iterativa, o selectiva, stas son:
pantalla en el plano cartesiano est dibujada del punto (0,0) hacia abajo.
textbackground(color); Le coloca color de fondo donde va un texto. textcolor (color);
Le da color al texto del mensaje.
Vemos que el comando cout<< es para salida y cin>> para entrada.
Ejemplo 2
#include <iostream>
#include <conio2.h>
using namespace std;
char nombre[10]="nombre";
int edad=10;
main (){
cout<<"Hola mundo" <<endl;
//Muestra Hola mundo en la pantalla
cout<<"La edad es: "<<edad<<endl;
//Muestra La edad es 10
cout<<"Su nombre es: " <<nombre<<" y su edad es: "<<edad<<endl;
//Muestra Su nombre es: nombre y su edad
//es 10
getch();
}
23
Introduccin a dev C++
La segunda es la que permite leer cadenas con espacios, cadena es una variable
de tipo char[] y es ah donde se guardar el texto ingresado por el usuario. Nmero
es una variable entera que indica el nmero de caracteres a leer, se debe hacer si
la cadena de caracteres tiene espacios en blanco.
Ejemplo 3
#include <iostream>
#include <conio2.h>
using namespace std;
char nombre[50]; //cadena de texto
int edad;
main (){
cout<<"Ingrese su edad: ";
//Muestra Ingrese su edad:
cin>>edad;
//lee la edad que el usuario ingresa
cout<<"Ingrese su nombre: "; //Muestra Ingrese su nombre:
cin>>ws;
//Se eliminan espacios y enteres en la
// memoria.
cin.getline(nombre,50);
// Se indica que se van a leer como
// mximo 50 caracteres que es el tamao
// de la cadena nombre.
cout<<"Su nombre es: " <<nombre<<" y su edad es: "<<edad<<endl;
getch();
}
3.2. INSTRUCCIN IF
Esta es una estructura de seleccin que permite elegir qu accin deber seguir
durante la ejecucin del programa, a partir de determinada condicin.
Para utilizarla basta con escribir la palabra reservada if y, a continuacin, la
condicin bajo la cual se cumplirn las instrucciones que se encierran en unas
llaves. Esas instrucciones se ejecutarn slo cuando la condicin -dentro de las
llaves- se haga verdadera. La estructura de la sentencia if es la siguiente:
if(condicin)}
{
Instrucciones que se ejecutan si la condicin es verdadera;
}
Ejemplo
if(a>b)
cout<<a; //una sola instruccin
Si instrucciones es una sola, no necesita llaves si se necesita que pase algo; en caso
contrario, a la condicin ponemos la palabra reservada else, justo despus de
cerrar las llaves que contienen las instrucciones que se encuentran entre las llaves
que encierra if; procedemos entonces a abrir nuevamente un par de llaves para
24
Introduccin a dev C++
if(condicin){
//Instrucciones para cuando la condicin es verdadera
}
else{
//Instrucciones para cuando la condicin es falsa.
}
Comparacin:
OPERADOR
!=
==
<=
<
>=
>
DESCRIPCIN
Diferente
Igualdad
Menor o igual que
Menor que
Mayor o igual que
Mayor que
if(condicin){
//Instrucciones para cuando la condicin es verdadera
}
else {
if{
//Instrucciones.
}
else {
//Instrucciones.
}
}
#include<iostream>
#include<conio2.h>
using namespace std;
int main(){
int m,n;
cout<<"Ingrese m:"<<endl;
cin>>m;
cout<<"Ingrese n:"<<endl;
cin>>n;
if(n<m){
cout<<"m es mayor que n";
} else
if(n>m){
cout<<"m es menor que n";
} else{
cout<<"m es igual a n";
}
getch();
}
#include<conio2.h>
#include<iostream>
using namespace std;
int main(){
int n;
cout<<"Ingrese n:"<<endl;
cin>>n;
if(n>5){
cout<<"Gano!!!";
}
getch();//Observe que el if se puede usar sin el else
}
26
Introduccin a dev C++
#include<conio2.h>
#include<iostream>
using namespace std;
int main(){
int n;
cout<<"Ingrese n:"<<endl;
cin>>n;
if(n>5){
} else{
cout<<"Perdio!!!";
}
getch();
}
Ejemplo 6
Cierta universidad tiene un programa para estimular a los estudiantes con buen
rendimiento acadmico, as:
#include<iostream>
#include<conio2.h>
using namespace std;
int main()
{
//cs-clase de estudiante
//nc-nmero de crditos
//pe-promedio estudiante
//pdes-porcentaje de descuento
//vcred-valor crdito
//vsd-valor a pagar sin descuento
//des-descuento
27
Introduccin a dev C++
while(condicin)
{
//instrucciones que se ejecutan mientras se cumpla la condicin
}
29
Introduccin a dev C++
Ejemplo 8
Evaluar la siguiente funcin: y=x2-2, mostrando en una tabla el valor de la funcin
evaluada desde x=0 hasta x=10, junto al valor de la x, es decir, la aplicacin
deber mostrar algo como lo siguiente:
x
y(x)
-2
-1
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
float y,x;
x=0;
cout<<"funcion: y(x)=x^2-2"<<endl;
cout<<" x y(x)"<<endl;
while(x<=10)
{
y=pow(x,2)-2;
cout<<" "<<x<<" "<<y<<endl;
x++;
}
system("pause");
}
Ejemplo 9
Repasemos los ejemplos anteriores. Para el primero le preguntamos al usuario
cuntos nmeros desea ingresar; y para el segundo le solicitamos al usuario el valor
inicial, valor final y el paso.
#include<iostream>
#include<conio2.h>
#include<math.h>
using namespace std;
int main()
{
int i=0;
float y,x,n,step;
x=0;
cout<<"funcion: y(x)=x^2-2"<<endl;
cout<<"valor inicial:";
cin>>x;
cout<<"valor final:";
cin>>n;
cout<<"Unidades que aumentara x en cada iteracion:";
cin>>step;
cout<<" x "<<"y(x)"<<endl;
while(x<=n)
{
30
Introduccin a dev C++
y=pow(x,2)-2;
gotoxy(3,8+i);
gotoxy(8,8+i);
x=x+step;
i++;
cout<<x;
cout<<y;
}
cout<<endl<<endl;
getch();
}
Ejemplo 10
Encontrar el promedio de n nmeros.
#include<iostream>
using namespace std;
int main()
{
float suma,promedio;
int numero;
int i=1, n;
suma=0;
cout<<"Ingrese la cantidad de numeros a los cuales desea sacar el
promedio:"<<endl;
cin>>n;
while(i<=n)
{
cout<<"Digite un numero:"<<endl;
cin>>numero;
suma+=numero;
i++;
//incrementando i
}
promedio=suma/n;
cout<<"El promedio de los numeros es: "<<promedio<<endl<<endl;
system("pause");
return 0;
}
Note que, en los ejemplos anteriores, se conoca el nmero de veces que se tenan
que repetir las instrucciones dentro del while, este tipo de solucin se llama
Esquema Cuantitativo y se implementa a travs de un contador.
Un contador es una variable que cuenta la cantidad de veces que se repiten las
instrucciones del ciclo o tambin puede usarse para contar cualquier tipo de
actividad. Antes de usarse debe tener un valor inicial y el valor en que se
incrementa es un valor constante.
Observe que, en el ejercicio anterior, cada vez que se lee un nmero se totaliza en
la variable suma. A este tipo de variables se les denomina acumulador, parecidas a
los contadores pero el valor en que se incrementan es un valor variable, es decir,
totalizan actividades; desde luego, como la variable aparece al lado izquierdo y al
lado derecho, antes de usarse se le debe asignar un valor inicial.
Otro tipo de solucin es el llamado Esquema Cualitativo: este esquema es
utilizado cuando no se conoce el nmero de veces que debe repetirse la secuencia
31
Introduccin a dev C++
Ejemplo 11
#include<iostream>
#include<conio2.h>
using namespace std;
int main()
{
float suma,promedio;
int numero,n=1;
suma=0;
cout<<"Digite el primer numero: ";
cin>>numero;
while(numero>0)
{
suma+=numero;
n++;
cout<<"Digite un numero:"<<endl;
cin>>numero;
}
promedio=suma/n;
cout<<"El promedio de los numeros es: "<<promedio<<endl;
getch();
}
32
Introduccin a dev C++
#include<iostream>
#include<conio2.h>
using namespace std;
int main()
{
int valn=0, val0=0, valp=0,totaln;
char siga; siga='S';
float suma =0, num;
while(toupper(siga)=='S')
{
// La funcin toupper convierte una letra minscula a mayscula
system("cls");
textcolor(WHITE);
textbackground(MAGENTA);
gotoxy(27,12);
cprintf("ENTRE NUMERO : ");
cin>>num;
suma+=num;
if(num > 0)
valp++;
else
if(num==0)
val0++;
else
valn++;
gotoxy(27,14);
cout<<"HAY MS NUMEROS S/N? ";
cin>>siga;
}
totaln=valp+valn+val0;
textcolor(2);
gotoxy(33,9);
cout<<"RESULTADOS";
gotoxy(27,11); cout<<"SUMA DE LOS NMEROS: "<<suma;
gotoxy(27,12); cout<<"NUMEROS NEGATIVOS:
"<<valn;
gotoxy(27,13); cout<<"NUMEROS IGUALES A CERO: "<<val0;
gotoxy(27,14); cout<<"NUMEROS POSITIVOS:
"<<valp;
gotoxy(27,15); cout<<"TOTAL DE NUMEROS:
"<<totaln;
gotoxy(27,17); cout<<"PRESIONE TECLA PARA TERMINAR";
getch();
}
3.5.1. DO-WHILE
Esta es otra estructura repetitiva de control que es implementada para efectuar un
ciclo, es decir, un conjunto de instrucciones que se ejecutan un determinado
nmero de veces. Es parecida a la estructura while y en algunos aspectos se
complementan. Se utiliza en situaciones en las que se desea que una secuencia se
repita, al menos una vez, antes de comprobar la condicin de repeticin y est
formada por dos partes: las instrucciones que se desean repetir y, al final de sta, la
condicin que controlar el nmero de veces que se repetirn las instrucciones.
La diferencia especial entre la estructura repetir y la estructura mientras es que,
en la primera la secuencia de instrucciones se ejecuta por lo menos una vez, antes
de evaluar la condicin de repeticin y, en la estructura mientras, la condicin de
terminacin es evaluada primero y, por lo tanto, el grupo de instrucciones o campo
de la sentencia puede ser o no ejecutado.
Su estructura es la siguiente:
do{
// instrucciones que se ejecutan una vez y mientras se
// cumpla la condicin
}while(condicin);
Observe que antes del while hay una llave y termina con punto y coma, para
diferenciarlo del while general. Esto quiere decir que el while cierra el do.
Para ejemplificar el uso del ciclo do-while, se puede observar el siguiente problema:
Ejemplo 13
Mostrar un men y pedir una opcin.
//El uso de do-while se hace necesario dado que se debe mostrar el men
//mnimo en una ocasin
#include<iostream>
#include<conio2.h>
using namespace std;
int main(){
int opcion;
do{
cout<<"MENU"<<endl;
cout<<"1. OPCION 1"<<endl;
cout<<"2. OPCION 2"<<endl;
cout<<"3. SALIR"<<endl;
cout<<"INGRESE LA OPCION: ";
cin>>opcion;
}while(opcion!=3);
cout<<"FIN DEL PROGRAMA..."<<endl;
getch();
return 0;
}
34
Introduccin a dev C++
#include<iostream>
#include<conio2.h>
using namespace std;
int main()
{
int n um=1, n; char esc=27,tecla;
long suma=0;
clrscr();
textbackground(WHITE); textcolor(RED);
gotoxy(20,12);
cprintf("ENTRE LMITE DE LOS NMEROS:
");
gotoxy(48,12);
cin>>n;
do
{
suma+=num;
num++;
}while(num <= n);
clrscr();
textbackground(LIGHTRED); textcolor(WHITE);
gotoxy(30,12);
35
Introduccin a dev C++
3.5.2. FOR
La estructura for permite que una o ms instrucciones secuencia se repitan cero o
ms veces, mientras los valores de una progresin aritmtica -de razn creciente o
decreciente-, se vayan asignando a una variable denominada variable de control del
ciclo PARA.
Esta estructura es usada cuando se tiene un esquema cuantitativo y el contador
que controla el ciclo se incrementa o disminuye en un valor constante. La
diferencia entre cmo se implementa esta clase de ciclos y la estructura while, es
que el for maneja la inicializacin del contador y su incremento en forma
automtica, es decir, lo hace la estructura.
Los valores de los parmetros que maneja este ciclo son controlados por la
estructura y, una vez establecidos sus valores o activado el ciclo, no es factible
cambiarlos. Su implementacin en C++ es la siguiente:
Ejemplo 15
Leer n datos y calcular su promedio.
#include<iostream>
#include<conio2.h>
using namespace std;
int main(){
int numDatos,cont;
double suma=0,promedio,dato;
cout<<"Ingrese el numero de datos a procesar: "<<endl;
cin>>numDatos;
for(cont=0;cont<numDatos;cont++){
cout<<"Ingrese el dato No. "<<cont+1<<endl;
cin>>dato;
suma+=dato;
}
promedio=suma/numDatos;
cout<<"El promedio de los "<<numDatos<<" datos, es: "<<promedio<<endl;
getch();
36
Introduccin a dev C++
return 0;
}
#include<iostream>
#include<conio2.h>
using namespace std;
int main(){
int n,total=1, cont;
cout<<"Ingrese el numero al cual se le calculara el factorial: "<<endl;
cin>>n;
for(cont=2;cont<=n;cont++){
total*=cont;
}
cout<<"El factorial de "<<n<<" es: "<<total<<endl;
getch();
return 0;
}
37
Introduccin a dev C++
switch(selector){
case valor 1:
instruccin 1;
instruccin 2;
instruccin n;
break;
case valor n:
instruccin 1;
instruccin 2;
instruccin n;
break;
default:
instruccin 1;
instruccin 2;
instruccin n;
break;
}
El valor del selector debe ser una constante de tipo entera (short, int, long o de tipo
caracter). Si al ejecutarse las instrucciones de un caso determinado, se necesita
que se ejecuten los casos siguientes, se omite el uso de la instruccin break. Si lo
que se desea es que slo se ejecuten las instrucciones del caso en el que se
encuentra el selector, es necesario que se incluya la instruccin break. El caso
default agrupa aquellas opciones diferentes a las cubiertas dentro de la estructura,
es decir, ste incluye las instrucciones que se ejecutarn si el selector no asumi
ninguno de los casos que incluye la estructura.
Ejemplo 17
En un programa deportivo se ha concluido que la duracin de la sesin de prctica
depende del peso de la persona y de las condiciones que presenta en la revisin
mdica. La revisin mdica califica a las personas como de condicin 3, 4, 5 6. El
tiempo de cada persona es igual al peso por una rata que se basa en su condicin;
sta es respectivamente: 0.15, 0.21, 0.22 y 0.26. Elaborar un algoritmo que calcule
las duraciones para las sesiones individuales.
#include<iostream>
using namespace std;
int main()
{
int iden,con;
float peso,r,t;
cout<<"Ingrese su identificacion o cero para salir:
cin>>iden;
while (iden > 0)
{
cout<<"Ingrese su peso: ";
cin>>peso;
";
38
Introduccin a dev C++
Ejemplo 18
Leer el paso en el que se encuentra un conductor y mostrar los que an le quedan
por realizar, para salir en su automvil. Al no usarse break despus de los casos 14, se efectan los siguientes a cada uno de stos, es decir, si el usuario ingresa el
paso 1, en la estructura switch se evaluar el caso 1 y los casos siguientes a ste.
#include<iostream>
#include<conio2.h>
using namespace std;
int main(){
short paso;
cout<<"Ingrese el paso en el que ha quedado: ";
cin>>paso;
switch(paso)
{
case 1 : cout<<"Paso 1 (ponerse comodo) sin finalizar."<<endl;
case 2 : cout<<"Paso 2 (regular espejos) sin finalizar."<<endl;
case 3 : cout<<"Paso 3 (abrochar cinturn) sin finalizar."<<endl;
case 4 : cout<<"Paso 4 (arrancar motor) sin finalizar."<<endl;
break;
case 5 : cout<<"Tarea finalizada."<<endl;
break;
default: cout<<"Paso incorrecto"<<endl;
break;
}
getch();
return 0;
}
39
Introduccin a dev C++
La instruccin break tambin puede ser usada en los ciclos para terminar su
ejecucin. Por ejemplo, en los ciclos for y while que se muestran a continuacin.
Ejemplo 19
//Uso de break en ciclos while
#include<iostream>
#include<conio2.h>
using namespace std;
int main(){
int cont=0;
while(true){
cout<<"encerrado"<<endl;
cont++;
if(cont==10)break;
}
getch();
return 0;
}
4. SUBPROGRAMAS
A lo largo del manual se han tratado los problemas como un todo, como si fuesen
un solo mdulo. Una de las grandes ventajas que tiene la programacin es la
divisin de problemas grandes en subproblemas y, a su vez, stos tambin pueden
dividirse en problemas ms pequeos. Esta tcnica permite dar ms claridad y
40
Introduccin a dev C++
41
Introduccin a dev C++
< In s tr u c c io n e s 1 >
< L la m a d a u n o a A >
< I n s t r u c c i n 3 >
Pasa
in f o r m a c i n
c e d e c o n tro l
R e to rn a
c o n tr o l e
in fo rm a c i n
S u b p ro g ra m a
A
< In s tr u c c io n e s >
Pasa
in f o r m a c i n
c e d e c o n tro l
< L la m a d a u n o a B >
< I n s t r u c c i n i>
R e to rn a
c o n tr o l e
in fo rm a c i n
Pasa
in f o r m a c i n
c e d e c o n tro l
< L la m a d a d o s a A >
< I n s t r u c c i n k >
R e to rn a
c o n tr o l e
in fo rm a c i n
S u b p ro g ra m a
B
L la m a d a a C
< In s tr u c c i n i>
C e d e c o n tr o l
R e to r n a
c o n tro l
S u b p ro g ra m a
C
< In s tr u c c io n e s >
S u b p ro g ra m a
A
< In s tr u c c io n e s >
< I n s t r u c c i n n >
En el grfico las flechas indican el flujo de ejecucin del programa; observe que
cuando se ejecuta una instruccin de llamada a un subprograma, el algoritmo
llamante se detiene, ya que no solamente le transfiere informacin al subprograma,
sino tambin el control de ejecucin; esto hace que se active el subprograma, se les
d valor a las variables que lo conforman y se ejecuten una a una las instrucciones.
Una vez que finaliza su ejecucin, tiene la informacin requerida por el programa
llamante; por lo tanto, se la entrega y devuelve el control de ejecucin a la
instruccin siguiente o a la misma instruccin desde donde fue llamado,
dependiendo de la clase de subprograma.
En la figura tambin se muestra que un algoritmo puede invocar las veces que sea
necesario al mismo subprograma y que un subprograma puede, a su vez, invocar a
otros subalgoritmos.
42
Introduccin a dev C++
A. REPRESENTACIN
void
{
El Nombre dado al subprograma debe cumplir con las normas para conformar
nombres de variables y debe ser nico (no pueden existir dos o ms subprogramas
con el mismo nombre en el mismo programa).
Los Parmetros son una lista de campos variables separados por comas y son
utilizados para establecer la comunicacin entre el mdulo que lo activa y el
subprograma. Unos parmetros sern de recibo (almacenan la informacin que les
enva el mdulo que los invoca), y otros de envo de informacin (la transfieren a
quien invoca el subprograma).
Ejemplo 20
Hacer un subprograma que ordene tres nmeros distintos en forma ascendente.
Anlisis
Consiste en detectar cules son los parmetros de recibo, cules los de envo y el
proceso que es necesario hacer para llegar a los parmetros de envo, partiendo de
los de recibo.
Parmetros de recibo
Son las variables que van a recibir informacin del mdulo que los invoca, similares
a los datos de entrada de un programa, con la diferencia de que a los datos de
entrada se les transfiere informacin a travs de una instruccin de lectura y a los
parmetros de recibo se les da informacin a travs del mdulo que invoca el
subprograma; es decir, que se asigna una informacin automtica desde las
variables que envan informacin, desde el mdulo llamante, hacia los parmetros
de recibo del subprograma. Estos parmetros son:
Valor del primer nmero
Valor del segundo nmero
Valor del tercer nmero
Parmetros de envo
Son los parmetros que envan informacin al mdulo que invoca al subprograma,
semejante a los datos de salida de los programas, con la diferencia de que los
parmetros de envo le entregan la informacin a las variables que la reciben,
dentro del mdulo llamante.
43
Introduccin a dev C++
Menor valor
Valor medio
Mayor valor
Proceso
Para determinar el orden ascendente de los tres nmeros, primero se encuentra el
menor de todos a travs de comparaciones entre s y se asigna al menor valor,
luego se encuentra el segundo menor y se asigna al valor medio y el restante, por
defecto, es el valor mayor.
Definicin de variables
ORDEN:
PV:
Primer valor
SV:
Segundo valor
TV:
Tercer valor
MENOR:
Valor menor
MEDIO:
Valor medio
MAYOR:
Valor mayor
B. ACTIVACIN DE UN PROCEDIMIENTO
El subprograma no inicia ni termina por s mismo; por lo tanto, necesita ser activado
(hacerlo funcionar) desde un mdulo externo. Esto se hace cuando el mdulo
llamante necesita la ayuda (para una labor especfica) que hace el mdulo
subordinado. La activacin se hace a travs de la siguiente instruccin.
Formato
Nombre (Argumentos)
Los argumentos son nombres de campos (valores, constantes, variables o
expresiones) que usa el mdulo amplio y que tienen una correspondencia biunvoca
con los parmetros con los cuales se construy el subprograma; por lo tanto, stos
deben ser iguales en nmero y en tipo de dato que los parmetros, ya que a cada
argumento le corresponde un parmetro o viceversa.
Los argumentos tambin son de dos clases: unos que envan informacin al
subprograma y otros que reciben informacin.
Cuando el subprograma es activado, los argumentos de envo son copiados en los
parmetros de recibo, (parmetros de recibo argumentos de envo). Y cuando
el subprograma deja de ejecutarse los parmetros de envo le asignan informacin
a los argumentos de recibo. Por ejemplo, elaborar la instruccin que active el
procedimiento ORDEN. Este subprograma tiene 6 parmetros (tres de recibo y tres
44
Introduccin a dev C++
de envo), por lo tanto, la instruccin que lo invoque debe tener 6 argumentos (tres
de envo y tres de recibo).
Si las variables a utilizar como argumentos son en su orden: N1, N2, N3, MEN, MED
y MAY la instruccin sera.
Orden (N1, N2, N3, MEN, MED, MAY);
Lo que significa lo siguiente:
i. Cuando se activa el subprograma (empieza a ejecutarse).
PV=N1
SV=N2
TV=N3
Por lo tanto N1, N2 y N3 deben tener valor.
ii. Cuando la ORDEN deja de ejecutarse (regresa informacin)
MEN=MENOR
MED=MEDIO
MAY=MAYOR
Los subprogramas tienen tres formas de ubicarse dentro de un programa: antes de
int main, despus del int main o estar dentro de una librera como lo veremos ms
adelante.
#include<iostream>
#include<conio2.h>
using namespace std;
//CODIFICACIN DEL PROCEDIMIENTO ORDEN
void orden(float pv, float sv, float tv, float &menor, float &medio, float &mayor)
{
if((pv<sv) && (pv<tv))
{
menor=pv;
if(sv<tv)
{
medio=sv;
mayor=tv;
}
else
{
medio=tv;
mayor=tv;
}
}
else
{
45
Introduccin a dev C++
if(sv<tv)
{
menor=sv;
if(pv<tv)
{
medio=pv;
mayor=tv;
}
}
else
{
menor=tv;
if(pv<sv)
{
medio=pv;
mayor=sv;
}
else
{
medio=sv;
mayor=pv;
}
}
}
}
//PROGRAMA QUE INVOCA AL PROCEDIMIENTO ORDEN
int main()
{
float n1,n2,n3,men,med,may; int i;//n1,n2 y n3,men,med y may son los argumentos
textbackground(0);
textcolor(YELLOW);
gotoxy(8,8);
cout<<"ENTRE EL PRIMER VALOR: "; cin>>n1;
gotoxy(8,10);
cout<<"ENTRE EL SEGUNDO VALOR:"; cin>>n2;
gotoxy(8,12);
cout<<"ENTRE EL TERCER VALOR: "; cin>>n3;
orden(n1,n2,n3,men,med,may);
clrscr();
textcolor(RED);
gotoxy(6,7);
cout<<"VALORES ORDENADOS EN ORDEN ASCENDENTE";
gotoxy(7,10);
cout<<"VALOR MENOR:"; cout<<men;
gotoxy(7,11); cprintf("VALOR MEDIO:"); cout<<med;
textcolor(5);
gotoxy(7,12); cprintf("VALOR MAYOR:");cout<<may<<endl;
textcolor(6);
system("pause");
}
46
Introduccin a dev C++
{
float n1,n2,n3,men,med,may; int i;//n1,n2 y n3,men,med y may son los argumentos
textbackground(0);
textcolor(YELLOW);
gotoxy(8,8);
cout<<"ENTRE EL PRIMER VALOR: "; cin>>n1;
gotoxy(8,10);
cout<<"ENTRE EL SEGUNDO VALOR:"; cin>>n2;
gotoxy(8,12);
cout<<"ENTRE EL TERCER VALOR: "; cin>>n3;
orden(n1,n2,n3,men,med,may);
clrscr();
textcolor(RED);
gotoxy(6,7);
cout<<"VALORES ORDENADOS EN ORDEN ASCENDENTE";
gotoxy(7,10);
cout<<"VALOR MENOR:"; cout<<men;
gotoxy(7,11); cprintf("VALOR MEDIO:"); cout<<med;
textcolor(5);
gotoxy(7,12); cprintf("VALOR MAYOR:");cout<<may<<endl;
textcolor(6);
system("pause");
}//FIN MAIN
void orden(float pv, float sv, float tv, float &menor,
float &medio, float &mayor)
{
if((pv<sv) && (pv<tv))
{
menor=pv;
if(sv<tv)
{
medio=sv;
mayor=tv;
}
else
{
medio=tv;
mayor=tv;
}
}
else
{
if(sv<tv)
{
menor=sv;
if(pv<tv)
{
medio=pv;
mayor=tv;
}
}
else
{
menor=tv;
if(pv<sv)
{
medio=pv;
mayor=sv;
}
47
Introduccin a dev C++
else
{
medio=sv;
mayor=pv;
}
}
}
}
Ejemplo 21
Elaborar un programa que utilice un procedimiento que encuentre la suma y el
promedio de N nmeros.
#include<iostream>
#include<conio2.h>
using namespace std;
/* Codificacin del procedimiento, n parmetro de recibob
sum y prom parmetros de envo*/
void sumprom(int n, float &sum, float &prom)
{
int i;
float numero;
sum=0;
clrscr();
textcolor(WHITE);
textbackground(RED);
for (i=1;i<=n;i++)
{
gotoxy(20,4+i);
cout<<"DIGITE EL NUMERO "<< i<<": ";
cin>>numero;
sum+=numero;
}
prom=sum/n;
}
int main()
{
int num;
float suma, promedio;
system("cls");
gotoxy(20,12);
cout<<"DIGITE LA CANTIDAD DE NUMEROS: ";
cin>>num;
sumprom(num,suma,promedio);
clrscr();
gotoxy(20,12);
cout<<"LA SUMA ES: "<<suma<<"
Y EL PROMEDIO: "<<promedio;
gotoxy(20,14);
system("pause");
}
4.1.2. FUNCIONES
Son subprogramas que le devuelven al programa o subprograma que los invoca un
nico valor. El valor que stas devuelven se hace a travs de una variable,
48
Introduccin a dev C++
Ejemplo 22
Elaborar un programa que utilice una funcin que encuentre el valor mayor en un
conjunto de 3 nmeros reales diferentes. La funcin debe retornar el mayor entre
los tres nmeros.
#include<iostream>
#include<conio2.h>
using namespace std;
float mayor(float n1,float n2, float n3)//n1, n2, y n3 parmetros de recibo
{
float valmay;
if((n1>n2) && (n1>n3))
valmay=n1;
else
if(n2>n3)
valmay=n2;
else
valmay=n3;
return valmay;
}
int main()
{
float NUM1,NUM2,NUM3,NUM_MAYOR;
clrscr();
gotoxy(25,10); textcolor(YELLOW);
cprintf("ENTRE EL PRIMER VALOR :"); cin>>NUM1;
gotoxy(25,12); textcolor(LIGHTBLUE);
cprintf("ENTRE EL SEGUNDO VALOR:"); cin>>NUM2;
gotoxy(25,14); textcolor(LIGHTRED);
cprintf("ENTRE EL TERCER VALOR :"); cin>>NUM3;
NUM_MAYOR=mayor(NUM1,NUM2,NUM3);
clrscr();
gotoxy(10,12);
49
Introduccin a dev C++
Ejemplo 24
Elaborar un programa que utilice una funcin que determine si un nmero es primo
o no.
50
Introduccin a dev C++
#include<iostream>
#include<conio2.h>
using namespace std;
char primo(int n)
{
int mitad=n/2,i=2;
char res='N';
while((i<=mitad) && (n % i !=0))
i++;
if(i > mitad)
res='S';
return res;
}
/*Observe que el ciclo se rompe cuando n% i es igual a cero, es decir, se le encontr
un divisor a n. A esto se le denomina rompimiento de ciclos. Puede hacerse tambin con
una bandera o switche */
int main()
{
int num;
clrscr();
gotoxy(20,12); textcolor(6); textbackground(BLUE);
cprintf("ENTRE EL NMERO:
");
gotoxy(36,12); cin>>num; clrscr();
gotoxy(30,12); textcolor(LIGHTRED);
if(primo(num) =='S')
cout<<num<<" ES PRIMO";
else
cout<<num<<" NO ES PRIMO";
gotoxy(20,20); cout<<"PRESIONE TECLA PARA TERMINAR";
getch();
}
4.1.3. LIBRERAS
Una librera hecha por el programador est formada por subprogramas previamente
diseados, que pueden ser utilizados por el programador para realizar las
operaciones que hacen los subprogramas que la conforman, sin que estos
subprogramas estn en el programa principal que las invoca.
Son como un archivo amplio llamado archivo de cabecera que se crea y se
guarda con un nombre especfico anexndole la extensin .h, por ejemplo
entorno.h. Esta extensin la colocamos nosotros ya que no se hace por defecto, por
lo que una librera no se puede compilar.
Cuando la librera se coloque en el encabezado del programa, para diferenciarla de
las libreras del compilador, se coloca entre comillas dobles, colocando la ruta
donde se encuentra almacenada la librera, por ejemplo, si la librera llamada
entorno1.h est guardada en el disco C, en la carpeta libreras, el encabezado sera
el siguiente:
#includeC:\librerias\entorno.h, pero si la librera est guardada en la misma
carpeta donde est el programa que la utiliza, el encabezado simplemente sera:
#includeentorno.h.
Ejemplo 25
51
Introduccin a dev C++
#include<iostream>
#include<conio2.h>
#include<windows.h>
using namespace std;
void cuadro(int fi, int ci, int ff, int cf)
{
/* fi: fila inicial donde inicia el cuadro, ci columna inicial
ff fila final donde finaliza el cuadro, cf columna final*/
int i;
clrscr();
for(i=(ci+1);i<cf;i++)
{
gotoxy(i,fi);
cout<<char(196);
//caracter
gotoxy(i,ff);
cout<<char(196);
//caracter
}
for(i=fi+1;i<ff;i++)
{
gotoxy(ci,i);
cout<<char(179);
// caracter
gotoxy(cf,i);
cout<<char(179);
//caracter
}
gotoxy(ci,fi);
cout<<char(218); //Esquina superior izquierda caracter
gotoxy(cf,fi);
cout<<char(191); //Esquina superior derecha
caracter
gotoxy(ci,ff);
cout<<char(192); //Esquina inferior izquierda caracter
gotoxy(cf,ff);
cout<<char(217); //Esquina inferior derecha
caracter
}
//***************************************************************************
void orden(float pv, float sv, float tv, float &menor,
float &medio, float &mayor)
{
if((pv<sv) && (pv<tv))
{
menor=pv;
if(sv<tv)
{
medio=sv;
mayor=tv;
}
else
{
medio=tv;
mayor=tv;
}
52
Introduccin a dev C++
}
else
{
if(sv<tv)
{
menor=sv;
if(pv<tv)
{
medio=pv;
mayor=tv;
}
}
else
{
menor=tv;
if(pv<sv)
{
medio=pv;
mayor=sv;
}
else
{
medio=sv;
mayor=pv;
}
}
}
}
//*********************************************************************************
void sumprom(int n, float &sum, float &prom)
{
int i;
float numero;
sum=0;
clrscr();
textcolor(WHITE);
textbackground(RED);
for (i=1;i<=n;i++)
{
gotoxy(20,4+i);
cout<<"DIGITE EL NMERO "<< i<<" ";
cin>>numero;
sum+=numero;
}
prom=sum/n;
}
//****************************************************************************
float mayor(float n1,float n2, float n3)//n1, n2, y n3 parmetros de recibo
{
float valmay;
if((n1>n2) && (n1>n3))
valmay=n1;
else
if(n2>n3)
valmay=n2;
else
valmay=n3;
return valmay;
}
53
Introduccin a dev C++
Ejemplo 26
Programa que hace uso de los subprogramas que contiene milibreria.h.
#include "milibreria.h"
int main()
{
float pv, sv, tv, menor, medio ,mayor1,sum, prom, n1,n2,n3,valmay;
int opcion,n;
do
{
clrscr();
textbackground(WHITE); textcolor(BLUE);
cuadro(7,19, 19, 62);
gotoxy(36,9); cout<<"MEN";
gotoxy(21,11); cout<<"1: TRES NMEROS ORDENADOS";
gotoxy(21,12); cout<<"2: SUMA Y PROMEDIO DE N NMEROS";
gotoxy(21,13); cout<<"3: MAYOR ENTRE TRES NMEROS";
gotoxy(21,14); cout<<"4 SALIR DEL MEN";
gotoxy(21,16); cout<<"SELECCIONE LA OPCIN DESEADA: ";
cin>>opcion;
switch(opcion)
{
case 1: clrscr();
textbackground(WHITE);
textcolor(MAGENTA);
gotoxy(8,8);
cprintf("ENTRE EL PRIMER VALOR: "); cin>>pv;
gotoxy(8,10);
cprintf("ENTRE EL SEGUNDO VALOR:"); cin>>sv;
gotoxy(8,12);
cprintf("ENTRE EL TERCER VALOR: "); cin>>tv;
orden(pv,sv,tv, menor,medio,mayor1);
clrscr();
textcolor(RED);
gotoxy(6,7);
cprintf("VALORES ORDENADOS EN ORDEN ASCENDENTE");
gotoxy(7,10);
cprintf("VALOR MENOR:"); cout<<menor;
gotoxy(7,11); cprintf("VALOR MEDIO:"); cout<<medio;
textcolor(5);
gotoxy(7,12); cprintf("VALOR MAYOR:");cout<<mayor1<<endl;
textcolor(6);
system("pause");
break;
case 2: system("cls");
gotoxy(20,12);
cout<<"DIGITE LA CANTIDAD DE NMEROS: ";
cin>>n;
sumprom(n,sum,prom);
gotoxy(20,12);
cout<<"LA SUMA ES: "<<sum<<"
Y EL PROMEDIO: "<<prom;
gotoxy(20,16);
system("pause");
break;
54
Introduccin a dev C++
case 3: clrscr();
gotoxy(25,10); textcolor(CYAN);
cprintf("ENTRE EL PRIMER VALOR :"); cin>>n1;
gotoxy(25,12); textcolor(LIGHTBLUE);
cprintf("ENTRE EL SEGUNDO VALOR:"); cin>>n2;
gotoxy(25,14); textcolor(LIGHTRED);
cprintf("ENTRE EL TERCER VALOR :"); cin>>n3;
valmay=mayor(n1,n2,n3);
clrscr();
gotoxy(10,12);
cout<<"EL VALOR MAYOR ENTRE: "<<n1<<" , "<<n2<<" Y "<<
n3<<" ES: "<<valmay; textcolor(6);
gotoxy(20,20);cout<<"PRESIONE TECLA PARA TERMINAR";
getch();
break;
case 4: system("cls");
gotoxy(20,12);
cout<<"GRACIAS POR USAR EL PROGRAMA";
Sleep(2000);
break;
} //fin casos
}while (opcion !=4);
}
char numestc[8];
dgitos.*/
int numest;
cin>>numestc;
Esto ocurre con la validacin de nmeros de cualquier tipo. En las variables de tipo
caracter, solo es necesaria la variable de tipo caracter, es decir, no tenemos
necesidad de hacer una conversin.
A.2 Validacin de nmeros reales: float, double o long double. En esta
funcin el usuario slo puede digitar nmeros, el signo menos y el punto decimal
que puede estar al principio o intermedio de la hilera de dgitos, no permite que se
coloquen dos veces el punto decimal. La funcin es:
double validarReal(char numc[]). Su uso es similar al de
vaidarEntero(numc[]), solo que aqu se define como variable numrica una variable
de cualquier tipo de los arriba mencionados. La funcin utiliza
strtod para la conversin de caracteres a dgitos con el punto decimal o sin l.
A.3 Validacin de nmeros reales positivos: float, doubl o long doubl.
Su uso es igual que la anterior
pero no deja que se coloque el signo menos. El nombre de la funcin es:
56
Introduccin a dev C++
<<endl;
cin.getline(nombre,48);
Donde fi=fila inicial; ci= columna inicial; ff=fila final y cf = columna final
Este procedimiento genera un cuadro con lnea sencilla iniciando en la fila fi,
columna ci y finalizando en la fila ff y columna cf. Usted puede colocar el cuadro en
cualquier lugar de la pantalla y con el ancho y largo que desee. Ejemplo: cuadros(5,
20, 17,55);
El cuadro se construye a partir de la fila 5 columna 20 y finaliza en la fila 17
columna 55.
57
Introduccin a dev C++
C.2
void cuadro1()
58
Introduccin a dev C++
{
cout.setf(ios::fixed);
short nc,i;
long long numeroEntero;
do{
char siga='S';
i=0;
nc=strlen(numc);
if((numc[0]=='-')&&(nc>1))
i++;
while((i<nc)&&(siga=='S')){
if(isdigit(numc[i]) !=0)
i++;
else{
siga='N';
// clrscr();
gotoxy(10,24);
cout<<"DIGITE SLO NMEROS ENTEROS, VUELVA A DIGITAR ";
cin>>ws;
cin.getline(numc,20);
gotoxy(10,24);
cout<<"
";
}
}
}
while(i<nc);
numeroEntero=atoll(numc);
return numeroEntero;
}
/*************************************************************************************
*****************************
/* ESTA FUNCIN VALIDA UN NMERO FLOAT O DOUBLE Y DEVUELVE
EL NMERO DIGITADO VALIDADO, ES DECIR,
EL NMERO SEA POSITIVO
RETORNA UN double */
59
Introduccin a dev C++
char siga='S';
int p=0;
nc=strlen(numc);
if(strcmpi(numc,".")==0)
numc[i]='N';
while((i<nc)&&(siga=='S')){
if((isdigit(numc[i]) !=0) || ((numc[i]=='.')&&(p==0))){
i++;
if(numc[i-1]=='.')
p++;
}
else{
siga='N';
//clrscr();
gotoxy(10,24);
cout<<"DIGITE NMEROS POSITIVOS, VUELVA A DIGITAR ";cin>>ws;
cin.getline(numc,20);
gotoxy(10,24);
cout<<"
";
}
}
}
while(i<nc);
numeroReal=strtod(numc,'\0');
return numeroReal;
}
/
**************************************************************************************
*****************
/* ESTA FUNCIN VALIDA UN NMERO ENTERO: SHORT, INT O LONG, DEVUELVE
EL NMERO DIGITADO VALIDADO, ES DECIR,
SEA POSITIVO
numeroEntero;
do{
char siga='S';
i=0;
nc=strlen(numc);
while((i<nc)&&(siga=='S')){
if(isdigit(numc[i]) !=0)
i++;
60
Introduccin a dev C++
else{
siga='N';
//clrscr();
gotoxy(10,24);
cout<<"DIGITE NMEROS ENTEROS POSITIVOS, VUELVA A DIGITAR ";cin>>ws;
cin.getline(numc,20);
gotoxy(10,24);
cout<<"
";
}
}
}
while(i<nc);
numeroEntero=atoll(numc);
return numeroEntero;
}
/
*/************************************************************************************
**************************
ESTE PROCEDIMIENTO CONTROLA QUE EL USUARIO SLO DIGITE LETRAS (MAYSCULAS O
MINSCULAS, SI NO HAY ERRORES SIGA TRABAJANDO NORMALMENTE*/
61
Introduccin a dev C++
}
/**************************************************************
EL PROCEDIMIENTO validaMayusculas CHEQUEA QUE UNA VARIABLE TIPO CARACTER NO
ALMACENE SINO LETRAS MAYSCULAS.
CORRECTO */
//caracter
gotoxy(i,ff);
cout<<char(196);
//caracter
62
Introduccin a dev C++
}
for(i=fi+1;i<ff;i++){
gotoxy(ci,i);
cout<<char(179);
//
caracter
gotoxy(cf,i);
cout<<char(179);
//caracter
}
gotoxy(ci,fi);
cout<<char(218); //Esquina superior izquierda caracter
gotoxy(cf,fi);
cout<<char(191); //Esquina superior derecha
caracter
gotoxy(ci,ff);
cout<<char(192); //Esquina inferior izquierda caracter
gotoxy(cf,ff);
cout<<char(217); //Esquina inferior derecha
caracter
}
//****************************************************************
/* ESTE PROCEDIMIENTO FORMA UN CUADRO EN PANTALLA CON CUADROS INTERNOS. EL
PROCEDIMIENTO INSERTA EL CUADRO EN UN LUGAR PREDETERMINADO EN LA PANTALLA*/
void cuadro1()
{
int i;
for(i=1;i<=49;i++){
gotoxy(15+i,5);
cout<<char(178);
gotoxy(15+i,22);
cout<<char(178);
gotoxy(15+i,9);
cout<<char(178); Sleep(100);
}
for(i=1;i<=18;i++){
gotoxy(16,4+i);
cout<<char(177);
gotoxy(65,4+i);
cout<<char(177); Sleep(100);
}
for(i=1;i<=3;i++){
gotoxy(33,5+i);
cout<<char(177);
gotoxy(47,5+i);
cout<<char(177);
}
63
Introduccin a dev C++
}
/****************************************************************
ESTE PROCEDIMIENTO FORMA UN CUADRO EN PANTALLA CON UN SUBCUADRO SUPERIOR CON
LNEA DOBLE*/
void cuadro2()
{
int i;
for (i=1;i<=70;i++){
gotoxy(5+i,5);
cout<<char(205);
gotoxy(5+i,19);
cout<<char(205);
}
for(i=1;i<=13;i++){
gotoxy(5,5+i);
cout<<char(186);
gotoxy(76,5+i);
cout<<char(186);
}
gotoxy(5,19);
cout<<char(200);
gotoxy(5,5);
cout<<char(201);
gotoxy(76,5);
cout<<char(187);
gotoxy(76,19);
cout<<char(188);
for(i=1;i<=70;i++){
gotoxy(5+i,7);
cout<<char(205);
}
}
//*****************************************************************
//CUADRO CON LNEA DOBLE
void cuadrod(int fi,int ci,int ff,int cf)
{
int i;
for(i=(ci+1);i<cf;i++){
gotoxy(i,fi);
cout<<char(205);
//caracter
gotoxy(i,ff);
64
Introduccin a dev C++
cout<<char(205);
//caracter
}
for(i=(fi+1);i<ff;i++){
gotoxy(ci,i);
cout<<char(205);
// caracter
gotoxy(cf,i);
cout<<char(205);
//
caracter
//
caracter
}
for(i=fi+1;i<ff;i++){
gotoxy(ci,i);
cout<<char(186);
gotoxy(cf,i);
cout<<char(186);
//caracter
}
gotoxy(ci,fi);
cout<<char(201);
//caracter
gotoxy(cf,fi);
cout<<char(187);
// caracter
gotoxy(ci,ff);
cout<<char(200);
//
caracter
//
caracter
gotoxy(cf,ff);
cout<<char(188);
}
/*******************************************************************
ESTE PROCEDIMIENTO GENERA UN CUADRO, DESDE UN TAMAO PEQUEO HASTA LLEGAR A UNO MS
GRANDE.
LA POSICIN DEL CUADRO ES FIJA EN LA PANTALLA*/
void cuadroMenosAmas()
{
int v,q,w,z,cont,i;
v=12;
q=12;
w=40;
z=40;
cont=1;
while(cont <=12){
clrscr();
for(i=w;i<=z;i++){
gotoxy(i,v);
cout<<'';
gotoxy(i,q);
cout<<'';
}
65
Introduccin a dev C++
for(i=v;i<=q;i++){
gotoxy(w,i);
cout<<'';
gotoxy(z,i);
cout<<'';
}
Sleep(450);
w=w-3;
v=v-1;
z=z+3;
q=q+1;
cont=cont+1;
}
}
/***********************************************************************************
ESTE PROCEDIMIENTO COLOCA LOS CARACTERES C++, DENTRO DEL CUADRO CUADROMENOSAMAS*/
void escribeCmasMas()
{
cuadroMenosAmas();
textbackground(3);textcolor(BLUE);
gotoxy(31,4);cprintf("P R A C T I C A
1 ");
gotoxy(15,6);textcolor(LIGHTGREEN); textbackground(0);
cprintf("
");cout<<endl;
");cout<<endl;
");cout<<endl;
");cout<<endl;
gotoxy(15,7);
cprintf("
gotoxy(15,8);
cprintf("
gotoxy(15,9);
cprintf("
gotoxy(15,10);
cprintf("
");cout<<endl;
gotoxy(15,11);
cprintf("
");cout<<endl;
");cout<<endl;
");cout<<endl;
");cout<<endl;
");cout<<endl;
");cout<<endl;
gotoxy(15,12);
cprintf("
gotoxy(15,13);
cprintf("
gotoxy(15,14);
cprintf("
gotoxy(15,15);
cprintf("
gotoxy(15,16);
cprintf("
66
Introduccin a dev C++
gotoxy(15,17);
cprintf("
");cout<<endl;
textbackground(3); textcolor(WHITE);
gotoxy(25,22);cprintf("PRESIONE TECLA PARA CONTINUAR ");
getch();
textbackground(0);
}//Fin entorno.h
//*******************************************************************
EJEMPLO 28
Validacin de nmeros enteros
Vamos a hace una demostracin de validacin de nmeros enteros (short, int, long
long, float, double y long doubl), utilizando la librera anterior ENTORNO.H.
/* PROGRAMA QUE VALIDA NMEROS ENTEROS Y REALES*/
#include"entorno.h"
int main()
{
// VALIDAR UN SHORT
Short,
clrscr();
gotoxy(10,8);
cout<<"DIGITE UN ENTERO PARA ALMACENAR EN 16 BITS ";
cin>>numc; //Observe se lee un tipo char, usted va a trabajar con num
/*VIENE LA VALIDACIN, PRUEBE ENTRANDO LETRAS U OTROS CARACTERES
EL RANGO DE short */
67
Introduccin a dev C++
numl,resultadol;
char numlc[20];
clrscr();
gotoxy(10,8);
cout<<"DIGITE UN ENTERO PARA ALMACENAR EN 64 BITS ";
cin>>numlc; //Observe se lee un tipo char, usted va a trabajar con numl
EL
/*VIENE LA VALIDACIN, PRUEBE ENTRANDO LETRAS U OTROS CARACTERES TENGA CUIDADO CON
RANGO DE long*/
/*VIENE LA VALIDACIN, PRUEBE ENTRANDO LETRAS U OTROS CARACTERES TENGA CUIDADO CON
RANGO DE float*/
68
Introduccin a dev C++
/*VIENE LA VALIDACIN, PRUEBE ENTRANDO LETRAS U OTROS CARACTERES TENGA CUIDADO CON
RANGO DE double*/
double numld,resultadold;
char numdlc[20];
clrscr();
gotoxy(10,8);
cout<<"DIGITE UN REAL PARA ALMACENAR EN 96 BITS ";
cin>>numdlc; //Observe se lee un tipo char, usted va a trabajar con numld
EL
/*VIENE LA VALIDACIN, PRUEBE ENTRANDO LETRAS U OTROS CARACTERES TENGA CUIDADO CON
RANGO DE long double*/
69
Introduccin a dev C++
system("pause");
/************************************************************************************/
/*VALIDAR REAL POSITIVO, FLOAT, DOUBLE O LONG DOUBLE*/
float numfp,resultadofp;
char numfcp[20];
clrscr();
gotoxy(10,8);
cout<<"DIGITE UN REAL POSITIVO (FLOAT) ";
cin>>numfcp; //Observe se lee un tipo char, usted va a trabajar con numfp
/*VIENE LA VALIDACIN, PRUEBE ENTRANDO LETRAS U OTROS CARACTERES TENGA CUIDADO CON
EL RANGO DE float*/
numfp=validarRealPositivo(numfcp);/* Si se cometen errores corrjalos y si no siga
trabajando con numf*/
//SIGA CON LAS DEMS INSTRUCCIONES DE SU PROGRAMA
resultadofp=numfp+50;
clrscr();
gotoxy(20,12); cout<<"EL RESULTADO ES :"<<resultadofp<<endl;
system("pause");
/
**************************************************************************************
***/
/*VALIDAR ENTERO POSITIVO, SHORT, INT, LONG */
int numiP, resultadoiP;
char numcP[16];
clrscr();
gotoxy(10,8);
cout<<"DIGITE UN ENTERO POSITIVO
";
/*VIENE LA VALIDACIN, PRUEBE ENTRANDO LETRAS U OTROS CARACTERES TENGA CUIDADO CON
RANGO DE int*/
EJEMPLO 29
70
Introduccin a dev C++
MAYSCULAS
SOLAMENTE*/
validarMayusculas(hileram);/*Si todo es correcto, NO SAC NINGN ERROR, siga
trabajando*/
cout<<"\n\n USTED DIGITO "<<hileram<<endl;/* Nota: esto no es necesario en su
programa*/
system("pause");
}
EJEMPLO 30
Ejemplo que muestra los cuadros que estn en la librera entorno.h uno por uno.
/* DEMOSTRACIN DE DIVERSOS CUADROS EN LA PANTALLA*/
#include"entorno.h"
int main()
{
/* USO cuadros(fi,ci,ff,cf);
71
Introduccin a dev C++
cuadro1();
TAMAO DEL
CUADRO Y SU POSICIN*/
72
Introduccin a dev C++
clrscr();
cuadrod(6,20,18,60);
gotoxy(38,7);
cout<<"MENU";
gotoxy(22,8);
cout<<"1: DEMOSTRACION";
gotoxy(20,24);
system("pause");
/*Uso cuadroMenosAmas();
/* Este cuadro comienza a formarse desde un tamao pequeito y va creciendo hasta
formarse el cuadro total*/
clrscr();
cuadroMenosAmas();
gotoxy(38,3);
cout<<"MENU";
gotoxy(10,6);
cout<<"1: DEMOSTRACION";
gotoxy(20,24);
system("pause");
/* Este procedimiento coloca las letras C++, dentro del cuadroMenosAmas()*/
clrscr();
escribeCmasMas();
}
5. EXCEPCIONES
El problema de la seguridad es uno de los clsicos quebraderos de cabeza de la
programacin. Los diversos lenguajes han tenido siempre que lidiar con el mismo
problema: qu hacer cuando se presenta una circunstancia verdaderamente
imprevista? (por ejemplo un error). El asunto es especialmente importante si se
trata de lenguajes para escribir programas de "Misin crtica"; digamos por ejemplo,
controlar los ordenadores de una central nuclear o de un sistema de control de
trfico areo.
Antes que nada, digamos que (en el lenguaje de los programadores C++) estas
"circunstancias imprevistas" reciben el nombre de excepciones, por lo que el
sistema que implementa C++ para resolver estos problemas recibe el nombre de
manejador de excepciones.
As pues, las excepciones son condiciones
73
Introduccin a dev C++
excepcionales que pueden ocurrir dentro del programa durante su ejecucin. Por
ejemplo, que ocurra una divisin por cero, se agote la memoria disponible, etc., que
requieren recursos especiales para su control.
En este captulo trataremos el manejador de excepciones C++; una serie de
tcnicas que permiten formas normalizadas de manejar los errores, intentando
anticiparse a los problemas potenciales previstos e imprevistos; as como permitir
al programador reconocerlos, fijar su ubicacin y corregirlos.
5.1.1. TRY
En sntesis, cuando el programa se prepara para cierta accin, decimos que "lo
intenta". Para ello se especifica un bloque de cdigo cuya ejecucin se va a intentar
("try-block") utilizando la palabra clave try.
try {
...
}
// bloque de cdigo-intento
74
Introduccin a dev C++
5.1.2. THROW
Si se detecta una circunstancia excepcional dentro del bloque-intento, se lanza una
excepcin mediante la ejecucin de una sentencia throw. Por ejemplo:
if (condicion) throw "overflow";
Es importante advertir que, salvo los casos en que la excepcin es lanzada por las
propias libreras C++ (como consecuencia de un error 1.6.1a), stas no se lanzan
espontneamente.
Es el programador el que debe utilizar una sentencia
(generalmente condicional) para, en su caso, lanzar la excepcin.
El lenguaje C++ especifica que todas las excepciones deben ser lanzadas desde el
interior de un bloque-intento y permite que sean de cualquier tipo. Como se ha
apuntado antes, generalmente son un objeto (instancia de una clase) que contiene
informacin. Este objeto es creado y lanzado en el punto de la sentencia throw y
capturado donde est la sentencia catch. El tipo de informacin contenido en el
objeto es justamente el que nos gustara tener para saber qu tipo de error se ha
producido. En este sentido puede pensarse en las excepciones como en una
especie de correos que transportan informacin desde el punto del error, hasta el
sitio donde esta informacin puede ser analizada.
5.1.3. CATCH
Esta parte del programa se denomina manejador ("handler"). Se dice que el
"handler" captura la excepcin. El handler es un bloque de cdigo diseado para
manejar la excepcin, precedido por la palabra catch. El lenguaje C++ requiere
75
Introduccin a dev C++
6. ARREGLOS
76
Introduccin a dev C++
IND
k+I
I * jota - 1
Definicin de un vector
Sintaxis:
Tipo de dato Nombre del arreglo[cantidad de elementos a separar en memoria];
Por ejemplo definir un vector que pueda almacenar hasta
elementos de tipo flotante.
20 posiciones o
float valores[20];
77
Introduccin a dev C++
Tambin se puede definir en una forma dinmica y, en este caso, puede almacenar
cualquier cantidad de elementos, es decir, no se tiene la limitante de memoria
separada y se define as:
float *valores;
Donde valores es un nombre general y, para tener acceso a su contenido, hay que
hacerlo elemento a elemento.
Donde valores[0] hace referencia al valor almacenado en la posicin cero, cada
posicin del arreglo valores tiene un tamao de 4 bytes (cantidad de memoria que
asigna el tipo de dato).
char nombre[48];
78
Introduccin a dev C++
#include<conio2.h>
int main()
{
int indice=0;
int edad[5];
while(indice<5)
{
edad[indice]=0;
indice++;
}
}
Ejemplo 32
Elaborar un programa que encuentre la suma y el promedio de N valores que se
almacenarn en un vector.
Definicin de variables
n:
k:
v:
suma:
prom:
#include<iostream>
#include<conio2.h>
using namespace std;
int main()
79
Introduccin a dev C++
{
int n, k,; float v[50], suma=0, prom;
clrscr(); textbackground(0);
textbackground(WHITE); textcolor(6); gotoxy(20,12);
cprintf("ENTRE LA CANTIDAD DE ELEMENTOS:
");
gotoxy(51,12); cin>>n; textbackground(0);
for(k=0; k<n; k++) //C++ ALMACENA LOS ARREGLOS DESDE LA POSICIN 0
{
textbackground(0);
clrscr(); textbackground(WHITE); textcolor(RED);
gotoxy(20,12);
cout<<"ENTRE EL ELEMENTO: " <<k+1<<" DEL VECTOR:
";
cin>>v[k];
suma+=v[k];
}
prom=suma/n;
clrscr(); textbackground(0);
textcolor(YELLOW);
gotoxy(30,11); cout.precision(2); cout.setf(ios::fixed);
//coloca dos decimales y obliga a que se pongan los ceros, si no hay decimales
cprintf("LA SUMA ES:
"); gotoxy(41,11); cout<<suma;
gotoxy(30,13);
cprintf("Y EL PROMEDIO ES:
"); gotoxy(47,13); cout<<prom;
gotoxy(30,24); cprintf("PRESIONE TECLA PARA TERMINAR");
getch();
}
Ejemplo 33
Hacer un algoritmo que calcule el valor promedio, la varianza y la desviacin tpica
de un grupo de datos enteros positivos, dispuestos de a uno, por registro.
Definicin de variables
dato:
n:
contador de valores e ndice del vector, que al final del ciclo cualitativo
de entrada de datos, tendr almacenado la cantidad de elementos
almacenados en el vector.
x:
suma1:
prom:
i:
suma2:
variable suma1?
var:
dt:
desviacin tpica
#include<iostream>
#include<conio2.h>
#include<math.h>
using namespace std;
int main()
80
Introduccin a dev C++
{
int dato, n=-1, i; long suma1=0;
int x[50]; float var, prom, dt,suma2=0;
clrscr(); textbackground(0);
gotoxy(20,12); textcolor(LIGHTGREEN);
cprintf("ENTRE UN DATO O CERO PARA TERMINAR:
");
gotoxy(55,12); cin>>dato;
while(dato !=0)
{
suma1+=dato;
n++;
x[n]=dato;textbackground(0);
clrscr();
gotoxy(20,12); textcolor(LIGHTGREEN); textbackground(6);
cprintf("ENTRE UN DATO O CERO PARA TERMINAR:
");
textbackground(0); gotoxy(55,12); cin>>dato;
}
n++;
prom=float (suma1)/(n);
for(i=0; i<n; i++)
suma2+=pow(x[i] - prom,2);
var=float(suma2)/(n-1);
dt=sqrt(var); cout.precision(2);
cout.setf(ios::fixed,ios::floatfield);
clrscr(); textbackground(WHITE);
textcolor(RED);
gotoxy(10,12);
cprintf("PROMEDIO=
VARIANZA=
");
cprintf("DESVIACIN TPICA=
");
gotoxy(19,12); cout<<prom;
//Escribe despus de PROMEDIO
gotoxy(37,12); cout<<var;
//Escribe despus de VARIANZA
gotoxy(67,12); cout<<dt;
//Escribe despus de DESVIACIN TPICA
gotoxy(30,20); cprintf("PRESIONE TECLA PARA TERMINAR");
getch();
}
Ejemplo 34
Elaborar una funcin que encuentre la posicin del mayor elemento de un vector de
tamao N y el programa que la invoque;
#include<iostream>
#include<conio2.h>
using namespace std;
int posmay(int n, float vec[])
{
//n tamao del vector; vec: el vector; mayor: asume el valor mayorv del vector
//posm: posicin dentro del vector donde est el valor mayor
int i, posm=0; float mayor;
mayor=vec[0];
for(i=1; i<n; i++)
if(mayor < vec[i])
{
mayor=vec[i];
posm=i;
}
return posm;
}
81
Introduccin a dev C++
main()
//tv tamao del vector; posmayor: posicin donde est el valor mayor: a: el
//vector
int tv,i,posmayor; float a[50];
clrscr();
textbackground(0); textcolor(LIGHTGREEN); textbackground(CYAN);
gotoxy(20,12);
cprintf("ENTRE LA CANTIDAD DE ELEMENTOS:
");
textbackground(0); gotoxy(51,12); cin>>tv;
for(i=0; i<tv; i++)
{
clrscr(); gotoxy(20,12); textbackground(RED);
cout<<"ENTRE EL ELEMENTO: "<<i+1<<" DEL VECTOR: ";
cin>>a[i]; textbackground(0);
}
textbackground(0);
posmayor=posmay(tv,a); clrscr();
clrscr(); gotoxy(15,12);
cprintf("EL VALOR MAYOR EST EN LA POSICIN:
DEL VECTOR");
textbackground(0); gotoxy(50,12); cout<<posmayor;
gotoxy(20,25); cprintf("PRESIONE TECLA PARA TERMINAR");
textbackground(0); getch();
Bsqueda
Ordenacin
Insercin
Borrado
Bsqueda Binaria
Bsqueda HASH
rboles de bsqueda
82
Mtodo Burbuja
Shell
Por rboles
83
Introduccin a dev C++
55
35
21
15
55
80
35
21
15
55
35
80
21
15
55
35
21
80
15
55
35
21
15
80
55
21
15
80
35
21
55
15
80
35
21
15
55
80
Tercera pasada:
21
35
15
55
80
21
15
35
55
80
55
80
Cuarta pasada:
15
35
Note que, despus del cuarto intercambio, el elemento ubicado en la posicin cinco,
de por s queda ordenado; adems no hay ms elementos con quien compararlo y
se termina el proceso, despus de hacer N-1 intercambios, o buscado N-1 menores.
Ejemplo 35
Construir la librera libVector.h:
#include<iostream>
#include<conio2.h>
using namespace std;
void leerVector(int n, float vec[])
{
int i;
for(i=0; i<n;i++)
{
cout<<"DIGITE EL ELEMENTO. "<<i+1<<" ";
cin>>vec[i];
}
}
//**************************************************************************
void imprimirVector(int n, float vec[])
{
int i;
clrscr();
gotoxy(15,5);
cout<<"ELEMENTOS DEL VECTOR ";
for(i=0;i<n;i++)
cout<<vec[i]<<" ";
}
//******************************************************************
85
Introduccin a dev C++
86
Introduccin a dev C++
pos=i;
for(k=i+1; k<n; k++)
if(menor > a[k])
{
menor=a[k];
pos=k;
}
aux=a[i];
a[i]=menor;
a[pos]=aux;
}
}
//****************************************************************
//*****************************************************************
//PROCEDIMIENTO QUE INSERTA UN VALOR EN UN VECTOR ORDENADO
//SIN DAAR EL ORDENAMIENTO
void insertar(int &tv, float a[], float valin)//valin: valor a insertar
{
int i=0, k;
while((i< tv) && (valin > a[i]))
i++;
tv++;
for(k=(tv-1); k > i; k--)
a[k]=a[k-1];
a[i]=valin;
}
//**************************************************************
//PROCEDIMIENTO QUE BORRA UN VALOR EN UN VECTOR
void borrar(int &tv, float a[], float valorb)//valorb: valor a borrar
{
int i=0, k;
if(tv > 0)
{
while((i < tv) && (valorb != a[i]))
i++;
if(i < tv)
{
for(k=i; k < (tv-1); k++)
a[k]=a[k+1];
tv--;
}
else
{
clrscr();
textcolor(WHITE); textbackground(RED);
gotoxy(20,12); cout<<valorb;
cprintf(" NO EST EN EL ARREGLO");textbackground(0);
}
}
else
{
clrscr();
textcolor(WHITE); textbackground(RED);
gotoxy(20,12);
cprintf(" EL VECTOR EST VACO");cout<<endl;
}
system("pause");
}//fin borrar
Ejemplo 36
87
Introduccin a dev C++
88
Introduccin a dev C++
gotoxy(29,12);
cprintf(" 2: SELECCION");Sleep(100);
gotoxy(29,13);
cprintf(" 3: VOLVER AL MENU PPAL");Sleep(100);
gotoxy(29,16);
cout<<"ELIJA SU OPCION ENTRE 1 Y 3 ";
cin>>opcion1;
switch (opcion1)
{
case 1:
ordenBurbuja(n,a);
break;
case 2:
ordenSeleccion(n,a);
break;
case 3:
textcolor(CYAN); clrscr();
gotoxy(20,12);
textbackground(RED);
cprintf("REGRESA AL MENU PRINCIPAL");Sleep(500);
textbackground(0);
break;
} //FIN CASOS 2
}while(opcion1 !=3);
break;
case 4:
textcolor(CYAN); clrscr();
gotoxy(20,12); textbackground(RED);
cout<<"ENTRE EL VALOR A INSERTAR: ";
cin>>valin;
insertar(n,a,valin);
break;
case 5:
textcolor(CYAN); clrscr();
gotoxy(20,12); textbackground(WHITE);
cout<<"ENTRE EL VALOR A BUSCAR: ";
cin>>valbus;
resp=busquedaBin(n,a,valbus);
if(resp !=-1)
{
gotoxy(20,12); textbackground(WHITE);
cout<<valbus<<" ESTA EN LA POSICION "<<
resp<<" DEL VECTOR:"; textbackground(0);
}
else
{
textcolor(CYAN);
gotoxy(20,12);
cout<<valbus<<" NO ESTA EN EL VECTOR"<<endl;
}
cout<<"\n\n\n";
system("pause");
break;
case 6:
textcolor(CYAN); clrscr();
gotoxy(20,12); textbackground(RED);
cout<<"ENTRE EL VALOR A BORRAR: ";
cin>>valbo;
89
Introduccin a dev C++
borrar(n,a,valbo);
break;
case 7:
clrscr(); gotoxy(20,12);
cout<<"ESTA SEGURO QUE DESEA SALIR S/N? ";
cin>>siga;
if(toupper(siga)=='N')
opcion=1;
break;
}
}while(opcion!=7);
}
Ejemplo 37
Disear un subprograma que, dado un vector que pueda contener elementos
duplicados diferentes de cero, reemplace cada elemento repetido por un cero y
encuentre el nmero de modificaciones realizadas.
#include<iostream>
#include<conio2.h>
#include"libVector.h"
using namespace std;
void cambio(int n, float vec[],int &nm)
{
int k,l; nm=0;
for(k=0; k< (n-1); k++)
for(l=k+1; l< n; l++)
if((vec[k]==vec[l]) && (vec[k]!=0))
{
vec[l]=0; nm++;
}
}
//************************************************************************
int main()
{
int n, nummod; float a[100];
textbackground(0); textcolor(LIGHTRED);
clrscr(); gotoxy(15,12);
cprintf("DIGITE LA CANTIDAD DE ELEMENTOS DEL VECTOR:
");
gotoxy(58,12); cin>>n; clrscr();
leerVector(n,a);
cambio(n,a,nummod);
cout<<"\n\n NUEVOS ELEMENTOS DEL VECTOR"<<endl<<endl;
imprimirVector(n,a);
cout<<"\n\n\n";
system("pause");
clrscr();
textbackground(CYAN); textcolor(LIGHTRED);
gotoxy(20,12);
cprintf("EL NUMERO DE MODIFICACIONES FUE:
");
gotoxy(52,12); cout<<nummod;
gotoxy(25,17); cprintf("PRESIONE TECLA PARA TERMINAR");
getch();
}
90
Introduccin a dev C++
forma de
bajo dos
donde se
uno para
Puede mirarse una matriz como un vector de vectores, por lo tanto, es un conjunto
de componentes en el que se necesitan dos subndices para identificar un elemento
que pertenezca al arreglo.
Un arreglo bidimensional N * M tiene N filas y M columnas, por lo tanto, tiene N * M
elementos dispuestos interiormente en memoria en forma sucesiva. Grficamente
se puede representar como una tabla de valores. Si A es una matriz de 5 * 7 se
representar as:
Columna 6
Columna 5
Columna 4
Columna 3
Columna 2
Columna 1
Columna 0
El algoritmo sera:
#include<iostream>
#include<conio2.h>
using namespace std;
int main()
{
int n, k,i; float a[50][50], sumap,sumas;
clrscr();
textcolor(MAGENTA); textbackground(WHITE);
gotoxy(20,12); cprintf("DIGITE EL ORDEN DE LA MATRIZ:
");
gotoxy(48,12); cin>>n;
for(k=0;k<n; k++)
for(i=0; i<n; i=i+1)
{
clrscr();
gotoxy(20,12);
cout<<"DIGITE EL ELEMENTO: "<<k+1<<','<<i+1<< " DE LA MATIZ: ";
cin>>a[i][k];
}
sumap=0; sumas=0;
for(i=0; i<n; i++)
{
sumap+=a[i][i];
sumas+=a[i][n-(i+1)];
}
clrscr();
textbackground(WHITE); textcolor(6);
gotoxy(20,11); cout<<"SUMA DE ELEMENTOS DE LA DIAGONAL PRINCIPAL:";
cout<<sumap; gotoxy(20,13);
cout<<"SUMA DE ELEMENTOS DE LA DIAGONAL SECUNDARIA:";
cout<<sumas;
gotoxy(34,25); cout<<"PRESIONE TECLA";
getch();
}
Ejemplo 39
Construir una librera que contenga dos subprogramas: uno que lea una matriz
(leerMatriz) y otro que imprima los elementos de la matriz (imprimirMatriz).
93
Introduccin a dev C++
#include<conio2.h>
using namespace std;
void leerMatriz(int nf, int nc, float mat[][50])
{
int f,c;
for(f=0;f<nf;f++)
{
clrscr();
for(c=0;c<nc;c++)
{
gotoxy(20,5+c);
cout<<"DIGITE EL ELEMENTO:["<<f+1<<"]["<<c+1<<"] ";
cin>>mat[f][c];
}
}
}
//************************************************************************
void imprimirMatriz(int nf, int nc, float mat[][50])
{
int f,c;
clrscr();
cout<<"\n\n\n
ELEMENTOS DE LA MATRIZ"<<endl<<endl;
for(f=0;f<nf;f++)
{
for(c=0;c<nc;c++)
cout<<mat[f][c]<<" ";
cout<<endl;
}
}
Ejemplo 40
Elaborar un programa que lea una matriz de nf filas y nc columnas y la
imprima.
#include"libMatriz.h"
int main()
{
int nf,nc; float mat[50][50];
clrscr();
cout<<"DIGITE EL NUMERO DE FILAS: ";
cin>>nf;
cout<<"DIGITE EL NUMERO DE COLUMNAS: ";
cin>>nc;
leerMatriz(nf,nc,mat);
imprimirMatriz(nf,nc,mat);
cout<<endl;
system("pause");
}
Ejemplo 41
Hacer un programa que encuentre e imprima la matriz transpuesta de una matriz
MAT.
La matriz transpuesta de la matriz MAT se encuentra intercambiando las filas por las
columnas y las columnas por las filas. Si TMAT es la matriz transpuesta de MAT,
implica entonces que TMAT [J, I] MAT [I, J].
94
Introduccin a dev C++
TMAT =
15
11
16
15
16
11
");
");
}
gotoxy(20,25); cprintf("PRESIONE TECLA");
getch();
}
Ejemplo 42
Hacer un programa que lea una matriz de NF filas y NC columnas y calcule la suma
de las filas y de las columnas, dejando los resultados en dos vectores, uno con las
sumas de las filas y otro con la suma de las columnas; imprima los dos vectores.
La matriz es MAT y tiene los siguientes elementos, los contenidos de los vectores se
muestran a continuacin:
95
Introduccin a dev C++
#include"LibMatriz.h"
int main()
{
int nf,nc,i,k; float mat[30][50], sumaf=0,vc[50],vf[30];
clrscr(); textbackground(WHITE); textcolor(MAGENTA);
gotoxy(20,11); cprintf("DIGITE EL NMERO DE FILAS:
");
gotoxy(49,11); cin>>nf;
textbackground(WHITE);
gotoxy(20,13); cprintf("DIGITE EL NMERO DE COLUMNAS:
");
gotoxy(49,13); cin>>nc; clrscr();
leerMatriz(nf,nc,mat);
for(i=0; i< nf; i++)
{
sumaf=0;
for(k=0; k< nc; k++)
sumaf+=mat[i][k];
vf[i]=sumaf;
}
clrscr(); textcolor(MAGENTA);
gotoxy(20,5); cprintf("
SUMA DE CADA COLUMNA ");
for(k=0; k<nc; k++)
{
vc[k]=0;
for(i=0; i<nf; i++)
vc[k]+=mat[i][k];
gotoxy(25,k+7);
cout<<"COLUMNA "<<k+1<<" = "<<vc[k];
}
gotoxy(20,25); textcolor(MAGENTA);
cprintf("PRESIONE TECLA PARA CONTINUAR");
getch();
clrscr(); textcolor(GREEN);
gotoxy(20,5); cprintf("
SUMA DE CADA FILA ");
for(i=0; i< nf; i++)
{
96
Introduccin a dev C++
gotoxy(25,i+7);
cout<<"FILA "<<i+1<<" = "<<vf[i];
}
gotoxy(20,25); cprintf("PRESIONE TECLA PARA TERMINAR");
getch();
}
Ejemplo 43
Un tablero de damas es un arreglo de 8 filas por 8 columnas. Un uno (1) representa
la presencia de una ficha roja en el tablero, un dos (2) representa la presencia de
una ficha negra en el tablero y un cero (0) representa la ausencia de ficha. Hacer un
algoritmo que calcule:
El nmero de fichas rojas:
nfr
nfn
tft
Para saber la clase de ficha que existe en un cajn del tablero se compara el estado
de cada elemento con 1, 2 0 y, de acuerdo con el resultado, se incrementa el
contador escogido para cada caso. Un posible estado del tablero de damas, sera el
siguiente:
F\C
1
2
3
4
5
6
7
8
1
0
2
0
2
0
0
0
2
2
0
0
0
2
0
0
0
0
3
1
1
0
0
0
0
0
0
4
1
0
0
0
0
2
0
2
5
0
0
0
0
0
0
1
0
6
0
0
0
2
0
0
0
0
7
0
0
0
0
0
1
0
0
8
0
1
0
1
0
0
0
2
Donde existen siete (7) fichas rojas y 8 fichas negras para un total de 15 fichas en
el tablero.
#include<iostream>
#include<conio2.h>
using namespace std;
int main()
{
short tab[8][8]; int i,k,nfr=0,nfn=0,tft,f=5,c=28;
clrscr(); textbackground(0);textcolor(6);
cprintf("DIGITE 0, 1 O 2 Y PRESIONE ENTER PARA LLENAR LA MATRIZ ");
for(i=0;i<=8; i++)
{
for(k=1;k<=24; k++)
{
gotoxy(27+k,f); cout<<char(205);
}
f+=2;
}
for(i=0;i<=8; i++)
97
Introduccin a dev C++
{
for(k=1;k<=17; k++)
{
gotoxy(c,4+k); cout<<char(186);
}
c+=3;
}
c=29; f=6;
for(i=0;i<8;i++)
{
for(k=0;k<8;k++)
{
do
{
gotoxy(c,f); cin>>tab[i][k];
if((tab[i][k] < 0) || (tab[i][k] > 2))
{
gotoxy(c,f); cout<<" ";
}
}while((tab[i][k]< 0) || (tab[i][k] > 2));
if(tab[i][k]==1)
nfr++;
else
if(tab[i][k]==2)
nfn++;
c+=3;
}
c=29; f+=2;
}
gotoxy(33,25); cprintf("PRESIONE TECLA"); getch();
tft=nfr+nfn;
clrscr();
textbackground(WHITE); textcolor(RED);
gotoxy(25,11); cprintf(" NMERO DE FICHAS ROJAS:
gotoxy(50,11); cout<<nfr; textcolor(BLACK);
gotoxy(25,13); cprintf(" NMERO DE FICHAS NEGRAS:
gotoxy(50,13); cout<<nfn; textcolor(6);
");
");
Ejemplo 44
Un examen tiene 100 preguntas de seleccin mltiple. Cada pregunta, dentro de
sus alternativas, slo tiene una respuesta correcta. Las respuestas correctas estn
en un vector VCR de 100 posiciones, donde VCR[K] representa la respuesta correcta
de la pregunta K.
Por cada estudiante se elabora un registro que contiene: nombre del estudiante y, a
continuacin, 100 valores que corresponden a las respuestas dadas por el
estudiante, para cada una de las 100 preguntas.
Elaborar un programa que, entre el vector de respuestas correctas, forme un vector
con los nombres de los estudiantes, forme una matriz de N * 100 con las respuestas
dadas por los estudiantes e imprima los nombres de los estudiantes que aprobaron
el examen (se requiere una calificacin mnima de 60 puntos para aprobar), y el
nmero de estudiantes que lo perdieron.
98
Introduccin a dev C++
99
Introduccin a dev C++
Ejemplo 45
Elaborar un programa que lea, para un arreglo bidimensional, la informacin sobre
ventas de NP productos; grabando en la primera columnas el cdigo del artculo y,
en la siguiente, el nmero de unidades vendidas cada mes (meses de 30 das).
Cada fila corresponde a los datos para un artculo. Utilizar las tres columnas
siguientes para calcular: promedio de ventas diarias, promedio de ventas en los
das que las hubo y nmero de das que se vendi; imprima la matriz.
Como el arreglo tiene, en la primera columna, el cdigo del artculo, inicialmente
tendr 31 columnas (una del cdigo columna 0 y 30 correspondientes a las ventas
hechas cada da del mes). En caso de que en un da no se haga venta, esa posicin
tendr valor de cero. La columna 31 del arreglo almacenar el promedio de ventas
diarias por artculo, que se calcula sumando cada fila desde la columna dos hasta la
treinta y uno, y dividiendo el resultado sobre los treinta das del mes, as:
El promedio de ventas en los das que las hubo (columna 32), se obtiene sumando
las ventas del producto y dividiendo por el nmero de das en que hubo ventas, es
decir, la cantidad de ventas diferentes de cero.
Cada registro de entrada corresponde a una fila de la matriz inicial, y ste se
diseara de la siguiente manera:
#include<iostream>
#include<conio2.h>
#include"libMatriz.h"
using namespace std;
int main()
{
int np,i,k,ndhv; float ven[50][50], suma;
clrscr(); textcolor(LIGHTRED); textbackground(0);
gotoxy(20,12); cprintf("DIGITE CANTIDAD DE PRODUCTOS:
");
gotoxy(49,12); cin>>np;clrscr(); textbackground(0);
gotoxy(20,12);
cprintf("EL PRIMER ELEMENTO DE CADA FILA ES EL CODIGO");
gotoxy(20,15); cprintf("PRESIONE TECLA"); getch(); clrscr();
leerMatriz(np,31,ven);
for(i=0;i<np;i++)
{
suma=0; ndhv=0;
for(k=1;k<31; k++)
{
suma+=ven[i][k];
if(ven[i][k]!=0)
ndhv++;
100
Introduccin a dev C++
}
ven[i][31]=suma/30;
ven[i][32]=suma/ndhv;
}
imprimirMatriz(np,33,ven);
cout<<endl;
system("pause");
}
7. REGISTROS
Un registro es una estructura de datos compuesta. Se puede decir que un registro
es un conjunto de campos variables relacionadas que, en general, pueden
pertenecer a tipos de datos diferentes, llamadas componentes del tipo registro,
donde todas las componentes pueden manipularse bajo un solo nombre de variable.
Por ejemplo, si se tiene un registro de datos compuesto por los campos: cdula,
nombres, deduccin y salario, podemos representarlo de la siguiente forma:
32506321 SUSANA RESTREPO
40000
630000
Como puede notarse, dentro del registro slo hay datos (informacin); es el
programador quien le coloca nombres a cada dato para poderlos almacenar en la
memoria de la computadora.
Si la informacin del empleado se fuera a tratar en forma individual y los
nombres de variables seleccionados para cada campo fueran: CC, NOM, DEDUC y
SAL, al ejecutarse la instruccin:
LEA: CC, NOM, DEDUC, SAL
La informacin de la empleada est dispersa en la memoria. La idea de usar
registros es agrupar toda la informacin en una misma rea de memoria bajo un
solo nombre. Si se toma la determinacin de que EMP1 es una variable de tipo
registro, es decir, puede almacenar en el rea asignada toda la informacin de un
empleado, grficamente se puede mirar de la siguiente manera.
EMP1
101
Introduccin a dev C++
Para que EMP1 sea tomada como una variable tipo registro, el programador debe
definirla como tal, de acuerdo con el lenguaje de programacin que est utilizando;
es decir, el tipo de dato registro no est predefinido, ya que sus componentes van a
depender de cada programa en especial. A modo de ejemplo, el anterior registro en
C++ se definira as:
struct empleado
{
long cc;
char nom[36];
double deduc;
double sal;
};
Lo anterior quiere decir que el programador ha definido un tipo de dato registro
llamado empleado y que a cualquier variable que se le asigne el tipo de dato
empleado, puede almacenar los valores de las componentes: cc, nom, deduc y sal.
En C++ se hara de la siguiente forma:
empleado emp1, emp2;
En la anterior instruccin se define a emp1 y emp2 como variables tipo registro, por
lo tanto, pueden almacenar todos los valores de los campos que conforman al tipo
de dato empleado.
Las variables tipo registro emp1 y emp2 son variables compuestas; para referenciar
a cada una de sus componentes hay que cualificarlas, o sea, expresar en forma
explcita a cul de las componentes del registro se quiere uno referir.
La
cualificacin se hace as: variables_tipo_registro.componente.
Por ejemplo:
emp1.cc
hace referencia al valor de la cdula almacenada en el rea de datos
(registro) emp1.
emp2.nom
emp1.nom[4]
referencia al caracter cuarto del nombre almacenado en el rea
de datos emp1, (en C++ sera el quinto).
La instruccin:
LEA: emp1.cc, emp1.nom, emp1.deduc, emp1.sal, lleva informacin a la variable
tipo p registro emp1.
Si hay necesidad de mover la informacin de una variable tipo registro a otra, se
puede hacer componente a componente o moviendo toda la informacin al mismo
tiempo. Por ejemplo:
emp2.cc = emp1.cc
emp2.nom = emp1.nom
emp2.deduc = emp1.deduc
emp2.sal = emp1.sal
102
Introduccin a dev C++
EJEMPLO 46
Formar un registro con los campos: cdula, nombre, pago, luego pasarlo a otro
registro e imprimir la informacin.
Anlisis
Hay que definir las dos variables tipo registro est1 y est2, se leen los valores
de las componentes est1, luego se pasa a est2 y se imprimen.
#include<iostream>
#include<conio2.h>
using namespace std;
int main()
{
struct estudiante
{
double cc;
char nom[36];
double pago;
};
typedef estudiante es;/* Se redefine el nombre del registro si Ud. quiere*/
es est1,est2; //estudiante est1,est2
clrscr(); textbackground(7); textcolor(MAGENTA);
gotoxy(20,11); cprintf("DIGITE LA CEDULA:
");
");
");
");
textbackground(5);
registros con informacin del mismo tipo para su proceso; dichos registros no
estarn dispersos; harn parte de un arreglo, lo que facilita su manejo.
Un arreglo de registros es muy parecido a un archivo de datos, se diferencian en
que los arreglos de registros residen en memoria principal y los archivos en
memoria auxiliar, por lo tanto, estos ltimos tiene existencia permanente.
Otra importancia que tienen los arreglos de registro es que cada uno de sus
elementos est formado por varios campos pertenecientes a diferentes tipos de
datos, a diferencia de los otros tipos de arreglos donde sus elementos son de un
solo tipo.
EJEMPLO 47
Formar un arreglo de mximo 100 registros donde cada elemento contenga:
cdula, nombres y pago, luego ordenarlo por el campo nombre, insertar un
nuevo registro sin daar el ordenamiento e imprimirlo. Si el nombre del
arreglo de registros es v, grficamente se representara as:
V
V[1]
V[1].cc
V[1].
nom
V[2]
V[1].p
V[2].cc
V[2].
nom
V{2].p
V[100]
V[100]. V[100]. V[100].
cc
nom
p
ALGORITMO
LEER
IMPRIMIR
ORDENAR
INSERTAR
IMPRIMIR
Recibe N y V
ORDENAR
INSERTAR
Recibe N y V y enva N y V
Otras variables
I, K
MENOR
POS
AUX
elemento
ordenamiento.
RI
Registros a insertar
Datos de salida
La informacin del vector registro.
Definicin de variables
N
Cantidad de elementos
R.CC
Cdula a insertar
R.NOM
Nombre a insertar
R.P
Pago a insertar
OP
SIGA
#include<iostream>
#include<conio2.h>
#include<iomanip>
#include<windows.h>
#include"entorno.h"
using namespace std;
struct empleado
{
long long cc; char nom[36]; double p;
};
105
Introduccin a dev C++
textbackground(0);
for(k=0; k<n;k++)
{
clrscr(); textcolor(MAGENTA); textbackground(CYAN);
gotoxy(20,11); cprintf("DIGITE LA CDULA:
");
");
textbackground(0);
gotoxy(42,12); cin>>ws; cin.getline(v[k].nom,35);
nc=strlen(v[k].nom);
for(i=nc;i<36;i++)
v[k].nom[i]=' ';
v[k].nom[36]='\0'; textbackground(CYAN);
gotoxy(20,13); cprintf("ENTRE
gotoxy(38,13); cin>>v[k].p;
EL
PAGO:
");
textbackground(0);
}
}
void imprimir(int n,empleado v[])/* Imprime la informacin del empleado*/
{
int i; clrscr();
for(i=0; i< n; i++)
cout<<setw(18)<<v[i].cc<<setw(40)<<v[i].nom<<setw(10)<<v[i].p<<endl;
gotoxy(20,25); cprintf("PRESIONE TECLA"); getch();
}
void ordenarPorNombre(int n, empleado v[])/* Ordena la informacin por nombre*/
{
int i,k,pos; empleado aux; char menor[36];
for(i=0; i<n-1; i++)
{
strcpy(menor,v[i].nom); pos=i;
for(k=i+1; k<n; k++)
if(strcmpi(menor,v[k].nom) >0)
{
strcpy(menor,v[k].nom); pos=k;
}
aux=v[i]; v[i]=v[pos]; v[pos]=aux;
}
clrscr(); textcolor(CYAN);
gotoxy(20,12); cprintf("EL VECTOR FUE ORDENADO"); Sleep(1000);
}
void insertar(int &n, empleado v[], empleado ri[])
{
106
Introduccin a dev C++
int i=0,k;
while((i < n) && (strcmpi(ri[0].nom,v[i].nom) > 0))
i++;
n++;
for(k=n-1; k>(i); k--)
v[k]=v[k-1];
v[i]=ri[0];
}
/***********************************************************************************/
int
main()
{
empleado a[50],r[1]; int n,op;
char sw;
cout.setf(ios::fixed,ios::floatfield);
cout<<setprecision(2); textbackground(0);
clrscr(); textbackground(CYAN); textcolor(LIGHTRED);
gotoxy(20,12); cprintf("DIGITE CANTIDAD DE EMPLEADOS:
");
");
");
gotoxy(57,12); cin>>sw;
}
break;
case 5:
107
Introduccin a dev C++
clrscr();
gotoxy(30,12); cprintf("FIN DEL PROGRAMA");
gotoxy(25,15); cprintf("PRESIONE TECLA PARA TERMINAR");
getch();
break;
}
}while(op !=5);
}
8. ARCHIVOS
Un archivo es un dispositivo lgico donde se pueden almacenar en forma
permanente grandes volmenes de informacin, dividido en estructuras de datos
(registros) todas del mismo tipo y relacionadas.
El manejo de informacin a travs de archivos es de gran utilidad en la
programacin, ya que permite la captura de informacin almacenada en ellos para
su posterior utilizacin en diversos programas, evitando tener que entrar en forma
manual la informacin que se quiere procesar; y almacenar gran cantidad de
informacin en espacios reducidos y con una alta precisin en el manejo de los
datos.
En general los archivos se pueden agrupar en tres grandes categoras:
Archivos de programa: son los programas fuentes que se escriben en un
determinado lenguaje de programacin. Estos programas son guardados en
medios magnticos auxiliares para su posterior utilizacin. Estos archivos se
pueden cargar del medio magntico a memoria, compilarlos, ejecutarlos, imprimirlos y volverlos a guardar donde estaban o en otro medio de almacenamiento
distinto.
Archivos de texto: almacenan letras, palabras, frases, prrafos y se suelen crear
y mantener mediante programas que procesan o editan texto.
Archivos de datos: almacenan valores. Un archivo de datos contiene informacin
que un programa crea y posteriormente procesa; de igual forma, puede usarse
para almacenar los resultados de la ejecucin de un programa.
108
Introduccin a dev C++
109
Introduccin a dev C++
close( )
Esta funcin permite desasociar el archivo que se tenga abierto actualmente con la
aplicacin, es decir que se destruyen los medios de conexin entre la memoria y el
medio magntico y el nombre lgico con el nombre fsico. Por seguridad, es buena
prctica ejecutar esta funcin cuando ya no se desean realizar ms operaciones
sobre el archivo, para proteger el rea donde est el archivo. Al ejecutarse esta
operacin, automticamente al final del archivo, se adiciona un registro ms
(registro centinela) donde se coloca una marca, llamada marca de fin de archivo,
eof (end of file). Esto significa que nosotros leemos informacin del archivo hasta
que se detecte la marca de fin de archivo. Ejemplo:
While(!nombre lgico.eof())
{
}
nombre lgico.close();
Nombre lgico debe ser un nombre de variable permitido y a travs de este nos
referiremos al archivo (nombre fsico) en el programa.
Supongamos que queremos abrir un archivo que se llama nombres.txt que se
encuentra en la unidad de disco D Si le colocamos como nombre lgico archT:
#include <fstream.h>
.
ifstream archT (D:\nombres.txt, ios_base::in);
110
Introduccin a dev C++
Donde nombres.txt es el nombre con el cual queda grabado el archivo (nombre fsico),
si no colocamos ruta el archivo se guardar en la carpeta donde est el programa que
lo crea.
#include <fstream.h>
.
ofstream Escritura (D:\nombres.txt, ios_base::out);
ofstream Escritura (D:\datos.datt, ios_base::out);
#include<fstream>
EJEMPLO 48
Hacer un programa que genere un archivo de texto con los campos: nmero y
nombres, que muestre la informacin del archivo y le adicione ms registros.
#include<iostream>
#include<conio2.h>
#include<fstream>
using namespace std;
int main()
{
char nom[40];
int i=0, opcion;
112
Introduccin a dev C++
char sw='S',sw1;
long long cedula;
do
{
clrscr();
cout<<" 1: CEAR EL ARCHIVO "<<endl;
cout<<" 2. IMPRIMIR CONTENIDO DEL ARCHIVO "<<endl;
cout<<" 3: ADICIONAR UN REGISTRO AL FINAL"<<endl;
cout<<" 4: SALIR DEL MENU ";
cout<<"DIGIITE OPCION: "; cin>>opcion;
if(opcion==1)
{
clrscr();
cout<<"OJO SI EL ARCHIVO YA ESTA CREADO SERA DESTRUIDO "<<endl;
cout<<"EL ARCHIVO EST CREADO S/N? ";
cin>>sw1;
if(toupper(sw1)=='N'){ //1
ofstream Escribir("nombres.txt",ios_base::out);/*SE ABRE PARA ESCRITURA*/
if(Escribir){ //2 SI EL ARCHIVO SE ABRI CON XITO
cout<<"DIGITE LA CEDULA ";
cin>>cedula;
while(cedula !=0)
{
cout<<"DIGITE EL NOMBRE "<<i+1<<" ";
cin>>ws; cin.getline(nom,40);
Escribir<<cedula<<' '<<nom<<endl;
clrscr();
cout<<"DIGITE CEDULA O CERO PARA TERMINAR: ";
cin>>cedula;
i++;
}//while
} //2
Escribir.close(); /*CERRAR EL ARCHIVO*/
}//1
else
{
clrscr();
cout<<"EL ARCHIVO NO SE PUDO ABRIR"<<endl;
system("pause");
}//fin else
}
if(opcion==2){
ifstream Lectura("nombres.txt",ios_base::in);/*SE ABRE PARA LECTURA*/
if(!Lectura)/*SI EL ARCHIVO NO SE PUDO ABRIR*/
{
cout<<"EL ARCHIVO NO SE PUDO ABRIR PARA LECTURA "<<endl;
exit(0);
}
else
{
clrscr();
cout<<"DATOS ALMACENADOS EN EL ARCHIVO nombres.txt"<<endl<<endl;
Lectura>>cedula; Lectura>>ws; Lectura.getline(nom,40);
while(!Lectura.eof())
{
cout<<cedula<<"
"<<nom<<endl;
Lectura>>cedula; Lectura>>ws; Lectura.getline(nom,40);
}//while
Lectura.close();
cout<<endl<<endl<<endl;
system("pause");
}//else
113
Introduccin a dev C++
}
if(opcion==3){
/* SE ABRE EL ARCHIVO PARA
ofstream Agregar("nombres.txt", ios_base::app);
if(Agregar){
clrscr();
cout<<"DIGITE LA CEDULA ";
cin>>cedula;
cout<<"DIGITE UN NOMBRE ";
cin>>ws; cin.getline(nom,40);
Agregar<<cedula<<' '<<nom<<endl;
Agregar.close();
}
}
}while(opcion !=4);
}
ADICIONAR
REGISTROS
AL
FINAL*/
114
Introduccin a dev C++
Como se desprende del grfico, los campos corresponden a las columnas y los
registros a las filas.
El tamao o longitud de un registro se mide en bytes y ser la resultante de sumar
las longitudes de los campos que lo conforman. Es importante tener en cuenta que
los campos que conforman un registro deben referenciar una misma informacin y
de igual manera los registros deben estar relacionados con la razn de ser del
archivo.
Empleados
Cdula
114
01
Depto
Elas Jos
Nombre
Salario
121
01
211
01
Luisa Berta
312 516
099
02
Guillermo Segundo
222 604
117
02
Albertina Isabel
212
02
Corina Francisca
119
03
Ruth de Jess
119 325
118
03
Florencia Maria
425 000
311
04
Jairo Antonio
Fin del archivo
180 000
253 423
191 221
823 514
388 734
Osorno
Telfono
Cra. 10 No. 10-17
2310145
65874123 Fabin
73284562 Gisela
Gil
5896201
EOF
Inventario
Cdigo
702110
Descripcin
Buja
200
Unidades Valor-unidad
7500
802010
Vlvula
50
850
115
902110
Manguera
35750
EOF
Libros
Cdigo-libro
502115
Ttulo
Antes del fin
Cdigo-autor Unidades
8462148
12
602017
Doa Brbara
7985621
21
902117
El tnel
4568932
32
EOF
EOF significa End Of File (Fin del Archivo), es un indicador que aparece luego del
ltimo registro del archivo, denotando el final del mismo.
Ya vimos cmo abrir un archivo de datos para lectura y escritura y adicionar datos
al final.
Veamos cmo escribir (crear) en un archivo de datos secuencial, si tenemos:
struct empleado
{
long long cc;
char nom[40];
float salario;
};
empleado r; /* r Variable tipo registro*
.......
ofstream emp ("datos.dat",ios_base::out|ios_base::binary);
.......
emp.write((char*) &r,sizeof(r));/*Operacin de escritura*/
.......
emp.close();
116
Introduccin a dev C++
EJEMPLO 49
Vamos a crear un archivo con los datos: cdula, nombres y salario, lo leemos e
imprimimos por pantalla la informacin en l contenida, lo ordenamos por el campo
nombre y buscamos la informacin por cdula de un empleado.
/*********************************************************************/
#include<iostream>
#include<conio2.h>
#include<fstream>
#include<iomanip>
using namespace std;
struct empleado
{
long long cc;
char nom[40];
float salario;
};
empleado r;
void adicionar()
{ //1
long codigoad;
char sw;
clrscr();
gotoxy(20,11);
cout<<"EL ARCHIVO EST CREADO S/N: ";cin>>sw;
if(toupper(sw)=='N')
{ //2
clrscr(); gotoxy(20,13);
cout<<"ASI EL ARCHIVO EST CREADO SERA DESTRUIDO ";
gotoxy(20,14);cout<<"\EL ARCHIVO ESTA CREADO S/N: ";cin>>sw;
} //2
if(toupper(sw)=='N')
{ //3
ofstream emp ("datos.dat",ios_base::out|ios_base::binary);
if(!emp)
{ //4
clrscr();
cout<<"NO SE PUEDE ABRIR EL ARCHIVO PARA ADICIONAR";
getch(); exit(1);
} //4
clrscr(); gotoxy(20,11);
cout<<"DIGITE LA CEDULA : ";
cin>>codigoad;
while(codigoad !=0){
r.cc=codigoad;
gotoxy(20,12);
cout<<"DIGITE EL NOMBRE: ";
cin>>ws; cin.getline(r.nom,40);
gotoxy(20,13);
cout<<"DIGITE EL SALARIO: ";
cin>>r.salario;
emp.write((char*) &r,sizeof(r));
clrscr(); gotoxy(20,11);
cout<<"DIGITE NUEVA CEDULA O CERO PARA TERMINAR: ";
cin>>codigoad;
}
emp.close();
}
}
117
Introduccin a dev C++
/***************************************************************/
void Leer()
{
int i=5;
ifstream a2("datos.dat", ios_base::in|ios_base::binary);
if(!a2)
{
clrscr();
cout<<"NO SE PUEDE ABRIR EL ARCHIVO PARA IMPRIMIR";
getch(); exit(1);
}
clrscr(); textcolor(MAGENTA); gotoxy(30,2);
cprintf("D A T O S D E L A R C H I V O");
a2.read(( char*) &r,sizeof(r));
while(!a2.eof())
{
gotoxy(10,i+1);
cout<<setw(12)<<r.cc<<setw(40)<<r.nom<<setw(14)<<r.salario;
i++;
a2.read(( char*) &r,sizeof(r));
}
gotoxy(10,i+3);
system("pause");
a2.close();
}
//***********************************************************/
void buscarPorCedula()
{
char sw='N';
long long cedulaBuscar;
ifstream arch("datos.dat",ios_base::in);
if(!arch)
{
clrscr();
cout<<"NO SE PUEDE ABRIR EL ARCHIVO PARA IMPRIMIR";
getch(); exit(1);
}
else
{
clrscr();
cout<<"DIGITE LA CEDULA A BUSCAR: ";
cin>>cedulaBuscar;
arch.read(( char*) &r,sizeof(r));
while((!arch.eof())&&(sw=='N'))
{
if(r.cc==cedulaBuscar)
sw='S';
else
arch.read(( char*) &r,sizeof(r));
}
clrscr();
gotoxy(20,12);
if(sw=='S')
cout<<"EL EMPLEADO CON CEDULA "<<cedulaBuscar<<" SI ESTA"<<endl;
else
cout<<"EL EMPLEADO CON CEDULA "<<cedulaBuscar<<" NO ESTA";
gotoxy (20,24);
system("pause");
arch.close();
}
}
/***********************************************************/
void ordenarPorNombre()
118
Introduccin a dev C++
{
empleado est1,est2;
char nomen[40];
long n=0,i,pos,k;
fstream a4("datos.dat",ios_base::in|ios_base::out|ios_base::binary);
if(!a4)
{
clrscr();
cout<<"NO SE PUEDE ABRIR EL ARCHIVO PARA ORDENAR";
getch(); exit(1);
}
a4.read(( char*) &est1,sizeof(est1));
while(!a4.eof())
{
n++;
a4.read(( char*) &est1,sizeof(est1));
}
a4.close();
fstream a5("datos.dat",ios_base::in|ios_base::out|ios_base::binary);
for(i=0;i<(n-1);i++)
{
a5.seekp(i*sizeof(est1),ios::beg);
a5.read(( char*) &est1,sizeof(est1));
pos=i; strcpy(nomen,est1.nom);
for(k=i+1;k<n;k++)
{
a5.seekg(k*sizeof(est2),ios::beg);
a5.read(( char*) &est2,sizeof(est2));
if(strcmpi(nomen,est2.nom) > 0)
{
pos=k; strcpy(nomen,est2.nom);
}
}
a5.seekg(pos*sizeof(est2),ios::beg);
a5.read(( char*) &est2,sizeof(est2));
a5.seekg(i*sizeof(est1),ios::beg);
a5.write(( char*) &est2,sizeof(est2));
a5.seekg(pos*sizeof(est1),ios::beg);
a5.write((char*) &est1,sizeof(est1));
}
a5.close();
clrscr();
textcolor(RED);
gotoxy(30,12);cprintf("EL ARCHIVO FUE ORDENADO");
gotoxy(30,14);cprintf("
PRESIONE TECLA ");
getch();
}
int main()
{
int op,n,sw;
do
{
clrscr(); textbackground(WHITE);textcolor(LIGHTRED);
cout<<"\n
MENU\n";
cout<<"\n 1: ADICIONAR";
cout<<"\n 2: IMPRIMIR";
cout<<"\n 3: ORDENAR EL ARCHIVO POR NOMBRE";
cout<<"\n 4: BUSCAR POR CEDULA";
cout<<"\n 5:SALIR DEL MENU";
cout<<"\n DIGITE OPCION ";
cin>>op;
switch (op)
119
Introduccin a dev C++
{
case
case
case
case
case 5:
1: adicionar(); break;
2: Leer();
break;
3: ordenarPorNombre();
4: buscarPorCedula();
"SALIR DEL MENU";
break;
break;
}
}while(op !=5);
}
120
Introduccin a dev C++
9. ANEXOS
9.1. TABLA CARACTERES ASCII
121
Introduccin a dev C++
10.
BIBLIOGRAFA
CIBERGRAFA
10.1. BIBLIOGRAFA
PROGRAMACIN EN C++ PARA INGENIEROS. Fatos Xhafa y otros
LGICA DE PROGRAMACIN SEGUNDA EDICIN. Efran M Oviedo Regino
10.2. CIBERGRAFA
cplusplus.com - The C++ Resources Network
http://www.cplusplus.com/
BloodshedSoftware - Providing Free Software to the internet community
http://www.bloodshed.net/devcpp.html
Wikipedia, la enciclopedia de contenido libre
http://es.wikipedia.org/wiki/Dev-C%2B%2B
Cdigo C++ | Programas, Tareas y Ejemplos en C++
http://codigoc.org/143-bajar-dev-c-gratis-compilador-para-c
122
Introduccin a dev C++