26
Facultad de Informática Universidad Complutense Apuntes de clase de la asignatura Fundamentos de la programación 1º curso Grado en Ingeniería en Informática Grado en Ingeniería del Software Grado en Ingeniería de Computadores 2012Ͳ2013 Luis Hernández Yáñez (Con contribuciones de Pablo Moreno Ger y Carlos Cervigón Rückauer) Licencia Creative Commons: Reconocimiento, No comercial y Compartir igual. http://creativecommons.org/licenses/byŞncŞsa/3.0/

Fundamentos de la programaciónwebs.um.es/eliseo/um/uploads/Main/FundamentosProgramac... · 2014-10-10 · La arquitectura de Von Neumann Dispositivos de E/S Una ALU de 2 bits (Wikipedia)

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Fundamentos de la programaciónwebs.um.es/eliseo/um/uploads/Main/FundamentosProgramac... · 2014-10-10 · La arquitectura de Von Neumann Dispositivos de E/S Una ALU de 2 bits (Wikipedia)

Facultad de InformáticaUniversidad Complutense

Apuntes de clase de la asignatura

Fundamentos de la programación

1º curso

Grado en Ingeniería en InformáticaGrado en Ingeniería del Software

Grado en Ingeniería de Computadores

2012 2013

Luis Hernández Yáñez

(Con contribuciones de Pablo Moreno Ger y Carlos Cervigón Rückauer)

Licencia Creative Commons:Reconocimiento, No comercial y Compartir igual.

http://creativecommons.org/licenses/by nc sa/3.0/

Page 2: Fundamentos de la programaciónwebs.um.es/eliseo/um/uploads/Main/FundamentosProgramac... · 2014-10-10 · La arquitectura de Von Neumann Dispositivos de E/S Una ALU de 2 bits (Wikipedia)

Esta publicación contiene los apuntes de clase de la asignaturaFundamentos de la programación, asignatura de 1º curso de los grados

que se imparten en la Facultad de Informática de la UCM.

Durante los dos primeros cursos en los que se ha impartido la asignatura,este material ha sido sometido a continuas revisiones y contribucionespor parte de los profesores que han impartido los distintos grupos

de la asignatura. Aunque el trabajo ha quedado bastante consolidado,estoy seguro de que todavía contiene muchas erratas. Si encuentras alguna,

no dudes, por favor, en hacérmelo saber y conseguir asíque la siguiente versión esté mejor depurada.

Quiero agradecer a todos los profesores que han impartido la asignaturasu contribución en el desarrollo del material, destacando especialmente

la labor de Pablo Moreno Ger y Carlos Cervigón Rückauer.

Luis Hernández YáñezProfesor de la Facultad de Informática de la UCM

Page 3: Fundamentos de la programaciónwebs.um.es/eliseo/um/uploads/Main/FundamentosProgramac... · 2014-10-10 · La arquitectura de Von Neumann Dispositivos de E/S Una ALU de 2 bits (Wikipedia)

Fundamentos de la programaciónFundamentos de la programación

1111

Informática, computadoras y programaciónInformática, computadoras y programación 22Lenguaje máquina y lenguaje ensambladorLenguaje máquina y lenguaje ensamblador 1212Lenguajes de programación de alto nivelLenguajes de programación de alto nivel 1515El Sistema OperativoEl Sistema Operativo 1818Un poco de historiaUn poco de historia 1919Programa informáticoPrograma informático 2525El lenguaje de programación C++El lenguaje de programación C++ 2626La Ingeniería del SoftwareLa Ingeniería del Software 2828Los lenguajes de programaciónLos lenguajes de programación 3030EjerciciosEjercicios 3535Un primer programa en C++Un primer programa en C++ 3737

zz

Herramientas de desarrolloHerramientas de desarrollo 4040Compilación, enlace y ejecuciónCompilación, enlace y ejecución 4141Más herramientas de desarrolloMás herramientas de desarrollo 4242

ernánd

ezYáñe

zernánd

ezYáñe

z

Un primer programa en C++: ejecuciónUn primer programa en C++: ejecución 4444C++: Un mejor CC++: Un mejor C 4545Referencias bibliográficasReferencias bibliográficas 4646

LuisH

LuisH

PáginaPágina 11Fundamentos de la programación: Computadoras y programaciónFundamentos de la programación: Computadoras y programación

Page 4: Fundamentos de la programaciónwebs.um.es/eliseo/um/uploads/Main/FundamentosProgramac... · 2014-10-10 · La arquitectura de Von Neumann Dispositivos de E/S Una ALU de 2 bits (Wikipedia)

¿Es la Informática una ciencia? ¿Una disciplina de ingeniería?¿Es la Informática una ciencia? ¿Una disciplina de ingeniería?¿O simplemente una tecnología, una invención, un proveedor¿O simplemente una tecnología, una invención, un proveedor¿O simplemente una tecnología, una invención, un proveedor¿O simplemente una tecnología, una invención, un proveedorde dispositivos informáticos? ¿Cuál es el fundamento intelectualde dispositivos informáticos? ¿Cuál es el fundamento intelectualde la disciplina? ¿Es algo pasajero o se diluirá en una generación?de la disciplina? ¿Es algo pasajero o se diluirá en una generación?

Task Force on the Core of Computer ScienceTask Force on the Core of Computer Science

InformáticaInformáticaff

zz

Diccionario de la R.A.E.Diccionario de la R.A.E.

ernánd

ezYáñe

zernánd

ezYáñe

zLuisH

LuisH

