3 tipos de datos cont

36
SSD5 SSD5 Mtl Lourdes Cahuich Mtl Lourdes Cahuich 1 1 Tipos de datos ( Tipos de datos ( cont. cont. ) ) Repaso lecturas SSD5 Repaso lecturas SSD5

Upload: uvm

Post on 13-Apr-2017

1.433 views

Category:

Technology


0 download

TRANSCRIPT

SSD5SSD5 Mtl Lourdes CahuichMtl Lourdes Cahuich 11

Tipos de datos (Tipos de datos (cont.cont.))

Repaso lecturas SSD5Repaso lecturas SSD5

SSD5SSD5 Mtl Lourdes CahuichMtl Lourdes Cahuich 22

Entrada y salidaEntrada y salida

•• Flujos (Flujos (StreamStream))

–– La entrada y salida de información se basa en La entrada y salida de información se basa en

flujos; un flujo es una secuencia de bytes que flujos; un flujo es una secuencia de bytes que

se mueven de un lugar a otrose mueven de un lugar a otro

–– El proceso de salida implica el movimiento de El proceso de salida implica el movimiento de

bytes (uno a la vez) de un programa hacia un bytes (uno a la vez) de un programa hacia un

dispositivo (monitor, impresora, archivo, etc.)dispositivo (monitor, impresora, archivo, etc.)

SSD5SSD5 Mtl Lourdes CahuichMtl Lourdes Cahuich 33

Entrada y salidaEntrada y salida

•• La entrada implica el flujo de bytes desde La entrada implica el flujo de bytes desde

un dispositivo (teclado, archivo, red) hacia un dispositivo (teclado, archivo, red) hacia

el programael programa

entrada: entrada: cincin >> >> namename;;

salida: salida: coutcout << “<< “ enterenter youryour namename”;”;

SSD5SSD5 Mtl Lourdes CahuichMtl Lourdes Cahuich 44

Uso de los flujos estándarUso de los flujos estándar

•• Tres flujos específicos están siempre Tres flujos específicos están siempre disponibles para cada programa: disponibles para cada programa: entrada entrada estándar, salida estándar y error estándarestándar, salida estándar y error estándar; cada ; cada uno tiene un uso específicouno tiene un uso específico

–– entrada estándar: lee los datos de consolaentrada estándar: lee los datos de consola

–– salida estándar: escribe datos a la consolasalida estándar: escribe datos a la consola

–– error estándar: muestra mensajes de error en error estándar: muestra mensajes de error en la consolala consola

SSD5SSD5 Mtl Lourdes CahuichMtl Lourdes Cahuich 55

Uso de los flujos estándarUso de los flujos estándar

•• Los objetos Los objetos cincin y y coutcout dan acceso respectivo dan acceso respectivo

al flujo estándar de entrada y salida. El al flujo estándar de entrada y salida. El

objeto objeto cerrcerr da acceso al flujo de error da acceso al flujo de error

estándarestándar

cincin >> >> namename >> >> ageage

cerrcerr << “<< “\\nInvalidnInvalid ageage enteredentered”;”;

coutcout << “<< “\\nn” << ” << namename << “<< “isis” << ” << ageage;;

SSD5SSD5 Mtl Lourdes CahuichMtl Lourdes Cahuich 66

Uso de los flujos estándarUso de los flujos estándar

•• Los programadores pueden definir cómo Los programadores pueden definir cómo

las clases que crean interactúan con los las clases que crean interactúan con los

flujos usando los operadores << y >> flujos usando los operadores << y >>

•• Esto es conocido como Esto es conocido como sobrecarga del sobrecarga del

operadoroperador Inserción (<<) y Extracción (>>)Inserción (<<) y Extracción (>>)

SSD5SSD5 Mtl Lourdes CahuichMtl Lourdes Cahuich 77

Uso de los flujos estándarUso de los flujos estándar

•• Se puede definir el comportamiento de Se puede definir el comportamiento de

estos operadores para las clases que estos operadores para las clases que

