CURSO-C
CURSO-C
ENNG
GUUA
A JJ E
E C
C
1
INTRODUCCION
• Nació en los laboratorios de Bell Telephone
• Está inspirado en el lenguaje B
• Creado para recodificar el UNIX
• En 1972 Dennis Ritchie modifica el B
• Es un lenguaje de propósito general
• Lenguaje de alto nivel
• Lenguaje estructurado
2
INTROD......
• Permite el manejo de datos: bits, bytes y de
direcciones
• Es de fácil transportabilidad
• Ofrece una enorme librería en ejecución
• Se emplea para escribir sistemas operativos,
compiladores, manejadores de bases de datos,
procesadores de textos, juegos, etc...
3
OBJETOS DE UN PROGRAMA
• Forman un programa: objetos y separadores
• Objetos:Símbolos especiales,identificadores etiquetas,
números, constantes, variables,etc....
• Identificadores.- Representan a constantes, variables, tipos
de datos, funciones, etc......
– Secuencia de caracteres de cualquier tamaño comenzando con
letra, sin blancos.
– Diferencia las letras mayúsculas de las letras minúscula
4
– Limite – 123-var
– Valor1
–
– index $
MENSAJE
– N3 – Float
– Numero-blanco – $total
– SUMA-total
– suma-TOTAL
– A
5
OBJETOS .......
• Constantes.- Mantienen su valor, pueden ser de
diferentes tipos
• Variables.- Cambian de valor mediante sentencias
ejecutables
• Sentencias.- Conforman las instrucciones, funciones o
definiciones.
• Son simples o compuestas
• Cada sentencias simple termina en ;
6
OBJETOS.....
7
TIPOS DE DATOS
10
OPERADORES LOGICOS
13
ESTRUCTURA DE UN
PROGRAMA
14
ESTRUCTURA
• DIRECTIVAS
main ( )
{ Declaración de variables:
Cuerpo de la función principal
}
• main es el nombre de la función principal
• { } Indica el comienzo y final del cuerpo de la función.
15
• En Declaración de variables, se declaran las variables locales
antes de ser usadas.
• Cuerpo de la función es un grupo de instrucciones
ejecutables.
• Directivas, es para incluir otros archivos (# include) y definir
constantes y macros ( # define).
• NOTA: Utilizar el tipo VOID (vacío) en las declaraciones de
funciones y definiciones para especificar que la función no
devuelve valor o no emplea parámetros.
16
EJEMPLO DE PROGRAMA
– /*Programa de saludo*/ # define M1
“Bienvenidos al C” # define M2 “Estas alegre”
main( ) { char nombre[30];
clrscr( ); /*función limpia pantalla*/ printf(“¿Cuál
es tu nombre?:”); gets(nombre);
clrscr( ); printf (“\a\z %s\n”,nombre,M1,M2);
printf(“OK?\n”); getch( ); }
17
INDICACIONES GENERALES
18
CONSTANTES
• Se declaran de dos formas: - # define
identificador-dato ( antes del main)
- Con la palabra CONST
• Ejemplos: - # define MAX 200 - # define car ´*´
- # define SUELDO 4578.6- # define línea ´\n´
- CONST int max=200 - CONST char x=´a´
19
CONST........
20
VARIABLES
• Es un identificador que sirve para guardar valores
de un tipo de datos en memoria.
• Se puede declarar e inicializar su valor en la
declaración, en forma opcional.
• Una variable se declara antes de ser usada.
• Puede ser local o global, si se declara dentro o
fuera del main( ).
21
EJEMPLO DE VARIABLES
• int a,b,c
• float altura,base,área
• char car
• long numero,máximo
• char texto[80]
22
ENTRADA DE DATOS
• Scanf: Lee datos desde el teclado: scanf(“cadena de
formato”,lista de direcciones de variables)
Cadena de formato :Lista de letras precedidas por % que
indica el tipo de dato.
d, D entero decimal
o, O entero octagonal
i entero
l entero largo u, U entero sin signo
23
X, x entero hexadecimal
e, E punto flotante
f, F reales
S cadena de caracteres
C carácter
%% carácter (no hay conversión)
n ninguna
p número hexadecimal (punteros)
• Ejemplos:
– scanf(“%d %f”,&ca,&b)
– scanf(“%c %s”,car,nom)
24
ENTRADA.....
GETS Lee una cadena de caracteres desde el teclado.
gets(cadena)
char nombre[15] gets(nombre)
• Existe el GETCHAR y GETCH: Lee un carácter con o
sin eco respectivamente .
char car char car car=getchar car=getch
25
SALIDA (pantalla)
• PRINTF Escribe con formato una lista de datos
printf(“cadena de formato”, datos)
La cadena de formato puede ser: d entero
decimal i entero u entero sin signo o
entero octal
26
• X,x entero hexadecimal.
F float
e, E float (notación científica)
g, G float
c carácter simple
s cadena
n puntero en un entero
p puntero (dirección de puntero)
27
• puts Escribe una cadena de caracteres
puts(cadena)
28
SALIDA CON FORMATO
• printf(“%[Link]”,var) var es tipo float.
• printf(“%md”,var) var es tipo int
• printf(“%-ms”,var) var es de tipo cadena
donde: m espacios que ocupa la variable
n cantidad de decimales
+ por defecto ajusta imp a la derecha
- ajusta la impresión a la izquierda.
29
• Ejemplo:
# define suel 450.87569
main( )
{ char nom[15];
clrscr( );
printf(“ingrese nombre:”);
scanf(“%s”,nom);
printf(“\n”);
printf(“Señor,%s su sueldo es = %10.2f\n”,nom,suel;
getch( ); }
30
OPERADORES DEL C++
• % Resto de una división entera
• << Desplazamiento de bits a la izquierda
• >> Desplazamiento de bits a la derecha.
• *= Asigna el producto
• /= Asigna el cociente
• %=Asigna el resto
• += Asigna la suma
• -= Asigna la diferencia.
31
SENTENCIA DE ASIGNACION
• Es la que permite cargar un valor a una variable que ha
sido definida anteriormente.
identificador = valor
int total; int j,precio = 15;
total = 125; j = precio * 5;
float r,s,m;
m = r +s;
32
LIBRERIAS DE INPUT/OUTPUT
33
SENTENCIAS COUT Y CIN
• La sentencia cin permite leer datos que se cargarán en las
variables. Esta sentencia se utiliza en el C++.
• Ejemplo: #include <fstream.h>
void main ( )
{ int total,r s;
cin>>r>>s;
total = r + s;
}
34
• Utilizar la sentencia cout cuando se desea provocar la salida del
contenido de una variable o constante por pantalla en C++.
• Ejemplo: # include <fstream.h>
void main ( )
{ int p,q,r;
cout<<“digite los valores de p y q”;
cin>>p>>q;
r = p * q;
cout<<r<<“es el producto”; }
35
EJEMPLOS
• Programa que lee un nombre y lo imprime:
# include <fstream.h>
#include <conio.h>
void main( )
{ char nombre[15];
clrscr( );
cout<<“ digite su nombre”;
cin>>nombre;
cout<<“ su nombre es”<<nombre; }
36
• Programa que calcula el área de un circulo:
# include <fstream.h>
# include <float.h>
# define PI 3.141621
void main ( void )
{ float radio, area;
cout<< “digite el valor del radio”;
cin>>radio;
area = radio * radio * PI;
cout<< “ AREA = ”<<area; getch ( ); }
37
• Programa que lee un nombre y lo imprime al centro de la pantalla:
# include <fstream.h>
#include <conio.h>
void main ( )
{ char nombre[30];
cout<< “ digite su nombre \n ”;
cin>>nombre;
clrscr ( );
gotoxy(27,12);
cout<< “ HOLA,”<<“ ”<<nombre;
getch ( ); }
38
SENTENCIAS DE CONTROL
• En un programa siempre es necesario alterar el orden
de ejecución de las instrucciones, ya sea en función de
una condición o por que se desea repetir un número
de veces la ejecución de un grupo de instrucciones.
Para atender estros requerimientos se tiene:
• Sentencias Selectivas: IF, ELSE, SWITCH
– Sentencias Repetitivas: WHILE, DO, FOR
39
SENTENCIAS SELECTIVAS
40
• Expresión, debe ser debe ser una expresión numérica,
relacional o lógica, El resultado que se obtiene de la
evaluación es: verdadero (uno) o falso (cero).
• Sentencias, representan cualquier instrucción
ejecutable.
• La sentencia ELSE es opcional.
If(a>b)
p = r * a;
else
p=r/a
41
IF ANIDADOS
• Las sentencias IF y ELSE pueden estar anidadas, quiere decir
que una sentencia IF puede contener otro u otros IF dentro de
su dominio.
If (expresión)
...........
If(expresión)
sentencias;
else
sentencias;
42
• La opción else siempre se refiere al if mas próximo que no
tenga ya asociado un else.
if (x= = 1)
if (y = = 1) printf (“1”);
else printf(“2”);
else printf (“3”);
if (x = =1)
{ if (y = = 1) printf(“1”); }
else printf(“2”);
43
EJEMPLOS
• Programa que calcula el mayor de dos números.
# include <fstream.h>
void main ( )
{ int a,b,mayor;
clrscr ( );
cout<<“ ingrese dos números: \n”;
cin>>a>>b;
if (a>b) mayor=a;
else mayor=b;
cout<<“ el mayor es :”<<mayor; }
44
• Programa que calcula el menor de 3 números.
#include <fstream.h>
#include <float.h>
void main ( )
{float a,b,c,menor;
clrscr ( );
cout<<“ ingrese tres números \n”;
cin>>a>>b>>c;
if (a<b)
{ if (a<c)
menor = a;
45
else
menor = c; }
else
{ if (b<c)
menor = b;
else
menor = c; }
cout<<“ el número menor es”<<menor;
getch ( );
}
46
SENTENCIA SWITCH
48
• Ejemplo de un programa que lee un número entero
entre 1 y 7 e imprime el día de la semana.
#include <fstream.h>
#include <conio.h>
void main ( )
{ int a;
clrscr ( );
cout <<“ ingrese número de 1 al 7 \n”;
cin>>a;
switch(a)
49
{ case 1: cout<<“Lunes”; break;
case 2: cout<<“Martes”;break;
case 3: cout<<“Miércoles”;break;
case 4: cout<<“Jueves”;break;
case 5: cout<<“Viernes”;break;
case 6: cout<<“Sábado”;break;
case 7: cout<<“Domingo”;break;
default: cout<<“número incorrecto”;
}
cout<<“esto es todo”; }
50
• Ejm: Programa que calcula el promedio de edades
según el sexo.
#include <fstream.h>
#include <float.h>
#include <conio.h>
void main ( )
{ int sexo,edad,nh=0,nm=0,seh=0,sem=0,nr=1,na=1;
float peh,pem;
if (na<20)
{ cout<<“Digite sexo (0=H,1=M) y edad”;
51
cin>>sexo>>edad;
switch (sexo)
{ case 0: nh = nh + 1;
seh = seh + edad; break;
case 1: nm = nm +1;
sem = sem + edad; break;
} na=na+1;}
if (nh>0)
{ peh = seh / nh;
cout<<“El promedio de \n”;
52
cout<<“edades de hombres: ”<<peh;
}
if (nm>0)
{ pem = sem / nm;
cout<<“El promedio de \n”;
cout<<“edades mujeres: ”<<pem;
}
}
53
• Ejemplo de sentencias switch anidadas.
switch (x)
{ case ‘1’:
switch (y)
{ case ‘0’: printf(“error”);
break;
case ‘1’: procesar(x,y);
} break;
case ‘2’: procesar1 (x,y);
} break;
54
SENTENCIA REPETITIVA:
WHILE
• Permite ejecutar una sentencia simple o compuesta,
cero o más veces, dependiendo del valor de una
expresión, numérica, relacional o lógica.
• El funcionamiento es el siguiente:
– Se evalúa la condición
– Si el resultado es cero, la sentencia no se ejecuta, y
pasa a ejecutar la siguiente sentencia del programa.
55
– Si es distinto de cero, se ejecuta las sentencias dentro
del WHILE y el proceso se repite comenzando en el
punto 1.
59
SENTENCIA DO-WHILE
61
Este programa imprime el mensaje ADIVINASTE, si se
ingresa un número entero entre 1 y 10, pero no acepta
ningún otro número.
#include <fstream>
#include<conio.h>
void main ( )
{ int num;
do
{ clrscr ( );
cout<<“Digite un número\n”;
cin>>num; }
62
while(n>0 && n<11)
cout<<“\n”<<!ADIVINASTE!;
getch ( );
}
Ejemplo de un programa que calcula el factorial de un
número.
#include <fstream.h>
#include <conio.h>
void main ( )
63
{ int num, fact,x;
cout<<“Digite un número\n”;
cin>>num;
fact=1;
x=1;
do
{ fact *= x;
x++;
}
while(x<=num; cout<<“\n”<<fact; }
64
Ejemplo de un programa que adivina un número
mágico.
#include <stdio.h>
void main ()
{ int magico = 123;
int intento;
printf(“Adivina el número mágico”);
scanf(“%d”, &intento);
if (intento = = magico)
{printf (“**ADIVINASTE**”);
65
printf (“%d es el numero magico”, magico);
}
else
{ printf (“....... INCORRECTO......”);
if(intento>magico)
printf (“demasiado alto”);
else printf (“demasiado bajo”);
}
}
OJO: intento>magico? printf(“demasiado alto”)
:printf(“demasiado bajo”);
66
SENTENCIA FOR
70
#include <fstream.h>
#include <float.h>
void main ( )
{ float x,y,z;
int select=0;
while (select!=5)
{ clrscr( );
cout<<“1......Sumar \n”;
cout<<“2.......Restar \n”;
cout<<“3.......Multiplicar \n”;
71
cout<<“4.........Dividir \n”;
cout<<“5.........Salir \n”;
cin>>select;
if (select !=5)
{ if (select>0 && select<=4)
{ switch(select)
{ case 1:clrscr( );
cout<<“digite 1er sumando\n”;
cin>>x;
cout<<“digite 2do sumando\n”
72
cin>>y;
z=x+y;
cout<<“total:”<<“ ”<<z;
getch( ); break;
case 2:clrscr( );
cout<<“digite minuendo \n”;
cin>>x;
cout<<“digite sustraendo \n”;
cin>>y;
z=x-y;
73
cout<<“total:”<<“ ”<<z;
getch( ); break;
case 3:clrscr( );
cout<<“digite multiplicando \n”;
cin>>x;
cout<<“digite multiplicador \n”
cin>>y;
z=x*y;
cout<<“total:”<<“ ”<<z;
getch( ); break;
74
case 4:clrscr( );
cout<<“digite dividendo \n”;
cin>>x;
cout<<“digite divisor \n”
cin>>y;
z=x/y;
cout<<“total:”<<“ ”<<z;
getch( ); break;
}
else cout<<“\n selección equivocada”
75
}
else
break;
}
}
Ejemplo de programa de conversión de segundos.
#include <fstream.h>
#include <string.h>
void main ( )
76
{ int nmin,nhor,nseg,min,seg;
char ope;
do
{ clrscr ( );
cout<<“digite un número de segundos\n”;
cin>>seg;
nhor=seg/3600;
min=seg % 3600;
nmin=min/60;
nseg=min % 60;
77
cout<<“Horas Minutos Segundos \n”;
cout<<nhor<<nmin<<nseg;
cout<<“Desea continuar S o N”;
ope=getch( );
} while(ope!=’N’);
clrscr( );
}
• NOTA:Es posible codificar un for de la siguiente
forma:
for (x=0,y=0;x+y<10;++x)
78
SENTENCIAS DE
TRANSFERENCIA
• Existen dos sentencias de transferencia BREAK y
CONTINUE.
• La sentencia BREAK finaliza la ejecución del while,
do, for o switch más interno que la contenga y se
prosigue con el resto del programa.
• El CONTINUE transfiere la ejecución a la parte final
de la preposición afectada por el ciclo while, do, for
más interno que la contenga.
79
Ejemplos:
#include <fstream.h>
void main ( )
{ int i;
clrscr( );
for (i=1;i<10;i++)
{ cout<<i;
if(i= =5) break;
cout<<“la variable es distinta de 5 \n”;
80
}
cout<<(“la variable es igual a 5 \n”;
getch( );
}
• NOTA: Es posible codificar un lazo de sentencias
que se desea que se ejecuten en forma infinita, para
lograrlo codifique lo siguiente:
for ( ; ;) o while (‘1’)
81
• Ejermplo de un lazo que se ejecuta mientras no se
digite la letra a.
for (; ;)
{ cin>>c;
if (c = = ‘a’) break;
}
printf(“digitó la letra a”);
82
FUNCIONES
• Todo programa en C, por definición, consta de una ó
más funciones. Todos los subprogramas en C son
funciones.
• Todos los programas en C deben llevar una y solo
una función main, que es la primera función que se
ejecuta (pero no necesariamente es la primera que
aparece en la lista) y que llama a todas las otras
funciones directa o indirectamente.
83
ESTRUCTURA DE UNA FUNCION
• El Turbo C permite dos métodos para definir funciones:
• La definición clásica:
tipo nom_f(lista de parámetros)
declaratorias de parámetros
{ declaración de variables locales;
cuerpo de la función
}
84
• La definición actual:
tipo nom_f(declaración de variables);
{ declaración de variables locales;
cuerpo de la función;
}
• Tipo: Declara el tipo de dato o valor que devuelve la
función (es opcional), por defecto en int.
• Nom_f : Es el nombre de la función (obligatorio).
• Lista de parámetros puede ser vacía ( ), contiene una
lista de nombre de variables, a través de las cuales se
espera pasar valores a la función.
85
• Declaración de variables locales, se declaran que
van a ser locales (validas dentro del cuerpo de la
función).
• Cuerpo de la función, es el grupo de instrucciones
ejecutables, incluye también la instrucción
RETURN (opcional).
#include <iostream.h>
void main( )
{ int inum1=2, inum2=3, iresult;
iresult = addt(inum1,inum2);
86
cout<<“El resultado es:\n”;
cout<<iresult<<“\n”; }
88
#include <fstream.h>
//PROTOTIPOS
int addt( int, int);
void main( )
{ int inu1=2, inum2=3, iresult;
iresult = addt( inum1, inum2);
cout<<“El resultado es:”;
cout<<iresult<<“\n”;
}
89
int addt(int inumero1, int inumero2)
{ int resultado;
resultado = inumero1 + inumero2);
return resultado;
}
Llamada de funciones.- Una llamada a una función
consiste en la escritura del nombre de la función
seguido de parámetros . Los parámetros pueden
contener argumentos. Por ejemplo:
clrscr( ) ..... Llama a una función sin argumentos
goto(10,5) .Llama a una función con argumentos
90
• Otras formas de llamar a una función:
x=nom_f(a,b,c) Retorna un valor que se asigna
a x.
cout <<nom_f(a,b,c) Imprime el valor de la func
NOTAS:
– Las funciones existen mientras dure el programa.
– Las funciones no pueden ser anidadas.
– Las funciones pueden ser recursivas, es decir, una
función puede llamarse a si misma
– Una función debe ser declarada como una
variable (local o global) con o sin argumentos.
91
• Ejemplo de un programa que utiliza la función
escribir.
#include <fstream.h>
void main( )
{ int b=5, r;
clrscr( );
r=escribir(b);
cout<<r;
getch( );
}
92
int escribir(int y)
{
return(y*3);
}
• Ejemplo de un programa que utiliza la función área
#include <fstream.h>
#include <float.h>
float área(x,y)
float(x,y)
{
93
float res;
res= (x * y)/2;
return(res);
}
void main( )
{ float base,altura,r,area(float,float);
clrscr( );
cout<<“ingrese la base y la altura”;
cin>>base>>altura;
r=area(base,altura);
cout<<“\n el área es:”<<“ ”<<r; }
94
• Programa que calcula el factorial:
#include <fstream.h>
int fact(int n)
{ if (n<1) return(1);
else return(n*fact(n-1));
}
void main( )
{ int n, fact(int);
clrscr( );
cout<<“ingrese entero positivo”;
95
cin>>n;
cout<<“el factorial de ”<<n<<“ es”<<fact(n);
getch( );
}
• Ejemplo de un programa que calcula la suma y la
imprime:
#include <fstream.h>
#include <conio.h>
void imprime (int s)
{ cout<<“ la suma es :”;
96
cout<<“ ”<<s;
}
int suma(int x, int y)
{ int s;
s= x + y;
return s; }
void main( )
{ int (r, p);
cout<<“digite dos números enteros”;
cin>>r>>p;
97
clrscr( );
sum= suma(r,p);
imprime(sum);
cout<<“terminó”;
getch( ); }
98
• Ejemplo de un programa que usa variables globales
#include <iostream.h>
// Prototipos
int addt( int, int);
int multiplicación( int, int);
void squar( int );
// Variables globales
int iglobal;
void main( )
{
99
int inum1=2, inum2=3, iresult;
squar (inum1);
iresult = iglobal;
cout<<“El resultado es: \n”;
cout<<iresult; }
int addt (int inumero1, int inumero2)
{ int iresultado;
iresultado = inumero1 + inumero2;
return iresultado; }
int multiplicación(int inumero1, int inumero2)
100
{ int resultm;
resultm = inumero1 * inumero2;
return resultm;
}
void squar ( int k )
{
iglobal = k * k;
}
101
Otro ejemplo de variables globales y locales.
#include <stdio.h>
void func1(void), func2(void);
int cuenta; /*variable global*/
void main ( )
{ cuenta = 100;
func1 ( );
return 0;
}
102
void func1 ( )
{ int temp;
temp = cuenta;
func2 ( );
printf(“cuenta es %d”, cuenta); /* imprime 100*/
}
void func2 ( )
{ int cuenta;
for(cuenta=1;cuenta<10;cuenta++)
putchar(‘.’); }
103
• Ejemplo de un programa que imprime mensajes desde
funciones condicionadas por ?.
#include <stdio.h>
int f1(int), f2( );
void main( )
{ int t;
printf (“ : “);
scanf(“%d”, &t);
t? f1(t) + f2 ( ) : printf(“digito en cero”);
/*si t=0 ejecuta el print con cualquier otro
numero ejecuta las funciones*/
104
}
f1 (int n)
{ printf(“%d”, n);
return 0; }
f2 ( )
{ printf (“es lo digitado”);
return 0;
}
105
• Ejemplo de una función que permite el ingreso por
teclado hasta que se digite la letra z.
void espera-c ( )
{ char c;
c = ‘\0’; /* inicializa a c*/
while (c != ‘z’)
c = getch ( );
106
• Recursividad.- Una función puede llamarse a si
misma.
fact (int n)
{ int resp;
if (n<= 1) return (1);
resp = fact (n-1) * n;
return (resp);
}
107
CADENAS
• Se usan para guardar textos.
• El C++ no tiene un tipo de dato string.
• Se construyen las cadenas carácter por carácter.
#include <string.h>
void main ( )
{ char ejem[100];
strcpy(ejem, “ABC”);
cout<<ejem<<“\n”; }
108
• En la función strcpy especifica la cadena de
destino, y en segundo lugar la información que se
desea cargar.
• La función strcpy carga automáticamente un \0
para indicar que es el final de la cadena.
• La función strcmp compara dos cadenas
• Para usar estas funciones se tiene que incluir la
libreria string.h .
109
• Ejemplo de una función que copia el contenido de
una cadena de atrás hacia delante, en otra cadena.
void copia (char *s, char *r)
{ int i,j;
for(i=strlen(s)-1, j=0; i>=0; j++, i--)
r[j] = s[i];
r[strlen(s)-1] = ‘\0’;
}
110
• Ejemplo de una función que valida una contraseña
void contenido( )
{ char cad[30];
int x;
for(x=0;x<3 && strcmp(cad,”clave”);++x)
cin >>cad;
if(x= = 3) cerrar( );
}
Nota: strcmp devuelve 0 si son iguales.
• El siguiente for elimina los espacios en blanco de una
cadena apuntada por cad.
for(; *cad= =‘ ‘;cad++)
111
• Ejemplo de un programa con cadenas.
# include<string.h>
# include <stdio.h>
void main ( )
{ char c1[80], c2[80];
cin >>c1;
cin >> c2;
printf(“Longitudes:%d %d \n”, strln(c1),strln(c2);
if(!strcmp(c1,c2))
printf (“Las cadenas no son iguales”;
strcat(c1,c2); printf(“%s \n”, c1) }
112
ARREGLOS
• Un arreglo es una estructura homogénea de datos
almacenados en forma consecutiva en la memoria.
• Para definir un arreglo se debe especificar el tipo de
datos que contiene.
• Se debe especificar un nombre que identificara al
arreglo.
• Se deberá especificar el número de elementos que
tendrá el arreglo.
113
• Ejemplo de arreglo:
int total[8]
int j[25]
• Para hacer referencia a uno de los elementos del
arreglo, bastará con poner el nombre, y colocar entre
corchetes el número del elemento al que se desea hacer
referencia.
Total[4]=25
j[20]=15
114
Inicialización de Arreglos.-
int i[5] = { 1,2,3,4,5};
char cad [5] = “hola”;
char cad [5] = {‘h’,’o’,’l’,’a’,’\0’};
int cua [6][2]={1,1,2,4,3,9,4,16,5,25,6,36};
• Es posible hacer que el C calcule automáticamente la
dimensión de un arreglo. Esto se logra no
especificando el tamaño del arreglo.
char e1 [ ] = “error de lectura “;
char e2 [ ] = “ error de escritura”;
int cua [ ] [2] = {1,1,2,4,3,9};
115
• Ejemplo de un programa que ordena un conjunto de
datos de mayor a menor:
#include <fstream.h>
#include <conio.h>
void main( )
{ int num[10],i,n,j;
cout<<“\n digite el número de elementos”
cin>>n;
for(i=0;i<n;i++)
{ cout<<“digite el elemento”<<i;
116
cin>>num[i];
} clrscr( );
cout<<“el arreglo ingresado es”;
for (i=0;i<n;i++ )
cout<<num[i];
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
if (num[i]>num[j])
{
117
int aux=num[i];
num[i]=num[j];
num[j]=aux;
}
cout<<“\n el arreglo ordenado es: ”;
for(i=0;i<n;i++)
cout<<num[i]<<“ ”;
getch( );
}
118
• Ejemplo de un programa que crea una matriz
bidimencional en forma random o por ingreso de
datos, la ordena y obtiene el mayor y el menor
elemento.
#include <fstream.h>
#include <ctype.h>
#include <stdlib.h>
void leer( );
void leer2( );
119
void ver( );
void ordenar ( );
void buscar ( );
int p[20][20];
int i,j,m,n;
void main( )
{int p;
char resp;
cout<<“Este programa una vez digitado los datos”;
cout<<“muestra los datos en intervalos de 5 seg”;
120
sleep(2);
do
{ cout<<“\nDigite el numero de columnas”;
cin>>n;
cout<<“\nDigite el numero de filas’:
cin>>m;
cout<<“\nDesea digitar los datos o que se creen
aleatoriamente”;
cout <<“\nSi es aleatoriamente digite: a”;
cout<<“\nSi es manual digite: m”;
121
cin>>resp;
if(resp==‘m’) { leer( ); }
if(resp==‘a’) { leer2( ); }
cout<<“\nLa matiz digitada es:”;
ver( );
sleep(4);
ordenar( );
cout”\nLa matriz ordenada por columnas es:”;
ver( );
sleep(4);
122
cout<<“\nObtiene los valores maximo y mínimo”;
buscar( );
cout<<‘\nDesea reiniciar el proceso s/n”;
cin>>resp;
sleep(1);
}
while(resp==‘s’); }
void leer( )
{ cout<<“\n\n\n”;
123
for(i=0;i<n;i++)
{for(j=0;j<m;j++)
{cout<<“Digite los elementos de A”<<
i+1<<“,”<<j+1<<“ “;
cin>>p[i][j];
}
}
}
void leer2 ( )
{ int r,a, x,s;
124
cout<<“\n\n\n”;
for(i=o; i<n; i++)
{ for(j=0; j<m; j++)
{ randomize( ):
a=rand( );
x=a;
r=x%250;
p[i][j]=r;
}
}
}
125
void ver( )
{ for(i=0;i<n;i++)
{ for(j=0;j<m;j++)
{ cout<<p[i][j];\\
}
}
}
void ordenar( )
{ int aux, k;
for( i=0;i<n;i++)
126
{for(j=0; j<m; j++)
{ for (k=j+1; k<m; k++)
{ if (p[i][j]>p[i][k])
{ aux=p[i][k];
p[i][k]= p[i][j];
p[i][j]=aux;
}
}
}
}
}
127
void buscar ( )
{ int max, min;
max=min=p[0][0];
for (i=0;i<n;i++)
{ for (j=0;j<m;j++)
{ if( p[i][j] > max)
{ max= p[i][j];}
if(p[i][j]< min)
{ min = p[i][j];}
}
}
128
cout<<“\nEl maximo valor es: “<< max;
cout <<“\nEl minimo valor es: “<< min;
}
• Cuando se usa un array como argumento de una
función, solo se debe pasar la dirección del array y no
una copia completa del array. En C un nombre de
array sin indice es un puntero al primer elemento del
array.
# include <stdio.h>
void mostrar (int num[10]);
void main ( )
129
{ int t [10], i;
for (i=0; i<10; i++)
t[i] = i;
mostrar (t);
}
void mostrar( int num[ ])
{ int i:
for (i=0; i<10;i++)
printf(“%d”, num[i]);
}
130
• Otras dos formas de la función mostrar son:
void mostrar ( int num [10])
{ int i;
for ( i=0; i<10; i++)
printf (“%d”, num[i]);
}
void mostrar (int *num)
{ int i;
for(i=0; i<10;i++)
printf(“%d”, num[i]);
}
131
• Ejemplo de un programa que carga e imprime un
arreglo utilizando funciones, enviando como
parámetros los arreglos.
# include <fstream.h>
void carga (int x[ ]);
void imp ( int x [ ]);
void main ( )
{ int x[ 3 ];
carga (x);
imp (x); }
132
void carga (int x [ ] )
{ int i;
for (i=0; i<=2; i++)
cin>>x [i];
}
void imp ( int x [ ])
{ int i;
for (i=0; i<=2; i++)
cout << x[i];
}
133
• Ejemplo de un programa que usa un arreglo como
parámetro en una función.
# include <fstream.h>
# include <stdio.h>
# define imax 10
# define ilimite-sup 100
void main ( )
{ int iarray [imax]={1,2,3,4,5,6,7,8,9,10};
int i, ipeq;
int iminimo(int iarray[ ], int imax);
134
pritf(“la lista original es: “);
for (i=0; i<imax; i++)
printf(“%d”, iarray[i]);
ipeq=iminimo(iarray, imax);
printf(“\nEl valor mas pequeño es: %d “, ipeq);
}
int iminimo (int iarray [ ], int imax)
{ int i, iminimo-actual;
iminimo-actual=ilimite-sup;
for(i=0; i<imax; i++)
if(iarray[i]<iminimo-actual)
iminimo-actual=iarray[i];
return (iminimo-actual); }
135
• Array de cadenas.- Para este caso se utiliza un
array bidimencional donde el índice izquierdo
determina el número de cadenas y el derecho la
longitud máxima de las cadenas.
• Por ejemplo si se desea declarar un array de 30
cadenas, cada una de 79 caracteres:
char array-cad[30][80] /*uno mas para el \o */
• Es simple acceder a una cadena individual,
simplemente se debe especificar el índice izquierdo
gets (array-cad[2])
136
• Ejemplo de un programa que lee líneas de texto hasta
encontrar un blanco. Entonces vuelve a mostrar cada
línea carácter a carácter.
# include <stdio.h>
# define max 100
# define long 80
char texto [max][long];
void main ( )
{ register int t, i, j;
for(t=0;t<max;t++)
137
{ printf (“%d”,t)
cin>>texto[t];
if(! *texto[t]) break; /*termina si línea en blc
}
/*muestra el texto carácter por carácter */
for (i=0; i<t; i++)
{ for (j=0; texto[i][j]; j++)
printf(“%c”, texto[i][j]);
printf(“%c”, “\n”);
}}
138
PUNTEROS
• Un puntero es una variable que contiene una dirección
de memoria. Normalmente esa dirección es la
posición de otra variable de memoria.
• Por ejemplo, si una variable en la posición 1004 está
apuntada por otra variable situada en la posición
1000, esa posición 1000 contendrá el valor 1004.
VARIABLE PUNTERO.- Si una variable va a
contener un puntero, entonces tiene que declararse
139
como tal. Una declaración de puntero consiste en un
tipo base, un * y el nombre de la variable. El
formato general de una variable puntero es:
tipo* nombre
donde tipo es cualquier tipo válido de C y nombre es
nombre de la variable puntero.
• El tipo base del puntero define el tipo de variables a
las que puede apuntar el puntero.
140
OPERADORES DE PUNTEROS
• Existen dos operadores especiales de punteros & y *.
El & es un operador que devuelve la dirección de
memoria de su operando. Por ejemplo:
m = &cuenta
pone en m la dirección de memoria de la variable
cuenta. La dirección no tiene nada que ver con el valor
de la variable cuenta.
• Suponga que la variable cuenta utiliza la posición
141
de memoria 2000 para guardar su valor. Suponga
también que cuenta tiene el valor 100. Después de
la asignación anterior m tiene el valor 2000.
• El segundo operador de punteros, *, es el
complemento de &. Es un operador que devuelve el
valor de la variable localizada en la dirección que
sigue. Por ejemplo, si m contiene la dirección de
memoria de la variable cuenta, entonces:
q = *m
pone el valor de cuenta en q.
142
#include <fstream.h>
void main( )
{ int cuenta, q;
int *m;
cuenta = 100;
m = &cuenta /*recibe la dirección*/
q = *m /*se asigna a q el valor de cuenta*/
cout<<q;
getch ( );
}
143
ARITMETICA DE PUNTEROS
• Existen sólo dos operaciones aritméticas que se
pueden usar, la suma y la resta.
• Sea p1 un puntero a un entero con valor actual de
2000 y asumamos que los enteros son de 2 bytes de
longitud. Después de la expresión p1++, p1
contiene 2002 y no 2001. Cada vez que se
incremente p1, apunta al siguiente entero. Lo mismo
ocurre en el decremento.
144
void main ( )
{ int inum1=2, inum2=3, iresult;
int* pnum1;
int* pnum2;
pnum1 = &inum1;
pnum2 = &inum2;
iresult = *pnum1 + *pnum2;
cout<<“El resultado es \n”;
cout<<iresult<<“\n”;
}
145
• Ejemplo de un programa que carga un arreglo de
caracteres con punteros y luego los convierte a
mayúsculas.
# include <stdio.h>
# include <ctype.h>
void mostrar-mayusc (char *cadena)
{ char c [80];
cin>>c;
mostrar-mayusc ©;
}
146
void mostrar-mayusc (char *cadena)
{ register int t;
for ( t=0; cadena[t]; ++t)
{ cadena [t] = toupper (cadena[t]);
printf(“%c”, cadena[t]);
}
}
NOTA.- register solo se puede usar con variables
locales y permite el acceso mas rápido a la misma
147
• Ejemplo de un programa que lee una cadena y
después lee un carácter . Si el carácter está en la
cadena la imprime a partir de la coincidencia.
# include <stdio.h>
# include <conio.h>
char *encuentra (char c, char *s);
void main ( )
{ char s[80], *p, c;
cin>>(s);
c = getch( );
148
p = encuentra (c, s);
if (p) /* se ha encontrado*/
printf (“%s”, p);
else printf (“ no se encontró”);
}
char *encuentra(char c, char *s)
{ register int cont;
cont=0;
while (c!= s[cont] && s[cont]
cont ++;
return (& s[cont]); }
149
• Ejemplo de un programa que crea y mantiene una
pila.
# include <stdio.h>
# include <stdlib.h>
# define tamano_pila 50
void guarda (int i);
int saca ( );
int *p1, *top, pila[tamano_pila];
void main ( )
{ int valor;
150
p1=pila; /*asigna a p1 el comienzo de la pila*/
top = p1; /*top contiene el tope de la pila */
do
cout<<“un numero (-1 ->terminar, 0 ->sacar”;
cin >>valor;
if(valor !=0) guardar(valor);
else cout <<“este es el << saca( );
}
while (valor != -1);
}
151
void guarda (int i)
{ p1 ++;
if (p1 = = (top+tamano_pila))
{ cout<<“pila desbordada”;
exit;
}
*p1= i;
}
void saca ( )
{ if (p1 = = top)
152
{ cout << “ pila vacía”;
exit;
}
pi --;
return *(p1 + 1);
}
• NOTA.- Las funciones guardar y saca realizan
una prueba para determinar si p1 apunta al final de
la pila, o si p1 apunta a una pila que está vacía.
153
• Punteros y arrays.
Char cad [80] , *p1;
p1 = cad;
• p1 a sido asignado a la dirección del primer elemento
del arreglo cad. Para acceder al quinto elemento se
puede codificar:
cad[4] o *(p1+4)
• Punteros y arrays de caracteres.-
int strcmp (char *s1, char *s2)
{ while (*s1)
154
if (*s1 - *s2)
return (*s1 - *s2);
else
{ s1++;
s2++;
}
return 0;
• Recuerde que en C todas las cadenas terminan en cero,
que es un valor falso, por lo que el while (*s1) es
cierto mientras que no se llegue al final de la cadena
155
ESTRUCTURAS
• El C/C++ permiten declarar sus propias tipos de datos.
//Declaración de la estructura.
#include <iostream.h>
#include <fstream.h>
#include<string.h>
struct mi-estructura
{
156
char snom[100];
int edad;
};
void name( )
{
mi-estructura m-estruc;
strcpy([Link], “David”);
[Link] = 12;
cout<<“Mi nombre es”;
cout<<[Link];
157
cout<<“ y mi edad es”;
cout<<[Link] }
• Referencia a los elementos de una estructura.-
nombre de la estructura . nombre del elemento
info_dir . codigo = 12345;
printf(“%d”, info_dir.codigo);
• Utilización de estructuras y array de estructuras
#include<stdio.h>
#include<stdlib.h>
# define max 100
struct inv
{ char nombre[30];
158
float costo;
int saldo;
} info_inv[max];
void inicializa_lista(void), listar( ), borrar( );
void introduce(void);
int menu(void), busca_libre(void);
void main( )
{ char opcion;
inicializa_lista( );
for(; ;)
{ opcion = menu ( )
switch (opcion)
{ case 1: introduce ( ); break;
159
case 2: borrar ( ); break;
case 3: listar ( ); break;
case 4 : return 0;
}
}
}
void inicializa_lista ( )
{ int t;
sitio = busca_libre ( );
160
/*Prepara el array de estructuras para su uso posterior,
poniendo un carácter nulo en el primer byte de cada
campo “nombre” */
void inicializa_lista(void)
{int t;
for (t=0; t<max; ++t)
info_inv[t].nombre[0]=‘\0’;
}
int menu ( )
{ char s[80];
161
int c;
cout<<“\n”;
cout<<“1.- Introducir un articulo \n”;
cout<<“2.- Borrar un articulo \n”;
cout<<“3.- Listar el inventario \n”;
cout<<“4.- Salir \n”;
do
{cout<<“\n Digite su opcion: “;
cin>>s;
c=atoi (s) /*convierte la cadena a la que se apunta en
un valor int. La cadena debe contener un valor entero
*/
162
} while (c<0 || c>4);
return c;
}
void introduce (void)
{ int sitio;
sitio = busca_libre( );
163
if(sitio = = -1)
{ cout << “lista llena”;
return; }
cout <<“digite articulo\n”;
cin>>info_inv[sitio].nombre;
cout<<“digite costo\n”;
cin>>info_inv[sitio].costo;
cout<<“digite cantidad disponible\n”;
cin>>info_inv[sitio].saldo;
}
164
/*Devuelve el indice de la primera posición libre
del array, si no lo hay devuelve -1 */
int busca_libre ( )
{ register int t;
for(t=0; info_inv[t].item[0] && t<max; ++t);
if (t= = max) return -1;
return t;
}
void borrar ( )
{ register int sitio;
165
char s[80];
cout<<“digite el numero de registro\n”;
gets(s);
sitio= atoi(s);
if(sitio>=0 && sitio<max)
info_inv[sitio].nombre[0] =“\0”;
}
void listar ( )
{ register int t;
for(t=0;t<max;++t)
166
{ if (info_inv[t].nombre[0]
{cout <<“articulo “<<info_inv[t].nombre<<“\n”;
cout<<“costo “<<info_inv[t].costo<<“\n”;
cout<<“saldo “<<info_inv[t].saldo<<“\n”;
}
}
}
167
ARCHIVOS
• Es un concepto lógico que puede ser aplicado desde
un archivo hasta un terminal.
• Se asocia un flujo con un archivo, realizando la
apertura del archivo, De esta forma puede fluir la
información entre éste y el programa.
• fopen ( ).- Permite abrir un flujo y asociarlo a un
archivo. Por ejm si se desea abrir un archivo llamado
totales de modo escritura:
168
fp = fopen(“totales”, “w”)
donde fp es una variable de tipo FILE y w es el modo.
• Para poder detectar un error al abrir un archivo se debe
codificar de la siguiente manera:
if ((fp=fopen(“totales”,”w”))= = NULL)
{ cout<<“no se puede abrir el archivo\n”;
exit(1); }
NULL es una macro definida en stdio.h
• Si se utiliza fopen para un archivo para escritura,
cualquier archivo que ya exista con ese nombre se borra
y se abre; si no existe se crea.
169
Modo Significado
r Abrir archivo texto para lectura.
w Crea archivo texto para escritura.
a Abre archivo texto para añadir.
rbAbre archivo binario para lectura.
wb Crea archivo binario para escritura.
ab Abre archivo binario para añadir.
r+ Abre archivo texto para lectura/escrt.
w+ Crea archivo texto para lect/esc.
a+ Abre o crea arch. texto para lect/esc
170
• putc ( ).- Escribe caracteres en un flujo que ha sido
abierto para operaciones de escritura.
int putc(int c, FILE *pa)
donde pa es el puntero al archivo devuelto por el
fopen( ) y c es lo que se va ha escribir.
• getc( ).- Lee caracteres de un flujo abierto en modo
lectura.
int getc(FILE *pa)
• Esta función devuelve EOF cuando se ha llegado al
final del archivo.
171
• Por ejemplo para leer un archivo texto hasta el final
se puede utilizar:
c = getc (pa );
while (c != EOF)
c = getc(pa);
• fclose( ).- Cierra un flujo que fue abierto mediante
fopen.
int fclose( FILE *pa)
si devuelve 0 significa que la operación se realizó,
sino devuelve EOF.
172
• ferror ( ), rewind( ).- La primera determina si se
ha producido un error en una operación sobre el
archivo.
int ferror (FILE *pa)
• La segunda inicializa el indicador de posición al
principio del archivo.
void rewind (FILE *pa)
• Ejemplo de un programa que lee caracteres del
teclado y los escribe en el archivo hasta que el
usuario introduzca un signo dólar.
173
#include <stdio.h>
void main (int argc, char *argv[ ] )
{ File *fp;
char car;
if(argc != 2)
{ cout<<“no digitó el nombre del archivo\n”;
return 1; }
if(( fp = fopen(argv[1], “w”))= = NULL
{ cout<<“no se pudo abrir el archivo\n”;
return 1 ; }
174
do
{ car = getchar ( );
putc (car, fp); }
while (car != ‘$’);
fclose (fp);
return 0;
}
175
PROGRAMACION ORIENTADA A
OBJETOS
• La programación orientada a objetos es una nueva
forma de enfocar el trabajo de la programación.
• La programación orientada a objetos toma las mejores
ideas de la programación estructurada y las combina
con nuevos y poderosos conceptos que animas o
alientan una nueva visión de la programación.
• OBJETOS.- Un objeto es simplemente una entidad
lógica que contiene datos y un código que manipula
estos datos.
176
• Un objeto es una variable de un tipo definido por el
usuario.
• POLIFORMISMO.- Permite usar un nombre para
varios propósitos relacionados pero ligeramente
diferentes.
• Permite el uso de un nombre para especificar una
clase de acción general.
• HERENCIA.- Un objeto puede adquirir las
propiedades de otro objeto.
177
INTRODUCIR CLASES EN C++
• Para crear un objeto en C++, primero se tiene que
definir su forma general usando la palabra reservada
class. Una clase es sintácticamente similar a una
estructura en C.
class circulo
{
public:
circulo( );
178
void setra(void);
void getra( void);
-circulo( );
private:
void calcularea(void);
int radio;};
• La palabrea reservada class es una indicación para el
compilador que lo que viene entre llaves pertenece a
la declaración de la [Link] olvide incluir ; al final
de la declaración. Esta declaración debe contener la
declaración de los datos miembros
179
por ejemplo int radio, y los prototipos de las funciones
miembro de la clase.
• Toda declaración de clase debe incluir el prototipo de la
función constructor y del destructor .
• El nombre del constructor debe ser el mismo que el de
la clase seguido por ( ) y debe estar bajo la palabra
reservada public.
• El nombre del destructor debe ser el mismo que el de la
clase precedido por ~.
class rectangulo
{ public:
rectangulo( ); (constructor)
~rectangulo( ) (destructor)
180
• Una clase puede contener partes privadas y
públicas. Por defecto todos los elementos de una
clase son privados.
• Las palabras public y private le indican al
compilador la accesibilidad de las funciones
miembro y de los datos miembro.
• En el ejemplo anterior setra y getra son funciones
que pueden ser llamadas por cualquier función del
programa, en cambio la función calcularea solo
puede ser utilizada por las funciones miembro de la
clase circulo.
181
EJEMPLO S DE PROGRAMAS
CON CLASES
#include <iostream.h>
class circulo
{ public:
circulo (int r); //CONSTRUCTOR
void setradio(int r);
void disparea(void);
~circulo( ); //DESTRUCTOR
182
private:
float calcularea(void);
int radio;
};
// FUNCION CONSTRUCTOR
circulo: : circulo( int r )
{ radio = r; }
// FUNCION DESTRUCTOR
circulo: : ~circulo( )
{ }
183
//FUNCION DISPAREA
void circulo: :disparea( void )
{ float farea;
farea = calcularea ( );
cout<<“El área del circulo es”<<farea<<“\n”;
}
//FUNCION CALCULAREA
float circulo: : calcularea (void)
{ float f;
f = (float) (3.14 * radio * radio);
184
return f; }
void main ( )
{ //CREA UN OBJETO DE LA CLASE
//CIRCULO CON RADIO 10
circulo micirculo( 10 );
//DISPLAYA EL AREA DEL CIRCULO
[Link]( );
}
185
• Cuando llega el momento de codificar una función
que es miembro de una clase, se debe indicar al
compilador a que clase pertenece la función. Por ejm,
una forma de codificar la función meter( ) es;
void cola::meter(int i)
{ if (ppio= = 100)
{cout<<¨la cola está llena¨;
return; }
ppio++;
c[ppio] = i;
}
186
• Frecuentemente, a : : se le denomina operador de
resolución de ámbito. Esencialmente indica al
compilador que esa versión de meter pertenece a la
clase cola. En C++ varias clases diferentes pueden
utilizar el mismo nombre de función. El compilador
sabe que función pertenece a que clase gracias al
operador de resolución de ámbito y al nombre de la
clase.
• Para llamar a una función miembro desde una parte del
programa que no es parte de la clase, debe usar el
nombre del objeto y el operador punto. Por ejm este
fragmento llama a la función ini para el objeto a:
cola a, b;
[Link] ( );
187
• Es importante entender que a y b son dos objetos
distintos, la única relación es que son objetos de un
mismo tipo
• El programa que se muestra a continuación presenta
todas las partes de la clase cola.
# include <iostream.h>
class cola
{ private:
int c[100];
int ppio, fin;
public:
void ini(void);
void meter(int i);
int sacar(void); };
188
void cola: : ini(void) {
fin=ppio=0; }
void cola: : meter(int i) {
if(ppio= =100) {
cout<<¨la cola está lena¨;
return; }
ppio++:
c[ppio]= i; }
int cola: : sacar(void) {
if (fin= =ppio) {
189
cout << ¨la cola está vacía¨;
return 0; }
fin++;
return c[fin]; }
main(void) {
cola a, b; // crea dos objetos cola
[Link] ( );
[Link] ( );
[Link](10);
[Link](10);
190
cout << [Link]( ) << ¨ ¨;
cout << [Link]( ) << ¨ ¨;
cout << [Link]( ) << ¨\n¨;
}
191
REUTILIZACION DE UNA CLASE
• Uno de los parámetros del Visual C++ es la ruta
Include, la cual asigna una ruta hacia el directorio en
donde se encuentran varios archivos h. El iostream.h,
por ejm reside en este directorio y por lo tanto se
puede encerrar el nombre entre < >.
• Es posible que se tenga un archivo creado por el
usuario, como por ejm circulo.h (con extensión h), el
cual no se encuentra en la ruta del Include, sino en
cualquier otro directorio.
192
• Esto significa que si desea incluir dicho archivo como
parte de otro programa puede hacerlo utilizando el
Include, pero encerrando el nombre del archivo entre
“ ”, para que el compilador sepa que debe buscar
dicho archivo en el directorio actual del proyecto.
• Si desea puede realizar la declaración de una clase en
un archivo xxx.h y puede utilizarla en otros
programas utilizando include “xxx.h”.
• Para crear un archivo de este tipo siga estos pasos:
1.- Con un proyecto abierto, seleccione NEW
193
en el menú File.
2.- Seleccione C/C++ Header File en la lista de
tipos de proyectos.
3.- Digite un nombre en el cuadro File Name
con extensión h.
4.- Haga click en OK.
5.- Se desplegara la ventana para digitar la
declaración de la clase y sus funciones
miembro.
194
//circulo.h
class circulo
{ public:
circulo(int r);
void setradio(int r);
void disparea(void);
~circulo( );
private:
float calarea(void);
int radio;
};
195
circulo::circulo(int r)
{ radio=r; }
circulo::~circulo ( )
{ }
void circulo::disparea(void)
{ float area;
area=calarea( );
cout<<“esta es el área”<<area; }
float circulo::calarea(void)
{ float f; f=(float) (3.14*radio*radio);
return f; }
196
• Un programa que incluya dicha definición de clase
tendría la siguiente codificación:
#include <iostream.h>
#include “circulo.h”
void main ( )
{ //Crea objetos: micirculo,tucirculo,sucirculo
circulo micirculo (10);
circulo tucirculo (20);
circulo sucirculo (30);
// Muestra el área de los círculos
197
[Link] ( );
cout<<“\n”;
[Link] ( );
cout<<“\n”;
[Link] ( );
cout<<“\n”;
}
198
PARAMETROS
PREDETERMINADOS
• Una de las características del C++ es el de poder utilizar
parámetros predeterminados en el prototipo de las
funciones.
Int totales(a=10,b=20,c=30,d=40)
Desde el main se puede ejecutar esta función de las
siguientes maneras:
main( )
{ ..........
.........
199
int resultado;
resultado = totales;
también podría ser de la siguiente manera:
main( )
{ .......
.......
int resultado;
resultado = totales(50, 80);
• En el primer caso asume los valores asignados en el
prototipo, y en el segundo los completará con los dos
últimos.
200
JERARQUIA DE CLASES
• El C++ le permite crear una nueva clase a partir de
una clase original.
• A la clase original se le llama clase base y a la que se
crea se le llama clase derivada.
• La clase derivada hereda los datos y funciones
miembro de su clase base
• Cuando se crea una clase derivada se puede adicionar
otras funciones y datos miembro.
201
#include <iostream.h>
class rectangulo
{ public:
rectangulo(int b, int h); //Constructor
void disparea(void );
~rectangulo( ); //Destructor
int base; int altura;
};
//Declaración de la clase derivada nrectangulo
class nrectangulo : public rectangulo
202
{ public:
nrectangulo(int b, int h)
void setbase (int b);
void setaltura(int h);
~nrectangulo( );
};
rectangulo::rectangulo(int b, int h)
{ base = b;
altura = h; }
rectangulo::~rectangulo( )
{ }
203
void rectangulo::disparea(void)
{ int area;
area = base * altura;
cout<<“el área es ”<<area<<“\n”; }
nrectangulo::nrectangulo(int b,int h):rectangulo(b,h)
{ //Constructor de la clase derivada que se efectúa
ejecutando el constructor de la clase base :
(rectangulo) }
nrectangulo::~nrectangulo( )
{ }
void nrectangulo::setbase(int b)
{ base = b; }
204
void nrectangulo::setaltura(int h)
{ altura = h; }
void main ( )
{ nrectangulo mirectangulo (10,20);
[Link]( );
[Link](100);
[Link](20);
[Link]( );
}
205
• La jerarquía de clases puede ser tan compleja como se
desee.
class nnrectangulo: public nrectangulo
La declaración anterior permite construir la clase
derivada nnrectangulo de la clase base nrectangulo,
que es a su vez una clase derivada de la clase base
rectangulo.
• Cuando se crean clases derivadas se debe tener en
cuenta, al momento de su uso, que funciones o
variables miembro de una clase pueden ser ejecutadas
con un objeto de otra clase.
206
• Ejm
a
c d
e f
207
USO DE APUNTADORES A
OBJETOS
214
• De no existir la herramienta Controls, haga clik en la
opción Customize del menú Tools, seleccione
Toolbars y luego marque la opción Controls.
• Para colocar cada control que desee en su “pantalla”
solo busquela en la herramienta Controls, hagale
click y luego haga click en el lugar de su “pantalla”
en donde desee ubicarla. Por ejemplo escoja Buttom
para definir un botón ok, escape, saludo, etc.
• Para cambiar el texto que contiene dicho botón, haga
click con el botón derecho del mousse sobre dicho
botón y seleccione la opción Properties
215
• La pantalla que muestra contiene una opoción
Caption, haga click en ella y cambie su contenido
por el que desee. Por ejm. EXIT, Saludo, etc.
• Para poder asignarle una identificación a un botón
que permita identificarlo posteriormente, utilice el
recuadro ID de la opción Caption.
• Si desea adicionar los botones para maximizar o
minimizar su “pantalla”, seleccione la opción Styles
de Properties y marque las opciones Minimeze box
y Maximize box.
216
• Para guardar su trabajo utilice la opción Save All.
• Para ejecutar su trabajo utilice Build.
217
CODIFICACION DEL CODIGO PARA
EL DISEÑO VISUAL
• Selecione la opción Class Wisard del menú View con
lo que se mostrará la ventana MFC Class Wizard, el
cual es un asistente que permite agregarle código a
los diferentes controles que se han definido en el
diseño visual.
• Selecione la opción Message Maps.
• Tenga presente que Class Name debe identificar la
clase asociada con el cuadro de diálogo definido.
218
• Selecione del cuadro Object Ids, el nombre del objeto
al que se le va asignar el código.
• El cuadro Messages muestra los eventos que están
asociados a dicho objeto.
• Selecione del cuadro Messages el evento al que desea
asignarle una función.
• Haga click en Add Funtion, se desplegara la ventana
Add Menber Fuction sugiriendole un nombre, si
desea aceptelo o cambielo.
• Haga click en el botón Edit Code con lo que se abrirá
un archivo que contiene la función.
219
• Adicione en dicha función la o las sentencias
necesarias para que dicho evento cumpla con lo que
se desea.
• Si desea que se produsca un texto como salida utilice
MessageBox y entre parentesis y comillas el texto que
desea que muestre. Ejm:
void caja::onsaludobuttom( )
{
MessageBox (“Este es un ejemplo”);
}
220
• Si ha creado en su diseño visual, un botón para
poder salir de esa “pantalla” debe incluir como
instrucción en la función que el sistema crea para
dicho botón: OnOK( );
• Si desea asignar codigo a otros botones que ha
definido, simplemente seleccione Class Wizard del
menú View y siga los pasos indicados
anteriormente.
221
APERTURA DE UN PROYECTO YA
EXISTENTE
• Ingrezar al C++.
• Seleccione Open Workspace del menú File.
• Utilizar el cuadro de dialogo del Open para seleccionar
el archivo que contiene el proyecto.
• Haga click en el botón Resource View.
• Una forma alternativa de abrir un proyecto en el que se
está trabajando recientemente es selecionando Recent
Workspace(File) y seleccionar el que desee.
222
CONTROLES EDIT Y CHECK
• El control Edit permite incluir un téxto estático en una
“pantalla” (Static text).
• Tambien es posible incluir una caja de edición (Edit
Box), el cual es un lugar donde el usuario tiene que
digitar algo, como por ejemplo el password o el
“usuario”.
• En el caso de que desee, es posible definir las
características de la letra que se utilizará en la
“pantalla”, para eso haga lo siguiente:
223
-Click con el botón derecho en cualquier parte libre de
la “pantalla” y seleccione Properties.
- Seleccione la opción General, luego haga click en
Font, y luego escoja las características deseadas.
• Para definir una caja que se puede marcar con un
check o una “x”, debe utilizar el objeto Check box.
• Si desea que la acción de un botón se active
presionando una letra de su nombre, se debe colocar
el signo & delante de la letra correspondiente en el
momento en que definió la Caution en Properties.
&EXIT T&EST
224
• Utilizar la opción Extended Styles de la opción
Properties, para variar la apariencia visual de un
botón haciendo click en Client edge, Static edge y
Modal frame.
225
ADICION DE VARIABLES A
CONTROLES EDIT Y CHECK
227
INICIALIZACION DE CONTROLES
• En algunos casos es necesario que algunos controles
estén inicializados, es decir que muestren en la
“pantalla” un check o una x, para lograrlo efectúe lo
siguiente:
• Seleccione Class Wizard del menú View.
• Seleccione Message Maps.
• Seleccione en Objects Ids el objeto con el que va ha
trabajar.
228
• Escoja de Messages la opción WM_INITDIALOG.
• Haga click en el botón Edit Code.
• Agregue en la función la inicialización a verdadero
(TRUE), o falso (FALSE) de las cajas de chequeo
(Check box) que ha definido en su “pantalla”.
m_visibleCheck = true;
• Para transferir dichos valores de las variables y se
representen en la pantalla debe incluir la instrucción
UpdateData(FALSE).
• Si se desea transferir las condiciones de la “pantalla” a
las variables: UpdateData(TRUE).
229
• De esta forma se pueden cargar valores a los diferentes
objetos de una “pantalla”. Por ejm. Si ha definido si ha
definido un Edit Box y se quiere que en ella aparezca
un texto a presionar un botón (Push Buttom) , se debe
seguir los 7 pasos anteriores para el (Push Buttom) y
agregar en la función:
m_verEdit = “Este es un ejemplo”;
donde m_verEdit es el Member variable name de un
control Edit Box.
• Si se tiene una caja de edición (Edit Box) y se desea
controlar que esté activa o desactiva con un botón
230
(Push Buttom), siga los pasos anteriores para dicho
botón y en la función debe codificar lo siguiente:
UpdataDate(TRUE);
if (m_vcheck = = TRUE)
Get
231