C++ 01
C++ 01
DE INTERS PREVIO
La universidad no presta lo que la
naturaleza no da
Ferreiras
EL OBJETIVO DEL APRENDIZAJE DE UN LENGUAJE DE PROGRAMACIN ES SER MAS EFICAZ EN EL DISEO E IMPLEMENTACIN DE NUEVOS SISTEMAS Y EN EL MANTENIMIENTO DE LOS VIEJOS;
Ferreiras
LA APRECIACIN DE LAS TCNICAS DE DISEO Y PROGRAMACIN ES MUCHO MAS IMPORTANTE QUE EL TOTAL ENTENDIMIENTO DE LOS DETALLES; ESE ENTENDIMIENTO VIENE CON LA PRACTICA Y EL TIEMPO.
Ferreiras
LO INDICADO ANTERIORMENTE IMPLICA QUE YA USTED CUMPLE CON EL PRERREQUISITO DE SABER PASAR DEL PROBLEMA A LA ESCRITURA DEL ALGORITMO DE LA SOLUCIN EN PSEUDOCODIGO, SI NO ES AS, VER TEMA 3 DE INF206.-;
Ferreiras MIS PRIMEROS CODIGOS C++ 6
UN PROGRAMA EJECUTABLE , LLAMADO TAMBIN APLICACIN, ES, SIMPLEMENTE, UN PROGRAMA EN CDIGO DE UNA MQUINA ESPECFICA (CPU) QUE PUEDE SER EJECUTADO POR UN SISTEMA OPERATIVO;
Ferreiras
Ferreiras
2) El enlazador ( ilink32.exe);
3) El bibliotecario (tlib.exe);
Ferreiras
10
El compilador, el enlazador y el bibliotecario son herramientas de lnea de comando, esto significa que son diseada para ser corridas desde la consola DOS (cmd.exe), el bash de unix-linux u otras similares;
Ferreiras
11
El compilador recibe como entrada el archivo fuente y produce como salida un archivo objeto ( archivos .obj);
.cpp
archivo fuente
.obj
compilador (bcc32)
MIS PRIMEROS CODIGOS C++
archivo objeto
Ferreiras
12
El enlazador recibe como entrada archivo(s) objeto(s) y produce como salida un archivo ejecutable (.exe);
.obj
archivo objeto
.exe
enlazador (ilink32)
archivo ejecutable
Ferreiras
13
El bibliotecario recibe como entrada varios archivos objetos y produce una librera esttica en un archivo .lib ( A ver en el tema de funciones )
.obj .obj .obj
.obj
.lib
.obj .obj
.obj
bibliotecario (tlib)
MIS PRIMEROS CODIGOS C++
librera esttica
15
Ferreiras
El compilador incluye opciones de lnea de comando que invocan la accin propia del compilador ( !compilar!) y el enlazador, entre otras;
Ferreiras
16
Una lnea de comando es una lnea de texto que se escribe en el prompt de sistema operativo e incluye el nombre del comando a ejecutar y uno o ms argumentos:
> comando arg1 arg2 ... archivo Por ejemplo: > attrib +h config.sys
Ferreiras MIS PRIMEROS CODIGOS C++ 17
En el compilador a usar, el bcc32 5.5, algunas de las opciones antes indicadas son (las que ms vamos a usar) c y l : > bcc32 c nombre.cpp > bcc32 l nombre.obj
Esto es una ele, en minscula, de Link, NO ES UN UNO
Ferreiras MIS PRIMEROS CODIGOS C++
18
C:\Borland\BCC55\Bin>bcc32
Borland C++ 5.5 for Win32 Copyright (c) 1993, 2000 Borland Syntax 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
19
EL COMPILADOR A USAR
Nombre ?
Cmo instalarlo ?
d) Un linker;
e) Ayudas en lnea (hints); f) ...
c) Depurador;
Ferreiras
23
b) Bloodshed Dev-C++
http://www.bloodshed.net/devcpp.html
c) BVRDE
http://bvrde.sourceforge.net/
Ferreiras MIS PRIMEROS CODIGOS C++ 24
d) Otros... eso es inmenso y gratis; (-_-) POR ASPECTOS PURAMENTE DIDCTICOS EN ESTE CURSO TRABAJAREMOS EN LNEA DE COMANDO, ESTO ES, SIN USAR IDE. (\ _~)
Ferreiras
25
Un SDK (Software Development Kit) es un conjunto de herramientas de produccin de software que permite al desarrollador crear aplicaciones para un determinado entorno de aplicacin ( framework, plataforma (SO + CPU). En muchos casos incluye el IDE para el desarrollo;
Ferreiras
26
b) Qt
c) Visual Studio de MS
Ferreiras
27
POR ASPECTOS PURAMENTE DIDCTICOS EN ESTE CURSO TRABAJAREMOS EN LNEA DE COMANDO, ESTO ES, SIN USAR SDK. (\ _~)
Ferreiras
28
Ferreiras
29
Cdigo Fuente Portable Es la solucin, esto es, EVITE SOLUCIONES QUE SEAN DEPENDIENTE DE CARACTERSTICAS ESPECIFICAS EN UNA PLATAFORMA; ESCRIBA CDIGO C++ ESTANDARIZADO.
Ferreiras
30
LUEGO, COMPILE Y ENLACE EN CADA PLATAFORMA CON EL COMPILADOR Y EL ENLAZADOR APROPIADO. ES TODO LO QUE SE REQUIERE.
Ferreiras
31
Ferreiras
32
Ferreiras
C:\Borland\BCC55\bin>
Ferreiras MIS PRIMEROS CODIGOS C++ 34
Ferreiras
35
El proceso de compilacin deber producir el archivo objeto nombre.obj, si no hay errores de sintaxis ( violaciones a las reglas del lenguaje); El archivo objeto es una versin en lenguaje mquina del archivo fuente nombre.cpp
Ferreiras
36
En la compilacin primero se ejecutarn las directivas de pre-procesamiento (aquellas que iniciaran con un smbolo #). Estas directivas son procesados por un subprograma, que forma parte del compilador, llamado pre-procesador.
Ferreiras
37
4) ENLAZAR (link)
Para producir un programa que se pueda correr ( ejecutable) en el computador hay que enlazar el o los archivos nombre.obj :
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 esttico (en tiempo de compilacin) o dinmico (en tiempo de ejecucin); Si se quiere ampliar ms el concepto de enlazado ver un enfoque en http://www.zator.com/Cpp/E1_4_4.htm
Ferreiras
39
C:\Borland\BCC55\bin>
nombre <ENTER>
PUEDE ESTAR EN CUALQUIER DIRECTORIO Y ES IGUAL: nombre <ENTER>
Ferreiras MIS PRIMEROS CODIGOS C++ 40
LA EJECUCIN INDICADA ES EN LNEA DE COMANDO Y HEMOS SUPUESTO QUE NO REQUIERE DE ARGUMENTOS ADICIONALES LA INSTRUCCIN DE EJECUCIN; MS ADELANTE EXPLICAREMOS Y VEREMOS LA EJECUCIN CON ARGUMENTOS EN LNEA DE COMANDO.
Ferreiras
41
Ferreiras
42
Ferreiras
43
Ferreiras
44
ENFOQUE E-P-S
E
ENTRADA
P
PROCESO
S
SALIDA
Ferreiras
46
Ferreiras
47
Ferreiras
48
Ferreiras
49
Ferreiras
50
Ferreiras
51
Ferreiras
52
Ferreiras
53
Ferreiras
54
<ENTER>
Ferreiras
56
Ferreiras
57
CICLO C - G - C:
C: CORRECCIN
G: GRABACIN C: COMPILACIN
Ferreiras
59
EN RESUMEN
EDITOR ASCII
ALGORITMO
>bcc32 c a.cpp
a.cpp
COMPILACION
ENLAZADO
SI
ERRORES ?
NO
a.obj
>bcc32 -l a.obj
a.exe
60
// DECLARACIONES GLOBALES
// DEFINICIONES DE FUNCIONES
Ferreiras MIS PRIMEROS CODIGOS C++ 62
return 0;
}
Ferreiras
63
BLOQUES DE SENTENCIAS
Dos o ms lneas de sentencias encerradas entre llaves:
{
s1; s2; ... s_n; }
Ferreiras MIS PRIMEROS CODIGOS C++ 64
ALCANCE DE LAS VARIABLES Hasta que punto son reconocidas despus de ser declaradas: DE BLOQUE
DE FUNCION
DE ARCHIVO
Ferreiras MIS PRIMEROS CODIGOS C++ 65
En esta parte del curso trabajaremos con operaciones de E/S desde y hacia los dispositivos estndar ( teclado / pantalla):
ENTRADA programa
programa
SALIDA
Ferreiras
67
SENTENCIA DE SALIDA
Permiten a nuestro algoritmo mostrar el resultado del procesamiento de los datos.
ALGORITM O
RESULTADOS
Ferreiras
68
SENTENCIA DE ENTRADA
Permiten a nuestro algoritmo interactuar con el exterior capturando los datos a ser procesados.
DATOS A PROCESAR
ALGORITMO
Ferreiras
69
C++ gestiona las operaciones de entrada / salida usando el concepto de flujo (stream) de bytes:
DISPOSITIVO DE ENTRADA
bytebytebytebytebytbytebyttebyte
PROGRAMA
DISPOSITIVO DE SALIDA
bytebytebytebytebytbytebyttebyte
Ferreiras
70
Ferreiras
71
UN FLUJO ES UNA ABSTRACCIN PARA REFERIRSE A CUALQUIER FLUJO DE DATOS DESDE UNA FUENTE (DISPOSITIVO DE ENTRADA) HACIA UN CONSUMIDOR (DISPOSITIVO DE SALIDA);
Ferreiras
72
El concepto de flujo de bytes Es una abstraccin 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, conexin con los dispositivos de E/S,...);
Ferreiras
73
En el modelo de flujo la informacin se mueve como secuencia de bytes annimos que entran por el flujo de entrada y salen por el flujo de salida; La informacin es insertada en el flujo de salida o extrada desde el flujo de entrada;
Ferreiras
74
EXTRACCIN, OBTENER Y RECOGER SON SINNIMOS CUANDO SE HABLA DE ENTRADA DE BYTES DESDE UNA FUENTE (DISPOSITIVO DE ENTRADA);
Ferreiras
75
INSERCIN, PONER Y ALMACENAR SON SINNIMOS CUANDO SE HABLA DE SALIDA DE BYTES HACIA UN CONSUMIDOR (DISPOSITIVO DE SALIDA);
Ferreiras
76
ENTRADA : UN FLUJO DESDE UN DISPOSITIVO DE ENTRADA ( TECLADO, DISCO, ESCNER, 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++ 77
# 0 stdin
p r o g r a m a
PANTALLA
# 1 stdout
canales
TERMINAL DE TEXTO
Ferreiras MIS PRIMEROS CODIGOS C++ 78
Los flujos estndar 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 ejecucin.
Ferreiras MIS PRIMEROS CODIGOS C++ 79
En este curso trabajaremos, bsicamente, con los flujos estandar stdin y stdout;
Ferreiras
80
cout << PARA INSERTAR BYTES DE INFORMACIN EN EL FLUJO DE SALIDA USANDO EL OPERADOR DE INSERCIN << cin >> PARA EXTRAER BYTES DE INFORMACIN DESDE UN FLUJO DE ENTRADA HACIA UNA VARIABLE USANDO EL OPERADOR DE EXTRACCIN >> ;
endl ES UN MANIPULADOR DE FLUJO QUE SE USA CON cout <<; INSERTA UN CR/LF (UN newline) Y VACA EL BUFFER DE SALIDA;
Ferreiras MIS PRIMEROS CODIGOS C++ 82
cout <<
cout << expresin;
esta expresin es evaluada y su resultado es, entonces, insertado en el flujo estndar de salida para se mostrado por el dispositivo estndar de salida, la pantalla.
Ferreiras
83
endl
cout << expresin << endl;
esta expresin es evaluada y su resultado es, entonces, insertado en el flujo estndar de salida y almacenado en el buffer para ser mostrado su contenido en el dispositivo estndar de salida (la pantalla) con una newline al final.
Ferreiras MIS PRIMEROS CODIGOS C++ 84
SALIDA
byte1byte2byte3byte
cout
<<
OPERADOR DE INSERCIN EN EL FLUJO ESTNDAR DE SALIDA
# 1 stdout
DE RAM AL MONITOR
Ferreiras MIS PRIMEROS CODIGOS C++ 85
Ferreiras
86
/*
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++ 87
#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
88
!! Aqui estamos !!
En C++ con Ferreiras
Ferreiras
89
cin >>
cin >> variable;
La ejecucin 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 informacin, por lo tanto, el tipo debe ser correspondiente con el tipo de dato a capturar. Al terminar la captura (extraccin) cin agrega un newline en el flujo estndar de entrada; La extraccin es hasta el primer espacio en blanco;
Ferreiras
90
ENTRADA
# 0 stdin
cin
byte1byte2byte3byte
>>
Ferreiras
91
/*
bas1a.cpp Compilador: bcc32 5.5 C++/ Ferreiras/ Flujos estandar de E-S / uso de cout << y de cin >> */
Ferreiras
92
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++ 93
// 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
94
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
Ferreiras
95
cout << y cin >> Estn atados uno con el otro. Esto significa que cuando se combinan en una operacin de E/S, el flujo estndar de salida cout es vaciado antes de que se ejecute el flujo estndar 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
96
Ferreiras
98
cin Es el recurso para leer desde el flujo estndar de entrada; str Es una variable tipo string; Esto implica que se requiere usar la librera <string>, propia de C++;
Ferreiras
99
delim Es un carcter ascii-std cualquiera que es usado para indicarle a cn hasta donde leer en el flujo de entrada estndar; Si no se indica entonces el delimitador por defecto es el newline (\n); [...] Significa opcional. La extraccin se efecta hasta encontrar el delimitador, el cual no es almacenado en la variable;
Ferreiras
100
/*
bas1b.cpp Compilador: bcc32 5.5 C++/ Ferreiras/ Flujos estandar de E-S / uso de getline( cin, str, [delim] ) */
Ferreiras
101
# 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
102
/* 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
103
Ferreiras
104
<sstream>
PROVEE LOS RECURSOS PARA OPERACIONES DE E/S BASADAS EN CADENAS: ESCRIBIR HACIA UNA CADENA;
<fstream> PROPORCIONA RECURSOS PARA LA EJECUCIN DE OPERACIONES DE FLUJOS E/S SOBRE ARCHIVOS EN DISCOS.
Ferreiras
106
GRACIAS !!
Ferreiras
107