fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/fp02.pdf · 2...

82
2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería de Computadores Luis Hernández Yáñez Facultad de Informática Universidad Complutense Fundamentos de la programación Luis Hernández Yáñez Un ejemplo de programación 50 El primer programa en C++ 64 Las líneas de código del programa 80 Cálculos en los programas 86 Variables 92 Expresiones 98 Lectura de datos desde el teclado 108 Resolución de problemas 119 Los datos de los programas 127 Identificadores 129 Tipos de datos 133 Declaración y uso de variables 142 Instrucciones de asignación 147 Operadores 152 Más sobre expresiones 160 Constantes 167 La biblioteca cmath 171 Operaciones con caracteres 174 Operadores relacionales 177 Toma de decisiones (if) 180 Bloques de código 183 Bucles (while) 186 Entrada/salida por consola 190 Funciones definidas por el programador 199 Fundamentos de la programación: Tipos e instrucciones I

Upload: others

Post on 19-May-2020

17 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

2

GradoenIngenieríaInformáticaGradoenIngenieríadelSoftware

GradoenIngenieríadeComputadores

LuisHernándezYáñez

FacultaddeInformáticaUniversidadComplutense

Fundamentos de la programaciónLuis Hernández Yáñez

Un ejemplo de programación 50El primer programa en C++ 64Las líneas de código del programa 80Cálculos en los programas 86Variables 92Expresiones 98Lectura de datos desde el teclado 108Resolución de problemas 119Los datos de los programas 127Identificadores 129Tipos de datos 133Declaración y uso de variables 142Instrucciones de asignación 147Operadores 152Más sobre expresiones 160Constantes 167La biblioteca cmath 171Operaciones con caracteres 174

Operadores relacionales 177Toma de decisiones (if) 180Bloques de código 183Bucles (while) 186Entrada/salida por consola 190Funciones definidas

por el programador 199

Fundamentos de la programación: Tipos e instrucciones I

Page 2: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

Página 50Fundamentos de la programación: Tipos e instrucciones I

Luis Hernández Yáñez

UnacomputadoradeuncocheInstruccionesqueentiende:

<instrucción>::=<inst>;<inst>::=Start |Stop |<avanzar><avanzar>::=Go <dirección><num>Blocks<dirección>::=North |East |South |West<num>::=1 |2 |3 |4 |5

Ejemplos:

Start;

Go North 3 Blocks;

Stop;

Página 51Fundamentos de la programación: Tipos e instrucciones I

Page 3: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

Sintaxisdellenguajedeprogramación

Página 52Fundamentos de la programación: Tipos e instrucciones I

avanzaravanzar direcciónGo Blocksnum

=Literales=Literales

direccióndirección

North

East

South

West

instruccióninstrucción

Start

avanzar

Stop ;

numnum

1

2

3

4

5

Luis Hernández Yáñez

ElproblemaaresolverEstandoelcocheenlaposiciónA,conseguirllegaralCineTívoli (B)

¿Quépasoshayqueseguir?

ArrancarIrunbloquealNorteIrdosbloquesalEsteIrcincobloquesalNorteIrdosbloquesalEsteParar

Página 53Fundamentos de la programación: Tipos e instrucciones I

B

A

NN

Bloque:Bloque:

Page 4: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

ElalgoritmoSecuenciadepasosquehayqueseguirpararesolverelproblema

Página 54Fundamentos de la programación: Tipos e instrucciones I

1.‐ Arrancar

NN

2.‐ IrunbloquealNorte

3.‐ IrdosbloquesalEste

4.‐ IrcincobloquesalNorte

5.‐ IrdosbloquesalEste

6.‐ Parar

Esospasossirventantoparaunapersonacomoparaunacomputadora.

Luis Hernández Yáñez

ElprogramaInstruccionesescritasenellenguajedeprogramación

Start;

Go North 1 Blocks;

Go East 2 Blocks;

Go North 5 Blocks;

Go East 2 Blocks;

Stop;

Página 55Fundamentos de la programación: Tipos e instrucciones I

B

A

NN

Page 5: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

ElprogramaEscribimoselcódigodelprogramaenuneditoryloguardamosenunarchivo:

Página 56Fundamentos de la programación: Tipos e instrucciones I

Stat;

Go North 1 Blocks

Go East Blocks;

Go Noth 5 Blocks;

Go West 2 Blocks;

Stop;

CopiamoselarchivoenunallaveUSB

ylollevamosalcoche

Luis Hernández Yáñez

LacompilaciónIntroducimoslallaveUSBenelcocheypulsamoselbotóndeejecutarelprograma:

Página 57Fundamentos de la programación: Tipos e instrucciones I

Stat;‐‐‐‐^ Unknown word.Go North 1 Blocks‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐^ ; missing.Go East Blocks;‐‐‐‐‐‐‐‐^ Number missing.Go Noth 5 Blocks;‐‐‐‐‐‐‐^ Unknown word.Go West 2 Blocks;Stop;There are errors. Impossible to run the program.

ErroresdesintaxisErroresdesintaxis

Page 6: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

DepuraciónEditamoselcódigoparacorregirloserroressintácticos:

Página 58Fundamentos de la programación: Tipos e instrucciones I

Stat;

Go North 1 Blocks

Go East Blocks;

Go Noth 5 Blocks;

Go West 2 Blocks;

Stop;

Start;

Go North 1 Blocks;

Go East 3 Blocks;

Go North 5 Blocks;

Go West 2 Blocks;

Stop;

Luis Hernández Yáñez

LaejecuciónSerealizaloquepidecadainstrucción:

Página 59Fundamentos de la programación: Tipos e instrucciones I

B

NN

Start;

Go North 1 Blocks;

Go East 3 Blocks;!!

Errordeejecución¡Unainstrucciónnosepuedeejecutar!

Page 7: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

DepuraciónEditamoselcódigoparaarreglarelerrordeejecución:

Página 60Fundamentos de la programación: Tipos e instrucciones I

Start;

Go North 1 Blocks;

Go East 2 Blocks;

Go North 5 Blocks;

Go West 2 Blocks;

Stop;

Start;

Go North 1 Blocks;

Go East 3 Blocks;

Go North 5 Blocks;

Go West 2 Blocks;

Stop;

Luis Hernández Yáñez

LaejecuciónSerealizaloquepidecadainstrucción:

Página 61Fundamentos de la programación: Tipos e instrucciones I

B

NN

Start;

Go North 1 Blocks;

Go East 2 Blocks;

Errorlógico¡Elprogramanollegaalresultadodeseado!

Go North 5 Blocks;

Go West 2 Blocks;

Stop;

??

Page 8: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

DepuraciónEditamoselcódigoparaarreglarelerrorlógico:

Página 62Fundamentos de la programación: Tipos e instrucciones I

Start;

Go North 1 Blocks;

Go East 2 Blocks;

Go North 5 Blocks;

Go West 2 Blocks;

Stop;

Start;

Go North 1 Blocks;

Go East 2 Blocks;

Go North 5 Blocks;

Go East 2 Blocks;

Stop;

Luis Hernández Yáñez

LaejecuciónSerealizaloquepidecadainstrucción:

Página 63Fundamentos de la programación: Tipos e instrucciones I

NN

Start;

Go North 1 Blocks;

Go East 2 Blocks;

Go North 5 Blocks;

Go East 2 Blocks;

Stop;

¡Conseguido!

Page 9: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

Página 64Fundamentos de la programación: Tipos e instrucciones I

Luis Hernández Yáñez

HolaMundo!Devueltaenelprogramaquemuestraunsaludoenlapantalla:

#include <iostream>

using namespace std;

int main() // main() es donde empieza la ejecución

{

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

return 0;

}

Página 65Fundamentos de la programación: Tipos e instrucciones I

Page 10: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

HolaMundo!Laúnicainstrucciónqueproducealgotangible:

#include <iostream>

using namespace std;

int main() // main() es donde empieza la ejecución

{

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

return 0;

}

Página 66Fundamentos de la programación: Tipos e instrucciones I

Luis Hernández Yáñez

cout (iostream)Visualizaciónenlapantalla:operador<< (insertor)

Página 67Fundamentos de la programación: Tipos e instrucciones I

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

cout

_Hola Mundo!Hola Mundo!

<< "Hola Mundo!" << endl;

endl end lineendl end line

character outputstreamcharacter outputstream

Page 11: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

Pantallaenmodotexto Líneasde80caracteres(textos)

Página 68Fundamentos de la programación: Tipos e instrucciones I

Aplicación en modo textoAplicación en modo texto

80 caracteres80 caracteres

Luis Hernández Yáñez

VentanasdeconsolaoterminalLasaplicacionesenmodotextoseejecutandentrodeventanas:

Windows:ventanasdeconsola(Símbolodelsistema)

Linux:ventanasdeterminal

Página 69Fundamentos de la programación: Tipos e instrucciones I

H o l a M u n d o !

Cursorparpadeante:Dondesecolocaráelsiguientecarácter.Cursorparpadeante:Dondesecolocaráelsiguientecarácter.

