Está en la página 1de 11

1.

CULES SON LAS REGLAS QUE DETERMINAN SI UN STREAM ES UN


PROGRAMA O NO?
Streams, entrada y salida de datos

En este captulo abordaremos el tema de la manipulacin de datos a travs de


los dispositivos de entrada y salida estndar por medio de ciertos componentes
lgicos conocidos como: streams. A manera de definicin, un stream es una
especie de canal a travs del cual fluyen los datos. Tcnicamente, un stream es el
enlace lgico utilizado por el programador en C, C++ para leer o escribir datos
desde y hacia los dispositivos estndar conectados a la PC. Normalmente, el
dispositivo estndar para manipular entradas es el teclado y este, en C++, est
asociado al objeto cin; el dispositivo estndar de salida est asociado
(generalmente) con la pantalla o monitor de despliegue de la PC y, el mismo, en
C++ se puede acceder por medio del objeto cout. El dispositivo estndar para
mensajes de error es el cerr, y el mismo est asociado por defecto con la pantalla
o monitor de despliegue. Otro dispositivo estndar es la impresora, pero este
ltimo no es soportado por los objetos de la iostream. Los programadores que
hayan tenido alguna experiencia al programar en C estndar, notarn que los
tres objetos mencionados coinciden con los dispositivos: stdin, stdout y stderr. La
tabla que se muestra en seguida puede servirnos de base.

Tabla I/O : 01, dispositivos estndar de I/O

C estandar C++

stdin cin

stdout cout

stderr cerr

--- clog

La iostream

La iostream es la biblioteca estndar en C++ para poder tener acceso a los


dispositivos estndar de entrada y/o salida. En sus programas, si usted desea
hacer uso de los objetos cin, cout, cerr yclog tendr que incluir ( por medio de la
directiva #include ) el uso de la biblioteca iostream. En la iostream se encuentran
definidas las clases ios ( misma que es la base para las clases que implementen
operaciones de entrada y/o salida de datos ), istream ( para operaciones de
entrada ) y ostream ( para operaciones de salida ). Aparte de las clases
mencionadas, en la iostream se encuentra una lista de variables y constantes (
atributos ) que son accesibles por el usuario a travs del operador de mbito ( :: ).

Streams automticos

Si usted usa la directiva #include <iostream.h> o #include <iostream> en sus


programas, automticamente la iostream pone a su disposicin los
objetos cin, cout, clog y cerr en el mbito estndar (std), de tal manera que usted
puede comenzar a enviar o recibir informacin a travs de los mismos sin siquiera
preocuparse de su creacin. Asi, un sencillo ejemplo del uso de los objetos
mencionados se muestra en seguida.

Operadores de direccionamiento

Los operadores de direccionamiento son los encargados de manipular el flujo de


datos desde o hacia el dispositivo referenciado por un stream especfico. El
operador de direccionamiento para salidas es una pareja de smbolos de "menor
que" <<, y el operador de direccionamiento para entradas es una pareja de
smbolos de "mayor que" >>. Los operadores de direccionamiento se colocan
entre dos operandos, el primero es el Stream y el segundo es una variable o
constante que proporciona o recibe los datos de la operacin. Por ejemplo, en el
siguiente programa y en la instruccin cout << "Entre su nombre: "; la constante
"Entre su nombre: " es la fuente o quien proporciona los datos para el objeto cout.
Mientras que en la instruccin cin >> nombre la variable nombre es el destino o
quien recibe los datos provenientes del objeto cin.

Banderas de I/O

En esta seccin abordaremos de manera ms directa el tema sobre el control de


formato para los stream de C++. Especficamente, veremos las tres diferentes
formas que existen en C++ para manipular las banderas relacionadas a los stream
y que nos permitirn gobernar de una manera ms precisa la forma para
representar datos de salida. En ese sentido, veremos que la primera de las forma
que nos permitir el formateo sera a travs de las
funciones flags(), setf() y unsetf(), la segunda y la tercera forma las encontraremos
en ciertos manipuladores directos definidos en las
bibliotecas<iostream> y <iomanip>.

Manipuladores

Las banderas tambin pueden manipularse directamente usando los siguientes


manipuladores. Seguramente usted ya estar familiarizado con el
manipulador endl, el mismo puede darle una idea de cmo son usados los
manipuladores. Por ejemplo, usted puede establecer la bandera de nmeros
decimales.

Streams para archivos o ficheros

Por definicin, un archivo es una coleccin de datos almacenados en algn


lugar. En C++, el programador puede considerar que un archivo es un stream, de
tal manera que los objetos vistos en la seccin anterior ( cin, cout, cerr y clog ) son
una especie de archivo manipulados por streams. Este punto es de suma
importancia, ya que todo lo que se ha mencionado acerca de los atributos,
banderas y manipuladores; que son miembros de los objetos ( stream ) para
entrada y salida estndar, son aplicables a los streams que usemos para trabajar
con archivos en disco y/o cualquier otro dispositivo de almacenamiento. Hasta
este momento, solamente se ha mencionado que los streams poseen banderas y
que las mismas pueden alterarse a traves de los manipuladores, sin embargo,
hace falta hablar acerca de los mtodos o funciones que son miembros de
dichos streams. As, antes de ver un ejemplo para mostrar el uso de archivos en
disco listaremos una tabla ms, o sea, la de los mtodos aplicables a los streams.

Tabla I/O : 05, mtodos para objetos istream, ostream y fstream

Funcin Descripcin

bad true si ha ocurrido un error

clear limpia las banderas de estado (status flags)

close cierra un stream

eof true si se alcanz el fin de archivo

fail true si ha ocurrido un error

fill establecer manipulador de carcter de relleno

flags accesa o manipula las banderas de formato de un stream

flush vaciar el buffer de un stream

gcount nmero de caracteres leidos durante la ltima operacin de entrada


get lectura de caracteres

getline lectura de una lnea de caracteres

good true si no ha ocurrido un error

ignore leer y descartar caracteres

open abrir un stream de entrada y/o salida

peek verifica la siguiente entrada de carcter

precision manipula la precisin del stream

put escritura de caracteres

putback regresar caracteres al stream

rdstate regresa la bandera de estado de stream

read lee datos de un stream hacia un buffer

seekg realiza acceso aleatorio sobre un stream de entrada

seekp realiza acceso aleatorio sobre un stream de salida

setf cambiar las banderas de formato

tellg lee el puntero del stream de entrada

tellp lee el puntero del stream de salida

unsetf limpiar las banderas de formato

width accesa y manipula la longitud minima del campo

write escritura datos desde un buffer hacia un stream

Abrir y cerrar archivo


A diferencia de los streams para dispositivos estndar, los cuales son creados y
abiertos de manera automtica, para trabajar con archivos en discos se debe
primeramente "abrir el archivo", y luego de haber terminado de leer o escribir
datos en el mismo, se debe "cerrar el archivo". En C++, en orden de trabajar con
archivos en disco, podemos emplear las clases fstream, ifstream, y ofstream. Si
usted desea abrir un archivo especfico en modo de lectura y escritura use un
objeto de la clase fstream, por el contrario, si desea abrir un archivo solo para
lectura o solo para escritura use objetos de la clase ifstream y ofstream,
respectivamente.

2. QU FUNCIN CUMPLEN LAS NOTACIONES DENOMINADAS


EXPRESIONES REGULARES Y GRAMTICAS LIBRES DE CONTEXTO?

I. EXPRESIONES REGULARES

Una expresin regular, a menudo llamada tambin regex, es una secuencia de


caracteres que forma un patrn de bsqueda, principalmente utilizada para la
bsqueda de patrones de cadenas de caracteres u operaciones de sustituciones.
Por ejemplo, el grupo formado por las cadenas Handel, Hndel y Haendel se
describe con el patrn "H(a||ae)ndel". La mayora de las formalizaciones
proporcionan los siguientes constructores: una expresin regular es una forma de
representar a los lenguajes regulares (finitos o infinitos) y se construye
utilizando caracteres del alfabeto sobre el cual se define el lenguaje.

En informtica, las expresiones regulares proveen una manera muy flexible de


buscar o reconocer cadenas de texto.

TIPOS

A) Expresiones Regulares Bsicas


