Informática II Clase 12: Flujos Diego Fernando Serna Restrepo

Slides:



Advertisements
Presentaciones similares
Unidad 15 Características de C++ no relacionadas con el DOO.
Advertisements

Lenguaje C++.
Introducción a C#.
Prof. Carlos Rodríguez Sánchez
Ejemplo de Programa C++
Repaso para la construcción del intérprete 2012
Fundamentos de la Programación Estructurada
Clase 3: Punteros y Referencias
Programación, Algoritmos y Estructuras de Datos
Técnicas de Programación con Visual Basic
DIAGRAMAS DE FLUJO Y PSEUDOCÓDIGO
Informática II Prof. Dr. Gustavo Patiño MJ
Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2.
Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2.
Programación 1 Presentación de c++
Detalles del sistema operativo
Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2.
Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2.
Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2.
Introducción al lenguaje C++
Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2.
Informática II Prof. Dr. Gustavo Patiño MJ
Una breve introducción
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
En Java las estructuras de repetición son las mismas que en C/C++.
Estructuras de Control de Repetición
Unidad I Java y C++ : Similitudes y diferencias
 2003 Prentice Hall, Inc. All rights reserved. 1 Capítulo 6: Clases y Abstracción de Datos Índice del capítulo 6.1 Introducción 6.2 Estructuras 6.3 Clases.
Archivos Programación.
Informática Ingeniería en Electrónica y Automática Industrial
LENGUAJE “C” Programación.
1 Input Streams “Flujos de Entrada” Agustín J. González Versión original de Kip Irvine ELO-329.
Archivos.
Informática Ingeniería en Electrónica y Automática Industrial
Computación II Unidad IX Flujos y archivos. Presentación de la unidad Objetivos: –Comprender como utilizar el flujo de entrada y salida en C++ –Comprender.
Computación II Repaso de java Karina Figueroa Mora.
Administración de Proyectos de desarrollo de Software Ciclo de vida de un proyecto Enfoque moderno Temas Componentes Directivas Declaraciones globales.
INTRODUCCION. LOS LENGUAJES DE PROGRAMACIÓN Los lenguajes de programación herramientas que nos permiten crear programas y software. EL LENGUAJE DE MAQUINA.
Entrada y Salida de Archivos
Introducción a los punteros Prof. Domingo Hernández.
Archivos Programación I MC Beatriz Beltrán Martínez.
Tipos de Datos. Entrada-Salida.. La entrada-salida (I/O) le permite a un programa comunicarse con el mundo exterior. Esta comunicación puede realizarse.
Elementos básicos del lenguaje
Unidad 2 REUTILIZACIÓN DE CLASES Programación Orientada a Objetos M.S.C. Ivette Hernández Dávila.
Unidad II Introducción a la programación en C++
Informática Ingeniería en Electrónica y Automática Industrial
Programación orientada a objetos. El método main es el comportamiento por el cual comienzan todos los programas en Java, de la misma forma en la que C,
Elementos básicos del lenguaje
PAQUETES Un paquete es un conjunto de clases, interfaces y subpaquetes relacionados. El paquete define un ámbito de visibilidad: los miembros que no tienen.
1 Algunas ideas básicas de C++ Agustín J. González ELO-320.
Sara Isabel Osorio Alacraz Ana Isabel Vallejo Grisales
Entrada / Salida Streams Archivos Algoritmos y Estructuras de Datos I Departamento de Computación, Facultad de Ciencias Exactas y Naturales, Universidad.
Entrada / Salida Streams Archivos Algoritmos y Estructuras de Datos I Departamento de Computación, Facultad de Ciencias Exactas y Naturales, Universidad.
1 Algunas ideas básicas de C++ Agustín J. González ELO-329.
Sesión 08: Flujo de datos /1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad.
1 Algunas ideas básicas de C++ Agustín J. González ELO-329.
1 Algunas ideas básicas de C++ Agustín J. González ELO-329.
INTRODUCCION A LA PROGRAMACION
PRINCIPIOS DE PROGRAMACIÓN
1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)
Algoritmo.
CONALEP 104 METODO MAP  VANESSA IXBA MARTINEZ MATERIA: PROGRAMACION ORIENTADA A OBJETOS MAESTRA: LIC. Ma. TERESA QUINO DELGADO GRUPO: 4104 CUARTO SEMESTRE.
Metodología de Programación Ayudantía 4 lelagos.ublog.cl 2009.
MEMORIA DINÁMICA.
Lenguaje de Programación II PLAN DE EVALUACIÓN CONTENIDO MODALIDAD DE EVAL. PONDERACIÓN INTRODUCCIÓN BÁSICA AL LENGUAJE DE PROGRAMACIÓN.
Manejo de archivos de texto.  Unidad fundamental de almacenamiento dentro del ámbito de la informática. Alberga un conjunto de datos que es posible leer,
Métodos en Java. Estructura de un programa en Java ► La relación con la vida misma la podemos ver en el siguiente comentario: Imaginemos que dos clases.
PROF. RAFAEL MONTENEGRO B. UNELLEZ-APURE Introducci Ó n a los Arreglos (“arrays”) en C++
Entrada y Salida en C++, Estructuras de Control Prof. Manuel B. Sánchez.
Transcripción de la presentación:

