c++ 01

107
Ferreiras MIS PRIMEROS CODIGOS C++ 1 MIS PRIMEROS CÓDIGOS EN C++ INF- 510 V4.0 SEPTIEMBRE 2009 FERREIRAS.

Transcript of c++ 01

Page 1: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 1

MIS PRIMEROS CÓDIGOSEN C++

INF-510

V4.0

SEPTIEMBRE 2009

FERREIRAS.

Page 2: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 2

DE INTERÉS PREVIO

“La universidad no presta lo que la naturaleza no da”

“Por el dinero del trabajo los dioses lo venden todo”

http://www.zator.com/Cpp/E1_4.htm

Page 3: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 3

EL OBJETIVO DEL APRENDIZAJE DE UN LENGUAJE DE PROGRAMACIÓN ES SER MAS EFICAZ EN EL DISEÑO E IMPLEMENTACIÓN DE NUEVOS SISTEMAS Y EN EL MANTENIMIENTO DE LOS VIEJOS;

Page 4: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 4

LA APRECIACIÓN DE LAS TÉCNICAS DE DISEÑO Y PROGRAMACIÓN ES MUCHO MAS IMPORTANTE QUE EL TOTAL ENTENDIMIENTO DE LOS DETALLES; ESE ENTENDIMIENTO VIENE CON LA PRACTICA Y EL TIEMPO.

Page 5: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 5

¿QUÉ ES CONSTRUIR UNA APLICACIÓN C++ ?

CONSTRUIR UNA APLICACIÓN C++ ES TRANSFORMAR EL ALGORITMO DE LA SOLUCIÓN DE UN PROBLEMA EN UN PROGRAMA EJECUTABLE;

Page 6: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 6

LO INDICADO ANTERIORMENTE IMPLICA QUE YA USTED CUMPLE CON EL PRERREQUISITO DE SABER PASAR DEL PROBLEMA A LA ESCRITURA DEL ALGORITMO DE LA SOLUCIÓN EN PSEUDOCODIGO, SI NO ES ASÍ, VER TEMA 3 DE INF-206.-;

Page 7: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 7

UN PROGRAMA EJECUTABLE , LLAMADO TAMBIÉN APLICACIÓN, ES, SIMPLEMENTE, UN PROGRAMA EN CÓDIGO DE UNA MÁQUINA ESPECÍFICA (CPU) QUE PUEDE SER EJECUTADO POR UN SISTEMA OPERATIVO;

Page 8: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 8

PARA OBTENER UN PROGRAMA EJECUTABLE:

1RO. : ESCRIBIR EL CÓDIGO FUENTE USANDO UN EDITOR TEXTO ASCII –STD (NOTEPAD, NOTEPAD++, EDIT, vi, ...);

“El código fuente es un archivo de texto ascii-std que contiene el conjunto de instrucciones C++ que corresponden a la secuencia de pasos del algoritmo de la solución del problema”

Page 9: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 9

2do. : CONVERTIR EL CÓDIGO FUENTE EN CÓDIGO EJECUTABLE USANDO UN COMPILADOR Y UN ENLAZADOR.

“El código ejecutable es el conjunto de instrucciones del código fuente transformado en código máquina de un CPU en específico”

Page 10: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 10

HERRAMIENTAS BÁSICAS USADAS PARA CONSTRUIR

APLICACIONES C++

1) El compilador ( bcc32 5.5 / 5.6);

2) El enlazador ( ilink32.exe);

3) El bibliotecario (tlib.exe);

Page 11: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 11

El compilador, el enlazador y el bibliotecario son herramientas de línea de comando, esto significa que son diseñada para ser corridas desde la consola DOS (cmd.exe), el bash de unix-linux u otras similares;

Page 12: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 12

El compilador recibe como entrada el archivo fuente y produce como salida un archivo objeto ( archivos .obj);

.cpp .obj

archivo fuente

archivo objeto

compilador

(bcc32)

Page 13: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 13

.obj .exe

archivo objeto

archivo ejecutableenlazador

(ilink32)

