Apuntes programacion

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 Apuntes programacion

  • 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

    LuisHe

    rnnde

    zYez

    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

  • LuisHe

    rnnde

    zYez

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

    Fundamentosdelaprogramacin

    LuisHe

    rnnde

    zYez

    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

  • LuisHe

    rnnde

    zYez

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

    Fundamentosdelaprogramacin

    LuisHe

    rnnde

    zYez

    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

  • LuisHe

    rnnde

    zYez

    Fundamentosdelaprogramacin

    Eloperadorternario? 399

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

    Bsquedas 417Bsquedadeunnmeroenunarchivo 419Bsquedasensecuenciasordenadas 420

    LuisHe

    rnnde

    zYez

    Fundamentosdelaprogramacin

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

  • LuisHe

    rnnde

    zYez

    Fundamentosdelaprogramacin:Laabstraccinprocedimental(Anexo)

    Archivoscomoparmetros 498Lafuncinmain() 501Argumentosimplcitos 504Sobrecargadesubprogramas 508

    LuisHe

    rnnde

    zYez

    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

  • LuisHe

    rnnde

    zYez

    Fundamentosdelaprogramacin

    CadenasalestilodeC 582E/SconcadenasalestilodeC 583Labibliotecacstring 584Ejemplo 585

    LuisHe

    rnnde

    zYez

    Fundamentosdelaprogramacin

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

    Bsquedasenarrays 604Arrayscompletos 606Arraysnocompletosconcentinela 607Arraysnocompletosconcontador 608Ejemplo 610

    Recorridosybsquedasencadenas 614Msejemplosdemanejodearrays 617Arraysmultidimensionales 630

    Inicializacindearraysmultidimensionales 638Recorridodeunarraybidimensional 641RecorridodeunarrayNdimensional 644Bsquedaenunarraymultidimensional 647

  • LuisHe

    rnnde

    zYez

    Fundamentosdelaprogramacin

    Algoritmosdeordenacin 651Algoritmodeordenacinporinsercin 654

    Ordenacindearraysporinsercin 665Algoritmodeordenacinporinsercin

    conintercambios 672Clavesdeordenacin 680Estabilidaddelaordenacin 688Complejidadyeficiencia 692

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

    LuisHe

    rnnde

    zYez

    Fundamentosdelaprogramacin

    Ordenacinporintercambio 744Mezcladedoslistasordenadas 747

  • LuisHe

    rnnde

    zYez

    Fundamentosdelaprogramacin

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

    Compilacincondicional 794Proteccinfrenteainclusionesmltiples 795

    Ejemplo:GestindeunalistaordenadaIII 796Implementacionesalternativas 804Espaciosdenombres 808

    Implementacionesalternativas 817Calidadyreutilizacindelsoftware 827

    LuisHe

    rnnde

    zYez

    Fundamentosdelaprogramacin

    Modularizacindeunprograma 833

  • LuisHe

    rnnde

    zYez

    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

    LuisHe

    rnnde

    zYez

    Fundamentosdelaprogramacin

    Aritmticadepunteros 940Recorridodearraysconpunteros 953Referencias 962Listasenlazadas 964

  • LuisHe

    rnnde

    zYez

    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

    LuisHe

    rnnde

    zYez

    Fundamentosdelaprogramacin

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

    Ordenacindelosregistrosdelarchivo 1079Bsquedabinaria 1085Insercinenunarchivobinarioordenado 1088Cargadelosregistrodeunarchivoenunatabla 1092Almacenamientodeunatablaenunarchivo 1093

  • GradoenIngenieraInformticaGradoenIngenieradelSoftwareGradoenIngenieradeComputadoresLuisHernndezYezFacultaddeInformticaUniversidadComplutense

    Fundamentosdelaprogramacin

    RB

    LuisHe

    rnnde

    zYez

    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

  • LuisHe

    rnnde

    zYez

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

    Fundamentosdelaprogramacin

    LuisHe

    rnnde

    zYez

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

    Fundamentosdelaprogramacin

  • GradoenIngenieraInformticaGradoenIngenieradelSoftwareGradoenIngenieradeComputadoresLuisHernndezYezFacultaddeInformticaUniversidadComplutense

    Fundamentosdelaprogramacin

    1

    LuisHe

    rnnde

    zYez

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

    Fundamentosdelaprogramacin:Computadorasyprogramacin

  • LuisHe

    rnnde

    zYez

    Pgina 3Fundamentosdelaprogramacin:Computadorasyprogramacin

    LuisHe

    rnnde

    zYez

    Informtica(Cienciadelacomputacin)Conjuntodeconocimientoscientficosytcnicasquehacenposibleeltratamientoautomticodelainformacinpormediodeordenadores

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

    Pgina 4Fundamentosdelaprogramacin:Computadorasyprogramacin

  • LuisHe

    rnnde

    zYez

    Entodaspartesyconmuchasformas

    Pgina 5Fundamentosdelaprogramacin:Computadorasyprogramacin

    LuisHe

    rnnde

    zYez

    HardwareComponentesqueintegranlapartematerialdeunacomputadora

    SoftwareProgramas,instruccionesyreglasinformticasparaejecutartareasenunacomputadora

    Pgina 6Fundamentosdelaprogramacin:Computadorasyprogramacin

  • LuisHe

    rnnde

    zYez

    ProgramarIndicaralacomputadoraquesloquetienequehacer

    Programa Secuenciadeinstrucciones Instruccionesqueentiendelacomputadora Yquepersiguenunobjetivo:resolverunproblema!

    Pgina 7Fundamentosdelaprogramacin:Computadorasyprogramacin

    LuisHe

    rnnde

    zYez

    TrabajoenequipoMltiplesroles... Gestores Analistas Diseadores Programadores Probadores Administradoresdesistemas

    ...

    Pgina 8Fundamentosdelaprogramacin:Computadorasyprogramacin

    ParqueJursico

  • LuisHe

    rnnde

    zYez

    Esquemageneral

    Pgina 9Fundamentosdelaprogramacin:Computadorasyprogramacin

    Memoriatemporal

    AlmacenamientopermanenteAlmacenamientopermanente

    DispositivosdeentradaTecladoRatnEscnerTctil

    DispositivosdesalidaMonitorImpresoraAltavoz

    MonitorImpresoraAltavoz

    DispositivosdesalidaMonitorImpresoraAltavoz

    UnidadCentraldeProcesoCentralProcessorUnit

    C.P.U.

    LuisHe

    rnnde

    zYez

    LaarquitecturadeVonNeumann

    Pgina 10Fundamentosdelaprogramacin:Computadorasyprogramacin

    C.P.U.(Procesador)

    DispositivosdeE/S

    MemoriaA.L.U.UnidadAritmticoLgica

    UnidaddeControl

    UnaALUde2bits(Wikipedia)

  • LuisHe

    rnnde

    zYez

    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

    LuisHe

    rnnde

    zYez

    Pgina 12Fundamentosdelaprogramacin:Computadorasyprogramacin

  • LuisHe

    rnnde

    zYez

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

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

    Pgina 13Fundamentosdelaprogramacin:Computadorasyprogramacin

    LenguajedebajonivelDependientedelamquina

    Programacindifcil

    LuisHe

    rnnde

    zYez

    Nemotcnicosparaloscdigoshexadecimales:A0 READ3E REG1D ADD

    Mayorlegibilidad:READ2FREG01READ30REG02ADDWRITE31

    Lenguajedenivelmedio

    Pgina 14Fundamentosdelaprogramacin:Computadorasyprogramacin

    Cdigoobjeto(lenguajemquina)

    Programaensamblador

    Cdigofuente(lenguajeensamblador)

  • LuisHe

    rnnde

    zYez

    Pgina 15Fundamentosdelaprogramacin:Computadorasyprogramacin

    LuisHe

    rnnde

    zYez

    Mscercanosaloslenguajesnaturalymatemticoresultado=dato1+dato2;

    Mayorlegibilidad,mayorfacilidaddecodificacin Estructuracindedatos/abstraccinprocedimental

    Pgina 16Fundamentosdelaprogramacin:Computadorasyprogramacin

  • LuisHe

    rnnde

    zYez

    Traduccin

    Compiladores:CompilanyenlazanprogramascompletosIntrpretes:Compilan,enlazanyejecutaninstruccinainstruccin

    Pgina 17Fundamentosdelaprogramacin:Computadorasyprogramacin

    Compilador

    Enlazador Cdigoobjetodebiblioteca

    Cdigofuente#includeusingnamespacestd;

    intmain(){

    cout

  • LuisHe

    rnnde

    zYez

    Pgina 19Fundamentosdelaprogramacin:Computadorasyprogramacin

    LuisHe

    rnnde

    zYez

    LaprehistoriaElbaco

    SigloXIXMquinaanalticadeCharlesBabbage

    Pgina 20Fundamentosdelaprogramacin:Computadorasyprogramacin

    LadyAdaLovelaceesconsideradalaprimeraprogramadora

    (Wikipedia)

  • LuisHe

    rnnde

    zYez

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

    Pgina 21Fundamentosdelaprogramacin:Computadorasyprogramacin

    ENIAC(Wikipedia)

    LuisHe

    rnnde

    zYez

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

    World Wide Web1991 SistemaoperativoLinux

    Pgina 22Fundamentosdelaprogramacin:Computadorasyprogramacin

    AppleII(Wikipedia)

    IBMPC(Wikipedia)Linux

  • LuisHe

    rnnde

    zYez

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

    Pgina 23Fundamentosdelaprogramacin:Computadorasyprogramacin

    LuisHe

    rnnde

    zYez

    Pgina 24Fundamentosdelaprogramacin:Computadorasyprogramacin

  • LuisHe

    rnnde

    zYez

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

    Algoritmo:SecuenciadepasosyoperacionesquedeberealizarelprogramapararesolverelproblemaElprogramaimplementaelalgoritmoenunlenguajeconcreto

    SalidaPrograma

    Pgina 25Fundamentosdelaprogramacin:Computadorasyprogramacin

    Entrada

    LuisHe

    rnnde

    zYez

    Laprogramacinesslounaetapadelprocesodedesarrollo

    Modelodedesarrolloencascada:

    Pgina 26Fundamentosdelaprogramacin:Computadorasyprogramacin

    MantenimientoMantenimientoPruebaydepuracinPruebaydepuracin

    ProgramacinProgramacinDiseoDiseo

    AnlisisAnlisisPlanificacin Recursosnecesarios,presupuesto,plan,

    Qu?Cmo?

    Implementacin

  • LuisHe

    rnnde

    zYez

    Pgina 27Fundamentosdelaprogramacin:Computadorasyprogramacin

    LuisHe

    rnnde

    zYez

    Bjarne Stroustrup (1983)

    #includeusingnamespacestd;

    int main(){

    cout

  • LuisHe

    rnnde

    zYez

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

    Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina29

    #includeusingnamespacestd;

    int main(){

    cout

  • LuisHe

    rnnde

    zYez

    SintaxisysemnticadeloslenguajesSintaxis Reglasquedeterminancmosepuedenconstruirysecuenciarloselementosdellenguaje

    Semntica SignificadodecadaelementodellenguajeParaqusirve?

    Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina 31

    LuisHe

    rnnde

    zYez

    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

  • LuisHe

    rnnde

    zYez

    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)

    LuisHe

    rnnde

    zYez

    Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina 34

    ++2233

    113377 44

    11 ??

    +23+23

    13741374

    134134

    +0..90..9

    +

    +

    0..90..9

    0..90..9

  • LuisHe

    rnnde

    zYez

    Pgina 35Fundamentosdelaprogramacin:Computadorasyprogramacin

    LuisHe

    rnnde

    zYez

    HolaMundo!Unprogramaquemuestraunsaludoenlapantalla:#includeusingnamespacestd;

    int main()//main()esdondeempiezalaejecucin{

    cout

  • LuisHe

    rnnde

    zYez

    Anlisisdelprograma

    #includeusingnamespacestd;

    int main(){

    cout

  • LuisHe

    rnnde

    zYez

    Pgina 39Fundamentosdelaprogramacin:Computadorasyprogramacin

    LuisHe

    rnnde

    zYez

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

    Pgina 40

    Instalacinyuso:SeccinHerramientasdedesarrolloenelCampusVirtual

    Instalacinyuso:SeccinHerramientasdedesarrolloenelCampusVirtual

    Fundamentosdelaprogramacin:Computadorasyprogramacin

  • LuisHe

    rnnde

    zYez

    Pgina 41Fundamentosdelaprogramacin:Computadorasyprogramacin

    hola.cpp(cdigofuente)

    hola.obj(cdigoobjeto)

    Compilador

    Cdigoobjetodelabibliotecaiostream

    hola.exe(ejecutable)

    EnlazadorHolaMundo!

    CargadorCargador

    LuisHe

    rnnde

    zYez

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

    Pgina 42

    Instalacinyuso:SeccinHerramientasdedesarrolloenelCampusVirtual

    Instalacinyuso:SeccinHerramientasdedesarrolloenelCampusVirtual

    Fundamentosdelaprogramacin:Computadorasyprogramacin

  • LuisHe

    rnnde

    zYez

    Entornosdedesarrollo Paraeditar,compilaryprobarelcdigodelprograma Recomendaciones:

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

    Pgina 43

    Instalacinyuso:SeccinHerramientasdedesarrolloenelCampusVirtual

    Instalacinyuso:SeccinHerramientasdedesarrolloenelCampusVirtual

    Fundamentosdelaprogramacin:Computadorasyprogramacin

    LuisHe

    rnnde

    zYez

    Quhaceelprograma? Laejecucindelprogramasiempreempiezaenmain() Seejecutanlasinstruccionesensecuenciadeprincipioafin

    Pgina 44

    _HolaMundo!HolaMundo!

    Pantalla(cout)

    _

    MuestraHolaMundo!enlapantallaysaltadelneaDevuelve0 comocdigodeterminacindelprograma

    FinFin

    return0;return0;

    cout

  • LuisHe

    rnnde

    zYez

    Pgina 45Fundamentosdelaprogramacin:Computadorasyprogramacin

    LuisHe

    rnnde

    zYez

    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

  • LuisHe

    rnnde

    zYez

    LicenciaCC(Creative Commons)Estetipodelicenciasofrecenalgunosderechosaterceraspersonasbajociertascondiciones.Estedocumentotieneestablecidaslassiguientes:

    Pulsaenlaimagendearribaaladerechaparasaberms.Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina 47

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

  • 2GradoenIngenieraInformticaGradoenIngenieradelSoftwareGradoenIngenieradeComputadores

    LuisHernndezYezFacultaddeInformticaUniversidadComplutense

    FundamentosdelaprogramacinLuisHe

    rnnde

    zYez

    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

  • LuisHe

    rnnde

    zYez

    Pgina 50Fundamentosdelaprogramacin:TiposeinstruccionesI

    LuisHe

    rnnde

    zYez

    UnacomputadoradeuncocheInstruccionesqueentiende:::=;

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

    Ejemplos:Start;Go North3Blocks;Stop;

    Pgina 51Fundamentosdelaprogramacin:TiposeinstruccionesI

  • LuisHe

    rnnde

    zYez

    Sintaxisdellenguajedeprogramacin

    Pgina 52Fundamentosdelaprogramacin:TiposeinstruccionesI

    avanzaravanzar direccinGo Blocksnum

    =Literales=Literales

    direccindireccin

    North

    East

    South

    West

    instruccininstruccin

    Start

    avanzar

    Stop ;

    numnum

    12345

    LuisHe

    rnnde

    zYez

    ElproblemaaresolverEstandoelcocheenlaposicinA,conseguirllegaralCineTvoli (B)

    Qupasoshayqueseguir?ArrancarIrunbloquealNorteIrdosbloquesalEsteIrcincobloquesalNorteIrdosbloquesalEsteParar

    Pgina 53Fundamentosdelaprogramacin:TiposeinstruccionesI

    B

    A

    NN

    Bloque:Bloque:

  • LuisHe

    rnnde

    zYez

    ElalgoritmoSecuenciadepasosquehayqueseguirpararesolverelproblema

    Pgina 54Fundamentosdelaprogramacin:TiposeinstruccionesI

    1. Arrancar

    NN

    2. IrunbloquealNorte3. IrdosbloquesalEste4. IrcincobloquesalNorte5. IrdosbloquesalEste6. Parar

    Esospasossirventantoparaunapersonacomoparaunacomputadora.

    LuisHe

    rnnde

    zYez

    ElprogramaInstruccionesescritasenellenguajedeprogramacin

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

    Pgina 55Fundamentosdelaprogramacin:TiposeinstruccionesI

    B

    A

    NN

  • LuisHe

    rnnde

    zYez

    ElprogramaEscribimoselcdigodelprogramaenuneditoryloguardamosenunarchivo:

    Pgina 56Fundamentosdelaprogramacin:TiposeinstruccionesI

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

    CopiamoselarchivoenunallaveUSBylollevamosalcoche

    LuisHe

    rnnde

    zYez

    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

  • LuisHe

    rnnde

    zYez

    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;

    LuisHe

    rnnde

    zYez

    LaejecucinSerealizaloquepidecadainstruccin:

    Pgina 59Fundamentosdelaprogramacin:TiposeinstruccionesI

    B

    NN

    Start;Go North1Blocks;Go East3Blocks; !!

    ErrordeejecucinUnainstruccinnosepuedeejecutar!

  • LuisHe

    rnnde

    zYez

    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;

    LuisHe

    rnnde

    zYez

    LaejecucinSerealizaloquepidecadainstruccin:

    Pgina 61Fundamentosdelaprogramacin:TiposeinstruccionesI

    B

    NN

    Start;Go North1Blocks;Go East2Blocks;

    ErrorlgicoElprogramanollegaalresultadodeseado!

    Go North5Blocks;Go West2Blocks;Stop;

    ??

  • LuisHe

    rnnde

    zYez

    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;

    LuisHe

    rnnde

    zYez

    LaejecucinSerealizaloquepidecadainstruccin:

    Pgina 63Fundamentosdelaprogramacin:TiposeinstruccionesI

    NN

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

    Conseguido!

  • LuisHe

    rnnde

    zYez

    Pgina 64Fundamentosdelaprogramacin:TiposeinstruccionesI

    LuisHe

    rnnde

    zYez

    HolaMundo!Devueltaenelprogramaquemuestraunsaludoenlapantalla:#includeusingnamespacestd;

    int main() //main()esdondeempiezalaejecucin{

    cout

  • LuisHe

    rnnde

    zYez

    HolaMundo!Lanicainstruccinqueproducealgotangible:#includeusingnamespacestd;

    intmain()//main()esdondeempiezalaejecucin{

    cout

  • LuisHe

    rnnde

    zYez

    Pantallaenmodotexto Lneasde80caracteres(textos)

    Pgina 68Fundamentosdelaprogramacin:TiposeinstruccionesI

    AplicacinenmodotextoAplicacinenmodotexto

    80caracteres80caracteres

    LuisHe

    rnnde

    zYez

    VentanasdeconsolaoterminalLasaplicacionesenmodotextoseejecutandentrodeventanas: Windows:ventanasdeconsola(Smbolodelsistema) Linux:ventanasdeterminal

    Pgina 69Fundamentosdelaprogramacin:TiposeinstruccionesI

    H o l a M u n d o !

    Cursorparpadeante:Dondesecolocarelsiguientecarcter.Cursorparpadeante:Dondesecolocarelsiguientecarcter.

    ......

    ......

  • LuisHe

    rnnde

    zYez

    Elinsertor

  • LuisHe

    rnnde

    zYez

    ElprogramaprincipalLafuncinmain():dondecomienzalaejecucin...#includeusingnamespacestd;

    int main() //main()esdondeempiezalaejecucin{

    cout

  • LuisHe

    rnnde

    zYez

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

    intmain()//main()esdondeempiezalaejecucin{

    cout

  • LuisHe

    rnnde

    zYez

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

    EspaciosdenombresEniostream hayespaciosdenombres;culqueremos?#includeusingnamespacestd;

    Siempreusaremoselespaciodenombresestndar(std)Muchasbibliotecasnotienenespaciosdenombres

    Pgina 76Fundamentosdelaprogramacin:TiposeinstruccionesI

    Esunainstruccin:terminaen;Esunainstruccin:terminaen;

    LuisHe

    rnnde

    zYez

    Compilacinyenlace

    Pgina 77

    hola.cpp(cdigofuente)

    hola.obj(cdigoobjeto)

    Compilador

    Cdigoobjetodelabibliotecaiostream

    hola.exe(ejecutable)

    Enlazador

    Fundamentosdelaprogramacin:TiposeinstruccionesI

    HolaMundo!

    CargadorCargador

    AmenudoenunpasoAmenudoenunpaso

  • LuisHe

    rnnde

    zYez

    Elementosdelprograma

    #includeusingnamespacestd;

    int main(){

    cout

  • LuisHe

    rnnde

    zYez

    Pgina 80Fundamentosdelaprogramacin:TiposeinstruccionesI

    LuisHe

    rnnde

    zYez

    ProgramaconE/SporconsolaUnaplantillaparaempezar:#includeusingnamespacestd;

    int main(){

    return 0;}

    Pgina 81Fundamentosdelaprogramacin:TiposeinstruccionesI

    Tucdigoaqu!Tucdigoaqu!

  • LuisHe

    rnnde

    zYez

    ...recitadoenlaconsolaMostrarlostextosconcout

  • LuisHe

    rnnde

    zYez

    IntroduccindelcdigodelprogramaNohayquepartirunacadenaliteralentredoslneas:cout

  • LuisHe

    rnnde

    zYez

    Pgina 86Fundamentosdelaprogramacin:TiposeinstruccionesI

    LuisHe

    rnnde

    zYez

    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

  • LuisHe

    rnnde

    zYez

    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

    LuisHe

    rnnde

    zYez

    Ejemplo#includeusingnamespacestd;

    int main(){

    cout

  • LuisHe

    rnnde

    zYez

    Pgina 90Fundamentosdelaprogramacin:TiposeinstruccionesI

    DivisinrealDivisinreal

    DivisinenteraDivisinentera

    LuisHe

    rnnde

    zYez

    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

  • LuisHe

    rnnde

    zYez

    Pgina 92Fundamentosdelaprogramacin:TiposeinstruccionesI

    LuisHe

    rnnde

    zYez

    DatosquesemantienenenmemoriaVariable:datoqueseaccedepormediodeunnombreDatoliteral:unvalorconcretoVariable:puedecambiardevalor(variar)edad=19;//variableedadyliteral19

    LasvariablesdebenserdeclaradasQutipodedatoqueremosmantener? Valornumricosindecimales(entero):tipoint Valornumricocondecimales(real):tipodoubleDeclaracin:tipo nombre;

    Pgina 93Fundamentosdelaprogramacin:TiposeinstruccionesI

  • LuisHe

    rnnde

    zYez

    Declaracindevariablesint cantidad;double precio;

    Sereservaespaciosuficiente

    LASVARIABLESNOSEINICIALIZANNosedebenusarhastaqueseleshayadadoalgnvalorDndecolocamoslasdeclaraciones?Siempre,antesdelprimerusoHabitualmentealprincipiodelafuncin

    Pgina 94Fundamentosdelaprogramacin:TiposeinstruccionesI

    Memoriacantidad ?

    precio ?

    ...

    tipo nombre;

    LuisHe

    rnnde

    zYez

    Declaracindevariables#includeusingnamespacestd;

    int main(){

    int cantidad;double precio,total;

    return 0;}

    Pgina 95Fundamentosdelaprogramacin:TiposeinstruccionesI

    Memoria

    cantidad ?

    precio ?

    total ?

    ...

    Podemosdeclararvariasdeunmismotiposeparandolosnombresconcomas

  • LuisHe

    rnnde

    zYez

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

    Pgina 96Fundamentosdelaprogramacin:TiposeinstruccionesI

    Notacincientfica

    LuisHe

    rnnde

    zYez

    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

  • LuisHe

    rnnde

    zYez

    Pgina 98Fundamentosdelaprogramacin:TiposeinstruccionesI

    LuisHe

    rnnde

    zYez

    ExpresionesSecuenciasdeoperandosyoperadoresoperando operador operandooperador operando...

    total=cantidad*precio*1.18;

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

    UnosoperadoresseevalanantesqueotrosPgina 99Fundamentosdelaprogramacin:TiposeinstruccionesI

    ExpresinExpresin

  • LuisHe

    rnnde

    zYez

    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

    LuisHe

    rnnde

    zYez

    Ejemplodeusodevariablesyexpresiones#includeusingnamespacestd;

    int main(){

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

  • LuisHe

    rnnde

    zYez

    Memoria

    ...

    Ejemplodeusodevariables#includeusingnamespacestd;

    intmain(){

    int cantidad;double precio,total;

    Pgina 102Fundamentosdelaprogramacin:TiposeinstruccionesI

    cantidad ?

    precio ?

    total ?

    LuisHe

    rnnde

    zYez

    Ejemplodeusodevariables#includeusingnamespacestd;

    intmain(){

    intcantidad;doubleprecio,total;cantidad=12;

    Pgina 103Fundamentosdelaprogramacin:TiposeinstruccionesI

    Memoria

    ...

    cantidad 12

    precio ?

    total ?

  • LuisHe

    rnnde

    zYez

    Ejemplodeusodevariables#includeusingnamespacestd;

    intmain(){

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

    Pgina 104Fundamentosdelaprogramacin:TiposeinstruccionesI

    Memoria

    ...

    cantidad 12

    precio 39.95

    total ?

    LuisHe

    rnnde

    zYez

    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

  • LuisHe

    rnnde

    zYez

    Ejemplodeusodevariables#includeusingnamespacestd;

    intmain(){

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

  • LuisHe

    rnnde

    zYez

    Pgina 108Fundamentosdelaprogramacin:TiposeinstruccionesI

    LuisHe

    rnnde

    zYez

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

    Pgina 109Fundamentosdelaprogramacin:TiposeinstruccionesI

    cin>>cantidad;

    cin >>cantidad;

    character inputstreamcharacter inputstream

    Memoria

    cantidad ?...

    _

    12

    1 2 1 2

  • LuisHe

    rnnde

    zYez

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

    Seignoranlosespaciosenblancoiniciales

    Pgina 110Fundamentosdelaprogramacin:TiposeinstruccionesI

    cin>>variable;

    LuisHe

    rnnde

    zYez

    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

  • LuisHe

    rnnde

    zYez

    Qupasasielusuarioseequivoca?EldatonosercorrectoAplicacinprofesional:cdigodecomprobacinyayudaAqusupondremosquelosusuariosnoseequivocanEnocasionesaadiremoscomprobacionessencillas

    Pgina 112Fundamentosdelaprogramacin:TiposeinstruccionesI

    Paraevitarerrores,leecadadatoenunainstruccinaparteParaevitarerrores,leecadadatoenunainstruccinaparte

    LuisHe

    rnnde

    zYez

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

  • LuisHe

    rnnde

    zYez

    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!!!

    LuisHe

    rnnde

    zYez

    DivisindedosnmerosPediralusuariodosnmerosymostrarleelresultadodedividirelprimeroentreelsegundo

    Algoritmo.1. Pedirelnumerador2. Pedireldenominador3. Realizarladivisin,guardandoelresultado

    4. MostrarelresultadoPgina 115Fundamentosdelaprogramacin:TiposeinstruccionesI

    Datos/clculos

    Variabledenominador (double)Variableresultado (double)

    resultado=numerador/denominador

    Variablenumerador (double)

  • LuisHe

    rnnde

    zYez

    ProcesamientoEntrada SalidaDeclaraciones

    EntradaProcesoSalidaMuchosprogramasseajustanaunsencilloesquema:

    Pgina 116Fundamentosdelaprogramacin:TiposeinstruccionesI

    1. Leernumerador2. Leerdenominador3. Calculardivisinenresultado4. Mostrarresultado

    LuisHe

    rnnde

    zYez

    DivisindedosnmerosPediralusuariodosnmerosymostrarleelresultadodedividirelprimeroentreelsegundo.

    1. Leernumerador2. Leerdenominador3. Calculardivisinenresultado4. Mostrarresultado

    Pgina 117Fundamentosdelaprogramacin:TiposeinstruccionesI

    cin>>numerador;cin>>numerador;

    cin>>denominador;cin>>denominador;

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

    cout

  • LuisHe

    rnnde

    zYez

    Divisindedosnmeros#includeusingnamespacestd;

    int main(){

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

  • LuisHe

    rnnde

    zYez

    ProblemaDadaslabaseylaalturadeuntringulo,mostrarsurea

    Mostrarenlapantallauntextoquepidalabasedeltringulo.Elusuariointroducirelvalorconelteclado.Mostrarenlapantallauntextoquepidalaalturadeltringulo.Elusuariointroducirelvalorconelteclado.Secalcularelreadeltringuloysemostrarenlapantalla.

    Pgina 120Fundamentosdelaprogramacin:TiposeinstruccionesI

    RefinamientoRefinamiento

    LuisHe

    rnnde

    zYez

    Objetos:Datosquemanejaelprograma

    Mostrarenlapantallauntextoquepidalabasedeltringulo.Elusuariointroducirlabaseconelteclado.Mostrarenlapantallauntextoquepidalaalturadeltringulo.Elusuariointroducirlaalturaconelteclado.Secalcularelreadeltringuloysemostrarenlapantalla.

    Pgina 121Fundamentosdelaprogramacin:TiposeinstruccionesI

    coutcout cadenaliteralcadenaliteralvariablevariable cincin

    cadenaliteralcadenaliteral variablevariablevariablevariable

  • LuisHe

    rnnde

    zYez

    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

    LuisHe

    rnnde

    zYez

    Operaciones(acciones)

    Mostrarenlapantallauntextoquepidalabasedeltringulo.Elusuariointroducirlabaseconelteclado. Mostrarenlapantallauntextoquepidalaalturadeltringulo.Elusuariointroducirlaalturaconelteclado.Secalcularelreadeltringuloysemostrarenlapantalla.

    Pgina 123Fundamentosdelaprogramacin:TiposeinstruccionesI

    cout...

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

  • LuisHe

    rnnde

    zYez

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

    Pgina 124Fundamentosdelaprogramacin:TiposeinstruccionesI

    LuisHe

    rnnde

    zYez

    #includeusingnamespacestd;int main(){

    return 0;}

    Pgina 125Fundamentosdelaprogramacin:TiposeinstruccionesI

    AlgoritmotraducidoacdigoenC++

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

  • LuisHe

    rnnde

    zYez

    Elprograma:implementacin#includeusingnamespacestd;

    int main(){

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

  • LuisHe

    rnnde

    zYez

    Variabilidaddelosdatos

    Pgina 128Fundamentosdelaprogramacin:TiposeinstruccionesI

    DatosDatosConstantesConstantes

    LiteralesLiterales

    ConnombreConnombre

    VariablesVariables

    "Introduzcalabasedeltringulo:"3.141592653589

    base,altura,area

    Pi=3.141592653589

    IdentificadoresIdentificadores

    LuisHe

    rnnde

    zYez

    Pgina 129Fundamentosdelaprogramacin:TiposeinstruccionesI

  • LuisHe

    rnnde

    zYez

    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

    LuisHe

    rnnde

    zYez

    PalabrasreservadasdellenguajeC++asm autoboolbreakcasecatchcharclassconst

    const_cast continuedefaultdeletedodouble

    dynamic_cast elseenumexplicitexternfalse

    floatforfriendgoto ifinlineintlong

    mutablenamespacenewoperatorprivateprotected

    publicregisterreinterpret_cast returnshort

    signedsizeofstaticstatic_cast structswitch

    templatethisthrowtruetrytypedeftypeid

    typename unionunsignedusingvirtualvoid

    volatilewhile

    Pgina 131Fundamentosdelaprogramacin:TiposeinstruccionesI

  • LuisHe

    rnnde

    zYez

    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,_LuisHe

    rnnde

    zYez

    Pgina 133Fundamentosdelaprogramacin:TiposeinstruccionesI

  • LuisHe

    rnnde

    zYez

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

    Pgina 134Fundamentosdelaprogramacin:TiposeinstruccionesI

    125'a'true3.14159

    "Hola"

    AnexodelTema2:detallestcnicosAnexodelTema2:detallestcnicos

    LuisHe

    rnnde

    zYez

    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

  • LuisHe

    rnnde

    zYez

    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

    LuisHe

    rnnde

    zYez

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

    truefalse

    Cualquiernmerodistintode0 esequivalenteatrueEl0 esequivalenteafalse

    Pgina 137Fundamentosdelaprogramacin:TiposeinstruccionesI

    Valoreslgicos

  • LuisHe

    rnnde

    zYez

    C++distingueentremaysculasyminsculas

    int:palabrareservadadeC++paradeclarardatosenterosInt,INT oinT nosonpalabrasreservadasdeC++true:palabrareservadadeC++paraelvalorverdaderoTrue oTRUE nosonpalabrasreservadasdeC++

    Pgina 138Fundamentosdelaprogramacin:TiposeinstruccionesI

    LuisHe

    rnnde

    zYez

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

    SecuenciasdecaracteresProgramasconvariablesdetipostring:#includeusingnamespacestd;

    Pgina 139Fundamentosdelaprogramacin:TiposeinstruccionesI

    " "

    Lascomillastipogrficas(apertura/cierre) NOsirvenAsegratedeutilizarcomillasrectas:""

    char

    Cadenasdecaracteres

  • LuisHe

    rnnde

    zYez

    Pgina 140Fundamentosdelaprogramacin:TiposeinstruccionesI

    tipos.cpptipos.cpp

    #include#includeusingnamespacestd;//Unsolousing...paraambasbibliotecas

    int main(){

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

  • LuisHe

    rnnde

    zYez

    Pgina 142Fundamentosdelaprogramacin:TiposeinstruccionesI

    LuisHe

    rnnde

    zYez

    [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)

    ,

  • LuisHe

    rnnde

    zYez

    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

    LuisHe

    rnnde

    zYez

    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;

  • LuisHe

    rnnde

    zYez

    Obtencindelvalordeunavariable Nombredelavariableenunaexpresin

    cout

  • LuisHe

    rnnde

    zYez

    Eloperador=

    Alaizquierda,SIEMPREunavariable

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

    ;Expresin=

    Pgina 148Fundamentosdelaprogramacin:TiposeinstruccionesI

    Variable

    LuisHe

    rnnde

    zYez

    Erroresint a,b,c;

    5 =a;//ERROR:unliteralnopuederecibirunvalor

    a+23 =5;//ERROR:nopuedehaberunaexpresinalaizda.

    b="abc";//ERROR:unenteronopuedeguardarunacadena

    c=23 5;//ERROR:expresinnovlida(faltaoperador)

    Pgina 149Fundamentosdelaprogramacin:TiposeinstruccionesI

  • LuisHe

    rnnde

    zYez

    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

    LuisHe

    rnnde

    zYez

    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;

  • LuisHe

    rnnde

    zYez

    Pgina 152Fundamentosdelaprogramacin:TiposeinstruccionesI

    LuisHe

    rnnde

    zYez

    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

  • LuisHe

    rnnde

    zYez

    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

    LuisHe

    rnnde

    zYez

    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

  • LuisHe

    rnnde

    zYez

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

  • LuisHe

    rnnde

    zYez

    OperadoresdeincrementoydecrementoIncremento/decrementodelavariable numricaenunaunidad

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

  • LuisHe

    rnnde

    zYez

    Pgina 160Fundamentosdelaprogramacin:TiposeinstruccionesI

    LuisHe

    rnnde

    zYez

    Enquordenseevalanlosoperadores?3 +5 *2 /2 1

    Deizquierdaaderecha?Dederechaaizquierda?Unosantesqueotros?Precedenciadelosoperadores(prioridad):

    SeevalananteslosdemayorprecedenciaYsitienenigualprioridad?

    Normalmente,deizquierdaaderechaParntesis:fuerzanaevaluarsusubexpresin

    Pgina 161Fundamentosdelaprogramacin:TiposeinstruccionesI

  • LuisHe

    rnnde

    zYez

    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

    LuisHe

    rnnde

    zYez

    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

  • LuisHe

    rnnde

    zYez

    #includeusingnamespacestd;

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

  • LuisHe

    rnnde

    zYez

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

  • LuisHe

    rnnde

    zYez

    Declaracindeconstantes ModificadordeaccesoconstVariablesinicializadasalasquenodejamosvariar

    Pgina 168Fundamentosdelaprogramacin:TiposeinstruccionesI

    Declaracindevariableconinicializador

    Programacinconbuenestilo:Ponenmaysculalaprimeraletradeunaconstanteotodosunombre

    Laconstantenopodrvolveraapareceralaizquierdadeun=Laconstantenopodrvolveraapareceralaizquierdadeun=

    constconst

    constshortintMeses=12;constdouble Pi=3.141592,

    RATIO=2.179 *Pi;

    LuisHe

    rnnde

    zYez

    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

  • LuisHe

    rnnde

    zYez

    Pgina 170Fundamentosdelaprogramacin:TiposeinstruccionesI

    constantes.cppconstantes.cpp

    #includeusingnamespacestd;

    int main(){const double Pi=3.141592;double radio=12.2,circunferencia;circunferencia=2 *Pi*radio;cout

  • LuisHe

    rnnde

    zYez

    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)

    #include

    Algunas...Algunas...LuisHe

    rnnde

    zYez

    #includeusingnamespacestd;#include

    int 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

  • LuisHe

    rnnde

    zYez

    Pgina 174Fundamentosdelaprogramacin:TiposeinstruccionesI

    LuisHe

    rnnde

    zYez

    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

  • LuisHe

    rnnde

    zYez

    ...#include

    int main(){char caracter1='A',caracter2='1',caracter3='&';cout

  • LuisHe

    rnnde

    zYez

    OperadoresrelacionalesComparaciones(condiciones)

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

    Pgina 178Fundamentosdelaprogramacin:TiposeinstruccionesI

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

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

    LuisHe

    rnnde

    zYez

    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(=)

  • LuisHe

    rnnde

    zYez

    Pgina 180Fundamentosdelaprogramacin:TiposeinstruccionesI

    LuisHe

    rnnde

    zYez

    Pgina 181Fundamentosdelaprogramacin:TiposeinstruccionesI

    Seleccin:bifurcacincondicional

    truetrue

    cdigoT

    falsefalse

    cdigoF

    if (condicin) {cdigoT

    }else{

    cdigoF}

    CondicinCondicin

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

    cout

  • LuisHe

    rnnde

    zYez

    Pgina 182Fundamentosdelaprogramacin:TiposeinstruccionesI

    #includeusingnamespacestd;

    int main(){intop1=13,op2=4;intopcion;cout

  • LuisHe

    rnnde

    zYez

    {intruccin1intruccin2...intruccinN

    }

    {intruccin1intruccin2...intruccinN

    }

    Pgina 184Fundamentosdelaprogramacin:TiposeinstruccionesI

    AgrupacindeinstruccionesGrupodeinstruccionesaejecutarenunaramadelif

    Tab3esp.Tab3esp.

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

    cout

  • LuisHe

    rnnde

    zYez

    Pgina 186Fundamentosdelaprogramacin:TiposeinstruccionesI

    LuisHe

    rnnde

    zYez

    Pgina 187Fundamentosdelaprogramacin:TiposeinstruccionesI

    Repeticinoiteracincondicional

    while (condicin) {cuerpo

    }Cuerpo

    truetrue falsefalse

    Bloquedecdigo

    Silacondicinesfalse alempezar,noseejecutaelcuerponingunavezSilacondicinesfalse alempezar,noseejecutaelcuerponingunavez

    cuerpo)condicin(while

    Condicin

  • LuisHe

    rnnde

    zYez

    Pgina 188Fundamentosdelaprogramacin:TiposeinstruccionesI

    #includeusingnamespacestd;

    int main(){inti=1,n=0,suma=0;while (n

  • LuisHe

    rnnde

    zYez

    Pgina 190Fundamentosdelaprogramacin:TiposeinstruccionesI

    LuisHe

    rnnde

    zYez

    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

  • LuisHe

    rnnde

    zYez

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

    Pgina 192Fundamentosdelaprogramacin:TiposeinstruccionesI

    Variablecin >>

    SeamigableconelusuarioLeecadadatoenunalneaSeamigableconelusuarioLeecadadatoenunalneacoutedad;

    LuisHe

    rnnde

    zYez

    cin>>cadena terminaconelprimerespacioenblancocin.sync() descartalaentradapendiente

    Pgina 193Fundamentosdelaprogramacin:TiposeinstruccionesI

    Cmoleervariaspalabras?Siguientepgina...

    Cmoleervariaspalabras?Siguientepgina...

    apellidos recibe"Antonio"apellidos recibe"Antonio"

    string nombre,apellidos;coutnombre;coutapellidos;cout

  • LuisHe

    rnnde

    zYez

    Pgina 194Fundamentosdelaprogramacin:TiposeinstruccionesI

    LecturasinsaltarlosespaciosenblancoinicialesLlamadaafuncionesconeloperadorpunto(.):Eloperadorpuntopermitellamaraunafuncinsobreunavariablevariable.funcin(argumentos)

    Lecturadeuncarctersinsaltarespaciosenblanco:cin.get(c);//Leeelsiguientecarcter

    Lecturadecadenassinsaltarlosespaciosenblanco:getline(cin,cad);Leetodoloquehayahastaelfinaldelalnea(Intro)Recuerda:Espaciosenblanco sonespacios,tabuladores,saltosdelnea,...

    LuisHe

    rnnde

    zYez

    Representacintextualdelosdatosint meses=7;cout

  • LuisHe

    rnnde

    zYez

    int meses=7;cout

  • LuisHe

    rnnde

    zYez

    bool fin=false;cout

  • LuisHe

    rnnde

    zYez

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

    //Cuerpo}

    Tipo dedatoquedevuelvelafuncincomoresultado Parmetros paraproporcionardatosalafuncin

    Declaracionesdevariablesseparadasporcomas Cuerpo:secuenciadedeclaracioneseinstruccionesUnbloquedecdigo!

    Pgina 200Fundamentosdeprogramacin:TiposeinstruccionesI

    LuisHe

    rnnde

    zYez

    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

  • LuisHe

    rnnde

    zYez

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

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

    Pgina 202Fundamentosdeprogramacin:TiposeinstruccionesI

    LuisHe

    rnnde

    zYez

    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

  • LuisHe

    rnnde

    zYez

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

    return x*x; cout

  • LuisHe

    rnnde

    zYez

    #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

  • LuisHe

    rnnde

    zYez

    //Implementacindelasfuncionespropias

    boolpar(int num){bool esPar;

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

    }else {

    esPar =false;}

    return esPar;}...

    Pgina 208Fundamentosdeprogramacin:TiposeinstruccionesI

    LuisHe

    rnnde

    zYez

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

  • LuisHe

    rnnde

    zYez

    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.cppLuisHe

    rnnde

    zYez

    LicenciaCC(Creative Commons)Estetipodelicenciasofrecenalgunosderechosaterceraspersonasbajociertascondiciones.Estedocumentotieneestablecidaslassiguientes:

    Pulsaenlaimagendearribaaladerechaparasaberms.Fundamentosdelaprogramacin:TiposeinstruccionesI Pgina 211

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

  • 2AGradoenIngenieraInformticaGradoenIngenieradelSoftwareGradoenIngenieradeComputadores

    LuisHernndezYezFacultaddeInformticaUniversidadComplutense

    FundamentosdelaprogramacinLuisHe

    rnnde

    zYez

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

    Fundamentosdelaprogramacin:TiposeinstruccionesI(Anexo)

  • LuisHe

    rnnde

    zYez

    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

    NmerosenterosLuisHe

    rnnde

    zYez

    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

  • LuisHe

    rnnde

    zYez

    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)LuisHe

    rnnde

    zYez

    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)

  • LuisHe

    rnnde

    zYez

    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)LuisHe

    rnnde

    zYez

    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

  • LuisHe

    rnnde

    zYez

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

    JuegodecaracteresASCIIextendido(8bits):ISO88591+Cdigosentre128y255

    Pgina 220Fundamentosdelaprogramacin:TiposeinstruccionesI(Anexo)

    Multituddecodificaciones:EBCDIC,UNICODE,UTF8,...

    LuisHe

    rnnde

    zYez

    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

  • LuisHe

    rnnde

    zYez

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

    SecuenciasdecaracteresSeasignalamemoriaquesenecesitaparalasecuenciaconcretaRequierenlabibliotecastring conelespaciodenombresstd:#includeusingnamespacestd;

    Pgina 222Fundamentosdelaprogramacin:TiposeinstruccionesI(Anexo)

    Carcter

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

    " "

    CadenasdecaracteresLuisHe

    rnnde

    zYez

    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)

  • LuisHe

    rnnde

    zYez

    LicenciaCC(Creative Commons)Estetipodelicenciasofrecenalgunosderechosaterceraspersonasbajociertascondiciones.Estedocumentotieneestablecidaslassiguientes:

    Pulsaenlaimagendearribaaladerechaparasaberms.Fundamentosdelaprogramacin:TiposeinstruccionesI(Anexo) Pgina 224

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

  • 3GradoenIngenieraInformticaGradoenIngenieradelSoftwareGradoenIngenieradeComputadores

    LuisHernndezYezFacultaddeInformticaUniversidadComplutense

    FundamentosdelaprogramacinLuisHe

    rnnde

    zYez

    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

  • LuisHe

    rnnde

    zYez

    Pgina 227Fundamentosdelaprogramacin:TiposeinstruccionesII

    LuisHe

    rnnde

    zYez

    TipoConjuntodevaloresconsusposiblesoperacionesValorConjuntodebitsinterpretadoscomodeuntipoconcretoVariable (oconstante)CiertamemoriaconnombreparavaloresdeuntipoDeclaracinInstruccinqueidentificaunnombreDefinicinDeclaracinqueasignamemoriaaunavariableoconstante

    Pgina 228Fundamentosdelaprogramacin:TiposeinstruccionesII

  • LuisHe

    rnnde

    zYez

    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

    LuisHe

    rnnde

    zYez

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

    Estructurados(Tema5) Coleccioneshomogneas:arraysTodosloselementosdelacoleccindeunmismotipo Coleccionesheterogneas:estructurasElementosdelacoleccindetiposdistintos

    Pgina 230Fundamentosdeprogramacin:TiposeinstruccionesII

  • LuisHe

    rnnde

    zYez

    Consusposiblesmodificadores:[unsigned][short] int

    longlong int

    float

    [long] double

    char

    bool

    Pgina 231Fundamentosdelaprogramacin:TiposeinstruccionesII

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

    longint int

    LuisHe

    rnnde

    zYez

    Pgina 232Fundamentosdelaprogramacin:TiposeinstruccionesII

  • LuisHe

    rnnde

    zYez

    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;

    LuisHe

    rnnde

    zYez

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

    Menormemoria:Prdidadeinformacinenlaconversin

    Pgina 234Fundamentosdelaprogramacin:TiposeinstruccionesII

    long doubledoublefloatlong intintshort int

  • LuisHe

    rnnde

    zYez

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

  • LuisHe

    rnnde

    zYez

    Describimoslosvaloresdelasvariablesdeltipotypedefdescripcinnombre_de_tipo;

    Pgina 237Fundamentosdelaprogramacin:TiposeinstruccionesII

    Nombresdetipospropios:tminsculaseguidadeunaovariaspalabrascapitalizadasLoscolorearemosennaranja,pararemarcarquesontipostypedefdescripcintMiTipo;typedefdescripcintMoneda;typedefdescripcintTiposDeCalificacion;

    typedefdescripcintMiTipo;typedefdescripcintMoneda;typedefdescripcintTiposDeCalificacion;

    Identificadorvlido

    Declaracindetipofrenteadefinicindevariable

    LuisHe

    rnnde

    zYez

    Pgina 238Fundamentosdelaprogramacin:TiposeinstruccionesII

  • LuisHe

    rnnde

    zYez

    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 }

    LuisHe

    rnnde

    zYez

    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)

  • LuisHe

    rnnde

    zYez

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

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

  • LuisHe

    rnnde

    zYez

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

    Pgina 243Fundamentosdelaprogramacin:TiposeinstruccionesII

    if (mes==enero){cout

  • LuisHe

    rnnde

    zYez

    #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

    LuisHe

    rnnde

    zYez

    //Mostramoslafechacout

  • LuisHe

    rnnde

    zYez

    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.cppLuisHe

    rnnde

    zYez

    Pgina 248Fundamentosdelaprogramacin:TiposeinstruccionesII

  • LuisHe

    rnnde

    zYez

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

    MantienenlainformacinenarchivosSecuenciasdedatos

    Pgina 249Fundamentosdelaprogramacin:TiposeinstruccionesII

    LuisHe

    rnnde

    zYez

    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)

  • LuisHe

    rnnde

    zYez

    TextosdispuestosensucesivaslneasCarcterdefindelneaentrelneaylnea(Intro)PosiblementevariosdatosencadalneaEjemplo:Comprasdelosclientes

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

    Normalmenteterminanconundatoespecial(centinela)Porejemplo,unNIFqueseaXPgina 251Fundamentosdelaprogramacin:TiposeinstruccionesII

    LuisHe

    rnnde

    zYez

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

    Pgina 252Fundamentosdelaprogramacin:TiposeinstruccionesII

    #include

  • LuisHe

    rnnde

    zYez

    Pgina 253Fundamentosdelaprogramacin:TiposeinstruccionesII

    LuisHe

    rnnde

    zYez

    FlujosdetextodeentradaParaleerdeunarchivodetexto:

    DeclaraunavariabledetipoifstreamAsocialavariableconelarchivodetexto(aperturadelarchivo)RealizalasoperacionesdelecturaDesligalavariabledelarchivodetexto(cierreelarchivo)

    Pgina 254Fundamentosdelaprogramacin:TiposeinstruccionesII

    1

    2

    3

    4

    ifstream

  • LuisHe

    rnnde

    zYez

    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

    LuisHe

    rnnde

    zYez

    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

  • LuisHe

    rnnde

    zYez

    Qudeboleer? Unnmero

    Usaelextractor archivo>>num; Uncarcter(seaelquesea)

    Usalafuncinget() archivo.get(c); Unacadenasinespacios

    Usaelextractor archivo>>cad; Unacadenaposiblementeconespacios

    Usalafuncingetline() getline(archivo,cad);

    Pgina 257Fundamentosdelaprogramacin:TiposeinstruccionesII

    LuisHe

    rnnde

    zYez

    Dndequedapendientelaentrada? Nmeroledoconelextractor

    Enelprimercarcternovlido(inc.espaciosenblanco) Carcterledoconget()

    Enelsiguientecarcter(inc.espaciosenblanco) UnacadenaledaconelextractorEnelsiguienteespacioenblanco Unacadenaledaconlafuncingetline()

    Alprincipiodelasiguientelnea

    Pgina 258Fundamentosdelaprogramacin:TiposeinstruccionesII

  • LuisHe

    rnnde

    zYez

    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");//Apertura

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

    4 archivo.close();//Cierre

    LuisHe

    rnnde

    zYez

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

    Pgina 260Fundamentosdelaprogramacin:TiposeinstruccionesII

    productoproducto ReproductordeDVD precioprecio 123.95

    unidadesunidades 2nifnif 12345678F

    12345678F2123.95ReproductordeDVD

    EspacioEspacio

    ElextractorsaltalosespaciosElextractorsaltalosespacios

    getline() nosaltaespaciosgetline() nosaltaespacios

  • LuisHe

    rnnde

    zYez

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

    Pgina 261Fundamentosdelaprogramacin:TiposeinstruccionesII

    productoproducto ReproductordeDVD precioprecio 123.95

    unidadesunidades 2nifnif 12345678F

    12345678F2123.95ReproductordeDVD

    SinespacioSinespacio

    Leemoselespacio(nohacemosnadaconl)Leemoselespacio(nohacemosnadaconl)

    LuisHe

    rnnde

    zYez

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

    LeerprimerNIFMientraselNIFnoseaX:Leerunidades,precioydescripcinCalcularymostrareltotalLeerelsiguienteNIF

    Pgina 262Fundamentosdelaprogramacin:TiposeinstruccionesII

  • LuisHe

    rnnde

    zYez

    #include#includeusingnamespacestd;#include#include//Formatodesalida

    int 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

    LuisHe

    rnnde

    zYez

    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

  • LuisHe

    rnnde

    zYez

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

    cout

  • LuisHe

    rnnde

    zYez

    FlujosdetextodesalidaParacrearunarchivodetextoyescribirenl:

    DeclaraunavariabledetipoofstreamAsocialavariableconelarchivodetexto(creaelarchivo)Realizalasescrituraspormediodeloperador

  • LuisHe

    rnnde

    zYez

    #include#includeusingnamespacestd;#include

    int main(){string nif,producto;int unidades;double precio;char aux;ofstream archivo;

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

    coutnif;...

    Pgina 269Fundamentosdelaprogramacin:TiposeinstruccionesII

    escribir.cppescribir.cppLuisHe

    rnnde

    zYez

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

  • LuisHe

    rnnde

    zYez

    //Escribimoselcentinelafinal...archivo

  • LuisHe

    rnnde

    zYez

    Pgina 273Fundamentosdelaprogramacin:TiposeinstruccionesII

    {double oper1,oper2,prod;

    coutoper1;

    cout

  • LuisHe

    rnnde

    zYez

    RepetirlaejecucindeunaomsinstruccionesAcumular,procesarcolecciones,...

    Pgina 275Fundamentosdelaprogramacin:TiposeinstruccionesII

    Cdigo

    Iterar?SS NoNo

    Inicializacin

    whilewhile forfor

    LuisHe

    rnnde

    zYez

    Pgina 276Fundamentosdelaprogramacin:TiposeinstruccionesII

  • LuisHe

    rnnde

    zYez

    Lainstruccinifif (condicin){

    cdigoT}[else {

    cdigoF}]

    condicin:expresinboolClusulaelse opcional

    Pgina 277Fundamentosdelaprogramacin:TiposeinstruccionesII

    BloqueT BloqueF

    Condicintruetrue falsefalse

    OpcionalOpcional

    LuisHe

    rnnde

    zYez

    int num;cin>>num;if (num

  • LuisHe

    rnnde

    zYez

    int num;cin>>num;if (num

  • LuisHe

    rnnde

    zYez

    Divisinentredosnmerosprotegidafrenteaintentodedivisinpor0#includeusingnamespacestd;

    int main(){double numerador,denominador,resultado;coutnumerador;coutdenominador;if (denominador==0){

    cout

  • LuisHe

    rnnde

    zYez

    Seaplicanavaloresbool (condiciones)Elresultadoesdet