introducciÓn al lenguaje c++. 2 en c++ la entrada y salida de datos se realiza a través de...
TRANSCRIPT
INTRODUCCIÓN AL LENGUAJE C++
2
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 incluida en el programa
Entrada y salida
3
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<<700
int i=5, j=10,m=100;
cout<< "El valor de i es:"<<i << j << m;
Salida: cout
4
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) 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)
Salida con formato
5
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 tecladoint numero1, numero2;
cin>>numero1;
cin>>numero2;
Entrada: cin
6
#include <iostream.h>int 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“ << endl; else if (miEdad > suEdad) cout << "Mi amigo es menor que yo \n "; else cout << “Ambos tenemos la misma edad \n "; return 0;}
Ingresar 2 edades y determinar quién es mayorEjercicio
7
Tipos de DatosELEMENTALES
8
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
Tipos numéricos
9
Un puntero es una variable que puede almacenar una dirección de memoria.
Una variable de tipo puntero puede guardar direcciones de variables de un tipo determinado: punteros a int, a double, a char, etc.
Punteros
10
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
Declaración de punteros
11
cin>>*p; if (p==r) cout<<"El valor de i es: "<<*p; *p=*p+3; p=p+3;
Otras operaciones con punteros
12
Es posible desplegar una dirección como valor de una variable de tipo puntero, o la dirección de cualquier variable, utilizando cout
cout << “p = “ << p << endl;
cout << “&n = “ << &n << endl;
cout << “&p= “ << &p << endl;
Mostrar una dirección
13
1. int *p, *q, a=5
??
??
p
q
2. p=&a 3. *p=8;
??
p
q8
4. q=p;
p
q8
5. *q=85;
p
q85
??
p
q
5a
5a:
a
a a
Ejemplo ilustrativo
14
6. a=33;
p
q33
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
Ejemplo ilustrativo
15
int 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; return 0;}
Ejemplo 1:
16
int main() { int *p, *q, x, y; p = &x; *p = 14; q = p; cout << *p << " " << *q << endl; q = NULL; cout << x << " “ << y << endl; return 0;}
Ejemplo 2:
17
int 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;return 0;
}
Ejemplo 3:
18
int 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";return 0;
}
Ejemplo 4:
19
enum Frutas {Manzana, Pera, Guinda, Kiwi,};
enum Color {Rojo=10, Verde, Azul};
enum Raza {Pastor, Cooker, Poodle, Setter, Collie};
int main() { Color c=Verde; if (c==Verde)
cout<<"Color VERDE"; return 0;}
Tipos Enumerados
20
Tipos de DatosESTRUCTURADOS
21
Un arreglo es un objeto de dato estructurado de carácter homogéneo
Los arreglos pueden ser de una o mas dimensiones
Un Vector es un arreglo unidimensionalint 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 9v: 41 23 87 19 -9 91 103 25 11 22 cout << v[3];
Arreglos
22
Una Matriz es una arreglo bidimensional
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
Arreglos
23
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[25];
String s;
Strings
24
Captura de un String Lee del flujo de entrada un string. Deja para la siguiente lectura el '\n' No reconoce el espacio inicial en las entradas
cin >> s;
i = 1;do { cin >> s; cout << i << ": " << s << endl; i++;}while (i<5);
Ingresar:Este es un ejemplo
Strings
25
Captura de un String 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 ha extraído la cantidad largo de caracteres, aunque NO haya terminado la línea
cin.getline(s, largo);
Strings
26
Captura de un String
i=1;do { cin.getline(s,20); cout << i << ": " << s << endl; i++;}while (i<5);
Strings
27
Funciones sobre strings
strlen(string); // largo strcpy(destino, origen); // copia strcmp(string1, string2); // compara
0: Si string1 == string2 1: Si string1 > string2 -1: Si string1 < string2
Strings
28
#include <iostream.h>#include <string.h>int main() { char x[5]; char y[] = "Hola"; strcpy(x,y); cout << "x:" << x << endl; cout << "y:" << y << endl; return 0;}
Strings
29
#include <iostream.h>#include <string.h>int main() { char *x; char y[] = "Hola"; x = new char[strlen(y)+1]; cin.getline(x, 20); cout << "x:" << x << endl; cout << "y:" << y << endl; return 0;}
Strings
30
#include <iostream.h>#include <string.h>void Copiar(char a[], char b[]) { strcpy(a, b);}int main() { char *x; char y[] = "Hola"; x = new char[strlen(y)+1]; Copiar(x,y); cout << "x:" << x << endl; cout << "y:" << y << endl; return 0;}
Strings
31
#include <iostream.h>#include <string.h>void Copiar(char *a, char *b) { strcpy(a, b);}int main() { char *x; char y[] = "Hola"; x=new char[strlen(y)+1]; Copiar(x,y); cout<< "x:" << x << endl; cout<< "y:" << y << endl; return 0;}
Strings
32
#include <iostream.h>#include <string.h>char *Mayor(char a[], char *b) { if (strcmp(a,b)>0) return a; return b;}int main() { char *x; char y[] = "Hola"; x = new char[strlen(y)+1]; cin.getline(x,20); cout << "El mayor: " << Mayor(x,y); return 0;}
Strings
33
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
Estructuras
34
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;cout << p->hh << h.hh << v[7].hh
Estructuras
35
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];};
Definición de nuevos tipos
36
Vector v; // int v[10];Boolean sw = FALSE;Persona alumno;Numero x;
typedef union Numero { int i; float f;};
Definición de nuevos tipos
37
OBJETOS CONSTANTES
38
const int x; // error: x debe ser inicializadax = 7; // error: x no puede ser
// modificada por asignaciónconst int z = 3; cout << z << '\n';
Objetos Constantes
Se definen mediante el prefijo const Estos objetos NO puede ser modificados por
asignación Sólo se permite su inicialización
39
FUNCIONES
40
<tipo de retorno> <nombre>(<parámetros>) { <datos locales>
<instrucciones>}
Definición
Las funciones no se pueden anidar Todas las funciones son externas, se pueden
llamar desde cualquier punto del programa
41
#include <iostream.h>void f1() { cout << "Función sin argumentos \n"; }void f2(void) { cout << “También sin argumentos \n"; }int main() { f1(); f2(); return 0;}
Definición
42
Si la función retorna un valor, se debe especificar el tipo de dato retornado:
char, double, float También puede retornar un UN PUNTERO. Puede no retornar valores (void). Puede retornar una referencia: (ALIAS)
<tipo> &<nombre>(<parámetros>)
Tipos de retorno
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 se definen antes de usarlas
44
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
Variables locales y globales
45
Parámetros
Parámetros Formales O de definición, son los que aparecen en la
declaración de la función Parámetros Actuales
O de invocación, son los que aparecen en la llamada a la función
Se usan para inicializar los parámetros formales, o recibir valores de los parámetros
formales
46
Parámetros actuales
Los parámetros actuales pueden ser: Constantes Variables Expresiones
Ejemplo:
total = CalcArea(20, 4);
L = 30;A=12;total = CalcArea(L, A+2);
47
Modos de parametrización
Parámetros por Valor Al llamar a la función, se copia el valor del
parámetro actual como valor del parámetro formal
El parámetro formal se inicializa con el valor de parámetro actual
La función trabaja con una copia; luego, no modifica el valor de la variable usada como parámetro actualLLAMADA DEFINICIÓN
Ejemplo(a);Ejemplo(a+1);Ejemplo(4);
void Ejemplo(int x)
48
Modos de parametrización
Parámetros por Referencia Al llamar a la función, se copia la dirección del
parámetro actual como dirección del parámetro formal
El parámetro formal es ALIAS del parámetro actual
La función puede cambiar su valor
LLAMADA DEFINICIÓN
Ejemplo(a); void Ejemplo(int &x)
49
Ejemplos
void Ejemplo (int a, int &b) { a = 5; b = 8;}
int main( ) { int x = 2, y = 4, &z = x; // z es ALIAS de x Ejemplo(x, y); cout << x << " " << y << " " << z; cout << endl; return 0;}
50
Ejemplos
int cuadXVal(int a) { return a = a*a; }void cuadXInd(int *b) { *b = (*b) * (*b); }void cuadXRef(int &c) {c = c*c; }
51
Ejemplos
int main() { int x = 2, y = 3, z = 4; cout << "Por valor : x = " << cuadXVal(x) << '\n'; cuadXInd(&y); cout << "Por indirección : y = " << y << '\n'; cuadXRef(z); cout << "Por referencia : z = " << z << '\n'; return 0;}
52
Prototipos de funciones
#include <iostream.h>void f1();void f2(void);int main() { f1(); f2(); return 0;}void f1() { cout << "Función sin argumentos \n"; }void f2(void) { cout << "Función también sin argumentos \n"; }
53
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
Funciones en línea
54
inline float cubo(float x) {return x*x*x; }int 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'; return 0;}
Funciones en línea
55
int *p;p = new int; : : :delete p;
int q = new int(3);float f = new float(2,2); : : :delete q;
Memoria Dinámica
56
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
Ejemplo ilustrativo
57
5. *q=85;
p
q
85
6. p new ( int);
p
q
?
85
7. *p= 9;
p
q
9
85
Ejemplo ilustrativo
58
8. delete q;
p
q85 p
q
9
85
??
??
p
q ??
p
q
9
9. delete q;
Ejemplo ilustrativo
59
typedef struct { int num; float saldo;} Cuenta;
Cuenta *c; c = new Cuenta;
Memoria Dinámica
60
int *v;
v = new int [100]; // crea un arreglo dinámico de 100 enteros
delete [] v; // libera la memoria ocupada por v
Memoria Dinámica
61
Resolución de alcance
float x = 1.23;int main() { int x = 7 cout << "x local = "<< x <<endl; cout << "x global = " << ::x << endl; return 0;}
Operador ::
62
Es posible definir funciones con el mismo nombre, las cuales se pueden diferenciar en:
El tipo del valor retornado
La lista de parámetros Cantidad de parámetros
Tipo de los parámetros
Sobrecarga de funciones
63
float cuadrado(int k) { return k*k; }float cuadrado(float x) { return x*x; }int main() { int i = 5; float x = 3.3; cout << i << " al cuadrado = " << cuadrado(i); cout << endl; cout << x << " al cuadrado = " << cuadrado(x); return 0;}
Sobrecarga de funciones