PáginaPágina 22Fundamentos de la programación: Computadoras y programaciónFundamentos de la programación: Computadoras y programación

¿Ordenador? ¿Computador? ¿Computadora?¿Ordenador? ¿Computador? ¿Computadora?

ComputadoraComputadora

¡Miles de millones de cálculos por segundo!¡Miles de millones de cálculos por segundo!

zz

¡Miles de millones de cálculos por segundo!¡Miles de millones de cálculos por segundo!

ernánd

ezYáñe

zernánd

ezYáñe

zLuisH

LuisH

PáginaPágina 33Fundamentos de la programación: Computadoras y programaciónFundamentos de la programación: Computadoras y programación

Page 5: Fundamentos de la programaciónwebs.um.es/eliseo/um/uploads/Main/FundamentosProgramac... · 2014-10-10 · La arquitectura de Von Neumann Dispositivos de E/S Una ALU de 2 bits (Wikipedia)

Las computadoras hoy están en todas partesLas computadoras hoy están en todas partes

¡Con múltiples formas distintas de un PC!¡Con múltiples formas distintas de un PC!

zzernánd

ezYáñe

zernánd

ezYáñe

zLuisH

LuisH

PáginaPágina 44Fundamentos de la programación: Computadoras y programaciónFundamentos de la programación: Computadoras y programación

Programación de computadorasProgramación de computadoras

ProgramaPrograma

¡resolver un problema!¡resolver un problema!

HardwareHardware

zz

HardwareHardware

SoftwareSoftware

ernánd

ezYáñe

zernánd

ezYáñe

z ff

LuisH

LuisH

PáginaPágina 55Fundamentos de la programación: Computadoras y programaciónFundamentos de la programación: Computadoras y programación

Page 6: Fundamentos de la programaciónwebs.um.es/eliseo/um/uploads/Main/FundamentosProgramac... · 2014-10-10 · La arquitectura de Von Neumann Dispositivos de E/S Una ALU de 2 bits (Wikipedia)

Parque JurásicoParque Jurásico

zzernánd

ezYáñe

zernánd

ezYáñe

zLuisH

LuisH

PáginaPágina 66Fundamentos de la programación: Computadoras y programaciónFundamentos de la programación: Computadoras y programación

Esquema generalEsquema general

MemoriaMemoriatemporaltemporal

Unidad Central de ProcesoUnidad Central de ProcesoCentral Processor UnitCentral Processor Unit

DispositivosDispositivosde entradade entrada

DispositivosDispositivosde salidade salida

DispositivosDispositivosde salidade salidaC.P.U.C.P.U.

zz

TecladoTecladoRatónRatónEscánerEscánerá lá l

MonitorMonitorImpresoraImpresoraAltavozAltavoz

MonitorMonitorImpresoraImpresoraAltavozAltavoz

MonitorMonitorImpresoraImpresoraAltavozAltavoz

ernánd

ezYáñe

zernánd

ezYáñe

z

AlmacenamientoAlmacenamientopermanentepermanente

AlmacenamientoAlmacenamientopermanentepermanente

TáctilTáctil�…�…

�…�…�…�…�…�…

LuisH

LuisH

PáginaPágina 77Fundamentos de la programación: Computadoras y programaciónFundamentos de la programación: Computadoras y programación

Page 7: Fundamentos de la programaciónwebs.um.es/eliseo/um/uploads/Main/FundamentosProgramac... · 2014-10-10 · La arquitectura de Von Neumann Dispositivos de E/S Una ALU de 2 bits (Wikipedia)

La arquitectura de VonLa arquitectura de Von NeumannNeumann

Dispositivos de E/SDispositivos de E/S

Una ALU de 2 bits (Wikipedia)Una ALU de 2 bits (Wikipedia)

C.P.U. (Procesador)C.P.U. (Procesador)

A.L.U.A.L.U.

( p )( p )

zz

MemoriaMemoria

A.L.U.A.L.U.Unidad AritméticoUnidad Aritmético LógicaLógica

ernánd

ezYáñe

zernánd

ezYáñe

z

Unidad de ControlUnidad de Control

LuisH

LuisH

PáginaPágina 88Fundamentos de la programación: Computadoras y programaciónFundamentos de la programación: Computadoras y programación

Unidad Central de Proceso (CPU)Unidad Central de Proceso (CPU)Registros de 8 / 16 / 32 / 64 bitsRegistros de 8 / 16 / 32 / 64 bits

CPU (Procesador)CPU (Procesador)

ALU (Unidad AritméticoALU (Unidad Aritmético Lógica)Lógica) Unidad de ControlUnidad de Control

gg

ALU (Unidad AritméticoALU (Unidad Aritmético Lógica)Lógica) Unidad de ControlUnidad de Control

Contador de programaContador de programaRegistro ARegistro A

R i BR i B

Registro 1Registro 1 Registro 2Registro 2

InstrucciónInstrucción

Registro BRegistro B

Registro CRegistro C

Registro DRegistro D

zz

gg

Registro ERegistro E Registro RRegistro R

ernánd

ezYáñe

zernánd

ezYáñe

z

Bus de datosBus de datos

LuisH

LuisH

PáginaPágina 99Fundamentos de la programación: Computadoras y programaciónFundamentos de la programación: Computadoras y programación

Bus de datosBus de datos

Page 8: Fundamentos de la programaciónwebs.um.es/eliseo/um/uploads/Main/FundamentosProgramac... · 2014-10-10 · La arquitectura de Von Neumann Dispositivos de E/S Una ALU de 2 bits (Wikipedia)

