programación en c++ -...
TRANSCRIPT
-
Programacin en C++
-
#include using namespace std;
int main(void) {
for (int cnt = 0; cnt < 500; cnt++) cout
-
Francisco Rosales & Jose Mara Pea Programacin C++ 3
ContenidosEl entorno UNIXQu es programar?Herramientas de desarrollo ITcnicas de programacinEstructuras de programacinEstilo de codificacinTipos y estructuras de datosOperadoresFunciones y parmetrosPreproceso y bibliotecasHerramientas de desarrollo II
-
Francisco Rosales & Jose Mara Pea Programacin C++ 4
El Entorno UNIXQu es UNIX?Cmo es UNIX!Cmo es Linux!Usuarios y GruposSesin de trabajoProcesos y ConcurrenciaSistema de FicherosDescriptores de fichero
-
Francisco Rosales & Jose Mara Pea Programacin C++ 5
Qu es UNIX?Uno de los SSOO ms extensos y potentes
Multiusuario Mucho usuarios simultneos
Multiproceso Cada usuario ejecutando simultneamente
muchos procesos Multiplataforma
Escrito 99% en C Portado a multitud de plataformas
-
Francisco Rosales & Jose Mara Pea Programacin C++ 6
Cmo es UNIX! Sensible al tipo de letra
unix Unix UNIX
Para usuarios NO torpes Hace lo que se le pide sin preguntar
rm r * borrara TODO
Lo borrado es irrecuperable
-
Francisco Rosales & Jose Mara Pea Programacin C++ 7
Cmo es Linux! Estndar POSIX
Portable Operating System Interface Licencia GNU
Debe suministrarse el cdigo fuente! Evoluciona
Programadores voluntarios de todo el mundo lo mantienen al da
Gratis Se paga la "Distribucin"
-
Francisco Rosales & Jose Mara Pea Programacin C++ 8
Usuario I Debe tener abierta cuenta en el sistema Se identifica con un nombre de usuario
login name
Cuentas protegida por contraseapassword
Internamente el sistema identifica al usuario con un nmero
UID User Identifier
-
Francisco Rosales & Jose Mara Pea Programacin C++ 9
Grupo II Los usuarios estn organizados en
grupos Cada usuario pertenece al menos a un
grupo Internamente el sistema identifica al
grupo con un nmeroGID Group Identifier
-
Francisco Rosales & Jose Mara Pea Programacin C++ 10
Privilegios III Operaciones que un usuario puede
realizar en el sistema Delimitadas en funcin de:
Su identidad (pareja UID y GID) Permisos de acceso al fichero (9 bits)
ReadWrite eXecute
OthersGroupOwner
rwxrwxrwx
-
Francisco Rosales & Jose Mara Pea Programacin C++ 11
Superusuario IV Tambin denominado root Encargado de administrar el sistema Tiene UID = 0 (cero) No tiene restricciones de ningn tipo
Puede hacer y deshacer lo que quiera La administracin de UNIX es:
Delicada y de responsabilidadExige amplios conocimientos
-
Francisco Rosales & Jose Mara Pea Programacin C++ 12
Sesin de trabajo I Periodo de tiempo que un usuario est
utilizando el sistema Identificacin frente al sistema
login: loginname_passwd: *******_
Se arranca un intrprete de mandatosprompt> _
Para terminar...exit ologout
-
Francisco Rosales & Jose Mara Pea Programacin C++ 13
Intrprete de mandatos II La interaccin del usuario con el
sistema UNIX suele ser a travs de un intrprete de mandatos
Se le denomina shell (concha) No hay una sino varias, a escoger. Para uso interactivo y programacin Para ms informacin, realizar el tutorial
http://laurel.datsi.fi.upm.es/~ssoo/FPSO/download/Entorno%20UNIX.ps
-
Francisco Rosales & Jose Mara Pea Programacin C++ 14
Mandatos IIImandato [opciones] [argumentos...]
Campos separados por espacios [ ] indica opcional ... indica uno o varios Las opciones comienzan por un - (menos) Peticin de ayuda sobre un mandato
-h o--help
-
Francisco Rosales & Jose Mara Pea Programacin C++ 15
man [what] Manual Pages Copia online de los manuales del sistema Secciones:
1. Mandatos (ej. sh, man, cat)2. Llamadas al sistema (ej. open, umask)3. Funciones de librera (ej. printf, fopen)4. Dispositivos (ej. null)5. Formato de ficheros (ej. passwd)6. Juegos7. Miscelnea8. Mandatos de Administracin del Sistema
-
Francisco Rosales & Jose Mara Pea Programacin C++ 16
Procesos I Al invocar un mandato:
Se ejecuta el fichero con ese nombre Todo programa en ejecucin es un
proceso Internamente el sistema identifica cada
proceso con un nmeroPID Process Identifier
-
Francisco Rosales & Jose Mara Pea Programacin C++ 17
Concurrencia II Cada proceso activo de cada usuario del
sistema, compite con los dems por ejecutar El sistema operativo decide cul ejecuta en
cada momento Todo sucede muy muy deprisa:
Cada proceso avanza como si fuera el nico Todos estn avanzando simultneamente
ps Muestra los procesos del sistema
-
Francisco Rosales & Jose Mara Pea Programacin C++ 18
Jerarqua III Los procesos se organizan en una
jerarqua padre--hijo(s) El ancestro es el proceso init
con PID = 1 Cada proceso est asociado a su
proceso padre por el PPID
-
Francisco Rosales & Jose Mara Pea Programacin C++ 19
rbol de Ficheros I Una nica estructura jerrquica de ficheros En UNIX los dispositivos se montan
NO existe el concepto de unidad Directorio raz
Es la raz de la jerrquica de nombres se denota con / (dividido) no con el \
Directorio HOME Al entrar al sistema, nos situamos en el HOME Pertenece al usuario
Por debajo de l podemos crear cuantos subdirectorios o ficheros queramos
-
Francisco Rosales & Jose Mara Pea Programacin C++ 20
Tipos de objeto II Directorios:
Contienen siempre las dos entradas:. (punto) refiere al directorio que la contiene.. (punto punto) refiere al directorio padre de este
Ficheros normales: Secuencias de bytes
Ficheros especiales: Son el interfaz de acceso a los dispositivos Estn bajo el directorio /dev Se tratan exactamente igual que los ficheros
normales, de forma que son indistinguibles
-
Francisco Rosales & Jose Mara Pea Programacin C++ 21
pwd Print Working Directory Cul es el directorio en que nos
encontramos en cada momento, al cul denominamos directorio actual de trabajo
-
Francisco Rosales & Jose Mara Pea Programacin C++ 22
cd [dir] Change Directory Cambia del actual directorio a otrocd Invocado sin argumento
nos devuelve al HOMEcd . Realmente nos deja en el
directorio actual de trabajocd .. Cambia al directorio padre
del directorio actual
-
Francisco Rosales & Jose Mara Pea Programacin C++ 23
ls [-opt] [dirs...] List Directory Presenta el contenido en los directorios
indicados Si no se indica se asume el directorio actual Las opciones ms usadas:
-l Una lnea por entrada con: permisos, propietario, grupo, tamao, fecha, etc
-a Muestra entradas que empiezan por . (punto), que normalmente no se ven
-R Recursivamente los subdirectorios
-
Francisco Rosales & Jose Mara Pea Programacin C++ 24
Descriptores de fichero I Los procesos manejan ficheros a travs
de los denominados descriptores de fichero El resultado de abrir un fichero es un
descriptor Las operaciones de manejo (lectura,
escritura, etc.) usan el descriptor Para los programas, un descriptor no es
ms que un nmero entero positivo
-
Francisco Rosales & Jose Mara Pea Programacin C++ 25
Descriptores estndar II Son los descriptores 0, 1 y 2 Se considera que siempre estn abiertos Los programas estndar los usan debidamente0 Entrada estndar
De l se leern los datos a procesar1 Salida estndar
En l se escribirn los resultados del proceso2 Error estndar
En l se escribirn los errores del proceso
-
Qu es programar?
Cmo es un ordenador por dentro?Qu sabe hacer un ordenador?Para qu se usan los ordenadores?Ciclo de vida del softwareCiclo de programacin
-
Francisco Rosales & Jose Mara Pea Programacin C++ 27
Cmo es un ordenador por dentro?
Registros
P
ALU
RAM
MemoriaPrincipal
ROM
DATOS
TEXTO
PILA
DATOS
TEXTO
PILA
DATOS
TEXTO
PILA
Mapas dememoria deprograma
Bus de datos Bus deEntrada/Salida
ControladoraGrfica AGP
Controladorade Disco IDE
ControladoraUSB
ControladoraRS232 Modem
Controladorasde Perifericos
Arquitectura Von Newmann
-
Francisco Rosales & Jose Mara Pea Programacin C++ 28
Qu sabe hacer un ordenador?
Muy poco Rapidsimo Ejecuta un nico hilo de instrucciones:
Aritmticas: suma, resta, multiplicacin... Lgicas: igual, mayor, menor... Salto: condicional, incondicional, llamada...
A una increble velocidad PC a 3000 MIPS y subiendo
Sin pausa
-
Francisco Rosales & Jose Mara Pea Programacin C++ 29
Para qu se usan los ordenadores?
Slo har lo que alguien le diga cmo hacer Problemas tengan solucin a mano Programas tiles para alguien:
Tareas complejas, de precisin, tediosas, etc
Es necesario desarrollar software No es trivial
-
Francisco Rosales & Jose Mara Pea Programacin C++ 30
1, 1.5...2
Anlisis
Usuario
Especificacin
A.--B.--C.--
1.--2.--3.--
Diseo
main(){}
Programacin
Validacin
A.OKB.OKC.OK
Implantacin
Ciclo de vida del software I
-
Francisco Rosales & Jose Mara Pea Programacin C++ 31
Ciclo de vida del software II Especificacin
Qu quiere exactamente el usuario final? Contrato
Anlisis Cmo resolver el problema? Descomposicin
Diseo Cada una de las partes y su interconexin
-
Francisco Rosales & Jose Mara Pea Programacin C++ 32
Ciclo de vida del software III Programacin Integracin
Calidad e integracin de cada mdulo Validacin
Cumplimiento de las especificaciones Implantacin
Correcto funcionamiento y aceptacin
-
Francisco Rosales & Jose Mara Pea Programacin C++ 33
Ciclo de programacin I Codifica
Implementa con precisin cada mdulo Comenta el cdigo fuente
Ayudar a su lectura y comprensin Verifica
Casos de prueba Herramientas de cobertura de cdigo
-
Francisco Rosales & Jose Mara Pea Programacin C++ 34
Ciclo de programacin II Depura
Localiza y corrige los errores de todo tipo Documenta
Genera documentacin para utilizar correctamente el programa
-
Francisco Rosales & Jose Mara Pea Programacin C++ 35
En resumen El ordenador:
Un tonto muy rpido, preciso e infatigable El programador:
Sabe como instruirle de forma precisa Labor creativa y gratificante, de precisin
El usuario: Impredecible y exigente
-
Herramientas de Desarrollo I
EditorCompiladorDepurador
-
Francisco Rosales & Jose Mara Pea Programacin C++ 37
EditorQu es un fichero de texto?
pico nano Simple Editor Muy sencillo de usar pero poco potente
vi vim Visual Editor (Improved) Lo encontramos en cualquier mquina UNIX
emacs GNU Project Editor Mucho ms que un simple editor Entorno que integra mltiples aplicaciones:
correo electrnico, navegador web, news, etc.
-
Francisco Rosales & Jose Mara Pea Programacin C++ 38
El cdigo fuente Con un editor de texto, escribimos en un archivo el
cdigo fuente del programa en el lenguaje elegido
programa principal, funcin principal o main: El punto de entrada al programa Imprescindible para obtener un ejecutable autnomo
Mnimo programa totalmente correcto
int main(void) {
return 0; }
-
Francisco Rosales & Jose Mara Pea Programacin C++ 39
Compilacin Traducir nuestro programa (un archivo .c o .cpp con
el cdigo fuente) en el correspondiente ejecutable (archivo en formato interno apto para ser arrancado)
La compilacin realmente involucra mltiples etapas Preprocesado de macros Anlisis sintctico del cdigo Traduccin a ensamblador Traduccin a lenguaje mquina con referencias externas Montaje contra bibliotecas para resolver esas referencias Produccin del ejecutable
El compilador informa los problemas que encuentre
-
Francisco Rosales & Jose Mara Pea Programacin C++ 40
Errores y Warnings El compilador debe indicar:
Errores Problemas graves que evitan que la compilacin
concluya Es imprescindible corregir estos errores
Warnings Problemas leves o alertas de posibles problemas La compilacin puede terminar pero... Es muy recomendable corregir el motivo de estos
warnings, porque son fuente de futuros errores
El objetivo es la compilacin limpia, sin ningn tipo de mensaje
-
Francisco Rosales & Jose Mara Pea Programacin C++ 41
gcc GNU C Compiler g++ para compilar C++ Muy bueno, rpido y eficiente Admite multitud de opciones (consulte man):
-c file.c Slo compilar, no montar -o name Nombre del fichero resultante -Wall Deteccin de todos los warnings -g Aade informacin para depuracin -O Activa optimizacin -l library Montaje con biblioteca indicada -L directory Directorio de bibliotecas
-
Francisco Rosales & Jose Mara Pea Programacin C++ 42
Depurador ILa compilacin limpia de un programa
no implica que sea correcto Ciertos errores slo sern visibles al ejecutar Para eliminarlos necesitamos un depurador
De bajo nivel: Ejecucin paso a paso De cdigo mquina o ensamblador Inspeccin de registros y posiciones de memoria
De alto nivel o simblico: Ejecucin lnea a lnea Del cdigo fuente que hemos escrito Inspeccionar de las variables de nuestro programa
-
Francisco Rosales & Jose Mara Pea Programacin C++ 43
Depurador II Debe haber compilado con g Algunas de las funciones del depurador:
Establecer puntos de parada (breakpoints) Examinar el valor de variables Ejecutar el programa lnea a lnea
Usaremos el gdb, dbx o similar
-
Francisco Rosales & Jose Mara Pea Programacin C++ 44
Fichero core Si un proceso termina bruscamente con un
mensaje como:segmentation fault: core dumped
Ha realizado un acceso ilegal a memoria El sistema operativo lo ha matado Se ha generado un fichero de nombre: core
Es un volcado de la imagen de memoria del proceso en el instante del fallo
Sirve para depurar tal fallo:gdb ejecutable core
-
Francisco Rosales & Jose Mara Pea Programacin C++ 45
gdb prog [core] GNU debugger help Men de ayuda run Ejecuta el programa break Establece un breakpoint list Muestra el cdigo print Muestra el valor de una variable continue Contina despus de un breakpoint next Ejecuta lnea sin entrar en funcin step Ejecuta lnea entrando en funcin quit Sale del depurador
-
Tcnicas de programacin
Trminos abstractosRazonamiento descendenteModularizacin
Y sobre todo... la experiencia
-
Francisco Rosales & Jose Mara Pea Programacin C++ 58
Trminos abstractos La solucin no informtica de un
problema es independiente de la herramienta Concebir el programa en el vocabulario
natural del problema Identificar estos trminos y las relaciones
entre ellos
-
Francisco Rosales & Jose Mara Pea Programacin C++ 59
Ejercicio
Enumere y describa
10 trminos de
cmo se juega al mus
-
Francisco Rosales & Jose Mara Pea Programacin C++ 60
Razonamiento descendente Si la magnitud del problema no permite
visualizarlo en toda su extensin Identificar etapas o fases Dividir el problema subproblemas De lo general a lo especfico Razonando en trminos abstractos Ir refinando una solucin
-
Francisco Rosales & Jose Mara Pea Programacin C++ 61
Ejercicio
Descomponga el problema
desarrollo de una partida de mus
en una jerarqua con las fases del juego
-
Francisco Rosales & Jose Mara Pea Programacin C++ 62
Modularizacin Perfilar ms y ms hasta delimitar cada
mdulo de nuestro programa Es suficientemente genrico? Est suficientemente delimitado? Merece ser una pieza independiente? Puede ser reutilizable?
-
Francisco Rosales & Jose Mara Pea Programacin C++ 63
Ejercicio
Trate de identificar los mdulos de
un programa que juegue al mus
-
Estructuras de Programacin
SecuenciaSeleccinIteracinFuncin o Procedimiento
-
Francisco Rosales & Jose Mara Pea Programacin C++ 65
Estructuras de Programacin Se identifican un conjunto mnimo de
estructuras bsicas de programacin:SecuenciaSeleccinIteracinFuncin o Procedimiento
Los programas sern: Ms fiables Ms eficientes Adaptables
-
Francisco Rosales & Jose Mara Pea Programacin C++ 66
Secuencia I Un nico hilo de ejecucin Sucesivos pasos o acciones que se
ejecutan en estricto orden
-
Francisco Rosales & Jose Mara Pea Programacin C++ 67
Secuencia (ordinograma) II
Hacer despus
Comentario] - - - - [Comienzo de bloque
- - [En estricta secuencia
Hacer antes
- - [Fin de bloque
-
Francisco Rosales & Jose Mara Pea Programacin C++ 68
Secuencia (pseudocdigo) III
# Esto es un comentario.
# Los comentarios no ejecutan.
PRINT "Introduzca un nmero "
INPUT valor
PRINT "Introdujo el ", valor, NL
-
Francisco Rosales & Jose Mara Pea Programacin C++ 70
Secuencia (cdigo C++) IV
// Esto es un comentario de lnea.
/* Esto es un comentario de bloque.
Los comentarios no ejecutan. */
cout > valor;
cout
-
Francisco Rosales & Jose Mara Pea Programacin C++ 71
Seleccin I Dirigir el flujo de ejecucin a una de
entre varias alternativas Escoge en funcin de condiciones
establecidas sobre los datos Expresiones booleanas, valores lgicos
CIERTO FALSO
-
Francisco Rosales & Jose Mara Pea Programacin C++ 72
Seleccin IF-THEN IIif (num != 0)
{
num = num * 2;
}Condicin
CIERTOFALSO
IF_THEN
Hacer
-
Francisco Rosales & Jose Mara Pea Programacin C++ 73
Seleccin IF-THEN-ELSE IIIif (num != 0)
{
num = num * 2;
}
else
{
num = num - 1;
}
CondicinFALSO CIERTO
IF_THEN_ELSE
HacerHacer
-
Francisco Rosales & Jose Mara Pea Programacin C++ 74
Seleccin SWITCH IVswitch(num + 5)
{
case -1:
num = num * num;
break;
case 0:
break;
default:
num = num / 2;
}
Seleccin
Hacer
DEFAULT
CASO 2
BREAK
Hacer
Hacer
CASO 1
SWITCH
BREAK
-
Francisco Rosales & Jose Mara Pea Programacin C++ 75
Iteracin I Estructuras llamadas bucles Ejecutar ninguna, una o varias veces cuerpo
del bucle La iteracin est controlada por una
condicin La condicin ha de cambiar de estado en el
cuerpo del bucle para que pueda terminar De otro modo, bucle infinito
-
Francisco Rosales & Jose Mara Pea Programacin C++ 76
Iteracin WHILE IIwhile (num < 0)
{
num = num + 1;
}
Mientras la condicin se evale a CIERTO
Puede no ser ejecutado ni una sola vez
Mientras
CIERTO
FALSO
WHILE
Hacer
-
Francisco Rosales & Jose Mara Pea Programacin C++ 77
Iteracin DO-WHILE IIIdo
{
num = num - 1;
} while (num > 0);
Es ejecutado al menos una vez
Hasta que la condicin se evale a FALSOFALSO
MientrasCIERTO
DO_WHILE
Hacer
-
Francisco Rosales & Jose Mara Pea Programacin C++ 78
Iteracin FOR IVfor (num = 0; num < MAX; num++)
{
sum = sum + num;
}
Bsicamente un WHILE con: Una etapa de inicializacin Otra de incremento
(o decremento)
Mientras
CIERTOFALSO
Paso
Desde
FOR
Hacer
-
Estilo de Codificacin
NombradoIndentacinComentariosRestricciones
-
Francisco Rosales & Jose Mara Pea Programacin C++ 80
Estilo de codificacin Objetivos:
mejorar la legibilidad del cdigo hacerlo ms comprensible independizarlo del autor
Su uso no implica cambio en la estructura del programa
Pero marca la diferencia entre buena y mala programacin
-
Francisco Rosales & Jose Mara Pea Programacin C++ 81
Nombrado I Mantener explcitos los trminos
abstractos del problema Nombres de variable y/o funcin
debern ser claros y especficos
-
Francisco Rosales & Jose Mara Pea Programacin C++ 82
Nombrado MAL IIvoid bar(m R)
{
int c = R.c;
int nc = 10;
int pc = rand() % c;
...
}
-
Francisco Rosales & Jose Mara Pea Programacin C++ 83
Nombrado BIEN IIIvoid barajar(mazo_naipes restantes)
{
int cuantos = restantes.cantidad;
int num_cortes = 10;
int primer_corte = rand() % cuantos;
...
}
-
Francisco Rosales & Jose Mara Pea Programacin C++ 84
Indentacin I El dibujo del cdigo ha de reflejar su
estructura. Ver y entender Usar blancos para encolumnar Tabular las lneas indicando su
profundidad Situar los delimitadores de bloque { y }
uniformemente
-
Francisco Rosales & Jose Mara Pea Programacin C++ 85
Indentacin MAL IIif (n == 0)
{
n = 1;
if (n == 1) {
n = 2;
}
else {
n = 3;
}n = n + 1;}
-
Francisco Rosales & Jose Mara Pea Programacin C++ 86
Indentacin BIEN IIIif (n == 0) {
n = 1;
if (n == 1) {
n = 2;
} else {
n = 3;
}
n = n + 1;
}
-
Francisco Rosales & Jose Mara Pea Programacin C++ 87
Comentarios I Codificar la idea implica prdida de
informacin Codificar es estrictamente indicar cmo hacer algo El razonamiento seguido, no queda reflejado
Se debe comentar el cdigo para iluminar al lector (y a nosotros mismos) sobre las decisiones tomadas
Un buen nombrado puede evitar comentarios intiles
-
Francisco Rosales & Jose Mara Pea Programacin C++ 88
Comentarios MAL II
H = H - 1; // Resto 1
...
/* Elevo al cuadrado */
r = r * r;
/* Multiplico por PI */
s = r * 3.14159;
-
Francisco Rosales & Jose Mara Pea Programacin C++ 89
Comentarios BIEN IIIdesfase_horario = -1;
hora = hora + desfase_horario;
...
const float PI = 3.141592654;
/* Es una circunferencia */
superf = r * r * PI;
-
Francisco Rosales & Jose Mara Pea Programacin C++ 90
Restricciones I Muchos lenguajes tienen clusulas que
rompen la estructura del programa Son saltos bruscos (incondicionales)
del hilo de ejecucin Hay que restringir su uso,
evitar su abuso
-
Francisco Rosales & Jose Mara Pea Programacin C++ 91
Restriccin IIgoto
Salto incondicional No usar jams
-
Francisco Rosales & Jose Mara Pea Programacin C++ 92
Restriccin IIIbreak
Sale fuera del bucle o switch ms interno Usar slo en el switch
-
Francisco Rosales & Jose Mara Pea Programacin C++ 93
Restriccin IVcontinue
Salta a la siguiente iteracin ms interna Usar slo como cuerpo de bucles vacos
while (time() < limite)
continue;
-
Francisco Rosales & Jose Mara Pea Programacin C++ 96
int main(void) {
int i; for(i=0; i
-
Francisco Rosales & Jose Mara Pea Programacin C++ 97
int main(void) {
int i; for(i=0; i
-
Francisco Rosales & Jose Mara Pea Programacin C++ 98
Restriccin Vreturn
Sale de la funcin devolviendo un valor Slo debe haber uno nico como ltima
sentencia de cada funcin
-
Tipos y estructuras de datos
Variables y constantesValor y formatoTipos bsicosEstructuras dinmicas de datos
-
Francisco Rosales & Jose Mara Pea Programacin C++ 101
Variables y constantes Representan cantidades y/o cualidades Antes de usarlas debemos declararlas
para que el compilador (o intrprete) sepa:
Su nombreSu mbito de vidaSu visibilidadEl tipo de datos asociado
-
Francisco Rosales & Jose Mara Pea Programacin C++ 102
Declaracin de variables Simple:
char c;int i;
Mltiple:char c, d;int i, j, k;
Con asignacin de valor:char c=A;int i=-133, j=i, k;
-
Francisco Rosales & Jose Mara Pea Programacin C++ 103
Nombrado I Debe ser no ambiguo y reflejar los
trminos abstractos del problema El lenguaje puede restringir el
nombrado Variables cuyo nombre coincida con
palabras reservadas del lenguaje Otras restricciones (ej. Longitud)
-
Francisco Rosales & Jose Mara Pea Programacin C++ 105
Nombrado II Evitar las palabras reservadas, en C++:
asm, auto, bool, break, case, catch, char, class, const, const_cast, continue, default, delete, do, double, dynamic_cast, else, enum, explicit, export, extern, false, float, for, friend, goto, if, inline, int, long, mutable, namespace, new, operator, private, protected, public, register, reinterpret_cast, return, short, signed, sizeof, static, static_cast, struct, switch, template, this, throw, true, try, typedef, typeid, typename, union, unsigned, using, virtual, void, volatile, wchar_t, while
Identificador correcto: {a-zA-Z_}[a-zA-Z_0-9]*
-
Francisco Rosales & Jose Mara Pea Programacin C++ 106
mbito de vida
Determina durante cunto tiempo existe Variable global a mdulo o programa:
durante todo el tiempo de ejecucin (toman valor inicial 0)
Variable local a, o parmetro formal de, una funcin slo durante cada llamada
(toman valor inicial basura)
-
Francisco Rosales & Jose Mara Pea Programacin C++ 107
Visibilidad Determina desde dnde podemos usarla Variable global al programa
desde cualquier punto
Variable global a un mdulo slo desde dicho mdulo
Variable local o parmetro formal de funcin slo desde dicha funcin
Una variable local oculta la global con el mismo nombre
-
Francisco Rosales & Jose Mara Pea Programacin C++ 108
Ejemplo de mbito y visibilidadint x,y; /* Globales */void funcion(void){
/* Aqu x e y son variables enteras *//* La variable z no existe */
}int main(void){
float x,z; /* Locales *//* Aqu x y z son reales e y es entera */
}
-
Francisco Rosales & Jose Mara Pea Programacin C++ 109
Modificadores de variablesstatic
Si global, slo global al mdulo Si local, conserva valor entre invocaciones Valor inicial 0
register Se preferira ubicar en un registro (por eficiencia)
volatile Podra cambiar de valor espontneamente por efecto de
algo "externo" al programa (Ej. registro de controlador de dispositivo)
const Su valor no debe ser alterado
-
Francisco Rosales & Jose Mara Pea Programacin C++ 110
Tipos de datos Podr ser uno de los tipos bsicos o bien un
tipo derivado de aquellos (los veremos) Se escoge segn el conjunto de valores que
queremos que la variable pueda tomar Los tipos numricos bsicos determinan el
rango de posibles valores Un entero no podr valer 3.75 (decimal) Un sin-signo no podr valer 1
-
Francisco Rosales & Jose Mara Pea Programacin C++ 111
Valor y formatoUn Kilo de oroUn Kilo de oro
tiene un determinadotiene un determinado valorvalor,, independiente de su independiente de su formatoformato::
lingote, polvo...lingote, polvo... Una cosa es el valor que una variable
tiene (o contiene) y otra el formato en que es almacenado o representado Ms sobre esto en los prximos ejemplos
-
Francisco Rosales & Jose Mara Pea Programacin C++ 112
Tipos bsicosSin tipoLgico: CIERTO FALSOCarcter: a A z Z 1 9 ...Entero: -1 33Real: 3.14 -5*10-15Enumerado: lunes martes ...Puntero: NULLVectores: tablero[8][8]Estructuras: {Nombre, edad, peso}
-
Francisco Rosales & Jose Mara Pea Programacin C++ 113
Sin tipovoid barajar(...)
Para declarar procedimientos No existen variables de este tipo
-
Francisco Rosales & Jose Mara Pea Programacin C++ 114
Lgicobool salir=false;
Existe en muchos lenguajes para representar valores lgicos true y false
Es de este tipo el resultado las comparaciones y de su combinacin mediante operadores lgicos AND, OR, NOT, etc
En C no existe como tipo bsico Cualquier expresin sirve de expresin lgica Se considera FALSO el valor numrico cero Por negacin cualquier valor numrico distinto de
cero es CIERTO
-
Francisco Rosales & Jose Mara Pea Programacin C++ 115
Carcterchar letra='a';
'\0', 'a', '', '?', '\n' Son valores numricos de tamao 1 byte... ...que representan (o representados por)
caracteres segn una convencin dada (cdigo ASCII o Latin1)
Constante entre comillas simples (apstrofo ') Secuencias de escape: '\r', '\t', '\b',... Valor en octal: '\013',...
-
Francisco Rosales & Jose Mara Pea Programacin C++ 116
Enteroint saldo_bancario=-1000; /* negros o rojos */unsigned numero_de_amarracos=30;
Con o sin signo Para contar o numerar Diferentes bases de representacin:
Hexadecimal(16): 0x0, -0x1, 0xFFF, 0xFea0Octal(8): 00, -01, 07777, 0177240
Decimal(10): 0, -1, 4095, 65184
-
Francisco Rosales & Jose Mara Pea Programacin C++ 117
Modificadores de tipos enterosunsigned char byte; /* 8 bits: 0 a 255 */signed char desfase; /* 8 bits: -127 a 128 */short int dia_anyo; /* 16 bits (aprox) */long microsegundos; /* 32 bits (aprox) */long long n_atomos; /* 64 bits (GNU C)*/ Pueden combinarse Si derivan de int puede omitirse El tamao depende de compilador y arquitectura Normalmente se usa simplemente int
-
Francisco Rosales & Jose Mara Pea Programacin C++ 118
Realfloat angulo, distancia=42E-11;double PI=3.14159265358979323846;
Nmeros positivos o negativos con o sin decimales
coma flotante Notacin decimal o cientfica
42*10-11
-
Francisco Rosales & Jose Mara Pea Programacin C++ 119
Enumeradoenum {femenino, masculino} genero;genero = femenino;
Puede tomar cualquiera de los valores simblicos que se enumeran
Internamente se representan como entero
-
Francisco Rosales & Jose Mara Pea Programacin C++ 120
Punteroint * puntero_a_entero=NULL;
"Vale" la direccin de otra variable del tipo indicado
La constante NULL vale 0 y no se puede derreferenciar, pero si comparar
Son la base para las estructuras dinmicas de datos
Tipo al que apunta
-
Francisco Rosales & Jose Mara Pea Programacin C++ 121
Puntero Ej.int variable = 7;puntero_a_entero = & variable;*puntero_a_entero = 8;/* Ahora variable vale 8 */
...puntero_a_entero = NULL;*puntero_a_entero = 2; /* ERROR */
Operador direccin de
Operador derreferenciar
-
Francisco Rosales & Jose Mara Pea Programacin C++ 122
Paso de referencias por valor 1 Se recibe un puntero que apunta a la variableint reiniciar(int *p, int v) { Se modifica all donde apunta el puntero
*p = 0; v = 0; }...int x=2, y=2,*ptr; Se pasa el valor de la direccin de la variablereiniciar(&x,y); /* x == 0, y == 2 */ reiniciar(ptr, 5);/* ERROR porqu? */
-
Francisco Rosales & Jose Mara Pea Programacin C++ 123
Paso de referencias por valor 2 Se recibe un puntero que apunta a la variableint reiniciar(int *p, int v) { Se modifica all donde apunta el puntero
*p = 0; v = 0; }...int x=2, y=2,*ptr; Se pasa el valor de la direccin de la variablereiniciar(&x,y); /* x == 0, y == 2 */ reiniciar(ptr, 5);/* ERROR porqu? */
Acceso a direccin invlidaNo inicializado
-
Francisco Rosales & Jose Mara Pea Programacin C++ 124
Vectores y matriceschar vocal[5]={'a','e','i','o','u'};float tablero[8][8];
Agrupaciones de informacin homognea Se almacenan en memoria contigua Se indexan con enteros desde el 0
vocal[0] = 'A';tablero[8][8] = 2.1; /* ERROR FUERA */
-
Francisco Rosales & Jose Mara Pea Programacin C++ 125
Punteros y Arraysint Prim[9]={2,3,5,7,11,13,17,19,23};
El nombre de un vector es (equivale a) la direccin de su primer elemento
int * ptr = Prim; /* Prim == &Prim[0] */ Los punteros se indexan e incrementan en la
cuanta del tamao del tipo al que apuntanif (*ptr == ptr[0]) ... /* Siempre CIERTO */if (ptr[1] == Prim[1]) ... /* CIERTO */ptr++;if (*ptr == Prim[1]) ... /* CIERTO*/
-
Francisco Rosales & Jose Mara Pea Programacin C++ 126
Tiras de caracteres Constantes entre comillas dobles
char Hola[20] = "Hola Mundo!"; Es la declaracin de su valor inicial Luego NO se asignan as
Hola = "Adios"; /* ERROR */ Son tambin vectores de caracteres
if (Hola[0] == 'H') ... /* CIERTO */ El ltimo carcter ha de ser el nulo '\0'
if (Hola[11] == '\0') ... /* CIERTO */ Hemos reservado 20 caracteres pero slo
estamos usando 12!! (11 + el nulo)
-
Francisco Rosales & Jose Mara Pea Programacin C++ 127
Punteros y Stringschar Hola[12] = "Hola Mundo!";char * str = Hola;
Para manipular tiras existen funciones de bibliotecaint strlen(char*str); /* Devuelve longitud */if (strlen(str) == 11) ... /*CIERTO, pero ocupa 12*/
Para recorrer tiras usamos punteros a carctervoid strcopy(char * des, char * org) {
while ((*des++ = *org++)) /* '\0' vale 0 */continue;
}strcopy(str,"Adios");if (strlen(str) == 5) ... /* CIERTO, pero ocupa 6 */
-
Francisco Rosales & Jose Mara Pea Programacin C++ 128
Estructurasstruct Fecha {
int Anyo, Mes, Dia;} Nacimiento;
Agrupaciones de informacin heterognea Se almacenan en memoria contigua Sus campos se indexan con el punto
Nacimiento.Mes = 1;
-
Francisco Rosales & Jose Mara Pea Programacin C++ 129
Punteros y Structs IIstruct Fecha {
int Anyo, Mes, Dia;} Nacimiento, *ptr;ptr = &Nacimiento;
Derreferenciamos e indexamos el campo
*ptr.Anyo = 1970; utilizamos la notacin menos mayor (flecha)
ptr->Dia = 1;
-
Francisco Rosales & Jose Mara Pea Programacin C++ 130
Uniones I Similar a una estructura, pero sus campos
comparten la memoria (son alternativos)struct datos {
int a, x[2];char c;
} d;
union datos {int a, x[2];char c;
} d;
d.ad.x[0]d.x[1]
d.c
d.ad.x
d.c
-
Francisco Rosales & Jose Mara Pea Programacin C++ 131
Uniones II Varias representaciones del mismo dato
struct empleado { ... enum {en_nomina, a_destajo} tipo_contrato;
union { int sueldo_base; float euros_hora;
} sueldo; } fulano;float euros; if (fulano.tipo_contrato == a_destajo) {
euros = horas * fulano.sueldo.euros_hora; } else {
euros = fulano.sueldo.sueldo_base * 100; }
-
Francisco Rosales & Jose Mara Pea Programacin C++ 132
Conversin explcita de tipo Casting: mecanismo para explicitar el
cambio de tipo de expresin o variable Le indicamos al compilador que asumimos
la responsabilidadfloat f = 65.2;int a;char c;
a=(int) f; /* a vale 65 */c=(char) a; /* c vale 65 (Cdigo ASCII de 'A') */
-
Francisco Rosales & Jose Mara Pea Programacin C++ 133
Definicin de nuevos tipostypedef int logico; logico terminar_ya = 0;
typedef struct nodo * lista_t; typedef struct nodo {
int valor; lista_t siguiente;
} nodo_t; nodo_t nodos[400]; lista_t lista = NULL;
-
Francisco Rosales & Jose Mara Pea Programacin C++ 134
Estructuras dinmicas I Permiten manejar agrupaciones de
datos cuya cantidad desconocemos de antemano
Se construyen mediante otras estructuras con punteros para interconectarse
Los punteros con valor NULL marcan los extremos de la estructura
Se ubican en memoria dinmica
-
Francisco Rosales & Jose Mara Pea Programacin C++ 135
Memria dinmica I Se getiona sobre el HEAP, o parte superior del
segmento de datos, con las siguientes funciones:void *malloc(size_t);
Ubica espacio suficiente para los bytes indicados
void *calloc(size_t num, size_t size); Ubica espacio (inicializado a ceros) para num elementos de
tamao size
void *realloc(void *, size_t); Reubicar. Ajustar a nuevo tamao
void free(void *); Liberar espacio previamente ubicado
-
Francisco Rosales & Jose Mara Pea Programacin C++ 136
Memria dinmica IIint * ptr = malloc(sizeof(int));*ptr = 8;free(ptr);
char * str = malloc(strlen("Hola") + 1);strcpy(str, "Hola");str = realloc(str, 20);strcat(str, "y adios");str = realloc(str, strlen(str) + 1);free(str);
-
Francisco Rosales & Jose Mara Pea Programacin C++ 137
Estructuras dinmicas II Para usar estructuras dinmicas hay
que tener (o programar), funciones de utilidad sobre dicho tipo: Insertar y extraer un elemento Buscar por contenido Ordenar etc
-
Francisco Rosales & Jose Mara Pea Programacin C++ 138
Listas Estructura lineal de elementos, como
los eslabones de una cadena Simplemente / doblemente encadenada FIFO / LIFO
-
Francisco Rosales & Jose Mara Pea Programacin C++ 139
rboles Estructura arborescente de nodos. Un nodo raz Nodos hoja si no tienen descendientes
Binario / N-ario
-
Francisco Rosales & Jose Mara Pea Programacin C++ 140
Tablas Hash Estructura mixta compuesta de un de
punteros a otras estructuras dinmicas Utiliza una funcin de barajado (hash)
sobre un campo clave de cada elemento para acotar la bsqueda
-
Operadores
AritmticosDe asignacinLgicosDe bitOtros
-
Francisco Rosales & Jose Mara Pea Programacin C++ 142
Operadores Aritmticos= asignacin+ suma- resta* multiplicacin/ divisin% mdulo (resto)++ auto-incremento (pre post)-- auto-decremento (pre post)
-
Francisco Rosales & Jose Mara Pea Programacin C++ 143
Ej. Aritmticosint a = 5 - (2 * 2); int b; float f;a++; /* a = a + 1 */a=3; b=a++; /* a=4 b=3 */a=3; b=++a; /* a=4 b=4 */a=3; b=a--; /* a=2 b=3 */f=4/3; /* == 1 Div. entera */b=4%3; /* == 1 == (4 (4/3)*3)*/ f=4.0/3; /* == 1.333 Div. real */f=(float)4/3; /* == 1.333 Div. real */
-
Francisco Rosales & Jose Mara Pea Programacin C++ 144
Operadores de Asignacina *= 2; /* Igual a: a = a * 2; */a /= c+3; /* Igual a: a = a / (c+3); */
Usar cast en asignaciones entre variables y expresiones de diferente tipo:
a=(int)(f/2.34);
-
Francisco Rosales & Jose Mara Pea Programacin C++ 145
Operadores de Comparacin y Lgicos== Igual!= Distinto> Mayor>= Mayor o igual< Menor
-
Francisco Rosales & Jose Mara Pea Programacin C++ 146
Ej. Comparacin y Lgicos El valor resultante de evaluar operadores lgicos es
0 sii FALSO 1 sii CIERTOint a = (3>2 || 5==4) && !1; /* a = 0 (==FALSO) */int b = (3>2 || 5==4) && 7; /* b = 1 (==CIERTO) */
Toda expresin sirve de expresin lgica considerndose: FALSA si la expresin se evala a CERO CIERTA si la expresin se evala a cualquier otro valor
if (a) ... /* Idntico a: if (a != 0) ... */if (!b) ... /* Idntico a: if (b == 0) ... */
La evaluacin de expresiones lgicas es perezosaa = (3>2 || b==4); /* b==4 no se llega a evaluar */
-
Francisco Rosales & Jose Mara Pea Programacin C++ 147
Operadores de Bit& AND| OR^ XOR~ NOT> Desplazamiento a la derecha
-
Francisco Rosales & Jose Mara Pea Programacin C++ 148
Ej. De Bitunsigned char a = 48;unsigned char b = 19;unsigned char x,y,z,w,t,s;
x = a & b;y = a | b;z = a ^ b;w = ~a;t = a>>2;s = b
-
Francisco Rosales & Jose Mara Pea Programacin C++ 149
Operador sizeof() Vale el nmero de bytes que ocupa (en
memoria) una variable o un tipo de datosint a; if (sizeof(a) == sizeof(int)) ... /*CIERTO*/
Se sabe durante la compilacin NO es funcin sino operador
Relaciones conocidas:1 == sizeof(char)
-
Francisco Rosales & Jose Mara Pea Programacin C++ 150
Operador TernarioA ? B : C
Sii (A) entonces vale B, si no vale C
int num; char * str;...str = (num%2 ? "par" : "impar");
-
Funciones y Parmetros
Programa Principal y ArgumentosFuncin o Procedimiento
RecursividadPaso de parmetros
-
Francisco Rosales & Jose Mara Pea Programacin C++ 152
El programa principal I Es el punto de entrada al programa Imprescindible para conseguir un
ejecutable autnomo o programa Mnimo programa totalmente correcto
int main(void) {
return 0; }
-
Francisco Rosales & Jose Mara Pea Programacin C++ 153
Argumentos de invocacin I Los argumentos con los que es
invocado el ejecutable son accesibles desde la funcin principal main
int main(int argc, char* argv[])
int argc : Nmero de argumentoschar* argv[] : Argumentos de invocacin
-
Francisco Rosales & Jose Mara Pea Programacin C++ 154
Argumentos de invocacin II$ gcc prog.c -o prog$ ./prog uno dos tres cuatro
int main(int argc, char* argv[])argc == 5
argv[0] p r o g\0argv[1] u n o\0argv[2] d o s\0argv[3] t r e s\0argv[4] c u a t \0r o
NULLargv[5]
-
Francisco Rosales & Jose Mara Pea Programacin C++ 156
Argumentos de invocacin III#include using namespace std;
int main(int argc, char *argv[]){
cout
-
Francisco Rosales & Jose Mara Pea Programacin C++ 157
Funcin Procedimiento I Semejante a funcin matemtica Invocacin, argumentos, valor devuelto
Un nico punto de entrada Un nico punto de salida
Procedimiento Si no devuelve ningn valor
-
Francisco Rosales & Jose Mara Pea Programacin C++ 158
Funcionalidades II Crear una funcin
para cada bien delimitada funcionalidad o mtodo
de cada mdulo del programa
Aunque slo se use una vez! Programa = conjunto de funciones
-
Francisco Rosales & Jose Mara Pea Programacin C++ 159
Funcin descripcin III Qu es lo que hace (funcionalidad) El nombre debe resumirlo Ejemplo clsico
factorial(n) = n * (n-1) * ... * 2 * 1 factorial(0) = 1 Para n natural (entero no negativo)
-
Francisco Rosales & Jose Mara Pea Programacin C++ 160
Funcin declaracin IV Dice cmo se usarla No dice cmo est hecha Se declara su prototipo
unsigned factorial(unsigned);
Qu devuelve (tipo)
Qu hace (nombre)
Qu recibe (tipo)
Punto y coma
-
Francisco Rosales & Jose Mara Pea Programacin C++ 162
Funcin invocacin Vint main(void){
cout
-
Francisco Rosales & Jose Mara Pea Programacin C++ 163
Funcin definicin VIunsigned factorial(unsigned n)
{
unsigned result = 1;
/* Recorre de n a 2 */
for (; n > 1; n--)
result = result * n;
return result;
}
Parmetro formalVariable local
-
Francisco Rosales & Jose Mara Pea Programacin C++ 164
Ejercicio
Programe:
La funcin principal de un programa que
muestre el factorial de los nmeros
del 0 al 20 inclusive
-
Francisco Rosales & Jose Mara Pea Programacin C++ 166
Solucin
#include
using namespace std;
int main(void)
{
unsigned n;
for (n = 0; n
-
Francisco Rosales & Jose Mara Pea Programacin C++ 167
Ejercicio
Programe la siguiente funcin definida sobre
m y n naturales
binomial(m,n) = m! / (n!*(m-n)!)
-
Francisco Rosales & Jose Mara Pea Programacin C++ 168
Solucin
unsigned binomial(unsigned m, unsigned n)
{
return factorial(m) / (factorial(n)*factorial(m-n));
}
-
Francisco Rosales & Jose Mara Pea Programacin C++ 169
Funcin recursividad VII Facultad de las funciones de invocarse
a s mismas Forma natural de expresar ciertos
problemas autocontenidos Ejemplo clsico
factorial(n) = n * factorial(n-1) factorial(0) = 1
-
Francisco Rosales & Jose Mara Pea Programacin C++ 170
Ejercicio
Programe:
Una versin recursiva de la funcin:
factorial(0) = 1factorial(n) = n * factorial(n-1)
Para n natural (entero no negativo)
-
Francisco Rosales & Jose Mara Pea Programacin C++ 171
Solucinunsigned factorial(unsigned n)
{
if (n == 0)
n = 1;
else
n = n * factorial(n - 1);
return n;
}
-
Francisco Rosales & Jose Mara Pea Programacin C++ 172
Funcin recursividad VIII Funcionalmente equivalente iterar La implementacin:
no contiene ningn bucle pero si una condicin de terminacin
Es mucho ms difcil de seguir La recursin infinita es fatal
-
Francisco Rosales & Jose Mara Pea Programacin C++ 173
Paso de argumentos por valorint main(void){
unsigned num = 5, res;res = factorial(num);/* num sigue valiendo 5 */
Se pasa el valor de la expresin evaluada, no la variable en sEsto es siempre as en CEn C++ existe el paso por referencia
-
Francisco Rosales & Jose Mara Pea Programacin C++ 174
Modificadores de funcinstatic
Slo visible dentro del mdulo
extern Funcin (o variable) declarada, pero definida en
algn otro stio (Ej. en biblioteca)
inline Expandir su cdigo en vez llamar a la funcin Aumenta la eficiencia y el tamao del cdigo
-
Preproceso y Bibliotecas
PreprocesoBibliotecas
-
Herramientas de Desarrollo II
Compilacin separadaArchivador y bibliotecasConstructor y otras
-
Francisco Rosales & Jose Mara Pea Programacin C++ 197
Compilacin y montajeSon etapas separadas
Compilacin: traducir de formato fuente a formato objeto (lenguaje mquina, ms lista de referencias externas no resueltas)
Montaje: enlazar ficheros objeto entre s y con las bibliotecas necesarias, resolviendo todas las referencias externas
Se produce un ejecutable: en formato interno apto para situar el proceso en memoria para su ejecucin
-
Francisco Rosales & Jose Mara Pea Programacin C++ 200
Compilacin separada En la figura:
Compilacin separada de los mdulosmain.cpp y prim.cpp
Montaje de los objetos con las bibliotecasmain.o, prim.o y libstdc++ y otras (libm, libc)
Obtencin del fichero ejecutableprimes
-
Francisco Rosales & Jose Mara Pea Programacin C++ 201
Diagrama de fases
prim.h
prim.cpp
main.cpp
cmath
iostream
g++ -c
g++ -c
main.o
prim.old primes
cstdlib
libc.a
libm.a
Mdulos de
usuario
Ficheros estndar
de cabecera
Compilacinseparada
Ficheros objeto
Bibliotecas estndar Montaje Ejecutable
Dependen
Fich Herram Producto
Auto
entre si
Leyenda
libstdc++.a
-
Francisco Rosales & Jose Mara Pea Programacin C++ 202
Extensiones Le indican al compilador el contenido de
fichero, y el tratamiento que debe realizar: .c .cpp Fuentes de C y C++
Deben ser preprocesados, compilados y ensamblados .h Fichero de cabecera de C o de C++
(/usr/include y /usr/include/c++) Declaraciones de tipos de datos, prototipos y clases Deben ser preprocesados
.o Fichero objeto Deben ser enlazados (resueltos sus smbolos)
.a .so Bibliotecas esttica y dinmica Para resolver smbolos de funciones estndar usadas
-
Francisco Rosales & Jose Mara Pea Programacin C++ 203
Bibliotecas Utilizar cdigo probado, no reinventar
Consultar el manual Usar fichero(s) de cabecera
#include /* en C */#include // en C++ del std::
Montar contra la biblioteca (opcin l) libc.a Biblioteca estndar de C
Tiras de caracteres, entrada y salida estndar, etc. El montaje contra esta biblioteca es automtico
libm.a Biblioteca de clculo matemtico sqrt, pow, hypot, cos, atan, etc. Hay que incluir o Hay que montar con la opcin -lm
-
Francisco Rosales & Jose Mara Pea Programacin C++ 204
ar Manage Archive Para crear nuestras propias bibliotecas
-d Elimina ficheros -r Aade (o reemplaza) ficheros -u Igual que -r slo si es ms nuevo -t Muestra el contenido -v Verbose -x Extrae ficheros
-
Francisco Rosales & Jose Mara Pea Programacin C++ 205
Constructor Permite automatizar el proceso de
construccin de un programa que est convenientemente descompuesto en mltiples mdulos
Herramienta make
-
Francisco Rosales & Jose Mara Pea Programacin C++ 206
make Application Maintainer Determina qu partes de un programa
deben recompilarse Debe conocer las dependencias entre
los ficheros: Un fichero debe actualizarse si alguno de
los que depende es ms nuevo Makefile
Contiene las reglas de dependencia y mandatos para actualizarlo
-
Francisco Rosales & Jose Mara Pea Programacin C++ 207
Makefile I# Esto es un comentario CC=gcc # Esto son macros CFLAGS=-g OBJS2=test.o prim.o
all: primes test # Esta es la primera regla
primes: main.o prim.o # Esta es otra regla gcc -g -o primes main.o prim.o -lm # Este es el mandato asociado
test: $(OBJS2) # Aqu usamos las macros ${CC} ${CFLAGS} -o $@ ${OBJS2}
main.o prim.o test.o : prim.h # Esta es una dependencia.
clean: # Esta no depende de nada, es obligatoria. rm -f main.o ${OBJS2}
-
Francisco Rosales & Jose Mara Pea Programacin C++ 208
Makefile II Las lneas con mandatos deben tabuladas
make Dispara la primera regla make clean Explicitando la regla a disparar
La regla objetivo dispara sus dependencias recursivamente
Macros especiales $@, $*, $
-
Francisco Rosales & Jose Mara Pea Programacin C++ 209
Otras herramientas Existen variedad de herramientas tiles para
el desarrollador de cdigo gprof Realizar un perfil de ejecucin
Indica dnde se pierde el tiempo Dice qu optimizar
gcov Verificacin del programa Asegura que el 100% del cdigo han sido comprobado
indent Indentacin de ficheros fuente en C Da estilo uniforme al cdigo Es muy parametrizable
Programacin en C++Nmero de diapositiva 2ContenidosEl Entorno UNIXQu es UNIX?Cmo es UNIX!Cmo es Linux!UsuarioIGrupoIIPrivilegiosIIISuperusuarioIVSesin de trabajoIIntrprete de mandatosIIMandatosIIIman [what]Manual PagesProcesosIConcurrenciaIIJerarquaIIIrbol de FicherosITipos de objetoIIpwdPrint Working Directorycd [dir]Change Directoryls [-opt] [dirs...]List DirectoryDescriptores de ficheroIDescriptores estndarIIQu es programar?Cmo es un ordenador por dentro?Qu sabe hacer un ordenador?Para qu se usan los ordenadores?Ciclo de vida del softwareI Ciclo de vida del softwareIICiclo de vida del softwareIIICiclo de programacinICiclo de programacinIIEn resumenHerramientas de DesarrolloIEditorEl cdigo fuente CompilacinErrores y WarningsgccGNU C CompilerDepuradorIDepuradorIIFichero coregdb prog [core]GNU debuggerTcnicas de programacinTrminos abstractosEjercicioRazonamiento descendenteEjercicioModularizacinEjercicioEstructuras de ProgramacinEstructuras de ProgramacinSecuenciaISecuencia (ordinograma)IISecuencia (pseudocdigo)IIISecuencia (cdigo C++)IVSeleccinISeleccin IF-THENIISeleccin IF-THEN-ELSEIIISeleccin SWITCHIVIteracinIIteracin WHILEIIIteracin DO-WHILEIIIIteracin FORIVEstilo de CodificacinEstilo de codificacinNombradoINombrado MALIINombrado BIENIIIIndentacinIIndentacin MALIIIndentacin BIENIIIComentariosIComentarios MALIIComentarios BIENIIIRestriccionesIRestriccinIIRestriccinIIIRestriccinIVbreak y continue1break y continue2RestriccinVTipos y estructuras de datosVariables y constantesDeclaracin de variablesNombradoINombradoIImbito de vidaVisibilidadEjemplo de mbito y visibilidadModificadores de variablesTipos de datosValor y formatoTipos bsicosSin tipoLgicoCarcterEnteroModificadores de tipos enterosRealEnumeradoPunteroPuntero Ej.Paso de referencias por valor1Paso de referencias por valor2Vectores y matricesPunteros y ArraysTiras de caracteresPunteros y StringsEstructurasPunteros y StructsIIUnionesIUnionesIIConversin explcita de tipoDefinicin de nuevos tiposEstructuras dinmicasIMemria dinmicaIMemria dinmicaIIEstructuras dinmicasIIListasrbolesTablas HashOperadoresOperadores AritmticosEj. AritmticosOperadores de AsignacinOperadores de Comparaciny LgicosEj. Comparacin y LgicosOperadores de BitEj. De BitOperador sizeof()Operador TernarioFunciones y ParmetrosEl programa principalIArgumentos de invocacinIArgumentos de invocacinIIArgumentos de invocacin IIIFuncin ProcedimientoIFuncionalidadesIIFuncin descripcinIIIFuncin declaracinIVFuncin invocacinVFuncin definicinVIEjercicioSolucinEjercicioSolucinFuncin recursividadVIIEjercicioSolucinFuncin recursividadVIIIPaso de argumentos por valorModificadores de funcin Preproceso y BibliotecasHerramientas de DesarrolloIICompilacin y montajeCompilacin separadaDiagrama de fasesExtensionesBibliotecasarManage ArchiveConstructormakeApplication MaintainerMakefileIMakefileIIOtras herramientas