Professional Documents
Culture Documents
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