Está en la página 1de 19

1

INSTITUTO TECNOLÓGICO SUPERIOR DE


POZA RICA.

FECHA: 07 DE ENERO DEL 2021

TAREA: ACT. 3 “FUNCIONES ENTRADA Y SALIDA”.

UNIDAD: 3.

MATERIA: INTRODUCCIÓN A LA PROGRAMACIÓN.

NOMBRE DEL DOCENTE: ING. RICARDO ANDRÉS PÉREZ.

NOMBRE DEL ALUMNO(A): OROZCO PORTILLA LEZLY


MONSERRATH.

NUMERO DE CONTROL: 186P0389.

CARRERA: ING. ELECTROMECÁNICA.

GRADO: 1º.

GRUPO: “C”.
2

OBJETIVOS.

Objetivo general:

• Definir e implementar conceptos que ayuden al entendimiento del uso de

funciones de entrada y salida.

Objetivos específicos:

• Definir que es un streams.

• Clasificar las clases de flujo E/S

• Mostrar las funciones de entrada y salida de C++.


3

INTRODUCCIÓN.

Todos los programadores que llegan al C++ desde C están acostumbrados a utilizar las

instrucciones de entrada/salida definidas en el archivo cabecera stdio.h (printf, fprintf, fputs,

puts, fwrite...). Esta biblioteca también está presente en C++, pero no parece ser la adecuada

en un lenguaje como C++ en el que los nuevos tipos tienen un comportamiento

completamente equivalente al de los tipos de datos estándar.

El mecanismo de clases de C++ permite crear un sistema consistente y ampliable para los

mecanismos de entrada/salida. Este sistema se conoce como biblioteca de flujos . Estas clases

sirven como mecanismo para manejar los tipos básicos, pero, además, se puede modificar

ampliándolas para incorporar los tipos de datos definidos por el usuario.

Las funciones de entrada/salida no están definidas en el propio lenguaje C++, sino que están

incorporadas en cada compilador de C++ bajo la forma de biblioteca de ejecución. En C

existe la biblioteca stdio.h estandarizada por ANSI; en C++ su biblioteca correspondiente es

iostream. La gran ventaja de la biblioteca iostream es que se pueden manipular las

operaciones E/S sin necesidad de conocer los conceptos típicos de orientación a objetos, tales

como clases, herencia, funciones virtuales, etc.

En la presente investigación se darán a conocer todos los conceptos básicos sobre las

funciones de entrada y salida, teniendo como principal objetivo el entendimiento y

comprensión del tema a tratar.


4

FUNCIONES ENTRADA Y SALIDA

Un flujo (stream) es una abstracción que se refiere a un flujo o corriente de datos que fluyen

entre un origen o fuente (productor) y un destino o sumidero (consumidor). Entre el origen y

el destino debe existir una conexión o tubería («pipe») por la que circulen los datos. Estas

conexiones se realizan mediante operadores (<< y >>) sobrecargados y funciones de E/S.

El concepto de stream o flujo no es nuevo en C++. ANSI C utiliza este concepto para indicar

un tipo de puerto abstracto a través del cual datos no estructurados pueden caminar de forma

unidireccional o bidireccional . Los flujos en ANSI C se consideran una construcción de

entrada/salida de bajo nivel.

Por su parte C++ fue diseñado para el manejo de clases, así los flujos de C++ se encuentran

definidos mediante una jerarquía de clases completa que se distribuye con el compilador. Las

versiones antiguas3 de C++ se distribuían con una jerarquía de clases de streams que

actualmente es obsoleta. Las versiones C++ de AT&T desde la versión 2.0 utilizan la nueva

biblioteca iostream.

C++ da a los streams un significado más abstracto. Un programa C++ visualiza entrada o

salida como un flujo de datos. En la entrada un programa extrae bytes de un flujo de entrada,

y en la salida un programa inserta bytes en un flujo de salida. Así, un flujo se puede considerar

como una secuencia lineal de bytes con un significado. Los bytes pueden formar una

representación binaria de datos carácter o numéricos.

Los bytes de entrada pueden venir del teclado, pero también pueden proceder de otro

dispositivo de almacenamiento como un disco duro u otro programa. Y de forma análoga los
5

bytes del flujo de salida pueden ir destinados a la pantalla, a una impresora, a un fichero, o a

otro programa.

Este enfoque permite que un programa C++ trate la entrada de un teclado de igual forma que

se trata la entrada desde un fichero. El programa C++ examina simplemente el flujo de bytes,

