Vous êtes sur la page 1sur 65

INTRODUCCIN AL LENGUAJE C++

Entrada y Salida
En C++ la Entrada y Salida de datos se realiza a travs de operaciones de flujos (streams).
Estos flujos estn definidos en la librera iostream.h que deber ser includa en el programa.

Salida: cout
cout corresponde al flujo de SALIDA.
Normalmente corresponde a la pantalla del usuario. El operador de inserccin, <<, inserta datos en el flujo cout. Por ejemplo:
cout<< Mensaje de prueba ; cout<< 500<<600<<700 int i=5, j=10,m=100; cout<< "El valor de i es:"<<i << j << m;

Salida: Formato
cout.setf(ios::fixed) Imprime en punto fijo (scientific es el estndar) formato

cout.setf(ios::showpoint) Imprime mostrando el punto decimal. cout.precision(n) Cantidad de decimales de precisin cout.width(n) Espacios para mostrar un valor. cout.setf(ios::right) Justifica el texto a imprimir a la derecha. (left)

Entrada: cin
Proporciona un flujo de entrada.
El operador de extraccin >>, extrae valores del flujo y lo almacena en variables. Normalmente el flujo de entrada es el teclado.
int numero1, numero2; cin>>numero1; cin>>numero2;

Ejercicio:

Ingresar 2 edades y determinar quin es mayor

#include <iostream.h> void main() { cout << "Ingrese su edad: "; int miEdad; cin >> miEdad; cout << "Ingrese la edad de un amigo: "; int suEdad; cin >> suEdad; if (miEdad < suEdad) cout << "Yo soy menor que mi amigo \n "; else if (miEdad > suEdad) cout << "Mi amigo es menor que yo \n "; else cout << "Mi amigo y yo tenemos la misma edad \n "; }

Tipos de Datos ELEMENTALES

Tipos de Datos: Numricos


Tipo
char short int

Ejemplo
a -15 1024

Bytes
1 1 2 0..255 -128..127

Rango

-32768..32767

long
float

262144
10.5

4
4

-2147483648..2147483637
3.4*10E-38.3.4*10E308

double

0.00045

1.7*10E-308..1.7*10E308

Punteros
Una variable que puede almacenar una direccin de memoria se llama puntero. Una variable de tipo puntero puede guardar direcciones de variables de un tipo determinado: punteros a int, double, char, etc.

10

Declaracin de punteros
tipo *nombre_variable;
int i=3, *p,*r; double d=3.3,*q; char* c='a', *t; // p y r son punteros a entero // q es un puntero a double // t es un puntero a carcter

p=&i; r=p; p = q; es un ERROR porque son punteros de diferente tipo.

11

Otras operaciones con punteros


cin>>*p; if (p==r) cout<<"El valor de i es: "<<*p; *p=*p+3; p=p+3;

12

Mostrar una direccin


Es posible mostrar el una direccin como valor de una variable de tipo puntero, o la direccin de cualquier variable, en la pantalla utilizando un cout. cout << p = << p << endl; cout << &n = << &n << endl; cout << &p= << &p << endl;

13

Ejemplo Ilustrativo
1. int *p, *q, a=5 2. p=&a

3. *p=8;
a:

p ? q ?
a:

p q ?

p q ?

a:

5
5. *q=85; a:

4. q=p;

p q

p q

a:

85

14

Ejemplo Ilustrativo
6. a=33; . 7. int b=1; a: a: b:

p q

33

p q

33

. 8. q=&b;

p
q

a: b:

NOTA

9
1

a,b,p,q : variables locales automticas

15