creamoscreamos

SSD5SSD5 Mtl Lourdes CahuichMtl Lourdes Cahuich 88

El archivo de entrada y salidaEl archivo de entrada y salida

•• La entrada y salida en archivos es similar al La entrada y salida en archivos es similar al

de teclado y pantallade teclado y pantalla

•• La diferencia esta en que hay que abrir y La diferencia esta en que hay que abrir y

cerrar archivos explícitamentecerrar archivos explícitamente

•• El objeto requerido es El objeto requerido es ifstreamifstream

•• Esta clase no es parte del lenguaje C++ y Esta clase no es parte del lenguaje C++ y

se debe incluir su bibliotecase debe incluir su biblioteca

SSD5SSD5 Mtl Lourdes CahuichMtl Lourdes Cahuich 99

El archivo de entrada y salidaEl archivo de entrada y salida

•• Es buena práctica revisar si al intentar abrir Es buena práctica revisar si al intentar abrir

un archivo realmente se tiene éxitoun archivo realmente se tiene éxito

SSD5 Mtl Lourdes Cahuich 10

#include <fstream>

ifstream inf;

inf.open(“arch.txt”);

if(!inf){

cerr << “no se puede abrir archivo” << endl;

return EXIT_FAILURE

}

int x;

while(inf>>x){

cout << x << endl>

}

inf.close();

}

SSD5SSD5 Mtl Lourdes CahuichMtl Lourdes Cahuich 1111

El archivo de entrada y salidaEl archivo de entrada y salida

•• La salida del archivo se semeja a su entrada La salida del archivo se semeja a su entrada

y se necesita incluir la referencia a la y se necesita incluir la referencia a la

biblioteca biblioteca fstreamfstream; pero utilizando un objeto ; pero utilizando un objeto

ofstreamofstream en lugar de un en lugar de un ifstreamifstream

SSD5 Mtl Lourdes Cahuich 12

ofstream onf;

onf.open(“nomarch.txt”);

if(!onf){

cerr << “no se pudo abrir archivo” << endl;

return EXIT_FAILURE;

}

for (int i = 1 ; i <= 10 ; i++){

onf << “esta es la linea” << i << endl;

}

onf.close();

SSD5SSD5 Mtl Lourdes CahuichMtl Lourdes Cahuich 1313

El archivo de entrada y salidaEl archivo de entrada y salida

•• Hay que tener presente que el archivo de Hay que tener presente que el archivo de

Entrada/Salida está basado en un flujo que Entrada/Salida está basado en un flujo que

es secuencial por naturaleza por lo que es es secuencial por naturaleza por lo que es

difícil y muy costoso moverse hacia delante difícil y muy costoso moverse hacia delante

y hacia atrás, y el único método de acceso y hacia atrás, y el único método de acceso

es recorrer el archivo de inicio a fines recorrer el archivo de inicio a fin

SSD5SSD5 Mtl Lourdes CahuichMtl Lourdes Cahuich 1414

Fallas comunesFallas comunes

•• El flujo espera espacios en blanco para El flujo espera espacios en blanco para separar los valores que lee (pueden ser separar los valores que lee (pueden ser espacios en blanco, tabuladores, caracteres espacios en blanco, tabuladores, caracteres de nueva línea o retorno)de nueva línea o retorno)

•• La entrada del flujo ignora por La entrada del flujo ignora por defaultdefaultespacios blancos adicionales; la operación espacios blancos adicionales; la operación de entrada no hace caso de este espacio en de entrada no hace caso de este espacio en blanco adicionalblanco adicional

SSD5SSD5 Mtl Lourdes CahuichMtl Lourdes Cahuich 1515

Fallas comunesFallas comunes