El enlazador recibe como entrada archivo(s) objeto(s) y produce como salida un archivo ejecutable (.exe);

Page 14: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 14

¿ DESCOMPILAR UN EJECUTABLE C++ ?

NO SUEÑEN, NO HAY FORMA DE USTED OBTENER EL CÓDIGO FUENTE C++ A PARTIR DE UN EJECUTABLE CREADO CON UN O UNOS ARCHIVOS OBJETOS C++;

Page 15: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 15

El bibliotecario recibe como entrada varios archivos objetos y produce una librería estática en un archivo .lib ( A ver en el tema de funciones )

.obj

.obj

.obj .obj

.obj

.obj .obj

.lib

bibliotecario (tlib)

librería estática

Page 16: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 16

El compilador incluye opciones de línea de comando que invocan la acción propia del compilador ( !compilar!) y el enlazador, entre otras;

Page 17: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 17

Una línea de comando es una línea de texto que se escribe en el prompt de sistema operativo e incluye el nombre del comando a ejecutar y uno o más argumentos:

> comando –arg1 –arg2 ... archivo

> attrib +h config.sys

Por ejemplo:

Page 18: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 18

En el compilador a usar, el bcc32 5.5, algunas de las opciones antes indicadas son (las que más vamos a usar) –c y –l :

> bcc32 –c nombre.cpp

> bcc32 –l nombre.obj

Para compilar el archivo fuente .cpp y generar el archivo objeto .obj

Para enlazar el archivo objeto .obj y generar el archivo ejecutable .exeEsto es una “ele”, en minúscula,

de Link, NO ES UN UNO

Page 19: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 19

Todas las opciones podemos verlas si hacemos:

C:\Borland\BCC55\Bin>bcc32

Borland C++ 5.5 for Win32 Copyright (c) 1993, 2000 BorlandSyntax is: BCC32 [ options ] file[s] * = default; -x- = turn switch x off -3 * 80386 Instructions -4 80486 Instructions -5 Pentium Instructions -6 Pentium Pro Instructions -Ax Disable extensions -B Compile via assembly -C Allow nested comments -Dxxx Define macro -Exxx Alternate Assembler name -Hxxx Use pre-compiled headers -Ixxx Include files directory -K Default char is unsigned -Lxxx Libraries directory -M Generate link map -N Check stack overflow -Ox Optimizations -P Force C++ compile -R Produce browser info -RT * Generate RTTI -S Produce assembly output -Txxx Set assembler option -Uxxx Undefine macro -Vx Virtual table control -X Suppress autodep. output -aN Align on N bytes -b * Treat enums as integers -c Compile only -d Merge duplicate strings -exxx Executable file name -fxx Floating point options -gN Stop after N warnings -iN Max. identifier length -jN Stop after N errors -k * Standard stack frame -lx Set linker option -nxxx Output file directory -oxxx Object file name -p Pascal calls -tWxxx Create Windows app -u * Underscores on externs -v Source level debugging -wxxx Warning control -xxxx Exception handling -y Produce line number info -zxxx Set segment names

Page 20: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 20

EL COMPILADOR A USAR ¿ Nombre ?

Borland C++ 5.5 Command Line

¿Dónde obtenerlo ?

http://www.programacionenc.net/modules.php?name=Tutoriales&d_op=vertuto&lid=25

¿ Cómo instalarlo ?

En el mismo link esta la explicación.

En el CD entregado por el Prof. esta todo.

Page 21: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 21

¿POR QUÉ LÍNEA DE COMANDO?

POR ASPECTOS DIDÁCTICOS. EN ESTA PARTE ESTAMOS CONSTRUYENDO CONCEPTOS ESENCIALES QUE SERÁN LA INFRAESTRUCTURA DE LOS CONOCIMIENTOS DE NUESTRO PRODUCTO FINAL, UN PROFESIONAL DE LA TIC.

Page 22: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 22

OTRAS HERRAMIENTAS PARA CONSTRUIR APLICACIONES C++