Ejemplo 1:
void main() { int x, y, *p, *q; p = &x; *p = 5; q = &y; *q = 23; cout << *p << " << *q << endl; q = p; *p = 35; cout << *p << " << *q << endl; q = NULL; cout << x << " << y << endl; }

16

Ejemplo 2:
void main() { int *p, *q, x, y; p = &x; *p = 14; q = p; cout << *p << " " << *q << endl; q = NULL; cout << x << " << y << endl;

17

Ejemplo 3:
void main() { int x, y, *p, *q; p = &x; *p = 12; q = &y; *q = 23; cout << *p <<" "<<*q<<endl; *p = *q; cout << *p <<" "<<*q<<endl; q = NULL; cout<<*p<<endl; cout<<x<<" "<<y<<endl; }

18

Ejemplo 4:
void main() { int x, y, *p, *q; p = &x; *p = 14; q = p; if ( p == q) q = &y; if ( p == q) *q = 14; if (p == q) if (*p == *q) }

cout<<"Mensaje 1"; cout<<"Mensaje 2"; cout<<"Mensaje 3"; cout<<"Mensaje 4";

Tipos enumerados
enum Frutas {Manzana, Pera, Guinda, Kiwi,};
enum Color {Rojo=10, Verde, Azul}; enum Raza {Pastor, Cooker, Poodle, Setter, Collie}; void main() {Color c=Verde; if (c==Verde) cout<<"Color VERDE"; }

19

20

Tipos de Datos ESTRUCTURADOS

21

Tipos de Datos: Arreglos


Permite definir variables estructuradas homogneas. Vectores o Arreglos Unidimensionales
int v[10];
int v[10]={41,23,87,19,-9}; int v[]={41,23,87,19,-9,91,103,25,11,22};
0 1 2 3 4 5 6 7 8 9

v:

41 23

87 19 -9

91 103 25 11 22

cout<<v[3];

22

Tipos de Datos: Matrices


Matrices o Arreglos Bidimensionales
float a[5][3];
int x[5][3]={{33,21,47}, {82,91,95},
0 1 2 3 4
0 1 2

33 82 50

21 91 72

47 95 45

{50,72,45},
{36,79,63}, {53,60,74}}

36
53

79
60

63
74

cout<<a[3][2];

23

Tipos de Datos: Strings


Strings: Vector de caracteres, que termina con el caracter NULO: '\0'
char s[5];
char s1[5]={'h','o','l','a','\0'}; char s2[5]="hola"; char s3[]="hola"; typedef char String[5] String s;

24

Tipos de Datos: Strings


La lectura de un String
cin>>s;
Lee del flujo de entrada un string. Deja para la siguiente lectura el '\n' No reconoce el espacio inicial en las entradas
Ingresar:
Este es un ejemplo

i=1; do { cin>>s; cout<<i<<": "<<s<<endl; i++; } while (i<5);

25

Tipos de Datos: Strings


La lectura de un String
cin.getline(s, largo);

Lee del flujo de entrada un string de largo caracteres.


La lectura termina:
Con la lnea ('\n'), si la cantidad de caracteres es menor que largo. Cuando se extrado la cantidad largo de caracteres, aunque NO haya terminado la lnea.

26

Tipos de Datos: Strings


La lectura de un String
i=1; do { cin.getline(s,20); cout<<i<<": "<<s<<endl; i++; } while (i<5);

27

Tipos de Datos: Strings


Funciones de strings
strlen(string); strcpy(destino,origen);

strcmp(string1, string2);
0: Si string1 ==string2 1: Si string1 > string2 -1: Si string1 < string2

28

Tipos de Datos: Strings


#include <iostream.h> #include <string.h>
void main() {char x[5]; char y[]="Hola"; strcpy(x,y); cout<<"x:"<<x<<endl; cout<<"y:"<<y<<endl;

29

Tipos de Datos: Strings


#include <iostream.h> #include <string.h> void main() {char *x; char y[]="Hola"; x=new char[strlen(y)+1]; cin.getline(x,20);

cout<<"x:"<<x<<endl; cout<<"y:"<<y<<endl;
}

30

Tipos de Datos: Strings


#include <iostream.h> #include <string.h> void Copiar(char a[], char b[]) {strcpy(a,b);}

void main() {char *x; char y[]="Hola"; x=new char[strlen(y)+1]; Copiar(x,y); cout<<"x:"<<x<<endl; cout<<"y:"<<y<<endl;

31

Tipos de Datos: Strings


#include <iostream.h> #include <string.h> void Copiar(char *a, char *b) {strcpy(a,b);}

void main() {char *x; char y[]="Hola"; x=new char[strlen(y)+1]; Copiar(x,y); cout<<"x:"<<x<<endl; cout<<"y:"<<y<<endl;

32

Tipos de Datos: Strings


#include <iostream.h> #include <string.h> char *Mayor(char a[], char *b) {if (strcmp(a,b)>0) return a; return b; } void main() {char *x; char y[]="Hola"; x=new char[strlen(y)+1]; cin.getline(x,20); cout<<"El mayor: "<<Mayor(x,y); }

33

Tipos de Datos: Estructuras


Constructor de tipos de dato que permite agrupar elementos de diversos tipos de datos como UNA variable.
struct {int RUT; char nom[10]; float prom; } Persona; Persona a;
RUT nom prom

a:

cout<< a.prom;

34

Tipos de Datos: Estructuras


struct {int hh; int mm; int ss; } Hora; Hora h, v[10], *p; h.hh=8; p=&h; v[3].hh= 5; v[7]=(*p).hh; cout <<p->hh << h.hh<<v[7].hh

35

Nuevos Tipos de Datos


typedef int Vector[10];
Vector v;

typedef float Matriz[5][3];


Matriz a;

typedef enum Boolean {FALSE, TRUE}; enum Color {Rojo, Verde, Azul, Amarillo} typedef struct Persona { char paterno[10]; char materno[10]; char nombre[10]; };

36

Nuevos Tipos de Datos


typedef union Numero { int i; float f; };
Vector v; // int v[10];

Boolean sw = FALSE; Persona alumno; Numero x;

37

OBJETOS CONSTANTES

38

Objetos Constantes
Se definen mediante el prefijo const. Estos objetos NO puede ser modificada por asignacin. Slo se permite su inicializacin.
const int x; x = 7;
// error: x debe ser inicializada

// error: x no puede ser modificada por asignacin

const int z = 3; cout << z << '\n';

39

FUNCIONES

40

Definicin
Tipo de retorno Nombre ( Parmetros ) { declaraciones locales }
Instrucciones

Las funciones no se pueden anidar.

Todas las funciones son externas, se pueden llamar desde cualquier punto del programa.

41

Prototipo de funciones
#include <iostream.h> void f1(); void f2(void); void main() { f1(); f2(); } void f1() {cout << "Funcin sin argumentos \n"; } void f2(void) {cout << "Funcin tambin sin argumentos \n"; }

42

Tipos de retorno
Si la funcin no devuelve un valor int, se debe especificar el tipo de dato devuelto: char, double, float

Tambin puede retornar un UN PUNTERO.


Puede no retornar valores (void). Puede retornar una referencia: (ALIAS) <tipo>& Nombre(parmetros)

43

Declaracin (prototipo)
Tipo_de_retorno Nombre ( Parmetros );
Se pueden omitir los nombres de los parmetros y dejar solamente los tipos.
No es necesario declarar las funciones si las definimos antes de usarlas.

44

Variables locales y globales


Una variable que se declara fuera de las funciones es una variable global y puede ser utilizada dentro de todas las funciones del programa.

Una variable que se declara dentro de una funcin es una variable local y solamente puede ser utilizada dentro de dicha funcin. Al terminar la ejecucin de la funcin desaparece.

45

Parmetros
Parmetros Formales

Son los que se escriben al definir y/o declarar la funcin.


Parmetros Actuales Son los que se escriben al llamar la funcin. Argumentos. Los parmeros actuales se usan para dar valor inicial a los parmetros formales o para recibir valores desde las rutinas.

46

Parmetros actuales
Los parmetros actuales pueden ser: Valores Variables Expresiones. Ejemplo: total = CalcArea(20, 4); L = 30; A=12; total = CalcArea(L,A+2);

47

Formas de Parametrizacin
Parmetros por Valor
Al llamar a la funcin se copia valor del parmetro actual en el parmetro formal. El parmetro formal se inicializa con el valor de parmetro actual. La funcin trabaja con una copia, por lo tanto: No modifica el valor de la variable o parmetro actual. LLAMADA
Ejemplo(a); Ejemplo(a+1); Ejemplo(4);

DEFINICIN
void Ejemplo(int x)

48

Formas de Parametrizacin
Parmetros por Referencia
Se pasa la direccin del parmetro actual al parmetro formal
El parmetro actual es ALIAS del parmetro formal La funcin puede cambiar su valor.

LLAMADA
Ejemplo(a);

DEFINICIN
void Ejemplo(int&x)

49

Ejemplo: Por referencia


void Ejemplo(int a, int &b); void main( ) {int x = 2, y = 4; Ejemplo(x, y); cout<<x<< <<y<<endl; } void Ejemplo (int a, int &b) { a = 5; b = 8; }

50

Ejemplo:
Escriba una funcin que calcule el cuadrado y el cubo de un nmero entero. stos resultados se DEBEN retornar como parmetros.

51

Ejemplos: Prototipos
#include <iostream.h>
int cuadPorVal(int); void cuadPorInd(int *); void cuadPorRef(int &);

52

Ejemplos
void main() { int x = 2, y = 3, z = 4;
cout << "Por valor : x = " << cuadPorVal(x) << '\n';

cuadPorInd(&y); cout << "Por indireccin : y = " << y << '\n'; cuadPorRef(z); cout << "Por referencia : z = " << z << '\n';

53

Ejemplos
int cuadPorVal(int a) {return a = a*a; } void cuadPorInd(int *b) {*b = (*b) * (*b); } void cuadPorRef(int &c) {c = c*c; }

Prototipos de funciones
#include <iostream.h> void f1(); void f2(void); main() { f1(); f2(); return 0; } void f1() { cout << "Funcin sin argumentos \n"; } void f2(void) { cout << "Funcin tambin sin argumentos \n"; }

54

55

Funciones en lnea
La clusula inline sugiere al compilador la generacin de una copia del cdigo de esa funcin "in situ" (cuando sea apropiado), a fin de evitar una llamada. Esta sugerencia es generalmente acogida en el caso de funciones pequeas.

56

Funciones inline
inline float cubo(float x)
{ return x*x*x; } void main()

{ cout << "Ingrese el largo del lado de un cubo: ";


float lado; cin >> lado;

cout << "Volumen del cubo de lado "


<< lado << " es " << cubo(lado) << '\n'; }

57

Memoria Dinmica
int *p; p = new int; ::: delete p; int q=new int(3); float t=new float(2,2); ::: delete q;

58

Ejemplo Ilustrativo
1. int *p, *q; 2. p=new int; 3. *p=10;

p ? q ?

p q ?

p q ?

10

4. q=p;

5. *q=85;

p q

10

p q

85

59

Ejemplo Ilustrativo
5. *q=85; . 6. p new ( int);

p q

85

p q

85

. 7. *p= 9;

p
q

9
85

60

Ejemplo Ilustrativo
p
q 85

p
q
9. delete q;

9 85

8. delete q;

p ?

p q ?

q ?

61

Memoria Dinmica
typedef struct {int num; float saldo; }Cuenta;
Cuenta *c; c=new Cuenta;

62

Memoria Dinmica
int *v; v = new int [100]; delete [] v;

// crea un arreglo dinmico de 100 int // libera la memoria dinmica ocupada por v

63

Resolucin de alcance
Operador ::
float x = 1.23; void main() {int x = 7 cout << "x local = "<< x <<endl; cout << "x global = " << ::x << endl; }

64

Sobrecarga de funciones
Funciones con igual nombre pero se diferencian, a lo menos, en uno de los siguientes puntos: El tipo de dato de la funcin La lista de parmetros
Cantidad de parmetros Tipo de datos de los parmetros

65

Sobrecarga de funciones
float cuadrado(int k) { return k*k; }
float cuadrado(float x) { return x*x; }
void main() {cout << "El cuadrado del entero 7 es " << cuadrado(7); cout << "El cuadrado del real 1.2 es " << cuadrado(1.2); }

Vous aimerez peut-être aussi