•• Otra falla común es cuando se intenta leer Otra falla común es cuando se intenta leer una línea de texto en variable una línea de texto en variable stringstring; la ; la forma apropiada de introducir una línea forma apropiada de introducir una línea entera de texto es usando la función entera de texto es usando la función getlinegetline que se encuentra en la biblioteca que se encuentra en la biblioteca stringstring: esta función tiene su propia falla, ya : esta función tiene su propia falla, ya que la implantación de Microsoft tiene un que la implantación de Microsoft tiene un error en que se requiere un doble error en que se requiere un doble enterenter al al final de cada líneafinal de cada línea

SSD5SSD5 Mtl Lourdes CahuichMtl Lourdes Cahuich 1616

El El preprocesadorpreprocesador

•• Sustitución de textoSustitución de texto

–– El El preprocesadorpreprocesador es una herramienta para es una herramienta para manipular el contenido de los archivos fuente manipular el contenido de los archivos fuente antes de compilar; el antes de compilar; el preprocesadorpreprocesador realiza la realiza la sustitución y modificadores de textosustitución y modificadores de texto

–– La inclusión de archivos, sustitución macro y La inclusión de archivos, sustitución macro y compilación condicional son tres compilación condicional son tres características de alto nivel que el características de alto nivel que el preprocesadorpreprocesador brinda al programadorbrinda al programador

SSD5SSD5 Mtl Lourdes CahuichMtl Lourdes Cahuich 1717

El El preprocesadorpreprocesador

–– Los archivos de código fuente por lo general Los archivos de código fuente por lo general necesitan ser modificados antes de la necesitan ser modificados antes de la compilación y para esto es necesario conocer compilación y para esto es necesario conocer el uso básico del procesador. el uso básico del procesador.

–– Los programas de C++ se componen Los programas de C++ se componen enteramente de texto por lo que se debe usar enteramente de texto por lo que se debe usar el el preprocesadorpreprocesador para incluir la declaración de para incluir la declaración de clases o funciones externas, conocido como clases o funciones externas, conocido como “inclusión de archivo”“inclusión de archivo”

SSD5SSD5 Mtl Lourdes CahuichMtl Lourdes Cahuich 1818

El El preprocesadorpreprocesador

–– Un programador interactúa con el Un programador interactúa con el

preprocesadorpreprocesador mediante comandos llamados mediante comandos llamados

“directivas del procesador” que comienzan “directivas del procesador” que comienzan