La memoriaLa memoria

MemoriaMemoria01

02

Cada celda tieneCada celda tieneuna dirección asociada.una dirección asociada.Celdas de 8 / 16 / 32 / 64 bitsCeldas de 8 / 16 / 32 / 64 bits

BusBus

02

03

04

05

Información volátil.Información volátil.

BusBusdede

datosdatos06

07

08

1 Bit = 0 / 11 Bit = 0 / 11 Byte = 8 bits1 Byte = 8 bits = 1 carácter / nº (0= 1 carácter / nº (0 255)255)1 Kilobyte (KB) = 1024 Bytes1 Kilobyte (KB) = 1024 Bytes

zz

. . . 1 Megabyte (MB) = 1024 KB1 Megabyte (MB) = 1024 KB1 Gigabyte (GB) = 1024 MB1 Gigabyte (GB) = 1024 MB1 Terabyte (TB) = 1024 GB1 Terabyte (TB) = 1024 GB

ernánd

ezYáñe

zernánd

ezYáñe

z

DirecciónDirección 1 Petabyte (PB) = 1024 TB1 Petabyte (PB) = 1024 TB

221010 = 1024= 1024

LuisH

LuisH

PáginaPágina 1010Fundamentos de la programación: Computadoras y programaciónFundamentos de la programación: Computadoras y programación

Los procesadores trabajan con ceros y unosLos procesadores trabajan con ceros y unosByteByteByteByte

InstrucciónInstrucción SignificadoSignificadoA0 2FA0 2F Acceder a la posición de memoria 2FAcceder a la posición de memoria 2F

zz

A0 2FA0 2F Acceder a la posición de memoria 2FAcceder a la posición de memoria 2F3E 013E 01 Copiar el dato en el registro 1 de la ALUCopiar el dato en el registro 1 de la ALUA0 30A0 30 Acceder a la posición de memoria 30Acceder a la posición de memoria 303E 023E 02 Copiar el dato en el registro 2 de la ALUCopiar el dato en el registro 2 de la ALU

ernánd

ezYáñe

zernánd

ezYáñe

z 3E 023E 02 Copiar el dato en el registro 2 de la ALUCopiar el dato en el registro 2 de la ALU1D1D SumarSumarB3 31B3 31 Guardar el resultado en memoria (31)Guardar el resultado en memoria (31)

LuisH

LuisH

PáginaPágina 1111Fundamentos de la programación: Computadoras y programaciónFundamentos de la programación: Computadoras y programación

Page 9: Fundamentos de la programaciónwebs.um.es/eliseo/um/uploads/Main/FundamentosProgramac... · 2014-10-10 · La arquitectura de Von Neumann Dispositivos de E/S Una ALU de 2 bits (Wikipedia)

CPU (Procesador)CPU (Procesador) MemoriaMemoria

ALUALU UCUC

C.P.C.P.

0101 A0A0

0202 2F2F

0303 3E3E

2D2D

2E2E

2F2F 03030101

Inst.Inst.0404 0101

0505 A0A0

0606 3030

3030 0505

3131

3232

0707 3E3E

0808 0202

0909 1D1D

3333

3434

. . .. . .

ProgramaPrograma

Dir.Dir.

zz

0A0A B3B3

0B0B 3131

. . .. . .0101

ProgramaProgramaen memoriaen memoria

ernánd

ezYáñe

zernánd

ezYáñe

z

Bus de datosBus de datos

0101

LuisH

LuisH

PáginaPágina 1212Fundamentos de la programación: Computadoras y programaciónFundamentos de la programación: Computadoras y programación

Bus de datosBus de datos

zzernánd

ezYáñe

zernánd

ezYáñe

zLuisH

LuisH

PáginaPágina 1313Fundamentos de la programación: Computadoras y programaciónFundamentos de la programación: Computadoras y programación

Page 10: Fundamentos de la programaciónwebs.um.es/eliseo/um/uploads/Main/FundamentosProgramac... · 2014-10-10 · La arquitectura de Von Neumann Dispositivos de E/S Una ALU de 2 bits (Wikipedia)

A0A0 READ 3EREAD 3E REG 1DREG 1D ADD �…ADD �…

READ 2FREAD 2FREG 01REG 01

Código fuenteCódigo fuente(lenguaje ensamblador)(lenguaje ensamblador)

READ 30READ 30REG 02REG 02ADDADD Programa ensambladorPrograma ensamblador

zz

ADDADDWRITE 31WRITE 31

CódigoCódigo objetoobjeto

gg

ernánd

ezYáñe

zernánd

ezYáñe

z CódigoCódigo objetoobjeto(lenguaje máquina)(lenguaje máquina)

LuisH

LuisH

PáginaPágina 1414Fundamentos de la programación: Computadoras y programaciónFundamentos de la programación: Computadoras y programación

resultado = dato1 + dato2;resultado = dato1 + dato2;resultado = dato1 + dato2;resultado = dato1 + dato2;

zzernánd

ezYáñe

zernánd

ezYáñe

zLuisH

LuisH

PáginaPágina 1515Fundamentos de la programación: Computadoras y programaciónFundamentos de la programación: Computadoras y programación

Page 11: Fundamentos de la programaciónwebs.um.es/eliseo/um/uploads/Main/FundamentosProgramac... · 2014-10-10 · La arquitectura de Von Neumann Dispositivos de E/S Una ALU de 2 bits (Wikipedia)

TraducciónTraducciónCódigo fuenteCódigo fuente

