You are on page 1of 231

LENGUAJE C

M.Sc Ing. JORGE BUTLER B.

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 propsito general
Lenguaje de alto nivel
Lenguaje estructurado
2
INTROD......
Permite el manejo de datos: bits, bytes y de
direcciones
Es de fcil transportabilidad
Ofrece una enorme librera en ejecucin
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:Smbolos especiales,identificadores
etiquetas, nmeros, constantes, variables,etc....
Identificadores.- Representan a constantes,
variables, tipos de datos, funciones, etc......
Secuencia de caracteres de cualquier tamao
comenzando con letra, sin blancos.
Diferencia las letras maysculas de las letras
minscula 4
Limite 123-var
Valor1 index $
MENSAJE Float
N3 $total
Numero-blanco
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.....

Directiva..- Acta como una orden especial al


computador.

Va precedida por un # e indica una accin especifica a


ejecutar.

En cualquier parte y a plica partir de all.

7
TIPOS DE DATOS

Carcter ( char ).- Ocupa un byte.


Entero ( int ).- Ocupa 4 bytes.
Largo ( long ).- Ocupa 8 bytes
Sin signo ( unsigned ).- Para los enteros
Punto flotante ( float ).- Ocupa 4 bytes
Doble (double).- Ocupa 8 bytes
Puntero.- Se antepone un * a los dos tipos
fundamentales. Contiene la direccin de un objeto. 8
OPERADORES ARITMETICOS
+ Suma
- Resta
* Multiplicacin
/ Divisin
++ Incremento en una unidad
-- Decremento en una unidad
= Asigna el valor de la expresin
9
+= Suma la primera variable a la segunda.
- = Resta a la segunda variable la primera.
* = Multiplica la segunda por la primera.
/ = Divide la primera entre la segunda.
% Da el resto de una divisin entera.
( ) Para alterar la prioridad de ejecucin de las
operaciones.

10
OPERADORES LOGICOS

! Niega el valor de la expresin derecha.


= = Da verdad si las expresiones derecha e
izquierda son iguales.
! = Contrario al anterior.
< Verdad si izquierda menor que derecha.
> Contrario al anterior.
< = Verdad si izquierda es menor o igual
11
OPERADORES LOG.... Y OTROS

> = Verdad si izquierda es mayor o igual.


& & Operador AND.
|| Operador OR.
? Asigna un valor escogido entre dos. Por ejemplo:
x=10 y=x>9 ? 100:20
, Crear Operaciones de ejecucin secuencial
Y= (x=10,x*2,x+9) Y = 29
12
OPERADORES DE BITS

& Operador and.


Operador or
Operador or exclusivo
Operador complemento
>> Desplazar un lugar a la derecha
<< Desplazar un lugar a la izquierda.

13
ESTRUCTURA DE UN
PROGRAMA

Un programa se compone de uno o ms bloques de


sentencias llamados funciones.
Cada funcin tiene un nombre seguido por
parntesis entre los que hay o no, otros datos.
FUNCION main( ).- Todo programa debe contener
al menos esta funcin.
Gobierna la ejecucin del programa.

14
ESTRUCTURA

DIRECTIVAS
main ( )
{ Declaracin de variables:
Cuerpo de la funcin principal
}
main es el nombre de la funcin principal
{ } Indica el comienzo y final del cuerpo de la
funcin. 15
En Declaracin de variables, se declaran las
variables locales antes de ser usadas.
Cuerpo de la funcin es un grupo de instrucciones
ejecutables.
Directivas, es para incluir otros archivos (# include)
y definir constantes y macros ( # define).
NOTA: Utilizar el tipo void (vaco) en las
declaraciones de funciones y definiciones para
especificar que la funcin no devuelve valor o no
emplea parmetros.
16
EJEMPLO DE PROGRAMA
/*Programa de saludo*/
#define M1 Bienvenidos al C
#define M2 Estas alegre
void main( )
{ char nombre[30];
printf(Cul es tu nombre?:);
gets(nombre);
printf (\a\z %s\n,nombre,M1,M2);
printf(OK?\n); getch( );
}
17
INDICACIONES GENERALES

Use /* para comentarios.


Cada instruccin termina en punto y coma.
Se puede agrupar instrucciones entre llaves.
Puede existir sub-bloques de instrucciones:
{/*comienzo del bloque*/
{/*comienzo del sub-bloque*/
.....
/*fin del sub-bloque*/}
/*fin del bloque*/} 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 lnea \n
- const int max=200
- const char x=a 19
CONST........

El identificador puede ser con maysculas o


minsculas.
El dato puede ser de cualquier tipo ya definido.
Una const string debe estar entre comillas:
ESTO ES UN EJEMPLO DE CADENA
Una constante de tipo char debe estar entre
apstrofes. a, 9, \n.

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
declaracin, 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,area
char car
long numero,maximo
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 carcter
% % carcter (no hay conversin)
n ninguna
p nmero 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 carcter
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 (notacin cientfica)
g, G float
c carcter simple
s cadena
n puntero en un entero
p puntero (direccin de puntero)
27
puts Escribe una cadena de caracteres
puts(cadena)

cputs Igual al anterior pero para video


putchar Escribe un carcter en pantalla.
putschar(car)
Donde car es una variable char o constante.
putch Igual al anterior pero para vdeo.
cprintf Igual a Printf pero para vdeo.

28
SALIDA CON FORMATO

printf(%m.nf,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 impresin a la izquierda.
29
Ejemplo:
# define suel 450.87569
main( )
{ char nom[15];
clrscr( );
printf(ingrese nombre:);
scanf(%s,nom);
printf(\n);
printf(Seor,%s su sueldo es = %10.2f\n,nom,suel;
getch( ); }
30
OPERADORES DEL C++

% Resto de una divisin 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

Para las operaciones de entrada y salida de datos se


tienen que utilizar libreras para dichos procesos, las
cuales deben incluirse al inicio del programa.
#include <stdio.h> para el C
#include <fstream.h> para el C++
#include <iostream.h>

33
SENTENCIAS COUT Y CIN
La sentencia cin permite leer datos que se cargarn
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 ejecucin de las instrucciones, ya sea en
funcin de una condicin o por que se desea repetir
un nmero de veces la ejecucin de un grupo de
instrucciones. Para atender estros requerimientos se
tiene:
Sentencias Selectivas: IF, ELSE, SWITCH
Sentencias Repetitivas: WHILE, DO, FOR
39
SENTENCIAS SELECTIVAS

Sentencia IF.- Toma una decisin referente a la


accin a efectuar en un programa, basandose en el
resultado de la evaluacin ( V, F ) de una condicin
if (expresin)
sentencias;
else
sentencias;

40
Expresin, debe ser debe ser una expresin
numrica, relacional o lgica, El resultado que se
obtiene de la evaluacin es: verdadero (uno) o falso
(cero).
Sentencias, representan cualquier instruccin
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 (expresin)
...........
If(expresin)
sentencias;
else
sentencias;
42
La opcin else siempre se refiere al if mas prximo
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 nmeros.
# include <fstream.h>
void main ( )
{ int a,b,mayor;
clrscr ( );
cout<< ingrese dos nmeros: \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 nmeros.
#include <fstream.h>
#include <float.h>
void main ( )
{ float a,b,c,menor;
clrscr ( );
cout<< ingrese tres nmeros \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 nmero menor es<<menor;
getch ( );
}
46
SENTENCIA SWITCH

Esta sentencia permite ejecutar una de varias


acciones en funcin del valor de una expresin.
switch (expresin)
{ case constante1: sentencia1;
case constante2: sentencia2;
........
default sentencia por defecto;}
47
Este sentencia busca el valor de la expresin entre
todos los valores de las constantes; de encontrarla,
ejecuta las sentencias correspondientes hasta
encontrar un ruptura (sentencia BREAK).
Si no existe un valor igual de constante igual al
valor de la expresin, se ejecutan las sentencias a
continuacin del DEFAULT.

48
Ejemplo de un programa que lee un nmero entero
entre 1 y 7 e imprime el da de la semana.
#include <fstream.h>
#include <conio.h>
void main ( )
{ int a;
clrscr ( );
cout << ingrese nmero de 1 al 7 \n;
cin>>a;
switch(a)
49
{ case 1: cout<<Lunes; break;
case 2: cout<<Martes;break;
case 3: cout<<Mircoles;break;
case 4: cout<<Jueves;break;
case 5: cout<<Viernes;break;
case 6: cout<<Sbado;break;
case 7: cout<<Domingo;break;
default: cout<<nmero incorrecto;
}
cout<<esto es todo; }
50
Ejm: Programa que calcula el promedio de edades
segn 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 ms veces, dependiendo del valor de una
expresin, numrica, relacional o lgica.
El funcionamiento es el siguiente:
Se evala la condicin
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.

Ejm: El siguiente programa imprime nmeros


impares entre 1 y 50.
#include <fstream.h>
#include <conio.h>
void main ( )
{ int i;
clrscr ( );
cout<< nmeros impares\n;
56
cout<<=====================\n;
i = 1;
while (i<=50)
{ cout<<i<< ;
i = i +2;
}
getch ( );
}
57
Ejm: Programa que calcula la suma de nmeros
ingresados y termina cuando el nmero es cero.
#include <fstream.h>
#include <conio.h>
void main ( )
{ int num, total=0;
cout<< Digite un nmero\n;
cin>>num;
while (num)
{ total = total + num;
58
cout<<Digite un nmero o cero\n;
cin>>num;
}
cout<< La suma es :<<total;
getch ( );
}

59
SENTENCIA DO-WHILE

Ejecuta una sentencia una o ms veces,


dependiendo del valor de una expresin. Su formato
es:
do
sentencia;
while (expresin)
Donde sentencia puede ser simple o compuesta.
60
Expresin es cualquier expresin numrica, relacional
o lgica.
El funcionamiento es el siguiente:
Se ejecuta la sentencia dentro del DO.
Se evala la expresin.
Si el resultado es cero la sentencia dentro del DO
ya no se ejecutar.
Si el resultado es diferente de cero, el proceso se
repite comenzando por el punto 1.

61
Este programa imprime el mensaje ADIVINASTE, si
se ingresa un nmero entero entre 1 y 10, pero no
acepta ningn otro nmero.
#include <fstream>
#include<conio.h>
void main ( )
{ int num;
do
{ clrscr ( );
cout<<Digite un nmero\n;
cin>>num; } 62
while(n>0 && n<11)
cout<<\n<<!ADIVINASTE!;
getch ( );
}
Ejemplo de un programa que calcula el factorial de un
nmero.
#include <fstream.h>
#include <conio.h>
void main ( )

63
{ int num, fact,x;
cout<<Digite un nmero\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 nmero
mgico.
#include <stdio.h>
void main ()
{ int magico = 123;
int intento;
printf(Adivina el nmero mgico);
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

Este comando generalmente se utiliza para ejecutar


sentencias simples o compuestas, repetidamente un
nmero de veces conocido
for ([exp1];[exp2];[exp3]) sentencia;
- exp1 Se utiliza para inicializar el ndice.
- exp2 El valor determina si el lazo se ejecuta o no.
- exp3 Incrementa el ndice.
67
Ejemplo: El siguiente programa hace aparecer en
pantalla, de 0.5 en 0.5, todos los valores
comprendidos entre 10 y 15 y un contador que
indique el ordinal correspondiente de cada nmero.
#include <fstream.h>
#include <float.h>
void main( )
{ float var=10;
int con=0;
clrscr; cout<<CONTADOR <<VALOR\n;
for (var=10;var<=15;var+=0.5)
68
{ cout<<con<< <<var<<\n;
++con;
}
getch ( );
}
Ejemplo de un programa que imprime valores de los
enteros del 1 al 20 y sus respectivos cuadrados.
#include <fstream.h>
void main( )
{
69
int k;
clrscr;
cout<<cuadrado de nmeros \n;
for (k=1;K<=20;k++)
cout<<k<< ;<<k*k);
getch( );
}
Ejemplo de un programa de men

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 seleccin equivocada
75
}
else
break;
}
}
Ejemplo de programa de conversin de segundos.
#include <fstream.h>
#include <string.h>
void main ( )

76
{ int nmin,nhor,nseg,min,seg;
char ope;
do
{ clrscr ( );
cout<<digite un nmero 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 ejecucin del
while, do, for o switch ms interno que la contenga
y se prosigue con el resto del programa.
El CONTINUE transfiere la ejecucin a la parte
final de la preposicin afectada por el ciclo while,
do, for ms 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 definicin, consta de una


ms funciones. Todos los subprogramas en C son
funciones.
Todos los programas en C deben llevar una y solo
una funcin main, que es la primera funcin 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 mtodos para definir


funciones:
La definicin clsica:
tipo nom_f(lista de parmetros)
declaratorias de parmetros
{ declaracin de variables locales;
cuerpo de la funcin
}
84
La definicin actual:
tipo nom_f(declaracin de variables);
{ declaracin de variables locales;
cuerpo de la funcin;
}
Tipo: Declara el tipo de dato o valor que devuelve
la funcin (es opcional), por defecto en int.
Nom_f : Es el nombre de la funcin (obligatorio).
Lista de parmetros puede ser vaca ( ), contiene
una lista de nombre de variables, a travs de las
cuales se espera pasar valores a la funcin.
85
Declaracin de variables locales, se declaran que
van a ser locales (validas dentro del cuerpo de la
funcin).
Cuerpo de la funcin, es el grupo de instrucciones
ejecutables, incluye tambin la instruccin
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; }

Instruccin RETURN.- Una funcin se ejecuta hasta


que se encuentre el final del cuerpo de la funcin o
hasta que se encuentre una instruccin de retorno:
return: finaliza la ejecucin de la funcin
return(expresin): adems devuelve el valor o
dato representado por (expresin).
87
DECLARACION DEL
PROTOTIPO DE LA FUNCION

Es necesario indicarle al compilador la existencia de


una funcin que lleva o no parmetros y cual es el
tipo de ellos. Tambien es necesario indicarle que
tipo de dato regresa al programa principal.
Todo esto se especifica en un prototipo
int ejem( int, int);

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 funcin
consiste en la escritura del nombre de la funcin
seguido de parmetros . Los parmetros pueden
contener argumentos. Por ejemplo:
clrscr( ) ..... Llama a una funcin sin argumentos
goto(10,5) .Llama a una funcin con argumentos
90
Otras formas de llamar a una funcin:
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
funcin puede llamarse a si misma
Una funcin debe ser declarada como una
variable (local o global) con o sin argumentos.
91
Ejemplo de un programa que utiliza la funcin
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 funcin 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 nmeros 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 multiplicacin( 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 multiplicacin(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 funcin 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 funcin 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 carcter por carcter.
#include <string.h>
void main ( )
{ char ejem[100];
strcpy(ejem, ABC);
cout<<ejem<<\n; }
108
En la funcin strcpy especifica la cadena de
destino, y en segundo lugar la informacin que se
desea cargar.
La funcin strcpy carga automticamente un \0 para
indicar que es el final de la cadena.
La funcin strcmp compara dos cadenas
Para usar estas funciones se tiene que incluir la
libreria string.h .

109
Ejemplo de una funcin que copia el contenido de
una cadena de atrs 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 funcin que valida una contrasea
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 homognea 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 nmero 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 nmero del elemento al que se
desea hacer referencia.
Total[4]=25
j[20]=15
114
Inicializacin 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 automticamente
la dimensin de un arreglo. Esto se logra no
especificando el tamao 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 nmero 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
mnimo;
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
funcin, solo se debe pasar la direccin 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 funcin 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
parmetros 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
parmetro en una funcin.
# 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 pequeo 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 nmero de cadenas y el derecho la
longitud mxima 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 lneas de texto
hasta encontrar un blanco. Entonces vuelve a
mostrar cada lnea carcter a carcter.
# 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 lnea en blc
}
/*muestra el texto carcter por carcter */
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
direccin de memoria. Normalmente esa direccin
es la posicin de otra variable de memoria.
Por ejemplo, si una variable en la posicin 1004
est apuntada por otra variable situada en la
posicin 1000, esa posicin 1000 contendr el valor
1004.
VARIABLE PUNTERO.- Si una variable va a
contener un puntero, entonces tiene que declararse
139
como tal. Una declaracin 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 vlido 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 direccin de
memoria de su operando. Por ejemplo:
m = &cuenta
pone en m la direccin de memoria de la variable
cuenta. La direccin no tiene nada que ver con el
valor de la variable cuenta.
Suponga que la variable cuenta utiliza la posicin
141
de memoria 2000 para guardar su valor. Suponga
tambin que cuenta tiene el valor 100. Despus de
la asignacin 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 direccin que
sigue. Por ejemplo, si m contiene la direccin 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 direccin*/
q = *m /*se asigna a q el valor de cuenta*/
cout<<q;
getch ( );
}
143
ARITMETICA DE PUNTEROS

Existen slo dos operaciones aritmticas 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. Despus de la expresin 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
maysculas.
# 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 rpido a la misma

147
Ejemplo de un programa que lee una cadena y
despus lee un carcter . Si el carcter 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 vaca;
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 vaca.

153
Punteros y arrays.
Char cad [80] , *p1;
p1 = cad;
p1 a sido asignado a la direccin 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.
//Declaracin 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(m-struc.snom, David);
m-struc.edad = 12;
cout<<Mi nombre es;
cout<<m-struc.snom;
157
cout<< y mi edad es;
cout<<m-struc.edad }
Referencia a los elementos de una estructura.-
nombre de la estructura . nombre del elemento
info_dir . codigo = 12345;
printf(%d, info_dir.codigo);
Utilizacin 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 carcter 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 posicin 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 lgico 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
informacin 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 aadir.
rb Abre archivo binario para lectura.
wb Crea archivo binario para escritura.
ab Abre archivo binario para aadir.
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 funcin 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 operacin se realiz,
sino devuelve EOF.
172
ferror ( ), rewind( ).- La primera determina si se
ha producido un error en una operacin sobre el
archivo.
int ferror (FILE *pa)
La segunda inicializa el indicador de posicin 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 dlar.
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 programacin orientada a objetos es una nueva
forma de enfocar el trabajo de la programacin.
La programacin orientada a objetos toma las
mejores ideas de la programacin estructurada y las
combina con nuevos y poderosos conceptos que
animas o alientan una nueva visin de la
programacin.
OBJETOS.- Un objeto es simplemente una entidad
lgica que contiene datos y un cdigo que manipula
estos datos.
176
Un objeto es una variable de un tipo definido por el
usuario.
POLIFORMISMO.- Permite usar un nombre para
varios propsitos relacionados pero ligeramente
diferentes.
Permite el uso de un nombre para especificar una
clase de accin 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 sintcticamente 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 indicacin para
el compilador que lo que viene entre llaves
pertenece a la declaracin de la clase.No olvide
incluir ; al final de la declaracin. Esta declaracin
debe contener la declaracin de los datos miembros
179
por ejemplo int radio, y los prototipos de las
funciones miembro de la clase.
Toda declaracin de clase debe incluir el prototipo
de la funcin 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
pblicas. 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 funcin del
programa, en cambio la funcin 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
micirculo.disparea( );
}

185
Cuando llega el momento de codificar una funcin
que es miembro de una clase, se debe indicar al
compilador a que clase pertenece la funcin. Por
ejm, una forma de codificar la funcin 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
resolucin de mbito. Esencialmente indica al
compilador que esa versin de meter pertenece a la
clase cola. En C++ varias clases diferentes pueden
utilizar el mismo nombre de funcin. El compilador
sabe que funcin pertenece a que clase gracias al
operador de resolucin de mbito y al nombre de la
clase.
Para llamar a una funcin 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 funcin ini para el objeto
a: cola a, b;
a.ini ( );
187
Es importante entender que a y b son dos objetos
distintos, la nica relacin es que son objetos de un
mismo tipo
El programa que se muestra a continuacin 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 vaca;
return 0; }
fin++;
return c[fin]; }
main(void) {
cola a, b; // crea dos objetos cola
a.ini ( );
b.ini ( );
a.meter(10);
b.meter(10);
190
cout << a.sacar( ) << ;
cout << b.sacar( ) << ;
cout << b.sacar( ) << \n;
}

