Programación en C++ -...

download Programación en C++ - laurel.datsi.fi.upm.eslaurel.datsi.fi.upm.es/.../cursos/cplusplus/programacion_c_.pdf · El entorno UNIX ¿Qué es programar? Herramientas de desarrollo I Técnicas

If you can't read please download the document

Transcript of Programación en C++ -...

  • 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