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