sin necesidad de conocer cuál es la procedencia de los mismos. Esto mismo ocurre en la

salida, y ésta se podrá procesar de forma independiente del lugar a donde vayan destinados

los datos.

La gestión de entrada implica dos etapas:

• Asociación de un flujo con una entrada a un programa.

• Conexión del flujo a un archivo.

Esto quiere decir que los flujos necesitan para funcionar dos conexiones, una en cada

extremo.

De modo similar la gestión de la salida implica:

• La conexión de un flujo de salida al programa.

• Asociar algún destino de salida con el flujo.

En esencia, un flujo es una abstracción que se refiere a una interfaz común a diferentes

dispositivos de entrada y salida de una computadora. Existen dos formas de flujo: texto y

binario. Flujos de texto se utilizan con caracteres ASCII, mientras que los flujos binarios se

pueden utilizar con cualquier tipo de dato. Los sinónimos extraer u obtener se utilizan

generalmente para referirse a la entrada de datos de un dispositivo e inserción o colocación

(poner) cuando se refieren a la salida de datos a un dispositivo.


6

FIGURA 1. Simulación de un flujo.

Flujos de texto

Un flujo de texto es una secuencia de caracteres. En un flujo de texto, pueden ocurrir ciertas

conversiones de caracteres si son requeridas por el entorno del sistema. Por ejemplo, un

carácter de nueva línea puede convertirse en un par de caracteres «retorno de carro/salto de

línea». Por esta razón, puede suceder que no se establezca una relación de uno a uno entre

los caracteres que se escriben o se leen y los que aparecen en el dispositivo externo. De igual

forma, como consecuencia de las posibles conversiones puede suceder que el número de

caracteres escritos o leídos no coincida con el del dispositivo externo.

Flujos binarios

Un flujo binario es una secuencia de bytes que tiene una correspondencia uno a uno con los

del dispositivo externo. Es decir, no se producen conversiones de caracteres. En este caso, la

cantidad de bytes escritos o leídos coincide con la del dispositivo externo. Sin embargo, se

puede añadir un número de bytes nulos definidos en la implementación, a un flujo binario.

Estos bytes nulos, se suelen utilizar, por ejemplo, para ajustar la información de tal forma

que se complete un sector de un disco.


7

LAS CLASES DE FLUJO DE E/S

El archivo de cabecera declara tres clases para los flujos de entradas y salida estándar. La

clase istream es para entrada de datos desde un flujo de entrada, la clase ostream es para

salida de datos a un flujo de salida, y la clase iostream es para entrada de datos dentro de un

flujo. Por otra parte estas clases declaran también los cuatro objetos ya conocidos:

FIGURA 2. Objetos de <iostream.h>.

FIGURA 3. Biblioteca de clases de E/S.

Las clases que se derivan de la clase base ios se utilizan para procesamiento de flujos de alto

nivel, mientras que las clases que se derivan de la clase base streambuf se utilizan para

procesamiento de bajo nivel.

La clase iostream es la que se utiliza normalmente en operaciones ordinarias de E/S. Esta

clase es una subclase de las clases istream y ostream, que a su vez son clases derivadas
8

(subclases) de la clase base ios. Las tres clases que incluyen la palabra «fstream» en su

nombre se utilizan para tratamiento de archivos y las cuatro clases con la palabra «strstr» en

su nombre se utilizan para proceso de flujos de cadena en memoria. Por último, la clase

stdiobuf se utiliza para combinar E/S de flujos C++ con las funciones antiguas de E/S estilo

C.

LA BIBLIOTECA IOSTREAM.

La biblioteca iostream es la biblioteca de entrada/salida estándar en C++. El acceso a esta

biblioteca se realiza mediante el archivo cabecera iostream.h4 , que se ha venido utilizando

de forma reiterada en todos los ejemplos que se han visto hasta el momento. El sistema de

entrada/salida en C++, está definido para trabajar con diferentes dispositivos (al igual que

ocurre en ANSI C). Cada dispositivo se convierte en un dispositivo lógico y se denomina

flujo o stream. Los flujos forman el interfaz común entre el programa, el dispositivo y el

usuario. A este sistema de entrada/salida se le conoce como sistema de archivos a través de

buffers. La estructura de los archivos puede variar con los distintos dispositivos, pero los

flujos se comportan siempre de la misma forma

ESTRUCTURA DE LA BIBLIOTECA IOSTREAM

La biblioteca iostream es francamente potente, está formada por unas 250 funciones y por

aproximadamente 20 clases. Esta biblioteca está compuesta por varios archivos cabecera