Informática II Clase 12: Flujos Diego Fernando Serna Restrepo Semestre 2011/2

Chiste del Día Informática II 2011/2

Contenido Flujos 1 Librería Input/Output Stream 2 Entrada y Salida de archivos 3 4 Argumentos de línea de comandos Informática II 2011/2

Flujos C++ no define, como lenguaje, una forma de escribir datos en la pantalla o en archivos ni cómo leerlos del teclado. Esta funcionalidad esencial, es provista por librerías de entrada y salida E/S. Una librería es una colección de archivos objeto (.o en linux, .obj en windows) que se pueden enlazar con su código para incrementar su funcionalidad. La ventaja de esto es que se pueden escribir programas independientes de plataforma, por lo menos en teoría. Informática II 2011/2

Flujos Informática II 2011/2

Encapsulamiento La librería iostream abstrae el problema modelando la entrada-salida como flujos de bytes, en serie uno tras otro, tanto de entrada como de salida. 1 Encapsula el problema con operadores de extracción e inserción de flujo. 2 operador de inserción << , el flujo es de salida. 3 operador de extracción, >> , el flujo es de entrada 4 Encapsula los detalles y técnicos dependientes de la plataforma. Informática II 2011/2

Buffering Escribir o datos en el disco y en menor medida en la pantalla, es lento respecto a la velocidad del procesador. Para resolver esto se pueden usar buffers, almacenamiento de memoria temporal que se llenan desde el programa sin tener que detener la ejecución hasta que se escriba dato por dato, y pueden ser vaciados independientemente por el sistema de salida. Ejemplo análogo, tanque con válvulas de entrada y salida. Informática II 2011/2

Contenido Flujos 1 Librería Input/Output Stream 2 Entrada y Salida de archivos 3 4 Argumentos de línea de comandos Informática II 2011/2

Librería Input/Output Stream Informática II 2011/2

Librería Input/Output Stream ios: Clase base para flujos de entrada y salida, contiene un objeto streambuf como miembro. istream, ostream Clases derivadas de ios que especializan el comportamiento de flujos de entrada y salida respectivamente. Informática II 2011/2

Librería Input/Output Stream streambuf Clase que permite manipular buffers de flujos. iostream Clase derivada de ambas istream y ostream que provee funciones para escribir en pantalla y métodos de entrada. fstream Clase que provee funcionalidad de entrada y salida sobre archivos. Informática II 2011/2

Librería Iostream Cuando incluimos la librería iostream, se crean e inicializan cuatro objetos estándar. cin manipula la entrada estándar, el teclado. cout manipula la salida estándar, la pantalla. cerr manipula salida sin buffer al dispositivo estándar de error, la pantalla. clog manipula salida con buffer al dispositivo estándar de error. Informática II 2011/2

Objeto cin Istream cin es un objeto y es responsable de las entradas por teclado a su programa , está disponible cuando usted incluye la librería iostream a su programa. cin claramente es un objeto global porque usted nunca lo definió en su propio código. Tiene el operador de extracción >> es sobrecargado, por esta razón puede ser utilizado para numerosos tipos de datos &int, &short, &float, &double, &char, char* etc. int someVariable; cout << “Enter a number: ”; cin >> someVariable; Istream &operator >> (int &) Informática II 2011/2

Objeto cin Istream Su argumento es pasado por referencia, es decir actúa sobre la variable original. cin automáticamente termina el string con un carácter nulo Es posible concatenar (extracción múltiple) pues el operador >> retorna una referencia a un objeto istream int VarOne, varTwo, varThree; cout << “Enter three numbers: ” cin >> VarOne >> varTwo >> varThree; La primera extracción evaluada es ( cin >> VarOne) cuya salida puede ser entrada para la siguiente.(cin >> VarOne)>> varTwo y así sucesivamente. Informática II 2011/2