#include <iostream>#include <iostream>using namespace std;using namespace std;

int main()int main()

C il dC il d

int main()int main(){{

cout << "Hola Mundo!" << endl;cout << "Hola Mundo!" << endl;return 0;return 0;

}}

CompiladorCompilador

CódiCódi

Código objetoCódigo objeto 0100010100111010011100�…0100010100111010011100�…

zz

EnlazadorEnlazadorCódigoCódigoobjeto deobjeto debibliotecabiblioteca

ernánd

ezYáñe

zernánd

ezYáñe

z

ProgramaProgramaejecutableejecutable

Para una arquitectura concretaPara una arquitectura concretay un Sistema Operativo concretoy un Sistema Operativo concreto

LuisH

LuisH

PáginaPágina 1616Fundamentos de la programación: Computadoras y programaciónFundamentos de la programación: Computadoras y programación

Genealogía de lenguajesGenealogía de lenguajes Versiones / EstándaresVersiones / EstándaresPrologPrologPrologPrologPrologPrologPrologProlog

C#C#C#C#C#C#

JavaJavaJavaJavaJavaJavaC++C++C++C++C++C++PL/IPL/IPL/IPL/IPL/IPL/ICOBOLCOBOLCOBOLCOBOL

FORTRANFORTRANFORTRANFORTRAN

PythonPythonPythonPythonPythonPythonModulaModulaModulaModulaModulaModula

C#C#C#C#C#C#CCCCCC

PascalPascalPascalPascalPascalPascal

CPLCPLCPLCPLCPLCPL

ALGOLALGOLALGOLALGOLALGOLALGOL

FORTRANFORTRANFORTRANFORTRAN

BASICBASICBASICBASICBASICBASIC

EiffelEiffelEiffelEiffelEiffelEiffel

ModulaModulaModulaModulaModulaModula

AdaAdaAdaAdaAdaAda

PascalPascalPascalPascalPascalPascalALGOLALGOLALGOLALGOLALGOLALGOL

zz

RubyRubyRubyRubyRubyRubyFuente:Fuente: http://www.levenez.com/lang/http://www.levenez.com/lang/Fuente:Fuente: http://www.levenez.com/lang/http://www.levenez.com/lang/

SmalltalkSmalltalkSmalltalkSmalltalkSmalltalkSmalltalkSimulaSimulaSimulaSimulaSimulaSimula

ernánd

ezYáñe

zernánd

ezYáñe

z

LogoLogoLogoLogoLogoLogo

HaskellHaskellHaskellHaskellSchemeSchemeSchemeSchemeSchemeSchemeLispLispLispLisp

LuisH

LuisH

PáginaPágina 1717Fundamentos de la programación: Computadoras y programaciónFundamentos de la programación: Computadoras y programación

Page 12: Fundamentos de la programaciónwebs.um.es/eliseo/um/uploads/Main/FundamentosProgramac... · 2014-10-10 · La arquitectura de Von Neumann Dispositivos de E/S Una ALU de 2 bits (Wikipedia)

Funcionalidad básica de la computadoraFuncionalidad básica de la computadora

�—�—

�—�—

�—�—

�—�—

zz

�—�—

ernánd

ezYáñe

zernánd

ezYáñe

z

�—�—

LuisH

LuisH

PáginaPágina 1818Fundamentos de la programación: Computadoras y programaciónFundamentos de la programación: Computadoras y programación

prehistoriaprehistoria

LaLa PascalinaPascalina (Wikipedia)(Wikipedia)

Lady AdaLady Ada LovelaceLovelacees consideradaes consideradala primerala primera

dd

zz

programadora.programadora.

Álgebra deÁlgebra de BooleBoole

ernánd

ezYáñe

zernánd

ezYáñe

z Álgebra deÁlgebra de BooleBoole

LuisH

LuisH

PáginaPágina 1919Fundamentos de la programación: Computadoras y programaciónFundamentos de la programación: Computadoras y programación

Page 13: Fundamentos de la programaciónwebs.um.es/eliseo/um/uploads/Main/FundamentosProgramac... · 2014-10-10 · La arquitectura de Von Neumann Dispositivos de E/S Una ALU de 2 bits (Wikipedia)

ENIAC (Wikipedia)ENIAC (Wikipedia)

heedmane files wordpress comheedmane files wordpress comheedmane.files.wordpress.comheedmane.files.wordpress.com

zz

IBM 360 (Wikipedia)IBM 360 (Wikipedia)

ernánd

ezYáñe

zernánd

ezYáñe

zLuisH

LuisH

PáginaPágina 2020Fundamentos de la programación: Computadoras y programaciónFundamentos de la programación: Computadoras y programación

disquetedisquetedisquetedisquete

CreeperCreeper Intel Corp. (Wikipedia)Intel Corp. (Wikipedia)pp

AppelAppel II (Wikipedia)II (Wikipedia)

zz

AppelAppel II (Wikipedia)II (Wikipedia)

ernánd

ezYáñe

zernánd

ezYáñe

zLuisH

LuisH

PáginaPágina 2121Fundamentos de la programación: Computadoras y programaciónFundamentos de la programación: Computadoras y programación

Page 14: Fundamentos de la programaciónwebs.um.es/eliseo/um/uploads/Main/FundamentosProgramac... · 2014-10-10 · La arquitectura de Von Neumann Dispositivos de E/S Una ALU de 2 bits (Wikipedia)

PacmanPacmanPacmanPacman

IBM PC (Wikipedia)IBM PC (Wikipedia)

zz