191
REUTILIZACION DE UNA CLASE
Uno de los parmetros 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 extensin 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 declaracin 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 extensin h.
4.- Haga click en OK.
5.- Se desplegara la ventana para digitar la
declaracin 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 definicin de clase
tendra la siguiente codificacin:
#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 crculos
197
micirculo.disparea ( );
cout<<\n;
tucirculo.disparea ( );
cout<<\n;
sucirculo.disparea ( );
cout<<\n;
}

198
PARAMETROS
PREDETERMINADOS

Una de las caractersticas del C++ es el de poder


utilizar parmetros predeterminados en el prototipo
de las funciones.
Int totales(a=10,b=20,c=30,d=40)
Desde el main se puede ejecutar esta funcin de las
siguientes maneras:
main( )
{ ..........
.........
199
int resultado;
resultado = totales;
tambin podra 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;
};
//Declaracin 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 efecta
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);
mirectangulo.disparea( );
mirectangulo.setbase(100);
mirectangulo.setaltura(20);
mirectangulo.disparea( );
}

205
La jerarqua de clases puede ser tan compleja como
se desee.
class nnrectangulo: public nrectangulo
La declaracin 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

En muchos casos es necesario utilizar apuntadores a


objetos. Utilizando como base el programa anterior,
vea como cambia la funcin main.
void main( )
{ nrectangulo mirectangulo (10,20);
nrectangulo* pmirectangulo = &mirectangulo;
pmirectangulo->setbase (100);
208
pmirectangulo->setaltura (20);
pmirectangulo->disparea ( );
}
Nota: El nombre de la funcin miembro est separado
del apuntador al objeto con el carcter ->.
En la instruccin:
nrectangulo* pmirectangulo = &mirectangulo
la direccin del objeto mirectangulo es asignada al
puntero pmirectangulo.
209
CREACION DE PROYECTOS MFC
Ingrese al Visual C++.
Seleccione la opcin New del men File.
Seleccione la opcin Projets.
Seleccione la opcin MFC AppWizard(exe).
Asigne un nombre en Project name y a la opcin
Localizacin y luego haga click en OK.
El Visual responde con el primero de los cuatro
pasos con que cuenta el MFC para asignar
caractersticas del programa a crear.
210
En el primer cuadro se debe especificar el lenguaje
que desea utilizar para los recursos del programa.
Haga click en:
- Single document: para un solo documento.
- Multiple document: cuando es mas de uno.
- Dialog based: para pantalla de dialogo.
En el segundo paso se asignan otras caractersticas y
el nombre a dicha pantalla.
En el paso 3 se debe responder a las preguntas, que
si desea generar un archivo de comentarios y si
desea utilizar una librera DLL (Dinamic link
library) y no una esttica.
211
El paso 4 muestra que clases y archivos crear el
AppWizard. Haga click en el botn Finish para que
se creen los archivos estructurales y de
proyecto.Mostrar un cuadro resumen de todas las
especificaciones , presione OK.
Seleccione Set Active Configuration del men Build
y escoja la opcin ....Win32 Debug para que se
genere el Exe del proyecto con lneas de cdigo de
depuracin, luego hacer click en OK.
Para continuar con la especificacin del proyecto se
tiene que hacer el diseo visual y la codificacin
del cdigo.
212
DISEO VISUAL

