107
3 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 Fundamentos de la programación: Tipos e instrucciones II Tipos, valores y variables 227 Conversión de tipos 232 Tipos declarados por el usuario 236 Tipos enumerados 238 Entrada/Salida con archivos de texto 248 Lectura de archivos de texto 253 Escritura en archivos de texto 266 Flujo de ejecución 272 Selección simple 276 Operadores lógicos 282 Anidamiento de if 286 Condiciones 290 Selección múltiple 293 La escala ifelseif 295 La instrucción switch 302 Repetición 313 El bucle while 316 El bucle for 321 Bucles anidados 331 Ámbito y visibilidad 339 Secuencias 349 Recorrido de secuencias 355 Secuencias calculadas 363 Búsqueda en secuencias 370 Arrays de datos simples 374 Uso de variables arrays 379 Recorrido de arrays 382 Búsqueda en arrays 387 Arrays no completos 393

Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

  • Upload
    others

  • View
    10

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

3

GradoenIngenieríaInformáticaGradoenIngenieríadelSoftware

GradoenIngenieríadeComputadores

LuisHernándezYáñez

FacultaddeInformáticaUniversidadComplutense

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

Fundamentos de la programación: Tipos e instrucciones II

Tipos, valores y variables 227Conversión de tipos 232Tipos declarados por el usuario 236Tipos enumerados 238Entrada/Salida

con archivos de texto 248Lectura de archivos de texto 253Escritura en archivos de texto 266

Flujo de ejecución 272Selección simple 276Operadores lógicos 282Anidamiento de if 286Condiciones 290Selección múltiple 293

La escala if‐else‐if 295La instrucción switch 302

Repetición 313El bucle while 316

El bucle for 321Bucles anidados 331

Ámbito y visibilidad 339Secuencias 349

Recorrido de secuencias 355Secuencias calculadas 363Búsqueda en secuencias 370

Arrays de datos simples 374Uso de variables arrays 379Recorrido de arrays 382Búsqueda en arrays 387Arrays no completos 393

Page 2: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Página 227Fundamentos de la programación: Tipos e instrucciones II

Luis Hernández Yáñez

TipoConjuntodevaloresconsusposiblesoperaciones

ValorConjuntodebitsinterpretadoscomodeuntipoconcreto

Variable (oconstante)Ciertamemoriaconnombreparavaloresdeuntipo

DeclaraciónInstrucciónqueidentificaunnombre

DefiniciónDeclaraciónqueasignamemoriaaunavariableoconstante

Página 228Fundamentos de la programación: Tipos e instrucciones II

Page 3: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Memoriasuficienteparasutipodevalores

short int i = 3;

int j = 9;

char c = 'a';

double x = 1.5;

Elsignificadodelosbitsdependedeltipodelavariable:00000000 00000000 00000000 01111000

Interpretadocomoint eselentero120

Interpretadocomochar (sólo01111000)eselcarácter'x'

Página 229Fundamentos de la programación: Tipos e instrucciones II

ii 3

jj 9

cc a

xx 1.5

Luis Hernández Yáñez

Simples

Estándar:int,float,double,char,boolConjuntodevalorespredeterminado

Definidosporelusuario:enumeradosConjuntodevaloresdefinidoporelprogramador

Estructurados(Tema5)

Coleccioneshomogéneas:arraysTodosloselementosdelacoleccióndeunmismotipo

Coleccionesheterogéneas:estructurasElementosdelacoleccióndetiposdistintos

Página 230Fundamentos de programación: Tipos e instrucciones II

Page 4: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Consusposiblesmodificadores:

[unsigned] [short] int

long long int

float

[long] double

char

bool

Página 231Fundamentos de la programación: Tipos e instrucciones II

Definicióndevariables:tipo nombre [ = expresión] [, ...];

Definicióndeconstantesconnombre:const tipo nombre = expresión;

long int int

Luis Hernández Yáñez

Página 232Fundamentos de la programación: Tipos e instrucciones II

Page 5: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

PromocióndetiposDosoperandosdetiposdistintos:Elvalordeltipomenor sepromocionaaltipomayor

short int i = 3;

int j = 2;

double a = 1.5, b;

b = a + i * j;

Página 233Fundamentos de la programación: Tipos e instrucciones II

long double

double

float

long int

int

short int

Promoción

Promoción

Valor3 short int (2bytes) int (4bytes)Valor3 short int (2bytes) int (4bytes)

Valor6 int (4bytes) double (8bytes)Valor6 int (4bytes) double (8bytes)

b = a + 3 * 2;

b = 1.5 + 6;

Luis Hernández Yáñez

Conversiónsegura:

Deuntipomenorauntipomayorshort int int long int ...

Conversiónnosegura:

Deuntipomayorauntipomenorint entero = 1234;

char caracter;

caracter = entero; // Conversión no segura

Menormemoria:Pérdidadeinformaciónenlaconversión

Página 234Fundamentos de la programación: Tipos e instrucciones II

long double

double

float

long int

int

short int

Page 6: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Fuerzanunaconversióndetipo:tipo(expresión)

Elvalorresultantedelaexpresión setratacomounvalordeltipo

int a = 3, b = 2;

cout << a / b;         // Muestra 1 (división entera)

cout << double(a) / b; // Muestra 1.5 (división real)

Tienenlamayorprioridad

Página 235Fundamentos de la programación: Tipos e instrucciones II

Luis Hernández Yáñez

Página 236Fundamentos de la programación: Tipos e instrucciones II

Page 7: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Describimoslosvaloresdelasvariablesdeltipotypedef descripción nombre_de_tipo;

Página 237Fundamentos de la programación: Tipos e instrucciones II

Nombresdetipospropios:

tminúsculaseguidadeunaovariaspalabrascapitalizadas

Loscolorearemosennaranja,pararemarcarquesontipos

typedef descripción tMiTipo;typedef descripción tMoneda;typedef descripción tTiposDeCalificacion;

typedef descripción tMiTipo;typedef descripción tMoneda;typedef descripción tTiposDeCalificacion;

Identificadorválido

Declaracióndetipofrenteadefinicióndevariable

Luis Hernández Yáñez

Página 238Fundamentos de la programación: Tipos e instrucciones II

Page 8: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Enumeracióndelconjuntodevaloresposiblesparalasvariables:

enum { símbolo1, símbolo2, ..., símboloN }

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

Valoresliteralesquepuedentomarlasvariables(enamarillo)

Página 239Fundamentos de la programación: Tipos e instrucciones II

enumenum

,

{ Identificador }

Luis Hernández Yáñez

typedef descripción nombre_de_tipo;

Elegimosunnombreparaeltipo:tMoneda

typedef enum { centimo, dos_centimos, cinco_centimos,diez_centimos, veinte_centimos,medio_euro, euro } tMoneda;

Página 240Fundamentos de la programación: Tipos e instrucciones II

Enelámbitodeladeclaración,sereconoceunnuevotipotMoneda

tMoneda moneda1, moneda2;

Cadavariabledeesetipocontendráalgunodelossímbolosmoneda1 = dos_centimos;moneda2 = euro;

moneda1moneda1 dos_centimos

moneda2moneda2 euro

descripcióndescripción

MejoranlalegibilidadMejoranlalegibilidad

(Internamenteseusanenteros)(Internamenteseusanenteros)

Page 9: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

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

tMes mes;

Lecturadelavariablemes:

cin >> mes;

SeesperaunvalorenteroNosepuedeescribirdirectamenteenero ojunio

Ysiseescribelavariableenlapantalla:cout << mes;

Severáunnúmeroentero

Códigodeentrada/salidaespecífico

Página 241Fundamentos de la programación: Tipos e instrucciones II

Luis Hernández Yáñez

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

Página 242Fundamentos de la programación: Tipos e instrucciones II

int op;cout << " 1 ‐ Enero" << endl;cout << " 2 ‐ Febrero" << endl;cout << " 3 ‐ Marzo" << endl;cout << " 4 ‐ Abril" << endl;cout << " 5 ‐ Mayo" << endl;cout << " 6 ‐ Junio" << endl;cout << " 7 ‐ Julio" << endl;cout << " 8 ‐ Agosto" << endl;cout << " 9 ‐ Septiembre" << endl;cout << "10 ‐ Octubre" << endl;cout << "11 ‐ Noviembre" << endl;cout << "12 ‐ Diciembre" << endl;cout << "Numero de mes: ";cin >> op;tMes mes = tMes(op ‐ 1);

int op;cout << " 1 ‐ Enero" << endl;cout << " 2 ‐ Febrero" << endl;cout << " 3 ‐ Marzo" << endl;cout << " 4 ‐ Abril" << endl;cout << " 5 ‐ Mayo" << endl;cout << " 6 ‐ Junio" << endl;cout << " 7 ‐ Julio" << endl;cout << " 8 ‐ Agosto" << endl;cout << " 9 ‐ Septiembre" << endl;cout << "10 ‐ Octubre" << endl;cout << "11 ‐ Noviembre" << endl;cout << "12 ‐ Diciembre" << endl;cout << "Numero de mes: ";cin >> op;tMes mes = tMes(op ‐ 1);

Page 10: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

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

Página 243Fundamentos de la programación: Tipos e instrucciones II

if (mes == enero) {cout << "enero";

}if (mes == febrero) {

cout << "febrero";}if (mes == marzo) {

cout << "marzo";}...if (mes == diciembre) {

cout << "diciembre";}

if (mes == enero) {cout << "enero";

}if (mes == febrero) {

cout << "febrero";}if (mes == marzo) {

cout << "marzo";}...if (mes == diciembre) {

cout << "diciembre";}

TambiénpodemosutilizarunainstrucciónswitchTambiénpodemosutilizarunainstrucciónswitch

Luis Hernández Yáñez

Conjuntodevaloresordenado(posiciónenlaenumeración)typedef enum { lunes, martes, miercoles, jueves,

viernes, sabado, domingo } tDiaSemana;

tDiaSemana dia;

...

if (dia == jueves)...

bool noLaborable = (dia >= sabado);

NoadmitenoperadoresdeincrementoydecrementoEmulaciónconmoldes:int i = int(dia); // ¡dia no ha de valer domingo!i++;dia = tDiaSemana(i);

Página 244Fundamentos de la programación: Tipos e instrucciones II

lunes < martes < miercoles < jueves< viernes < sabado < domingo

Page 11: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

#include <iostream>using namespace std;

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

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

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

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

Página 245Fundamentos de la programación: Tipos e instrucciones II

Silostiposseusanenvariasfunciones,losdeclaramosantesdelosprototipos

Luis Hernández Yáñez

// Mostramos la fechacout << "Hoy es: " << cadDia(hoy) << " " << dia

<< " de " << cadMes(mes) << " de " << anio<< endl;

cout << "Pasada la medianoche..." << endl;dia++;int i = int(hoy);i++;hoy = tDiaSemana(i);

// Mostramos la fechacout << "Hoy es: " << cadDia(hoy) << " " << dia

<< " de " << cadMes(mes) << " de " << anio<< endl;

return 0;}

Página 246Fundamentos de la programación: Tipos e instrucciones II

Page 12: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

string cadMes(tMes mes) {string cad;

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

}if (mes == febrero) {

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

cad = "diciembre";}

return cad;}

string cadDia(tDiaSemana dia);string cad;

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

}if (dia == martes) {

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

cad = "domingo";}

return cad;}

Página 247Fundamentos de la programación: Tipos e instrucciones II

fechas.cppfechas.cppLuis Hernández Yáñez

Página 248Fundamentos de la programación: Tipos e instrucciones II

Page 13: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Datosdelprograma:enlamemoriaprincipal(volátil)

Medios(dispositivos)dealmacenamientopermanente:

— Discosmagnéticosfijos(internos)oportátiles(externos)

— Cintasmagnéticas

— Discosópticos(CD,DVD,BlueRay)

— MemoriasUSB

Mantienenlainformaciónenarchivos

Secuenciasdedatos

Página 249Fundamentos de la programación: Tipos e instrucciones II

Luis Hernández Yáñez

Archivodetexto:secuenciadecaracteres

Archivobinario:contieneunasecuenciadecódigosbinarios

Losarchivossemanejanenlosprogramaspormediodeflujos

Archivosdetexto:flujosdetextoSimilaralaE/Sporconsola

(Másadelanteveremoselusodearchivosbinarios)

Página 250Fundamentos de la programación: Tipos e instrucciones II

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

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

(Códigosrepresentadosennotaciónhexadecimal)(Códigosrepresentadosennotaciónhexadecimal)

Page 14: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

TextosdispuestosensucesivaslíneasCarácterdefindelíneaentrelíneaylínea(Intro)

Posiblementevariosdatosencadalínea

Ejemplo:Comprasdelosclientes

Encadalínea,NIFdelcliente,unidadescompradas,preciounitarioydescripcióndeproducto,separadosporespacio12345678F 2 123.95 Reproductor de DVD↲

00112233A 1 218.4 Disco portátil↲

32143567J 3 32 Memoria USB 16Gb↲

76329845H 1 134.5 Modem ADSL↲

...

Normalmenteterminanconundatoespecial(centinela)Porejemplo,unNIFqueseaX

Página 251Fundamentos de la programación: Tipos e instrucciones II