WorldWorld WideWide WebWeb LinuxLinux

ernánd

ezYáñe

zernánd

ezYáñe

zLuisH

LuisH

PáginaPágina 2222Fundamentos de la programación: Computadoras y programaciónFundamentos de la programación: Computadoras y programación

zzernánd

ezYáñe

zernánd

ezYáñe

zLuisH

LuisH

PáginaPágina 2323Fundamentos de la programación: Computadoras y programaciónFundamentos de la programación: Computadoras y programación

Page 15: Fundamentos de la programaciónwebs.um.es/eliseo/um/uploads/Main/FundamentosProgramac... · 2014-10-10 · La arquitectura de Von Neumann Dispositivos de E/S Una ALU de 2 bits (Wikipedia)

zzernánd

ezYáñe

zernánd

ezYáñe

zLuisH

LuisH

PáginaPágina 2424Fundamentos de la programación: Computadoras y programaciónFundamentos de la programación: Computadoras y programación

¿Qué es programar?¿Qué es programar?D i l t tD i l t t á idá id t tt t l ti hl ti hDecirle a un tontoDecirle a un tontomuymuy rápidorápido exactamenteexactamente lo que tiene que hacer.lo que tiene que hacer.

¡No hay que olvidarse de comprobar que funciona!¡No hay que olvidarse de comprobar que funciona!

zz

ProgramaProgramaEntradaEntrada SalidaSalida

ernánd

ezYáñe

zernánd

ezYáñe

zLuisH

LuisH

PáginaPágina 2525Fundamentos de la programación: Computadoras y programaciónFundamentos de la programación: Computadoras y programación

Page 16: Fundamentos de la programaciónwebs.um.es/eliseo/um/uploads/Main/FundamentosProgramac... · 2014-10-10 · La arquitectura de Von Neumann Dispositivos de E/S Una ALU de 2 bits (Wikipedia)

El lenguaje C++El lenguaje C++

#include <iostream>#include <iostream>using namespaceusing namespace std;std;

Hola Mundo!

g pg p ;;

intint main()main(){{

cout <<cout << "Hola Mundo!""Hola Mundo!" << endl;<< endl; // Muestra Hola Mundo!// Muestra Hola Mundo!

zz

returnreturn 00;;}}

ernánd

ezYáñe

zernánd

ezYáñe

z }}

LuisH

LuisH

PáginaPágina 2626Fundamentos de la programación: Computadoras y programaciónFundamentos de la programación: Computadoras y programación

zzernánd

ezYáñe

zernánd

ezYáñe

zLuisH

LuisH

PáginaPágina 2727Fundamentos de la programación: Computadoras y programaciónFundamentos de la programación: Computadoras y programación

Page 17: Fundamentos de la programaciónwebs.um.es/eliseo/um/uploads/Main/FundamentosProgramac... · 2014-10-10 · La arquitectura de Von Neumann Dispositivos de E/S Una ALU de 2 bits (Wikipedia)

La programación es sólo una etapa del proceso de desarrollo.La programación es sólo una etapa del proceso de desarrollo.

PlanificaciónPlanificación

AnálisisAnálisisAnálisisAnálisis

a cac óa cac ó

DiseñoDiseñoDiseñoDiseño

zz P b d ióP b d ióP b d ióP b d ió

ProgramaciónProgramaciónProgramaciónProgramación

ernánd

ezYáñe

zernánd

ezYáñe

z

MantenimientoMantenimientoMantenimientoMantenimiento

Prueba y depuraciónPrueba y depuraciónPrueba y depuraciónPrueba y depuración

LuisH

LuisH

PáginaPágina 2828Fundamentos de la programación: Computadoras y programaciónFundamentos de la programación: Computadoras y programación

a te e toa te e toa te e toa te e to

CasaCasa SoftwareSoftware

AnálisisAnálisisQuiero Quiero 3 habitaciones3 habitaciones,,2 2 baños, baños, garaje, ...garaje, ...

¿Qué tiene que hacer ¿Qué tiene que hacer exactamente exactamente el el software?software?

DiseñoDiseñoPlanos, diseño circuito Planos, diseño circuito eléctrico y de eléctrico y de agua, ...agua, ...

¿Cómo vamos ¿Cómo vamos aaorganizar el organizar el softwaresoftware??¿¿Qué hará cada parte?Qué hará cada parte?

ProgramaciónProgramaciónSe construye la Se construye la casa.casa. Se construye el Se construye el software.software.

P bP bSe comprueba la solidez de la Se comprueba la solidez de la Ponemos a prueba nuestro Ponemos a prueba nuestro

zz

PruebaPruebaestructura, el funcionamiento de estructura, el funcionamiento de las instalaciones, el las instalaciones, el acabado, ...acabado, ...

software, incluso en software, incluso en situaciones situaciones límite.límite.

MantenimientoMantenimientoAlgunas Algunas reformas: reformas: se cierra se cierra

la la terraza, se instala aire terraza, se instala aire Pequeñas modificaciones o Pequeñas modificaciones o

correcciones, actualizaciones, correcciones, actualizaciones,

ernánd

ezYáñe

zernánd

ezYáñe

z MantenimientoMantenimiento,,acondicionado, ...acondicionado, ...

, ,, ,etc...etc...

LuisH

LuisH

PáginaPágina 2929Fundamentos de la programación: Computadoras y programaciónFundamentos de la programación: Computadoras y programación