Seleccione la opcin Workspace del men View.


Estando en la pantalla Developer Studio haga click
en el botn Resource View (inferior izquierda).
Haga click en el signo + de Resources que aparece
acompaado con el nombre que le asigno al
proyecto (izquierda de la pantalla). Mostrar los
elementos que contiene.
Haga click en el + del elemento Dialog.
213
Hacer doble click en IDD-nombre del proyecto-
Dialog.
Al lado derecho de la pantalla mostrar dos botones:
OK y Cancel, lo mismo que TODO: Pleace dialog
controls here.
En el caso de que necesite ver la pantalla a full
screean, busque esta opcin en el men View. Para
retornar al estado normal Esc.
Borre el contenido de dicha pantalla haciendo click
en cada elemento y luego supresin.
Utilice la barra de herramientas Controls para
colocar los controles que necesita definir.
214
De no existir la herramienta Controls, haga clik en
la opcin Customize del men Tools, seleccione
Toolbars y luego marque la opcin 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 botn ok, escape, saludo, etc.
Para cambiar el texto que contiene dicho botn,
haga click con el botn derecho del mousse sobre
dicho botn y seleccione la opcin Properties

215
La pantalla que muestra contiene una opocin
Caption, haga click en ella y cambie su contenido
por el que desee. Por ejm. EXIT, Saludo, etc.
Para poder asignarle una identificacin a un botn
que permita identificarlo posteriormente, utilice el
recuadro ID de la opcin Caption.
Si desea adicionar los botones para maximizar o
minimizar su pantalla, seleccione la opcin Styles
de Properties y marque las opciones Minimeze box
y Maximize box.
216
Para guardar su trabajo utilice la opcin Save All.
Para ejecutar su trabajo utilice Build.

