INTRODUCCIÓN AL LENGUAJE C++. 2 Entrada y Salida En C++ la Entrada y Salida de datos se realiza a...
-
Upload
estrella-gordillo -
Category
Documents
-
view
232 -
download
1
Transcript of INTRODUCCIÓN AL LENGUAJE C++. 2 Entrada y Salida En C++ la Entrada y Salida de datos se realiza a...
INTRODUCCIÓN AL LENGUAJE C++
2
Entrada y Salida
En C++ la Entrada y Salida de datos se realiza a través de operaciones de flujos (streams).
Estos flujos están definidos en la librería iostream.h que deberá ser incluída en el programa.
3
Salida: cout
cout corresponde al flujo de SALIDA.
Normalmente corresponde a la pantalla del usuario.
El operador de insercción, <<, inserta datos en el flujo cout. Por ejemplo:
cout<< “Mensaje de prueba “;cout<< 500<<600<<700int i=5, j=10,m=100;cout<< "El valor de i es:"<<i << j << m;
4
Salida: Formato
cout.setf(ios::fixed) Imprime en formato punto fijo (scientific es el estándar)
cout.setf(ios::showpoint) Imprime mostrando el punto decimal.
cout.precision(n) Cantidad de decimales de precisión
cout.width(n) Espacios para mostrar un valor.
cout.setf(ios::right) Justifica el texto a imprimir a la derecha. (left)
5
Entrada: cin
Proporciona un flujo de entrada.
El operador de extracción >>, extrae valores del flujo y lo almacena en variables.
Normalmente el flujo de entrada es el teclado.
int numero1, numero2;cin>>numero1;cin>>numero2;
6
#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 ";}
Ejercicio:Ingresar 2 edades y determinar quién es mayor
7
Tipos de DatosELEMENTALES
8
Tipos de Datos: Numéricos
Tipo Ejemplo Bytes
Rango
char ‘a’ 1 0..255
short -15 1 -128..127
int 1024 2 -32768..32767
long 262144 4 -2147483648..2147483637
float 10.5 4 3.4*10E-38.3.4*10E308
double 0.00045 8 1.7*10E-308..1.7*10E308
9
Punteros
Una variable que puede almacenar una dirección 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
Declaración de punteros
tipo *nombre_variable;
int i=3, *p,*r; // p y r son punteros a enterodouble d=3.3,*q; // q es un puntero a doublechar* c='a', *t; // t es un puntero a carácter
p=&i; r=p; p = q; es un ERROR porque son punteros de
diferente tipo.
11Otras operaciones con punteros
cin>>*p; if (p==r) cout<<"El valor de i es: "<<*p; *p=*p+3; p=p+3;
12
Mostrar una dirección
Es posible mostrar el una dirección como valor de una variable de tipo puntero, o la dirección 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
??
??
p
q
2. p=&a 3. *p=8;
??
p
q
8
4. q=p;
p
q
8
5. *q=85;
p
q
85
??
p
q
5a:
5a:
a:
a: a:
14
Ejemplo Ilustrativo
6. a=33;
p
q
33
. 7. int b=1;
p
q
33
1
a: a:
b:
. 8. q=&b;
p
q
9
1
a:
b:
NOTA
a,b,p,q : variables locales automáticas
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
void main(){
int *p, *q, x, y;
p = &x;*p = 14;q = p;cout << *p << " " << *q << endl;q = NULL;cout << x << " “ << y << endl;
}
Ejemplo 2:
17
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;
}
Ejemplo 3:
18
void main(){ int x, y, *p, *q;
p = &x;*p = 14;q = p;if ( p == q) cout<<"Mensaje 1";q = &y;if ( p == q) cout<<"Mensaje 2";*q = 14;if (p == q) cout<<"Mensaje 3";if (*p == *q) cout<<"Mensaje 4";
}
Ejemplo 4:
19
Tipos enumerados
enum Frutas {Manzana, Pera, Guinda, Kiwi,};
enum Color {Rojo=10, Verde, Azul};
void main()
{Color c=Verde;
if (c==Verde)
cout<<"Color VERDE";
}
enum Raza {Pastor, Cooker, Poodle, Setter, Collie};
20
Tipos de DatosESTRUCTURADOS
21
Tipos de Datos: Arreglos
Permite definir variables estructuradas homogéneas.
Vectores o Arreglos Unidimensionalesint v[10];
0 1 2 3 4 5 6 7 8 9v: 41 23 87 19 -9 91 103 25 11 22 cout<<v[3];
int v[10]={41,23,87,19,-9};
int v[]={41,23,87,19,-9,91,103,25,11,22};
22
Tipos de Datos: Matrices
Matrices o Arreglos Bidimensionales
float a[5][3];
int x[5][3]={{33,21,47},
{82,91,95},
{50,72,45},
{36,79,63},
{53,60,74}}
cout<<a[3][2];
33 21 47
82 91 95
50 72 45
36 79 63
53 60 74
0
1 2
0
1
2
3
4
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
i=1;do{cin>>s;cout<<i<<": "<<s<<endl;i++;}while (i<5);
Ingresar:Este es un ejemplo
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 línea ('\n'), si la cantidad de caracteres es
menor que largo.
Cuando se extraído la cantidad largo de caracteres, aunque NO haya terminado la línea.
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 ==string21: 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
cout<< a.prom;
a:
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
Vector v; // int v[10];
Boolean sw = FALSE;
Persona alumno;
Numero x;
typedef union Numero{ int i; float f;};
37
OBJETOS CONSTANTES
38
Objetos Constantes
Se definen mediante el prefijo const. Estos objetos NO puede ser
modificada por asignación. Sólo se permite su inicialización.
const int x; // error: x debe ser inicializada
x = 7; // error: x no puede ser
modificada por asignación
const int z = 3;
cout << z << '\n';
39
FUNCIONES
40
Tipo de retorno Nombre ( Parámetros ){ declaraciones locales
Instrucciones}
Definición
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 << "Función sin argumentos \n"; }
void f2(void){cout << "Función también sin argumentos \n"; }
42
Si la función no devuelve un valor int, se debe especificar el tipo de dato devuelto:
char, double, float
También puede retornar un UN PUNTERO.
Puede no retornar valores (void).
Puede retornar una referencia: (ALIAS)
Tipos de retorno
<tipo>& Nombre(parámetros)
43
Tipo_de_retorno Nombre ( Parámetros );
Declaración (prototipo)
Se pueden omitir los nombres de los parámetros 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 función es una variable local y solamente puede ser utilizada dentro de dicha función. Al terminar la ejecución de la función desaparece.
45
Parámetros
Parámetros Formales
Son los que se escriben al definir y/o declarar la función.
Parámetros Actuales
Son los que se escriben al llamar la función. Argumentos.
Los parámeros actuales se usan para dar valor inicial a los parámetros formales o para recibir valores desde las rutinas.
46
Parámetros actuales
Los parámetros actuales pueden ser:ValoresVariablesExpresiones.
Ejemplo:total = CalcArea(20, 4);L = 30;A=12;total = CalcArea(L,A+2);
47
Formas de ParametrizaciónParámetros por Valor
Al llamar a la función se copia valor del parámetro actual en el parámetro formal.
El parámetro formal se inicializa con el valor de parámetro actual. La función trabaja con una copia, por lo tanto:
No modifica el valor de la variable o parámetro actual.
LLAMADA DEFINICIÓN
Ejemplo(a);Ejemplo(a+1);Ejemplo(4);
void Ejemplo(int x)
48
Parámetros por Referencia
Se pasa la dirección del parámetro actual al parámetro formal
El parámetro actual es ALIAS del parámetro formal
La función puede cambiar su valor.
LLAMADA DEFINICIÓN
Ejemplo(a); void Ejemplo(int&x)
Formas de Parametrización
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 función que calcule el cuadrado y el cubo de un número entero.
Éstos resultados se DEBEN retornar como parámetros.
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 indirección : 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; }
54
Prototipos de funciones
#include <iostream.h>
void f1();
void f2(void);
main(){ f1();
f2();return 0;
}void f1(){ cout << "Función sin argumentos \n"; }
void f2(void){ cout << "Función también sin argumentos \n"; }
55
Funciones en línea
La cláusula inline sugiere al compilador la generación de una copia del código de esa función "in situ" (cuando sea apropiado), a fin de evitar una llamada.
Esta sugerencia es generalmente acogida en el caso de funciones pequeñas.
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 Dinámica
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;
??
??
p
q
2. p=new int;
??
p
q
?
3. *p=10;
??
p
q
10
4. q=p;
p
q
10
5. *q=85;
p
q
85
59
Ejemplo Ilustrativo
5. *q=85;
p
q
85
. 6. p new ( int);
p
q
?
85
. 7. *p= 9;
p
q
9
85
60
Ejemplo Ilustrativo
8. delete q;
p
q
85 p
q
9
85
??
??
p
q ??
p
q
9
9. delete q;
61
Memoria Dinámica
typedef struct {int num; float saldo;}Cuenta;
Cuenta *c; c=new Cuenta;
62
Memoria Dinámica
int *v;v = new int [100]; // crea un arreglo dinámico de 100 int
delete [] v; // libera la memoria dinámica ocupada por v
63
Resolución de alcance
float x = 1.23;
void main(){int x = 7 cout << "x local = "<< x <<endl; cout << "x global = " << ::x << endl;}
Operador ::
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 funciónLa lista de parámetros
Cantidad de parámetros Tipo de datos de los parámetros
65
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);
}
Sobrecarga de funciones