Está en la página 1de 20

Programacin

Orientada
a Objetos

Iostream
(Clase 04.06.2015)
Prof. J.Fiestas

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 = os.ll(0);
os << setw(2) << d.getMonth() << -
<< setw(2) << d.getDay() << -
<< setw(4) << sehill(llc) << d.getYear();
return os;
}

Programacin Orientada a Objetos


//Iosexamp.cpp
// 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

//Strle.cpp
// 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("Strle.out");
assure(in, "Strle.out");
// More convenient line input:
while(in.getline(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);
//Strle.cpp
// 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;
in.open("Strle.out,in)
// More convenient line input:
while(in.getline(buf, sz)) {
char* cp = buf;
cout << cp << endl;}
} ///:~

Programacin Orientada a Objetos


//Seeking.cpp
// 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
in.seekg(0, ios::end); // End of le
way);
streampos sp = in.tellg(); // Size of le
para un istream
cout << "le size = " << sp << endl;
o es el valor oset, relaIvo a way

way, puede ser:
in.seekg(-sp/10, ios::end);

streampos sp2 = in.tellg();
in.seekg(0, ios::beg); // Start of le
cout << in.rdbuf(); // Print whole le
in.seekg(sp2); // Move to streampos
// Prints the last 1/10th of the le:
rdbuf es un puntero al stream buer
cout << endl << endl << in.rdbuf() << 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://people.duke.edu/~hpgavin/gnuplot.html

Se calicar 15 puntos por el programa y 5 puntos por el informe