Está en la página 1de 231

LENGUAJE C

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 4 bytes. Largo ( long ).- Ocupa 8 bytes Sin signo ( unsignet ).- Para los enteros Punto flotante ( float ).- Ocupa 4 bytes Flotante largo (doubl).- 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 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 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 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 F e, E g, G c s n p

entero hexadecimal. float float (notacin cientfica) float carcter simple cadena puntero en un entero 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

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; }

EJEMPLOS

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;
}
50

} cout<<esto es todo;

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; nm = nm +1; sem = sem + edad; break;

case 1:

} 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<< ++con;
} getch ( );

<<var<<\n;

} 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) if(resp==a) { leer( ); } { 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; 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

/*top contiene el tope de la pila */

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
r w a rb wb ab r+ w+ a+

Significado
Abrir archivo texto para lectura. Crea archivo texto para escritura. Abre archivo texto para aadir. Abre archivo binario para lectura. Crea archivo binario para escritura. Abre archivo binario para aadir. Abre archivo texto para lectura/escrt. Crea archivo texto para lect/esc. 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

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

PROGRAMACION ORIENTADA A OBJETOS

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; if(ppio= =100) {

{
}

void cola: : meter(int i) { cout<<la cola est lena;

return;
ppio++:

} }
{ {
189

c[ppio]= i;
int cola: : sacar(void) if (fin= =ppio)

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

b
c e g
207

d f

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 proyectoDialog. 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

También podría gustarte