Luis Hernández Yáñez

Lecturadelarchivo:flujodeentrada

Escrituraenelarchivo:flujodesalida

Nopodemosleeryescribirenunmismoflujo

Unflujodetextosepuedeutilizarparalecturaoparaescritura:

— Flujos(archivos)deentrada:variablesdetipoifstream

— Flujos(archivos)desalida:variablesdetipoofstream

Bibliotecafstream (sinespaciodenombres)

Página 252Fundamentos de la programación: Tipos e instrucciones II

#include <fstream>

Page 15: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Página 253Fundamentos de la programación: Tipos e instrucciones II

Luis Hernández Yáñez

FlujosdetextodeentradaParaleerdeunarchivodetexto:

Declaraunavariabledetipoifstream

Asocialavariableconelarchivodetexto(aperturadelarchivo)

Realizalasoperacionesdelectura

Desligalavariabledelarchivodetexto(cierreelarchivo)

Página 254Fundamentos de la programación: Tipos e instrucciones II

1

2

3

4

ifstream

Page 16: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

AperturadelarchivoConectalavariableconelarchivodetextodeldispositivo

flujo.open(cadena_literal);

ifstream archivo;

archivo.open("abc.txt");

if (archivo.is_open()) ...

CierredelarchivoDesconectalavariabledelarchivodetextodeldispositivo

flujo.close();

archivo.close();

Página 255Fundamentos de la programación: Tipos e instrucciones II

¡Elarchivodebeexistir!is_open():true sielarchivosehapodidoabrirfalse encasocontrario

Luis Hernández Yáñez

Operacionesdelectura Extractor(>>) archivo >> variable;

Saltaprimerolosespaciosenblanco(espacio,tab,Intro,...)

Datosnuméricos:leehastaelprimercarácternoválidoCadenas(string):leehastaelsiguienteespacioenblanco

archivo.get(c)

Leeelsiguientecarácterenlavariablec,seaelquesea

getline(archivo, cadena)

Leeenlacadena todosloscaracteresquequedenenlalínea

Incluidoslosespaciosenblanco

Hastaelsiguientesaltodelínea(descartándolo)

Conlosarchivosnotieneefectolafunciónsync()

Página 256Fundamentos de la programación: Tipos e instrucciones II

Page 17: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

¿Quédeboleer? Unnúmero

Usaelextractor archivo >> num;

Uncarácter(seaelquesea)

Usalafunciónget() archivo.get(c);

Unacadenasinespacios

Usaelextractor archivo >> cad;

Unacadenaposiblementeconespacios

Usalafuncióngetline() getline(archivo, cad);

Página 257Fundamentos de la programación: Tipos e instrucciones II

Luis Hernández Yáñez

¿Dóndequedapendientelaentrada? Númeroleídoconelextractor

Enelprimercarácternoválido(inc.espaciosenblanco)

Carácterleídoconget()

Enelsiguientecarácter(inc.espaciosenblanco)

UnacadenaleídaconelextractorEnelsiguienteespacioenblanco

Unacadenaleídaconlafuncióngetline()

Alprincipiodelasiguientelínea

Página 258Fundamentos de la programación: Tipos e instrucciones II

Page 18: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Programa

string nif, producto;

int unidades;

double precio;

char aux;

Página 259Fundamentos de la programación: Tipos e instrucciones II

7

6

5

4

3

2

1

FlujodeentradaarchivoFlujodeentradaarchivo

1 ifstream archivo;

2 archivo.open("compras.txt"); // Apertura

3 archivo >> nif >> unidades >> precio;

getline(archivo, producto);

4 archivo.close(); // Cierre

Luis Hernández Yáñez

archivo >> nif;

archivo >> unidades;

archivo >> precio;

getline(archivo, producto);

Página 260Fundamentos de la programación: Tipos e instrucciones II

productoproducto Reproductor de DVD precioprecio 123.95

unidadesunidades 2nifnif 12345678F

12345678F 2 123.95 Reproductor de DVD

EspacioEspacio

ElextractorsaltalosespaciosElextractorsaltalosespacios

getline() nosaltaespaciosgetline() nosaltaespacios

Page 19: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

archivo >> nif;

archivo >> unidades;

archivo >> precio;

archivo.get(aux); // Salta el espacio en blanco

getline(archivo, producto);

Página 261Fundamentos de la programación: Tipos e instrucciones II

productoproducto Reproductor de DVD precioprecio 123.95

unidadesunidades 2nifnif 12345678F

12345678F 2 123.95 Reproductor de DVD

SinespacioSinespacio

Leemoselespacio(nohacemosnadaconél)Leemoselespacio(nohacemosnadaconél)

Luis Hernández Yáñez

Cadalínea,datosdeunacompra

Mostrareltotaldecadacompraunidadesx preciomásIVA(21%)

Final:"X" comoNIF

Bucledeprocesamiento:

Cadapasodelbucle(ciclo)procesaunalínea(compra)

Podemosusarlasmismasvariablesencadaciclo

LeerprimerNIF

MientraselNIFnoseaX:

Leerunidades,precioydescripción

Calcularymostrareltotal

LeerelsiguienteNIF

Página 262Fundamentos de la programación: Tipos e instrucciones II

Page 20: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

#include <iostream>#include <string>using namespace std;#include <fstream>#include <iomanip> // Formato de salida

int main() {const int IVA = 21;string nif, producto;int unidades;double precio, neto, total, iva;char aux;ifstream archivo;int contador = 0;

archivo.open("compras.txt"); // Apertura...

Página 263Fundamentos de la programación: Tipos e instrucciones II

leer.cppleer.cpp

Luis Hernández Yáñez

if (archivo.is_open()) { // Existe el archivoarchivo >> nif; // Primer NIFwhile (nif != "X") {

archivo >> unidades >> precio;archivo.get(aux); // Salta el espaciogetline(archivo, producto);contador++;neto = unidades * precio;iva = neto * IVA / 100;total = neto + iva;cout << "Compra " << contador << ".‐" << endl;cout << "   " << producto << ": " << unidades

<< " x " << fixed << setprecision(2)<< precio << " = " << neto << " ‐ I.V.A.: "<< iva << " ‐ Total: " << total << endl;

archivo >> nif; // Siguiente NIF} ...

Página 264Fundamentos de la programación: Tipos e instrucciones II

Page 21: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

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

cout << "ERROR: No se ha podido abrir el archivo"<< endl;

}return 0;

}

Página 265Fundamentos de la programación: Tipos e instrucciones II

Luis Hernández Yáñez

Página 266Fundamentos de la programación: Tipos e instrucciones II

Page 22: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

FlujosdetextodesalidaParacrearunarchivodetextoyescribirenél:

Declaraunavariabledetipoofstream

Asocialavariableconelarchivodetexto(creaelarchivo)

Realizalasescrituraspormediodeloperador<< (insertor)

Desligalavariabledelarchivodetexto(cierraelarchivo)

Página 267Fundamentos de la programación: Tipos e instrucciones II

1

2

3

4

¡Atención!Sielarchivoyaexiste,seborratodoloquehubiera

¡Atención!Sinosecierraelarchivosepuedeperderinformación

ofstream

Luis Hernández Yáñez

int valor = 999;

Página 268Fundamentos de la programación: Tipos e instrucciones II

2

1

!

a

l

o

H

X

FlujodesalidaarchivoFlujodesalidaarchivo

Programa

1 ofstream archivo;

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

3 archivo << 'X' << " Hola! " << 123.45

<< endl << valor << "Bye!";

4 archivo.close(); // Cierre

Page 23: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

#include <iostream>#include <string>using namespace std;#include <fstream>

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

archivo.open("output.txt"); // Apertura (creación)

cout << "NIF del cliente (X para terminar): ";cin >> nif;...

Página 269Fundamentos de la programación: Tipos e instrucciones II

escribir.cppescribir.cppLuis Hernández Yáñez

while (nif != "X") {// Queda pendiente el Intro anterior...cin.get(aux); // Leemos el Introcout << "Producto: ";getline(cin, producto);cout << "Unidades: ";cin >> unidades;cout << "Precio: ";cin >> precio;// Escribimos los datos en una línea del archivo...// Con un espacio de separación entre ellosarchivo << nif << " " << unidades << " "

<< precio << " " << producto << endl;cout << "NIF del cliente (X para terminar): ";cin >> nif;

}...

Página 270Fundamentos de la programación: Tipos e instrucciones II

Page 24: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

// Escribimos el centinela final...archivo << "X";archivo.close(); // Cierre del archivo

return 0;}

Página 271Fundamentos de la programación: Tipos e instrucciones II

Luis Hernández Yáñez

Página 272Fundamentos de la programación: Tipos e instrucciones II

Page 25: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Página 273Fundamentos de la programación: Tipos e instrucciones II

{

double oper1, oper2, prod;

cout << "Operando 1: ";

cin >> oper1;

cout << "Operando 2: ";

...

cout << "Producto: " << prod;

return 0;

}

Flujodeejecución

Flujodeejecución

Instrucción N

Instrucción 3

Instrucción 2

Instrucción 1

Luis Hernández Yáñez

UnoentredosomáscaminosdeejecuciónSelecciónsimple(2caminos) Selecciónmúltiple(>2caminos)

Página 274Fundamentos de la programación: Tipos e instrucciones II

Instrucción T Instrucción F

Condicióntruetrue falsefalse

truetrue

truetrue

truetrue

truetrue

falsefalse

falsefalse

falsefalse

falsefalse

Diagramas de flujoDiagramas de flujo

ififif‐else‐if

switch

if‐else‐if

switch

Page 26: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Repetirlaejecucióndeunaomásinstrucciones

Acumular,procesarcolecciones,...

Página 275Fundamentos de la programación: Tipos e instrucciones II

Código

¿Iterar?SíSí NoNo

Inicialización

whilewhile forfor

Luis Hernández Yáñez

Página 276Fundamentos de la programación: Tipos e instrucciones II

Page 27: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Lainstrucciónif

if (condición) {

códigoT

}

[else {

códigoF

}]

condición:expresiónboolCláusulaelse opcional

Página 277Fundamentos de la programación: Tipos e instrucciones II

BloqueT BloqueF

Condicióntruetrue falsefalse

OpcionalOpcional

Luis Hernández Yáñez

int num;

cin >> num;

if (num < 0) {

cout << "Negativo";

}

else {

cout << "Positivo";

}

cout << endl;

Página 278Fundamentos de la programación: Tipos e instrucciones II

cout << "Negativo";

truetrue

cout << "Positivo";

falsefalse

cout << endl;

num < 0

cin >> num;

signo.cppsigno.cpp

Page 28: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

int num;

cin >> num;

if (num < 0) {

cout << "Negativo";

}

else {

cout << "Positivo";

}

cout << endl;

Página 279Fundamentos de la programación: Tipos e instrucciones II

cout << endl;

cout << "Positivo";

falsefalsenum < 0

cin >> num;

__129129

PositivoPositivo

_

num ?num 129

Luis Hernández Yáñez

truetrue

cout << "Negativo";

int num;

cin >> num;

if (num < 0) {

cout << "Negativo";

}

else {

cout << "Positivo";

}

cout << endl;

Página 280Fundamentos de la programación: Tipos e instrucciones II

cout << endl;

num < 0

cin >> num;

‐5‐5

NegativoNegativo

_

num ?num ‐5

Page 29: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Divisiónentredosnúmerosprotegidafrenteaintentodedivisiónpor0

#include <iostream>using namespace std;

int main() {double numerador, denominador, resultado;cout << "Numerador: "; cin >> numerador;cout << "Denominador: "; cin >> denominador;if (denominador == 0) {

cout << "Imposible dividir entre 0!";}else {

resultado = numerador / denominador;cout << "Resultado: " << resultado << endl;

}return 0;

}

Página 281Fundamentos de la programación: Tipos e instrucciones II

división.cppdivisión.cppLuis Hernández Yáñez

Página 282Fundamentos de la programación: Tipos e instrucciones II

Page 30: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Seaplicanavaloresbool (condiciones)

Elresultadoesdetipobool

Página 283Fundamentos de la programación: Tipos e instrucciones II

! NO Monario&& Y Binario|| O Binario

Operadores (prioridad)

...

!

* / %

+ ‐

< <= > >=

== !=

&&

||

Luis Hernández Yáñez

Página 284Fundamentos de la programación: Tipos e instrucciones II

!

true false

false true

&& true false

true true false

false false false

|| true false

true true true

false true false

NO(Not)NO(Not) Y(And)Y(And) O(Or)O(Or)

bool cond1, cond2, resultado;

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

resultado = !(a < 5);        // !(2 < 5)  !true  false

cond1 = (a * b + c) >= 12;   // 10 >= 12  false

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

resultado = cond1 && cond2;  // false && true  false

resultado = cond1 || cond2;  // false || true  true

Page 31: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Página 285Fundamentos de la programación: Tipos e instrucciones II

#include <iostream>using namespace std;

int main(){

int num;cout << "Introduce un número entre 1 y 10: ";cin >> num;if ((num >= 1) && (num <= 10)) {

cout << "Número dentro del intervalo de valores válidos";}else {

cout << "Número no válido!";}return 0;

}

condiciones.cppcondiciones.cpp