Page 18: Fundamentos de la programaciónwebs.um.es/eliseo/um/uploads/Main/FundamentosProgramac... · 2014-10-10 · La arquitectura de Von Neumann Dispositivos de E/S Una ALU de 2 bits (Wikipedia)

Elementos de un lenguajeElementos de un lenguaje

#include <iostream>#include <iostream>using namespaceusing namespace std;std;#include <iostream>#include <iostream>using namespaceusing namespace std;std;

DirectivaDirectivaDirectivaDirectiva

bbbb

zz

intint main()main(){{

cout <<cout << "¡Hola Mundo!""¡Hola Mundo!" << endl;<< endl; // Muestra Hola Mundo!// Muestra Hola Mundo!

intint main()main(){{

cout <<cout << "¡Hola Mundo!""¡Hola Mundo!" << endl;<< endl; // Muestra Hola Mundo!// Muestra Hola Mundo!

SubprogramaSubprogramaSubprogramaSubprograma

ComentarioComentarioComentarioComentarioInstrucciónInstrucciónInstrucciónInstrucción DatoDatoDatoDato

ernánd

ezYáñe

zernánd

ezYáñe

z

returnreturn 00;;}}

returnreturn 00;;}}InstrucciónInstrucciónInstrucciónInstrucción DatoDatoDatoDato

LuisH

LuisH

Fundamentos de la programación: Computadoras y programaciónFundamentos de la programación: Computadoras y programación PáginaPágina 3030

Sintaxis y semánticaSintaxis y semántica

�—�—

�—�—

zzernánd

ezYáñe

zernánd

ezYáñe

zLuisH

LuisH

Fundamentos de la programación: Computadoras y programaciónFundamentos de la programación: Computadoras y programación PáginaPágina 3131

Page 19: Fundamentos de la programaciónwebs.um.es/eliseo/um/uploads/Main/FundamentosProgramac... · 2014-10-10 · La arquitectura de Von Neumann Dispositivos de E/S Una ALU de 2 bits (Wikipedia)

Especificación de la sintaxisEspecificación de la sintaxisBackusBackus NaurNaur FormFormBackusBackus NaurNaur FormForm

<numero entero> ::= <signo opcional><secuencia de dígitos><numero entero> ::= <signo opcional><secuencia de dígitos>

BNF<numero entero> ::= <signo opcional><secuencia de dígitos><numero entero> ::= <signo opcional><secuencia de dígitos><signo opcional> ::= +|<signo opcional> ::= +| |<nada>|<nada><secuencia de dígitos> ::= <dígito>|<dígito><secuencia de dígitos><secuencia de dígitos> ::= <dígito>|<dígito><secuencia de dígitos><dígito> ::= 0|1|2|3|4|5|6|7|8|9<dígito> ::= 0|1|2|3|4|5|6|7|8|9

| significa ó +23+23

zz

<nada> ::=<nada> ::= | significa ó +23+23159159

1374137411 3434++++

ernánd

ezYáñe

zernánd

ezYáñe

z

3.43.4002002

++0 .. 90 .. 9

++0 .. 90 .. 9

LuisH

LuisH

Fundamentos de la programación: Computadoras y programaciónFundamentos de la programación: Computadoras y programación PáginaPágina 3232

BackusBackus NaurNaur FormForm<numero entero> ::= <signo opcional><secuencia de dígitos><numero entero> ::= <signo opcional><secuencia de dígitos>g p gg p g<signo opcional> ::= +|<signo opcional> ::= +| |<nada>|<nada><secuencia de dígitos> ::= <dígito>|<dígito><secuencia de dígitos><secuencia de dígitos> ::= <dígito>|<dígito><secuencia de dígitos><dígito> ::= 0|1|2|3|4|5|6|7|8|9<dígito> ::= 0|1|2|3|4|5|6|7|8|9<nada> ::=<nada> ::=

+23+23<numero entero> ::= <signo opcional><secuencia de dígitos><numero entero> ::= <signo opcional><secuencia de dígitos>::=::= ++<secuencia de dígitos> ::=<secuencia de dígitos> ::= ++<dígito><secuencia de dígitos><dígito><secuencia de dígitos>:::: ++<secuencia de dígitos> ::<secuencia de dígitos> :: ++<dígito><secuencia de dígitos><dígito><secuencia de dígitos>::=::= +2+2<secuencia de dígitos> ::=<secuencia de dígitos> ::= +2+2<dígito> ::=<dígito> ::= +23+2313741374<numero entero> ::= <signo opcional><secuencia de dígitos><numero entero> ::= <signo opcional><secuencia de dígitos>

i d dí i dí i i d dí ii d dí i dí i i d dí i

zz

::= <secuencia de dígitos> ::= <dígito><secuencia de dígitos>::= <secuencia de dígitos> ::= <dígito><secuencia de dígitos>::=::= 11<secuencia de dígitos> ::=<secuencia de dígitos> ::= 11<dígito><secuencia de dígitos><dígito><secuencia de dígitos>::=::= 1313<secuencia de dígitos> ::=<secuencia de dígitos> ::= 1313<dígito><secuencia de dígitos><dígito><secuencia de dígitos>::=::= 137137<secuencia de dígitos> ::=<secuencia de dígitos> ::= 137137<dígito> ::=<dígito> ::= 13741374

ernánd

ezYáñe

zernánd

ezYáñe

z :::: 137137 secuencia de dígitos ::secuencia de dígitos :: 137137 dígito ::dígito :: 1374137411 3434<numero entero> ::= <signo opcional><secuencia de dígitos><numero entero> ::= <signo opcional><secuencia de dígitos>::=::= <secuencia de dígitos> ::= <dígito><secuencia de dígitos><secuencia de dígitos> ::= <dígito><secuencia de dígitos>