debido a su gran tamaño. Los archivos cabecera de iostream son:


9

FIGURA 4. Archivos de cabecera iostream.

LA BIBLIOTECA DE CLASES IOSTREAM.

La biblioteca iostream se basa en el concepto de flujos; incorpora la ventaja de las potentes

características orientadas a objetos de C++. La biblioteca de E/S de flujos se construye a base

de una jerarquía de clases que se declaran en diversos archivos de cabecera. La biblioteca de

clases tiene dos familias paralelas de clases: las derivadas de streambuf y las derivadas de

ios.

La clase streambuf

La clase streambuf proporciona un interfaz a dispositivos físicos; proporciona métodos

fundamentales para realizar operaciones con buffer y manejo de flujos cuando las

condiciones de formateado no son muy exigentes.

Jerarquía de clases ios

La jerarquía de clases ios gestiona todas las operaciones de E/S y proporciona el interfaz de

bajo nivel al programador. La clase ios contiene un puntero a streambuf. Para acceder a la

biblioteca iostream se deben incluir archivos de cabecera específicos; uno de ellos ya ha sido

utilizado por el lector, iostream, pero existen otros archivos de cabecera.


10

La clase istream (input stream) proporciona las operaciones de lectura de datos, mientras que

la clase ostream (output stream) implementa las operaciones de escritura de datos. La clase

iostream (input-output stream) se deriva simultáneamente de istream y ostream, y

proporciona operaciones bidireccionales de entrada/salida (es un ejemplo de herencia

múltiple).

Las clases istrstream y ostrstream se utilizan cuando se desea manejar arrays de caracteres y

flujos, mientras que el otro conjunto de clases istringstream y ostringstream, se utilizan

cuando se conectan flujos con objetos de la clase estándar string.

FIGURA 5. Clases derivadas de ios.

Las clases ios, istream, ostream y los objetos de flujos predeclarados (cin, cout, cerr y clog)

se definen en el archivo iostream, el cual debe, por consiguiente, ser incluido en el pro grama.

Las clases ifstream y ofstream se definen en el archivo de cabecera fstream. El archivo de

cabecera strstream contiene las definiciones de las clases istrstream y ostrstream y por último

las clases istringstream y ostringstream están declaradas en el archivo de cabecera sstream.

Entradas/salidas en archivos

Las tres clases siguientes permiten efectuar entradas/salidas en archivos:

• ifstream, clase derivada de istream; se utiliza para gestionar la lectura de un archivo.

Cuando se crea un objeto ifstream y se especifican parámetros, se abre un archivo.


11

• ofstream, clase derivada de ostream; gestiona la escritura en un archivo. Los objetos

ofstream se utilizan para hacer operaciones de salida de archivos. Se declara un objeto

ofstream si piensa escribir un archivo de disco. Si se proporciona un nombre de

archivo cuando se declara un objeto ofstream, se abre el archivo. Se puede especificar

que el archivo se cree en modo binario o en modo texto. Si un objeto de ofstream está

ya declarado, se puede utilizar la función miembro open() para abrir el archivo. Por

otra parte, se dispone de la función miembro close(), que sirve para cerrar el archivo.

• fstream, clase derivada de iostream; permite leer y escribir en un archivo. Los objetos

fstream se utilizan cuando se desea simultanear operaciones de lectura y escritura en

el mismo archivo.

Las definiciones de estas clases se encuentran en el archivo de cabecera fstream.

Clase istream

La clase istream permite definir un flujo de entrada y soporta métodos para entrada

formateada y no formateada. El operador de extracción >> está sobrecargado para todos los

tipos de datos integrales de C++, haciendo posible operaciones de entrada de alto nivel.

La función clear()

El uso de Control-D (o Control-Z) para terminar la entrada es sencillo y adecuado. Pulsando

esta secuencia de teclas, se fija el valor de eofbit en el flujo de entrada. Pero a continuación,

si se desea utilizarlo de nuevo en el mismo programa, se ha de borrar (limpiar) primero. Esta

acción se realiza con la función clear().


12

La clase ostream

La clase ostream permite a un usuario definir un flujo de salida y soporta métodos para salidas

formateadas y no formateadas. El operador de inserción se sobrecarga para todos los tipos de

datos integrales. Las clases ofstream, ostrstream, constream, iostream y ostream_withassign

se derivan todas de ostream. Al igual que istream, la clase ostream se deriva virtualmente de

la clase ios para evitar declaraciones múltiples cuando se declara iostream.

OPERADORES DE INSERCIÓN Y DE EXTRACCIÓN