PARA EL DESARROLLO DE APLICACIONES C++ QUE NO SEAN SIMPLE EJEMPLOS DE AULA, SINO QUE ESTÁN CONSTITUIDAS POR MILES DE LÍNEAS DE CÓDIGO FUENTE, CIENTOS DE ARCHIVOS OBJETOS Y LIBRERÍAS SE USAN IDEs Y SDKs DE C++;

Page 23: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 23

USO DE IDE / SDK

Un IDE ( Integrated Development Environment ) es un software que proporciona facilidades a los programadores para el desarrollo de otros softwares. Normalmente se compone de:

a) Editor para código fuente;

b) Compilador;

c) Depurador;

d) Un linker;

e) Ayudas en línea (hints);

f) ...

Page 24: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 24

EJEMPLOS DE IDEs PARA C++ SON:

a) Eclipse C/C++

Development Tooling - CDT

http://www.eclipse.org/cdt/

c) BVRDE

http://bvrde.sourceforge.net/

b) Bloodshed Dev-C++

http://www.bloodshed.net/devcpp.html

Page 25: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 25

d) Otros... eso es inmenso y gratis; (-_-)

“ POR ASPECTOS PURAMENTE DIDÁCTICOS EN ESTE CURSO TRABAJAREMOS EN LÍNEA DE COMANDO, ESTO ES, SIN USAR IDE. ” (\ _~)

Page 26: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 26

Un SDK (Software Development Kit) es un conjunto de herramientas de producción de software que permite al desarrollador crear aplicaciones para un determinado entorno de aplicación ( framework, plataforma (SO + CPU). En muchos casos incluye el IDE para el desarrollo;

Page 27: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 27

EJEMPLO DE SDK PARA C++ SON

a) Eclipse SDK

b) Qt

c) Visual Studio de MS

d) Valentina C++ SDK

e) C++ Builder

Page 28: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 28

“ POR ASPECTOS PURAMENTE DIDÁCTICOS EN ESTE CURSO TRABAJAREMOS EN LÍNEA DE COMANDO, ESTO ES, SIN USAR SDK. ” (\ _~)

Page 29: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 29

¿ COMPILADOR C++ MULTIPLATAFORMA ?

CADA PLATAFORMA ( CPU + SO) TIENE SU PROPIO CPU, EL CUAL TIENE SU PROPIO LENGUAJE (CONJUNTO DE INSTRUCCIONES) AL QUE RESPONDE;

Page 30: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 30

“Código Fuente Portable” Es la solución, esto es, EVITE SOLUCIONES QUE SEAN DEPENDIENTE DE CARACTERÍSTICAS ESPECIFICAS EN UNA PLATAFORMA; ESCRIBA CÓDIGO C++ ESTANDARIZADO.

Page 31: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 31

LUEGO, COMPILE Y ENLACE EN CADA PLATAFORMA CON EL COMPILADOR Y EL ENLAZADOR APROPIADO. ES TODO LO QUE SE REQUIERE.

Page 32: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 32

32-bit Vs. 64-bit

En C++ no hay problema con hacer desarrollo de aplicaciones 64-bit usando los compiladores 32-bit estandarizados. Sólo hay que cumplir con ciertas normas simples. También podemos usar uno ya con la especificación de 64-bit, por ejemplo INTEL C++ ; (Más detalles salen del alcance de este curso; -:)

Page 33: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 33

PASOS REQUERIDOS1

PARA CONSTRUIR UNA APLICACIÓN CON C++

1) CÓDIGO FUENTE

Son las instrucciones de C++ que componen el programa. Se escribe con un editor de texto ASCII-std, como notepad, notepad++, edit, vi, ..., respetando las reglas del lenguaje;

1: Usando el bcc32 5.5 en línea de comando

Page 34: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 34

2) GRABAR COMO ARCHIVO DE TEXTO

El código fuente escrito se graba como archivo de texto con la extensión .cpp en el directorio bin de trabajo, que en este curso será:

C:\Borland\BCC55\bin>

Page 35: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 35