......

...

...

Page 12: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

Elinsertor<<Insertatextosenlapantallademodotexto

Representacióntextualdelosdatos

Apartirdelaposicióndelcursor

Linewrap (continúaenlasiguientelíneasinocabe)

Sepuedenencadenar:

cout << ... << ... << ...;

Página 70Fundamentos de la programación: Tipos e instrucciones I

cout << ...; 

Recuerda: las instrucciones terminan en ;

Luis Hernández Yáñez

Conelinsertor<< podemosmostrar... Cadenasdecaracteresliterales

Textosencerradosentrecomillasdobles:"..."

cout << "Hola Mundo!";

NúmerosliteralesConosindecimales,consignoono:123,‐37,3.1416,...

cout << "Pi = " << 3.1416;

Semuestranloscaracteresquerepresentanelnúmero

endl

Página 71Fundamentos de la programación: Tipos e instrucciones I

¡Las comillas no se muestran!

¡Punto decimal, NO coma!

Page 13: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

ElprogramaprincipalLafunciónmain():dondecomienzalaejecución...

#include <iostream>

using namespace std;

int main() // main() es donde empieza la ejecución

{

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

}

Contienelasinstruccionesquehayqueejecutar

Página 72Fundamentos de la programación: Tipos e instrucciones I

Luis Hernández Yáñez

ElprogramaprincipalLafunciónmain():

int main()

{

...return 0;

}

Página 73Fundamentos de la programación: Tipos e instrucciones I

Tipodelafunción(int =entero):TipodevalorquedevuelveTipodelafunción(int =entero):Tipodevalorquedevuelve

NombredelafunciónNombredelafunción

Cuerpodelafunción(bloquedecódigo)Cuerpodelafunción(bloquedecódigo)

return 0; Devuelveelresultado(0)delafunciónDevuelveelresultado(0)delafunción

¡Esunafunción!¡Esunafunción!

Page 14: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

Documentandoelcódigo...

Comentarios(seignoran):

#include <iostream>

using namespace std;

int main()   // main() es donde empieza la ejecución