con el signo de número (#); las directivas son con el signo de número (#); las directivas son

comandos de una sola línea que se colocan en comandos de una sola línea que se colocan en

un archivo de código fuenteun archivo de código fuente

SSD5SSD5 Mtl Lourdes CahuichMtl Lourdes Cahuich 1919

El El preprocesadorpreprocesador

–– La inclusión de una directiva indica al La inclusión de una directiva indica al

preprocesadorpreprocesador la realización de cierta acción; la realización de cierta acción;

ésta acción depende de la directiva en algunos ésta acción depende de la directiva en algunos

casos el casos el preprocesadorpreprocesador hace una modificación hace una modificación

en el archivo de código fuente; por ejemplo, la en el archivo de código fuente; por ejemplo, la

inclusión del contenido de otro archivoinclusión del contenido de otro archivo

SSD5SSD5 Mtl Lourdes CahuichMtl Lourdes Cahuich 2020

Inclusión de archivosInclusión de archivos

•• La inclusión de archivos es una La inclusión de archivos es una

característica del característica del preprocesadorpreprocesador de C++ de C++

que permite que un archivo fuente utilice que permite que un archivo fuente utilice

código compartido; con la línea #código compartido; con la línea #includeinclude

se incluye un archivo; el se incluye un archivo; el preprocesadorpreprocesador

sustituye la línea que contiene la directiva sustituye la línea que contiene la directiva

con el contenido del archivo con el contenido del archivo específicadoespecíficado

SSD5SSD5 Mtl Lourdes CahuichMtl Lourdes Cahuich 2121

Inclusión de archivosInclusión de archivos

•• ##includeinclude acepta dos diferentes formas de acepta dos diferentes formas de

su parámetro <nombre> busca un archivo su parámetro <nombre> busca un archivo

especificado en un conjunto de lugares especificado en un conjunto de lugares

independientes de la implantación independientes de la implantación

(directorios del sistema y bibliotecas) (directorios del sistema y bibliotecas)

“nombre” manda a buscar el archivo en el “nombre” manda a buscar el archivo en el

mismo directorio de la aplicación (archivos mismo directorio de la aplicación (archivos

creados por el usuario)creados por el usuario)

SSD5SSD5 Mtl Lourdes CahuichMtl Lourdes Cahuich 2222

Sustitución macroSustitución macro

•• Se puede realizar una sustitución del texto Se puede realizar una sustitución del texto

definido por el programador o a través de definido por el programador o a través de

un archivo completo del código fuente; un archivo completo del código fuente;

esto se conoce como esto se conoce como sustitución macrosustitución macro

#define#define identifica el texto de reemplazoidentifica el texto de reemplazo

SSD5SSD5 Mtl Lourdes CahuichMtl Lourdes Cahuich 2323

Sustitución macroSustitución macro

•• Al usar esta directiva un programador Al usar esta directiva un programador

declara un identificador y especifica su declara un identificador y especifica su

texto de reemplazotexto de reemplazo

#define MAXIMO 20#define MAXIMO 20

•• Se puede utilizar la sustitución macro para Se puede utilizar la sustitución macro para

implantar una variable constanteimplantar una variable constante

SSD5SSD5 Mtl Lourdes CahuichMtl Lourdes Cahuich 2424

Sustitución macroSustitución macro

•• Los programadores deben utilizar la Los programadores deben utilizar la

palabra reservada palabra reservada constconst en lugar de la en lugar de la

sustitución macro para crear variables sustitución macro para crear variables

constantes debido a que constantes debido a que constconst es parte del es parte del

lenguaje C++ y no una característica del lenguaje C++ y no una característica del

preprocesadorpreprocesador; estos ; estos constconst soportan mejor soportan mejor

la revisión de tiposla revisión de tipos

SSD5SSD5 Mtl Lourdes CahuichMtl Lourdes Cahuich 2525

Sustitución macroSustitución macro

•• El El preprocesadorpreprocesador soporta macros con soporta macros con

parámetros y es muy parecido a una parámetros y es muy parecido a una

función normal de C++función normal de C++

•• El El preprocesadorpreprocesador sustituye la llamada de la sustituye la llamada de la

función aparente con el texto de reemplazo función aparente con el texto de reemplazo

de macrode macro

SSD5 Mtl Lourdes Cahuich 26

#define identific(identif, identif,…) texto_reempla zo

#define max(x,y) ( ( (x)>(y) ) ? (x) : (y) )

SSD5SSD5 Mtl Lourdes CahuichMtl Lourdes Cahuich 2727

Compilación condicionalCompilación condicional

•• #define soporta la compilación #define soporta la compilación

condicional; donde se compilan solamente condicional; donde se compilan solamente

ciertas secciones de nuestro código fuente; ciertas secciones de nuestro código fuente;

lo cual es útil para insertar código de lo cual es útil para insertar código de

depuración que puede ser habilitado y depuración que puede ser habilitado y

deshabilitado fácilmente (#define, #deshabilitado fácilmente (#define, #ifif, ,

##endifendif))

SSD5 Mtl Lourdes Cahuich 28

#define DEBUG

#if defined (DEBUG)

cerr << “debuggin habilitado” << endl;

#endif

#if defined (DEBUG)

cerr << “i=“ << i << endl;

cerr <<“arr[i]=” <<arr[i] << endl;

#endif

SSD5SSD5 Mtl Lourdes CahuichMtl Lourdes Cahuich 2929

Compilación condicionalCompilación condicional

•• Se evalúa como verdadera solamente si se Se evalúa como verdadera solamente si se ha definido un identificador DEBUGha definido un identificador DEBUG

•• La compilación condicional sirve para La compilación condicional sirve para prevenir definiciones múltiples de las clases prevenir definiciones múltiples de las clases y funciones contenidas en archivos de y funciones contenidas en archivos de cabecera, para no incluir varias veces un cabecera, para no incluir varias veces un mismo archivo si se incluye en varios mismo archivo si se incluye en varios códigos fuentecódigos fuente

SSD5 Mtl Lourdes Cahuich 30

#if ! defined (_PERSON_H_)

#define _PERSON_H_

class Person{

}

#endif

SSD5SSD5 Mtl Lourdes CahuichMtl Lourdes Cahuich 3131

Verificación de suposicionesVerificación de suposiciones

•• Verificar las suposiciones que usan Verificar las suposiciones que usan

afirmaciones es un ejemplo del uso común afirmaciones es un ejemplo del uso común

del del preprocesadorpreprocesador y sus característicasy sus características

•• Una Una afirmaciónafirmación es una declaración puesta en es una declaración puesta en

el código para verificar una suposiciónel código para verificar una suposición

SSD5SSD5 Mtl Lourdes CahuichMtl Lourdes Cahuich 3232

Verificación de suposicionesVerificación de suposiciones

•• Si al ejecutarla la suposición demuestra ser Si al ejecutarla la suposición demuestra ser

incorrecta, la declaración de la “incorrecta, la declaración de la “afirmaciónafirmación” ”

despliega un mensaje de notificación y despliega un mensaje de notificación y

detiene la ejecución del programa, lo cual detiene la ejecución del programa, lo cual

es muy útil para la detección de erroreses muy útil para la detección de errores

•• Todos los tipos de suposiciones se hacen Todos los tipos de suposiciones se hacen

sobre los datos contenidos en las variablessobre los datos contenidos en las variables

SSD5SSD5 Mtl Lourdes CahuichMtl Lourdes Cahuich 3333

Verificación de suposicionesVerificación de suposiciones

•• Cuando diseñamos y codificamos una Cuando diseñamos y codificamos una función esperando que los parámetros función esperando que los parámetros contengan datos válidos; en caso contrario contengan datos válidos; en caso contrario podría ser un errorpodría ser un error

•• La codificación alrededor de datos La codificación alrededor de datos inválidos sirve solamente para ocultar el inválidos sirve solamente para ocultar el error, mientras que usar una afirmación error, mientras que usar una afirmación puede detectar y precisar la existencia de puede detectar y precisar la existencia de ese errorese error

SSD5SSD5 Mtl Lourdes CahuichMtl Lourdes Cahuich 3434

Verificación de suposicionesVerificación de suposiciones

•• ¿Cómo manejar datos inválidos? Una ¿Cómo manejar datos inválidos? Una

manera implica el codificar de manera manera implica el codificar de manera

defensiva para detectar éstos, se previene defensiva para detectar éstos, se previene

una operación inválida pero no nos ayuda a una operación inválida pero no nos ayuda a

detectar cómo y dónde se generó el error o detectar cómo y dónde se generó el error o

los datos inválidoslos datos inválidos

SSD5SSD5 Mtl Lourdes CahuichMtl Lourdes Cahuich 3535

Verificación de suposicionesVerificación de suposiciones

•• La segunda manera es usando “La segunda manera es usando “afirmacionesafirmaciones” ”

((assertassert) en caso de que la función reciba ) en caso de que la función reciba

datos no válidos la afirmación despliega un datos no válidos la afirmación despliega un

mensaje de error y detiene la ejecución del mensaje de error y detiene la ejecución del

programaprograma

assertassert (( expresionexpresion ))

SSD5SSD5 Mtl Lourdes CahuichMtl Lourdes Cahuich 3636

Verificación de suposicionesVerificación de suposiciones

•• La declaración La declaración assertassert es una macro es una macro

almacenada en <almacenada en <assertassert> e incorpora > e incorpora

diversas aplicaciones del procesadordiversas aplicaciones del procesador

•• Cuando se liberan las versiones del Cuando se liberan las versiones del

software, los programadores, por lo general software, los programadores, por lo general

eliminan las afirmacioneseliminan las afirmaciones