11 i d dí ii d dí i ERRORERROR (( dí i )dí i )

LuisH

LuisH

Fundamentos de la programación: Computadoras y programaciónFundamentos de la programación: Computadoras y programación PáginaPágina 3333

::=::= 11<secuencia de dígitos> ::=<secuencia de dígitos> ::= ERRORERROR (( nono es <dígito>)es <dígito>)

Page 20: Fundamentos de la programaciónwebs.um.es/eliseo/um/uploads/Main/FundamentosProgramac... · 2014-10-10 · La arquitectura de Von Neumann Dispositivos de E/S Una ALU de 2 bits (Wikipedia)

Diagramas de sintaxisDiagramas de sintaxis

++++22223333+23+23+23+23 ++

0 .. 90 .. 90 .. 90 .. 9 22223333

11113333777744441374137413741374 ++

0 .. 90 .. 90 .. 90 .. 9

zz 1111????11 343411 3434 ++

ernánd

ezYáñe

zernánd

ezYáñe

z 1111????0 .. 90 .. 90 .. 90 .. 9

LuisH

LuisH

Fundamentos de la programación: Computadoras y programaciónFundamentos de la programación: Computadoras y programación PáginaPágina 3434

Notación BNFNotación BNF

<identificador> ::= <c><m><resto><identificador> ::= <c><m><resto>t | tt | t<resto> ::= <c> | <c><resto><resto> ::= <c> | <c><resto>

<c> ::= <n> | <m><c> ::= <n> | <m><n> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9<n> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9<m> ::= A | B | C<m> ::= A | B | C

zz 1AB1AB ABAcABAc 42784278 1B1B

ernánd

ezYáñe

zernánd

ezYáñe

zLuisH

LuisH

PáginaPágina 3535Fundamentos de la programación:Fundamentos de la programación: Computadoras y programación

Page 21: Fundamentos de la programaciónwebs.um.es/eliseo/um/uploads/Main/FundamentosProgramac... · 2014-10-10 · La arquitectura de Von Neumann Dispositivos de E/S Una ALU de 2 bits (Wikipedia)

Diagramas sintácticosDiagramas sintácticos

ProgramaProgramaProgramaPrograma BloqueBloque ..CabeceraCabeceraProgramaPrograma BloqueBloque ..CabeceraCabecera

CabeceraCabeceraCabeceraCabecera IdentificadorIdentificadorPROGRAMPROGRAMCabeceraCabecera IdentificadorIdentificadorPROGRAMPROGRAM

((

,,

IdentificadorIdentificador )) ;;((

,,

IdentificadorIdentificador )) ;;

zz

Expresión simpleExpresión simple TérminoTérmino++

Expresión simpleExpresión simpleExpresión simpleExpresión simple TérminoTérmino++

ernánd

ezYáñe

zernánd

ezYáñe

z

++TérminoTérmino

oror++TérminoTérmino

oror

LuisH

LuisH

PáginaPágina 3636Fundamentos de la programación:Fundamentos de la programación: Computadoras y programación

é oé oé oé o

Hola Mundo!Hola Mundo!

#include <iostream>#include <iostream>ii ddusing namespaceusing namespace std;std;

intint main()main() // main() es donde empieza la ejecución// main() es donde empieza la ejecuciónintint main()main() // main() es donde empieza la ejecución// main() es donde empieza la ejecución

{{cout <<cout << "Hola Mundo!""Hola Mundo!" << endl;<< endl; // Mostrar Hola Mundo!// Mostrar Hola Mundo!

zz

;; ////returnreturn 00;;

}}

ernánd

ezYáñe

zernánd

ezYáñe

zLuisH

LuisH

PáginaPágina 3737Fundamentos de la programación: Computadoras y programaciónFundamentos de la programación: Computadoras y programación

Page 22: Fundamentos de la programaciónwebs.um.es/eliseo/um/uploads/Main/FundamentosProgramac... · 2014-10-10 · La arquitectura de Von Neumann Dispositivos de E/S Una ALU de 2 bits (Wikipedia)

Análisis del programaAnálisis del programaBibliotecaBiblioteca

#include <iostream>#include <iostream>using namespaceusing namespace std;std;

DirectivaDirectiva

InstrucciónInstrucción

BibliotecaBiblioteca

Espacio de nombresEspacio de nombres

g pg p ;;

Palabras reservadasPalabras reservadasTipoTipo

intint main()main(){{

DeclaraciónDeclaración Cabecera de la funciónCabecera de la función

igo

igo Cadena de caracteresCadena de caracteres ConstanteConstanteVariableVariable

zz

cout <<cout << "Hola Mundo!""Hola Mundo!" << endl;<< endl;

returnreturn 00;;

InstrucciónInstrucción

InstrucciónInstrucciónDatos literalesDatos literales

quede

cód

quede

cód

OperadorOperadorOperadorOperador

ernánd

ezYáñe

zernánd

ezYáñe

z returnreturn 00;;}}

L i i iL i i i

InstrucciónInstrucción

Cuerpo de la funciónCuerpo de la función

Bloq

Bloq NúmeroNúmero

LuisH

LuisH

PáginaPágina 3838

Las instrucciones terminan enLas instrucciones terminan en ;;

Fundamentos de la programación: Computadoras y programaciónFundamentos de la programación: Computadoras y programación

Hola Mundo!Hola Mundo!