{

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

...

Hastaelfinaldelalínea: // Comentario de una línea

Devariaslíneas: /* Comentario de variaslíneas seguidas */

Página 74Fundamentos de la programación: Tipos e instrucciones I

Luis Hernández Yáñez

LainfraestructuraCódigoparareutilizar:

#include <iostream>

using namespace std;

int main()   // main() es donde empieza la ejecución

{

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

}

Bibliotecasdefuncionesanuestradisposición

Página 75Fundamentos de la programación: Tipos e instrucciones I

Unadirectiva:empiezapor#Unadirectiva:empiezapor#

Page 15: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

BibliotecasSeincluyenconladirectiva #include:

#include <iostream>

(Utilidadesdeentrada/salidaporconsola)Paramostraroleerdatoshayqueincluirlabibliotecaiostream

EspaciosdenombresEniostream hayespaciosdenombres;¿cuálqueremos?#include <iostream>using namespace std;

Siempreusaremoselespaciodenombresestándar(std)

Muchasbibliotecasnotienenespaciosdenombres

Página 76Fundamentos de la programación: Tipos e instrucciones I

Esunainstrucción:terminaen;Esunainstrucción:terminaen;

Luis Hernández Yáñez

Compilaciónyenlace

Página 77

hola.cpp(código fuente)

hola.obj(código objeto)

Compilador

Códigoobjetodelabibliotecaiostream

hola.exe(ejecutable)

Enlazador

Fundamentos de la programación: Tipos e instrucciones I

Hola Mundo!

CargadorCargador

A menudo en un pasoA menudo en un paso

Page 16: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

Elementosdelprograma

#include <iostream>

using namespace std;

int main()

{

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

return 0;

}

Página 78

Las instrucciones terminan en ;

Fundamentos de la programación: Tipos e instrucciones I

Directiva

Instrucción

Declaración

Instrucción

Instrucción

Biblioteca

Espacio de nombres

Palabras reservadasTipo

Datos literales

Cuerpo de la función

Cabecera de la función

Bloque de código Cadena de caracteres Constante

OperadorOperador

Variable

Número

Coloreado sintáctico:Directivas              TiposPalabras reservadas generalesDatos literales   Comentarios

Coloreado sintáctico:Directivas              TiposPalabras reservadas generalesDatos literales   Comentarios

Luis Hernández Yáñez

UsodeespacioenblancoSeparacióndeelementosporunoomásespaciosenblanco(espacios,tabuladoresysaltosdelínea)

Elcompiladorlosignora

Página 79

#include <iostream>

using namespace std;

int main()

{  

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

return 0;

}

#include <iostream> using namespace std;

int main(){cout<<"Hola Mundo!"<<endl; 

return 0;}

¿Cuálseleemejor?

Fundamentos de la programación: Tipos e instrucciones I

Page 17: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

Página 80Fundamentos de la programación: Tipos e instrucciones I

Luis Hernández Yáñez

ProgramaconE/SporconsolaUnaplantillaparaempezar:

#include <iostream>

using namespace std;

int main()

{

return 0;

}

Página 81Fundamentos de la programación: Tipos e instrucciones I

¡Tucódigoaquí!¡Tucódigoaquí!

Page 18: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

...recitadoenlaconsolaMostrarlostextosconcout <<:

#include <iostream>

using namespace std;

int main()

{

cout << "En un lugar de la Mancha," << endl;

cout << "de cuyo nombre no quiero acordarme," << endl;

cout << "no ha mucho tiempo que vivía un hidalgo de los de lanza en astillero, ..." << endl;

return 0;

}

Página 82Fundamentos de la programación: Tipos e instrucciones I

Luis Hernández Yáñez

IntroduccióndelcódigodelprogramaTerminamoscadalíneadecódigoconunsaltodelínea(↲):

#include <iostream> ↲

using namespace std; ↲

int main() ↲

{ ↲

cout << "En un lugar de la Mancha," << endl; ↲

cout << "de cuyo nombre no quiero acordarme," << endl; ↲

cout << "no ha mucho tiempo que vivía un hidalgo de los de lanza en astillero, ..." << endl; ↲

return 0; ↲

} ↲

Página 83Fundamentos de la programación: Tipos e instrucciones I

Page 19: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

IntroduccióndelcódigodelprogramaNohayquepartirunacadenaliteralentredoslíneas:

cout << "no ha mucho tiempo que vivía un hidalgo de ↲

los de lanza en astillero, ..." << endl; ↲

¡Lacadenanotermina(1ªlínea)!

¡Noseentiendelos (2ªlínea)!

Veamoscómonosmuestraloserroreselcompilador...

Página 84Fundamentos de la programación: Tipos e instrucciones I

Luis Hernández Yáñez

Mantenimientoyreusabilidad Usaespacioenblancoparasepararloselementos:

cout << "En un lugar de la Mancha," << endl;

mejorquecout<<"En un lugar de la Mancha,"<<endl;

Usasangría(indentación)paraelcódigodeunbloque:{

cout << "En un lugar de la Mancha," << endl;...return 0;

}

¡Elestiloimporta!

Página 85Fundamentos de la programación: Tipos e instrucciones I

Tabó

3esp.

Tabó

3esp.

Page 20: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

Página 86Fundamentos de la programación: Tipos e instrucciones I

Luis Hernández Yáñez

Operadoresaritméticos+ Suma‐ Resta* Multiplicación/ División

Operadoresbinariosoperando_izquierdo operador   operando_derecho

Operación Resultado3 + 4 7

2.56 ‐ 3 ‐0.44

143 * 2 286

45.45 / 3 15.15

Página 87Fundamentos de la programación: Tipos e instrucciones I

Page 21: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

Númerosliterales(concretos) Enteros:sinpartedecimal

Signonegativo(opcional)+secuenciadedígitos3   143   ‐12   67321   ‐1234

Reales:conpartedecimal

Signonegativo(opcional)+secuenciadedígitos+puntodecimal+secuenciadedígitos3.1416  357.0  ‐1.333  2345.6789  ‐404.1

Página 88Fundamentos de la programación: Tipos e instrucciones I

Puntodecimal(3.1416),NOcoma(3,1416)

Noseusanpuntosdemillares

Luis Hernández Yáñez

Ejemplo#include <iostream>

using namespace std;

int main()

{

cout << "133 + 1234 = " << 133 + 1234 << endl;

cout << "1234 ‐ 111.5 = " << 1234 ‐ 111.5 << endl;

cout << "34 * 59 = " << 34 * 59 << endl;

cout << "3.4 * 5.93 = " << 3.4 * 5.93 << endl;

cout << "500 / 3 = " << 500 / 3 << endl; // Div. entera

cout << "500.0 / 3 = " << 500.0 / 3 << endl; // Div. real

return 0;

}

Página 89Fundamentos de la programación: Tipos e instrucciones I

cálculos.cppcálculos.cpp

UntextoUntexto UnnúmeroUnnúmero

Page 22: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

Página 90Fundamentos de la programación: Tipos e instrucciones I

DivisiónrealDivisiónreal

DivisiónenteraDivisiónentera

Luis Hernández Yáñez

¿Divisiónenteraodivisiónreal?Ambosoperandosenteros Divisiónentera

Algúnoperandoreal Divisiónreal

División Resultado500 / 3 166

500.0 / 3 166.667

500 / 3.0 166.667

500.0 / 3.0 166.667

Página 91Fundamentos de la programación: Tipos e instrucciones I

Compruebasiemprequeeltipodedivisiónseaelquequieres

Page 23: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

Página 92Fundamentos de la programación: Tipos e instrucciones I

Luis Hernández Yáñez

DatosquesemantienenenmemoriaVariable:datoqueseaccedepormediodeunnombre

Datoliteral:unvalorconcreto

Variable:puedecambiardevalor(variar)

edad = 19; // variable edad y literal 19

Lasvariablesdebenserdeclaradas

¿Quétipodedatoqueremosmantener? Valornuméricosindecimales(entero):tipoint

Valornuméricocondecimales(real):tipodouble

Declaración:tipo nombre;

Página 93Fundamentos de la programación: Tipos e instrucciones I

Page 24: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

Declaracióndevariablesint cantidad;

double precio;

Sereservaespaciosuficiente

LASVARIABLESNOSEINICIALIZAN

Nosedebenusarhastaqueseleshayadadoalgúnvalor

¿Dóndecolocamoslasdeclaraciones?

Siempre,antesdelprimerusoHabitualmentealprincipiodelafunción

Página 94Fundamentos de la programación: Tipos e instrucciones I

Memoria

cantidad ?

precio ?

...

tipo nombre;

Luis Hernández Yáñez

Declaracióndevariables#include <iostream>

using namespace std;

int main()

{

int cantidad;

double precio, total;

return 0;

}

Página 95Fundamentos de la programación: Tipos e instrucciones I

Memoria

cantidad ?

precio ?

total ?

...

Podemosdeclararvariasdeunmismotiposeparandolosnombresconcomas

Page 25: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

Capacidaddelasvariablesint

‐2.147.483.648 ...2.147.483.647‐2147483648 ..2147483647

double

2,23x 10‐308 ...1,79x 10+308 ysusnegativos

[+|‐] 2.23e‐308 ..1.79e+308

Problemasdeprecisión

Página 96Fundamentos de la programación: Tipos e instrucciones I

Notacióncientífica

Luis Hernández Yáñez

Asignacióndevaloresalasvariables(operador=)

variable = expresión;

cantidad = 12; // int

precio = 39.95; // double

total = cantidad * precio; // Asigna 479.4

Concordanciadetipos: cantidad = 12.5;

¡¡¡Alaizquierdadel=debeirsiempreunavariable!!!

Página 97Fundamentos de la programación: Tipos e instrucciones I

Instrucción:terminaen;

cantidad 12

Page 26: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

Página 98Fundamentos de la programación: Tipos e instrucciones I

Luis Hernández Yáñez

ExpresionesSecuenciasdeoperandosyoperadoresoperando operador operando operador operando ...

total = cantidad * precio * 1.18;

Aigualprioridadseevalúandeizquierdaaderecha

Paréntesisparaforzarciertasoperacionestotal = cantidad1 + cantidad2 * precio;

total = (cantidad1 + cantidad2) * precio;

Unosoperadoresseevalúanantesqueotros

Página 99Fundamentos de la programación: Tipos e instrucciones I

ExpresiónExpresión

Page 27: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

Precedenciadelosoperadorescantidad1 = 10;cantidad2 = 2;precio = 40.0;

* y/ seevalúanantesque + y‐

total = cantidad1 + cantidad2 * precio;

* antesque+ 10+2* 40,0 10+ 80,0 90,0

total = (cantidad1 + cantidad2) * precio;

+ antesque* (10+ 2)*40,0 12* 40,0 480,0

Página 100Fundamentos de la programación: Tipos e instrucciones I

Luis Hernández Yáñez

Ejemplodeusodevariablesyexpresiones#include <iostream>using namespace std;

int main(){

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

<< total << endl;

return 0;}

Página 101Fundamentos de la programación: Tipos e instrucciones I

variables.cppvariables.cpp

Page 28: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

Memoria

...

Ejemplodeusodevariables#include <iostream>using namespace std;

int main(){

int cantidad;double precio, total;

Página 102Fundamentos de la programación: Tipos e instrucciones I

cantidad ?

precio ?

total ?

Luis Hernández Yáñez

Ejemplodeusodevariables#include <iostream>using namespace std;

int main(){

int cantidad;double precio, total;cantidad = 12;

Página 103Fundamentos de la programación: Tipos e instrucciones I

Memoria

...

cantidad 12

precio ?

total ?

Page 29: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

Ejemplodeusodevariables#include <iostream>using namespace std;

int main(){

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

Página 104Fundamentos de la programación: Tipos e instrucciones I

Memoria

...

cantidad 12

precio 39.95

total ?

Luis Hernández Yáñez

Ejemplodeusodevariables#include <iostream>using namespace std;

int main(){

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

Página 105Fundamentos de la programación: Tipos e instrucciones I

Memoria

...

cantidad 12

precio 39.95

total 479.4

Page 30: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

Ejemplodeusodevariables#include <iostream>using namespace std;

int main(){

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

<< total << endl;

Página 106Fundamentos de la programación: Tipos e instrucciones I

Memoria

...

cantidad 12

precio 39.95

total 479.4

Luis Hernández Yáñez

Ejemplodeusodevariables#include <iostream>using namespace std;

int main(){

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

<< total << endl;

return 0;}

Página 107Fundamentos de la programación: Tipos e instrucciones I

Page 31: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

Página 108Fundamentos de la programación: Tipos e instrucciones I

Luis Hernández Yáñez

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

Página 109Fundamentos de la programación: Tipos e instrucciones I

cin >> cantidad; 

cin >> cantidad;

character inputstreamcharacter inputstream

Memoria

cantidad ?

...

_

12

1 2 ↲1 2

Page 32: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

Elextractor>>Transformaloscaracteresintroducidosendatos

Cursorparpadeante:lugardelecturadelsiguientecarácterLaentradaterminaconIntro (cursoralasiguientelínea)

¡EldestinodelextractordebeserSIEMPRE unavariable!

Seignoranlosespaciosenblancoiniciales

Página 110Fundamentos de la programación: Tipos e instrucciones I

cin >> variable; 

Luis Hernández Yáñez

Lecturadevaloresenteros(int)Seleendígitoshastaencontraruncarácterquenolosea

12abc↲ 12 abc↲ 12   abc↲ 12↲

Seasignaelvalor12alavariable

ElrestoquedapendienteparalasiguientelecturaRecomendación:Leecadavariableenunalínea 12↲

Lecturadevaloresreales(double)Seleendígitos,elpuntodecimalyotrosdígitos

39.95.5abc↲ 39.95 abc↲ 39.95↲

Seasignaelvalor39,95alavariable;elrestoquedapendienteRecomendación:Leecadavariableenunalínea 39.95↲

Página 111Fundamentos de la programación: Tipos e instrucciones I

Page 33: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

¿Quépasasielusuarioseequivoca?Eldatonoserácorrecto

Aplicaciónprofesional:códigodecomprobaciónyayuda

Aquísupondremosquelosusuariosnoseequivocan

Enocasionesañadiremoscomprobacionessencillas

Página 112Fundamentos de la programación: Tipos e instrucciones I

Paraevitarerrores,leecadadatoenunainstrucciónaparteParaevitarerrores,leecadadatoenunainstrucciónaparte

Luis Hernández Yáñez

¿Quépasasielusuarioseequivoca?int cantidad;double precio, total;cout << "Introduce la cantidad: ";cin >> cantidad;cout << "Introduce el precio: ";cin >> precio;cout << "Cantidad: " << cantidad << endl;cout << "Precio: " << precio << endl;

Página 113Fundamentos de la programación: Tipos e instrucciones I

Nosepuedeleerunentero 0 paracantidad yErrorLalecturadelpreciofalla:precio notomavalor(basura)Nosepuedeleerunentero 0 paracantidad yErrorLalecturadelpreciofalla:precio notomavalor(basura)

¡Amigableconelusuario!¿Quétienequeintroducir?

Page 34: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

¿Quépasasielusuarioseequivoca?

Página 114Fundamentos de la programación: Tipos e instrucciones I

12 paracantidadNosepuedeleerunreal 0 paraprecio yError

12 paracantidadNosepuedeleerunreal 0 paraprecio yError

12 paracantidad.5 0,5 paraprecioLodemásquedapendiente

12 paracantidad.5 0,5 paraprecioLodemásquedapendiente

¡¡¡Lecturacorrecta!!!¡¡¡Lecturacorrecta!!!

Luis Hernández Yáñez

DivisióndedosnúmerosPediralusuariodosnúmerosymostrarleelresultadodedividirelprimeroentreelsegundo

Algoritmo.‐

1. Pedirelnumerador

2. Pedireldenominador

3. Realizarladivisión,guardandoelresultado

4. Mostrarelresultado

Página 115Fundamentos de la programación: Tipos e instrucciones I

Datos / cálculos

Variable denominador (double)

Variable resultado (double)resultado = numerador / denominador

Variable numerador (double)

Page 35: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

ProcesamientoEntrada SalidaDeclaraciones

Entrada‐Proceso‐SalidaMuchosprogramasseajustanaunsencilloesquema:

Página 116Fundamentos de la programación: Tipos e instrucciones I

1. Leernumerador

2. Leerdenominador

3. Calculardivisiónenresultado

4. Mostrarresultado

Luis Hernández Yáñez

DivisióndedosnúmerosPediralusuariodosnúmerosymostrarleelresultadodedividirelprimeroentreelsegundo.

1. Leernumerador

2. Leerdenominador

3. Calculardivisiónenresultado

4. Mostrarresultado

Página 117Fundamentos de la programación: Tipos e instrucciones I

cin >> numerador;cin >> numerador;

cin >> denominador;cin >> denominador;

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

cout << resultado;cout << resultado;

Page 36: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

Divisióndedosnúmeros#include <iostream>

using namespace std;

int main()

{

double numerador, denominador, resultado;

cout << "Numerador: ";

cin >> numerador;

cout << "Denominador: ";

cin >> denominador;

resultado = numerador / denominador;

cout << "Resultado: " << resultado << endl;

return 0;

}

Salida

Procesamiento

Entrada

Declaraciones

Página 118Fundamentos de la programación: Tipos e instrucciones I

división.cppdivisión.cpp

_

_Resultado: _Resultado: _64.564.5

Numerador: _Numerador: _

Denominador: _Denominador: _

129129

22

_

Luis Hernández Yáñez

Página 119Fundamentos de la programación: Tipos e instrucciones I

Page 37: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

ProblemaDadaslabaseylaalturadeuntriángulo,mostrarsuárea

Mostrarenlapantallauntextoquepidalabasedeltriángulo.Elusuariointroduciráelvalorconelteclado.Mostrarenlapantallauntextoquepidalaalturadeltriángulo.Elusuariointroduciráelvalorconelteclado.Secalcularáeláreadeltriánguloysemostraráenlapantalla.

Página 120Fundamentos de la programación: Tipos e instrucciones I

RefinamientoRefinamiento

Luis Hernández Yáñez

Objetos:Datosquemanejaelprograma

Mostrarenlapantallauntextoquepidalabasedeltriángulo.Elusuariointroducirálabaseconelteclado.Mostrarenlapantallauntextoquepidalaalturadeltriángulo.Elusuariointroducirálaalturaconelteclado.Secalcularáeláreadeltriánguloysemostraráenlapantalla.

Página 121Fundamentos de la programación: Tipos e instrucciones I

coutcout cadenaliteralcadenaliteral

variablevariable cincin

cadenaliteralcadenaliteral variablevariable

variablevariable

Page 38: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

Datosquemanejaelprograma:tipos

Página 122Fundamentos de la programación: Tipos e instrucciones I

Objeto Tipo ¿Varía? Nombre

Pantalla Variable cout

"Introduzca la base del triángulo: " Constante ninguno

Base del triángulo double Variable base

Teclado Variable cin

"Introduzca la altura del triángulo: " Constante ninguno

Altura del triángulo double Variable altura

Área del triángulo double Variable area

Luis Hernández Yáñez

Operaciones(acciones)

Mostrarenlapantallauntextoquepidalabasedeltriángulo.Elusuariointroducirálabaseconelteclado. Mostrarenlapantallauntextoquepidalaalturadeltriángulo.Elusuariointroducirálaalturaconelteclado.Secalcularáeláreadeltriánguloysemostraráenlapantalla.

Página 123Fundamentos de la programación: Tipos e instrucciones I

cout << ...cout << ... cin >> ...cin >> ...

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

Page 39: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

Secuenciadeaccionesquehaderealizarelprogramaparaconseguirresolverelproblema

1. Mostrarenlapantallaeltextoquepidalabasedeltriángulo

2. Leerdeltecladoelvalorparalabasedeltriángulo

3. Mostrarenlapantallaeltextoquepidalaaltura

4. Leerdeltecladoelvalorparalaalturadeltriángulo

5. Calculareláreadeltriángulo

6. Mostrareláreadeltriángulo

Página 124Fundamentos de la programación: Tipos e instrucciones I

Luis Hernández Yáñez

#include <iostream>

using namespace std;int main()

{

return 0;

}

Página 125Fundamentos de la programación: Tipos e instrucciones I

AlgoritmotraducidoacódigoenC++

Declaraciones1. Mostrarenlapantallaeltextoquepidalabasedeltriángulo

2. Leerdeltecladoelvalorparalabasedeltriángulo

3. Mostrarenlapantallaeltextoquepidalaalturadeltriángulo

4. Leerdeltecladoelvalorparalaalturadeltriángulo

5. Calculareláreadeltriángulo

6. Mostrareláreadeltriángulo

Page 40: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

Elprograma:implementación#include <iostream>using namespace std;

int main(){

double base, altura, area;                // Declaracionescout << "Introduzca la base del triángulo: ";         // 1cin >> base;                                          // 2cout << "Introduzca la altura del triángulo: ";       // 3cin >> altura;                                        // 4area = base * altura / 2;                             // 5cout << "El área de un triángulo de base " << base // 6

<< " y altura " << altura << " es: " << area << endl;

return 0;}

Página 126Fundamentos de la programación: Tipos e instrucciones I

triángulo.cpptriángulo.cpp

Recuerda:lasinstruccionesterminanen;Recuerda:lasinstruccionesterminanen;

¿triβngulo?

Luis Hernández Yáñez

Página 127Fundamentos de la programación: Tipos e instrucciones I

Page 41: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

Variabilidaddelosdatos

Página 128Fundamentos de la programación: Tipos e instrucciones I

DatosDatos

ConstantesConstantes

LiteralesLiterales

ConnombreConnombre

VariablesVariables

"Introduzca la base del triángulo: "3.141592653589

base, altura, area

Pi = 3.141592653589

IdentificadoresIdentificadores

Luis Hernández Yáñez

Página 129Fundamentos de la programación: Tipos e instrucciones I

Page 42: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

Paravariablesyconstantesconnombre

— Nombre deundato(paraaccederlo/modificarlo)

— Debenserdescriptivos

Sintaxis:

Página 130Fundamentos de la programación: Tipos e instrucciones I

Almenos32caracteressignificativosAlmenos32caracteressignificativos

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

a..z, A..Z, _

¡Nieñesnivocalesacentuadas!¡Nieñesnivocalesacentuadas!

palabrasreservadas

cantidad  prrecio total  base  altura  area numeradorcantidad  prrecio total  base  altura  area numerador

Luis Hernández Yáñez

PalabrasreservadasdellenguajeC++

asm auto  bool  break  case  catch  char  class  const  

const_cast continue  default  delete  do  double  

dynamic_cast else  enum  explicit  extern  false  

float  for  friend  goto if  inline  int  long  

mutable  namespace  new  operator  private  protected  

public  register  reinterpret_cast return  short  

signed  sizeof  static  static_cast struct  switch  

template  this  throw  true  try  typedef  typeid

typename union  unsigned  using  virtual  void  

volatile  while

Página 131Fundamentos de la programación: Tipos e instrucciones I

Page 43: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

¿Quéidentificadoressonválidos?

balance interesAnual

_base_imponible años

EDAD12 salario_1_mes

__edad cálculoNómina

valor%100 AlgunValor

100caracteres valor?

_12_meses ____valor

Página 132Fundamentos de la programación: Tipos e instrucciones I

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

a..z, A..Z, _Luis Hernández Yáñez

Página 133Fundamentos de la programación: Tipos e instrucciones I

Page 44: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

TiposCadadato,deuntipoconcreto

Cadatipoestablece:

— Elconjunto(intervalo)devaloresválidos

— Elconjuntodeoperacionesquesepuedenrealizar

Expresionescondatosdedistintostipos(compatibles):

Transformaciónautomáticadetipos(promocióndetipo)

Página 134Fundamentos de la programación: Tipos e instrucciones I

125'a'

true3.14159

"Hola"

AnexodelTema2:detallestécnicosAnexodelTema2:detallestécnicos

Luis Hernández Yáñez

intNúmerosenteros(sindecimales) 1363,‐12,49

floatNúmerosreales 12.45,‐3.1932,1.16E+02

doubleNúmerosreales(mayoresintervaloyprecisión)charCaracteres 'a' ,'{','\t'

boolValoreslógicos(verdadero/falso) true,false

stringCadenasdecaracteres(bibliotecastring) "Hola Mundo!"

voidNada,ausenciadetipo,ausenciadedato(funciones)

Página 135Fundamentos de la programación: Tipos e instrucciones I

Page 45: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

Intervalodevalores:Juegodecaracteres(ASCII)Literales:'a'   '%'   '\t'

Constantesdebarrainvertida(osecuenciasdeescape):

Caracteresdecontrol'\t' =tabulador'\n' =saltodelínea…

Página 136Fundamentos de la programación: Tipos e instrucciones I

ASCII(códigos32..127)ASCII(códigos32..127)

ISO‐8859‐1(ASCIIextendido:códigos128..255)

ISO‐8859‐1(ASCIIextendido:códigos128..255)

1byte

CaracteresLuis Hernández Yáñez

Sólodosvaloresposibles:

— Verdadero(true)

— Falso(false)

Literales:true   false

Cualquiernúmerodistintode0 esequivalenteatrue

El0 esequivalenteafalse

Página 137Fundamentos de la programación: Tipos e instrucciones I

Valoreslógicos

Page 46: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

C++distingueentremayúsculasyminúsculas

int:palabrareservadadeC++paradeclarardatosenteros

Int,INT oinT nosonpalabrasreservadasdeC++

true:palabrareservadadeC++paraelvalorverdadero

True oTRUE nosonpalabrasreservadasdeC++

Página 138Fundamentos de la programación: Tipos e instrucciones I

Luis Hernández Yáñez

"Hola"  "Introduce el numerador: "  "X142FG5TX?%A"

Secuenciasdecaracteres

Programasconvariablesdetipostring:

#include <string>using namespace std;

Página 139Fundamentos de la programación: Tipos e instrucciones I

" "

Lascomillastipográficas(apertura/cierre)“…” NOsirvenAsegúratedeutilizarcomillasrectas:"…"

char

Cadenasdecaracteres

Page 47: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

Página 140Fundamentos de la programación: Tipos e instrucciones I

tipos.cpptipos.cpp

#include <iostream>#include <string>using namespace std; // Un solo using... para ambas bibliotecas

int main(){

int entero = 3; // Podemos asignar (inicializar) al declarardouble real = 2.153;char caracter = 'a';bool cierto = true;string cadena = "Hola";cout << "Entero: " << entero << endl;cout << "Real: " << real << endl;cout << "Carácter: " << caracter << endl;cout << "Booleano: " << cierto << endl;cout << "Cadena: " << cadena << endl;

return 0;}

¿Cuántosnúmeroshayentotalenelprograma?¿Ycaracteres?¿Ycadenas?¿Ybooleanos?

¿Cuántosnúmeroshayentotalenelprograma?¿Ycaracteres?¿Ycadenas?¿Ybooleanos?

Luis Hernández Yáñez

— signed /unsigned :consigno(pordefecto)/sinsigno

— short /long :menor/mayorintervalodevalores

Página 141Fundamentos de la programación: Tipos e instrucciones I

Tipo Intervalo

int ‐2147483648 ..2147483647

unsigned int 0 ..4294967295

short int ‐32768 ..32768

unsigned short int 0 ..65535

long int ‐2147483648 ..2147483647

unsigned long int 0 ..4294967295

double +|‐ 2.23e‐308 ..1.79e+308

long double +|‐ 3.37E‐4932 ..1.18E+4932

Page 48: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

Página 142Fundamentos de la programación: Tipos e instrucciones I

Luis Hernández Yáñez

[modificadores] tipo lista_de_variables;Opcional

lista_de_variables

int i, j, l;short int unidades;unsigned short int monedas;double balance, beneficio, perdida;

Página 143Fundamentos de la programación: Tipos e instrucciones I

Identificador

Programaciónconbuenestilo:IdentificadoresdescriptivosEspaciotrascadacomaNombresdelasvariablesenminúsculas(Variaspalabras:capitalizacadainicial:interesPorMes)

,

Page 49: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

Sereservamemoriasuficienteparacadatipodedato

int inicio;

short int unidades;

double balance;

Página 144Fundamentos de la programación: Tipos e instrucciones I

Memoria

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

. . .

inicio

unidades

balance

Luis Hernández Yáñez

¡EnC++lasvariablesnoseinicializanautomáticamente!

¡Unavariabledebeserhabersidoinicializadaantesdeseraccedida!

¿Cómoseinicializaunavariable?— Alleersuvalor(cin >>)— Alasignarleunvalor(instruccióndeasignación)

— Aldeclararla

Inicializaciónenlapropiadeclaración:

Página 145Fundamentos de la programación: Tipos e instrucciones I

Expresión:valorcompatibleExpresión:valorcompatibleIdentificador Expresión…… =

En particular, una expresión puede ser un literal

int i = 0, j, l = 26;

short int unidades = 100;

Page 50: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

Obtencióndelvalordeunavariable Nombredelavariableenunaexpresión

cout << balance;

cout << interesPorMes * meses / 100;

Modificacióndelvalordeunavariable Nombredelavariablealaizquierdadel=

balance = 1214;

porcentaje = valor / 30;

Lasvariableshandehabersidopreviamentedeclaradas

Página 146Fundamentos de la programación: Tipos e instrucciones I

Luis Hernández Yáñez

Página 147Fundamentos de la programación: Tipos e instrucciones I

Page 51: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

Eloperador=

Alaizquierda,SIEMPREunavariable

int i, j = 2;

i = 23 + j * 5; // i toma el valor 33

;Expresión=

Página 148Fundamentos de la programación: Tipos e instrucciones I

Variable

Luis Hernández Yáñez

Erroresint a, b, c;

5 = a;      

// ERROR: un literal no puede recibir un valor

a + 23 = 5; 

// ERROR: no puede haber una expresión a la izda.

b = "abc";  

// ERROR: un entero no puede guardar una cadena

c = 23 5;  

// ERROR: expresión no válida (falta operador)

Página 149Fundamentos de la programación: Tipos e instrucciones I

Page 52: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

int i, j = 2;

i = 23 + j * 5;

Página 150Fundamentos de la programación: Tipos e instrucciones I

Memoria

01

02

03

04

05

06

07

08

09

10

. . .

i

j2

?

Memoria

01

02

03

04

05

06

07

08

09

10

. . .

i

j2

3323 + 2 * 523 + 2 * 5

Luis Hernández Yáñez

Necesitamosunavariableauxiliar

double a = 3.45, b = 127.5, aux;

Página 151Fundamentos de la programación: Tipos e instrucciones I

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;

Page 53: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

Página 152Fundamentos de la programación: Tipos e instrucciones I

Luis Hernández Yáñez

OperacionessobrevaloresdelostiposCadatipodeterminalasoperacionesposibles

Tiposdedatosnuméricos(int,float ydouble):

— Asignación(=)

— Operadoresaritméticos

— Operadoresrelacionales(menor,mayor,igual,...)Tipodedatosbool:

— Asignación(=)

— Operadoreslógicos(Y,O,NO)Tiposdedatoschar ystring:

— Asignación(=)

— Operadoresrelacionales(menor,mayor,igual,...)

Página 153Fundamentos de la programación: Tipos e instrucciones I

Page 54: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

Operadoresparatiposdedatosnuméricos

Página 154Fundamentos de la programación: Tipos e instrucciones I

Operador Operandos Posición int float /double

‐ 1 (monario) Prefijo Cambio de signo

+ 2 (binario) Infijo Suma

‐ 2 (binario) Infijo Resta

* 2 (binario) Infijo Producto

/ 2 (binario) Infijo Div. entera División real

% 2 (binario) Infijo Módulo No aplicable

++ 1 (monario) Prefijo / postfijo Incremento

‐‐ 1 (monario) Prefijo / postfijo Decremento

Luis Hernández Yáñez

OperadoresmonariosyoperadoresbinariosOperadoresmonarios (unarios)— Cambiodesigno(‐):

Delantedevariable,constanteoexpresiónentreparéntesis‐saldo     ‐RATIO     ‐(3 * a ‐ b)

— Incremento/decremento(sólovariables)(prefijo/postfijo):++interes ‐‐meses     j++ // 1 más ó 1 menos

Operadoresbinarios

— OperandoizquierdooperadoroperandoderechoOperandos:literales,constantes,variablesoexpresiones2 + 3 a * RATIO     ‐a + b

(a % b) * (c / d)

Página 155Fundamentos de la programación: Tipos e instrucciones I

Page 55: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

¿Divisiónenteraodivisiónreal?

Ambosoperandosenteros:divisiónenteraint i = 23, j = 2;

cout << i / j; // Muestra 11

Algúnoperandoreal:divisiónrealint i = 23;

double j = 2;

cout << i / j; // Muestra 11.5

Página 156Fundamentos de la programación: Tipos e instrucciones I

/

Luis Hernández Yáñez

Módulo(restodeladivisiónentera)

Ambosoperandoshandeserenterosint i = 123, j = 5;

cout << i % j; // Muestra 3

Divisiónentera:Noseobtienendecimales Quedaunresto

Página 157Fundamentos de la programación: Tipos e instrucciones I

%

123123 55

242433

123 % 5123 % 5

Page 56: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

OperadoresdeincrementoydecrementoIncremento/decrementodelavariable numéricaenunaunidad

Prefijo:Antesdeaccederint i = 10, j;

j = ++i; // Incrementa antes de copiar

cout << i << " ‐ " << j; // Muestra 11 ‐ 11

Postfijo:Despuésdeaccederint i = 10, j;

j = i++; // Copia y después incrementa

cout << i << " ‐ " << j; // Muestra 11 ‐ 10

Página 158Fundamentos de la programación: Tipos e instrucciones I

++/‐‐

Nomezcles++ y‐‐ conotrosoperadoresNomezcles++ y‐‐ conotrosoperadores

i=i+1;j=i;i=i+1;j=i;

j=i;i=i+1;j=i;i=i+1;

Luis Hernández Yáñez

Página 159Fundamentos de la programación: Tipos e instrucciones I

operadores.cppoperadores.cpp#include <iostream>using namespace std;

int main() {int entero1 = 15, entero2 = 4;double real1 = 15.0, real2 = 4.0;cout << "Operaciones entre los números 15 y 4:" << endl;cout << "División entera (/): " << entero1 / entero2 << endl;cout << "Resto de la división (%): " << entero1 % entero2 << endl;cout << "División real (/): " << real1 / real2 << endl;cout << "Num = " << real1 << endl;real1 = ‐real1;cout << "Cambia de signo (‐): " << real1 << endl;real1 = ‐real1;cout << "Vuelve a cambiar (‐): " << real1 << endl;cout << "Se incrementa antes (++ prefijo): " << ++real1 << endl;cout << "Se muestra antes de incrementar (posfijo ++): " 

<< real1++ << endl;cout << "Ya incrementado: " << real1 << endl;return 0;

}

Page 57: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

Página 160Fundamentos de la programación: Tipos e instrucciones I

Luis Hernández Yáñez

¿Enquéordenseevalúanlosoperadores?

3 + 5 * 2 / 2 ‐ 1

¿Deizquierdaaderecha?

¿Dederechaaizquierda?

¿Unosantesqueotros?

Precedenciadelosoperadores(prioridad):

Seevalúananteslosdemayorprecedencia

¿Ysitienenigualprioridad?

Normalmente,deizquierdaaderecha

Paréntesis:fuerzanaevaluarsusubexpresión

Página 161Fundamentos de la programación: Tipos e instrucciones I

Page 58: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

Página 162Fundamentos de la programación: Tipos e instrucciones I

Precedencia Operadores

Mayorprioridad ++ ‐‐ (postfijos)

++ ‐‐ (prefijos)

‐ (cambiodesigno)

* / %

Menorprioridad + ‐

3 + 5 * 2 / 2 ‐ 1

Mismaprecedencia:Izquierdaantes

Mismaprecedencia:Izquierdaantes

Mismaprecedencia:Izquierdaantes

Mismaprecedencia:Izquierdaantes

MayorprecedenciaMayor

precedencia

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

Luis Hernández Yáñez

Página 163Fundamentos de la programación: Tipos e instrucciones I

Primero,losparéntesis...Primero,losparéntesis...((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‐/ antesque‐

PonespacioantesydespuésdecadaoperadorbinarioPonespacioantesydespuésdecadaoperadorbinario

Page 59: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

#include <iostream>

using namespace std;

int main()

{

double x, f;

cout << "Introduce el valor de X: ";

cin >> x;

f = 3 * x * x / 5 + 6 * x / 7 ‐ 3;

cout << "f(x) = " << f << endl;

return 0;

}

Página 164Fundamentos de la programación: Tipos e instrucciones I

fórmula.cppfórmula.cpp

Usaparéntesisparamejorarlalegibilidad:f = (3 * x * x / 5) + (6 * x / 7) ‐ 3;Usaparéntesisparamejorarlalegibilidad:f = (3 * x * x / 5) + (6 * x / 7) ‐ 3;

Luis Hernández Yáñez

variable = variable operador op_derecho;

variable operador= op_derecho;

Asignación Abreviatura

a = a + 12; a += 12;

a = a * 3; a *= 3;

a = a ‐ 5; a ‐= 5;

a = a / 37; a /= 37;

a = a % b; a %= b;

Página 165Fundamentos de la programación: Tipos e instrucciones I

Igualprecedenciaquelaasignación

Demomento,mejorevitarlas

Igualprecedenciaquelaasignación

Demomento,mejorevitarlas

LamismaLamisma

Page 60: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

¿Valorsiguientealmáximo?Valormayordelmáximo(omenordelmínimo)deltipo

short int i = 32767; // Valor máximo para short int

i++; // 32768 no cabe en un short int

cout << i; // Muestra ‐32768

Bitdesigno0=positivo1=negativo

Bitdesigno0=positivo1=negativo

Página 166Fundamentos de la programación: Tipos e instrucciones I

0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1++

3276732767

‐32768‐32768

+ 1+ 1

Luis Hernández Yáñez

Página 167Fundamentos de la programación: Tipos e instrucciones I

Page 61: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

Declaracióndeconstantes Modificadordeaccesoconst

Variablesinicializadasalasquenodejamosvariar

Página 168Fundamentos de la programación: Tipos e instrucciones I

Declaración de variable con inicializador

Programaciónconbuenestilo:Ponenmayúsculalaprimeraletradeunaconstanteotodosunombre

Laconstantenopodrávolveraapareceralaizquierdadeun=Laconstantenopodrávolveraapareceralaizquierdadeun=

constconst

const short int Meses = 12;

const double Pi = 3.141592,

RATIO = 2.179 * Pi;

Luis Hernández Yáñez

Aumentanlalegibilidaddelcódigo

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

Facilitanlamodificacióndelcódigodouble compra1 = bruto1 * 18 / 100;double compra2 = bruto2 * 18 / 100;double total = compra1 + compra2;cout << total << " (IVA: " << 18 << "%)" << endl;

const int IVA = 18;double compra1 = bruto1 * IVA / 100;double compra2 = bruto2 * IVA / 100;double total = compra1 + compra2;cout << total << " (IVA: " << IVA << "%)" << endl;

Página 169Fundamentos de la programación: Tipos e instrucciones I

¿CambiodelIVAal21%?¿CambiodelIVAal21%?

3cambios3cambios3cambios

1cambio1cambio1cambio

Page 62: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

Página 170Fundamentos de la programación: Tipos e instrucciones I

constantes.cppconstantes.cpp

#include <iostream>using namespace std;

int main() {const double Pi = 3.141592;double radio = 12.2, circunferencia;circunferencia = 2 * Pi * radio;cout << "Circunferencia de un círculo de radio " 

<< radio << ": " << circunferencia << endl;const double Euler = 2.718281828459; // Número ecout << "Número e al cuadrado: " << Euler * Euler << endl;const int IVA = 21;int cantidad = 12;double precio = 39.95, neto, porIVA, total;neto = cantidad * precio;porIVA = neto * IVA / 100;total = neto + porIVA;cout << "Total compra: " << total << endl;return 0;

}

Luis Hernández Yáñez

Página 171Fundamentos de la programación: Tipos e instrucciones I

Page 63: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

Página 172Fundamentos de la programación: Tipos e instrucciones I

abs(x) Valorabsolutodex

pow(x, y) xelevadoay

sqrt(x) Raízcuadradadex

ceil(x) Menorenteroque esmayoroigualquex

floor(x) Mayorenteroqueesmenoroigualquex

exp(x) ex

log(x) Ln x(logaritmonaturaldex)

log10(x) Logaritmoenbase10 dex

sin(x) Senodex

cos(x) Coseno dex

tan(x) Tangentedex

round(x) Redondeoalenteromáspróximo

trunc(x) Pérdidadelapartedecimal(entero)

#include <cmath>

Algunas...Algunas...

Luis Hernández Yáñez

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

int main() {double x, y, f;cout << "Valor de X: ";cin >> x;cout << "Valor de Y: ";cin >> y;f = 2 * pow(x, 5) + sqrt(pow(x, 3) / pow(y, 2))

/ abs(x * y) ‐ cos(y);cout << "f(x, y) = " << f << endl;return 0;

}

Página 173Fundamentos de la programación: Tipos e instrucciones I

Ponunespaciodetrásdecadacomaenlaslistasdeargumentos

mates.cppmates.cpp

pow() conargumentoentero:

Usaelmoldedouble():pow(double(i), 5)

pow() conargumentoentero:

Usaelmoldedouble():pow(double(i), 5)

Page 64: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

Página 174Fundamentos de la programación: Tipos e instrucciones I

Luis Hernández Yáñez

Asignación,++/‐‐ yoperadoresrelacionales

Funcionesparacaracteres (bibliotecacctype)isalnum(c) true sic esunaletraoundígito

isalpha(c) true sic esunaletra

isdigit(c) true sic esundígito

islower(c) true sic esunaletraminúscula

isupper(c) true sic esunaletramayúscula

toupper(c) devuelvelamayúsculadec

tolower(c) devuelvelaminúsculadec

Página 175Fundamentos de la programación: Tipos e instrucciones I

char

false encasocontrario

Page 65: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

...#include <cctype>

int main() {char caracter1 = 'A', caracter2 = '1', caracter3 = '&';cout << "Carácter 1 (" << caracter1 << ").‐" << endl;cout << "Alfanumérico? " << isalnum(caracter1) << endl;cout << "Alfabético? " << isalpha(caracter1) << endl;cout << "Dígito? " << isdigit(caracter1) << endl;cout << "Mayúscula? " << isupper(caracter1) << endl;caracter1 = tolower(caracter1);cout << "En minúscula: " << caracter1 << endl;cout << "Carácter 2 (" << caracter2 << ").‐" << endl;cout << "Alfabético? " << isalpha(caracter2) << endl;cout << "Dígito? " << isdigit(caracter2) << endl;cout << "Carácter 3 (" << caracter3 << ").‐" << endl;cout << "Alfanumérico? " << isalnum(caracter3) << endl;cout << "Alfabético? " << isalpha(caracter3) << endl;cout << "Dígito? " << isdigit(caracter3) << endl;return 0;

}

Página 176Fundamentos de la programación: Tipos e instrucciones I

caracteres.cppcaracteres.cpp

1 true /0 false1 true /0 false

Luis Hernández Yáñez

Página 177Fundamentos de la programación: Tipos e instrucciones I

Page 66: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

OperadoresrelacionalesComparaciones(condiciones)

Condiciónsimple::=ExpresiónOperador_relacional Expresión

Concordanciadetipoentrelasexpresiones

Resultado:bool (true ofalse)

Página 178Fundamentos de la programación: Tipos e instrucciones I

< menorque

<= menoroigualque

> mayorque

>= mayoroigualque

== igualque

!= distintode

Operadores (prioridad)

...

* / %

+ ‐

< <= > >=

== !=

= += ‐= *= /= %=

Luis Hernández Yáñez

Menorprioridadquelosoperadoresaditivosymultiplicativos

bool resultado;

int a = 2, b = 3, c = 4;

resultado = a < 5;              // 2 < 5  true

resultado = a * b + c >= 12;    // 10 >= 12  false

resultado = a * (b + c) >= 12;  // 14 >= 12  true

resultado = a != b;             // 2 != 3  true

resultado = a * b > c + 5;      // 6 > 9  false

resultado = a + b == c + 1;     // 5 == 5  true

Página 179Fundamentos de la programación: Tipos e instrucciones I

Noconfundaseloperadordeigualdad(==)coneloperadordeasignación(=)Noconfundaseloperadordeigualdad(==)coneloperadordeasignación(=)

Page 67: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

Página 180Fundamentos de la programación: Tipos e instrucciones I

Luis Hernández Yáñez

Página 181Fundamentos de la programación: Tipos e instrucciones I

Selección:bifurcacióncondicional

truetrue

códigoT

falsefalse

códigoF

if (condición) {códigoT

}

else {códigoF

}

CondiciónCondición

int num;cout << "Número: ";cin >> num;if (num % 2 == 0) {

cout << num << " es par";}else {

cout << num << " es impar";}

Opcional: puede no haber elseOpcional: puede no haber else

Page 68: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

Página 182Fundamentos de la programación: Tipos e instrucciones I

#include <iostream>using namespace std;

int main() {int op1 = 13, op2 = 4;int opcion;cout << "1 ‐ Sumar" << endl;cout << "2 ‐ Restar" << endl;cout << "Opción: ";cin >> opcion;if (opcion == 1) {

cout << op1 + op2 << endl;}else {

cout << op1 ‐ op2 << endl;}return 0;

}

selección.cppselección.cppLuis Hernández Yáñez

Página 183Fundamentos de la programación: Tipos e instrucciones I

Page 69: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

{intrucción1intrucción2...intrucciónN

}

{intrucción1intrucción2...intrucciónN

}

Página 184Fundamentos de la programación: Tipos e instrucciones I

AgrupacióndeinstruccionesGrupodeinstruccionesaejecutarenunaramadelif

Tabó

3esp.

Tabó

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

cout << "Positivo";total = total + num;

}cout << endl;

Ámbitolocal(declaracioneslocales)Ámbitolocal(declaracioneslocales)

}instrucción{

Luis Hernández Yáñez

Página 185Fundamentos de la programación: Tipos e instrucciones I

Posicióndelasllaves:cuestióndeestiloif (num > 0) if (num > 0) {{ cout << "Positivo";

cout << "Positivo"; total = total + num;total = total + num; }

} cout << endl;cout << endl;

Nonecesitamoslasllavessisólohayunainstrucciónif (num > 0) { if (num > 0)

cout << "Positivo"; cout << "Positivo";}

Usaremossiemprellavesporsimplicidad...

Evitaponerelif ylainstrucciónobjetivoenlamismalínea:if (num > 0) cout << "Positivo";

Page 70: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

Página 186Fundamentos de la programación: Tipos e instrucciones I

Luis Hernández Yáñez

Página 187Fundamentos de la programación: Tipos e instrucciones I

Repeticiónoiteracióncondicional

while (condición) {cuerpo

}Cuerpo

truetrue falsefalse

Bloquedecódigo

Silacondiciónesfalse alempezar,noseejecutaelcuerponingunavezSilacondiciónesfalse alempezar,noseejecutaelcuerponingunavez

cuerpo)condición(while

Condición

Page 71: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

Página 188Fundamentos de la programación: Tipos e instrucciones I

#include <iostream>using namespace std;

int main() {int i = 1, n = 0, suma = 0;while (n <= 0) { // Sólo n positivo

cout << "¿Cuántos números quieres sumar? ";cin >> n;

}while (i <= n) {

suma = suma + i;i++;

}cout << "Sumatorio de i (1 a " << n << ") = " 

<< suma << endl;return 0;

}

serie.cppserie.cppLuis Hernández Yáñez

falsefalse

Iteracióncondicional

Página 189Fundamentos de la programación: Tipos e instrucciones I

while (i <= n) {suma = suma + i;i++;

}n 5

i 1

suma 0

suma += i;i++;

truetrue

5

2

1

5

3

3

5

4

6

5

5

10

5

6

15i <= n

Page 72: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

Página 190Fundamentos de la programación: Tipos e instrucciones I

Luis Hernández Yáñez

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

Flujosdetexto(streams)ConectanlaejecucióndelprogramaconlosdispositivosdeE/S

SonsecuenciasdecaracteresEntradaporteclado:flujodeentradacin (tipoistream)

Salidaporpantalla:flujodesalidacout (tipoostream)

Página 191Fundamentos de la programación: Tipos e instrucciones I

Programa

cincin coutcout

Bibliotecaiostream conespaciodenombresstdBibliotecaiostream conespaciodenombresstd

Flujo de entrada Variable>>

Flujo de salida Expresión<<

ExtractorExtractor

InsertorInsertor

#include <iostream>using namespace std;

Page 73: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

Saltalosespaciosenblanco(espacios,tabuladoresosaltosdelínea)

— charSeleeuncarácterenlavariable

— intSeleendígitosysetransformanenelvaloraasignar

— float/double:Seleendígitos(quizáelpuntoymásdígitos)yseasignaelvalor

— bool:Siselee1,seasignatrue;concualquierotrovalorseasignafalse

Página 192Fundamentos de la programación: Tipos e instrucciones I

Variablecin >>

SeamigableconelusuarioLeecadadatoenunalíneaSeamigableconelusuarioLeecadadatoenunalínea

cout << "Introduce tu edad: ";cin >> edad;

Luis Hernández Yáñez

cin >> cadena terminaconelprimerespacioenblanco

cin.sync() descartalaentradapendiente

Página 193Fundamentos de la programación: Tipos e instrucciones I

¿Cómoleervariaspalabras?Siguientepágina...

¿Cómoleervariaspalabras?Siguientepágina...

apellidos recibe"Antonio"apellidos recibe"Antonio"

string nombre, apellidos;cout << "Nombre: ";cin >> nombre;cout << "Apellidos: ";cin >> apellidos;cout << "Nombre completo: "

<< nombre << " "<< apellidos << endl;

string nombre, apellidos;cout << "Nombre: ";cin >> nombre;cin.sync();cout << "Apellidos: ";cin >> apellidos;cout << ...

#include <string>using namespace std;

Page 74: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

Página 194Fundamentos de la programación: Tipos e instrucciones I

LecturasinsaltarlosespaciosenblancoinicialesLlamadaafuncionesconeloperadorpunto(.):

Eloperadorpuntopermitellamaraunafunciónsobreunavariablevariable.función(argumentos)

Lecturadeuncaráctersinsaltarespaciosenblanco:cin.get(c); // Lee el siguiente carácter

Lecturadecadenassinsaltarlosespaciosenblanco:getline(cin, cad);

Leetodoloquehayahastaelfinaldelalínea(Intro)

Recuerda:Espaciosenblanco sonespacios,tabuladores,saltosdelínea,...

Luis Hernández Yáñez

Representacióntextualdelosdatosint meses = 7;cout << "Total: " << 123.45 << endl << " Meses: " << meses;

Elvalordouble 123.45 seguardaenmemoriaenbinario

Surepresentacióntextuales:'1' '2' '3' '.' '4' '5'

Página 195Fundamentos de la programación: Tipos e instrucciones I

Expresión

Labibliotecaiostreamdefinelaconstanteendlcomounsaltodelínea

Labibliotecaiostreamdefinelaconstanteendlcomounsaltodelínea

cout <<

d 123.45

5 4 . 3 2 1

¡Unnúmeroreal!¡Unnúmeroreal!

¡Untexto!(secuenciadecaracteres)

¡Untexto!(secuenciadecaracteres)

double d = 123.45;

cout << d;

Page 75: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

int meses = 7;

cout << "Total: " << 123.45 << endl << " Meses: " << meses;

Página 196Fundamentos de la programación: Tipos e instrucciones I

T o t a l : 1 2 3 . 4 5 M e s e s : 7 Programa

coutcout

cout       << 123.45 << endl << " Meses: " << meses;

cout        << endl << " Meses: " << meses;

cout        << " Meses: " << meses;

cout           << meses;Total: 123.45Meses: 7

Expresióncout <<Luis Hernández Yáñez

Constantesyfuncionesaenviaracout paraajustarelformatodesalida

Página 197Fundamentos de la programación: Tipos e instrucciones I

Biblioteca Constante/función Propósito

iostreamshowpoint /noshowpoint

Mostraronoelpuntodecimalpararealessindecimales(34.0)

fixed Notacióndepuntofijo(reales)(123.5)

scientific Notacióncientífica (reales)(1.235E+2)

boolalpha Valoresbool comotrue /false

left / right Ajustaralaizquierda/derecha(pordefecto)

iomanip setw(anchura)* Nºdecaracteres(anchura)paraeldato

setprecision(p)Precisión:Nºdedígitos(entotal)Confixed oscientific,nºdedecimales

*setw() sóloafectaalsiguientedatoqueseescriba,mientrasquelosotrosafectanatodos

*setw() sóloafectaalsiguientedatoqueseescriba,mientrasquelosotrosafectanatodos

#include <iomanip>

Page 76: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

bool fin = false;

cout << fin << "‐>" << boolalpha << fin << endl;

double d = 123.45;

char c = 'x';

int i = 62;

cout << d << c << i << endl;

cout << "|" << setw(8) << d << "|" << endl;

cout << "|" << left << setw(8) << d << "|" << endl;

cout << "|" << setw(4) << c << "|" << endl;

cout << "|" << right << setw(5) << i << "|" << endl;

double e = 96;

cout << e << " ‐ " << showpoint << e << endl;

cout << scientific << d << endl;

cout << fixed << setprecision(8) << d << endl;

Página 198Fundamentos de la programación: Tipos e instrucciones I

0‐>false

123.45x62

|  123.45|

|123.45  |

|x   |

|   62|

96 ‐ 96.0000

1.234500e+002

123.45000000

Luis Hernández Yáñez

Página 199Fundamentos de la programación: Tipos e instrucciones I

Page 77: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

Losprogramaspuedenincluirotrasfuncionesademásdemain()

FormageneraldeunafunciónenC++:

tipo nombre(parámetros) // Cabecera{

// Cuerpo}

Tipo dedatoquedevuelvelafuncióncomoresultado

Parámetros paraproporcionardatosalafunción

Declaracionesdevariablesseparadasporcomas

Cuerpo:secuenciadedeclaracioneseinstrucciones¡Unbloquedecódigo!

Página 200Fundamentos de programación: Tipos e instrucciones I

Luis Hernández Yáñez

Datoslocales:declaradosenelcuerpodelafunción

Datosauxiliaresqueutilizalafunción(puedenohaber)

Parámetros:declaradosenlacabeceradelafunción

Datosdeentradadelafunción(puedenohaber)

Ambossondeusoexclusivodelafunciónynoseconocenfuera

double f(int x, int y) {// Declaración de datos locales:double resultado;

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

/ pow(y, 2)) / abs(x * y) ‐ cos(y);

return resultado; // Devolución del resultado}

Página 201Fundamentos de programación: Tipos e instrucciones I

Page 78: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

LlamadaaunafunciónconparámetrosNombre(Argumentos)

Alllamaralafunción:

— Tantosargumentosentrelosparéntesiscomoparámetros

— Ordendedeclaracióndelosparámetros

— Cadaargumento:mismotipoquesuparámetro

— Cadaargumento:expresiónválida(sepasaelresultado)

Secopianlosvaloresresultantesdelasexpresionesenloscorrespondientesparámetros

Llamadasalafunción:enexpresionesdeotras funcionesint valor = f(2, 3);

Página 202Fundamentos de programación: Tipos e instrucciones I

Luis Hernández Yáñez

Secopianlosargumentosenlosparámetrosint funcion(int x, double a) {

... 

}

int main() {

int i = 124;

double  d = 3;

funcion(i, 33 * d);

...

return 0; // main() devuelve 0 al S.O.

}

Página 203Fundamentos de programación: Tipos e instrucciones I

Memoria

i 124

d 3.0

...

...

x 124

a 99.0

...

LosargumentosnosemodificanLosargumentosnosemodifican

Page 79: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

LafunciónhadedevolverunresultadoLafunciónterminasuejecucióndevolviendounresultado

Lainstrucciónreturn (sólounaencadafunción)

— Devuelveeldatoqueseponeacontinuación(tipodelafunción)

— Terminalaejecucióndelafunción

Eldatodevueltosustituyealallamadadelafunción:

int cuad(int x) { int main() {

return x * x; cout << 2 * cuad(16);

x = x * x;

} return 0;

}

Página 204Fundamentos de programación: Tipos e instrucciones I

256256Estainstrucción

noseejecutaránuncaEstainstrucción

noseejecutaránunca

Luis Hernández Yáñez

¿Quéfuncioneshayenelprograma?Colocaremoslasfuncionesdespuésdemain()

¿Soncorrectaslasllamadasafuncionesdelprograma?

— ¿Existelafunción?

— ¿Concuerdanlosargumentosconlosparámetros?

Prototipostraslasinclusionesdebibliotecas

Prototipodefunción:Cabeceradelafunciónterminadaen;double f(int x, int y);int funcion(int x, double a) int cuad(int x);...

Página 205Fundamentos de programación: Tipos e instrucciones I

main() eslaúnicafunciónquenohayqueprototiparmain() eslaúnicafunciónquenohayqueprototipar

Page 80: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

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

// Prototipos de las funciones (excepto main())bool par(int num);bool letra(char car);int suma(int num);double formula(int x, int y);

int main() {int numero, sum, x, y;char caracter;double f;cout << "Entero: ";cin >> numero;if (par(numero)) {

cout << "Par";}...

Página 206Fundamentos de programación: Tipos e instrucciones I

Luis Hernández Yáñez

else {cout << "Impar";

}cout << endl;if (numero > 1) {

cout << "Sumatorio de 1 a " << numero << ": "<< suma(numero) << endl;

}cout << "Carácter: ";cin >> caracter;if (!letra(caracter)) {

cout << "no ";}cout << "es una letra" << endl;cout << "f(x, y) = " << formula(x, y) << endl;// Los argumentos pueden llamarse igual o no que los parámetros

return 0;}...

Página 207Fundamentos de programación: Tipos e instrucciones I

Page 81: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

// Implementación de las funciones propias

bool par(int num) {bool esPar;

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

}else {

esPar = false;}

return esPar;}...

Página 208Fundamentos de programación: Tipos e instrucciones I

Luis Hernández Yáñez

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

esLetra = true;}else {

esLetra = false;}return esLetra;

}

int suma(int num) {int sum = 0, i = 1;while (i < num) {

sum = sum + i;i++;

}return sum;

}...

Página 209Fundamentos de programación: Tipos e instrucciones I

Page 82: Fundamentos de la programación 2 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/FP02.pdf · 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería

Luis Hernández Yáñez

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

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

return f;}

Página 210Fundamentos de programación: Tipos e instrucciones I

funciones.cppfunciones.cppLuis Hernández Yáñez

LicenciaCC(Creative Commons)Estetipodelicenciasofrecenalgunosderechosaterceraspersonasbajociertascondiciones.

Estedocumentotieneestablecidaslassiguientes:

Pulsaenlaimagendearribaaladerechaparasabermás.

Fundamentos de la programación: Tipos e instrucciones I Página 211

Reconocimiento(Attribution):Encualquierexplotacióndelaobraautorizadaporlalicenciaharáfaltareconocerlaautoría.

Nocomercial(Noncommercial):Laexplotacióndelaobraquedalimitadaausosnocomerciales.

Compartirigual(Sharealike):Laexplotaciónautorizadaincluyelacreacióndeobrasderivadassiemprequemantenganlamismalicenciaalserdivulgadas.