((num >= 1) && (num <= 10))((num > 0) && (num < 11))((num >= 1) && (num < 11))((num > 0) && (num <= 10))

¡Encierralascondicionessimplesentreparéntesis!¡Encierralascondicionessimplesentreparéntesis!

CondicionesequivalentesCondicionesequivalentes

Luis Hernández Yáñez

Página 286Fundamentos de la programación: Tipos e instrucciones II

Page 32: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Página 287Fundamentos de la programación: Tipos e instrucciones II

diasmes.cppdiasmes.cpp

int mes, anio, dias;cout << "Número de mes: "; cin >> mes;cout << "Año: "; cin >> anio;if (mes == 2) {

if (bisiesto(mes, anio)) {dias = 29;

}else {

dias = 28;}

}else {

if ((mes == 1) || (mes == 3) || (mes == 5) || (mes == 7) || (mes == 8) || (mes == 10) || (mes == 12)) {

dias = 31;}else {

dias = 30;}

}

Luis Hernández Yáñez

CalendarioGregoriano:bisiestosidivisiblepor4,exceptoelúltimodecadasiglo(divisiblepor100),salvoqueseadivisiblepor400

Página 288Fundamentos de la programación: Tipos e instrucciones II

bool bisiesto(int mes, int anio) {bool esBisiesto;if ((anio % 4) == 0) { // Divisible por 4

if (((anio % 100) == 0) && ((anio % 400) != 0)) {// Pero último de siglo y no múltiplo de 400esBisiesto = false;

}else {

esBisiesto = true; // Año bisiesto}

}else {

esBisiesto = false;}return esBisiesto;

}

Page 33: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Cadaelse seasociaalif anteriormáscercanosinasociar(mismobloque)

if (condición1) { 

if (condición2) {...}

else {...}

}

else {

if (condición3) {

if (condición4) {...}

if (condición5) {...}

else {...}

}

else { ...

Página 289Fundamentos de la programación: Tipos e instrucciones II

Lasangríaayudaaasociarloselse consusif

Unamalasangríapuedeconfundirif (x > 0) {

if (y > 0) {...}

else {...}

if (x > 0) {

if (y > 0) {...}

else {...}

Unamalasangríapuedeconfundirif (x > 0) {

if (y > 0) {...}

else {...}

if (x > 0) {

if (y > 0) {...}

else {...}

Luis Hernández Yáñez

Página 290Fundamentos de la programación: Tipos e instrucciones II

Page 34: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

• Condiciónsimple: Expresiónlógica(true/false)Sinoperadoreslógicos

num < 0

car == 'a'

isalpha(car)

12

• Condicióncompuesta:Combinacióndecondicionessimplesyoperadoreslógicos!isalpha(car)

(num < 0) || (car == 'a')

(num < 0) && ((car == 'a') || !isalpha(car))

Página 291Fundamentos de la programación: Tipos e instrucciones II

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

CompatibilidadconellenguajeC:0 esequivalenteafalseCualquiervalordistintode0 esequivalenteatrue

CompatibilidadconellenguajeC:0 esequivalenteafalseCualquiervalordistintode0 esequivalenteatrue

Luis Hernández Yáñez

ShortcutBooleanEvaluation

true || X true

(n == 0) || (x >= 1.0 / n)

Sin es0:¿divisiónporcero?(segundacondición)Comolaprimeraseríatrue:¡noseevalúalasegunda!

false && X false

(n != 0) && (x < 1.0 / n)

Sin es0:¿divisiónporcero?(segundacondición)Comolaprimeraseríafalse:¡noseevalúalasegunda!

Página 292Fundamentos de la programación: Tipos e instrucciones II

Page 35: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Página 293Fundamentos de la programación: Tipos e instrucciones II

Luis Hernández Yáñez

Página 294Fundamentos de la programación: Tipos e instrucciones II

truetrue

truetrue

truetrue

truetrue

falsefalse

falsefalse

falsefalse

falsefalse

if‐else‐if

switch

if‐else‐if

switch

Page 36: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Página 295Fundamentos de la programación: Tipos e instrucciones II

Luis Hernández Yáñez

Ejemplo:Calificación(enletras)deunestudianteenbaseasunotanumérica(0‐10)

Página 296Fundamentos de la programación: Tipos e instrucciones II

truetruecout << "MH"

truetruecout << "SB"

truetruecout << "NT"

truetruecout << "AP"

falsefalse

cout << "SS"

falsefalse

>= 5

falsefalse

>= 7

falsefalse

>= 9

== 10

Si nota == 10 entoncesMH

sino,si nota >= 9 entoncesSB

sino,si nota >= 7 entoncesNT

sino,si nota >= 5 entoncesAP

sino SS

Page 37: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

double nota;cin >> nota;if (nota == 10) {

cout << "MH";}else {

if (nota >= 9) {cout << "SB";

}else {

if (nota >= 7) {cout << "NT";

}else {

if (nota >= 5) {cout << "AP";

}else {

cout << "SS";}

}}

}

Página 297Fundamentos de la programación: Tipos e instrucciones II

double nota;cin >> nota;if (nota == 10) {

cout << "MH";}else if (nota >= 9) { 

cout << "SB";}else if (nota >= 7) {

cout << "NT";}else if (nota >= 5) {

cout << "AP";}else {

cout << "SS";}

nota.cppnota.cppLuis Hernández Yáñez

¡Cuidadoconelordendelascondiciones!double nota;cin >> nota;if (nota < 5) { cout << "SS"; }else if (nota < 7) { cout << "AP"; }else if (nota < 9) { cout << "NT"; }else if (nota < 10) { cout << "SB"; }else { cout << "MH"; }

double nota;cin >> nota;if (nota >= 5) { cout << "AP"; }else if (nota >= 7) { cout << "NT"; }else if (nota >= 9) { cout << "SB"; }else if (nota == 10) { cout << "MH"; }else { cout << "SS"; }

Página 298Fundamentos de la programación: Tipos e instrucciones II

SólomuestraAPoSSSólomuestraAPoSS

¡Noseejecutannunca!¡Noseejecutannunca!

Page 38: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Simplificacióndelascondiciones

if (nota == 10) { cout << "MH"; }

else if ((nota < 10) && (nota >= 9)) { cout << "SB"; }

else if ((nota < 9) && (nota >= 7)) { cout << "NT"; }

else if ((nota < 7) && (nota >= 5)) { cout << "AP"; }

else if (nota < 5)  { cout << "SS"; }

Página 299Fundamentos de la programación: Tipos e instrucciones II

00 55 77 99 1010

MHMH

SBSBNTNTAPAPSSSS

Siempretrue:ramaselseSinoes10,esmenorque10Sinoes>=9,esmenorque9Sinoes>=7,esmenorque7…

true && X  X

Siempretrue:ramaselseSinoes10,esmenorque10Sinoes>=9,esmenorque9Sinoes>=7,esmenorque7…

true && X  X

if (nota == 10) { cout << "MH"; }else if (nota >= 9) {cout << "SB"; }else if (nota >= 7) { cout << "NT"; }else if (nota >= 5) { cout << "AP"; }else { cout << "SS"; }

Luis Hernández Yáñez

Página 300Fundamentos de la programación: Tipos e instrucciones II

Si num == 4 entonces Muy altoSi num == 3 entonces AltoSi num == 2 entonces MedioSi num == 1 entonces Bajo

nivel.cppnivel.cpp

#include <iostream>using namespace std;int main() {

int num;cout << "Introduce el nivel: ";cin >> num;if (num == 4) {

cout << "Muy alto" << endl;}else if (num == 3) {

cout << "Alto" << endl;}else if (num == 2) {

cout << "Medio" << endl;}else if (num == 1) {

cout << "Bajo" << endl;}else {

cout << "Valor no válido" << endl;}return 0;

}

Page 39: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Página 301Fundamentos de la programación: Tipos e instrucciones II

if (num == 4) { cout << "Muy alto" << endl; }else if (num == 3) { cout << "Alto" << endl; }else if (num == 2) { cout << "Medio" << endl; }else if (num == 1) { cout << "Bajo" << endl; }else cout << "Valor no válido" << endl; }

if (num == 4) cout << "Muy alto";else if (num == 3) cout << "Alto";else if (num == 2) cout << "Medio";else if (num == 1) cout << "Bajo";else cout << "Valor no válido";cout << endl;

Luis Hernández Yáñez

Página 302Fundamentos de la programación: Tipos e instrucciones II

Page 40: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Selecciónentrevaloresposiblesdeunaexpresión

Página 303Fundamentos de la programación: Tipos e instrucciones II

switch (expresión) {case constante1:

{código1

}[break;]

case constante2:{

código2}[break;]

...

case constanteN:{

códigoN}[break;]

[default:{

códigoDefault}]

}

switch (expresión) {case constante1:

{código1

}[break;]

case constante2:{

código2}[break;]

...

case constanteN:{

códigoN}[break;]

[default:{

códigoDefault}]

}

Luis Hernández Yáñez

Página 304Fundamentos de la programación: Tipos e instrucciones II

nivel2.cppnivel2.cpp

switch (num) {case 4:

{cout << "Muy alto";

}break;

case 3:{

cout << "Alto";}break;

case 2:{

cout << "Medio";}break;

case 1:{

cout << "Bajo";}break;

default:{

cout << "Valor no válido";}

}

Sinum == 4MuyaltoSinum == 3 AltoSinum == 2MedioSinum == 1 Bajo

Page 41: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Interrumpe elswitch;continúaenlainstrucciónquelesiga

Num: 3AltoNum: 3Alto

Página 305Fundamentos de la programación: Tipos e instrucciones II

switch (num) {...case 3:

{cout << "Alto";

}break;

case 2:{

cout << "Medio";}break;

...}

Luis Hernández Yáñez

Página 306Fundamentos de la programación: Tipos e instrucciones II

switch (num) {...case 3:

{cout << "Alto";

}case 2:

{cout << "Medio";

}case 1:

{cout << "Bajo";

}default:

{cout << "Valor no válido";

}}

Num: 3AltoMedioBajoValor no válido

Num: 3AltoMedioBajoValor no válido

Page 42: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Página 307Fundamentos de la programación: Tipos e instrucciones II

num==4 Muy altotruetrue

Altotruetrue

Mediotruetrue

Bajotruetrue

num==3

falsefalse

num==2

falsefalse

num==1

falsefalse

falsefalse

No válidodefaultdefault

break;

break;

break;

break;

Sinbreak;

Sinbreak;

Sinbreak;

Sinbreak;

Luis Hernández Yáñez

int menu() {int op = ‐1; // Cualquiera no válida

while ((op < 0) || (op > 4)) {cout << "1 ‐ Nuevo cliente" << endl;cout << "2 ‐ Editar cliente" << endl;cout << "3 ‐ Baja cliente" << endl;cout << "4 ‐ Ver cliente" << endl;cout << "0 ‐ Salir" << endl;cout << "Opción: ";cin >> op;

if ((op < 0) || (op > 4)) {cout << "¡Opción no válida!" << endl;

}}

return op;}

Página 308Fundamentos de la programación: Tipos e instrucciones II

1 ‐ Nuevo cliente2 ‐ Editar cliente3 ‐ Baja cliente4 ‐ Ver cliente0 ‐ SalirOpción: 5¡Opción no válida!1 ‐ Nuevo cliente2 ‐ Editar cliente3 ‐ Baja cliente4 ‐ Ver cliente0 ‐ SalirOpción: 3

1 ‐ Nuevo cliente2 ‐ Editar cliente3 ‐ Baja cliente4 ‐ Ver cliente0 ‐ SalirOpción: 5¡Opción no válida!1 ‐ Nuevo cliente2 ‐ Editar cliente3 ‐ Baja cliente4 ‐ Ver cliente0 ‐ SalirOpción: 3

1 ‐ Nuevo cliente2 ‐ Editar cliente3 ‐ Baja cliente4 ‐ Ver cliente0 ‐ SalirOpción: 5¡Opción no válida!1 ‐ Nuevo cliente2 ‐ Editar cliente3 ‐ Baja cliente4 ‐ Ver cliente0 ‐ SalirOpción: 3

Page 43: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

int opcion;...opcion = menu();switch (opcion) {case 1:

{cout << "En la opción 1..." << endl;

}break;

case 2:{

cout << "En la opción 2..." << endl;}break;

case 3:{

cout << "En la opción 3..." << endl;}break;

case 4:{

cout << "En la opción 4..." << endl;} // En la última no necesitamos break

}

Página 309Fundamentos de la programación: Tipos e instrucciones II

Luis Hernández Yáñez

int opcion;...opcion = menu();while (opcion != 0) {

switch (opcion) {case 1:

{cout << "En la opción 1..." << endl;

}break;

...case 4:

{cout << "En la opción 4..." << endl;

}} // switch...opcion = menu();

} // while

Página 310Fundamentos de la programación: Tipos e instrucciones II

Page 44: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

int nota; // Sin decimalescout << "Nota (0‐10): ";cin >> nota;switch (nota) {case 0:case 1:case 2:case 3:case 4:

{cout << "Suspenso";

}break; // De 0 a 4: SS

case 5:case 6:

{cout << "Aprobado";

}break; // 5 o 6: AP

case 7:case 8:

{cout << "Notable";

}break; // 7 u 8: NT

case 9:case 10:

{cout << "Sobresaliente";

}break; // 9 o 10: SB

default:{

cout << "¡No válida!";}

}

Página 311Fundamentos de la programación: Tipos e instrucciones II

nota2.cppnota2.cppLuis Hernández Yáñez

Página 312Fundamentos de la programación: Tipos e instrucciones II

typedef enum { enero, febrero, marzo, abril, mayo, junio,julio, agosto, septiembre, octubre, noviembre, diciembre }

tMes;tMes mes;...switch (mes) {case enero:

{cout << "enero";

}break; 

case febrero:{

cout << "febrero";}break;

...case diciembre:

{cout << "diciembre";

}}

Page 45: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Página 313Fundamentos de la programación: Tipos e instrucciones II

Luis Hernández Yáñez

Página 314Fundamentos de la programación: Tipos e instrucciones II

Cuerpo

SíSí NoNo

Bucleswhile yfor

¿Iterar?¿Iterar?

Inicialización

Page 46: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Númerodeiteracionescondicionado(recorridovariable):

— Buclewhile

while (condición) cuerpo

Ejecutaelcuerpomientraslacondición seatrue

— Bucledo‐while

Compruebalacondiciónalfinal(loveremosmásadelante)

Númerodeiteracionesprefijado(recorridofijo):

— Buclefor

for (inicialización; condición; paso) cuerpo

Ejecutaelcuerpomientraslacondición seatrue

Seusaunavariablecontadoraentera

Página 315Fundamentos de la programación: Tipos e instrucciones II

Luis Hernández Yáñez

Página 316Fundamentos de la programación: Tipos e instrucciones II

Page 47: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Mientraslacondiciónseacierta,ejecutaelcuerpowhile (condición) {

cuerpo}

int i = 1; // Inicialización de la variable i

while (i <= 100) {

cout << i << endl;

i++;

}

Muestralosnúmerosdel1al100

Página 317Fundamentos de la programación: Tipos e instrucciones II

while.cppwhile.cpp

CondiciónalprincipiodelbucleCondiciónalprincipiodelbucle

Luis Hernández Yáñez

int i = 1;while (i <= 100) {

cout << i << endl; i++;

}

Página 318Fundamentos de la programación: Tipos e instrucciones II

Cuerpo

CondiciónCondicióntruetrue falsefalse

falsefalse

cout << i << endl;

truetrue

i++

i <= 100

i = 1

i ?123

_

_11

22

100100

33

4

9999

99100101

Page 48: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

¿Ysilacondiciónesfalsaalcomenzar?Noseejecutaelcuerpodelbucleningunavez

int op;

cout << "Introduce la opción: ";

cin >> op;

while ((op < 0) || (op > 4)) {

cout << "¡No válida! Inténtalo otra vez" << endl;

cout << "Introduce la opción: ";

cin >> op;

}

Sielusuariointroduceunnúmeroentre0y4:

Noseejecutaelcuerpodelbucle

Página 319Fundamentos de la programación: Tipos e instrucciones II

Luis Hernández Yáñez

Primerenterocuyocuadradoesmayorque1.000#include <iostream>using namespace std;

int main() {int num = 1;

while (num * num <= 1000) {num++;

}

cout << "1er. entero con cuadrado mayor que 1.000: "<< num << endl;

return 0;}

Página 320Fundamentos de la programación: Tipos e instrucciones II

¡Ejecutaelprogramaparasabercuálesesenúmero!¡Ejecutaelprogramaparasabercuálesesenúmero!

primero.cppprimero.cpp

Recorrelasecuencia denúmeros1,2,3,4,5,...Recorrelasecuencia denúmeros1,2,3,4,5,...

Empezamos en 1

Incrementamos en 1

Page 49: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Página 321Fundamentos de la programación: Tipos e instrucciones II

sumamedia.cppsumamedia.cpp

#include <iostream>using namespace std;int main() {

double num, suma = 0, media = 0;int cont = 0;cout << "Introduce un número (0 para terminar): ";cin >> num;while (num != 0) { // 0 para terminar

suma = suma + num;cont++;cout << "Introduce un número (0 para terminar): ";cin >> num;

}if (cont > 0) {

media = suma / cont;}cout << "Suma = " << suma << endl;cout << "Media = " << media << endl;return 0;

}

RecorrelasecuenciadenúmerosintroducidosRecorrelasecuencia

denúmerosintroducidos

Leemos el primero

Leemos el siguiente

Luis Hernández Yáñez

Página 322Fundamentos de la programación: Tipos e instrucciones II

Page 50: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

NúmerodeiteracionesprefijadoVariablecontadoraquedeterminaelnúmerodeiteraciones:

for ([int] var = ini; condición; paso) cuerpo

Lacondición comparaelvalordevar conunvalorfinal

Elpaso incrementaodecrementaelvalordevar

Elvalordevar debeiraproximándosealvalorfinal

for (int i = 1; i <= 100; i++)...

for (int i = 100; i >= 1; i‐‐)...

Tantoscicloscomovalorestomalavariablecontadora

Página 323Fundamentos de la programación: Tipos e instrucciones II

1, 2, 3, 4, 5, ..., 1001, 2, 3, 4, 5, ..., 100

100, 99, 98, 97, ..., 1100, 99, 98, 97, ..., 1

Luis Hernández Yáñez

for (inicialización; condición; paso) cuerpo

for (int i = 1; i <= 100; i++) {cout << i;

}

Página 324Fundamentos de la programación: Tipos e instrucciones II

falsefalse

cout << i;

truetrue

i++

i <= 100

i = 1

Page 51: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

for (int i = 1; i <= 100; i++) {cout << i << endl;

}

Página 325Fundamentos de la programación: Tipos e instrucciones II

_

11

i ?

falsefalsetruetrue

cout << i << endl;

i++

12

22

3

......

9999

100

100100

101

33

i <= 100i <= 100

i = 1

for1.cppfor1.cppLuis Hernández Yáñez

LavariablecontadoraElpaso notieneporquéirdeunoenuno:for (int i = 1; i <= 100; i = i + 2)

cout << i << endl;

Estebucleformuestralosnúmerosimparesde1a99

GarantíadeterminaciónTodobucledebeterminarsuejecuciónBuclesfor:lavariablecontadoradebeconvergeralvalorfinal

Página 326Fundamentos de la programación: Tipos e instrucciones II

MuyimportanteElcuerpodelbucleNUNCA debealterarelvalordelcontador

for2.cppfor2.cpp

Page 52: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Página 327Fundamentos de la programación: Tipos e instrucciones II

suma.cppsuma.cpp

#include <iostream>using namespace std;

long long int suma(int n);

int main() {int num;cout << "Número final: "; cin >> num;if (num > 0) { // El número debe ser positivo

cout << "La suma de los números entre 1 y " << num << " es: " << suma(num);

}return 0;

}

long long int suma(int n) {long long int total = 0;for (int i = 1; i <= n; i++) { 

total = total + i;}return total;

}

Recorrelasecuencia denúmeros1,2,3,4,5,...,n

Recorrelasecuencia denúmeros1,2,3,4,5,...,n

Luis Hernández Yáñez

¿Incremento/decrementoprefijoopostfijo?Esindiferente

Estosdosbuclesproducenelmismoresultado:

for (int i = 1; i <= 100; i++) ...

for (int i = 1; i <= 100; ++i) ...

Buclesinfinitos

for (int i = 1; i <= 100; i‐‐) ...

1 0 ‐1 ‐2 ‐3 ‐4 ‐5 ‐6 ‐7 ‐8 ‐9 ‐10 ‐11 ...

Cadavezmáslejosdelvalorfinal(100)

Esunerrordediseño/programación

Página 328Fundamentos de la programación: Tipos e instrucciones II

Page 53: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Declaradaenelpropiobuclefor (int i = 1; ...)

Sóloseconoceenelcuerpodelbucle(suámbito)

Nosepuedeusareninstruccionesquesiganalbucle

Declaradaantesdelbucleint i;

for (i = 1; ...)

Seconoceenelcuerpodelbucleydespuésdelmismo

Ámbitoexternoalbucle

Página 329Fundamentos de la programación: Tipos e instrucciones II

Luis Hernández Yáñez

Losbuclesfor sepuedenreescribircomobuclescondicionados

for (int i = 1; i <= 100; i++) cuerpo

Esequivalentea:

Lainversanoessiempreposible:int i;cin >> i;while (i != 0) {

cuerpocin >> i;

}

Página 330Fundamentos de la programación: Tipos e instrucciones II

int i = 1;while (i <= 100) {

cuerpoi++;

}

¿Buclefor equivalente?

¡Nosabemoscuántosnúmerosintroduciráelusuario!

¿Buclefor equivalente?

¡Nosabemoscuántosnúmerosintroduciráelusuario!

Page 54: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Página 331Fundamentos de la programación: Tipos e instrucciones II

Luis Hernández Yáñez

Unbuclefor enelcuerpodeotrobuclefor

Cadaunoconsupropiavariablecontadora:for (int i = 1; i <= 100; i++) {

for (int j = 1; j <= 5; j++) {

cuerpo

}

}

Paracadavalordeielvalordej varíaentre1 y5

j varíamásrápido quei

Página 332Fundamentos de la programación: Tipos e instrucciones II

i j1 11 21 31 41 52 12 22 32 42 53 1...

Page 55: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Página 333Fundamentos de la programación: Tipos e instrucciones II

1 x  1 =   11 x  2 =   21 x  3 =   31 x  4 =   4...1 x 10 =  102 x  1 =   22 x  2 =   4...

10 x  7 =  7010 x  8 =  8010 x  9 =  9010 x 10 = 100

1 x  1 =   11 x  2 =   21 x  3 =   31 x  4 =   4...1 x 10 =  102 x  1 =   22 x  2 =   4...

10 x  7 =  7010 x  8 =  8010 x  9 =  9010 x 10 = 100

1 x  1 =   11 x  2 =   21 x  3 =   31 x  4 =   4...1 x 10 =  102 x  1 =   22 x  2 =   4...

10 x  7 =  7010 x  8 =  8010 x  9 =  9010 x 10 = 100

tablas.cpptablas.cpp

#include <iostream>

using namespace std;

#include <iomanip>

int main() {

for (int i = 1; i <= 10; i++) {

for (int j = 1; j <= 10; j++) {

cout << setw(2) << i << " x "

<< setw(2) << j << " = "

<< setw(3) << i * j << endl;

}

}

return 0;

}

Luis Hernández Yáñez

Página 334Fundamentos de la programación: Tipos e instrucciones II

tablas2.cpptablas2.cpp

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

int main() {for (int i = 1; i <= 10; i++) {

cout << "Tabla del " << i << endl;cout << "‐‐‐‐‐‐‐‐‐‐‐‐‐‐" << endl;for (int j = 1; j <= 10; j++) {

cout << setw(2) << i << " x "<< setw(2) << j << " = "<< setw(3) << i * j << endl;

}cout << endl;

}

return 0;}

Page 56: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Página 335Fundamentos de la programación: Tipos e instrucciones II

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

int menu(); // 1: Tablas de multiplicación; 2: Sumatoriolong long int suma(int n); // Sumatorio

int main() {int opcion = menu();while (opcion != 0) {

switch (opcion) {case 1:

{for (int i = 1; i <= 10; i++) {

for (int j = 1; j <= 10; j++) {cout << setw(2) << i << " x "

<< setw(2) << j << " = "<< setw(3) << i * j << endl;

}}

}break; ...

menú.cppmenú.cppLuis Hernández Yáñez

Página 336Fundamentos de la programación: Tipos e instrucciones II

case 2:{

int num = 0;while (num <= 0) {

cout << "Hasta (positivo)? "; cin >> num;

}cout << "La suma de los números del 1 al "

<< num << " es: " << suma(num) << endl;}

} // switchopcion = menu();

} // while (opcion != 0)return 0;

}

Page 57: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Página 337Fundamentos de la programación: Tipos e instrucciones II

int menu() {int op = ‐1;while ((op < 0) || (op > 2)) {

cout << "1 ‐ Tablas de multiplicar" << endl;cout << "2 ‐ Sumatorio" << endl;cout << "0 ‐ Salir" << endl;cout << "Opción: " << endl;cin >> op;if ((op < 0) || (op > 2)) {

cout << "¡Opción no válida!" << endl;}

}return op;

}long long int suma(int n) {

long long int total = 0;for (int i = 1; i <= n; i++) { 

total = total + i;}return total;

}

Luis Hernández Yáñez

while (opcion != 0) {...

for (int i = 1; i <= 10; i++) {for (int j = 1; j <= 10; j++) {

...}

}

while (num <= 0) {...

}

for (int i = 1; i <= n; i++) {...

}while ((op < 0) || (op > 2)) {

...}

}

Página 338Fundamentos de la programación: Tipos e instrucciones II

menu()menu()

suma()suma()

Page 58: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Página 339Fundamentos de la programación: Tipos e instrucciones II

Luis Hernández Yáñez

Cadabloquecreaunnuevoámbito:

int main() {

double d = ‐1, suma = 0;int cont = 0;while (d != 0) {

cin >> d;if (d != 0) {

suma = suma + d;cont++;

}

}

cout << "Suma = " << suma << endl;cout << "Media = " << suma / cont << endl;return 0;

}

Página 340Fundamentos de la programación: Tipos e instrucciones II

3ámbitosanidados3ámbitosanidados

Page 59: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Unidentificadorseconoceenelámbitoenelqueestádeclarado

(apartirdesuinstruccióndedeclaración)yenlossubámbitosposteriores

Página 341Fundamentos de la programación: Tipos e instrucciones II

Luis Hernández Yáñez

ÁmbitodelavariabledÁmbitodelavariabledint main() {

double d;if (...) {

int cont = 0;for (int i = 0; i <= 10; i++) {

...}

}char c;if (...) {

double x;...

}return 0;

}

Página 342Fundamentos de la programación: Tipos e instrucciones II

Page 60: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

int main() {double d;if (...) {

int cont = 0;for (int i = 0; i <= 10; i++) {

...}

}char c;if (...) {

double x;...

}return 0;

}

ÁmbitodelavariablecontÁmbitodelavariablecont

Página 343Fundamentos de la programación: Tipos e instrucciones II

Luis Hernández Yáñez

int main() {double d;if (...) {

int cont = 0;for (int i = 0; i <= 10; i++) {

...}

}char c;if (...) {

double x;...

}return 0;

}

ÁmbitodelavariableiÁmbitodelavariablei

Página 344Fundamentos de la programación: Tipos e instrucciones II

Page 61: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

ÁmbitodelavariablecÁmbitodelavariablec

int main() {double d;if (...) {

int cont = 0;for (int i = 0; i <= 10; i++) {

...}

}char c;if (...) {

double x;...

}return 0;

}

Página 345Fundamentos de la programación: Tipos e instrucciones II

Luis Hernández Yáñez

ÁmbitodelavariablexÁmbitodelavariablex

int main() {double d;if (...) {

int cont = 0;for (int i = 0; i <= 10; i++) {

...}

}char c;if (...) {

double x;...

}return 0;

}

Página 346Fundamentos de la programación: Tipos e instrucciones II

Page 62: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Sienunsubámbitosedeclaraunidentificadorconidénticonombrequeunoyadeclaradoenelámbito,eldelsubámbitooculta aldelámbito

(noesvisible)

Página 347Fundamentos de la programación: Tipos e instrucciones II

Luis Hernández Yáñez

int main() {int i, x;if (...) {

int i = 0;for(int i = 0; i <= 10; i++) {

...}

}char c;if (...) {

double x;...

}return 0;

}

Página 348Fundamentos de la programación: Tipos e instrucciones II

Oculta,ensuámbito,alai anteriorOculta,ensuámbito,alai anterior

Oculta,ensuámbito,alai anteriorOculta,ensuámbito,alai anterior

Oculta,ensuámbito,alax anteriorOculta,ensuámbito,alax anterior

Page 63: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Página 349Fundamentos de la programación: Tipos e instrucciones II

Luis Hernández Yáñez

Sucesióndeelementosdeunmismotipoqueseaccedenlinealmente

Página 350Fundamentos de la programación: Tipos e instrucciones II

elemento secuenciasecuenciasecuencia

(Secuenciavacía)(Secuenciavacía)

1 34 12 26 4 87 184 52

Comienzaenunprimer elemento(sinoestávacía)

Acadaelementolesigueotrasecuencia(vacía,sieselúltimo)

Accesosecuencial(lineal)

Secomienzasiempreaccediendoalprimerelemento

Desdeunelementosólosepuedeaccederasuelementosiguiente(sucesor),siesqueexiste

Todosloselementos,deunmismotipo

elemento

oo

Page 64: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Notratamossecuenciasinfinitas:siemprehayunúltimoelemento

Secuenciasexplícitas:

— Sucesióndedatosdeundispositivo(teclado,disco,sensor,...)

Secuenciascalculadas:

— Fórmuladerecurrenciaquedeterminaelelementosiguiente

Listas(másadelante)

Secuenciasexplícitasquemanejaremos:

Datosintroducidosporeltecladooleídosdeunarchivo

Conunelementoespecialalfinaldelasecuencia(centinela)

1 34 12 26 4 87 184 52 ‐1

Página 351Fundamentos de la programación: Tipos e instrucciones II

Luis Hernández Yáñez

Secuenciaexplícitaleídadearchivo:— Detectarlamarcadefinaldearchivo(Eof ‐ End offile)

— Detectarunvalorcentinelaalfinal

Secuenciaexplícitaleídadelteclado:

— Preguntaralusuariosiquiereintroducirunnuevodato

— Preguntaralusuarioprimerocuántosdatosvaaintroducir

— Detectarunvalorcentinelaalfinal

Valorcentinela:

Valorespecialalfinalquenopuededarseenlasecuencia(Secuenciadenúmerospositivos centinela:cualquiernegativo)

Página 352Fundamentos de la programación: Tipos e instrucciones II

12 4 37 23 8 19 83 63 2 35 17 76 15 ‐1

Page 65: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Página 353Fundamentos de la programación: Tipos e instrucciones II

12 4 37 23 8 19 83 63 ‐1 35 17 76 15

ÚltimoelementoÚltimoelemento

NoseprocesanNoseprocesan

Debehaberalgúnvalorquenoseaunelementoválido

Secuenciasnuméricas:

Sisepermitecualquiernúmero,nohaycentinelaposible

Cadenasdecaracteres:

¿Caracteresespeciales(noimprimibles)?

Enrealidadelvalorcentinelaespartedelasecuencia,perosusignificadoesespecialynoseprocesacomoelresto

Significaquesehaalcanzadoelfinaldelasecuencia(Inclusoaunquehayaelementosposteriores)

Luis Hernández Yáñez

Tratamientodeloselementosunoaunodesdeelprimero

RecorridoUnmismotratamientoparatodosloselementosdelasecuencia

Ej.‐ Mostrarloselementosdeunasecuencia,sumarlosnúmerosdeunasecuencia,¿paroimparcadanúmerodeunasecuencia?,...

Terminaalllegaralfinaldelasecuencia

BúsquedaRecorridodelasecuenciahastaencontrarunelementobuscado

Ej.‐ Localizarelprimernúmeroqueseamayorque1.000

Terminaallocalizarelprimerelementoquecumplelacondiciónoalllegaralfinaldelasecuencia(noencontrado)

Página 354Fundamentos de la programación: Tipos e instrucciones II

Page 66: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Página 355Fundamentos de la programación: Tipos e instrucciones II

Luis Hernández Yáñez

Unmismotratamientoatodosloselementos

InicializaciónMientrasnoselleguealfinaldelasecuencia:ObtenerelsiguienteelementoProcesarelelemento

Finalización

Alempezarseobtieneelprimerelementodelasecuencia

Enlossiguientespasosdelbuclesevanobteniendolossiguienteselementosdelasecuencia

Página 356Fundamentos de la programación: Tipos e instrucciones II

Page 67: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Página 357Fundamentos de la programación: Tipos e instrucciones II

falsefalse

Procesarelemento

Obtenerelemento

truetrue

Finalización

¿Alfinal?

Inicialización

Nosabemoscuántoselementoshay Nopodemos

implementarconfor

Luis Hernández Yáñez

ImplementaciónconwhileInicialización

Obtenerelprimerelemento

Mientrasnoseaelcentinela:

Procesarelelemento

Obtenerelsiguienteelemento

Finalización

Página 358Fundamentos de la programación: Tipos e instrucciones II

falsefalse

Procesarelemento

Obtenersiguiente

truetrue

Finalización

¿Centinela?

Inicialización

Obtener1º

Page 68: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

SecuenciadenúmerospositivosSiempreserealizaalmenosunalecturaCentinela:‐1

double d, suma = 0;

cout << "Valor (‐1 termina): ";

cin >> d;

while (d != ‐1) {

suma = suma + d;

cout << "Valor (‐1 termina): ";

cin >> d;

}

cout << "Suma = " << suma << endl;

Página 359Fundamentos de la programación: Tipos e instrucciones II

InicializaciónInicialización

PrimerelementoPrimerelemento

MientrasnoelcentinelaMientrasnoelcentinela

ProcesarelementoProcesarelemento

SiguienteelementoSiguienteelemento

FinalizaciónFinalización

Luis Hernández Yáñez

LongituddeunasecuenciadecaracteresCentinela:carácterpunto(.)

Página 360Fundamentos de la programación: Tipos e instrucciones II

longitud.cpplongitud.cpp

int longitud() {int l = 0;char c;cout << "Texto terminado en punto: ";cin >> c;          // Obtener primer carácterwhile (c != '.') { // Mientras no el centinela

l++;            // Procesarcin >> c;       // Obtener siguiente carácter

}return l;

}

Page 69: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

¿Cuántasvecesapareceuncarácterenunacadena?Centinela:asterisco(*)

Página 361Fundamentos de la programación: Tipos e instrucciones II

cont.cppcont.cpp

char buscado, c;int cont = 0;cout << "Carácter a buscar: ";cin >> buscado;cout << "Cadena: ";cin >> c;while (c != '*') {

if (c == buscado) {cont++;

}cin >> c;

}cout << buscado << " aparece " << cont

<< " veces.";

MientrasnoelcentinelaMientrasnoelcentinela

ProcesarelementoProcesarelemento

SiguienteelementoSiguienteelemento

PrimerelementoPrimerelemento

Luis Hernández Yáñez

SumadelosnúmerosdelasecuenciaCentinela:0

Página 362Fundamentos de la programación: Tipos e instrucciones II

suma2.cppsuma2.cpp

int sumaSecuencia() {double d, suma = 0;ifstream archivo; // Archivo de entrada (lectura)archivo.open("datos.txt");if (archivo.is_open()) {

archivo >> d; // Obtener el primerowhile (d != 0) { // Mientras no sea el centinela

suma = suma + d; // Procesar el datoarchivo >> d; // Obtener el siguiente

}archivo.close();

}return suma;

}