Objeto cin Istream #include <iostream> using namespace std; int main() { char ch; while ( (ch = cin.get()) != '\0') cout << "ch: " << ch << endl; } cout << "\nDone!\n"; return 0; El objeto cin tiene otras funciones miembro (metodos) además del operador extracción (>>) que son utilizados cuando se requiere un control más preciso en la entrada.   cin.get() sin argumentos: Esta forma retorna el valor del carácter encontrado o EOF (end-of-file) si es alcanzado el final del archivo. No devuelve referencia a objeto istream, de modo que no se puede concatenar.  Informática II 2011/2

Objeto cin Istream cin.get() con referencia a carácter: Cuando una referencia a carácter (variable) se le pasa a cin.get(), esta se llena con el siguiente carácter en el flujo de entrada. Nuevamente es posible concatenar #include <iostream> using namespace std; int main() { char a, b, c; cout << "Enter three letters: "; cin.get(a).get(b).get(c); cout << "a: " << a << "\nb: " << b << "\nc: " << c << endl; return 0; } Informática II 2011/2

Tips uso de Cin Use el operador de extracción (>>) cuando necesite saltar espacios en blanco. Use cin.get() si necesita examinar todos los caracteres incluyendo los espacios en blanco. cin.get() con argumentos de entrada: arreglo de caracteres donde se almacenara los datos de entrada numero de caracteres + 1 ('\0') a alamcenar terminador de entrada, por defecto '\n'. de esta forma se llena el arreglo hasta encontrar un terminador en el flujo o se alcance el máximo especificado, el que ocurra primero.   #include <iostream> using namespace std; int main() { char stringOne[256]; char stringTwo[256]; cout << "Enter string one: "; cin.get(stringOne,256); cout << "stringOne: " << stringOne << endl; cout << "Enter string two: "; cin >> stringTwo; cout << "StringTwo: " << stringTwo << endl; return 0; } Informática II 2011/2

Tips uso de Cin cin.getline(): hace lo mismo que cin.get() Se diferencia en que cin.getline() elimina el terminador de la cadena. #include <iostream> using namespace std; int main() { char stringOne[256]; char stringTwo[256]; char stringThree[256]; cout << "Enter string one: "; cin.getline(stringOne,256); cout << "stringOne: " << stringOne << endl; cout << "Enter string two: "; cin >> stringTwo; cout << "stringTwo: " << stringTwo << endl; cout << "Enter string three: "; cin.getline(stringThree,256); cout << "stringThree: " << stringThree << endl; return 0; } Informática II 2011/2

Tips uso de Cin #include <iostream> using namespace std; int main() { char stringOne[255]; char stringTwo[255]; cout << "Enter string one:"; cin.getline(stringOne,255); cout << "String one" << stringOne << endl; cout << "Enter string two: "; cin.getline(stringTwo,255); cout << "String two: " << stringTwo << endl; cout << "\n\nNow try again...\n"; cout << "Enter string one: "; cout << "String one: " << stringOne<< endl; cin.ignore(255,'\n'); cout << "String Two: " << stringTwo<< endl; return 0; } cin.ignore() se usa para limpiar el flujo de entrada, ignorando el numero de caracteres especificados hasta encontrar el terminador especificado. Informática II 2011/2

Tips uso de Cin cin.peek() : cin.putback(): Permite acceder al buffer permitiendo ver su interior sin necesidad de cargar el carácter en otra variable cin.putback(): Permite acceder al buffer y modificar el carácter de turno. #include <iostream> using namespace std; int main() { char ch; cout << "enter a phrase: "; while ( cin.get(ch) ) if (ch == '!') cin.putback('$'); else cout << ch; while (cin.peek() == '#') cin.ignore(1,'#'); } return 0; Estos dos últimos métodos resultan útiles porque permiten mirar los caracteres y dejarlos en el flujo de entrada. Este tipo de trucos se usan cuando se pasa texto a otro tipo de datos. Por ejemplo, en un compilador. Informática II 2011/2

Objeto cout Ostream Cómo formatear datos Alinear columnas flush(): Escribe todo lo que haya en el buffer en la pantalla. endl llama a flush() automáticamente. Este método es conveniente cuando se debe estar seguro que el buffer esta vacio y sus contenidos son mostrados en pantalla. put(): Imprime un solo carácter en pantalla, también se puede concatenar. cout<<flush; cout.flush(); cout<<endl; Cómo formatear datos Alinear columnas Escribir números en formato decimal y hexadecimal #include <iostream> using namespace std; int main() { cout.put('H').put('e').put('l').put('l').put('o').put('\n'); return 0; } Informática II 2011/2

