c++ 01
TRANSCRIPT
Ferreiras MIS PRIMEROS CODIGOS C++ 1
MIS PRIMEROS CÓDIGOSEN C++
INF-510
V4.0
SEPTIEMBRE 2009
FERREIRAS.
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
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;
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.
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;
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.-;
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;
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”
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”
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);
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;
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)
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);
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++;
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
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;
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:
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
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
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.
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.
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++;
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) ...
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
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. ” (\ _~)
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;
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
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. ” (\ _~)
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;
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.
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.
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; -:)
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
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>
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>
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
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.
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
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
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>
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.
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.
Ferreiras MIS PRIMEROS CODIGOS C++ 43
ANÁLISISY
DOMINIODEL
PROBLEMA
Ferreiras MIS PRIMEROS CODIGOS C++ 44
DECLARACIÓNDEL
PROBLEMA(NARRATIVA)
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.
Ferreiras MIS PRIMEROS CODIGOS C++ 46
DISEÑODEL
ALGORITMO
Ferreiras MIS PRIMEROS CODIGOS C++ 47
ESCRIBIREL
ALGORITMOEN
PSEUDOCODIGO
Ferreiras MIS PRIMEROS CODIGOS C++ 48
ESCRIBIR EL PSEUDOCODIGO
DELALGORITMOEN CÓDIGO FUENTE C++
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
Ferreiras MIS PRIMEROS CODIGOS C++ 50
COMPILAR ELCÓDIGOFUENTE
Ferreiras MIS PRIMEROS CODIGOS C++ 51
SI NO HAY ERRORES DE SINTAXIS EN EL CÓDIGO FUENTE:
Ferreiras MIS PRIMEROS CODIGOS C++ 52
ESTE ARCHIVO, bas1.obj, SE GENERARÁ SI NO HAY ERRORES.
Ferreiras MIS PRIMEROS CODIGOS C++ 53
PROCESO DE ENLACE (link) PARA PRODUCIR EL
EJECUTABLE
Ferreiras MIS PRIMEROS CODIGOS C++ 54
SI EL PROCESO DE ENLACE (link) FUE EXITOSO:
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.
Ferreiras MIS PRIMEROS CODIGOS C++ 56
PROBAMOS LA APLICACIÓN, CORRIENDO EL ARCHIVO .exe :
<ENTER>
Ferreiras MIS PRIMEROS CODIGOS C++ 57
VALIDAMOS LOS RESULTADO :
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
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
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
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;
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++
Ferreiras MIS PRIMEROS CODIGOS C++ 63
// FUNCION PRINCIPAL
int main(void){
// cuerpo de main
return 0;
}
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; }
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
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;
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
Ferreiras MIS PRIMEROS CODIGOS C++ 68
SENTENCIA DE SALIDA
Permiten a nuestro algoritmo mostrar el resultado del procesamiento de los datos.
ALGORITM
O
RESULTADOS
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
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
Ferreiras MIS PRIMEROS CODIGOS C++ 71
CONCEPTO DE FLUJO EN C++
FLUJO DE BYTES
TRANSFERENCIA DE
INFORMACIO
N EN
FORMA DE BYTES
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);
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,...);
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;
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);
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);
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);
Ferreiras MIS PRIMEROS CODIGOS C++ 78
FLUJOS DE E/S ESTÁNDAR
TERMINAL DE TEXTO
TECLADO
PANTALLA
# 0 stdin
# 1 stdout
programa
canales
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.
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;
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>;
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;
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.
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.
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
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;
}
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 !! ]*/
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
*/
Ferreiras MIS PRIMEROS CODIGOS C++ 89
!! Aqui estamos !!
En C++ con Ferreiras
Tema: C++ Basico
íí VAMOS A TRABAJAR 24/7 !!
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;
Ferreiras MIS PRIMEROS CODIGOS C++ 91
cin >>
byte1byte2byte3byte
DEL TECLADO A RAMOPERADOR DE
EXTRACCIÓN DEL FLUJO ESTÁNDAR DE ENTRADA
# 0 stdin
ENTRADA
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 >> */
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;
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;
}
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
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. ;
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; //...
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] )
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++;
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;
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] ) */
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;
}
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
*/
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.
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.
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
Ferreiras MIS PRIMEROS CODIGOS C++ 107
GRACIAS !!