Page 70: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Página 363Fundamentos de la programación: Tipos e instrucciones II

Luis Hernández Yáñez

Recurrencia: ei+1 =ei +1 e1 =11  2  3  4  5  6  7  8  ...

Sumadelosnúmerosdelasecuenciacalculada:

int main() {int num;cout << "N = ";cin >> num;cout << "Sumatorio:" << suma(num);return 0;

}long long int suma(int n) {

int sumatorio = 0;for (int i = 1; i <= n; i++) {

sumatorio = sumatorio + i;}return sumatorio;

}

Página 364Fundamentos de la programación: Tipos e instrucciones II

sumatorio.cppsumatorio.cpp

Últimoelementodelasecuencia:nÚltimoelementodelasecuencia:n

Page 71: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

long long int suma(int n) {int sumatorio = 0;for (int i = 1; i <= n; i++) {

sumatorio = sumatorio + i;}...

Página 365Fundamentos de la programación: Tipos e instrucciones II

n ?

sumatorio 0

i 1

i <= n01

2

5

3

3

6

4

10

5

15

6 12  13  2  14  3  2  15  4  3  2  1

SecuenciaSecuencia

falsefalse

truetrue

i = i + 1;

sumatorio += i;

int i = 1;

sumatorio = 0;

Luis Hernández Yáñez

DefiniciónFi =Fi‐1 +Fi‐2F1 =0

F2 =10 1 1 2 3 5 8 13 21 34 55 89 ... 

¿Findelasecuencia?PrimernúmerodeFibonaccimayorqueunnúmerodado

EsenúmerodeFibonacciactúacomocentinelaSinum es50,lasecuenciaserá:

0 1 1 2 3 5 8 13 21 34 

Página 366Fundamentos de la programación: Tipos e instrucciones II

Page 72: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Recorridodelasecuenciacalculada

Página 367Fundamentos de la programación: Tipos e instrucciones II

fibonacci.cppfibonacci.cpp

¿Demasiadoscomentarios?Paranooscurecerelcódigo,mejorunaexplicaciónalprincipio

int num, fib, fibMenos2 = 0, fibMenos1 = 1; // 1º y 2ºfib = fibMenos2 + fibMenos1; // Calculamos el tercerocout << "Hasta: ";cin >> num;if (num >= 1) { // Ha de ser entero positivo

cout << "0 1 "; // Los dos primeros son <= numwhile (fib <= num) { // Mientras no mayor que num

cout << fib << " ";fibMenos2 = fibMenos1; // Actualizamos anterioresfibMenos1 = fib; // para obtener...fib = fibMenos2 + fibMenos1; // ... el siguiente

}}