cout <<cout << "Hola Mundo!""Hola Mundo!" << endl<< endlcout <<cout << Hola Mundo!Hola Mundo! << endl<< endl

zzernánd

ezYáñe

zernánd

ezYáñe

z

¡El estilo importa!¡El estilo importa!

LuisH

LuisH

PáginaPágina 3939Fundamentos de la programación: Computadoras y programaciónFundamentos de la programación: Computadoras y programación

Page 23: Fundamentos de la programaciónwebs.um.es/eliseo/um/uploads/Main/FundamentosProgramac... · 2014-10-10 · La arquitectura de Von Neumann Dispositivos de E/S Una ALU de 2 bits (Wikipedia)

EditorEditor

zz

Herramientas de desarrolloHerramientas de desarrolloHerramientas de desarrolloHerramientas de desarrollo

ernánd

ezYáñe

zernánd

ezYáñe

zLuisH

LuisH

PáginaPágina 4040Fundamentos de la programación: Computadoras y programaciónFundamentos de la programación: Computadoras y programación

hola cpphola cpphola cpphola cpp hola objhola objhola objhola objhola objhola objhola.cpphola.cpp(código fuente)(código fuente)hola.cpphola.cpp

(código fuente)(código fuente)hola.objhola.obj

(código objeto)(código objeto)hola.objhola.obj

(código objeto)(código objeto)hola.objhola.obj

(código objeto)(código objeto)

Código objeto deCódigo objeto dela bibliotecala biblioteca iostreamiostream

Código objeto deCódigo objeto dela bibliotecala biblioteca iostreamiostream

Código objeto deCódigo objeto dela bibliotecala biblioteca iostreamiostreamla bibliotecala biblioteca iostreamiostreamla bibliotecala biblioteca iostreamiostreamla bibliotecala biblioteca iostreamiostream

zz

hola.exehola.exe(ejecutable)(ejecutable)hola.exehola.exe(ejecutable)(ejecutable)hola.exehola.exe(ejecutable)(ejecutable)

Hola Mundo!Hola Mundo!

ernánd

ezYáñe

zernánd

ezYáñe

zLuisH

LuisH

PáginaPágina 4141Fundamentos de la programación: Computadoras y programaciónFundamentos de la programación: Computadoras y programación

Page 24: Fundamentos de la programaciónwebs.um.es/eliseo/um/uploads/Main/FundamentosProgramac... · 2014-10-10 · La arquitectura de Von Neumann Dispositivos de E/S Una ALU de 2 bits (Wikipedia)

CompiladorCompilador

zz

Herramientas de desarrolloHerramientas de desarrolloHerramientas de desarrolloHerramientas de desarrollo

ernánd

ezYáñe

zernánd

ezYáñe

zLuisH

LuisH

PáginaPágina 4242Fundamentos de la programación: Computadoras y programaciónFundamentos de la programación: Computadoras y programación

Entornos de desarrolloEntornos de desarrollo

�—�—

�—�—

zz

Herramientas de desarrolloHerramientas de desarrolloHerramientas de desarrolloHerramientas de desarrollo

ernánd

ezYáñe

zernánd

ezYáñe

zLuisH

LuisH

PáginaPágina 4343Fundamentos de la programación: Computadoras y programaciónFundamentos de la programación: Computadoras y programación

Page 25: Fundamentos de la programaciónwebs.um.es/eliseo/um/uploads/Main/FundamentosProgramac... · 2014-10-10 · La arquitectura de Von Neumann Dispositivos de E/S Una ALU de 2 bits (Wikipedia)

¿Qué hace el programa?¿Qué hace el programa?i ()i ()main()main()

Pantalla (Pantalla (coutcout))InicioInicio

_Hola Mundo!Hola Mundo!_

cout <<cout << "Hola Mundo!""Hola Mundo!" << endl;<< endl;cout <<cout << "Hola Mundo!""Hola Mundo!" << endl;<< endl;

zz

Hola Mundo!Hola Mundo!

returnreturn 00;;returnreturn 00;;

ernánd

ezYáñe

zernánd

ezYáñe

z

00

FinFin

LuisH

LuisH

PáginaPágina 4444Fundamentos de la programación: Computadoras y programaciónFundamentos de la programación: Computadoras y programación

La base de C++: El lenguaje CLa base de C++: El lenguaje C

�—�—

�—�—

zzernánd

ezYáñe

zernánd

ezYáñe

zLuisH

LuisH

PáginaPágina 4545Fundamentos de la programación: Computadoras y programaciónFundamentos de la programación: Computadoras y programación

Page 26: Fundamentos de la programaciónwebs.um.es/eliseo/um/uploads/Main/FundamentosProgramac... · 2014-10-10 · La arquitectura de Von Neumann Dispositivos de E/S Una ALU de 2 bits (Wikipedia)

C++:C++: AnAn IntroductionIntroduction toto ComputingComputing

ProgrammingProgramming.. PrinciplesPrinciples andand PracticePractice Using C++Using C++

zzernánd

ezYáñe

zernánd

ezYáñe

zLuisH

LuisH

Fundamentos de la programación: Computadoras y programaciónFundamentos de la programación: Computadoras y programación PáginaPágina 4646

Licencia CC (Licencia CC (CreativeCreative CommonsCommons))

Attribution

Non commercial

zz

Share alike

ernánd

ezYáñe

zernánd

ezYáñe

zLuisH

LuisH

Fundamentos de la programación: Computadoras y programaciónFundamentos de la programación: Computadoras y programación PáginaPágina 4747