La entrada y salida en C++ se realiza mediante los operadores de inserción << y de extracción

>>. Una característica muy importante del sistema de entrada/salida de C++ es que estos

operadores se pueden sobrecargar de forma que se puedan insertar y extraer cualquier tipo

de objetos en el flujo.

El operador <<

El operador << se denomina operador inserción en lugar de operador de desplazamiento a

izquierda.

Cuando el operador << se aplica a un objeto ostream y una expresión objeto_ostream <<

expresión se evaluará la expresión y se inserta la secuencia de caracteres correspondientes a

ese valor en el objeto ostream. Por consiguiente, en el caso de: const double PI = 3.1416;

cout << PI; la función << convierte el valor double, 3.1416, en los caracteres

correspondientes 3, ., 1, 4, 1 y 6 y los inserta uno a uno en cout.

El operador de inserción está sobrecargado para reconocer todos los tipos básicos de C++:
13

La lista no incluye al tipo char, ya que este tipo es sinónimo de unsigned char o de signed

char, dependiendo del compilador.

LAS FUNCIONES MIEMBRO PUT() Y WRITE()

Las clases definen datos y funciones miembro. Una función de una clase se llama un método

o función miembro. La clase ostream proporciona la función put() para insertar un único

carácter en el flujo de salida y la función write(), para insertar una cadena en el flujo de salida.

Ambas funciones devuelven un objeto cout.

Se puede escribir en un flujo de salida llamando a las funciones miembro put() o write().

Los formatos de estas funciones son:

dispositivo.put(valor_caracter);

dispositivo.write(valor_cadena, num);

El punto que separa dispositivo de la función put()es el operador de miembro (.).

valor_caracter puede ser una constante, expresión o variable carácter (char) y valor_cadena

una cadena; num es un valor int utilizado para especificar el número de caracteres de la

cadena a visualizar. El dispositivo puede ser cualquier dispositivo de salida estándar.

El operador de extracción >>

El operador >> es denominado operador de extracción, y es el opuesto del operador de

inserción <<. Su misión es leer datos de un flujo de entrada, generalmente cin. Un sencillo

ejemplo es el siguiente fragmento de código que sirve para leer un carácter.

char t;

cin >> t;
14

El símbolo >> señala la dirección del flujo, y lee los caracteres hasta que encuentra uno que

no es parte del tipo requerido (habitualmente espacios, tabuladores o retorno de carro). Este

operador se puede utilizar en cascada.

int a, b, c, d, e;

float n;

cin >> a >> b >> c >> d >> e >> n;

Los resultados de pasar tipos incorrectos en la entrada de datos son imprevisibles. A

diferencia de scanf al operador de extracción no se le debe especificar la dirección de la

variable, así la siguiente sentencia será un error.

cin >> &j;

Algunas de las reglas del operador >> son:

• La función operator >> devuelve una referencia a un objeto istream, así que el

operador se puede encadenar.

• El operador >> está sobrecargado con lo cual se puede utilizar con todos los tipos

básicos.

• Se debe sobrecargar el operador >> para que pueda actuar sobre los tipos definidos

por el usuario.

Función get

La función miembro get() lee un único carácter o una línea de datos del teclado (cadenas).

La función miembro get() tiene varios formatos y está definida en la clase istream. Desde un

punto de vista práctico, get()se puede utilizar de dos modos: get(), se utiliza sin parámetros

en cuyo caso el valor devuelto se puede utilizar con una referencia a un carácter; otro formato

es get con parámetros (una referencia a un carácter).


15

La clase istream contiene la función miembro get para la introducción de cadenas completas

de caracteres, incluyendo espacios en blanco. Esta función no realiza conversiones,

simplemente acepta una cadena de caracteres, y los sitúa en la variable adecuada. Realmente

get es una familia de funciones sobrecargadas, alguno de los prototipos son:

• istream & get (char *cad, int longitud, char fin='\n');

• istream & get (unsigned char &);

• istream & get (signed char &);

Función getline

La función getline() permite a cin leer cadenas completas, incluyendo espacios en blanco; es

muy similar a la función miembro get() de dos o tres argumentos, excepto que el carácter de

terminación en getline() se extrae del flujo de entrada y se considera.

Esta función miembro de istream opera de forma análoga a la función get, siendo su

prototipo:

istream & getline (char *, int, char ='\n');

Su diferencia con la función miembro get es que el carácter de terminación se lee antes de

que se añada el carácter '\0'. En consecuencia esta función elimina el carácter de terminación