Luis Hernández Yáñez

Elbuclecalculaadecuadamentelasecuencia:

while (fib <= num) {

cout << fib << " ";

fibMenos2 = fibMenos1;

fibMenos1 = fib;

fib = fibMenos2 + fibMenos1;

}

Página 368Fundamentos de la programación: Tipos e instrucciones II

num ?100

fib ?1

fibMenos1 ?1

fibMenos2 ?0

0 1 1

1

1

22

2

33

2

3

55 ...

Page 73: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Página 369Fundamentos de la programación: Tipos e instrucciones II

Luis Hernández Yáñez

LocalizacióndelprimerelementoconunapropiedadInicialización

Mientrasnoseencuentreelelementoy noseestéalfinaldelasecuencia:

Obtenerelsiguienteelemento

Comprobarsielelementosatisfacelacondición

Finalización(tratarelelementoencontradooindicarquenosehaencontrado)

Página 370Fundamentos de la programación: Tipos e instrucciones II

Elementoquesebusca:satisfaráunacondición

Doscondicionesdeterminacióndelbucle:seencuentra/alfinal

Variablelógicaqueindiquesisehaencontrado

Page 74: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Localizacióndelprimerelementoconunapropiedad

falsefalse

¿Encontrado?

Obtenerelemento

truetrue