3) COMPILAR EL ARCHIVO nombre.cpp

El archivo nombre.cpp se compilará en línea de comando así:

C:\Borland\BCC55\bin>

bcc32 –c nombre.cpp <ENTER>

Page 36: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 36

El proceso de compilación deberá producir el archivo objeto nombre.obj, si no hay errores de sintaxis ( violaciones a las reglas del lenguaje); El archivo objeto es una versión en lenguaje máquina del archivo fuente nombre.cpp

Page 37: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 37

En la compilación primero se ejecutarán las directivas de pre-procesamiento (aquellas que iniciaran con un símbolo #). Estas directivas son procesados por un subprograma, que forma parte del compilador, llamado pre-procesador.

Page 38: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 38

4) ENLAZAR (link)

Para producir un programa que se pueda correr ( ejecutable) en el computador hay que enlazar el o los archivos nombre.obj :

C:\Borland\BCC55\bin>

bcc32 –l nombre.obj <ENTER>

(En el tema compilación por separado tendremos más de un archivo .obj para enlazar):

El ejecutable generado se llamará nombre.exe

Page 39: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 39

El proceso de enlazado es realizado por un subprograma en el compilador, llamado “linker”; En nuestro caso, que usamos bcc32, el linker es el ilink32.exe; El enlazado podrá ser estático (en tiempo de compilación) o dinámico (en tiempo de ejecución); Si se quiere ampliar más el concepto de enlazado ver un enfoque en http://www.zator.com/Cpp/E1_4_4.htm

Page 40: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 40

5) CARGAR Y EJECUTAR EL PROGRAMA

Para correr (ejecutar) el programa nombre.exe:

C:\Borland\BCC55\bin>

nombre <ENTER>

PUEDE ESTAR EN CUALQUIER DIRECTORIO Y ES IGUAL:

nombre <ENTER>

Page 41: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 41

LA EJECUCIÓN INDICADA ES EN LÍNEA DE COMANDO Y HEMOS SUPUESTO QUE NO REQUIERE DE ARGUMENTOS ADICIONALES LA INSTRUCCIÓN DE EJECUCIÓN; MÁS ADELANTE EXPLICAREMOS Y VEREMOS LA EJECUCIÓN CON ARGUMENTOS EN LÍNEA DE COMANDO.

Page 42: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 42

PRODUCCIÓN DE UNA APLICACIÓN C++

ELPROBLEMA

SUGERENCIA: Repasar las PPTs INF206_Tema_03 de INF-206. Todas están en el grupo.

Page 43: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 43

ANÁLISISY

DOMINIODEL

PROBLEMA

Page 44: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 44

DECLARACIÓNDEL

PROBLEMA(NARRATIVA)

Page 45: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 45

ENFOQUE E-P-S

E P S

ENTRADA PROCESO SALIDA

SU OBJETIVO ES IDENTIFICAR LAS ENTRADAS, LOS PROCESOS Y LAS SALIDAS.

Page 46: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 46

DISEÑODEL

ALGORITMO

Page 47: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 47

ESCRIBIREL

ALGORITMOEN

PSEUDOCODIGO

Page 48: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 48

ESCRIBIR EL PSEUDOCODIGO

DELALGORITMOEN CÓDIGO FUENTE C++

Page 49: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 49

EN NOTEPAD:

1) NOMBRE: “bas1.cpp”2) Tipo: Documento de texto (*.txt)3) Codificación: ANSI

GRABAR COMO bas1.cpp

ESCRÍBALO ASÍ ENTRE PAR DE COMILLAS

DOBLES

Page 50: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 50

COMPILAR ELCÓDIGOFUENTE

Page 51: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 51

SI NO HAY ERRORES DE SINTAXIS EN EL CÓDIGO FUENTE:

Page 52: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 52

ESTE ARCHIVO, bas1.obj, SE GENERARÁ SI NO HAY ERRORES.

Page 53: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 53

PROCESO DE ENLACE (link) PARA PRODUCIR EL

EJECUTABLE

Page 54: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 54

