Sunteți pe pagina 1din 231

LE N G UAJ E

ING. JORGE. BUTLER B.

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

Limite
Valor1
MENSAJE
N3
Numero-blanco
SUMA-total
suma-TOTAL
A

123-var
index $
Float
$total

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 2 bytes.
Largo ( LONG ).- Ocupa 4 bytes
Sin signo ( UNSIGNED ).- Para los enteros
Punto flotante ( FLOAT ).- Ocupa 4 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
main( )
{
char nombre[30];
clrscr( ); /*funcin limpia pantalla*/
printf(Cul
es tu nombre?:);
gets(nombre);
clrscr( );
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 subbloque*/
.....
/*fin del sub-bloque*/}
//*fin del bloque*/}
18

CONSTANTES
Se declaran de dos formas:
- # define
identificador-dato ( antes del main)
- Con la palabra CONST dentro del main
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,rea
char car
long numero,mximo
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
void 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
getch ( );
}

:<<total;

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
aleatoriamente;
cout <<\nSi es aleatoriamente digite: a;
cout<<\nSi es manual digite: m;

creen

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.
rbAbre 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;
a.ini ( );
b.ini ( );
a.meter(10);
b.meter(10);

}
}
{
// crea dos objetos cola

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
b
c

d
e

g
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

S-ar putea să vă placă și