Finalización

Página 371Fundamentos de la programación: Tipos e instrucciones II

Inicialización/encontrado = false;

¿Alfinaloencontrado?¿Alfinalo

encontrado?

Luis Hernández Yáñez

ImplementaciónconwhileInicialización

Obtenerelprimerelemento

Mientrasniencontradonielcentinela:

Obtenerelsiguienteelemento

Finalización(¿encontrado?)

Página 372Fundamentos de la programación: Tipos e instrucciones II

falsefalse

Obtenersiguiente

truetrue

Finalización

¿Encontradoocentinela?¿Encontradoocentinela?

Obtener1º

Inicialización

Page 75: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

PrimernúmeromayorqueunodadoCentinela:‐1double d, num;bool encontrado = false;cout << "Encontrar primero mayor que: ";cin >> num;cout << "Siguiente (‐1 para terminar): ";cin >> d; // Obtener el primer elementowhile ((d != ‐1) && !encontrado) {// Mientras no sea el centinela y no se encuentre

if (d > num) { // ¿Encontrado?encontrado = true;

}else {

cout << "Siguiente (‐1 para terminar): ";cin >> d; // Obtener el siguiente elemento

}}

Página 373Fundamentos de la programación: Tipos e instrucciones II

busca.cppbusca.cpp

Luis Hernández Yáñez

Página 374Fundamentos de la programación: Tipos e instrucciones II

Page 76: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

ColeccioneshomogéneasUnmismotipodedatoparavarioselementos: Notas de los estudiantes de una clase Ventas de cada día de la semana Temperaturas de cada día del mes

...

EnlugardedeclararN variables...

Página 375Fundamentos de la programación: Tipos e instrucciones II

125.40

vLunvLun

76.95

vMarvMar

328.80

vMievMie

254.62

vJuevJue

435.00

vVievVie

164.29

vSabvSab

0.00

vDomvDom

ventas 125.40 76.95 328.80 254.62 435.00 164.29 0.00

0 1 2 3 4 5 6

...declaramosunatabladeN valores:

ÍndicesÍndices

Luis Hernández Yáñez

EstructurasecuencialCadaelementoseencuentraenunaposición(índice):

Losíndicessonenterospositivos

Elíndicedelprimerelementosiemprees0

Losíndicesseincrementandeunoenuno

Accesodirecto

Acadaelementoseaccedeatravésdesuíndice:ventas[4] accedeal5ºelemento(contieneelvalor435.00)cout << ventas[4];

ventas[4] = 442.75;

Página 376Fundamentos de la programación: Tipos e instrucciones II

ventas 125.40 76.95 328.80 254.62 435.00 164.29 0.00

0 1 2 3 4 5 6

Datosdeunmismotipobase:SeusancomocualquiervariableDatosdeunmismotipobase:Seusancomocualquiervariable

Page 77: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Declaracióndetiposdearraystypedef tipo_base nombre_tipo[tamaño];

Ejemplos:typedef double tTemp[7];

typedef short int tDiasMes[12];

typedef char tVocales[5];

typedef double tVentas[31];

typedef tMoneda tCalderilla[15]; // Enumerado tMoneda

Página 377Fundamentos de la programación: Tipos e instrucciones II

Recuerda: Adoptamoselconveniodecomenzarlosnombresdetipoconunatminúscula,seguidadeunaovariaspalabras,cadaunaconsuinicialenmayúscula

Recuerda: Adoptamoselconveniodecomenzarlosnombresdetipoconunatminúscula,seguidadeunaovariaspalabras,cadaunaconsuinicialenmayúscula

Luis Hernández Yáñez

Declaracióndevariablesarraystipo nombre;

Ejemplos:

Página 378Fundamentos de la programación: Tipos e instrucciones II

NOseinicializanloselementosautomáticamenteNOseinicializanloselementosautomáticamente

tempMax ? ? ? ? ? ? ?0 1 2 3 4 5 6

typedef double tTemp[7];typedef short int tDiasMes[12];typedef char tVocales[5];typedef double tVentas[31];

ventasFeb ? ? ? ? ? ? ? ? ? ? ? ? ? ... ?0 1 2 3 4 5 6 7 8 9 10 11 12 30

vocales ? ? ? ? ?0 1 2 3 4

diasMes ? ? ? ? ? ? ? ? ? ? ? ?0 1 2 3 4 5 6 7 8 9 10 11

tTemp tempMax;

tDiasMes diasMes;

tVocales vocales;

tVentas ventasFeb;

Page 78: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Página 379Fundamentos de la programación: Tipos e instrucciones II

Luis Hernández Yáñez

nombre[índice]

Cadaelementoseaccedeatravésdesuíndice(posiciónenelarray)tVocales vocales;

5elementos,índicesde0a4:vocales[0]   vocales[1]   vocales[2]   vocales[3]   vocales[4]

Procesamientodecadaelemento:

Comocualquierotravariabledeltipobasecout << vocales[4];

vocales[3] = 'o';

if (vocales[i] == 'e') ...

Página 380Fundamentos de la programación: Tipos e instrucciones II

vocales 'a' 'e' 'i' 'o' 'u'

0 1 2 3 4

typedef char tVocales[5];

Page 79: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

¡IMPORTANTE!

¡Nosecompruebasielíndiceescorrecto!

¡Esresponsabilidaddelprogramador!

const int Dim = 100;typedef double tVentas[Dim];tVentas ventas;

Índicesválidos:enterosentre0yDim‐1ventas[0]  ventas[1]  ventas[2] ... ventas[98]  ventas[99]

¿Quéesventas[100]?¿Oventas[‐1]?¿Oventas[132]?

¡Memoriadealgunaotravariabledelprograma!

Página 381Fundamentos de la programación: Tipos e instrucciones II

DefinelostamañosdelosarraysconconstantesDefinelostamañosdelosarraysconconstantes

Luis Hernández Yáñez

Página 382Fundamentos de la programación: Tipos e instrucciones II

Page 80: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Arrays:tamañofijo Buclederecorridofijo(for)

Ejemplo:Mediadeunarraydetemperaturasconst int Dias = 7;typedef double tTemp[Dias];tTemp temp;double media, total = 0; ...for (int i = 0; i < Dias; i++) {

total = total + temp[i];}media = total / Dias;

Página 383Fundamentos de la programación: Tipos e instrucciones II

Luis Hernández Yáñez

tTemp temp;double media, total = 0; ...for (int i = 0; i < Dias; i++) {

total = total + temp[i];}

Memoria

Dias 7

temp[0] 12.40

temp[1] 10.96

temp[2] 8.43

temp[3] 11.65

temp[4] 13.70

temp[5] 13.41

temp[6] 14.07

media ?

total 0.00

i 0

12.40

1

23.36

2

31.79

3

43.44

4

84.62

7

Página 384Fundamentos de la programación: Tipos e instrucciones II

12.40 10.96 8.43 11.65 13.70 13.41 14.07

0 1 2 3 4 5 6

falsefalsetruetrue

total+=temp[i]

i++

i<Dias

i = 0

......

Page 81: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Losusuariosusande1a7paranumerarlosdíasLainterfazdebeaproximarsealosusuarios,

aunqueinternamenteseusenlosíndicesde0a6

#include <iostream>using namespace std;

const int Dias = 7;typedef double tTemp[Dias];

double media(const tTemp temp);

int main() {tTemp temp;for (int i = 0; i < Dias; i++) { // Recorrido del array

cout << "Temperatura del día " << i + 1 << ": ";cin >> temp[i];

}cout << "Temperatura media: " << media(temp) << endl;return 0;

}...

Página 385Fundamentos de la programación: Tipos e instrucciones II

mediatemp.cppmediatemp.cppLuis Hernández Yáñez

double media(const tTemp temp) {double med, total = 0; 

for (int i = 0; i < Dias; i++) { // Recorrido del arraytotal = total + temp[i];

}med = total / Dias;

return med;}

Página 386Fundamentos de la programación: Tipos e instrucciones II

Losarrayssepasanalasfuncionescomoconstantes

Lasfuncionesnopuedendevolverarrays

Losarrayssepasanalasfuncionescomoconstantes

Lasfuncionesnopuedendevolverarrays

Page 82: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

const int Cuantas = 15;

typedef enum { centimo, dos_centimos, cinco_centimos,diez_centimos, veinte_centimos, medio_euro, euro } tMoneda;

typedef tMoneda tCalderilla[Cuantas];

string aCadena(tMoneda moneda);// Devuelve la cadena correspondiente al valor de moneda

tCalderilla bolsillo; // Exactamente llevo Cuantas monedas

bolsillo[0] = euro;

bolsillo[1] = cinco_centimos;

bolsillo[2] = medio_euro;

bolsillo[3] = euro;

bolsillo[4] = centimo;

...

for (int moneda = 0; moneda < Cuantas; moneda++)

cout << aCadena(bolsillo[moneda]) << endl;

Página 387Fundamentos de la programación: Tipos e instrucciones II

Luis Hernández Yáñez

Página 388Fundamentos de la programación: Tipos e instrucciones II

Page 83: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

¿Quédíalasventassuperaronlos1.000€?const int Dias = 365; // Año no bisiestotypedef double tVentas[Dias];

int busca(const tVentas ventas) {// Índice del primer elemento mayor que 1000 (‐1 si no hay)

bool encontrado = false; int ind = 0;while ((ind < Dias) && !encontrado) { // Esquema de búsqueda

if (ventas[ind] > 1000) {encontrado = true;

}else {

ind++;}

}if (!encontrado) {

ind = ‐1;}return ind;

}

Página 389Fundamentos de la programación: Tipos e instrucciones II

buscaarray.cppbuscaarray.cppLuis Hernández Yáñez

Página 390Fundamentos de la programación: Tipos e instrucciones II

Page 84: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Lacapacidaddeunarraynopuedeseralteradaenlaejecución

Eltamañodeunarrayesunadecisióndediseño:

Enocasionesseráfácil(díasdelasemana)

CuandopuedavariarhadeestimarseuntamañoNicortoniconmuchodesperdicio(posicionessinusar)

STL (StandardTemplateLibrary)deC++:Coleccionesmáseficientescuyotamañopuedevariar

Página 391Fundamentos de la programación: Tipos e instrucciones II

Luis Hernández Yáñez

Nosepuedencopiardosarrays(delmismotipo)conasignación:array2 = array1; // ¡¡¡ NO COPIA LOS ELEMENTOS !!!

Handecopiarseloselementosunoauno:for (int i = 0; i < N; i++) {

array2[i] = array1[i];}

Página 392Fundamentos de la programación: Tipos e instrucciones II

Page 85: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Página 393Fundamentos de la programación: Tipos e instrucciones II

Luis Hernández Yáñez

Puedequenonecesitemostodaslasposicionesdeunarray...

Ladimensióndelarrayseráelmáximodeelementos

Peropodremostenermenoselementosdelmáximo

Necesitamosuncontadordeelementos...const int Max = 100;typedef double tArray[Max];tArray lista;int contador = 0;

contador:indicacuántasposicionesdelarrayseutilizan

Sóloaccederemosalasposicionesentre0ycontador‐1

Lasdemásposicionesnocontieneninformacióndelprograma

Página 394Fundamentos de la programación: Tipos e instrucciones II

Page 86: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

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

const int Max = 100;typedef double tArray[Max];

double media(const tArray lista, int cont);

int main() {tArray lista;int contador = 0;double valor, med;ifstream archivo;archivo.open("lista.txt");if (archivo.is_open()) {

archivo >> valor;while ((valor != ‐1) && (contador < Max)) {

lista[contador] = valor;contador++;archivo >> valor;

} ...

Página 395Fundamentos de la programación: Tipos e instrucciones II

lista.cpplista.cppLuis Hernández Yáñez

archivo.close();med = media(lista, contador);cout << "Media de los elementos de la lista: " << med << endl;

}else {

cout << "¡No se pudo abrir el archivo!" << endl;}

return 0;}

double media(const tArray lista, int cont) {double med, total = 0;for (int ind = 0; ind < cont; ind++) {

total = total + lista[ind];}med = total / cont;return med;

}

Página 396Fundamentos de la programación: Tipos e instrucciones II

Sólorecorremoshastacont‐1Sólorecorremoshastacont‐1

Page 87: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

LicenciaCC(Creative Commons)Estetipodelicenciasofrecenalgunosderechosaterceraspersonasbajociertascondiciones.

Estedocumentotieneestablecidaslassiguientes:

Pulsaenlaimagendearribaaladerechaparasabermás.

Fundamentos de la programación: Tipos e instrucciones II Página 397

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