217
CODIFICACION DEL CODIGO PARA
EL DISEO VISUAL

Selecione la opcin Class Wisard del men View


con lo que se mostrar la ventana MFC Class
Wizard, el cual es un asistente que permite
agregarle cdigo a los diferentes controles que se
han definido en el diseo visual.
Selecione la opcin Message Maps.
Tenga presente que Class Name debe identificar la
clase asociada con el cuadro de dilogo definido.
218
Selecione del cuadro Object Ids, el nombre del
objeto al que se le va asignar el cdigo.
El cuadro Messages muestra los eventos que estn
asociados a dicho objeto.
Selecione del cuadro Messages el evento al que
desea asignarle una funcin.
Haga click en Add Funtion, se desplegara la ventana
Add Menber Fuction sugiriendole un nombre, si
desea aceptelo o cambielo.
Haga click en el botn Edit Code con lo que se
abrir un archivo que contiene la funcin.
219
Adicione en dicha funcin 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 diseo visual, un botn para
poder salir de esa pantalla debe incluir como
instruccin en la funcin que el sistema crea para
dicho botn: 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 botn 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 txto esttico en


una pantalla (Static text).
Tambien es posible incluir una caja de edicin (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
caractersticas de la letra que se utilizar en la
pantalla, para eso haga lo siguiente:
223
-Click con el botn derecho en cualquier parte libre
de la pantalla y seleccione Properties.
- Seleccione la opcin General, luego haga click en
Font, y luego escoja las caractersticas 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 accin de un botn 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 opcin Extended Styles de la opcin
Properties, para variar la apariencia visual de un
botn haciendo click en Client edge, Static edge y
Modal frame.

225
ADICION DE VARIABLES A
CONTROLES EDIT Y CHECK

Estas variables se utilizan para la lectura y escritura


de datos desde y hacia los controles.
Seleccione Class Wizard del men View
Seleccione Member Variables.
Seleccione de Conntrol Ids, el objeto con el que va
ha trabajar
Haga click en el botn Add Variable
226
Coloque como Member variable name, un nombre
al botn el cual termine en Edit o Check para
identificar el tipo.
m_TestEdit m _AbrirCheck
Complete la informacin especificando la categora
y el tipo de variable, y haga click en ok.
Cuando la caja sea de Edit, el tipo ser cstring y en
el caso de que sea una de chequeo ser tipo Bool.

227
INICIALIZACION DE CONTROLES

En algunos casos es necesario que algunos controles


estn inicializados, es decir que muestren en la
pantalla un check o una x, para lograrlo efecte 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 opcin WM_INITDIALOG.
Haga click en el botn Edit Code.
Agregue en la funcin la inicializacin 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 instruccin
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 botn (Push
Buttom) , se debe seguir los 7 pasos anteriores para
el (Push Buttom) y agregar en la funcin:
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 edicin (Edit Box) y se desea
controlar que est activa o desactiva con un botn 230
(Push Buttom), siga los pasos anteriores para dicho
botn y en la funcin debe codificar lo siguiente:
UpdataDate(TRUE);
if (m_vcheck = = TRUE)
Get

231

You might also like