Objeto cout Ostream #include <string.h> #include <iostream> using namespace std; int main() { char One[] = "One if by land"; int fullLength = strlen(One); int tooShort = fullLength -4; int tooLong = fullLength + 6; cout.write(One,fullLength) << "\n"; cout.write(One,tooShort) << "\n"; cout.write(One,tooLong) << "\n"; return 0; } write(): Imprime un arreglo de caracteres hasta donde se le indique. Es similar al operador inserción (<<). Informática II 2011/2

Objeto cout Ostream width():El espacio por defecto de la salida es apenas suficiente para imprimir el carácter en la salida. width() Genera un espacio en el buffer entre caracteres. Este solo cambia el ancho de la salida próxima y luego inmediatamente vuelve a su valor por defecto. #include <iostream> using namespace std; int main() { cout << "Start >"; cout.width(25); cout << 123 << "< End\n"; cout << 123<< "< Next >"; cout << 456 << "< End\n"; cout.width(10); cout << 123456 << "< End\n"; return 0; } Informática II 2011/2

Objeto cout Ostream fill(): Normalmente cout llena los campos vacios creados por width() con espacios. fill() llena un espacio establecido con un carácter definido. #include <iostream> using namespace std; int main() { cout << "Start >"; cout.width(25); cout << 123 << "< End\n"; cout.fill('*'); return 0; } Informática II 2011/2

Banderas del Iostream int main() { const int number = 185; cout << "The number is " << number << endl; cout << "The number is " << hex << number << endl; cout.setf(ios::showbase); cout << "The number is " ; cout.width(10); cout << hex << number << endl; cout.setf(ios::left); cout.setf(ios::internal); cout << "The number is:" << setw(10)<<hex<<number<<endl; return 0; } Usted puede acceder a dichas banderas con el método o manipulador setf(), y llevando como argumento las siguientes constantes puede dar formato a la salida en pantalla: ios::showpoint ios::showpos ios::dec ios::oct ios::hex ios::left ios::right  ios::internal. El metodo setw() es otro manipulador que permite establecer el ancho entre caracteres impresos. También se puede concatenar con el operador de inserción. Informática II 2011/2

Stream Printf() Para dar formato a la salida en c++, se puede utilizar una combinación de caracteres especiales, manipuladores de salida y banderas. Los flujos proveen una forma uniforme de manejar datos provenientes del teclado o de archivos del disco y destinados a la pantalla o a otros archivos. Provee operadores de insersión (<<) y extracción (>>). Printf() no provee seguridad cuando se trata de tipos de datos, es muy usual que se desee imprimir un carácter y este imprima un numero y viceversa. Además no soporta clases al no estar escrito orientado a objetos. flush—Flushes the output buffer endl—Inserts newline character and flushes the output buffer oct—Sets output base to octal dec—Sets output base to decimal hex—Sets output base to hexadecimal\a—Alarm (ring bell). \n—Newline character \r—Carriage return \t—Tab \\—Backslash \ddd (octal number)—ASCII character \a—Alarm (ring bell). Informática II 2011/2

Contenido Flujos 1 Librería Input/Output Stream 2 Entrada y Salida de archivos 3 4 Argumentos de línea de comandos Informática II 2011/2

Pasos para trabajar con Archivos #include <fstream> #include <iostream> using namespace std; int main() { char fileName[80]; char buffer[255]; // for user input cout << "File name: "; cin >> fileName; ofstream fout(fileName); // open for writing fout << "This line written directly to the file...\n"; cout << "Enter text for the file: "; cin.ignore(1,'\n'); // eat the newline after the file name cin.getline(buffer,255); // get the user's input fout << buffer << "\n"; // and write it to the file fout.close(); // close the file, ready for reopen ifstream fin(fileName); // reopen for reading cout << "Here's the contents of the file:\n"; char ch; while (fin.get(ch)) cout << ch; cout << "\n***End of file contents.***\n"; fin.close(); // always pays to be tidy return 0; } Pasos para trabajar con Archivos Crear un stream de entrada o salida. Escribir o leer según sea el caso. Cerrar stream. Asegura que no se corrompan los datos y que se vacíe el buffer. Informática II 2011/2

Ifstream y Ofstream Cuando se crea un flujo de archivo de salida, el comportamiento predeterminado es: Se crea uno nuevo si no existe Se trunca, borra y sobre-escribe si el archivo ya existe. Este modo se puede modificar Para agregar al archivo original (append) Para no crear un archivo nuevo, en este caso si el archivo no existe la apertura falla. Informática II 2011/2