Nocomercial(Noncommercial):Laexplotacióndelaobraquedalimitadaausosnocomerciales.

Compartirigual(Sharealike):Laexplotaciónautorizadaincluyelacreacióndeobrasderivadassiemprequemantenganlamismalicenciaalserdivulgadas.

Page 88: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

3A

GradoenIngenieríaInformáticaGradoenIngenieríadelSoftware

GradoenIngenieríadeComputadores

LuisHernándezYáñez

FacultaddeInformáticaUniversidadComplutense

Fundamentos de la programación Luis Hernández Yáñez

ExpresióncondicionalDosalternativas

— Condición:Expresiónlógica

— Exp1 yExp2:ExpresionesSiCondición seevalúaatrue,elresultadoesExp1;siCondición seevalúaafalse,elresultadoesExp2.int a = 5, b = 3, c;

c = (a + b == 10) ? 2 : 3;

c = (  8 == 10) ? 2 : 3;

c =     false ? 2 : 3;

c = 3;

Página 399Fundamentos de la programación: Tipos e instrucciones II (Anexo I)

Condición Exp1

Operadores (prioridad)

++ ‐‐ (postfijos)LlamadasafuncionesMoldes

++ ‐‐ (prefijos) !‐ (cambiodesigno)

* / %

+ ‐

< <= > >=

== !=

&&

||

?:

= += ‐= *= /= %=

Exp2:?

Page 89: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Equivalenciaconunif‐else

c = (a + b == 10) ? 2 : 3;

Esequivalentea:

if (a + b == 10) c = 2;

else c = 3;

Sepuedenconcatenar:

cout << (nota == 10 ? "MH" : (nota >= 9 ? "SB" : (nota >= 7 ? "NT" : (nota >= 5 ? "AP" : "SS"))))

Estoesequivalentealaescalaif‐else‐if delasiguientesección.

Página 400Fundamentos de la programación: Tipos e instrucciones II (Anexo I)

Luis Hernández Yáñez

Escalaif ...else if ...equivalentecout << (nota == 10 ? "MH" : (nota >= 9 ? "SB" : (nota >= 7 ? "NT" : (nota >= 5 ? "AP" : "SS"))))

Sinota == 10 entoncesMHsino,sinota >= 9 entoncesSBsino,sinota >= 7 entoncesNTsino,sinota >= 5 entoncesAPsinoSS

double nota;

cin >> nota;

if (nota == 10) { cout << "MH"; }

else if (nota >= 9) { cout << "SB"; }

else if (nota >= 7) { cout << "NT"; }

else if (nota >= 5) { cout << "AP"; }

else { cout << "SS"; }

Página 401Fundamentos de la programación: Tipos e instrucciones II (Anexo I)

"MH"

"SB">= 9

"NT">= 7

"AP">= 5

== 10

truetrue

truetrue

truetrue

truetrue

falsefalse

falsefalse

falsefalse

falsefalse

"SS"

Page 90: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

3E

GradoenIngenieríaInformáticaGradoenIngenieríadelSoftware

GradoenIngenieríadeComputadores

LuisHernándezYáñez

FacultaddeInformáticaUniversidadComplutense

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

Fundamentos de la programación: Tipos e instrucciones II (Anexo II)

Recorridos 404Un aparcamiento 405¿Paréntesis bien emparejados? 409¿Dos secuencias iguales? 412Números primos menores que N 413

Búsquedas 417Búsqueda de un número en un archivo 419Búsquedas en secuencias ordenadas 420

Page 91: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Página 404Fundamentos de la programación: Tipos e instrucciones II (Anexo II)

Luis Hernández Yáñez

SecuenciadecaracteresEySenarchivoE=Entrauncoche;S=Saleuncoche

¿Cuántoscochesquedanalfinaldelajornada?

Varioscasos,cadaunoenunalíneayterminadoenpunto

Final:líneasóloconpunto

Página 405Fundamentos de la programación: Tipos e instrucciones II (Anexo II)

Page 92: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Página 406Fundamentos de la programación: Tipos e instrucciones II (Anexo II)

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

int main() {int coches;char c;bool terminar = false;ifstream archivo;archivo.open("parking.txt");if (!archivo.is_open()) {

cout << "¡No se ha podido abrir el archivo!" << endl;}else {

// Recorrido...archivo.close();

}return 0;

}

Luis Hernández Yáñez

Página 407Fundamentos de la programación: Tipos e instrucciones II (Anexo II)

while (!terminar) {archivo >> c;if (c == '.') { // . como primer carácter? (centinela)

terminar = true;}else {

coches = 0;while (c != '.') { // Recorrido de la secuencia

cout << c;if (c == 'E') {

coches++;}else if (c == 'S') {

coches‐‐;}archivo >> c;

}...

Page 93: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Página 408Fundamentos de la programación: Tipos e instrucciones II (Anexo II)

if (coches >= 0) {cout << endl << "Quedan " << coches << " coches.";

}else {

cout << endl << "Error: Más salidas que entradas!";}cout << endl;

}}

parking.cppparking.cppLuis Hernández Yáñez

Cadaparéntesis,consuparejaSecuenciadecaracteresterminadaen#yconparejasdeparéntesis:

a b ( c ( d e ) f g h ( ( i ( j k ) ) l m n ) o p ) ( r s ) #

Contadordelniveldeanidamiento:

Alencontrar'(' incrementamos– Alencontrar')' decrementamos

Alterminar,elcontadordeberátenerelvalor0

Errores:

— Contador‐1:paréntesisdecierresinunodeaperturapendienteabc)de(fgh(ij))#

— ContadorterminaconunvalorpositivoMásparéntesisdeaperturaquedecierreAlgúnparéntesissincerrar:(a(b(cd(e)f)gh(i))jk#

Página 409Fundamentos de la programación: Tipos e instrucciones II (Anexo II)

Page 94: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Unerrorpuedeinterrumpirelrecorrido:char c;int anidamiento = 0, pos = 0;bool error = false;cin >> c;while ((c != '#') && !error) {

pos++;if (c == '(') {

anidamiento++;}else if (c == ')') {

anidamiento‐‐;}if (anidamiento < 0) {

error = true;}if (!error) {

cin >> c;}

}

Página 410Fundamentos de la programación: Tipos e instrucciones II (Anexo II)

Luis Hernández Yáñez

if (error) {cout << "Error: cierre sin apertura (pos. " << pos 

<< ")";}else if (anidamiento > 0) {

cout << "Error: Apertura sin cierre";}else {

cout << "Correcto";}cout << endl;

Página 411Fundamentos de la programación: Tipos e instrucciones II (Anexo II)

parentesis.cppparentesis.cpp

Page 95: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Página 412Fundamentos de la programación: Tipos e instrucciones II (Anexo II)

iguales.cppiguales.cpp

bool iguales() {bool sonIguales = true;double d1, d2;ifstream sec1, sec2;bool final = false;sec1.open("secuencia1.txt");sec2.open("secuencia2.txt");sec1 >> d1;sec2 >> d2; // Al menos estarán los centinelas (0)while (sonIguales && !final) {

sonIguales = (d1 == d2);final = ((d1 == 0) || (d2 == 0));if (!final) {

sec1 >> d1;sec2 >> d2;

}}sec1.close();sec2.close();return sonIguales;

}

Cambiasecuencia2.txt porsecuencia3.txtyporsecuencia4.txt paracomprobarotroscasosCambiasecuencia2.txt porsecuencia3.txtyporsecuencia4.txt paracomprobarotroscasos

Luis Hernández Yáñez

Secuenciacalculada:númerosdivisiblessólopor1yellosmismos(<N)

Página 413Fundamentos de la programación: Tipos e instrucciones II (Anexo II)

primos.cppprimos.cpp

#include <iostream>using namespace std;bool primo(int n);int main() {

int num, candidato;cout << "Entero en el que parar (>1): ";cin >> num;if (num > 1) {

candidato = 2; // El 1 no se considera un número primowhile (candidato < num) {

cout << candidato << " "; // Mostrar número primocandidato++;while (!primo(candidato)) { // Siguiente primo

candidato++;}

}}return 0;

}

Page 96: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Página 414Fundamentos de la programación: Tipos e instrucciones II (Anexo II)

bool primo(int n) {bool esPrimo = true;

for (int i = 2; i <= n ‐ 1; i++) {if (n % i == 0) {

esPrimo = false; // Es divisible por i}

}

return esPrimo;}

Luis Hernández Yáñez

Mejoras: probarsóloimpares;sólopuedenserdivisiblesporimpares;nopuedenserdivisiblesporningunomayorquesumitad

Página 415Fundamentos de la programación: Tipos e instrucciones II (Anexo II)

primos2.cppprimos2.cpp

candidato = 2;cout << candidato << " "; // Mostrar el número primo 2candidato++; // Seguimos con el 3, que es primowhile (candidato < num) {

cout << candidato << " ";   // Mostrar número primocandidato = candidato + 2;  // Sólo probamos impareswhile (!primo(candidato)) { // Siguiente número primo

candidato = candidato + 2;}

} ...