Una expresin regular determina un conjunto de cadenas de caracteres. Un
miembro de este conjunto de cadenas se dice que aparea, equipara o satisface
la expresin regular.
1) Construccin de Expresiones Regulares Bsicas
Una Expresin Regular se contruye con uno o ms operadores que indican, cada
uno, el caracter a buscar. Los operadores ms comunes y aceptados son los
siguientes:
Operador Significado

c un caracter no especial concuerda consigo mismo

\c elimina significado especial de un caracter c; el \ escapa el


significado especial

^ indica ubicado al comienzo de la lnea (cadena nula al principio de


lnea)

$ indica ubicado al final de la lnea (cadena nula al final de lnea)

. (punto) un caracter individual cualquiera

[...] uno cualquiera de los caracteres ...; acepta intervalos del tipo a-z, 0-9,
A-Z (lista)

[^...] un caracter distinto de ... ; acepta intervalos del tipo a-z, 0-9, A-Z

r* 0, 1 o ms ocurrencias de la ER r (repeticin)

r1r2 la ER r1 seguida de la ER r2 (concatenacin)

2) Ejemplos de Expresiones Regulares Bsicas.


Las expresiones regulares se aprenden mejor con los ejemplos y el uso.

Exp.Reg. aparea con

a.b axb aab abb aSb a#b ...

a..b axxb aaab abbb a4$b ...

[abc] a b c (cadenas de un caracter)

[aA] a A (cadenas de un caracter)

[aA][bB] ab Ab aB AB (cadenas de dos caracteres)


[0123456789] 0123456789

[0-9] 0123456789

[A-Za-z] A B C ... Z a b c ... z

[0-9][0-9][0-9] 000 001 .. 009 010 .. 019 100 .. 999

[0-9]* cadena_vaca 0 1 9 00 99 123 456 999 9999 ...

[0-9][0-9]* 0 1 9 00 99 123 456 999 9999 99999 99999999 ...

