fundamentos de la programación 2olimpiadas.informatica.ucm.es/files/fp/02... · 2019-10-05 ·...
TRANSCRIPT
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
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
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:
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
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
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!
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;
??
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!
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
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
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.
......
...
...
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!
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!
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#
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
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
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í!
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
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.
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
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
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
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
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
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
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
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
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 ?
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
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
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
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
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?
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)
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;
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
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
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
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
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
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
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
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
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
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
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
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
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)
,
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;
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
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
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;
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
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
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
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;
}
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
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
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
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
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
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
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)
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
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
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(=)
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
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
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";
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
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
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;
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;
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;
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>
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
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
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
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
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
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
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.
2A
GradoenIngenieríaInformáticaGradoenIngenieríadelSoftware
GradoenIngenieríadeComputadores
LuisHernándezYáñez
FacultaddeInformáticaUniversidadComplutense
Fundamentos de la programaciónLuis Hernández Yáñez
int 214float 216Notación científica 217double 218char 220bool 221string 222Literales con especificación de tipo 223
Fundamentos de la programación: Tipos e instrucciones I (Anexo)
Luis Hernández Yáñez
Intervalodevalores:‐2147483648 ..2147483647
Bytesdememoria:4*
Literales:1363,‐12,010 ,0x1A
Página 214Fundamentos de la programación: Tipos e instrucciones I (Anexo)
01
02
03
04
05
06
07
08
09
. . .
NotaciónhexadecimalNotaciónhexadecimal
(*)Dependedelamáquina4byteseslomáshabitual
Sepuedesabercuántosseusanconlafunciónsizeof(int)
(*)Dependedelamáquina4byteseslomáshabitual
Sepuedesabercuántosseusanconlafunciónsizeof(int)
NotaciónoctalNotaciónoctal
+
‐
0
x 0..9,A..F0..9,A..F
0..90..9
0..7
NúmerosenterosLuis Hernández Yáñez
Númerosennotaciónoctal(base8:dígitosentre0y7):‐010 =‐8ennotacióndecimal
10=1x 81 +0x 80 =1x 8+0
0423 =275ennotacióndecimal423=4x 82 +2x 81 +3x 80 =4x 64+2x 8+3=256
+16+3
Númerosennotaciónhexadecimal(base16):
Dígitos posibles:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F0x1F =31 ennotacióndecimal
1F=1x 161 +Fx 160 =1x 16+15
0xAD =173ennotacióndecimalAD=Ax 161 +Dx 160 =10x 16+13=160+13
Página 215Fundamentos de la programación: Tipos e instrucciones I (Anexo)
Númerosenteros
Luis Hernández Yáñez
Intervalodevalores:+/‐ 1.18e‐38 ..3.40e+38
Bytesdememoria:4*
Puntoflotante.Precisión:7 dígitos
Literales(puntodecimal):Notaciónnormal:134.45,‐1.1764
Notacióncientífica:1.4E2,‐5.23e‐02
Página 216Fundamentos de la programación: Tipos e instrucciones I (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
Númerosreales(condecimales)Luis Hernández Yáñez
Siempreunnúmero(conosinsigno)conunsolodígitodeparteentera,seguidodelexponente(potenciade10):
‐5.23e‐2 ‐5,23x 10‐2 ‐0,0523
1.11e2 1,11x 102 111,0
7.4523e‐04 7,4523x 10‐4 0,00074523
‐3.3333e+06 ‐3,3333x 106 ‐3.333.300
Página 217Fundamentos de la programación: Tipos e instrucciones I (Anexo)
Luis Hernández Yáñez
Intervalodevalores:+/‐ 2.23e‐308 ..1.79e+308
Bytesdememoria:8*
Puntoflotante.Precisión:15 dígitos
Literales(puntodecimal):Notaciónnormal:134.45,‐1.1764
Notacióncientífica:1.4E2,‐5.23e‐02
Página 218Fundamentos de la programación: Tipos e instrucciones I (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
+
Númerosreales(condecimales)Luis Hernández Yáñez
Intervalodevalores:Juegodecaracteres(ASCII)
Bytesdememoria:1 (FC)Literales:'a','%','\t'Constantesdebarrainvertida:(Osecuenciasdeescape)Paracaracteresdecontrol'\t' =tabulador,'\n' =saltodelínea,…
Página 219Fundamentos de la programación: Tipos e instrucciones I (Anexo)
01
02
03
04
05
06
07
08
09
. . .
Carácter
n, t, v, b, r, f, a, \n, t, v, b, r, f, a, \' '
\
Caracteres
Luis Hernández Yáñez
JuegodecaracteresASCII:
AmericanStandardCode forInformation Interchange (1963)
Caracteresconcódigosentre0y127(7bits)
— Caracteresdecontrol:Códigosdel0al31y127Tabulación,saltodelínea,...
— Caracteresimprimibles:Códigosdel32al126
JuegodecaracteresASCIIextendido(8bits):
ISO‐8859‐1
+Códigosentre128y255
Página 220Fundamentos de la programación: Tipos e instrucciones I (Anexo)
Multituddecodificaciones:EBCDIC,UNICODE,UTF‐8,...
Luis Hernández Yáñez
Sólodosvaloresposibles:
— Verdadero(true)
— Falso(false)
Bytesdememoria:1 (FC)
Literales:true,false
Enrealidad,cualquiernúmerodistintode0esequivalenteatrueyelnúmero0esequivalenteafalse
Página 221Fundamentos de la programación: Tipos e instrucciones I (Anexo)
01
02
03
04
05
06
07
08
09
. . .
Valoreslógicos
Luis Hernández Yáñez
"Hola","Introduce el numerador: ","X142FG5TX?%A"
Secuenciasdecaracteres
SeasignalamemoriaquesenecesitaparalasecuenciaconcretaRequierenlabibliotecastring conelespaciodenombresstd:
#include <string>using namespace std;
Página 222Fundamentos de la programación: Tipos e instrucciones I (Anexo)
Carácter
¡Ojo!Lascomillastipográficas(apertura/cierre)“…”tedaránproblemasalcompilar.Asegúratedeutilizarcomillasrectas:"…"
" "
CadenasdecaracteresLuis Hernández Yáñez
Pordefectounliteralenteroseconsideraundatoint— long int:35L,1546l— unsigned int:35U,1546u— unsigned long int:35UL,1546ulPordefectounliteralrealseconsideraundatodouble— float:1.35F,15.46f— long double:1.35L,15.46l
Abreviaturasparamodificadoresdetiposshort short intlong long intEspreferibleevitarelusodetalesabreviaturas:Minimizarlacantidaddeinformaciónarecordarsobreellenguaje
Página 223Fundamentos de la programación: Tipos e instrucciones I (Anexo)
Luis Hernández Yáñez
LicenciaCC(Creative Commons)Estetipodelicenciasofrecenalgunosderechosaterceraspersonasbajociertascondiciones.
Estedocumentotieneestablecidaslassiguientes:
Pulsaenlaimagendearribaaladerechaparasabermás.
Fundamentos de la programación: Tipos e instrucciones I (Anexo) Página 224
Reconocimiento(Attribution):Encualquierexplotacióndelaobraautorizadaporlalicenciaharáfaltareconocerlaautoría.
Nocomercial(Noncommercial):Laexplotacióndelaobraquedalimitadaausosnocomerciales.
Compartirigual(Sharealike):Laexplotaciónautorizadaincluyelacreacióndeobrasderivadassiemprequemantenganlamismalicenciaalserdivulgadas.
Fundamentos de la programación Ejercicios del Tema 2 (1ª parte) — Pág. 1
Facultad de Informática – Universidad Complutense
Fundamentos de la programación Curso 2013–2014
HojadeejerciciosdelTema2–1ªparte
1. EscribeunprogramaenC++quenosdigacuáleselvolumendeunconoconunradiodelabasede14,5yunaalturade26,79.Lafórmulaquedebesusares:
3
2 alturaradio
Recuerdaqueelvalor(aproximado)deԉes3,141592.
2. Modificaelprogramaanteriorparaqueusetresvariables,todasdetipodouble:radio, altura y volumen. Las dos primeras se inicializarán a 14,5 y 26,79respectivamente.Laterceraobtendráelresultadodelafórmula.
3. Escribe un programa en C++ que lea del teclado un número (real) de gradosFahrenheityloconviertaaCelsiusmostrandoelresultadoenlapantalla.
ºC = 5 / 9 x (ºF ‐ 32)
4. Escribeunprogramaqueleadeltecladountiempotranscurridoensegundosymuestreenlapantallalashoras,losminutosylossegundosequivalentes.
5. Escribeunprogramaquecalculelanotafinaldeestaasignatura,apartirdelascalificacionesobtenidasencadaexamen(convocatoriadejunio),cadaprácticaylaactividadadicional.Pediráalusuariocadacalificaciónymostrarálanotafinalobtenida.Notendráencuentalosrequisitosdemínimosdealgunascalificaciones(niquelasprácticasesténaprobadasniquealmenossehayatenidoun4enelexamenfinalnilosporcentajesdecadapráctica).
6. EscribelasiguienteexpresiónenC++(usalosparéntesisqueseanestrictamentenecesarios):
bda
adbca
r
)2(3)(9
)34(3
4
Fundamentos de la programación Ejercicios del Tema 2 (1ª parte) — Pág. 2
7. EscribeunprogramaenC++quecomiencedeclarando las siguientesvariables(valoresinicialesentreparéntesis):
Variableenterallamadax(12).
Variablerealllamadasigma(2,1836).
Variableenterallamaday(3).
Variablerealllamadalambda(1,11695).
Variablerealllamadaalfa(328,67).
Variablerealllamadaf.
Elprogramacalcularáenfelvalorresultantedelasiguientefórmula:
7.133 22
alfalambda
yx
ysigmaxf
Yterminarámostrandolosvaloresdelasdistintasvariables(unaencadalínea)yelvalordelafresultante.
8. Escribe un programa en C++ que calcule el total que hay que ingresar a unempleadoensunóminadelmesactual,apartirde lossiguientesdatos:sueldobase, complemento de destino, complemento de cargo académico, horas extrarealizadas,númerodehijosynúmerodemayoresdependientes.
El totala ingresares igualal sueldobrutodelempleadomenos los impuestos.El sueldo bruto es igual al sueldo base más los complementos más locorrespondientealashorasextra(a23€porhoraextra).Losimpuestos(IRPF)sonunporcentajedelsueldobruto:sinhijosysinmayoresdependientesseaplicael24%.Aeseporcentajeselerestan2puntosporcadahijoy1puntoporcadamayordependiente.
Elprogramapediráalusuariolosdistintosdatosymostrarálosresultadosconunformatolomásparecidoalsiguiente:
Sueldo base: 1237.56 € Complemento de destino: 146.95 € Complemento de cargo académico: 97 € Horas extra realizadas: 7 Hijos: 2 Mayores: 1 Cálculo de la nómina.‐ Sueldo bruto: 1642.51 € Porcentaje de IRPF: 19% Retención por IRPF: 312,08 € Sueldo neto: 1330,43 €
Usa identificadores descriptivos para las variables e incluye comentarios quedescribanlasoperacionesqueserealizan.
Fundamentos de la programación Ejercicios del Tema 2 (1ª parte) — Pág. 3
9. Dadaslasdeclaraciones:
int a = 1;
double d = 1.0;
ysuponiendoquecadainstrucciónesindependiente,¿cuáleselresultadodecadaunadeestasexpresiones(elvalorqueseasigna)?
a = 46 % 9 + 4 * 4 ‐ 2;
a = 45 + 43 % 5 * (23 * 3 % 2);
a = 45 + 45 * 50 % a‐‐;
d = 1.5 * 3 + (++d);
d = 1.5 * 3 + d++;
a %= 3 / a + 3;
10. Eláreadeuntriángulosepuedecalcularmediantelaleydelseno:siseconocendosladosdeltriángulo,lado1ylado2,yelánguloexistenteentreellos.Dichaleyestableceque
Área=½ x lado1 x lado2 x sen
Implementaunprogramaquecalculeeláreadeuntriángulodeestamanera.Elprogramadeberásolicitaralusuariolosdosladosyelánguloqueéstosforman(en grados). Ten en cuenta que la función sin() espera que el ángulo seproporcioneenradianes.Ánguloenradianes=Ánguloengradosx/180.
11. EscribeunprogramaenC++quepidaalusuarioelvalordedosvariablesrealesxey,yacontinuaciónmuestreelresultadodeaplicarleslasiguientefórmula:
x
yx
yx
y
yxeeyxf
141592,3)(log
))tan()(sin(531,1),(
10
)(
Declaraconstantesparalosvaloresfijos.
12. Escribe un programa en C++ que pida al usuario los datos de un préstamohipotecario (capital prestado, interés anual y años que dura el préstamo) y lemuestre la cuotamensual que habrá de pagar y el total de lo pagadouna vezterminadoelplazo,distinguiendolacantidaddeamortizaciónyladeintereses.
Lafórmulaquenosdalacuotamensuales:
))100
1(1(100 plazoratioratiocapital
cuota
Dondeelratioeselinterésmensualyelplazoestáindicadoenmeses.Lacantidaddeamortizacióneselcapitalprestado;elrestosonintereses.
Fundamentos de la programación Ejercicios del Tema 2 (2ª parte) — Pág. 1
Facultad de Informática – Universidad Complutense
Fundamentos de la programación Curso 2013–2014
HojadeejerciciosdelTema2–2ªparte
13. EscribeunprogramaenC++quepidaalusuariotresvaloresenterosylosmuestredemenoramayorseparadosporcomas.Porejemplo,sielusuariointroduce10,4y6,elresultadoserá:4,6,10.
14. Repiteelejercicioanteriorperocontrescadenas(string)enlugardeenteros.
15. A partir del programa del ejercicio 5, crea otro programa que calcule lacalificacióndeestaasignatura,peroteniendoahoraencuenta lasrestricciones(quelasprácticasesténtodasaprobadasyquealmenossehayatenidoun4enelexamenfinal,asícomoelporcentajedecadapráctica).
16. Escribe un programa en C++ que pida números al usuario, hasta que ésteintroduzcaun0,yqueparacadauno,siespositivo,digasiesparoimpar(siesnegativo,simplementeloignorará).
17. Desarrollaunconversordemedidasanglosajonasainternacionales.Elprogramaleeráunnúmerorealseguidodeunespacioyunaletra.Laletraindicarálamedidaquesequiereconvertir(ppulgadas;mmillas;fgradosFahrenheit;ggaloneslíquidos;oonzas;llibras).
Mostrará la cantidad en la nueva unidad seguida de un espacio y otras letrasrepresentando la nueva unidad (respectivamente, cm centímetros; mmetros;cgradosCelsius;llitros;grgramos;kgkilogramos).
El programa seguirá pidiendo al usuario medidas a convertir hasta que ésteintroduzca un 0 como cantidad. Localiza en la Wikipedia los factores deconversión correspondientes (ante la duda, los americanos) y defínelos comoconstantes.
Fundamentos de la programación Ejercicios del Tema 2 (2ª parte) — Pág. 2
18. EscribeunprogramaenC++quemuestreenlapantallalatablademultiplicación(de1a10)delnúmeroqueintroduzcaelusuario(entre1y100;sinoestáeneseintervalovolveráapedirelnúmero).Lasalidadebeestarbienformateada,comoenesteejemplo:
19. EscribeunprogramaenC++queleaunoperando(real),unoperador(carácter)yotro operando (real), todo en una misma línea, y muestre el resultado de laoperacióncorrespondiente(operadorescontemplados:+, ‐,*y/).Elprogramaseguirápidiendooperacioneshastaqueelprimeroperandosea0.
20. Muestraelresultadoexactoquegeneraenlapantallaelsiguientefragmentodecódigo(sinejecutarlo):
... int a = 10; char b = 'x'; double c = 3.33333; cout << a << c << b << endl; cout << setw(5) << a << setw(10) << setprecision(2) << c << b << endl; cout << setw(5) << setprecision(2) << c << setw(10) << b << setw(10) << a <<endl;
Fundamentos de la programación Ejercicios del Tema 2 (2ª parte) — Pág. 3
21. Escribe un programa en C++ que empiece solicitando dos números, uno querepresente el precio de un producto y otro que represente las unidades delproducto que se adquieren, un carácter que indique si se tiene derecho adescuentodel15%antesdelI.V.A.(S/N),unacadenaqueseráelnombrecompleto(variaspalabras)delcliente,otracadenaconelNIFdelcliente,otramásconladirecciónpostal(variaspalabras)yunaúltimaconelnombredelproducto.
A continuación, el programa generará en la pantalla una factura de la comprarealizada: nombredel cliente, dirección yNIF, nombredel producto, unidadesadquiridas,preciounitario,total(unidadesporprecio),descuentoaplicado,totaltrasdescuento,tantoporcientodeI.V.A.aplicado(21%actualmente),cantidadde I.V.A.yprecio final (añadiendoel I.V.A.al total).Cadadato iráenuna línea,precedidodesunombre,yocuparáexactamente10espacios,estaráajustadoaladerechaymostrará2decimales.
Ejemplodeejecucióndelprograma: