Programacin
Orientada
a
Objetos
Iostream
(Clase
04.06.2015)
Prof.
[Link]
Programacin
Orientada
a
Objetos
Libreras
de
I/O
en
C++
Libreras
orientada
a
objetos
que
proveen
funciones
de
ingreso
y
salida
uIlizando
streams
Un
stream
es
un
objeto
que
transporta
y
formatea
bytes
Programacin
Orientada
a
Objetos
<iostream>
Librera
que
dene
la
clase
iostream,
que
hereda
miembros
de
istream
y
ostream
iostream
es
para
C++
lo
que
stdio
para
C
Si
se
intenta
generar
una
clase
File
en
C++
con
las
funciones
usadas
en
C,
se
tendrn
las
siguientes
desventajas:
- Si
se
quiere
usar
una
funcin
como
prin%()
se
cargar
todo
el
ejecutable
asi
uno
necesite
solo
una
fraccin
de
l,
i.e.
para
Imprimir
un
entero
prin%(%i,i)
se
cargar
toda
la
funcin
que
imprima
oats,
caracteres,
etc.
- Se
interpreta
el
argumento
en
Iempo
de
ejecucin,
lo
que
hace
el
interprete
mas
lento
- No
se
comprueban
errores
durante
la
compilacin,
sino
durante
la
ejecucin
- La
familia
de
funciones
de
prin%()
no
es
extensible
(maneja
solo
los
Ipos
bsicos
de
C
y
sus
variaciones).
C++
permite
aadir
nuevos
Ipos
de
datos.
Programacin
Orientada
a
Objetos
Insertadores
y
extractores:
Son
operadores
de
sobrecarga
<<
(para
insertar
caracteres).
UIliza
el
objeto
cout
y
el
operador
>>
(para
extraer
caracteres).
UIliza
el
objeto
cin:
cout
<<
"i
=
"
<<
i
<<
endl;
cout
<<
"f
=
"
<<
f
<<
endl;
cout
<<
"c
=
"
<<
c
<<
endl;
cout
<<
"buf
=
"
<<
buf
<<
endl;
int
i;
cin
>>
i;
oat
f;
cin
>>
f;
char
c;
cin
>>
c;
char
buf[100];
cin
>>
buf;
endl
(funcin
manipulador
de
ostream):
modica
el
stream
insertando
una
nueva
lnea
(newline)
y
actualizando
la
memoria
(ush)
Programacin
Orientada
a
Objetos
Insertadores
y
extractores:
Para
sobrecargar
operadores
usando
streams.
El
argumento
ser
una
referencia
no
constante
al
stream
(istream
o
ostream),
ya
que
el
procesado
de
datos
cambiarn
el
estado
del
stream.
Ejemplo:
salida
de
un
objeto
Date
en
formato
MM-DD-AAAA
ostream&
operator<<(ostream&
os,
const
Date&
d)
{
char
llc
=
[Link](0);
os
<<
setw(2)
<<
[Link]()
<<
-
<<
setw(2)
<<
[Link]()
<<
-
<<
setw(4)
<<
sehill(llc)
<<
[Link]();
return
os;
}
Programacin
Orientada
a
Objetos
//[Link]
//
Iostream
examples
#include
<iostream>
using
namespace
std;
int
main()
{
int
i;
cin
>>
i;
oat
f;
cin
>>
f;
char
c;
cin
>>
c;
char
buf[100];
cin
>>
buf;
cout
<<
"i
=
"
<<
i
<<
endl;
cout
<<
"f
=
"
<<
f
<<
endl;
cout
<<
"c
=
"
<<
c
<<
endl;
cout
<<
"buf
=
"
<<
buf
<<
endl;
cout
<<
ush;
cout
<<
hex
<<
"0x"
<<
i
<<
endl;
}
///:~
En
el
ejemplo,
buf
solo
insert
la
primera
palabra,
porque
la
funcin
busc
un
espacio
para
delimitar
el
stream.
Ademas,
el
stream
deber
ser
de
tamao
menor
al
denido
para
buf.
El
problema
es
que
se
est
tratando
de
converIr
el
stream
a
un
Ipo
determinado
al
leerlo
12
1.4
c
this
is
a
test
i
=
12
f
=
1.4
c
=
c
buf
=
this
0xc
Programacin
Orientada
a
Objetos
getline():
istream&
getline
(istream&
is,
string&
str,
char
delim);
is
es
un
objeto
istream
de
donde
los
caracteres
son
extrados
str
es
un
objeto
string
donde
se
guardar
el
resultado,
delim
es
el
caracter
de
lmite
(por
defecto
es
\n)
get():
istream&
get
(char*
s,
streamsize
n,
char
delim);
s
es
un
puntero
a
un
array
de
caracteres
donde
se
guardar
el
stream
n
es
el
nmero
mximo
de
caracteres
a
escribir
en
s
delim
es
el
caracter
de
lmite
(por
defecto
es
\n)
Para
leer
lnea
por
lnea
se
uIliza
mas
getline()
Programacin
Orientada
a
Objetos
Crear
cheros
con
iostream:
Al
crear
un
objeto
stream
(ifstream
para
entrada,
ofstream
para
salida)
el
constructor
y
destructor
denidos
en
la
clase
hacen
el
trabajo
de
inicializacin
y
borrado
//[Link]
//
Stream
I/O
with
les
#include
<fstream>
#include
<iostream>
using
namespace
std;
int
main()
{
const
int
sz
=
100;
//
Buer
size;
char
buf[sz];
{
ifstream
in("[Link]");
assure(in,
"[Link]");
//
More
convenient
line
input:
while([Link](buf,
sz))
{
char*
cp
=
buf;
cout
<<
cp
<<
endl;}
}
///:~
Programacin
Orientada
a
Objetos
Crear
cheros
con
iostream:
Puede
tambin
usar
la
funcin
open()
void
open
(const
char*
lename,
ios_base::openmode
mode
=
ios_base::in
|
ios_base::out);
//[Link]
//
Stream
I/O
with
les
#include
<fstream>
#include
<iostream>
using
namespace
std;
int
main()
{
const
int
sz
=
100;
//
Buer
size;
char
buf[sz];
{
ifstream
in;
[Link]("[Link],in)
//
More
convenient
line
input:
while([Link](buf,
sz))
{
char*
cp
=
buf;
cout
<<
cp
<<
endl;}
}
///:~
Programacin
Orientada
a
Objetos
//[Link]
//
Seeking
in
iostreams
Tipo
de
variable
fpos
que
representa
la
localizacin
en
un
string.
Necesita
llamar
a
tellp()
#include
<iostream>
#include
<fstream>
(para
un
ostream)
o
tellg()
(para
un
istream)
using
namespace
std;
Streampos
puede
ser
usado
luego
en
ostream&
seekp
(streamo
o,
ios_base::seekdir
int
main(int
argc,
char*
argv[])
{
ifstream
in(argv[1]);
way);
assure(in,
argv[1]);
//
File
must
already
exist
para
un
ostream
istream&
seekg
(streamo
o,
ios_base::seekdir
[Link](0,
ios::end);
//
End
of
le
way);
streampos
sp
=
[Link]();
//
Size
of
le
para
un
istream
cout
<<
"le
size
=
"
<<
sp
<<
endl;
o
es
el
valor
oset,
relaIvo
a
way
way,
puede
ser:
[Link](-sp/10,
ios::end);
streampos
sp2
=
[Link]();
[Link](0,
ios::beg);
//
Start
of
le
cout
<<
[Link]();
//
Print
whole
le
[Link](sp2);
//
Move
to
streampos
//
Prints
the
last
1/10th
of
the
le:
rdbuf
es
un
puntero
al
stream
buer
cout
<<
endl
<<
endl
<<
[Link]()
<<
endl;
streambuf*
rdbuf()
const;
}
///:~
Streampos,
seekg(),
seekp()
Programacin
Orientada
a
Objetos
Formateo
de
streams
fmhlags
seL
(fmhlags
fmhl,
fmhlags
mask);
Dos
formas
de
formatear
un
string:
seL():
fm%l
es
la
bandera
de
formateo
a
ser
usada
mask
conIene
el
grupo
de
ags
que
ser
modicado
Programacin
Orientada
a
Objetos
Formateo
de
streams
Dos
formas
de
formatear
un
string:
seL():
fm%l
es
la
bandera
de
formateo
a
ser
usada
mask
conIene
el
grupo
de
ags
que
ser
modicado
fmhlags
seL
(fmhlags
fmhl,
fmhlags
mask);
Programacin
Orientada
a
Objetos
Formateo
de
streams
Variables
internas
son
leidas
y
escritas
por
funciones
miembro
del
mismo
nombre
Programacin
Orientada
a
Objetos
Ejercicio:
Lea
el
documento
lat_lon.txt,
que
conIene
4
columnas:
ciudad,
laItud,
longitud,
hora
Para
ello:
Genere
una
clase
datos
con
miembros
correspondientes
a
la
informacin
(hora,
laItud,
longitud,
ciudad),
y
funciones
miembro
para
:
-
ConverId
laItud
y
longitud
al
formato
DDDMM
SS+direccin
-
ConverIr
la
hora
al
formato
WWW
MM
DD
HH:MM:SS
YYYY
Grabar
la
tabla
en
un
documento
lat_lon.bin
de
formaIo
binario
Comprobar
la
conversin
transformando
el
formato
binario
a
ASCII
nuevamente
y
llamarlo
lat_lon_conv.txt
Nota:
Puede
grabar
el
Iempo
en
una
estructura
de
Ipo
tm
y
uIlizar
la
funcion
mkRme
(struct
tm
*
Imeptr)
para
converIr
el
Iempo
en
una
variable
de
Ipo
Rme_t
que
pueda
ser
directamente
leido
y
escrito
por
cRme
(const
Ime_t
*
Imer)
en
un
string
del
formato
requerido
Programacin
Orientada
a
Objetos
Ejercicio:
ConverIr
el
texto
de
un
documento
HTML
a
word
Para
ello:
Leer
el
texto
linea
por
linea,
i.e.
usando
getline()
UIlizar
funciones
como
nd(),
replace(),
append(),
etc
Borrar
caracteres
HTML,
comentarios,
etc.
La
tabla
puede
ser
simplicada
a
escribir
una
linea
bajo
de
la
otra
(conserve
la
numeracion)
Nota:
Puede
generar
un
array
de
strings
con
la
lista
de
eIquetas
HTML
y
uIlizar
la
funcion
erase()
para
borrar
estas
expresiones
luego
de
encontrarlas
erase()
se
declara
de
la
siguiente
manera:
erase
(pos
=
0,
len
=
npos);
donde
se
borrara
la
porcion
de
string
que
se
inicia
en
la
posicion
pos
y
abarca
len
caracteres
Bajar
documento
HTML
del
portal
del
IMCA
Programacin
Orientada
a
Objetos
Ejercicio
terico-pracRco
1:
Dinmica
de
Poblaciones
(sistema
de
Volterra-Lotka)
Modelo
de
dos
especies
compiIendo
por
una
fuente
de
alimento
comn.
E.g.,
depredador-presa.
a,b,c,d
son
posiIvos.
I.e.
Crecimiento
de
N1
sin
N2
(depredador),
o
exIncin
de
N2
sin
N1
que
lo
alimente.
Expresin
a-dimensional:
Solo
un
parmetro
libre.
Puntos
estacionarios:
Programacin
Orientada
a
Objetos
Ejercicio
terico-pracRco
1:
Dinmica
de
Poblaciones
(sistema
de
Volterra-Lotka)
Anlisis
de
estabilidad
del
caso
mulI-dimensional.
Dado
un
sistema
de
ecuaciones
diferenciales
Puntos
estacionarios
son
soluciones
de
f(u)=0.
La
solucin
Iene
la
forma
ConIene
componentes
que
crecen
en
el
Iempo,
si
A
Iene
valores
propios
con
parte
posiIva
real
(>0),
u*
no
es
estable.
u*
es
estable
si
los
valores
propios
son
<
0
Programacin
Orientada
a
Objetos
Ejercicio
terico-pracRco
1:
Dinmica
de
Poblaciones
(sistema
de
Volterra-Lotka)
Estabilidad
de
soluciones
estacionarias
Si
A
es
diagonal,
y
soluciones
son
inestables
Valores
propios
son
imaginarios,
solucin
es
Estable
marginalmente.
Solucin
general:
Tiene
caracter
oscilatorio.
v1,2
son
vectores
propios
de
A,
correspondientes
a
los
valores
propios
imaginarios
Programacin
Orientada
a
Objetos
Ejercicio
terico-pracRco
1:
Dinmica
de
Poblaciones
(sistema
de
Volterra-Lotka)
Dada
la
matriz
:
que
representa
la
matriz
de
estabilidad
de
un
sistema
Volterra-Lotka
(3
predadores,
3
presas)
Calcule
los
valores
propios
y
vectores
propios
vi,
i=1,...6
de
la
matriz.
Para
calcular
los
valores
puede
uIlizar
eliminacin
Gauss-Jordan
(vea
codigo
de
librerias
en
Numerical
Recipes
en
el
portal
IMCA
)
Escoja
condiciones
iniciales,
con
c1=c2=3,
c3=c4=1,
c5=5,
c6=0.1
Simule
el
comportamiento
de
las
6
poblaciones
en
el
intervalo
de
Iempo
[0,10].
Observe
y
comente
estabilidad
Programacin
Orientada
a
Objetos
Ejercicio
terico-pracRco
1:
Dinmica
de
Poblaciones
(sistema
de
Volterra-Lotka)
Escribir
un
informe
del
resultado
del
ejercicio
incluyendo
los
siguientes
puntos:
- Breve
descripcin
terica
de
dinmicas
de
poblacin
(puede
basarse
en
la
descripcin
dada
en
clase)
- Formular
el
problema
del
ejercicio
- Describir
el
resultado
uIlizando
por
lo
menos
un
grco
- Concluir
acerca
de
la
estabilidad
de
la
poblacin
considerada
Puede
redactarlo
en
Word
o
en
Latex
(mximo
de
dos
caras)
Fuente
de
latex
en
el
portal
IMCA
Para
los
grcos
se
recomienda
gnuplot.
Tutorial:
hp://[Link]/~hpgavin/[Link]
Se
calicar
15
puntos
por
el
programa
y
5
puntos
por
el
informe