SI EL PROCESO DE ENLACE (link) FUE EXITOSO:

Page 55: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 55

VERIFICAMOS TODOS LOS ARCHIVOS DE LA APLICACIÓN:

bas1.exe es el ejecutable y bas1.tds es un temporal que se puede eliminar.

Page 56: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 56

PROBAMOS LA APLICACIÓN, CORRIENDO EL ARCHIVO .exe :

<ENTER>

Page 57: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 57

VALIDAMOS LOS RESULTADO :

Page 58: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 58

POR OTRO LADO, SI HAY ERRORES DE SINTAXIS EN EL CÓDIGO FUENTE:

NUMERO DE LÍNEA EN EL CÓDIGO FUENTE DONDE ESTA EL ERROR

Page 59: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 59

CICLO C - G - C:

C: CORRECCIÓN

G: GRABACIÓN

C: COMPILACIÓN

SALIR DEESTE CICLOCUANDO YA

NO HAY ERRORES DE

SINTAXIS

Page 60: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 60

DEL ARCHIVO .cppAL EJECUTABLE .exe

a.cpp >bcc32 –c a.cpp

>bcc32 -l a.obj

a.exe

¿ ERRORES ?SI NO a.obj

COMPILACION

ENLAZADO

EDITORASCII

EN RESUMEN

ALGORITMO DECLARACIÓN DELPROBLEMA

Page 61: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 61

1) ESCRIBIR CÓDIGO FUENTE EN EDITOR

ASCII-STD( NOTEPAD, NOTEPAD++, EDIT,...);

2) COMPILACIÓN CÓDIGO OBJETO;

3) ENLACE CÓDIGO EJECUTABLE;

4) CORRER EL EJECUTABLE;

5) VALIDAR LOS RESULTADOS DE LA EJECUCIÓN;

Page 62: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 62

// DIRECTIVAS DE PREPROCESAMIENTO

#include <iostream>#include <conio>#include <math>

// ESPACIO DE NOMBRE ESTANDAR

using namespace std; // DECLARACIONES GLOBALES

// DEFINICIONES DE FUNCIONES

ESTRUCTURA GENERAL

DE UN PROGRAMA FUENTE C++

Page 63: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 63

// FUNCION PRINCIPAL

int main(void){

// cuerpo de main

return 0;

}

Page 64: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 64

LÍNEAS DE SENTENCIAS, EL PUNTO Y COMA Una instrucción C++ termina en punto y coma (;)

BLOQUES DE SENTENCIAS Dos o más líneas de sentencias encerradas entre llaves:

{ s1; s2; ... s_n; }

Page 65: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 65

ALCANCE DE LAS VARIABLES Hasta que punto son reconocidas después de ser declaradas:

DE BLOQUE DE FUNCION

DE ARCHIVO

Page 66: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 66

OPERACIONES DE ENTRADA / SALIDA

En C++ podemos hacer operaciones de entrada (LEER) y salida (ESCRIBIR) desde y hacia:

1) Dispositivos estándar de E/S (Teclado / Pantalla);

2) Archivos en dispositivos de almacenamiento masivo y permanente (Discos, ...);

3) Cadenas de caracteres;

Page 67: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 67

En esta parte del curso trabajaremos con operaciones de E/S desde y hacia los dispositivos estándar ( teclado / pantalla):

programa

ENTRADA

SALIDA

programa

Page 68: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 68

SENTENCIA DE SALIDA

Permiten a nuestro algoritmo mostrar el resultado del procesamiento de los datos.

ALGORITM

O

RESULTADOS

Page 69: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 69

SENTENCIA DE ENTRADA

Permiten a nuestro algoritmo interactuar con el exterior capturando los datos a ser procesados.

ALGORITMO

DATOS A PROCESAR

Page 70: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 70

C++ gestiona las operaciones de entrada / salida usando el concepto de flujo (stream) de bytes:

bytebytebytebytebytbytebyttebyte DISPOSITIVO DE ENTRADA

bytebytebytebytebytbytebyttebyte DISPOSITIVO DE SALIDA

