Beruflich Dokumente
Kultur Dokumente
Lenguaje de programacio
sicas 2
Herramientas Ba
n Intensivo en Co
mputo de Alto Desempen
o
1er Plan de Capacitacio
Enero de 2014
C++
c 2015
LM de la Cruz
1 / 37
Contenido
Arreglos
Ejercicios 2.
Estructuras
Funciones
Espacios de nombres
Excepciones
Bibliografa
C++
c 2015
LM de la Cruz
2 / 37
Contenido
Arreglos
Ejercicios 2.
Estructuras
Funciones
Espacios de nombres
Excepciones
Bibliografa
C++
c 2015
LM de la Cruz
3 / 37
C++
c 2015
LM de la Cruz
4 / 37
Punteros
Archivo : ejem11 1.cpp
MEMORIA
Nombre
Contenido
Direccion
0x012312
int i = 5 , p ;
p 0x90113
C++
0x352090
c 2015
LM de la Cruz
5 / 37
Punteros
Archivo : ejem11 1.cpp
MEMORIA
Nombre
*pi i
int i = 5 , p ;
int pi = &i ;
Contenido
pi 0x012312 0x179018
p 0x90113
C++
Direccion
0x012312
0x352090
c 2015
LM de la Cruz
5 / 37
Punteros
Archivo : ejem11 1.cpp
MEMORIA
Nombre
Contenido
*pi i
int i = 5 , p ;
int pi = &i ;
int j = pi ;
pi 0x012312 0x179018
j
p 0x90113
C++
Direccion
0x012312
0x235312
0x352090
c 2015
LM de la Cruz
5 / 37
Punteros
Archivo : ejem11 1.cpp
MEMORIA
Nombre
int i =
int pi
int j =
double
5 , p ;
= &i ;
pi ;
d = &j ; // Intenta ...
C++
Contenido
*pi i
Direccion
0x012312
pi 0x012312 0x179018
j
0x235312
p 0x90113
0x352090
0x561294
c 2015
LM de la Cruz
5 / 37
Punteros
Archivo : ejem11 1.cpp
MEMORIA
Nombre
int i =
int pi
int j =
double
5 , p ;
= &i ;
pi ;
d = &j ; // ERROR !
Contenido
*pi i
Direccion
0x012312
pi 0x012312 0x179018
j
0x235312
p 0x90113 0x352090
ERROR!
d
?
0x561294
C++
c 2015
LM de la Cruz
5 / 37
Punteros
tica
Aritme
int p ;
++p ;
p ;
p += 5 ;
p = 5 ;
const
const int p ; // se hace constante el objeto al que se apunta
int const p ; // se hace constante el puntero .
const int const p ; // ambos constantes
C++
c 2015
LM de la Cruz
6 / 37
Referencias
C++
c 2015
LM de la Cruz
7 / 37
Cadenas
C++
c 2015
LM de la Cruz
8 / 37
Arreglos
Contenido
Arreglos
Ejercicios 2.
Estructuras
Funciones
Espacios de nombres
Excepciones
Bibliografa
C++
c 2015
LM de la Cruz
9 / 37
Arreglos
ticos
Arreglos esta
Archivo : ejem12 1.cpp
Un arreglo estatico es un conjunto de variables del mismo tipo,
almacenadas en memoria en forma secuencial.
MEMORIA
int a [ 3 ] = { 3 , 6 , 9 } ;
int suma = 0 ;
// El siguiente for - loop
// requiere la opcion
// - std = c ++0 x para compilar
for ( int elem : a )
suma += elem ;
suma
18
0x634344
c 2015
LM de la Cruz
10 / 37
Arreglos
micos
Variables y arreglos dina
operadores new y delete : Archivo ejem12 2.cpp
double d ;
d = new double ;
d = 4 5 . 3 ;
delete d ;
d = new double ( 3 . 1 4 1 5 9 2 ) ;
delete d ;
d = new double [ 3 ] ;
d [0] = 44.56;
d [1] = d [0] + 5.67;
delete [ ] d ;
MEMORIA
Nombre
Contenido Direccion
d 0x053328 0x012310
*d
45.3
0x053328
int n ;
cin >> n ;
d = new double [ n ] ;
// ...
delete [ ] d ;
d = 0 ; // d = NULL ;
C++
c 2015
LM de la Cruz
11 / 37
Arreglos
Arreglos multidimensionales
Archivo : ejem12 3.cpp
a[2][4] = { 0, 1,
2, 3,
4, 5,
6, 7};
float a [ 2 ] [ 4 ] = { 0 , 1 ,
2 ,3 ,
4 ,5 ,
6 ,7};
// Recorrido por renglon ij
for ( int i = 0 ; i < N ; i++)
for ( int j = 0 ; j < N ; j++)
a[i][j] = i j
// Recorrido por columna ji
for ( int j = 0 ; j < N ; j++)
for ( int i = 0 ; i < N ; i++)
a[i][j] = i j;
C++
MEMORIA
Nombre
a[0][0]
a[1][0]
a[0][1]
a[1][1]
a[0][2]
a[1][2]
a[0][3]
a[1][3]
Contenido
0
1
2
3
4
5
6
7
c 2015
LM de la Cruz
Direccion
0x012310
0x012314
0x012318
0x012322
0x012326
0x012330
0x012334
0x012338
0x012342
12 / 37
Arreglos
micos
Arreglos multidimensionales dina
Archivo : ejem12 4.cpp
int N , rep ;
cout << " Tama ~ no = " ;
cin >> N ;
double a ;
a = new double [ N ] ;
for ( int i = 0 ; i < N ; i++)
a [ i ] = double [ N ] ;
// Recorrido por renglon ij
for ( int i = 0 ; i < N ; i++)
for ( int j = 0 ; j < N ; j++)
a[i][j] = i j;
// Recorrido por columna ji
for ( int j = 0 ; j < N ; j++)
for ( int i = 0 ; i < N ; i++)
a[i][j] = i j;
C++
c 2015
LM de la Cruz
13 / 37
Ejercicios 2.
Contenido
Arreglos
Ejercicios 2.
Estructuras
Funciones
Espacios de nombres
Excepciones
Bibliografa
C++
c 2015
LM de la Cruz
14 / 37
Ejercicios 2.
Ejercicios 2.
Ejercicios 2.
Completar el diagrama de la memoria describiendo lo que sucede en
cada instruccion para el caso del ejemplo 14. Realizar un diagrama
por cada instruccion.
Describir diagrama de la memoria explicando lo que sucede en cada
instruccion para el caso del ejemplo 15. Realizar un diagrama por
cada instruccion.
Explique como hara un arreglo de tama
no N que comience en k y
termine en N+k-1?. (Hint: punteros y su aritmetica).
C++
c 2015
LM de la Cruz
15 / 37
Estructuras
Contenido
Arreglos
Ejercicios 2.
Estructuras
Funciones
Espacios de nombres
Excepciones
Bibliografa
C++
c 2015
LM de la Cruz
16 / 37
Estructuras
Estructuras
Un estructura combina variables de distintos tipos en un solo nombre.
Archivo : ejem13 1.cpp
point c [ 5 ] ;
for ( int i = 0 ; i < 5 ; ++i ) {
c [ i ] . nombre = to_string ( i ) ;
c [ i ] . x = ( i+1) rand ( ) % 1 0 0 ;
c [ i ] . y = ( i+1) rand ( ) % 1 0 ;
}
struct point
{
string nombre ;
float x , y ;
} punto0 ;
int main ( ) {
punto0 . nombre = " punto cero " ;
punto0 . x = 3 . 1 4 1 5 9 2 ;
punto0 . y = 1 2 3 1 2 3 ;
point pt1 ;
pt1 . nombre = " pt1 " ;
pt1 . x = 0 . 5 ;
pt1 . y = 1 . 0 ;
C++
point pp , pq ;
pp = &pt1 ;
pq = new point ;
pq>nombre = " puntero a punto " ;
pq>x = 3 0 0 0 ;
pq>y = 1 0 0 0 0 ;
return 0 ;
}
c 2015
LM de la Cruz
17 / 37
Estructuras
Estructuras
Una estructura tiene tres niveles de acceso:
P
ublico: public (por omisin)
Protegido: protected
Privado: private
C++
c 2015
LM de la Cruz
18 / 37
Funciones
Contenido
Arreglos
Ejercicios 2.
Estructuras
Funciones
Espacios de nombres
Excepciones
Bibliografa
C++
c 2015
LM de la Cruz
19 / 37
Funciones
Funciones
Una funcion es un procedimiento que puede recibir argumentos,
realizar acciones sobre ellos y regresar alg
un resultado.
Re-uso, Facilidad de mantenimiento, Reducci
on de errores.
Ejemplo
# include <iostream>
using namespace std ;
// declaracion ( firma )
int square ( int ) ;
int main ( ) {
cout << " 5 al cuadrado = "
<< square ( 5 ) << endl ;
}
// definicion ( impleme ntacion )
int square ( int x ) {
return x x ;
}
C++
regreso nombre(argumentos);
regreso: tipo del valor de
regreso de la funcion (void,
int, float, . . . , TDAs).
nombre: definido por el usuario.
argumentos: lista de
argumentos que recibe la
funci
on, definido por el usuario.
(void, int, float, . . . , TDAs)
c 2015
LM de la Cruz
20 / 37
Funciones
Funciones
Los tipos de las entradas y la salidas se deben especificar.
Si una funcion no regresa ning
un valor se debe usar void.
La omision de argumentos significa que la funci
on no recibe entradas.
Los argumentos son valores que se pasan a las funciones:
Argumento formal : es el nombre de un objeto que es
reemplazado por un valor (argumento actual) cuando la
funcion se ejecuta.
Argumento actual : valor, expresi
on o referencia que se pasa a
una funci
on cuando es llamada y que reemplaza a los
argumentos formales.
void funcion ( int a , double b ) ; // Argumentos formales a y b
funcion ( 5 , 3 . 1 4 1 6 ) ; // Argumentos actuales .
C++
c 2015
LM de la Cruz
21 / 37
Funciones
n y sobrecarga
Funciones: args. por omisio
En ocasiones, algunos argumentos no cambiaran entre las llamadas de
una funcion. En estos casos es conveniente usar valores por omision.
void func ( int x , int y , int z =3 , int w =2);
int a , b , c , d ;
func ( a , b ) ; // x =a , y =b , z =3 , w =2
func ( a , b , c ) ;
func ( a , b , c , d ) ;
c 2015
LM de la Cruz
22 / 37
Funciones
ticas
Funciones: recursividad, inline, var. esta
Funciones recursivas:
long factorial ( long a ) {
if ( a > 1 )
return a factorial ( a 1) ;
else
return 1 ;
}
C++
c 2015
LM de la Cruz
23 / 37
Funciones
Archivos y flujos
La biblioteca <fstream> provee funciones para manipular archivos de
entrada y salida: ifstream, para archivos de entrada; ofstream,
para archivos de salida
Un archivo se puede abrir para lectura (in), escritura (out), en modo
binario (binary), etc.
Archivo : ejem15 1.cpp
ifstream infile ( " data " , ios_base : : in ) ;
ofstream outfile ( " output " , ios_base : : out ) ;
C++
c 2015
LM de la Cruz
24 / 37
Espacios de nombres
Contenido
Arreglos
Ejercicios 2.
Estructuras
Funciones
Espacios de nombres
Excepciones
Bibliografa
C++
c 2015
LM de la Cruz
25 / 37
Espacios de nombres
Espacios de nombres
Un espacio de nombres, namespace, es un mecanismo para agrupar
estructuras de datos, funciones y otros espacios de nombres.
Si un conjunto de declaraciones estan relacionadas bajo un cierto
criterio, entonces, ellas pueden ponerse en un espacio de nombres
comn para expresar este hecho.
El objetivo es evitar conflictos de nombres y expresar una estructura
logica dentro del programa.
n y definicio
n de los espacios de nombres
Declaracio
namespace Vec {
class Vector ;
double onenorm ( Vector & );
double twonorm ( Vector & );
double maxnorm ( Vector & );
}
double Vec : : onenorm ( Vector& v )
{ // ... }
C++
namespace Mat {
class Matrix ;
double onenorm ( Matrix & );
double twonorm ( Matrix & );
double maxnorm ( Matrix & );
double frobnorm ( Matrix & );
}
double Mat : : onenorm ( Matrix& m )
{ // ... }
c 2015
LM de la Cruz
26 / 37
Espacios de nombres
Espacios de nombres
int main ( ) {
Matrix A ;
Vector x ;
Mat : : onenorm ( A ) ;
Vec : : onenorm ( x ) ;
Mat : : onenorm ( A ) ;
twonorm ( A ) ;
onenorm ( x ) ;
return 0 ;
}
return 0 ;
}
C++
c 2015
LM de la Cruz
27 / 37
Espacios de nombres
Espacios de nombres
digos
Mezcla de dos co
// Archivo pepe . hpp
namespace Pepe {
char f ( char ) ;
int f ( int ) ;
class Cadena { . . . } ;
}
// Archivo maria . hpp
namespace Maria {
char f ( char ) ;
double f ( double ) ;
class Cadena { . . . } ;
}
C++
c 2015
LM de la Cruz
28 / 37
Espacios de nombres
Espacios de nombres
n de espacios de nombres
Combinacio
namespace Uno {
class String { . . . } ;
String operator +(cons String ,
char ) ;
void fill ( char ) ;
}
namespace Dos {
class Vector { . . . }
}
namespace Tres {
using namespace Uno ;
using namespace Dos ;
void fct ( String & );
}
void f ( ) {
Tres : : String s = " Hola " ;
Tres : : Vector v ;
}
C++
c 2015
LM de la Cruz
29 / 37
Espacios de nombres
Espacios de nombres
Archivo : ejem16.cpp
C++
c 2015
LM de la Cruz
30 / 37
Excepciones
Contenido
Arreglos
Ejercicios 2.
Estructuras
Funciones
Espacios de nombres
Excepciones
Bibliografa
C++
c 2015
LM de la Cruz
31 / 37
Excepciones
Excepciones
C++
c 2015
LM de la Cruz
32 / 37
Bibliografa
Contenido
Arreglos
Ejercicios 2.
Estructuras
Funciones
Espacios de nombres
Excepciones
Bibliografa
C++
c 2015
LM de la Cruz
33 / 37
Bibliografa
Bibliografa I
Bjarne Stroustrup.
A Tour of C++
AddisonWesley, 2013.
Bjarne Stroustrup.
Programming, Principles and Practices
AddisonWesley, Second Edition, 2014.
Bjarne Stroustrup.
The C++ Programming Language
AddisonWesley, Fourth Edition, 2013.
Scott Meyers.
Effective C++
AddisonWesley, Third Edition, 2005.
C++
c 2015
LM de la Cruz
34 / 37
Bibliografa
Bibliografa II
Scott Meyers.
Effective Modern C++
OReilly, 2014.
Scott Meyers.
More Effective C++
AddisonWesley, 1996.
Scott Meyers.
Effective STL
AddisonWesley, 2001.
Scott Meyers info.
www.aristeia.com.
D. Yang.
C++ and Object-Oriented Numeric Computing.
Springer-Verlag, 2001.
C++
c 2015
LM de la Cruz
35 / 37
Bibliografa
Bibliografa III
G.E. Karniadis and R.M. Kirby.
Parallel Scientific Computing in C++ and MPI .
Cambridge University Press, 2003.
J. Barton and L.R. Nackman,
Scientific and Engineering C++: An Introduction with Advanced
Techniques and Examples,
Addison-Wesley Professional, 1994.
N. M. Josuttis.
The C++ Standard Library: A Tutorial and Reference.
AddisonWesley, 1999.
M. H. Austern.
Generic Programming and the STL: Using and Extending the C++
Standard Template Library.
AddisonWesley, 1999.
C++
c 2015
LM de la Cruz
36 / 37
Bibliografa
Bibliografa IV
C++
c 2015
LM de la Cruz
37 / 37