#include <fstream> #include <iostream> using namespace std; int main() { char fileName[80]; char buffer[255]; cout << "Please re-enter the file name: "; cin >> fileName; ifstream fin(fileName); if (fin) // already exists? { cout << "Current file contents:\n"; char ch; while (fin.get(ch)) cout << ch; cout << "\n***End of file contents.***\n"; } fin.close(); cout << "\nOpening " << fileName << " in append mode...\n"; ofstream fout(fileName,ios::app); if (!fout) cout << "Unable to open " << fileName << " for appending.\n"; return(1); Modificar Ofstream cout << "\nEnter text for the file: "; cin.ignore(1,'\n'); cin.getline(buffer,255); fout << buffer << "\n"; fout.close(); fin.open(fileName); // reassign existing fin object! if (!fin) { cout << "Unable to open " << fileName << " for reading.\n"; return(1); } cout << "\nHere's the contents of the file:\n"; char ch; while (fin.get(ch)) cout << ch; cout << "\n***End of file contents.***\n"; fin.close(); return 0; ios::app Agrega a un archivo existente en lugar de truncarlo. ios::ate Lo ubica al final del archivo pero puede escribir en cualquier parte de él. ios::trun Predeterminada, hace que se trunque el archivo existente. ios::nocreat Evita que se cree un archivo nuevo, si el archivo no existe la apertura falla. ios::noreplac Evita reemplazo, si el archivo ya existe la apertura falla. if(fin) es sinonimo de if (fin.good()) y que if(!fout) es lo mismo que if (fout.fail()) Informática II 2011/2

Tips para el manejo de Archivos 1 Chequee todos los archivos que se abren para verificar que se abrieron exitosamente. 2 Reutilice objetos ifstream y ofstream existentes. 3 Cierre todos los fstream cuando termine de usarlos. Informática II 2011/2

Archivos Binarios y Escritura de Objetos #include <fstream> #include <iostream> using namespace std; class Animal{ public: Animal(int weight, long days):itsWeight(weight),itsNumberDaysAlive(days){} ~Animal(){} int GetWeight()const { return itsWeight; } void SetWeight(int weight) { itsWeight = weight; } long GetDaysAlive()const { return itsNumberDaysAlive; } void SetDaysAlive(long days) { itsNumberDaysAlive = days; } private: int itsWeight; long itsNumberDaysAlive; }; Archivos Binarios y Escritura de Objetos int main(){ char fileName[80]; char buffer[255]; cout << "Please enter the file name: "; cin >> fileName; ofstream fout(fileName,ios::binary); if (!fout) { cout << "Unable to open " << fileName << " for writing.\n"; return(1); } Animal Bear(50,100); fout.write((char*) &Bear,sizeof Bear); fout.close(); ifstream fin(fileName,ios::binary); if (!fin) cout << "Unable to open " << fileName << " for reading.\n"; Animal BearTwo(1,1); cout << "BearTwo weight: " << BearTwo.GetWeight() << endl; cout << "BearTwo days: " << BearTwo.GetDaysAlive() << endl; fin.read((char*) &BearTwo, sizeof BearTwo); fin.close(); return 0; Además de los archivos de texto, en los que cada elemento es un caracter, se pueden escribir archivos binarios. 1 Se abre un archivo como binario ios::binary 2 Se escribe usando la función write() sobre el flujo. 3 write() recibe una referencia al objeto, convertida a char* y el tamaño de la clase en bytes (sizeof ). Informática II 2011/2

Contenido Flujos 1 Librería Input/Output Stream 2 Entrada y Salida de archivos 3 4 Argumentos de línea de comandos Informática II 2011/2

Para recibir argumentos en el programa Principal Los argumentos estan separados por espacios incluyendo el nombre del programa. algunPrograma arg1 arg2 El nombre del programa es el primer argumento. Informática II 2011/2

Para recibir argumentos en el programa Principal #include <iostream> using namespace std; int main(int argc, char *argv[]) { cout << "Received " << argc << " arguments...\n"; for (int i=0; i<argc; i++){ cout << "argument " << i << ": " << argv[i] << endl; } return 0; Para usarlo declare main con argumentos int argc -Contador de argumentos char* argv[] -Vector de argumentos Son equivalentes: char**, char*[], char[][]. argv[0] es el nombre del programa, y  argv[1] es el primer parámetro del programa. Los nombres son convención pero pueden cambiar siempre y cuando se conserven los tipos y el orden. Informática II 2011/2

GRACIAS POR SU ATENCIÓN Informática II 2011/2

Bibliografía Pagina de Referencia lenguaje C++: http://www.cplusplus.com/reference/iostream/ http://newdata.box.sk/bx/c/htm/ch16.htm#Heading49 Sams Teach yourselft C++ in 21 days: http://newdata.box.sk/bx/c/htm/ch20.htm#Heading1 Informática II 2011/2

Gracias ! Informática II 2009/2