PROGRAMA

Page 71: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 71

CONCEPTO DE FLUJO EN C++

FLUJO DE BYTES

TRANSFERENCIA DE

INFORMACIO

N EN

FORMA DE BYTES

Page 72: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 72

UN FLUJO ES UNA ABSTRACCIÓN PARA REFERIRSE A CUALQUIER FLUJO DE DATOS DESDE UNA FUENTE (DISPOSITIVO DE ENTRADA) HACIA UN CONSUMIDOR (DISPOSITIVO DE SALIDA);

Page 73: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 73

El concepto de flujo de bytes Es una abstracción que permite que las operaciones de E/S sean vistas por el programador de manera similar e independiente de los elementos de bajo nivel del sistema operativo ( controladores, conexión con los dispositivos de E/S,...);

Page 74: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 74

En el modelo de flujo la información se mueve como secuencia de bytes anónimos que entran por el flujo de entrada y salen por el flujo de salida;

La información es insertada en el flujo de salida o extraída desde el flujo de entrada;

Page 75: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 75

EXTRACCIÓN, OBTENER Y

RECOGER SON SINÓNIMOS CUANDO SE HABLA DE ENTRADA DE BYTES DESDE UNA FUENTE (DISPOSITIVO DE ENTRADA);

Page 76: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 76

INSERCIÓN, PONER Y ALMACENAR SON SINÓNIMOS CUANDO SE HABLA DE SALIDA DE BYTES HACIA UN CONSUMIDOR (DISPOSITIVO DE SALIDA);

Page 77: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 77

ENTRADA : UN FLUJO DESDE UN DISPOSITIVO DE ENTRADA ( TECLADO, DISCO, ESCÁNER, RED ) HACIA LA MEMORIA PRINCIPAL;

SALIDA: UN FLUJO DESDE LA MEMORIA PRINCIPAL A UN DISPOSITIVO DE SALIDA ( IMPRESORA, PANTALLA, RED, DISCO, MEMORIA FLASH);

Page 78: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 78

FLUJOS DE E/S ESTÁNDAR

TERMINAL DE TEXTO

TECLADO

PANTALLA

# 0 stdin

# 1 stdout

programa

canales

Page 79: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 79

Los flujos estándar son canales de entrada y salida preconectados al programa y su entorno (normalmente un Terminal de texto compuesto por un teclado y una pantalla ) cuando este inicia su ejecución.

Page 80: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 80

# 0 standard input, stdin # 1 standard output , stdout # 2 standard error, stderr

Los canales preconectados son tres y son llamados:

En este curso trabajaremos, básicamente, con los flujos estandar stdin y stdout;

Page 81: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 81

RECURSOS C++ PARA E/S ESTÁNDAR

PARA LAS OPERACIONES DE E/S POR LOS DISPOSITIVOS ESTÁNDAR, TECLADO Y PANTALLA, C++ DISPONE DE LOS RECURSOS cin >> , cout << Y endl; ENTRE OTROS; TODOS ESTÁN EN LA LIBRERÍA <iostream>;

Page 82: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 82

cout << PARA INSERTAR BYTES DE INFORMACIÓN EN EL FLUJO DE SALIDA USANDO EL OPERADOR DE INSERCIÓN <<

cin >> PARA EXTRAER BYTES DE INFORMACIÓN DESDE UN FLUJO DE ENTRADA HACIA UNA VARIABLE USANDO EL OPERADOR DE EXTRACCIÓN >> ;

endl ES UN MANIPULADOR DE FLUJO QUE SE USA CON cout <<; INSERTA UN CR/LF (UN newline) Y VACÍA EL BUFFER DE SALIDA;

Page 83: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 83

cout <<

cout << expresión;

esta expresión es evaluada y su resultado es, entonces, insertado en el flujo estándar de salida para se mostrado por el dispositivo estándar de salida, la pantalla.

Page 84: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 84

endl cout << expresión << endl;

