Fundamentos de La Programacion UCM 2014

568
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 20132014 Luis Hernández Yáñez Licencia Creative Commons: Reconocimiento, No comercial y Compartir igual. http://creativecommons.org/licenses/byncsa/3.0/

Transcript of Fundamentos de La Programacion UCM 2014

  • FacultaddeInformticaUniversidadComplutense

    Apuntesdeclasedelaasignatura

    Fundamentosdelaprogramacin

    1curso

    GradoenIngenieraenInformticaGradoenIngenieradelSoftware

    GradoenIngenieradeComputadores

    20132014

    LuisHernndezYez

    LicenciaCreativeCommons:Reconocimiento,NocomercialyCompartirigual.http://creativecommons.org/licenses/byncsa/3.0/

  • EstapublicacincontienelosapuntesdeclasedelaasignaturaFundamentosdelaprogramacin,asignaturade1cursodelosgrados

    queseimpartenenlaFacultaddeInformticadelaUCM.

    Durantelostresprimeroscursosenlosquesehaimpartidolaasignatura,estematerialhasidosometidoacontinuasrevisionesycontribucionesporpartedelosprofesoresquehanimpartidolosdistintosgrupos

    delaasignatura.Aunqueeltrabajohaquedadobastanteconsolidado,estoysegurodequetodavacontienemuchaserratas.Siencuentrasalguna,

    nodudes,porfavor,enhacrmelosaberyconseguirasquelasiguienteversinestmejordepurada.

    Quieroagradeceratodoslosprofesoresquehanimpartidolaasignaturasucontribucineneldesarrollodelmaterial,destacandoespecialmente

    lalabordePabloMorenoGeryCarlosCervignRckauer.

    LuisHernndezYezProfesordelaFacultaddeInformticadelaUCM

  • GradoenIngenieraInformticaGradoenIngenieradelSoftwareGradoenIngenieradeComputadoresLuisHernndezYezFacultaddeInformticaUniversidadComplutense

    Fundamentosdelaprogramacin

    TC

    LuisH

    ernnd

    ezY

    ez

    Tema1 Computadorasyprogramacin 1Tema2 TiposeinstruccionesI 48

    Anexo:Detallestcnicosdelostipos 212Tema3 TiposeinstruccionesII 225

    AnexoI:Eloperadorternario? 398AnexoII:Ejemplosdesecuencias 402

    Tema4 Laabstraccinprocedimental 425Anexo:Mssobresubprogramas 496

    Tema5 Tiposdedatosestructurados 512Anexo:CadenasalestilodeC 580

    Tema6 Recorridoybsquedaenarrays 588Tema7 Algoritmosdeordenacin 649

    Anexo:Mssobreordenacin 742Tema8 Programacinmodular 755

    Anexo:Ejemplodemodularizacin 832Tema9 Punterosymemoriadinmica 847

    Anexo:Punterosymemoriadinmica 938Tema10 Introduccinalarecursin 981Apndice:Archivosbinarios 1049

    Fundamentosdelaprogramacin

  • LuisH

    ernnd

    ezY

    ez

    Informtica,computadorasyprogramacin 3Lenguajemquinayensamblador 12Lenguajesdeprogramacindealtonivel 15Unpocodehistoria 19ProgramacineIngenieradelSoftware 24EllenguajedeprogramacinC++ 27Sintaxisdeloslenguajesdeprogramacin 30UnprimerprogramaenC++ 35Herramientasdedesarrollo 39C++:UnmejorC 45

    Fundamentosdelaprogramacin

    LuisH

    ernnd

    ezY

    ez

    Unejemplodeprogramacin 50ElprimerprogramaenC++ 64Laslneasdecdigodelprograma 80Clculosenlosprogramas 86Variables 92Expresiones 98Lecturadedatosdesdeelteclado 108Resolucindeproblemas 119Losdatosdelosprogramas 127Identificadores 129Tiposdedatos 133Declaracinyusodevariables 142Instruccionesdeasignacin 147Operadores 152Mssobreexpresiones 160Constantes 167Labibliotecacmath 171Operacionesconcaracteres 174

    Operadoresrelacionales 177Tomadedecisiones(if) 180Bloquesdecdigo 183Bucles(while) 186Entrada/salidaporconsola 190Funcionesdefinidas

    porelprogramador 199

    Fundamentosdelaprogramacin

  • LuisH

    ernnd

    ezY

    ez

    int 214float 216Notacincientfica 217double 218char 220bool 221string 222Literalesconespecificacindetipo 223

    Fundamentosdelaprogramacin

    LuisH

    ernnd

    ezY

    ez

    Fundamentosdelaprogramacin

    Tipos,valoresyvariables 227Conversindetipos 232Tiposdeclaradosporelusuario 236Tiposenumerados 238Entrada/Salida

    conarchivosdetexto 248Lecturadearchivosdetexto 253Escrituraenarchivosdetexto 266

    Flujodeejecucin 272Seleccinsimple 276Operadoreslgicos 282Anidamientodeif 286Condiciones 290Seleccinmltiple 293

    Laescalaifelseif 295Lainstruccinswitch 302

    Repeticin 313Elbuclewhile 316

    Elbuclefor 321Buclesanidados 331

    mbitoyvisibilidad 339Secuencias 349

    Recorridodesecuencias 355Secuenciascalculadas 363Bsquedaensecuencias 370

    Arraysdedatossimples 374Usodevariablesarrays 379Recorridodearrays 382Bsquedaenarrays 387Arraysnocompletos 393

  • LuisH

    ernnd

    ezY

    ez

    Fundamentosdelaprogramacin

    Eloperadorternario? 399

    Recorridos 404Unaparcamiento 405Parntesisbienemparejados? 409Dossecuenciasiguales? 412NmerosprimosmenoresqueN 413

    Bsquedas 417Bsquedadeunnmeroenunarchivo 419Bsquedasensecuenciasordenadas 420

    LuisH

    ernnd

    ezY

    ez

    Fundamentosdelaprogramacin

    Diseodescendente:Tareasysubtareas 427Subprogramas 434Subprogramasydatos 441Parmetros 446Argumentos 451Resultadodelafuncin 467Prototipos 473Ejemploscompletos 475Funcionesdeoperador 477Diseodescendente(unejemplo) 480Precondicionesypostcondiciones 490

  • LuisH

    ernnd

    ezY

    ez

    Fundamentosdelaprogramacin:Laabstraccinprocedimental(Anexo)

    Archivoscomoparmetros 498Lafuncinmain() 501Argumentosimplcitos 504Sobrecargadesubprogramas 508

    LuisH

    ernnd

    ezY

    ez

    Fundamentosdelaprogramacin

    Tiposdedatos 514Arraysdenuevo 517Arraysybuclesfor 520Mssobrearrays 522

    Inicializacindearrays 523Enumeradoscomondices 524Pasodearraysasubprogramas 525

    Implementacindelistas 528Cadenasdecaracteres 531Cadenasdecaracteresdetipostring 535

    Entrada/salidaconstring 539Operacionesconstring 541

    Estructuras 543Estructurasdentrodeestructuras 549Arraysdeestructuras 550Arraysdentrodeestructuras 551

    Listasdelongitudvariable 552Unejemplocompleto 558Elbucledo..while 562

  • LuisH

    ernnd

    ezY

    ez

    Fundamentosdelaprogramacin

    CadenasalestilodeC 582E/SconcadenasalestilodeC 583Labibliotecacstring 584Ejemplo 585

    LuisH

    ernnd

    ezY

    ez

    Fundamentosdelaprogramacin

    Recorridodearrays 590Arrayscompletos 593Arraysnocompletosconcentinela 594Arraysnocompletosconcontador 595Ejemplos 597Generacindenmerosaleatorios 601

    Bsquedasenarrays 604Arrayscompletos 606Arraysnocompletosconcentinela 607Arraysnocompletosconcontador 608Ejemplo 610

    Recorridosybsquedasencadenas 614Msejemplosdemanejodearrays 617Arraysmultidimensionales 630

    Inicializacindearraysmultidimensionales 638Recorridodeunarraybidimensional 641RecorridodeunarrayNdimensional 644Bsquedaenunarraymultidimensional 647

  • LuisH

    ernnd

    ezY

    ez

    Fundamentosdelaprogramacin

    Algoritmosdeordenacin 651Algoritmodeordenacinporinsercin 654

    Ordenacindearraysporinsercin 665Algoritmodeordenacinporinsercin

    conintercambios 672Clavesdeordenacin 680Estabilidaddelaordenacin 688Complejidadyeficiencia 692

    Ordenacionesnaturales 694Ordenacinporseleccindirecta 701Mtododelaburbuja 716Listasordenadas 722Bsquedasenlistasordenadas 729Bsquedabinaria 731

    LuisH

    ernnd

    ezY

    ez

    Fundamentosdelaprogramacin

    Ordenacinporintercambio 744Mezcladedoslistasordenadas 747

  • LuisH

    ernnd

    ezY

    ez

    Fundamentosdelaprogramacin

    Programasmultiarchivoycompilacinseparada 757Interfazfrenteaimplementacin 762Usodemdulosdebiblioteca 768Ejemplo:GestindeunalistaordenadaI 770Compilacindeprogramasmultiarchivo 778Elpreprocesador 780Cadacosaensumdulo 782Ejemplo:GestindeunalistaordenadaII 784Elproblemadelasinclusionesmltiples 789

    Compilacincondicional 794Proteccinfrenteainclusionesmltiples 795

    Ejemplo:GestindeunalistaordenadaIII 796Implementacionesalternativas 804Espaciosdenombres 808

    Implementacionesalternativas 817Calidadyreutilizacindelsoftware 827

    LuisH

    ernnd

    ezY

    ez

    Fundamentosdelaprogramacin

    Modularizacindeunprograma 833

  • LuisH

    ernnd

    ezY

    ez

    Fundamentosdelaprogramacin

    Direccionesdememoriaypunteros 849Operadoresdepunteros 854Punterosydireccionesvlidas 864

    Punterosnoinicializados 866Unvalorseguro:NULL 867

    Copiaycomparacindepunteros 868Tipospuntero 873

    Punterosaestructuras 875Punterosaconstantesypunterosconstantes 877

    Punterosypasodeparmetros 879Punterosyarrays 883Memoriaydatosdelprograma 886Memoriadinmica 891Punterosydatosdinmicos 895Gestindelamemoria 907Errorescomunes 911Arraysdedatosdinmicos 916Arraysdinmicos 928

    LuisH

    ernnd

    ezY

    ez

    Fundamentosdelaprogramacin

    Aritmticadepunteros 940Recorridodearraysconpunteros 953Referencias 962Listasenlazadas 964

  • LuisH

    ernnd

    ezY

    ez

    Fundamentosdelaprogramacin

    Conceptoderecursin 983Algoritmosrecursivos 986

    Funcionesrecursivas 987Diseodefuncionesrecursivas 989

    Modelodeejecucin 990Lapiladelsistema 992Lapilaylasllamadasafuncin 994Ejecucindelafuncinfactorial() 1005

    Tiposderecursin 1018Recursinsimple 1019Recursinmltiple 1020Recursinanidada 1022Recursincruzada 1026

    Cdigodelsubprogramarecursivo 1027Parmetrosyrecursin 1032Ejemplosdealgoritmosrecursivos 1034

    Bsquedabinaria 1035TorresdeHanoi 1038

    Recursinfrenteaiteracin 1043Estructurasdedatosrecursivas 1045

    LuisH

    ernnd

    ezY

    ez

    Fundamentosdelaprogramacin

    Flujos 1051Archivosbinarios 1054Tamaodelosdatos:Eloperadorsizeof() 1056Aperturadearchivosbinarios 1059Lecturadearchivosbinarios(accesosecuencial) 1061Escrituraenarchivosbinarios(accesosecuencial) 1066Accesodirectooaleatorio 1070Ejemplosdeusodearchivosbinarios 1078

    Ordenacindelosregistrosdelarchivo 1079Bsquedabinaria 1085Insercinenunarchivobinarioordenado 1088Cargadelosregistrodeunarchivoenunatabla 1092Almacenamientodeunatablaenunarchivo 1093

  • GradoenIngenieraInformticaGradoenIngenieradelSoftwareGradoenIngenieradeComputadoresLuisHernndezYezFacultaddeInformticaUniversidadComplutense

    Fundamentosdelaprogramacin

    RB

    LuisH

    ernnd

    ezY

    ez

    Programming.Principles andPractice UsingC++B.Stroustrup.Pearson Education,2009 C++:An Introduction to Computing (2edicin)J.Adams,S.Leestma,L.Nyhoff.PrenticeHall,1998 EllenguajedeprogramacinC++ (Edicinespecial)B.Stroustrup.AddisonWesley,2002 ProgramacinyresolucindeproblemasconC++N.Dale,C.Weems.McGrawHillInteramericana,2007 Problem Solving,Abstraction,Design UsingC++ (3edicin)F.L.Friedman,E.B.Koffman.AddisonWesley,2000. ProgramacinenC++paraingenierosF.Xhafa etal.Thomson,2006

    Fundamentosdelaprogramacin

  • LuisH

    ernnd

    ezY

    ez

    Programming.Principles andPractice UsingC++DelautordellenguajeC++,unampliotutorialqueenseaaprogramarenC++;haceunusotempranodeconceptosdeorientacinaobjetosydelaSTL,quequedanfueradeltemariodeestecursoC++:An Introduction to Computing (2edicin)BuenaintroduccinalaprogramacinenC++;buenaorganizacindeloscontenidos,biendesarrolladoyconseccionesprcticasEllenguajedeprogramacinC++ (Edicinespecial)DelautordellenguajeC++,lareferenciaabsolutasobreellenguajeC++enlaqueconsultardudasydetallestcnicossobreloselementosdellenguaje

    Fundamentosdelaprogramacin

    LuisH

    ernnd

    ezY

    ez

    ProgramacinyresolucindeproblemasconC++UnenfoqueprcticoaldesarrollodeprogramasconC++connumerososejemplosProblem Solving,Abstraction,Design UsingC++ (3edicin)IntroduccinalaprogramacinenC++conunenfoquededesarrollodesoftwareynumerososcasosdeestudioProgramacinenC++paraingenierosIntroduccinalaprogramacinenC++conexplicacionessencillasyunaorganizacinclara

    Fundamentosdelaprogramacin

  • GradoenIngenieraInformticaGradoenIngenieradelSoftwareGradoenIngenieradeComputadoresLuisHernndezYezFacultaddeInformticaUniversidadComplutense

    Fundamentosdelaprogramacin

    1

    LuisH

    ernnd

    ezY

    ez

    Informtica,computadorasyprogramacin 3Lenguajemquinayensamblador 12Lenguajesdeprogramacindealtonivel 15Unpocodehistoria 19ProgramacineIngenieradelSoftware 24EllenguajedeprogramacinC++ 27Sintaxisdeloslenguajesdeprogramacin 30UnprimerprogramaenC++ 35Herramientasdedesarrollo 39C++:UnmejorC 45

    Fundamentosdelaprogramacin:Computadorasyprogramacin

  • LuisH

    ernnd

    ezY

    ez

    Pgina 3Fundamentosdelaprogramacin:Computadorasyprogramacin

    LuisH

    ernnd

    ezY

    ez

    Informtica(Cienciadelacomputacin)Conjuntodeconocimientoscientficosytcnicasquehacenposibleeltratamientoautomticodelainformacinpormediodeordenadores

    ComputadoraMquinaelectrnica,analgicaodigital,dotadadeunamemoria degrancapacidadydemtodosdetratamiento delainformacin,capazderesolverproblemas matemticosylgicosmediantelaejecucin deprogramas informticos

    Pgina 4Fundamentosdelaprogramacin:Computadorasyprogramacin

  • LuisH

    ernnd

    ezY

    ez

    Entodaspartesyconmuchasformas

    Pgina 5Fundamentosdelaprogramacin:Computadorasyprogramacin

    LuisH

    ernnd

    ezY

    ez

    HardwareComponentesqueintegranlapartematerialdeunacomputadora

    SoftwareProgramas,instruccionesyreglasinformticasparaejecutartareasenunacomputadora

    Pgina 6Fundamentosdelaprogramacin:Computadorasyprogramacin

  • LuisH

    ernnd

    ezY

    ez

    ProgramarIndicaralacomputadoraquesloquetienequehacer

    Programa Secuenciadeinstrucciones Instruccionesqueentiendelacomputadora Yquepersiguenunobjetivo:resolverunproblema!

    Pgina 7Fundamentosdelaprogramacin:Computadorasyprogramacin

    LuisH

    ernnd

    ezY

    ez

    TrabajoenequipoMltiplesroles... Gestores Analistas Diseadores Programadores Probadores Administradoresdesistemas

    ...

    Pgina 8Fundamentosdelaprogramacin:Computadorasyprogramacin

    ParqueJursico

  • LuisH

    ernnd

    ezY

    ez

    Esquemageneral

    Pgina 9Fundamentosdelaprogramacin:Computadorasyprogramacin

    Memoriatemporal

    AlmacenamientopermanenteAlmacenamientopermanente

    DispositivosdeentradaTecladoRatnEscnerTctil

    DispositivosdesalidaMonitorImpresoraAltavoz

    MonitorImpresoraAltavoz

    DispositivosdesalidaMonitorImpresoraAltavoz

    UnidadCentraldeProcesoCentralProcessorUnit

    C.P.U.

    LuisH

    ernnd

    ezY

    ez

    LaarquitecturadeVonNeumann

    Pgina 10Fundamentosdelaprogramacin:Computadorasyprogramacin

    C.P.U.(Procesador)

    DispositivosdeE/S

    MemoriaA.L.U.UnidadAritmticoLgica

    UnidaddeControl

    UnaALUde2bits(Wikipedia)

  • LuisH

    ernnd

    ezY

    ez

    Lamemoria

    Pgina 11Fundamentosdelaprogramacin:Computadorasyprogramacin

    Memoria

    Busde

    datos

    01

    02

    03

    04

    05

    06

    07

    08

    ...

    Direccin

    CadaceldaenunadireccinCeldasde8/16/32/64bitsInformacinvoltil

    1Bit=0/11Byte=8bits=1carcter1Kilobyte(KB)=1024Bytes1Megabyte(MB)=1024KB1Gigabyte(GB)=1024MB1Terabyte(TB)=1024GB1Petabyte(PB)=1024TB210 =1024 1000

    LuisH

    ernnd

    ezY

    ez

    Pgina 12Fundamentosdelaprogramacin:Computadorasyprogramacin

  • LuisH

    ernnd

    ezY

    ez

    Losprocesadorestrabajanconcerosyunos(bits)Unidaddememoriabsica:Byte (8bits)(2dgitoshexadecimales:01011011 01011011 5B)

    LenguajemquinaCdigoshexadecimalesquerepresentaninstrucciones,registrosdelaCPU,direccionesdememoriaodatosInstruccin SignificadoA02F Accederalaceldadememoria2F3E01 Copiarloelregistro1delaALUA030 Accederalaceldadememoria303E02 Copiarloenelregistro2delaALU1D SumarB331 Guardarelresultadoenlaceldadememoria31

    Pgina 13Fundamentosdelaprogramacin:Computadorasyprogramacin

    LenguajedebajonivelDependientedelamquina

    Programacindifcil

    LuisH

    ernnd

    ezY

    ez

    Nemotcnicosparaloscdigoshexadecimales:A0 READ3E REG1D ADD

    Mayorlegibilidad:READ2FREG01READ30REG02ADDWRITE31

    Lenguajedenivelmedio

    Pgina 14Fundamentosdelaprogramacin:Computadorasyprogramacin

    Cdigoobjeto(lenguajemquina)

    Programaensamblador

    Cdigofuente(lenguajeensamblador)

  • LuisH

    ernnd

    ezY

    ez

    Pgina 15Fundamentosdelaprogramacin:Computadorasyprogramacin

    LuisH

    ernnd

    ezY

    ez

    Mscercanosaloslenguajesnaturalymatemticoresultado=dato1+dato2;

    Mayorlegibilidad,mayorfacilidaddecodificacin Estructuracindedatos/abstraccinprocedimental

    Pgina 16Fundamentosdelaprogramacin:Computadorasyprogramacin

  • LuisH

    ernnd

    ezY

    ez

    TraduccinCompiladores:CompilanyenlazanprogramascompletosIntrpretes:Compilan,enlazanyejecutaninstruccinainstruccin

    Pgina 17Fundamentosdelaprogramacin:Computadorasyprogramacin

    Compilador

    Enlazador Cdigoobjetodebiblioteca

    Cdigofuente#includeusingnamespacestd;intmain(){

    cout

  • LuisH

    ernnd

    ezY

    ez

    Pgina 19Fundamentosdelaprogramacin:Computadorasyprogramacin

    LuisH

    ernnd

    ezY

    ez

    LaprehistoriaElbaco

    SigloXIXMquinaanalticadeCharlesBabbage

    Pgina 20Fundamentosdelaprogramacin:Computadorasyprogramacin

    LadyAdaLovelaceesconsideradalaprimeraprogramadora

    (Wikipedia)

  • LuisH

    ernnd

    ezY

    ez

    SigloXX1936 MquinadeTuring1946 ENIAC:Primeracomputadoradigitaldepropsitogeneral1947 Eltransistor1953 IBM650:Primeracomputadoraagranescala1966 ARPANET:OrigendeInternet1967 Eldisquete1970 SistemaoperativoUNIX1972 Primervirus informtico(Creeper)LenguajedeprogramacinC1974 ProtocoloTCP.Primeraredlocal

    Pgina 21Fundamentosdelaprogramacin:Computadorasyprogramacin

    ENIAC(Wikipedia)

    LuisH

    ernnd

    ezY

    ez

    1975 SefundaMicrosoft1976 SefundaApple1979 JuegoPacman1981 IBMPCSistemaoperativoMSDOS1983 LenguajedeprogramacinC++1984 CDROM1985 Windows 1.01990 LenguajeHTML

    World Wide Web1991 SistemaoperativoLinux

    Pgina 22Fundamentosdelaprogramacin:Computadorasyprogramacin

    AppleII(Wikipedia)

    IBMPC(Wikipedia)Linux

  • LuisH

    ernnd

    ezY

    ez

    1992 Windows3.11995 LenguajedeprogramacinJavaDVD1998 SefundaGoogle1999 MSNMessengerSigloXXI2001 WindowsXPMacOS X2002 Mozilla Firefox2007 iPhone2008 Android ...

    Pgina 23Fundamentosdelaprogramacin:Computadorasyprogramacin

    LuisH

    ernnd

    ezY

    ez

    Pgina 24Fundamentosdelaprogramacin:Computadorasyprogramacin

  • LuisH

    ernnd

    ezY

    ez

    Quesprogramar?Decirleauntontomuy rpidoexactamente loquetienequehacerEspecificarlaestructura yelcomportamiento deunprograma,ascomoprobar queelprogramarealizasutareaadecuadamente yconunrendimiento aceptablePrograma:Transformaentradaensalida

    Algoritmo:SecuenciadepasosyoperacionesquedeberealizarelprogramapararesolverelproblemaElprogramaimplementaelalgoritmoenunlenguajeconcreto

    SalidaPrograma

    Pgina 25Fundamentosdelaprogramacin:Computadorasyprogramacin

    Entrada

    LuisH

    ernnd

    ezY

    ez

    LaprogramacinesslounaetapadelprocesodedesarrolloModelodedesarrolloencascada:

    Pgina 26Fundamentosdelaprogramacin:Computadorasyprogramacin

    MantenimientoMantenimientoPruebaydepuracinPruebaydepuracin

    ProgramacinProgramacinDiseoDiseo

    AnlisisAnlisisPlanificacin Recursosnecesarios,presupuesto,plan,

    Qu?Cmo?

    Implementacin

  • LuisH

    ernnd

    ezY

    ez

    Pgina 27Fundamentosdelaprogramacin:Computadorasyprogramacin

    LuisH

    ernnd

    ezY

    ez

    Bjarne Stroustrup (1983)

    #includeusingnamespacestd;

    int main(){

    cout

  • LuisH

    ernnd

    ezY

    ez

    InstruccionesDatos:literales,variables,tiposSubprogramas(funciones)ComentariosDirectivas...

    Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina29

    #includeusingnamespacestd;int main(){

    cout

  • LuisH

    ernnd

    ezY

    ez

    SintaxisysemnticadeloslenguajesSintaxis Reglasquedeterminancmosepuedenconstruirysecuenciarloselementosdellenguaje

    Semntica SignificadodecadaelementodellenguajeParaqusirve?

    Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina 31

    LuisH

    ernnd

    ezY

    ez

    Especificacin Lenguajes(BNF) Diagramas

    Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina 32

    ::=::=+||::=|::=0|1|2|3|4|5|6|7|8|9::=

    BNF

    |significa +2315913741343.4002

    Ejemplo:Nmerosenteros(sindecimales)

    +0..9

    +0..9

  • LuisH

    ernnd

    ezY

    ez

    Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina 33

    ::=::=+||::=|::=0|1|2|3|4|5|6|7|8|9::=

    +23::=::=+::=+::=+2::=+2 ::=+231374::=::=::=::=1::=1::=13::=13::=137::=137 ::=1374134::=::=::=::=1::=ERROR ( noes)

    LuisH

    ernnd

    ezY

    ez

    Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina 34

    ++2233 113377 44

    11 ??

    +23+23

    13741374

    134134

    +0..90..9

    +

    +

    0..90..9

    0..90..9

  • LuisH

    ernnd

    ezY

    ez

    Pgina 35Fundamentosdelaprogramacin:Computadorasyprogramacin

    LuisH

    ernnd

    ezY

    ez

    HolaMundo!Unprogramaquemuestraunsaludoenlapantalla:#includeusingnamespacestd;

    int main()//main()esdondeempiezalaejecucin{

    cout

  • LuisH

    ernnd

    ezY

    ez

    Anlisisdelprograma#includeusingnamespacestd;

    int main(){

    cout

  • LuisH

    ernnd

    ezY

    ez

    Pgina 39Fundamentosdelaprogramacin:Computadorasyprogramacin

    LuisH

    ernnd

    ezY

    ez

    Editor Blocdenotas,Wordpad,Word,Writer,Gedit,Kwrite,(textosimple,sinformatos) Editoresespecficos:coloreadosintctico Recomendacin:Notepad++

    Pgina 40

    Instalacinyuso:SeccinHerramientasdedesarrolloenelCampusVirtual

    Instalacinyuso:SeccinHerramientasdedesarrolloenelCampusVirtual

    Fundamentosdelaprogramacin:Computadorasyprogramacin

  • LuisH

    ernnd

    ezY

    ez

    Pgina 41Fundamentosdelaprogramacin:Computadorasyprogramacin

    hola.cpp(cdigofuente)

    hola.obj(cdigoobjeto)

    Compilador

    Cdigoobjetodelabibliotecaiostream

    hola.exe(ejecutable)

    EnlazadorHolaMundo!

    CargadorCargador

    LuisH

    ernnd

    ezY

    ez

    Compilador Importante:C++estndar Recomendacin:GNUG++(MinGW enWindows)

    Pgina 42

    Instalacinyuso:SeccinHerramientasdedesarrolloenelCampusVirtual

    Instalacinyuso:SeccinHerramientasdedesarrolloenelCampusVirtual

    Fundamentosdelaprogramacin:Computadorasyprogramacin

  • LuisH

    ernnd

    ezY

    ez

    Entornosdedesarrollo Paraeditar,compilaryprobarelcdigodelprograma Recomendaciones:

    Windows:MSVisualStudio/C++ExpressoEclipse Linux:Netbeans oEclipse

    Pgina 43

    Instalacinyuso:SeccinHerramientasdedesarrolloenelCampusVirtual

    Instalacinyuso:SeccinHerramientasdedesarrolloenelCampusVirtual

    Fundamentosdelaprogramacin:Computadorasyprogramacin

    LuisH

    ernnd

    ezY

    ez

    Quhaceelprograma? Laejecucindelprogramasiempreempiezaenmain() Seejecutanlasinstruccionesensecuenciadeprincipioafin

    Pgina 44

    _HolaMundo!HolaMundo!

    Pantalla(cout)_

    MuestraHolaMundo!enlapantallaysaltadelneaDevuelve0 comocdigodeterminacindelprograma

    FinFin

    return0;return0;

    cout

  • LuisH

    ernnd

    ezY

    ez

    Pgina 45Fundamentosdelaprogramacin:Computadorasyprogramacin

    LuisH

    ernnd

    ezY

    ez

    EllenguajeC LenguajecreadoporDennisM.Ritchie en1972 Lenguajedenivelmedio:

    Estructurastpicasdeloslenguajesdealtonivel Construccionesparacontrolaniveldemquina

    Lenguajesencillo(pocaspalabrasreservadas) Lenguajeestructurado(noestrictamenteestructuradoenbloques) Compartimentalizacindecdigo (funciones) ydatos(mbitos) Componenteestructuralbsico:lafuncin(subprograma) Programacinmodular Distingue entremaysculasyminsculas Palabrasreservadas(oclave):enminsculas

    Pgina 46Fundamentosdelaprogramacin:Computadorasyprogramacin

  • LuisH

    ernnd

    ezY

    ez

    LicenciaCC(Creative Commons)Estetipodelicenciasofrecenalgunosderechosaterceraspersonasbajociertascondiciones.Estedocumentotieneestablecidaslassiguientes:

    Pulsaenlaimagendearribaaladerechaparasaberms.Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina 47

    Reconocimiento(Attribution):Encualquierexplotacindelaobraautorizadaporlalicenciaharfaltareconocerlaautora.Nocomercial(Noncommercial):Laexplotacindelaobraquedalimitadaausosnocomerciales.Compartirigual(Sharealike):Laexplotacinautorizadaincluyelacreacindeobrasderivadassiemprequemantenganlamismalicenciaalserdivulgadas.

  • 2GradoenIngenieraInformticaGradoenIngenieradelSoftwareGradoenIngenieradeComputadores

    LuisHernndezYezFacultaddeInformticaUniversidadComplutense

    FundamentosdelaprogramacinLuisH

    ernnd

    ezY

    ez

    Unejemplodeprogramacin 50ElprimerprogramaenC++ 64Laslneasdecdigodelprograma 80Clculosenlosprogramas 86Variables 92Expresiones 98Lecturadedatosdesdeelteclado 108Resolucindeproblemas 119Losdatosdelosprogramas 127Identificadores 129Tiposdedatos 133Declaracinyusodevariables 142Instruccionesdeasignacin 147Operadores 152Mssobreexpresiones 160Constantes 167Labibliotecacmath 171Operacionesconcaracteres 174

    Operadoresrelacionales 177Tomadedecisiones(if) 180Bloquesdecdigo 183Bucles(while) 186Entrada/salidaporconsola 190Funcionesdefinidas

    porelprogramador 199

    Fundamentosdelaprogramacin:TiposeinstruccionesI

  • LuisH

    ernnd

    ezY

    ez

    Pgina 50Fundamentosdelaprogramacin:TiposeinstruccionesI

    LuisH

    ernnd

    ezY

    ez

    UnacomputadoradeuncocheInstruccionesqueentiende:::=;

    ::=Start |Stop |::=Go Blocks::=North |East |South |West::=1 |2 |3 |4 |5

    Ejemplos:Start;Go North3Blocks;Stop;

    Pgina 51Fundamentosdelaprogramacin:TiposeinstruccionesI

  • LuisH

    ernnd

    ezY

    ez

    Sintaxisdellenguajedeprogramacin

    Pgina 52Fundamentosdelaprogramacin:TiposeinstruccionesI

    avanzaravanzar direccinGo Blocksnum

    =Literales=Literales

    direccindireccin

    North

    East

    South

    West

    instruccininstruccin

    Start

    avanzar

    Stop ;

    numnum

    12345

    LuisH

    ernnd

    ezY

    ez

    ElproblemaaresolverEstandoelcocheenlaposicinA,conseguirllegaralCineTvoli (B)Qupasoshayqueseguir?ArrancarIrunbloquealNorteIrdosbloquesalEsteIrcincobloquesalNorteIrdosbloquesalEsteParar

    Pgina 53Fundamentosdelaprogramacin:TiposeinstruccionesI

    B

    A

    NN

    Bloque:Bloque:

  • LuisH

    ernnd

    ezY

    ez

    ElalgoritmoSecuenciadepasosquehayqueseguirpararesolverelproblema

    Pgina 54Fundamentosdelaprogramacin:TiposeinstruccionesI

    1. Arrancar

    NN

    2. IrunbloquealNorte3. IrdosbloquesalEste4. IrcincobloquesalNorte5. IrdosbloquesalEste6. Parar

    Esospasossirventantoparaunapersonacomoparaunacomputadora.

    LuisH

    ernnd

    ezY

    ez

    ElprogramaInstruccionesescritasenellenguajedeprogramacin

    Start;Go North1Blocks;Go East2Blocks;Go North5Blocks;Go East2Blocks;Stop;

    Pgina 55Fundamentosdelaprogramacin:TiposeinstruccionesI

    B

    A

    NN

  • LuisH

    ernnd

    ezY

    ez

    ElprogramaEscribimoselcdigodelprogramaenuneditoryloguardamosenunarchivo:

    Pgina 56Fundamentosdelaprogramacin:TiposeinstruccionesI

    Stat;Go North1BlocksGo EastBlocks;Go Noth 5Blocks;Go West2Blocks;Stop;

    CopiamoselarchivoenunallaveUSBylollevamosalcoche

    LuisH

    ernnd

    ezY

    ez

    LacompilacinIntroducimoslallaveUSBenelcocheypulsamoselbotndeejecutarelprograma:

    Pgina 57Fundamentosdelaprogramacin:TiposeinstruccionesI

    Stat;^Unknown word.Go North1Blocks^;missing.Go EastBlocks;^Number missing.Go Noth 5Blocks;^Unknown word.Go West2Blocks;Stop;There areerrors.Impossible to run the program.

    ErroresdesintaxisErroresdesintaxis

  • LuisH

    ernnd

    ezY

    ez

    DepuracinEditamoselcdigoparacorregirloserroressintcticos:

    Pgina 58Fundamentosdelaprogramacin:TiposeinstruccionesI

    Stat;Go North1BlocksGo EastBlocks;Go Noth 5Blocks;Go West2Blocks;Stop;

    Start;Go North1Blocks;Go East3 Blocks;Go North5Blocks;Go West2Blocks;Stop;

    LuisH

    ernnd

    ezY

    ez

    LaejecucinSerealizaloquepidecadainstruccin:

    Pgina 59Fundamentosdelaprogramacin:TiposeinstruccionesI

    B

    NN

    Start;Go North1Blocks;Go East3Blocks; !!

    ErrordeejecucinUnainstruccinnosepuedeejecutar!

  • LuisH

    ernnd

    ezY

    ez

    DepuracinEditamoselcdigoparaarreglarelerrordeejecucin:

    Pgina 60Fundamentosdelaprogramacin:TiposeinstruccionesI

    Start;Go North1Blocks;Go East2 Blocks;Go North5Blocks;Go West2Blocks;Stop;

    Start;Go North1Blocks;Go East3Blocks;Go North5Blocks;Go West2Blocks;Stop;

    LuisH

    ernnd

    ezY

    ez

    LaejecucinSerealizaloquepidecadainstruccin:

    Pgina 61Fundamentosdelaprogramacin:TiposeinstruccionesI

    B

    NN

    Start;Go North1Blocks;Go East2Blocks;

    ErrorlgicoElprogramanollegaalresultadodeseado!

    Go North5Blocks;Go West2Blocks;Stop;

    ??

  • LuisH

    ernnd

    ezY

    ez

    DepuracinEditamoselcdigoparaarreglarelerrorlgico:

    Pgina 62Fundamentosdelaprogramacin:TiposeinstruccionesI

    Start;Go North1Blocks;Go East2Blocks;Go North5Blocks;Go West2Blocks;Stop;

    Start;Go North1Blocks;Go East2Blocks;Go North5Blocks;Go East 2Blocks;Stop;

    LuisH

    ernnd

    ezY

    ez

    LaejecucinSerealizaloquepidecadainstruccin:

    Pgina 63Fundamentosdelaprogramacin:TiposeinstruccionesI

    NN

    Start;Go North1Blocks;Go East2Blocks;Go North5Blocks;Go East2Blocks;Stop;

    Conseguido!

  • LuisH

    ernnd

    ezY

    ez

    Pgina 64Fundamentosdelaprogramacin:TiposeinstruccionesI

    LuisH

    ernnd

    ezY

    ez

    HolaMundo!Devueltaenelprogramaquemuestraunsaludoenlapantalla:#includeusingnamespacestd;

    int main() //main()esdondeempiezalaejecucin{

    cout

  • LuisH

    ernnd

    ezY

    ez

    HolaMundo!Lanicainstruccinqueproducealgotangible:#includeusingnamespacestd;

    intmain()//main()esdondeempiezalaejecucin{

    cout

  • LuisH

    ernnd

    ezY

    ez

    Pantallaenmodotexto Lneasde80caracteres(textos)

    Pgina 68Fundamentosdelaprogramacin:TiposeinstruccionesI

    AplicacinenmodotextoAplicacinenmodotexto

    80caracteres80caracteres

    LuisH

    ernnd

    ezY

    ez

    VentanasdeconsolaoterminalLasaplicacionesenmodotextoseejecutandentrodeventanas: Windows:ventanasdeconsola(Smbolodelsistema) Linux:ventanasdeterminal

    Pgina 69Fundamentosdelaprogramacin:TiposeinstruccionesI

    H o l a M u n d o !

    Cursorparpadeante:Dondesecolocarelsiguientecarcter.Cursorparpadeante:Dondesecolocarelsiguientecarcter.

    ......

    ......

  • LuisH

    ernnd

    ezY

    ez

    Elinsertor

  • LuisH

    ernnd

    ezY

    ez

    ElprogramaprincipalLafuncinmain():dondecomienzalaejecucin...#includeusingnamespacestd;

    int main() //main()esdondeempiezalaejecucin{

    cout

  • LuisH

    ernnd

    ezY

    ez

    Documentandoelcdigo...Comentarios(seignoran):#includeusingnamespacestd;

    intmain()//main()esdondeempiezalaejecucin{

    cout

  • LuisH

    ernnd

    ezY

    ez

    BibliotecasSeincluyenconladirectiva #include:#include(Utilidadesdeentrada/salidaporconsola)Paramostraroleerdatoshayqueincluirlabibliotecaiostream

    EspaciosdenombresEniostream hayespaciosdenombres;culqueremos?#includeusingnamespacestd;Siempreusaremoselespaciodenombresestndar(std)Muchasbibliotecasnotienenespaciosdenombres

    Pgina 76Fundamentosdelaprogramacin:TiposeinstruccionesI

    Esunainstruccin:terminaen;Esunainstruccin:terminaen;

    LuisH

    ernnd

    ezY

    ez

    Compilacinyenlace

    Pgina 77

    hola.cpp(cdigofuente)

    hola.obj(cdigoobjeto)

    Compilador

    Cdigoobjetodelabibliotecaiostream

    hola.exe(ejecutable)

    Enlazador

    Fundamentosdelaprogramacin:TiposeinstruccionesI

    HolaMundo!CargadorCargador

    AmenudoenunpasoAmenudoenunpaso

  • LuisH

    ernnd

    ezY

    ez

    Elementosdelprograma#includeusingnamespacestd;

    int main(){

    cout

  • LuisH

    ernnd

    ezY

    ez

    Pgina 80Fundamentosdelaprogramacin:TiposeinstruccionesI

    LuisH

    ernnd

    ezY

    ez

    ProgramaconE/SporconsolaUnaplantillaparaempezar:#includeusingnamespacestd;

    int main(){

    return 0;}

    Pgina 81Fundamentosdelaprogramacin:TiposeinstruccionesI

    Tucdigoaqu!Tucdigoaqu!

  • LuisH

    ernnd

    ezY

    ez

    ...recitadoenlaconsolaMostrarlostextosconcout

  • LuisH

    ernnd

    ezY

    ez

    IntroduccindelcdigodelprogramaNohayquepartirunacadenaliteralentredoslneas:cout

  • LuisH

    ernnd

    ezY

    ez

    Pgina 86Fundamentosdelaprogramacin:TiposeinstruccionesI

    LuisH

    ernnd

    ezY

    ez

    Operadoresaritmticos+ Suma Resta* Multiplicacin/ DivisinOperadoresbinariosoperando_izquierdo operadoroperando_derecho

    Operacin Resultado3 +4 72.56 3 0.44143 *2 28645.45 /3 15.15

    Pgina 87Fundamentosdelaprogramacin:TiposeinstruccionesI

  • LuisH

    ernnd

    ezY

    ez

    Nmerosliterales(concretos) Enteros:sinpartedecimal

    Signonegativo(opcional)+secuenciadedgitos314312673211234

    Reales:conpartedecimalSignonegativo(opcional)+secuenciadedgitos+puntodecimal+secuenciadedgitos3.1416357.01.3332345.6789404.1

    Pgina 88Fundamentosdelaprogramacin:TiposeinstruccionesI

    Puntodecimal(3.1416),NOcoma(3,1416)

    Noseusanpuntosdemillares

    LuisH

    ernnd

    ezY

    ez

    Ejemplo#includeusingnamespacestd;

    int main(){

    cout

  • LuisH

    ernnd

    ezY

    ez

    Pgina 90Fundamentosdelaprogramacin:TiposeinstruccionesI

    DivisinrealDivisinreal

    DivisinenteraDivisinentera

    LuisH

    ernnd

    ezY

    ez

    Divisinenteraodivisinreal?Ambosoperandosenteros DivisinenteraAlgnoperandoreal Divisinreal

    Divisin Resultado500 /3 166500.0 /3 166.667500 /3.0 166.667500.0 /3.0 166.667

    Pgina 91Fundamentosdelaprogramacin:TiposeinstruccionesI

    Compruebasiemprequeeltipodedivisinseaelquequieres

  • LuisH

    ernnd

    ezY

    ez

    Pgina 92Fundamentosdelaprogramacin:TiposeinstruccionesI

    LuisH

    ernnd

    ezY

    ez

    DatosquesemantienenenmemoriaVariable:datoqueseaccedepormediodeunnombreDatoliteral:unvalorconcretoVariable:puedecambiardevalor(variar)edad=19;//variableedadyliteral19LasvariablesdebenserdeclaradasQutipodedatoqueremosmantener? Valornumricosindecimales(entero):tipoint Valornumricocondecimales(real):tipodoubleDeclaracin:tipo nombre;

    Pgina 93Fundamentosdelaprogramacin:TiposeinstruccionesI

  • LuisH

    ernnd

    ezY

    ez

    Declaracindevariablesint cantidad;double precio;

    Sereservaespaciosuficiente

    LASVARIABLESNOSEINICIALIZANNosedebenusarhastaqueseleshayadadoalgnvalorDndecolocamoslasdeclaraciones?Siempre,antesdelprimerusoHabitualmentealprincipiodelafuncin

    Pgina 94Fundamentosdelaprogramacin:TiposeinstruccionesI

    Memoriacantidad ?

    precio ?

    ...

    tipo nombre;

    LuisH

    ernnd

    ezY

    ez

    Declaracindevariables#includeusingnamespacestd;

    int main(){

    int cantidad;double precio,total;

    return 0;}

    Pgina 95Fundamentosdelaprogramacin:TiposeinstruccionesI

    Memoria

    cantidad ?

    precio ?

    total ?

    ...

    Podemosdeclararvariasdeunmismotiposeparandolosnombresconcomas

  • LuisH

    ernnd

    ezY

    ez

    Capacidaddelasvariablesint2.147.483.648 ...2.147.483.6472147483648 ..2147483647double2,23x10308 ...1,79x 10+308 ysusnegativos[+|] 2.23e308 ..1.79e+308Problemasdeprecisin

    Pgina 96Fundamentosdelaprogramacin:TiposeinstruccionesI

    Notacincientfica

    LuisH

    ernnd

    ezY

    ez

    Asignacindevaloresalasvariables(operador=)variable = expresin;

    cantidad=12; //intprecio=39.95; //doubletotal=cantidad*precio;//Asigna479.4

    Concordanciadetipos: cantidad=12.5;Alaizquierdadel=debeirsiempreunavariable!!!

    Pgina 97Fundamentosdelaprogramacin:TiposeinstruccionesI

    Instruccin:terminaen;

    cantidad 12

  • LuisH

    ernnd

    ezY

    ez

    Pgina 98Fundamentosdelaprogramacin:TiposeinstruccionesI

    LuisH

    ernnd

    ezY

    ez

    ExpresionesSecuenciasdeoperandosyoperadoresoperando operador operandooperador operando...total=cantidad*precio*1.18;

    AigualprioridadseevalandeizquierdaaderechaParntesisparaforzarciertasoperacionestotal=cantidad1+cantidad2*precio;total=(cantidad1+cantidad2)*precio;Unosoperadoresseevalanantesqueotros

    Pgina 99Fundamentosdelaprogramacin:TiposeinstruccionesI

    ExpresinExpresin

  • LuisH

    ernnd

    ezY

    ez

    Precedenciadelosoperadorescantidad1=10;cantidad2=2;precio=40.0;* y/ seevalanantesque + ytotal=cantidad1+cantidad2*precio;* antesque+ 10+2* 40,0 10+ 80,0 90,0total=(cantidad1+cantidad2)*precio;+ antesque* (10+ 2)*40,0 12* 40,0 480,0

    Pgina 100Fundamentosdelaprogramacin:TiposeinstruccionesI

    LuisH

    ernnd

    ezY

    ez

    Ejemplodeusodevariablesyexpresiones#includeusingnamespacestd;int main(){

    int cantidad;double precio,total;cantidad=12;precio=39.95;total=cantidad*precio;cout

  • LuisH

    ernnd

    ezY

    ez

    Memoria

    ...

    Ejemplodeusodevariables#includeusingnamespacestd;intmain(){

    int cantidad;double precio,total;

    Pgina 102Fundamentosdelaprogramacin:TiposeinstruccionesI

    cantidad ?

    precio ?

    total ?

    LuisH

    ernnd

    ezY

    ez

    Ejemplodeusodevariables#includeusingnamespacestd;intmain(){

    intcantidad;doubleprecio,total;cantidad=12;

    Pgina 103Fundamentosdelaprogramacin:TiposeinstruccionesI

    Memoria

    ...

    cantidad 12

    precio ?

    total ?

  • LuisH

    ernnd

    ezY

    ez

    Ejemplodeusodevariables#includeusingnamespacestd;intmain(){

    intcantidad;doubleprecio,total;cantidad=12;precio=39.95;

    Pgina 104Fundamentosdelaprogramacin:TiposeinstruccionesI

    Memoria

    ...

    cantidad 12

    precio 39.95

    total ?

    LuisH

    ernnd

    ezY

    ez

    Ejemplodeusodevariables#includeusingnamespacestd;intmain(){

    intcantidad;doubleprecio,total;cantidad=12;precio=39.95;total=cantidad*precio;

    Pgina 105Fundamentosdelaprogramacin:TiposeinstruccionesI

    Memoria

    ...

    cantidad 12

    precio 39.95

    total 479.4

  • LuisH

    ernnd

    ezY

    ez

    Ejemplodeusodevariables#includeusingnamespacestd;intmain(){

    intcantidad;doubleprecio,total;cantidad=12;precio=39.95;total=cantidad*precio;cout

  • LuisH

    ernnd

    ezY

    ez

    Pgina 108Fundamentosdelaprogramacin:TiposeinstruccionesI

    LuisH

    ernnd

    ezY

    ez

    cin (iostream)Lecturadevaloresdevariables:operador>> (extractor)

    Pgina 109Fundamentosdelaprogramacin:TiposeinstruccionesI

    cin>>cantidad;cin >>cantidad;

    character inputstreamcharacter inputstream

    Memoria

    cantidad ?...

    _

    12

    1 2 1 2

  • LuisH

    ernnd

    ezY

    ez

    Elextractor>>TransformaloscaracteresintroducidosendatosCursorparpadeante:lugardelecturadelsiguientecarcterLaentradaterminaconIntro (cursoralasiguientelnea)EldestinodelextractordebeserSIEMPRE unavariable!Seignoranlosespaciosenblancoiniciales

    Pgina 110Fundamentosdelaprogramacin:TiposeinstruccionesI

    cin>>variable;LuisH

    ernnd

    ezY

    ez

    Lecturadevaloresenteros(int)Seleendgitoshastaencontraruncarcterquenolosea

    12abc 12abc 12abc 12Seasignaelvalor12alavariableElrestoquedapendienteparalasiguientelecturaRecomendacin:Leecadavariableenunalnea 12

    Lecturadevaloresreales(double)Seleendgitos,elpuntodecimalyotrosdgitos

    39.95.5abc 39.95abc 39.95Seasignaelvalor39,95alavariable;elrestoquedapendienteRecomendacin:Leecadavariableenunalnea 39.95

    Pgina 111Fundamentosdelaprogramacin:TiposeinstruccionesI

  • LuisH

    ernnd

    ezY

    ez

    Qupasasielusuarioseequivoca?EldatonosercorrectoAplicacinprofesional:cdigodecomprobacinyayudaAqusupondremosquelosusuariosnoseequivocanEnocasionesaadiremoscomprobacionessencillas

    Pgina 112Fundamentosdelaprogramacin:TiposeinstruccionesI

    Paraevitarerrores,leecadadatoenunainstruccinaparteParaevitarerrores,leecadadatoenunainstruccinaparte

    LuisH

    ernnd

    ezY

    ez

    Qupasasielusuarioseequivoca?int cantidad;double precio,total;coutcantidad;coutprecio;cout

  • LuisH

    ernnd

    ezY

    ez

    Qupasasielusuarioseequivoca?

    Pgina 114Fundamentosdelaprogramacin:TiposeinstruccionesI

    12 paracantidadNosepuedeleerunreal 0 paraprecio yError12 paracantidadNosepuedeleerunreal 0 paraprecio yError12 paracantidad.5 0,5 paraprecioLodemsquedapendiente12 paracantidad.5 0,5 paraprecioLodemsquedapendiente

    Lecturacorrecta!!!Lecturacorrecta!!!

    LuisH

    ernnd

    ezY

    ez

    DivisindedosnmerosPediralusuariodosnmerosymostrarleelresultadodedividirelprimeroentreelsegundoAlgoritmo.1. Pedirelnumerador2. Pedireldenominador3. Realizarladivisin,guardandoelresultado

    4. MostrarelresultadoPgina 115Fundamentosdelaprogramacin:TiposeinstruccionesI

    Datos/clculos

    Variabledenominador (double)Variableresultado (double)

    resultado=numerador/denominador

    Variablenumerador (double)

  • LuisH

    ernnd

    ezY

    ez

    ProcesamientoEntrada SalidaDeclaraciones

    EntradaProcesoSalidaMuchosprogramasseajustanaunsencilloesquema:

    Pgina 116Fundamentosdelaprogramacin:TiposeinstruccionesI

    1. Leernumerador2. Leerdenominador3. Calculardivisinenresultado4. Mostrarresultado

    LuisH

    ernnd

    ezY

    ez

    DivisindedosnmerosPediralusuariodosnmerosymostrarleelresultadodedividirelprimeroentreelsegundo.1. Leernumerador2. Leerdenominador3. Calculardivisinenresultado4. Mostrarresultado

    Pgina 117Fundamentosdelaprogramacin:TiposeinstruccionesI

    cin>>numerador;cin>>numerador;

    cin>>denominador;cin>>denominador;

    resultado=numerador/denominador;resultado=numerador/denominador;

    cout

  • LuisH

    ernnd

    ezY

    ez

    Divisindedosnmeros#includeusingnamespacestd;

    int main(){

    double numerador,denominador,resultado;coutnumerador;coutdenominador;resultado=numerador/denominador;cout

  • LuisH

    ernnd

    ezY

    ez

    ProblemaDadaslabaseylaalturadeuntringulo,mostrarsurea

    Mostrarenlapantallauntextoquepidalabasedeltringulo.Elusuariointroducirelvalorconelteclado.Mostrarenlapantallauntextoquepidalaalturadeltringulo.Elusuariointroducirelvalorconelteclado.Secalcularelreadeltringuloysemostrarenlapantalla.

    Pgina 120Fundamentosdelaprogramacin:TiposeinstruccionesI

    RefinamientoRefinamiento

    LuisH

    ernnd

    ezY

    ez

    Objetos:Datosquemanejaelprograma

    Mostrarenlapantallauntextoquepidalabasedeltringulo.Elusuariointroducirlabaseconelteclado.Mostrarenlapantallauntextoquepidalaalturadeltringulo.Elusuariointroducirlaalturaconelteclado.Secalcularelreadeltringuloysemostrarenlapantalla.

    Pgina 121Fundamentosdelaprogramacin:TiposeinstruccionesI

    coutcout cadenaliteralcadenaliteralvariablevariable cincin

    cadenaliteralcadenaliteral variablevariablevariablevariable

  • LuisH

    ernnd

    ezY

    ez

    Datosquemanejaelprograma:tipos

    Pgina 122Fundamentosdelaprogramacin:TiposeinstruccionesI

    Objeto Tipo Vara? NombrePantalla Variable cout"Introduzcalabasedeltringulo:" Constante ningunoBasedeltringulo double Variable baseTeclado Variable cin"Introduzcalaalturadeltringulo:" Constante ningunoAlturadeltringulo double Variable alturareadeltringulo double Variable area

    LuisH

    ernnd

    ezY

    ez

    Operaciones(acciones)

    Mostrarenlapantallauntextoquepidalabasedeltringulo.Elusuariointroducirlabaseconelteclado. Mostrarenlapantallauntextoquepidalaalturadeltringulo.Elusuariointroducirlaalturaconelteclado.Secalcularelreadeltringuloysemostrarenlapantalla.

    Pgina 123Fundamentosdelaprogramacin:TiposeinstruccionesI

    cout...

    area =base*altura/2area =base*altura/2

  • LuisH

    ernnd

    ezY

    ez

    Secuenciadeaccionesquehaderealizarelprogramaparaconseguirresolverelproblema1. Mostrarenlapantallaeltextoquepidalabasedeltringulo2. Leerdeltecladoelvalorparalabasedeltringulo3. Mostrarenlapantallaeltextoquepidalaaltura4. Leerdeltecladoelvalorparalaalturadeltringulo5. Calcularelreadeltringulo6. Mostrarelreadeltringulo

    Pgina 124Fundamentosdelaprogramacin:TiposeinstruccionesI

    LuisH

    ernnd

    ezY

    ez

    #includeusingnamespacestd;int main(){

    return 0;}

    Pgina 125Fundamentosdelaprogramacin:TiposeinstruccionesI

    AlgoritmotraducidoacdigoenC++

    Declaraciones1. Mostrarenlapantallaeltextoquepidalabasedeltringulo2. Leerdeltecladoelvalorparalabasedeltringulo3. Mostrarenlapantallaeltextoquepidalaalturadeltringulo4. Leerdeltecladoelvalorparalaalturadeltringulo5. Calcularelreadeltringulo6. Mostrarelreadeltringulo

  • LuisH

    ernnd

    ezY

    ez

    Elprograma:implementacin#includeusingnamespacestd;int main(){

    double base,altura,area;//Declaracionescoutbase;//2coutaltura;//4area =base*altura/2;//5cout

  • LuisH

    ernnd

    ezY

    ez

    Variabilidaddelosdatos

    Pgina 128Fundamentosdelaprogramacin:TiposeinstruccionesI

    DatosDatosConstantesConstantes

    LiteralesLiterales

    ConnombreConnombre

    VariablesVariables

    "Introduzcalabasedeltringulo:"3.141592653589

    base,altura,area

    Pi=3.141592653589

    IdentificadoresIdentificadores

    LuisH

    ernnd

    ezY

    ez

    Pgina 129Fundamentosdelaprogramacin:TiposeinstruccionesI

  • LuisH

    ernnd

    ezY

    ez

    Paravariablesyconstantesconnombre Nombre deundato(paraaccederlo/modificarlo) DebenserdescriptivosSintaxis:

    Pgina 130Fundamentosdelaprogramacin:TiposeinstruccionesI

    Almenos32caracteressignificativosAlmenos32caracteressignificativos

    0..9,a..z,A..Z,_

    a..z,A..Z,_

    Nieesnivocalesacentuadas!Nieesnivocalesacentuadas!

    palabrasreservadas

    cantidadprrecio totalbasealturaarea numeradorcantidadprrecio totalbasealturaarea numerador

    LuisH

    ernnd

    ezY

    ez

    PalabrasreservadasdellenguajeC++asm autoboolbreakcasecatchcharclassconstconst_cast continuedefaultdeletedodoubledynamic_cast elseenumexplicitexternfalsefloatforfriendgoto ifinlineintlongmutablenamespacenewoperatorprivateprotectedpublicregisterreinterpret_cast returnshortsignedsizeofstaticstatic_cast structswitchtemplatethisthrowtruetrytypedeftypeidtypename unionunsignedusingvirtualvoidvolatilewhile

    Pgina 131Fundamentosdelaprogramacin:TiposeinstruccionesI

  • LuisH

    ernnd

    ezY

    ez

    Quidentificadoressonvlidos?balance interesAnual

    _base_imponible aos

    EDAD12 salario_1_mes

    __edad clculoNmina

    valor%100 AlgunValor

    100caracteres valor?

    _12_meses ____valor

    Pgina 132Fundamentosdelaprogramacin:TiposeinstruccionesI

    0..9,a..z,A..Z,_

    a..z,A..Z,_LuisH

    ernnd

    ezY

    ez

    Pgina 133Fundamentosdelaprogramacin:TiposeinstruccionesI

  • LuisH

    ernnd

    ezY

    ez

    TiposCadadato,deuntipoconcretoCadatipoestablece: Elconjunto(intervalo)devaloresvlidos ElconjuntodeoperacionesquesepuedenrealizarExpresionescondatosdedistintostipos(compatibles):Transformacinautomticadetipos(promocindetipo)

    Pgina 134Fundamentosdelaprogramacin:TiposeinstruccionesI

    125'a'true3.14159

    "Hola"

    AnexodelTema2:detallestcnicosAnexodelTema2:detallestcnicos

    LuisH

    ernnd

    ezY

    ez

    intNmerosenteros(sindecimales) 1363,12,49floatNmerosreales 12.45,3.1932,1.16E+02doubleNmerosreales(mayoresintervaloyprecisin)charCaracteres 'a' ,'{','\t'boolValoreslgicos(verdadero/falso) true,falsestringCadenasdecaracteres(bibliotecastring) "HolaMundo!"voidNada,ausenciadetipo,ausenciadedato(funciones)

    Pgina 135Fundamentosdelaprogramacin:TiposeinstruccionesI

  • LuisH

    ernnd

    ezY

    ez

    Intervalodevalores:Juegodecaracteres(ASCII)Literales:'a''%''\t'Constantesdebarrainvertida(osecuenciasdeescape):Caracteresdecontrol'\t' =tabulador'\n' =saltodelnea

    Pgina 136Fundamentosdelaprogramacin:TiposeinstruccionesI

    ASCII(cdigos32..127)ASCII(cdigos32..127)ISO88591(ASCIIextendido:cdigos128..255)ISO88591(ASCIIextendido:cdigos128..255)

    1byteCaracteres

    LuisH

    ernnd

    ezY

    ez

    Slodosvaloresposibles: Verdadero(true) Falso(false)Literales:

    truefalse

    Cualquiernmerodistintode0 esequivalenteatrueEl0 esequivalenteafalse

    Pgina 137Fundamentosdelaprogramacin:TiposeinstruccionesI

    Valoreslgicos

  • LuisH

    ernnd

    ezY

    ez

    C++distingueentremaysculasyminsculasint:palabrareservadadeC++paradeclarardatosenterosInt,INT oinT nosonpalabrasreservadasdeC++true:palabrareservadadeC++paraelvalorverdaderoTrue oTRUE nosonpalabrasreservadasdeC++

    Pgina 138Fundamentosdelaprogramacin:TiposeinstruccionesI

    LuisH

    ernnd

    ezY

    ez

    "Hola""Introduceelnumerador:""X142FG5TX?%A"

    SecuenciasdecaracteresProgramasconvariablesdetipostring:#includeusingnamespacestd;

    Pgina 139Fundamentosdelaprogramacin:TiposeinstruccionesI

    " "

    Lascomillastipogrficas(apertura/cierre) NOsirvenAsegratedeutilizarcomillasrectas:""

    char

    Cadenasdecaracteres

  • LuisH

    ernnd

    ezY

    ez

    Pgina 140Fundamentosdelaprogramacin:TiposeinstruccionesI

    tipos.cpptipos.cpp

    #include#includeusingnamespacestd;//Unsolousing...paraambasbibliotecasint main(){

    int entero=3;//Podemosasignar(inicializar)aldeclarardouble real=2.153;char caracter ='a';bool cierto=true;string cadena="Hola";cout

  • LuisH

    ernnd

    ezY

    ez

    Pgina 142Fundamentosdelaprogramacin:TiposeinstruccionesI

    LuisH

    ernnd

    ezY

    ez

    [modificadores]tipo lista_de_variables;Opcional

    lista_de_variables

    int i,j,l;shortintunidades;unsignedshortintmonedas;double balance,beneficio,perdida;

    Pgina 143Fundamentosdelaprogramacin:TiposeinstruccionesI

    Identificador

    Programacinconbuenestilo:IdentificadoresdescriptivosEspaciotrascadacomaNombresdelasvariablesenminsculas(Variaspalabras:capitalizacadainicial:interesPorMes)

    ,

  • LuisH

    ernnd

    ezY

    ez

    Sereservamemoriasuficienteparacadatipodedatoint inicio;shortintunidades;double balance;

    Pgina 144Fundamentosdelaprogramacin:TiposeinstruccionesI

    Memoria01

    02

    03

    04

    05

    06

    07

    08

    09

    10

    11

    12

    13

    14

    15

    ...

    inicio

    unidades

    balance

    LuisH

    ernnd

    ezY

    ez

    EnC++lasvariablesnoseinicializanautomticamente!Unavariabledebeserhabersidoinicializadaantesdeseraccedida!Cmoseinicializaunavariable?

    Alleersuvalor(cin>>) Alasignarleunvalor(instruccindeasignacin) Aldeclararla

    Inicializacinenlapropiadeclaracin:

    Pgina 145Fundamentosdelaprogramacin:TiposeinstruccionesI

    Expresin:valorcompatibleExpresin:valorcompatibleIdentificador Expresin =

    Enparticular,unaexpresinpuedeserunliteral

    int i=0,j,l=26;shortintunidades=100;

  • LuisH

    ernnd

    ezY

    ez

    Obtencindelvalordeunavariable Nombredelavariableenunaexpresin

    cout

  • LuisH

    ernnd

    ezY

    ez

    Eloperador=Alaizquierda,SIEMPREunavariable

    int i,j=2;i=23 +j*5;//itomaelvalor33

    ;Expresin=

    Pgina 148Fundamentosdelaprogramacin:TiposeinstruccionesI

    Variable

    LuisH

    ernnd

    ezY

    ez

    Erroresint a,b,c;5 =a;

    //ERROR:unliteralnopuederecibirunvalora+23 =5;

    //ERROR:nopuedehaberunaexpresinalaizda.b="abc";

    //ERROR:unenteronopuedeguardarunacadenac=23 5;

    //ERROR:expresinnovlida(faltaoperador)

    Pgina 149Fundamentosdelaprogramacin:TiposeinstruccionesI

  • LuisH

    ernnd

    ezY

    ez

    int i,j=2;i=23 +j*5;

    Pgina 150Fundamentosdelaprogramacin:TiposeinstruccionesI

    Memoria01

    02

    03

    04

    05

    06

    07

    08

    09

    10

    ...

    i

    j 2

    ?Memoria

    01

    02

    03

    04

    05

    06

    07

    08

    09

    10

    ...

    i

    j 2

    3323 +2 *523 +2 *5

    LuisH

    ernnd

    ezY

    ez

    Necesitamosunavariableauxiliardouble a=3.45,b=127.5,aux;

    Pgina 151Fundamentosdelaprogramacin:TiposeinstruccionesI

    a 3.45

    b 127.5

    aux ?

    a 3.45

    b 127.5

    aux 3.45

    a 127.5

    b 127.5

    aux 3.45

    a 127.5

    b 3.45

    aux 3.45

    aux=a;

    a=b;

    b=aux;

  • LuisH

    ernnd

    ezY

    ez

    Pgina 152Fundamentosdelaprogramacin:TiposeinstruccionesI

    LuisH

    ernnd

    ezY

    ez

    OperacionessobrevaloresdelostiposCadatipodeterminalasoperacionesposiblesTiposdedatosnumricos(int,float ydouble):

    Asignacin(=) Operadoresaritmticos Operadoresrelacionales(menor,mayor,igual,...)Tipodedatosbool: Asignacin(=) Operadoreslgicos(Y,O,NO)Tiposdedatoschar ystring: Asignacin(=) Operadoresrelacionales(menor,mayor,igual,...)

    Pgina 153Fundamentosdelaprogramacin:TiposeinstruccionesI

  • LuisH

    ernnd

    ezY

    ez

    Operadoresparatiposdedatosnumricos

    Pgina 154Fundamentosdelaprogramacin:TiposeinstruccionesI

    Operador Operandos Posicin int float /double 1(monario) Prefijo Cambiodesigno+ 2(binario) Infijo Suma 2(binario) Infijo Resta* 2(binario) Infijo Producto/ 2(binario) Infijo Div.entera Divisinreal% 2(binario) Infijo Mdulo Noaplicable++ 1(monario) Prefijo/postfijo Incremento 1(monario) Prefijo/postfijo Decremento

    LuisH

    ernnd

    ezY

    ez

    OperadoresmonariosyoperadoresbinariosOperadoresmonarios (unarios) Cambiodesigno():

    Delantedevariable,constanteoexpresinentreparntesissaldoRATIO(3 *a b)

    Incremento/decremento(slovariables)(prefijo/postfijo):++interes mesesj++ //1ms1menos

    Operadoresbinarios OperandoizquierdooperadoroperandoderechoOperandos:literales,constantes,variablesoexpresiones

    2 +3 a*RATIOa+b(a%b)*(c/d)

    Pgina 155Fundamentosdelaprogramacin:TiposeinstruccionesI

  • LuisH

    ernnd

    ezY

    ez

    Divisinenteraodivisinreal?Ambosoperandosenteros:divisinenteraint i=23,j=2;cout

  • LuisH

    ernnd

    ezY

    ez

    OperadoresdeincrementoydecrementoIncremento/decrementodelavariable numricaenunaunidad

    Prefijo:Antesdeaccederint i=10,j;j=++i;//Incrementaantesdecopiarcout

  • LuisH

    ernnd

    ezY

    ez

    Pgina 160Fundamentosdelaprogramacin:TiposeinstruccionesI

    LuisH

    ernnd

    ezY

    ez

    Enquordenseevalanlosoperadores?3 +5 *2 /2 1

    Deizquierdaaderecha?Dederechaaizquierda?Unosantesqueotros?Precedenciadelosoperadores(prioridad):

    SeevalananteslosdemayorprecedenciaYsitienenigualprioridad?

    Normalmente,deizquierdaaderechaParntesis:fuerzanaevaluarsusubexpresin

    Pgina 161Fundamentosdelaprogramacin:TiposeinstruccionesI

  • LuisH

    ernnd

    ezY

    ez

    Pgina 162Fundamentosdelaprogramacin:TiposeinstruccionesI

    Precedencia OperadoresMayorprioridad ++ (postfijos)

    ++ (prefijos) (cambiodesigno)*/%

    Menorprioridad +

    3 +5 *2 /2 1

    Mismaprecedencia:IzquierdaantesMismaprecedencia:Izquierdaantes Mismaprecedencia:IzquierdaantesMismaprecedencia:IzquierdaantesMayorprecedenciaMayorprecedencia

    3 +10 /2 1 3 +5 1 8 1 7

    LuisH

    ernnd

    ezY

    ez

    Pgina 163Fundamentosdelaprogramacin:TiposeinstruccionesI

    Primero,losparntesis...Primero,losparntesis...((3 + 5)*4 +12)/4 (3 * 2 1)* antesque* antesque

    (8 *4 +12)/4 (6 1)* antesque+* antesque+

    (32 +12)/4 5

    44 /4 5

    11 5

    6

    / antesque/ antesquePonespacioantesydespusdecadaoperadorbinarioPonespacioantesydespusdecadaoperadorbinario

  • LuisH

    ernnd

    ezY

    ez

    #includeusingnamespacestd;

    int main(){double x,f;coutx;f=3 *x*x/5 +6 *x/7 3;cout

  • LuisH

    ernnd

    ezY

    ez

    Valorsiguientealmximo?Valormayordelmximo(omenordelmnimo)deltiposhortinti=32767;//Valormximoparashortinti++;//32768nocabe enunshortintcout

  • LuisH

    ernnd

    ezY

    ez

    Declaracindeconstantes ModificadordeaccesoconstVariablesinicializadasalasquenodejamosvariar

    Pgina 168Fundamentosdelaprogramacin:TiposeinstruccionesI

    Declaracindevariableconinicializador

    Programacinconbuenestilo:Ponenmaysculalaprimeraletradeunaconstanteotodosunombre

    Laconstantenopodrvolveraapareceralaizquierdadeun=Laconstantenopodrvolveraapareceralaizquierdadeun=

    constconst

    constshortintMeses=12;constdouble Pi=3.141592,

    RATIO=2.179 *Pi;

    LuisH

    ernnd

    ezY

    ez

    AumentanlalegibilidaddelcdigocambioPoblacion =(0.1758 0.1257)*poblacion; vs.cambioPoblacion =(RatioNacimientos RatioMuertes)*poblacion;

    Facilitanlamodificacindelcdigodouble compra1=bruto1*18 /100;double compra2=bruto2*18 /100;double total=compra1+compra2;cout

  • LuisH

    ernnd

    ezY

    ez

    Pgina 170Fundamentosdelaprogramacin:TiposeinstruccionesI

    constantes.cppconstantes.cpp

    #includeusingnamespacestd;int main(){

    const double Pi=3.141592;double radio=12.2,circunferencia;circunferencia=2 *Pi*radio;cout

  • LuisH

    ernnd

    ezY

    ez

    Pgina 172Fundamentosdelaprogramacin:TiposeinstruccionesI

    abs(x) Valorabsolutodexpow(x,y) xelevadoaysqrt(x) Razcuadradadexceil(x) Menorenteroque esmayoroigualquexfloor(x) Mayorenteroqueesmenoroigualquexexp(x) exlog(x) Ln x(logaritmonaturaldex)log10(x) Logaritmoenbase10 dexsin(x) Senodexcos(x) Coseno dextan(x) Tangentedexround(x) Redondeoalenteromsprximotrunc(x) Prdidadelapartedecimal(entero)

    #includeAlgunas...Algunas...

    LuisH

    ernnd

    ezY

    ez

    #includeusingnamespacestd;#includeint main(){double x,y,f;coutx;couty;f=2 *pow(x,5) +sqrt(pow(x,3) /pow(y,2))

    /abs(x*y) cos(y);cout

  • LuisH

    ernnd

    ezY

    ez

    Pgina 174Fundamentosdelaprogramacin:TiposeinstruccionesI

    LuisH

    ernnd

    ezY

    ez

    Asignacin,++/ yoperadoresrelacionalesFuncionesparacaracteres (bibliotecacctype)

    isalnum(c) true sic esunaletraoundgitoisalpha(c) true sic esunaletraisdigit(c) true sic esundgitoislower(c) true sic esunaletraminsculaisupper(c) true sic esunaletramaysculatoupper(c) devuelvelamaysculadectolower(c) devuelvelaminsculadec

    Pgina 175Fundamentosdelaprogramacin:TiposeinstruccionesI

    char

    false encasocontrario

  • LuisH

    ernnd

    ezY

    ez

    ...#includeint main(){

    char caracter1='A',caracter2='1',caracter3='&';cout

  • LuisH

    ernnd

    ezY

    ez

    OperadoresrelacionalesComparaciones(condiciones)

    Condicinsimple::=ExpresinOperador_relacional ExpresinConcordanciadetipoentrelasexpresionesResultado:bool (true ofalse)

    Pgina 178Fundamentosdelaprogramacin:TiposeinstruccionesI

    < menorque mayorque>= mayoroigualque== igualque!= distintode

    Operadores(prioridad)...*/%+< >===!==+==*=/=%=

    LuisH

    ernnd

    ezY

    ez

    Menorprioridadquelosoperadoresaditivosymultiplicativosbool resultado;int a=2,b=3,c=4;resultado=a< 5;//2= 12;//10>=12 falseresultado=a*(b+c)>= 12;//14>=12 trueresultado=a!= b;//2!=3 trueresultado=a*b> c+5;//6>9 falseresultado=a+b== c+1;//5==5 true

    Pgina 179Fundamentosdelaprogramacin:TiposeinstruccionesI

    Noconfundaseloperadordeigualdad(==)coneloperadordeasignacin(=)Noconfundaseloperadordeigualdad(==)coneloperadordeasignacin(=)

  • LuisH

    ernnd

    ezY

    ez

    Pgina 180Fundamentosdelaprogramacin:TiposeinstruccionesI

    LuisH

    ernnd

    ezY

    ez

    Pgina 181Fundamentosdelaprogramacin:TiposeinstruccionesI

    Seleccin:bifurcacincondicionaltruetrue

    cdigoT

    falsefalse

    cdigoF

    if (condicin) {cdigoT

    }else{

    cdigoF}

    CondicinCondicin

    int num;coutnum;if (num%2 ==0){

    cout

  • LuisH

    ernnd

    ezY

    ez

    Pgina 182Fundamentosdelaprogramacin:TiposeinstruccionesI

    #includeusingnamespacestd;int main(){

    intop1=13,op2=4;intopcion;cout

  • LuisH

    ernnd

    ezY

    ez

    {intruccin1intruccin2...intruccinN

    }

    {intruccin1intruccin2...intruccinN

    }

    Pgina 184Fundamentosdelaprogramacin:TiposeinstruccionesI

    AgrupacindeinstruccionesGrupodeinstruccionesaejecutarenunaramadelif

    Tab3esp.Tab3esp.

    int num,total=0;cin>>num;if (num>0){

    cout

  • LuisH

    ernnd

    ezY

    ez

    Pgina 186Fundamentosdelaprogramacin:TiposeinstruccionesI

    LuisH

    ernnd

    ezY

    ez

    Pgina 187Fundamentosdelaprogramacin:TiposeinstruccionesI

    Repeticinoiteracincondicional

    while (condicin) {cuerpo

    }Cuerpo

    truetrue falsefalse

    Bloquedecdigo

    Silacondicinesfalse alempezar,noseejecutaelcuerponingunavezSilacondicinesfalse alempezar,noseejecutaelcuerponingunavez

    cuerpo)condicin(while

    Condicin

  • LuisH

    ernnd

    ezY

    ez

    Pgina 188Fundamentosdelaprogramacin:TiposeinstruccionesI

    #includeusingnamespacestd;int main(){

    inti=1,n=0,suma=0;while (n

  • LuisH

    ernnd

    ezY

    ez

    Pgina 190Fundamentosdelaprogramacin:TiposeinstruccionesI

    LuisH

    ernnd

    ezY

    ez

    1 6 = l a t o T7 3 5 . 3 5 1

    Flujosdetexto(streams)ConectanlaejecucindelprogramaconlosdispositivosdeE/SSonsecuenciasdecaracteresEntradaporteclado:flujodeentradacin (tipoistream)Salidaporpantalla:flujodesalidacout (tipoostream)

    Pgina 191Fundamentosdelaprogramacin:TiposeinstruccionesI

    Programa

    cincin coutcout

    Bibliotecaiostream conespaciodenombresstdBibliotecaiostream conespaciodenombresstdFlujodeentrada Variable>>

    Flujodesalida Expresin

  • LuisH

    ernnd

    ezY

    ez

    Saltalosespaciosenblanco(espacios,tabuladoresosaltosdelnea) charSeleeuncarcterenlavariable intSeleendgitosysetransformanenelvaloraasignar float/double:Seleendgitos(quizelpuntoymsdgitos)yseasignaelvalor bool:Siselee1,seasignatrue;concualquierotrovalorseasignafalse

    Pgina 192Fundamentosdelaprogramacin:TiposeinstruccionesI

    Variablecin >>

    SeamigableconelusuarioLeecadadatoenunalneaSeamigableconelusuarioLeecadadatoenunalneacoutedad;

    LuisH

    ernnd

    ezY

    ez

    cin>>cadena terminaconelprimerespacioenblancocin.sync() descartalaentradapendiente

    Pgina 193Fundamentosdelaprogramacin:TiposeinstruccionesI

    Cmoleervariaspalabras?Siguientepgina...

    Cmoleervariaspalabras?Siguientepgina...

    apellidos recibe"Antonio"apellidos recibe"Antonio"

    string nombre,apellidos;coutnombre;coutapellidos;cout

  • LuisH

    ernnd

    ezY

    ez

    Pgina 194Fundamentosdelaprogramacin:TiposeinstruccionesI

    LecturasinsaltarlosespaciosenblancoinicialesLlamadaafuncionesconeloperadorpunto(.):Eloperadorpuntopermitellamaraunafuncinsobreunavariablevariable.funcin(argumentos)

    Lecturadeuncarctersinsaltarespaciosenblanco:cin.get(c);//LeeelsiguientecarcterLecturadecadenassinsaltarlosespaciosenblanco:getline(cin,cad);Leetodoloquehayahastaelfinaldelalnea(Intro)Recuerda:Espaciosenblanco sonespacios,tabuladores,saltosdelnea,...

    LuisH

    ernnd

    ezY

    ez

    Representacintextualdelosdatosint meses=7;cout

  • LuisH

    ernnd

    ezY

    ez

    int meses=7;cout

  • LuisH

    ernnd

    ezY

    ez

    bool fin=false;cout

  • LuisH

    ernnd

    ezY

    ez

    Losprogramaspuedenincluirotrasfuncionesademsdemain()FormageneraldeunafuncinenC++:tipo nombre(parmetros)//Cabecera{

    //Cuerpo}

    Tipo dedatoquedevuelvelafuncincomoresultado Parmetros paraproporcionardatosalafuncin

    Declaracionesdevariablesseparadasporcomas Cuerpo:secuenciadedeclaracioneseinstruccionesUnbloquedecdigo!

    Pgina 200Fundamentosdeprogramacin:TiposeinstruccionesI

    LuisH

    ernnd

    ezY

    ez

    Datoslocales:declaradosenelcuerpodelafuncinDatosauxiliaresqueutilizalafuncin(puedenohaber)

    Parmetros:declaradosenlacabeceradelafuncinDatosdeentradadelafuncin(puedenohaber)

    Ambossondeusoexclusivodelafuncinynoseconocenfueradouble f(intx,int y){

    //Declaracindedatoslocales:double resultado;

    //Instrucciones:resultado=2 *pow(x,5) +sqrt(pow(x,3)

    /pow(y,2)) /abs(x*y) cos(y);return resultado;//Devolucindelresultado

    }

    Pgina 201Fundamentosdeprogramacin:TiposeinstruccionesI

  • LuisH

    ernnd

    ezY

    ez

    LlamadaaunafuncinconparmetrosNombre(Argumentos)Alllamaralafuncin: Tantosargumentosentrelosparntesiscomoparmetros Ordendedeclaracindelosparmetros Cadaargumento:mismotipoquesuparmetro Cadaargumento:expresinvlida(sepasaelresultado)

    SecopianlosvaloresresultantesdelasexpresionesenloscorrespondientesparmetrosLlamadasalafuncin:enexpresionesdeotras funcionesint valor=f(2,3);

    Pgina 202Fundamentosdeprogramacin:TiposeinstruccionesI

    LuisH

    ernnd

    ezY

    ez

    Secopianlosargumentosenlosparmetrosint funcion(int x,double a){

    ...}

    int main(){int i=124;double d=3;funcion(i,33 *d);...

    return0;//main()devuelve0alS.O.}

    Pgina 203Fundamentosdeprogramacin:TiposeinstruccionesI

    Memoria

    i 124

    d 3.0

    ...

    ...

    x 124

    a 99.0

    ...

    LosargumentosnosemodificanLosargumentosnosemodifican

  • LuisH

    ernnd

    ezY

    ez

    LafuncinhadedevolverunresultadoLafuncinterminasuejecucindevolviendounresultadoLainstruccinreturn (slounaencadafuncin) Devuelveeldatoqueseponeacontinuacin(tipodelafuncin) TerminalaejecucindelafuncinEldatodevueltosustituyealallamadadelafuncin:int cuad(int x){ int main(){

    return x*x; cout

  • LuisH

    ernnd

    ezY

    ez

    #includeusingnamespacestd;#include//Prototiposdelasfunciones(exceptomain())bool par(int num);boolletra(char car);intsuma(int num);double formula(int x,inty);int main(){

    intnumero,sum,x,y;char caracter;double f;coutnumero;if (par(numero)){

    cout

  • LuisH

    ernnd

    ezY

    ez

    //Implementacindelasfuncionespropiasboolpar(int num){

    bool esPar;

    if (num%2==0){esPar =true;

    }else {

    esPar =false;}

    return esPar;}...

    Pgina 208Fundamentosdeprogramacin:TiposeinstruccionesI

    LuisH

    ernnd

    ezY

    ez

    bool letra(char car){bool esLetra;if ((car>='a')&&(car='A')&&(car

  • LuisH

    ernnd

    ezY

    ez

    double formula(int x,inty){double f;

    f=2 *pow(x,5)+sqrt(pow(x,3)/pow(y,2))/abs(x*y) cos(y);

    return f;}

    Pgina 210Fundamentosdeprogramacin:TiposeinstruccionesI

    funciones.cppfunciones.cppLuisH

    ernnd

    ezY

    ez

    LicenciaCC(Creative Commons)Estetipodelicenciasofrecenalgunosderechosaterceraspersonasbajociertascondiciones.Estedocumentotieneestablecidaslassiguientes:

    Pulsaenlaimagendearribaaladerechaparasaberms.Fundamentosdelaprogramacin:TiposeinstruccionesI Pgina 211

    Reconocimiento(Attribution):Encualquierexplotacindelaobraautorizadaporlalicenciaharfaltareconocerlaautora.Nocomercial(Noncommercial):Laexplotacindelaobraquedalimitadaausosnocomerciales.Compartirigual(Sharealike):Laexplotacinautorizadaincluyelacreacindeobrasderivadassiemprequemantenganlamismalicenciaalserdivulgadas.

  • 2AGradoenIngenieraInformticaGradoenIngenieradelSoftwareGradoenIngenieradeComputadores

    LuisHernndezYezFacultaddeInformticaUniversidadComplutense

    FundamentosdelaprogramacinLuisH

    ernnd

    ezY

    ez

    int 214float 216Notacincientfica 217double 218char 220bool 221string 222Literalesconespecificacindetipo 223

    Fundamentosdelaprogramacin:TiposeinstruccionesI(Anexo)

  • LuisH

    ernnd

    ezY

    ez

    Intervalodevalores:2147483648 ..2147483647

    Bytesdememoria:4*Literales:1363,12,010 ,0x1A

    Pgina 214Fundamentosdelaprogramacin:TiposeinstruccionesI(Anexo)

    01

    02

    03

    04

    05

    06

    07

    08

    09

    ...

    NotacinhexadecimalNotacinhexadecimal

    (*)Dependedelamquina4byteseslomshabitualSepuedesabercuntosseusanconlafuncinsizeof(int)

    (*)Dependedelamquina4byteseslomshabitualSepuedesabercuntosseusanconlafuncinsizeof(int)

    NotacinoctalNotacinoctal

    +

    0

    x 0..9,A..F0..9,A..F

    0..90..9

    0..7

    NmerosenterosLuisH

    ernnd

    ezY

    ez

    Nmerosennotacinoctal(base8:dgitosentre0y7):010 =8ennotacindecimal10=1x 81 +0x 80 =1x 8+00423 =275ennotacindecimal423=4x 82 +2x 81 +3x 80 =4x 64+2x 8+3=256+16+3

    Nmerosennotacinhexadecimal(base16):Dgitos posibles:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F

    0x1F =31 ennotacindecimal1F=1x 161 +Fx 160 =1x 16+150xAD =173ennotacindecimalAD=Ax 161 +Dx 160 =10x 16+13=160+13

    Pgina 215Fundamentosdelaprogramacin:TiposeinstruccionesI(Anexo)

    Nmerosenteros

  • LuisH

    ernnd

    ezY

    ez

    Intervalodevalores:+/ 1.18e38 ..3.40e+38

    Bytesdememoria:4*Puntoflotante.Precisin:7 dgitosLiterales(puntodecimal):Notacinnormal:134.45,1.1764

    Notacincientfica:1.4E2,5.23e02

    Pgina 216Fundamentosdelaprogramacin:TiposeinstruccionesI(Anexo)

    01

    02

    03

    04

    05

    06

    07

    08

    09

    ...

    (*)sizeof(float)(*)sizeof(float)

    0..90..9

    +

    +

    +

    .

    .

    e,E

    0..90..9

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

    Nmerosreales(condecimales)LuisH

    ernnd

    ezY

    ez

    Siempreunnmero(conosinsigno)conunsolodgitodeparteentera,seguidodelexponente(potenciade10):5.23e2 5,23x 102 0,05231.11e2 1,11x 102 111,07.4523e04 7,4523x 104 0,000745233.3333e+06 3,3333x 106 3.333.300

    Pgina 217Fundamentosdelaprogramacin:TiposeinstruccionesI(Anexo)

  • LuisH

    ernnd

    ezY

    ez

    Intervalodevalores:+/ 2.23e308 ..1.79e+308

    Bytesdememoria:8*Puntoflotante.Precisin:15 dgitosLiterales(puntodecimal):Notacinnormal:134.45,1.1764

    Notacincientfica:1.4E2,5.23e02

    Pgina 218Fundamentosdelaprogramacin:TiposeinstruccionesI(Anexo)

    01

    02

    03

    04

    05

    06

    07

    08

    09

    ...

    (*)sizeof(double)(*)sizeof(double)

    0..90..9

    +

    +

    .

    .

    e,E

    0..90..9

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

    +

    Nmerosreales(condecimales)LuisH

    ernnd

    ezY

    ez

    Intervalodevalores:Juegodecaracteres(ASCII)Bytesdememoria:1 (FC)Literales:'a','%','\t'Constantesdebarrainvertida:(Osecuenciasdeescape)Paracaracteresdecontrol'\t' =tabulador,'\n' =saltodelnea,

    Pgina 219Fundamentosdelaprogramacin:TiposeinstruccionesI(Anexo)

    01

    02

    03

    04

    05

    06

    07

    08

    09

    ...

    Carcter

    n,t,v,b,r,f,a,\n,t,v,b,r,f,a,\' '

    \

    Caracteres

  • LuisH

    ernnd

    ezY

    ez

    JuegodecaracteresASCII:AmericanStandardCode forInformation Interchange (1963)Caracteresconcdigosentre0y127(7bits) Caracteresdecontrol:Cdigosdel0al31y127Tabulacin,saltodelnea,... Caracteresimprimibles:Cdigosdel32al126

    JuegodecaracteresASCIIextendido(8bits):ISO88591+Cdigosentre128y255

    Pgina 220Fundamentosdelaprogramacin:TiposeinstruccionesI(Anexo)

    Multituddecodificaciones:EBCDIC,UNICODE,UTF8,...

    LuisH

    ernnd

    ezY

    ez

    Slodosvaloresposibles: Verdadero(true) Falso(false)Bytesdememoria:1 (FC)Literales:

    true,falseEnrealidad,cualquiernmerodistintode0esequivalenteatrueyelnmero0esequivalenteafalse

    Pgina 221Fundamentosdelaprogramacin:TiposeinstruccionesI(Anexo)

    01

    02

    03

    04

    05

    06

    07

    08

    09

    ...

    Valoreslgicos

  • LuisH

    ernnd

    ezY

    ez

    "Hola","Introduceelnumerador:","X142FG5TX?%A"

    SecuenciasdecaracteresSeasignalamemoriaquesenecesitaparalasecuenciaconcretaRequierenlabibliotecastring conelespaciodenombresstd:#includeusingnamespacestd;

    Pgina 222Fundamentosdelaprogramacin:TiposeinstruccionesI(Anexo)

    Carcter

    Ojo!Lascomillastipogrficas(apertura/cierre)tedarnproblemasalcompilar.Asegratedeutilizarcomillasrectas:""

    " "

    CadenasdecaracteresLuisH

    ernnd

    ezY

    ez

    Pordefectounliteralenteroseconsideraundatoint longint:35L,1546l unsignedint:35U,1546u unsignedlongint:35UL,1546ulPordefectounliteralrealseconsideraundatodouble float:1.35F,15.46f longdouble:1.35L,15.46l

    Abreviaturasparamodificadoresdetiposshort shortintlong longintEspreferibleevitarelusodetalesabreviaturas:Minimizarlacantidaddeinformacinarecordarsobreellenguaje

    Pgina 223Fundamentosdelaprogramacin:TiposeinstruccionesI(Anexo)

  • LuisH

    ernnd

    ezY

    ez

    LicenciaCC(Creative Commons)Estetipodelicenciasofrecenalgunosderechosaterceraspersonasbajociertascondiciones.Estedocumentotieneestablecidaslassiguientes:

    Pulsaenlaimagendearribaaladerechaparasaberms.Fundamentosdelaprogramacin:TiposeinstruccionesI(Anexo) Pgina 224

    Reconocimiento(Attribution):Encualquierexplotacindelaobraautorizadaporlalicenciaharfaltareconocerlaautora.Nocomercial(Noncommercial):Laexplotacindelaobraquedalimitadaausosnocomerciales.Compartirigual(Sharealike):Laexplotacinautorizadaincluyelacreacindeobrasderivadassiemprequemantenganlamismalicenciaalserdivulgadas.

  • 3GradoenIngenieraInformticaGradoenIngenieradelSoftwareGradoenIngenieradeComputadores

    LuisHernndezYezFacultaddeInformticaUniversidadComplutense

    FundamentosdelaprogramacinLuisH

    ernnd

    ezY

    ez

    Fundamentosdelaprogramacin:TiposeinstruccionesII

    Tipos,valoresyvariables 227Conversindetipos 232Tiposdeclaradosporelusuario 236Tiposenumerados 238Entrada/Salida

    conarchivosdetexto 248Lecturadearchivosdetexto 253Escrituraenarchivosdetexto 266

    Flujodeejecucin 272Seleccinsimple 276Operadoreslgicos 282Anidamientodeif 286Condiciones 290Seleccinmltiple 293

    Laescalaifelseif 295Lainstruccinswitch 302

    Repeticin 313Elbuclewhile 316

    Elbuclefor 321Buclesanidados 331

    mbitoyvisibilidad 339Secuencias 349

    Recorridodesecuencias 355Secuenciascalculadas 363Bsquedaensecuencias 370

    Arraysdedatossimples 374Usodevariablesarrays 379Recorridodearrays 382Bsquedaenarrays 387Arraysnocompletos 393

  • LuisH

    ernnd

    ezY

    ez

    Pgina 227Fundamentosdelaprogramacin:TiposeinstruccionesII

    LuisH

    ernnd

    ezY

    ez

    TipoConjuntodevaloresconsusposiblesoperacionesValorConjuntodebitsinterpretadoscomodeuntipoconcretoVariable (oconstante)CiertamemoriaconnombreparavaloresdeuntipoDeclaracinInstruccinqueidentificaunnombreDefinicinDeclaracinqueasignamemoriaaunavariableoconstante

    Pgina 228Fundamentosdelaprogramacin:TiposeinstruccionesII

  • LuisH

    ernnd

    ezY

    ez

    Memoriasuficienteparasutipodevaloresshortinti=3;int j=9;char c='a';double x=1.5;

    Elsignificadodelosbitsdependedeltipodelavariable:00000000000000000000000001111000Interpretadocomoint eselentero120Interpretadocomochar (slo01111000)eselcarcter'x'

    Pgina 229Fundamentosdelaprogramacin:TiposeinstruccionesII

    ii 3

    jj 9

    cc a

    xx 1.5

    LuisH

    ernnd

    ezY

    ez

    Simples Estndar:int,float,double,char,boolConjuntodevalorespredeterminado Definidosporelusuario:enumeradosConjuntodevaloresdefinidoporelprogramador

    Estructurados(Tema5) Coleccioneshomogneas:arraysTodosloselementosdelacoleccindeunmismotipo Coleccionesheterogneas:estructurasElementosdelacoleccindetiposdistintos

    Pgina 230Fundamentosdeprogramacin:TiposeinstruccionesII

  • LuisH

    ernnd

    ezY

    ez

    Consusposiblesmodificadores:[unsigned][short] intlonglong intfloat

    [long] double

    char

    bool

    Pgina 231Fundamentosdelaprogramacin:TiposeinstruccionesII

    Definicindevariables:tipo nombre [=expresin][,...];Definicindeconstantesconnombre:consttipo nombre =expresin;

    longint int

    LuisH

    ernnd

    ezY

    ez

    Pgina 232Fundamentosdelaprogramacin:TiposeinstruccionesII

  • LuisH

    ernnd

    ezY

    ez

    PromocindetiposDosoperandosdetiposdistintos:Elvalordeltipomenor sepromocionaaltipomayorshortinti=3;int j=2;double a=1.5,b;b=a+i*j;

    Pgina 233Fundamentosdelaprogramacin:TiposeinstruccionesII

    long doubledoublefloatlong intintshort intP

    romocin

    Prom

    ocin

    Valor3 shortint (2bytes) int (4bytes)Valor3 shortint (2bytes) int (4bytes)Valor6 int (4bytes) double (8bytes)Valor6 int (4bytes) double (8bytes)

    b=a+3 *2;

    b=1.5 +6;

    LuisH

    ernnd

    ezY

    ez

    Conversinsegura:Deuntipomenorauntipomayorshortint int longint ...Conversinnosegura:Deuntipomayorauntipomenorintentero=1234;char caracter;caracter =entero;//ConversinnoseguraMenormemoria:Prdidadeinformacinenlaconversin

    Pgina 234Fundamentosdelaprogramacin:TiposeinstruccionesII

    long doubledoublefloatlong intintshort int

  • LuisH

    ernnd

    ezY

    ez

    Fuerzanunaconversindetipo:tipo(expresin)Elvalorresultantedelaexpresin setratacomounvalordeltipoint a=3,b=2;cout

  • LuisH

    ernnd

    ezY

    ez

    Describimoslosvaloresdelasvariablesdeltipotypedefdescripcinnombre_de_tipo;

    Pgina 237Fundamentosdelaprogramacin:TiposeinstruccionesII

    Nombresdetipospropios:tminsculaseguidadeunaovariaspalabrascapitalizadasLoscolorearemosennaranja,pararemarcarquesontipostypedefdescripcintMiTipo;typedefdescripcintMoneda;typedefdescripcintTiposDeCalificacion;typedefdescripcintMiTipo;typedefdescripcintMoneda;typedefdescripcintTiposDeCalificacion;

    Identificadorvlido

    Declaracindetipofrenteadefinicindevariable

    LuisH

    ernnd

    ezY

    ez

    Pgina 238Fundamentosdelaprogramacin:TiposeinstruccionesII

  • LuisH

    ernnd

    ezY

    ez

    Enumeracindelconjuntodevaloresposiblesparalasvariables:enum {smbolo1,smbolo2,...,smboloN }

    enum {centimo,dos_centimos,cinco_centimos,diez_centimos,veinte_centimos,medio_euro,euro }

    Valoresliteralesquepuedentomarlasvariables(enamarillo)

    Pgina 239Fundamentosdelaprogramacin:TiposeinstruccionesII

    enumenum

    ,

    { Identificador }

    LuisH

    ernnd

    ezY

    ez

    typedefdescripcinnombre_de_tipo;Elegimosunnombreparaeltipo:tMonedatypedefenum {centimo,dos_centimos,cinco_centimos,

    diez_centimos,veinte_centimos,medio_euro,euro }tMoneda;

    Pgina 240Fundamentosdelaprogramacin:TiposeinstruccionesII

    Enelmbitodeladeclaracin,sereconoceunnuevotipotMonedatMoneda moneda1,moneda2;Cadavariabledeesetipocontendralgunodelossmbolosmoneda1=dos_centimos;moneda2=euro;

    moneda1moneda1 dos_centimos

    moneda2moneda2 euro

    descripcindescripcin

    MejoranlalegibilidadMejoranlalegibilidad

    (Internamenteseusanenteros)(Internamenteseusanenteros)

  • LuisH

    ernnd

    ezY

    ez

    typedefenum{enero,febrero,marzo,abril,mayo,junio,julio,agosto,septiembre,octubre,noviembre,diciembre}tMes;

    tMes mes;Lecturadelavariablemes:cin>>mes;SeesperaunvalorenteroNosepuedeescribirdirectamenteenero ojunioYsiseescribelavariableenlapantalla:cout

  • LuisH

    ernnd

    ezY

    ez

    typedefenum {enero,febrero,marzo,abril,mayo,junio,julio,agosto,septiembre,octubre,noviembre,diciembre} tMes;

    Pgina 243Fundamentosdelaprogramacin:TiposeinstruccionesII

    if (mes==enero){cout

  • LuisH

    ernnd

    ezY

    ez

    #includeusingnamespacestd;typedef enum{enero,febrero,marzo,abril,mayo,

    junio,julio,agosto,septiembre,octubre,noviembre,diciembre }tMes;

    typedef enum {lunes,martes,miercoles,jueves,viernes,sabado,domingo }tDiaSemana;

    string cadMes(tMes mes);string cadDia(tDiaSemana dia);

    int main(){tDiaSemana hoy=lunes;int dia =21;tMes mes=octubre;int anio =2013;...

    Pgina 245Fundamentosdelaprogramacin:TiposeinstruccionesII

    Silostiposseusanenvariasfunciones,losdeclaramosantesdelosprototipos

    LuisH

    ernnd

    ezY

    ez

    //Mostramoslafechacout

  • LuisH

    ernnd

    ezY

    ez

    string cadMes(tMes mes){string cad;

    if (mes==enero){cad ="enero";

    }if (mes==febrero){

    cad ="febrero";}...if (mes==diciembre){

    cad ="diciembre";}

    return cad;}

    string cadDia(tDiaSemana dia);string cad;

    if (dia ==lunes){cad ="lunes";

    }if (dia ==martes){

    cad ="martes";}...if (dia ==domingo){

    cad ="domingo";}

    return cad;}

    Pgina 247Fundamentosdelaprogramacin:TiposeinstruccionesII

    fechas.cppfechas.cppLuisH

    ernnd

    ezY

    ez

    Pgina 248Fundamentosdelaprogramacin:TiposeinstruccionesII

  • LuisH

    ernnd

    ezY

    ez

    Datosdelprograma:enlamemoriaprincipal(voltil)Medios(dispositivos)dealmacenamientopermanente: Discosmagnticosfijos(internos)oporttiles(externos) Cintasmagnticas Discospticos(CD,DVD,BlueRay) MemoriasUSB

    MantienenlainformacinenarchivosSecuenciasdedatos

    Pgina 249Fundamentosdelaprogramacin:TiposeinstruccionesII

    LuisH

    ernnd

    ezY

    ez

    Archivodetexto:secuenciadecaracteres

    Archivobinario:contieneunasecuenciadecdigosbinarios

    LosarchivossemanejanenlosprogramaspormediodeflujosArchivosdetexto:flujosdetextoSimilaralaE/Sporconsola(Msadelanteveremoselusodearchivosbinarios)

    Pgina 250Fundamentosdelaprogramacin:TiposeinstruccionesII

    A0 25 2F 04 D6 FF 00 27 6C CA 49 07 5F A4

    T o t a l : 1 2 3 . 4 A

    (Cdigosrepresentadosennotacinhexadecimal)(Cdigosrepresentadosennotacinhexadecimal)

  • LuisH

    ernnd

    ezY

    ez

    TextosdispuestosensucesivaslneasCarcterdefindelneaentrelneaylnea(Intro)PosiblementevariosdatosencadalneaEjemplo:Comprasdelosclientes

    Encadalnea,NIFdelcliente,unidadescompradas,preciounitarioydescripcindeproducto,separadosporespacio12345678F2123.95ReproductordeDVD00112233A1218.4Discoporttil32143567J332MemoriaUSB16Gb76329845H1134.5ModemADSL...

    Normalmenteterminanconundatoespecial(centinela)Porejemplo,unNIFqueseaXPgina 251Fundamentosdelaprogramacin:TiposeinstruccionesII

    LuisH

    ernnd

    ezY

    ez

    Lecturadelarchivo:flujodeentrada Escrituraenelarchivo:flujodesalidaNopodemosleeryescribirenunmismoflujoUnflujodetextosepuedeutilizarparalecturaoparaescritura: Flujos(archivos)deentrada:variablesdetipoifstream Flujos(archivos)desalida:variablesdetipoofstreamBibliotecafstream (sinespaciodenombres)

    Pgina 252Fundamentosdelaprogramacin:TiposeinstruccionesII

    #include

  • LuisH

    ernnd

    ezY

    ez

    Pgina 253Fundamentosdelaprogramacin:TiposeinstruccionesII

    LuisH

    ernnd

    ezY

    ez

    FlujosdetextodeentradaParaleerdeunarchivodetexto:

    DeclaraunavariabledetipoifstreamAsocialavariableconelarchivodetexto(aperturadelarchivo)RealizalasoperacionesdelecturaDesligalavariabledelarchivodetexto(cierreelarchivo)

    Pgina 254Fundamentosdelaprogramacin:TiposeinstruccionesII

    1

    2

    3

    4

    ifstream

  • LuisH

    ernnd

    ezY

    ez

    AperturadelarchivoConectalavariableconelarchivodetextodeldispositivo

    flujo.open(cadena_literal);

    ifstream archivo;archivo.open("abc.txt");if(archivo.is_open())...

    CierredelarchivoDesconectalavariabledelarchivodetextodeldispositivo

    flujo.close();archivo.close();

    Pgina 255Fundamentosdelaprogramacin:TiposeinstruccionesII

    Elarchivodebeexistir!is_open():true sielarchivosehapodidoabrirfalse encasocontrario

    LuisH

    ernnd

    ezY

    ez

    Operacionesdelectura Extractor(>>) archivo>>variable;Saltaprimerolosespaciosenblanco(espacio,tab,Intro,...)

    Datosnumricos:leehastaelprimercarcternovlidoCadenas(string):leehastaelsiguienteespacioenblanco archivo.get(c)

    Leeelsiguientecarcterenlavariablec,seaelquesea getline(archivo,cadena)

    Leeenlacadena todosloscaracteresquequedenenlalneaIncluidoslosespaciosenblancoHastaelsiguientesaltodelnea(descartndolo)

    Conlosarchivosnotieneefectolafuncinsync()Pgina 256Fundamentosdelaprogramacin:TiposeinstruccionesII

  • LuisH

    ernnd

    ezY

    ez

    Qudeboleer? Unnmero

    Usaelextractor archivo>>num; Uncarcter(seaelquesea)

    Usalafuncinget() archivo.get(c); Unacadenasinespacios

    Usaelextractor archivo>>cad; Unacadenaposiblementeconespacios

    Usalafuncingetline() getline(archivo,cad);

    Pgina 257Fundamentosdelaprogramacin:TiposeinstruccionesII

    LuisH

    ernnd

    ezY

    ez

    Dndequedapendientelaentrada? Nmeroledoconelextractor

    Enelprimercarcternovlido(inc.espaciosenblanco) Carcterledoconget()

    Enelsiguientecarcter(inc.espaciosenblanco) UnacadenaledaconelextractorEnelsiguienteespacioenblanco Unacadenaledaconlafuncingetline()

    Alprincipiodelasiguientelnea

    Pgina 258Fundamentosdelaprogramacin:TiposeinstruccionesII

  • LuisH

    ernnd

    ezY

    ez

    Programa

    string nif,producto;int unidades;double precio;char aux;

    Pgina 259Fundamentosdelaprogramacin:TiposeinstruccionesII

    7

    6

    5

    4

    3

    2

    1

    FlujodeentradaarchivoFlujodeentradaarchivo

    1 ifstream archivo;

    2 archivo.open("compras.txt");//Apertura3 archivo>>nif >>unidades>>precio;

    getline(archivo,producto);4 archivo.close();//Cierre

    LuisH

    ernnd

    ezY

    ez

    archivo>>nif;archivo>>unidades;archivo>>precio;getline(archivo,producto);

    Pgina 260Fundamentosdelaprogramacin:TiposeinstruccionesII

    productoproducto ReproductordeDVD precioprecio 123.95unidadesunidades 2nifnif 12345678F

    12345678F2123.95ReproductordeDVD

    EspacioEspacio

    ElextractorsaltalosespaciosElextractorsaltalosespacios

    getline() nosaltaespaciosgetline() nosaltaespacios

  • LuisH

    ernnd

    ezY

    ez

    archivo>>nif;archivo>>unidades;archivo>>precio;archivo.get(aux);//Saltaelespacioenblancogetline(archivo,producto);

    Pgina 261Fundamentosdelaprogramacin:TiposeinstruccionesII

    productoproducto ReproductordeDVD precioprecio 123.95unidadesunidades 2nifnif 12345678F

    12345678F2123.95ReproductordeDVD

    SinespacioSinespacio

    Leemoselespacio(nohacemosnadaconl)Leemoselespacio(nohacemosnadaconl)

    LuisH

    ernnd

    ezY

    ez

    Cadalnea,datosdeunacompraMostrareltotaldecadacompraunidadesx preciomsIVA(21%)Final:"X" comoNIFBucledeprocesamiento: Cadapasodelbucle(ciclo)procesaunalnea(compra) Podemosusarlasmismasvariablesencadaciclo

    LeerprimerNIFMientraselNIFnoseaX:Leerunidades,precioydescripcinCalcularymostrareltotalLeerelsiguienteNIF

    Pgina 262Fundamentosdelaprogramacin:TiposeinstruccionesII

  • LuisH

    ernnd

    ezY

    ez

    #include#includeusingnamespacestd;#include#include//Formatodesalidaint main(){

    const int IVA=21;string nif,producto;int unidades;double precio,neto,total,iva;char aux;ifstream archivo;int contador=0;archivo.open("compras.txt");//Apertura...

    Pgina 263Fundamentosdelaprogramacin:TiposeinstruccionesII

    leer.cppleer.cpp

    LuisH

    ernnd

    ezY

    ez

    if (archivo.is_open()){//Existeelarchivoarchivo>>nif;//PrimerNIFwhile (nif !="X"){

    archivo>>unidades>>precio;archivo.get(aux);//Saltaelespaciogetline(archivo,producto);contador++;neto=unidades*precio;iva =neto*IVA/100;total=neto+iva;cout

  • LuisH

    ernnd

    ezY

    ez

    archivo.close();//Cierre}else {

    cout

  • LuisH

    ernnd

    ezY

    ez

    FlujosdetextodesalidaParacrearunarchivodetextoyescribirenl:

    DeclaraunavariabledetipoofstreamAsocialavariableconelarchivodetexto(creaelarchivo)Realizalasescrituraspormediodeloperador

  • LuisH

    ernnd

    ezY

    ez

    #include#includeusingnamespacestd;#includeint main(){

    string nif,producto;int unidades;double precio;char aux;ofstream archivo;

    archivo.open("output.txt");//Apertura(creacin)coutnif;...

    Pgina 269Fundamentosdelaprogramacin:TiposeinstruccionesII

    escribir.cppescribir.cppLuisH

    ernnd

    ezY

    ez

    while (nif !="X"){//QuedapendienteelIntroanterior...cin.get(aux);//LeemoselIntrocout

  • LuisH

    ernnd

    ezY