bool primo(int n) {bool esPrimo = true;for (int i = 3; i <= n / 2; i = i + 2) {

if (n % i == 0) {esPrimo = false; // Es divisible por i

}}...

Page 97: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Otramejoramás:Paramosalencontrarelprimerdivisor

Página 416Fundamentos de la programación: Tipos e instrucciones II (Anexo II)

primos3.cppprimos3.cpp

bool primo(int n) {bool esPrimo = true;

int i = 3;while ((i <= n / 2) && esPrimo) {

if (n % i == 0) {esPrimo = false;

}i = i + 2;

}

return esPrimo;}

Luis Hernández Yáñez

Página 417Fundamentos de la programación: Tipos e instrucciones II (Anexo II)

Page 98: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Página 418Fundamentos de la programación: Tipos e instrucciones II (Anexo II)

buscaarch.cppbuscaarch.cpp#include <iostream>using namespace std;#include <fstream>

int busca(int n);// Devuelve la línea en la que se encuentra o ‐1 si no está

int main() {int num, linea;

cout << "Valor a localizar: ";cin >> num;linea = busca(num);if (linea != ‐1) {

cout << "Encontrado (línea " << linea << ")" << endl;}else {

cout << "No encontrado" << endl;}return 0;

}

Luis Hernández Yáñez

Página 419Fundamentos de la programación: Tipos e instrucciones II (Anexo II)

int busca(int n) {int i, linea = 0;bool encontrado = false;ifstream archivo;archivo.open("enteros.txt");if (!archivo.is_open()) {

linea = ‐1;}else {

archivo >> i;while ((i != 0) && !encontrado) {

linea++;if (i == n) {

encontrado = true;}archivo >> i;

}if (!encontrado) {

linea = ‐1;}archivo.close();

}return linea;

}

CentinelaCentinela

Page 99: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Página 420Fundamentos de la programación: Tipos e instrucciones II (Anexo II)

Luis Hernández Yáñez

Secuenciaordenadademenoramayor:paramosalencontrarunomayoroigualalbuscado

Losquerestenseránseguromayores:¡nopuedeestarelbuscado!

Página 421Fundamentos de la programación: Tipos e instrucciones II (Anexo II)

buscaord.cppbuscaord.cpp

cout << "Valor a localizar: ";cin >> num;archivo >> i;while ((i != 0) && (i < num)) {

cont++;archivo >> i;

}if (i == num) {

cout << "Encontrado (pos.: " << cont << ")";}else {

cout << "No encontrado";}cout << endl;archivo.close();

Page 100: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

Sielelementoestá:procesamientosimilarasecuenciasdesordenadas

Página 422Fundamentos de la programación: Tipos e instrucciones II (Anexo II)

falsefalse(i != 0) && (i < num)

truetrue

cont++;archivo >> i;

2 5 9 15 16 24 41 73 78 82 123 153 159 ...

num ?

i ?2

9

59

archivo >> i;

Luis Hernández Yáñez

Sielelementonoestá:evitamosbuscarenelrestodelasecuencia

Página 423Fundamentos de la programación: Tipos e instrucciones II (Anexo II)

falsefalse(i != 0) && (i < num)

truetrue

cont++;archivo >> i;

2 5 9 15 16 24 41 73 78 82 123 153 159 ...

num ?

i ?2

10

5915

Noseprocesaelrestodelasecuencia

Noseprocesaelrestodelasecuencia

archivo >> i;

Page 101: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Luis Hernández Yáñez

LicenciaCC(Creative Commons)Estetipodelicenciasofrecenalgunosderechosaterceraspersonasbajociertascondiciones.

Estedocumentotieneestablecidaslassiguientes:

Pulsaenlaimagendearribaaladerechaparasabermás.

Fundamentos de la programación: Tipos e instrucciones II (Anexo II) Página 424

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

Nocomercial(Noncommercial):Laexplotacióndelaobraquedalimitadaausosnocomerciales.

Compartirigual(Sharealike):Laexplotaciónautorizadaincluyelacreacióndeobrasderivadassiemprequemantenganlamismalicenciaalserdivulgadas.

Page 102: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Fundamentos de la programación    Ejercicios del Tema 3 — Pág. 1 

Facultad de Informática – Universidad Complutense 

Fundamentos de la programación Curso 2013–2014 

HojadeejerciciosdelTema3

1. Conversionesdetipos:Pruebaelsiguienteprogramaentucompilador(copiaypega).Compruebalosproblemasquesegeneranenlasconversionesinseguras.

#include <iostream> using namespace std;  int main() {    double real;    int entero;    short int corto;    char caracter;        // Conversiones "hacia arriba" (seguras)    cout << "Introduce un carácter: ";    cin >> caracter;    corto = caracter;    cout << "Entero corto: " << corto << endl;    entero = corto;    cout << "Entero: " << entero << endl;    real = entero;    cout << "Real: " << real << endl;        // Conversiones "hacia abajo" (inseguras)    cout << "Introduce un real muy grande: ";    cin >> real;    entero = real;    cout << "Entero: " << entero << endl;    corto = entero;    cout << "Entero corto: " << corto << endl;    caracter = corto;    cout << "Carácter: " << caracter << endl;       return 0; } 

2. Declara un tipo enumerado tCalificacion con los valores noPresentado,suspenso,aprobado,notable,sobresalienteymatriculaDeHonor.Luego,declaradosvariablesnota1ynota2,yleeenellasdoscalificacionesnuméricas

Page 103: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Fundamentos de la programación    Ejercicios del Tema 3 — Pág. 2 

de 0 a 10 (con un decimal). Asigna a dos variablescalif1 ycalif2, de tipotCalificacion,elvalorquelescorresponda,deacuerdoconlosvaloresdelascorrespondientesvariablesnuméricas(0:noPresentado).Finalmente,muestracadanotanuméricaseguidade lacalificacióntextualque lecorresponde.(Sólomostrarálascalificacionessiambasnotasestánentre0y10.)Elprogramausarálasfuncionesadecuadas.

3. Disponemosdecuatrovariacionesdeunarchivodetextoentrada.txt:

Caso 1 Caso 2 Caso 3 Caso 4

134 

12.4 

14256.789 

27.4 

100 

134 12.4    c    1 2 

14256.789 

13.4 

12 

.18.2   14.7 

13.4 

12 

 

Sitenemoselsiguientefragmentodecódigo:

int entero1; 

float float1; 

double double1; 

char car1, car2; 

ifstream archivo; 

archivo.open("entrada.txt"); // Apertura 

archivo >> entero1 >> double1 >> car1;  

archivo >> float1 >> car2; 

... 

Indicaelvalordecadaunadelasvariablesdespuésdeejecutardichofragmentodecódigoconloscuatroejemplosdearchivodeentrada.¡Sinejecutarelcódigoconuncompilador!

4. ¿Cuálseráelcontenidodelarchivosalida.txtdespuésdeejecutarelsiguienteprograma?(Indicaelresultadosinejecutarelcódigoenuncompilador.)

#include <iostream> using namespace std; #include <fstream> #include <iomanip>  int main() {    ofstream archivo;    bool llueve = false;    int i = 35;    double d1 = 123; 

Page 104: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Fundamentos de la programación    Ejercicios del Tema 3 — Pág. 3 

   double d2 = 123.45;    char c = 'x';    float f = 3.14;     archivo.open("salida.txt"); // Creación del archivo    archivo << "Hoy llueve  = " << llueve             << boolalpha << llueve << endl;    archivo << i << right << setw(8) << i << endl;    archivo << d1 << scientific << right << setw(8) << d1 << endl;    archivo << d2 << right << fixed << setw(8)             << setprecision(3) << d2 << endl;    archivo << c << setw(8) << left << c << endl;    archivo << f << right << setw(5) << setprecision(3)             << f << endl;    archivo << scientific << d2 << fixed << endl;    archivo << setprecision(8) << d2 << endl;    archivo.close(); // Cierre del archivo      return 0; } 

5. Escribe un programa que solicite un carácter por teclado e informe de si esalfanuméricoono(letraodígito).Encasodeseralfanuméricodeberáindicarsies una letra o un dígito. En caso de ser una letra deberá informar de si esminúsculaomayúscula.Pararesolveresteejercicionosedebenusarlasfuncionesisalnum(), isalpha(), isdigit(), islower() o isupper(), sino que sedebendefinirlascorrespondientesfuncionespropias.

6. Debidoaunapertinazsequíasedecidióponerenprácticaunsistemadecobrodeaguaquepenaliceelconsumoexcesivotalcomoindicalatablasiguiente:

Consumo(m3) €/m3

Primeros100 0,15

De100a500 0,20

De500a1000 0,35

Másde1000 0,80

Escribeunprogramaqueleadeltecladolosmetroscúbicosconsumidosymuestreenlapantallaelcostedeaguatotal.Tenencuentaqueenlatablaseindicaloquehay que cobrar por los m3 que se encuentran en el intervalo. Así, si hemosconsumido750m3deberíamospagar: 100 *0,15+400 *0,20+250 *0,35=182,50€.Usaconstantes.

7. ModificaelEjercicio19delahojadelTema2deformaqueutiliceunainstrucciónswitchenlugardeinstruccionesif.Además,elprogramapermitiráalusuariovolveracalcularoterminar.

Page 105: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Fundamentos de la programación    Ejercicios del Tema 3 — Pág. 4 

8. Escribe un programa que lea caracteres del teclado hasta que el usuariointroduzcaun*.Loscaracteressesolicitaneintroducenunoauno,cadaunoenunalínea(seguidosdeIntro).Elprogramadebecontarelnúmerodedígitos,letrasmayúsculas y letras minúsculas introducidas y, cuando haya finalizado laintroducción de datos, mostrar cuántos caracteres de cada tipo había. ElprogramausarálasfuncionesdesarrolladasenelEjercicio5.

9. Modificaelprogramaanteriordemodoqueloscaracteresseintroduzcantodosen lamisma líneaacabadosensaltode línea(Intro) (noenasterisco). ¡Yquecuentetambiénlosespaciosenblanco!

10. Escribeunprogramaqueleaunnúmeroenteropositivodeltecladoymuestrelasumadesusdígitos.Porejemplo,sielenteroes932,mostrará14(9+3+2).Elprogramausaráunafunciónquecalculelasumadelosdígitosdeunentero.

11. Modificaelprogramaanteriordeformaquesilasumadelosdígitosesmayorque9, repita el proceso sobre la propia suma, hasta obtener un valor entre 1 y 9.Ése es el que se conoce como dígitomágico del número introducido y serácalculadoconunafuncióndelprograma.

12. Escribeunprogramaqueleaunnúmeroenteropositivodeltecladoylomuestreinvertidoenlapantalla.Seentiendeporinvertireldarlavueltaalosdígitosquecomponenelnúmero(suimagenespecular).Estoes,elinversode3952es2593.Elprogramautilizaráunafunciónquedevuelvaunacadenaconelnºinvertido.

13. Escribeunprogramaqueinviertacadanúmeroenteropositivoqueseintroduzcaporteclado.Elprogramaactuarádeformacíclica,finalizandolaejecucióncuandoseintroduzcaunnúmeronegativooelcero.

14. Escribe un programa que genere un archivooutput.txt en el que aparezcan invertidos losnúmeros enteros estrictamente positivos (>0)quehayaenotroarchivoinput.txt.Cada líneade input.txt contendrá un número entero yterminaráenunalíneaconun0(centinela).

15. Escribeunprogramaquelealosnúmerosdeunarchivodatos.txt(cadalíneacontieneunnúmero realpositivo) ymuestreen lapantalla elmayorde todosellos.Elarchivoterminaconun0comocentinela.

input.txt output.txt

1234 

56 

1000 

‐987 

54321 

4321 

65 

0001 

12345 

Page 106: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Fundamentos de la programación    Ejercicios del Tema 3 — Pág. 5 

16. Elcuadradodeunnúmeroenteroesigualalasumadetantosnúmerosimparesconsecutivos(desde launidad)comounidades tieneelnúmero.Esdecir,32esiguala1+3+5(3impares)y52esiguala1+3+5+7+9(5impares).

Implementaunprogramaquesoliciteenterosalusuarioymuestreenlapantallasu cuadrado calculado conel algoritmo indicado.Elprogramadeberá finalizarcuandoseintroduzcaelvalor0.Usaráunafunciónparacalcularloscuadrados.

17. Implementaunprogramaqueleadeltecladosecuenciasdecaracteresterminadasenpuntoyque,paracadasecuencia,cuenteymuestreenlapantallaelnúmerodeblancos,letrasydígitosquehayentrelaprimeraparejadeparéntesis.Sisólohayunparéntesisdeapertura,elrecuentoseguiráhastaelfinaldelasecuencia.Puedenohaberningunaparejadeparéntesis.Elprogramasolicitarásecuenciashastaqueseintroduzcaunalíneaconsóloelpunto.

Unejemplodeejecucióndelprogramaseríaelsiguiente:

Entrada: Esto es (una prueba) de secuencia de entrada.↲ Salida: Blancos: 1  Letras: 9   Dígitos: 0 Entrada: Esto es la prueba de secuencia (de entrada 2.↲ Salida:   Blancos: 2  Letras: 9   Dígitos: 1 Entrada:  Esto es la prueba de secuencia de entrada 3.↲ Salida:   Blancos: 0  Letras: 0   Dígitos: 0 Entrada:  .↲ Findelprograma

Recuerdaqueconcin.sync();puedesdescartarelsaltodelínea(yloquepuedahaberdespuésdelpunto),unavezleídoelpuntofinaldecadatexto.

18. Desarrollaunprogramaquedeterminesiunasecuenciadeenterosintroducidosporeltecladoyterminadaen0(centinela)escrecienteono(cadaelementoesmayoroigualqueelanterior).

19. Implementa un programa que lea un número entero N y pida al usuario queaverigüesuraízcuadrada,preguntandotantasvecescomoseanecesariohastaqueelusuarioacierte.Sedaporbuenaunarespuestacuandoladistancia(error)entreNyelnúmerointroducidoelevadoalcuadradoseamenorque10‐4.Trascadarespuestadelusuario,elprogramaindicarásielnúmeroesmayoromenorquelaraízcuadradabuscada.

20. Escribeunprogramaquecuenteelnúmerodevecesqueaparecelasecuenciaxyenunarchivodetextoinput20.txt(terminadoen*).

21. Escribeunprogramaqueindiquesiestriangularcadanúmeroenteroquehayaenun archivoenteros.txt (terminado en0 como centinela). Se dice queunnúmero entero es triangular si es igual a la suma de varios enteros positivosconsecutivosempezandodesde1.Elprogramausaráunafunciónqueindiquesiunenteroestriangular.

Page 107: Fundamentos de la programación 3 - UCMolimpiadas.informatica.ucm.es/files/fp/03-TiposEInstruccionesII.pdf · Luis Hernández Yáñez Describimos los valores de las variables del

Fundamentos de la programación    Ejercicios del Tema 3 — Pág. 6 

22. Implementa un programa que pida al usuario las calificaciones de los 10estudiantesdeunaclaseylosguardeenunarray(declaraeltipoadecuado;seadmiten decimales). Después, mostrará esas calificaciones (cada una en unalínea),seguidadelamediadelcursoydelnúmerodeaprobadosysuspensos.Seusaráunafunciónparacalcularlanotamediayotraparaelnúmerodesuspensos.

23. Modifica el programa anterior para que se puedan guardar hasta 100calificaciones. El programa pedirá calificaciones al usuario hasta que ésteintroduzcaunanotanegativa(oselleneelarray).Elprograma,además,mostrarálanotamáximallamandoaunafunciónqueseencarguedeencontrarla.

24. EscribeunprogramaenC++queleadeunarchivopalabras.txt(conxxxcomocentinela)unalistadehasta50palabras(cadenas)yluegomuestrealusuariounmenúconestasopciones:mostrarlalistadepalabras(unaporlíneaprecedidadesuposición),localizarunapalabra(indicarásuposición),contarlasaparicionesde una palabra, localizar la primera palabra de más de una longitud dada,desplazarlalistadepalabras(cadapalabrapasaalasiguienteposicióndelarray;laúltimaalaprimeraposición)ysalir.Elprogramarepetiráelmenúhastaqueseelijalaopciónparasaliryusarálasfuncionesadecuadas.

25. ImplementaunprogramaquecalculeelprimernúmeronaturalcuyocubosuperaestrictamenteotroenteroNdado(N≥0).Elprogramamostrarálasecuenciadenúmerosrecorrida.

26. Resuelve el problema anterior sin usarmultiplicaciones (nipow()). Para ello,debesemplearlarelación(X+1)3=X3+3X2+3X+1.Observaquedeestaformaelcubodecadanúmeronaturalsepuedecalcularconsumasapartirdelcuboydelcuadrado del número natural anterior. Para calcular los cuadrados sinmultiplicacionesdebesusarlarelaciónanáloga,esdecir(X+1)2=X2+2X+1.

x1=1 x12=1 x13=1

x2=2 x22=x12+2x1+1=1+2·1+1=4 x23=x13+3x12+3x1+1=1+3·1+3·1+1=8

x3=3 x32=x22+2x2+1=4+2·2+1=9 x33=x23+3x22+3x2+1=8+3·4+3·2+1=27

x4=4 x42=x32+2x3+1=9+2·3+1=16 x43=x33+3x32+3x3+1=27+3·9+3·3+1=64

...