esta expresión es evaluada y su resultado es, entonces, insertado en el flujo estándar de salida y almacenado en el buffer para ser mostrado su contenido en el dispositivo estándar de salida (la pantalla) con una newline al final.

Page 85: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 85

cout << byte1byte2byte3byte

DE RAM AL MONITOR

OPERADOR DE INSERCIÓN EN EL FLUJO ESTÁNDAR DE SALIDA

# 1 stdout

SALIDA

Page 86: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 86

# include <iostream>

using namespace std;

int main(void){

cout << endl << endl << "!! Aqui estamos !! "

<< endl << endl << "En C++ con Ferreiras"

<< endl << endl << "Tema: C++ Basico"

<< "\n\n¡¡ VAMOS A TRABAJAR 24/7 !!";

cout << endl << endl;

return 0;

}

Page 87: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 87

/* int64bits Compilador: bcc32 5.5

C++ / Ferreiras / Tipos fundamentales de datos en C++

Tipo __int64

__int64 support both signed and unsigned data type. If it is signed then it can hold (2^63) - 1 at max. For unsigned it can hold (2^64) - 1:

* signed [ -( 2^(64-1) ), ( +(2^(64-1))-1 ) ]

-9,223,372,036,854,775,808 to +9,223,372,036,854,775,807

* unsigned [ 0, (+(2^64)- 1) ]

18446744073709551615 [ Er diablo, cuantos numeros !! ]*/

Page 88: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 88

#include <iostream> using namespace std;

int main(void){

unsigned __int64 entero_grande(18446744073709551615); cout << endl << entero_grande << endl; return 0;}

/*

C:\Borland\BCC55\Bin>int64bits

18446744073709551615

*/

Page 89: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 89

!! Aqui estamos !!

En C++ con Ferreiras

Tema: C++ Basico

íí VAMOS A TRABAJAR 24/7 !!

Page 90: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 90

cin >>cin >> variable;

La ejecución del programa se detiene a esperar una entrada suplida por el teclado ignorando los whispaces que sean pulsados antes (barra espaciadora, tecla enter, tab);

En esta variable es que se captura la información, por lo tanto, el tipo debe ser correspondiente con el tipo de dato a capturar.

Al terminar la captura (extracción) cin agrega un newline en el flujo estándar de entrada;

La extracción es hasta el primer espacio en blanco;

Page 91: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 91

cin >>

byte1byte2byte3byte

DEL TECLADO A RAMOPERADOR DE

EXTRACCIÓN DEL FLUJO ESTÁNDAR DE ENTRADA

# 0 stdin

ENTRADA

Page 92: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 92

/* bas1a.cpp Compilador: bcc32 5.5

C++/ Ferreiras/ Flujos estandar de E-S /

uso de cout << y de cin >> */

Page 93: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 93

# include <iostream># include <string>

using namespace std;

int main(void){

string nombre, apellido, completo; cout << "\n\nENTRADA Y SALIDA ESTANDAR EN C++"; cout << "\n\nENTRE SU NOMBRE [UNA SOLA PALABRA]: "; cin >> nombre; cout << "\nENTRE SU APELLIDO [UNA SOLA PALABRA]: "; cin >> apellido;

cout << "\n\n VERIFICACION DE LA CAPTURA"; cout << "\n\n NOMBRE: " << nombre; cout << "\n\nAPELLIDO: " << apellido << endl;

Page 94: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 94

// Uso incorrecto de los tipos de datos

// (a) Considerando

float b(1.23), h(2.34);

cout << "\n AREA T como 1/2*b*h = " << 1/2*b*h << "\n\nAREA T como 1.0/2.0*b*h = " << 1.0/2.0*b*h << endl;

return 0;

}

Page 95: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 95

C:\Borland\BCC55\Bin>bas1a

ENTRADA Y SALIDA ESTANDAR EN C++

ENTRE SU NOMBRE [UNA SOLA PALABRA]: Fresdebindo

ENTRE SU APELLIDO [UNA SOLA PALABRA]: Leupocito

VERIFICACION DE LA CAPTURA

NOMBRE: Fresdebindo