^.*$ cualquier lnea completa

En el editor vi, las expresiones regulares permiten realizar bsquedas tales como:
/^Desde
busca lneas que empiecen con la cadena Desde
/final$
busca lneas que termine con la cadena final
/\$25
busca lneas que contengan $25; \ escapa el $
B) Expresiones Regulares Extendidas

1) Construccin de Expresiones Regulares Extendidas


Algunos comandos, como egrep o grep -E, aceptan Expresiones Regulares
Extendidas, que comprenden las Expresiones Regulares Bsicas ms algunos
operadores que permiten construcciones ms complejas. Los operadores
incorporados son los siguientes:

Operador Significado

r+ 1 o ms ocurrencias de la ER r

r? 0 o una ocurrencia de la ER r, y no ms
r{n} n ocurrencias de la ER r

r{n,} n o ms ocurrencias de la ER r

r{,m} 0 o a lo sumo m ocurrencias de la ER r

r{n,m} n o ms ocurrencias de la ER r, pero a lo sumo m

r1|r2 la ER r1 o la ER r2 (alternativa)

(r) ER anidada

"r" evita que los caracteres de la ER r sean interpretados por el shell

La repeticin tiene precedencia sobre la concatenacin; la concatenacin tiene


precedencia sobre la alternativa. Una expresin puede encerrarse entre
parntesis para ser evaluada primero.

2) Ejemplos de Expresiones Regulares Extendidas


Exp.Reg.Ext. aparea con

[0-9]+ 0 1 9 00 99 123 456 999 9999 99999 99999999 ..

[0-9]? cadena_vaca 0 1 2 .. 9

^a|b ab

(ab)* cadena_vaca ab abab ababab ...

^[0-9]?b b 0b 1b 2b .. 9b

([0-9]+ab)* cadena_vaca 1234ab 9ab9ab9ab 9876543210ab 99ab99ab ...

I. GRAMTICAS LIBRES DE CONTEXTO


Estas gramticas, conocidas tambin como gramticas de tipo 2 o gramticas
independientes del contexto, son las que generan los lenguajes libres o
independientes del contexto*.
*Lenguaje libre de contexto

Se dice que un lenguaje es libre de contexto (LLC) si y slo si puede ser


reconocido por una gramtica libre de contexto (GLC) G=<N,T,P,S>, donde Nes
el conjunto de los smbolos no terminales o derivables, T es el conjunto de los
smbolos terminales o alfabeto; P, la coleccin de producciones de la

forma , donde A es un no terminal de N y ; S es el smbolo


inicial.

Un lenguaje libre de contexto (LLC) L es aquel cuyas cadenas pueden ser


reconocidas por autmatas de pila.

El trmino libre de contexto se refiere al hecho de que el no terminal V puede


siempre ser sustituido por w sin tener en cuenta el contexto en el que ocurra. Un
lenguaje formal es libre de contexto si hay una gramtica libre de contexto que lo
genera.

Las gramticas libres de contexto permiten describir la mayora de los lenguajes


de programacin, de hecho, la sintaxis de la mayora de lenguajes de
programacin est definida mediante gramticas libres de contexto. Por otro
lado, estas gramticas son suficientemente simples como para permitir el diseo
de eficientes algoritmos de anlisis sintctico que, para una cadena de
caracteres dada determinen cmo puede ser generada desde la gramtica.

A) Definicin formal
Como toda gramtica se definen mediante una cuadrupla G = (N, T, P, S), siendo:

- N es un conjunto finito de smbolos no terminales

- T es un conjunto finito de smbolos terminales N T =

- P es un conjunto finito de producciones

- S es el smbolo distinguido o axioma S (N T)

B) Ejemplos
Ejemplo 1

Una simple gramtica libre de contexto es

S aSb |

donde | es un o lgico y es usado para separar mltiples opciones para el


mismo no terminal, indica una cadena vaca. Esta gramtica genera el
lenguaje no regular .

Ejemplo 2

Aqu hay una gramtica libre de contexto para expresiones enteras


algebraicas sintcticamente correctas sobre las variables x, y y z:

S x | y | z | S + S | S - S | S *S | S/S | (S)

Generara, por ejemplo, la cadena (x + y) *x - z *y / (x + x)

Ejemplo 3:

La siguiente gramtica genera las cadenas del lenguaje L2 = {0i 1i+k 2k 3n+1 / i, k, n
0}

Casos Cadenas de L2
si n, i, k > 0 0i 1i+k 2k 3n+1

si n=0 y i, k > 0 0i 1i+k 2k 3

si i=0 y n, k >0 1k 2k 3n+1

si k=0 y n, i >0 0i 1i 3n+1

si n, i=0 y k >0 1k 2k 3

si n, k=0 y i >0 0i 1i 3

si i, k =0 y n >0 3n+1
si n,i,k=0 3

G2 = ({A, B, C}, {0, 1, 2, 3}, P2, S2), y P2 contiene las producciones:

S2 ABC B 1B2

S2 AC B 12

S2 BC C 3C

S2 C C 3

A 0A1

A 01

También podría gustarte