del buffer de entrada.

Función ignore

Esta es otra de las funciones miembro de la clase iostream. Su prototipo es:

istream & ignore (int n=1, int delim=EOF);

Su cometido es saltarse n caracteres del stream de entrada, o hasta que encuentre el carácter

delim. Así la sentencia.


16

cin.ignore (25, '\n');

Lee e ignora los siguientes 25 caracteres o hasta que se produzca el primer salto de línea.

Función read

Esta función lee un número dado de bytes, almacenándolos en la posición especificada. Sus

prototipos son:

istream & read (char *, int);

istream & read (signed char *, int);

istream & read (unsigned char *, int);

Al contrario que get y getline, read no añade ningún carácter a la entrada, por lo que no

convierte la entrada a formato cadena. El uso más típico de esta función es con archivos

binarios.

Función putback

Esta función inserta un carácter de nuevo en la cadena de entrada. Dicho carácter se convierte

en el primer carácter leído por la siguiente sentencia de entrada. Su prototipo es:

istream & putback (char);

Función peek

Esta función devuelve el siguiente carácter de la entrada sin ser extraído de la cadena de

entrada. Devuelve EOF si no hay más caracteres en el flujo. Su prototipo es:

int peek();
17

Las funciones miembro setf() y unsetf()

Existe un segundo método para establecer los indicadores de flujo: llamar a las funciones

miembro setf() y unsetf(). Estas funciones son similares a los manipuladores setiosflags() y

resetiosflags(). La diferencia reside en que setf() y unsetf() son verdaderas funciones

miembro. Se accede a las funciones miembro directamente:

cout.setf(ios::scientific);

cout.unsetf(ios::scientific);

MANIPULADORES

Hasta ahora se han visto varias formas de manejo del formato, bastante potentes, pero un

poco engorrosas de emplear. C++ ofrece un enfoque más amigable con lo que se denominan

manipuladores. Los manipuladores son funciones especiales que se pueden emplear con los

operadores de inserción y extracción para formatear la entrada y la salida. Los manipuladores

que existen se encuentran recogidos en la siguiente tabla:


18

CONCLUSIÓN.

Se cumplió con los objetivos propuestos, se tiene un mayor entendimiento y comprensión del

tema; se conocen las principales funciones que tiene C++.

Un flujo (stream) es una abstracción que se refiere a un flujo o corriente de datos que fluyen

entre un origen o fuente (productor) y un destino o sumidero (consumidor). En esencia, un

flujo es una abstracción que se refiere a una interfaz común a diferentes dispositivos de

entrada y salida de una computadora. Existen dos formas de flujo: texto y binario.

Las operaciones de entrada y salida no forman parte del conjunto de sentencias de C++, sino

que pertenecen al conjunto de funciones y clases de la biblioteca estándar de C++. Ellas se

incluyen en los archivos de cabecera iostream.h por lo que siempre que queramos utilizarlas

deberemos introducir la línea de código #include <iostream.h>.

Las características típicas de E/S son: Cuatro objetos de flujos se crean en cada programa:

cout, cin, cerr y clog. La salida a pantalla utiliza el identificador de flujo cout y el operador

de inserción, cout << valor;. La entrada del teclado se realiza mediante el identificador de

flujo cin y el operador de inserción >>. cin >> variable;. La función miembro get() se utiliza

para leer caracteres individuales desde el teclado y se puede utilizar put() para sacar

caracteres. Cuando se necesita leer una línea completa de entrada, se debe utilizar la función

miembro getline(). Los manipuladores proporcionan un medio para modificar el flujo de

entrada o salida.
19

REFERENCIAS.

Joyanes, A. L. (2006). Programación en C++ Algoritmos, estructuras de

datos y objetos. México, Editorial: Mc Graw Hill.

López, T. B. (2016). Entradas y salidas. En: Manejo de archivos en lenguaje

C++. México, Editorial: Mc Graw Hill.

García, P. F. (2005). Entradas/salidas en C++. En: Programación orientada a

objetos. Ed: Universidad de Salamanca

Martínez L. J. (2010). Funciones streams. En: Fundamentos de

programación. Madrid: Ed. EME.

Rodríguez, A. M. (2012). Funciones de entradas y salidas. En: Metodología

de la programación a través de pseudocódigo. México, Editorial: McGraw Hill.

Brian W. Kernighan, Dennis M. Ritchie, (1991). Biblioteca estándar entradas

y salidas. En: El lenguaje de programación C. segunda edición, USA, Pearson

Educación.

También podría gustarte