APELLIDO: Leupocito

AREA T como 1/2*b*h = 0

AREA T como 1.0/2.0*b*h = 1.4391

Page 96: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 96

cout << y cin >> Están atados uno con el otro. Esto significa que cuando se combinan en una operación de E/S, el flujo estándar de salida cout es vaciado antes de que se ejecute el flujo estándar de entrada cin y viceversa, incluso cuando endl no este usado en el cout. Esto es mostrado en estas sentencias del ejemplo anterior:

cout << "\n\nENTRADA Y SALIDA ESTANDAR EN C++";cout << "\n\nENTRE SU NOMBRE [UNA SOLA PALABRA]: ";cin >> nombre;cout << "\nENTRE SU APELLIDO [UNA SOLA PALABRA]: ";

Los dos primeros cout son ejecutados completamente antes de que cin se ejecute; Por igual, el cin se ejecuta completamente antes del siguiente cout. ;

Page 97: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 97

LECTURA SIMULTANEA EN MAS DE UNA VARIABLE

//...string nombre; long matricula; double pago;

// En vez de hacer esto:

cin >> nombre; cin >> matricula; cin >> pago;

// C++ permite combinar en un solo cin la // captura simultanea de las tres variables:

cin >> nombre >> matricula >> pago; //...

Page 98: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 98

getline(cin, str, [delim]); nos permite capturar un flujo de entrada estándar incluyendo los espacios en blanco; [...] Significa opcional.

USO DEgetline(cin, str, [delim] )

Page 99: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 99

cin Es el recurso para leer desde el flujo estándar de entrada;

str Es una variable tipo string; Esto implica que se requiere usar la librería <string>, propia de C++;

Page 100: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 100

delim Es un carácter ascii-std cualquiera que es usado para indicarle a cín hasta donde leer en el flujo de entrada estándar; Si no se indica entonces el delimitador por defecto es el newline (‘\n’); [...] Significa opcional.

La extracción se efectúa hasta encontrar el delimitador, el cual no es almacenado en la variable;

Page 101: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 101

/* bas1b.cpp Compilador: bcc32 5.5

C++/ Ferreiras/ Flujos estandar de E-S /

uso de getline( cin, str, [delim] ) */

Page 102: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 102

# include <iostream># include <string> using namespace std;

int main(void){

string completo; cout << "\n\nENTRADA Y SALIDA ESTANDAR EN C++" << endl; cout << "\nENTRE SU NOMBRE Y APELLIDO COMPLETOS:\n "; getline(cin, completo);

cout << "\n\n VERIFICACION DE LA CAPTURA" << endl; cout << "\nCOMPLETO: " << completo << endl; return 0;

}

Page 103: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 103

/*

C:\Borland\BCC55\Bin>bas1b

ENTRADA Y SALIDA ESTANDAR EN C++

ENTRE SU NOMBRE Y APELLIDO COMPLETOS: Fresdebindo Leupocito Colgadero Sanchez

VERIFICACION DE LA CAPTURA

COMPLETO: Fresdebindo Leupocito Colgadero Sanchez

*/

Page 104: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 104

USO COMBINADO DE getline y cin

En el uso combinado de getline y cin hay que tener en cuenta que si usamos primero el cin, entonces getline pasará como una voladora de FENATRANO y no leerá nada. Ver en el ejemplo bas4.cpp la solución de eso.

Page 105: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 105

<sstream>

PROVEE LOS RECURSOS PARA OPERACIONES DE E/S BASADAS EN CADENAS:

ESCRIBIR HACIA UNA CADENA;

LEER DESDE UNA CADENA.

A VER MÁS ADELANTE.

Page 106: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 106

<fstream>

PROPORCIONA RECURSOS PARA LA EJECUCIÓN DE OPERACIONES DE FLUJOS E/S SOBRE ARCHIVOS EN DISCOS.

A SER DISCUTIDO EN OTRO TEMA

Page 107: c++ 01

Ferreiras MIS PRIMEROS CODIGOS C++ 107

GRACIAS !!