Tema 3 - Facultad de Informática

Anuncio
Fundamentos de la programación
3
GradoenIngenieríaInformática
GradoenIngenieríadelSoftware
GradoenIngenieríadeComputadores
LuisHernándezYáñez
Luis Hernández Yáñez
FacultaddeInformática
UniversidadComplutense
Tipos, valores y variables
Conversión de tipos
Tipos declarados por el usuario
Tipos enumerados
Entrada/Salida
con archivos de texto
Lectura de archivos de texto
Escritura en archivos de texto
Flujo de ejecución
Selección simple
Operadores lógicos
Anidamiento de if
Condiciones
Selección múltiple
La escala if‐else‐if
La instrucción switch
Repetición
El bucle while
227
232
236
238
248
253
266
272
276
282
286
290
293
295
302
313
316
Fundamentos de la programación: Tipos e instrucciones II
El bucle for
Bucles anidados
Ámbito y visibilidad
Secuencias
Recorrido de secuencias
Secuencias calculadas
Búsqueda en secuencias
Arrays de datos simples
Uso de variables arrays
Recorrido de arrays
Búsqueda en arrays
Arrays no completos
321
331
339
349
355
363
370
374
379
382
387
393
Luis Hernández Yáñez
Fundamentos de la programación: Tipos e instrucciones II
Página 227
Tipo
Conjuntodevaloresconsusposiblesoperaciones
Valor
Conjuntodebitsinterpretadoscomodeuntipoconcreto
Variable (oconstante)
Ciertamemoriaconnombreparavaloresdeuntipo
Luis Hernández Yáñez
Declaración
Instrucciónqueidentificaunnombre
Definición
Declaraciónqueasignamemoriaaunavariableoconstante
Fundamentos de la programación: Tipos e instrucciones II
Página 228
Luis Hernández Yáñez
Memoriasuficienteparasutipodevalores
short int i = 3;
i
int j = 9;
j
char c = 'a';
c a
double x = 1.5;
x
3
9
1.5
Elsignificadodelosbitsdependedeltipodelavariable:
00000000 00000000 00000000 01111000
Interpretadocomoint eselentero120
Interpretadocomochar (sólo01111000)eselcarácter'x'
Fundamentos de la programación: Tipos e instrucciones II
Página 229
 Simples

Estándar:int,float,double,char,bool
Conjuntodevalorespredeterminado

Definidosporelusuario:enumerados
Conjuntodevaloresdefinidoporelprogramador
Luis Hernández Yáñez
 Estructurados(Tema5)

Coleccioneshomogéneas:arrays
Todosloselementosdelacoleccióndeunmismotipo

Coleccionesheterogéneas:estructuras
Elementosdelacoleccióndetiposdistintos
Fundamentos de programación: Tipos e instrucciones II
Página 230
Consusposiblesmodificadores:
[unsigned] [short] int
long long int
long int  int
float
[long] double
char
Definicióndevariables:
tipo nombre [ = expresión] [, ...];
Definicióndeconstantesconnombre:
const tipo nombre = expresión;
Fundamentos de la programación: Tipos e instrucciones II
Página 231
Fundamentos de la programación: Tipos e instrucciones II
Página 232
Luis Hernández Yáñez
Luis Hernández Yáñez
bool
Promocióndetipos
Dosoperandosdetiposdistintos:
Elvalordeltipomenor sepromocionaaltipomayor
Luis Hernández Yáñez
b = a + 3 * 2;
long double
Promoción
short int i = 3;
int j = 2;
double a = 1.5, b;
b = a + i * j;
double
float
long int
int
short int
Valor3 short int (2bytes) int (4bytes)
b = 1.5 + 6;
Valor6 int (4bytes) double (8bytes)
Fundamentos de la programación: Tipos e instrucciones II
Conversiónsegura:
Deuntipomenorauntipomayor
short int  int  long int  ...
Página 233
long double
double
float
long int
Conversiónnosegura:
int
Deuntipomayorauntipomenor
short int
int entero = 1234;
char caracter;
caracter = entero; // Conversión no segura
Luis Hernández Yáñez
Menormemoria:Pérdidadeinformaciónenlaconversión
Fundamentos de la programación: Tipos e instrucciones II
Página 234
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)
Luis Hernández Yáñez
Tienenlamayorprioridad
Página 235
Fundamentos de la programación: Tipos e instrucciones II
Página 236
Luis Hernández Yáñez
Fundamentos de la programación: Tipos e instrucciones II
Describimoslosvaloresdelasvariablesdeltipo
typedef descripción nombre_de_tipo;
Identificadorválido
Nombresdetipospropios:
t minúsculaseguidadeunaovariaspalabrascapitalizadas
typedef descripción tMiTipo;
typedef descripción tMoneda;
typedef descripción tTiposDeCalificacion;
Declaracióndetipofrenteadefinicióndevariable
Fundamentos de la programación: Tipos e instrucciones II
Página 237
Fundamentos de la programación: Tipos e instrucciones II
Página 238
Luis Hernández Yáñez
Luis Hernández Yáñez
Loscolorearemosennaranja,pararemarcarquesontipos
Enumeracióndelconjuntodevaloresposiblesparalasvariables:
enum { símbolo1, símbolo2, ..., símboloN }
enum
{
Identificador
}
,
enum { centimo, dos_centimos, cinco_centimos,
diez_centimos, veinte_centimos,
medio_euro, euro }
Luis Hernández Yáñez
Valoresliteralesquepuedentomarlasvariables(enamarillo)
Fundamentos de la programación: Tipos e instrucciones II
Página 239
Mejoranlalegibilidad
typedef descripción nombre_de_tipo;
Elegimosunnombreparaeltipo:tMoneda
Luis Hernández Yáñez
descripción
typedef enum { centimo, dos_centimos, cinco_centimos,
diez_centimos, veinte_centimos,
medio_euro, euro } tMoneda;
Enelámbitodeladeclaración,sereconoceunnuevotipotMoneda
tMoneda moneda1, moneda2;
Cadavariabledeesetipocontendráalgunodelossímbolos
moneda1 = dos_centimos;
moneda2 = euro;
(Internamenteseusanenteros)
Fundamentos de la programación: Tipos e instrucciones II
moneda1
dos_centimos
moneda2
euro
Página 240
typedef enum { enero, febrero, marzo, abril, mayo,
junio, julio, agosto, septiembre, octubre,
noviembre, diciembre } tMes;
tMes mes;
Lecturadelavariablemes:
cin >> mes;
Seesperaunvalorentero
Nosepuedeescribirdirectamenteenero ojunio
Luis Hernández Yáñez
Ysiseescribelavariableenlapantalla:
cout << mes;
Severáunnúmeroentero
 Códigodeentrada/salidaespecífico
Fundamentos de la programación: Tipos e instrucciones II
Página 241
Luis Hernández Yáñez
typedef enum { enero, febrero, marzo, abril, mayo, junio, julio,
agosto, septiembre, octubre, noviembre, diciembre } tMes;
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);
Fundamentos de la programación: Tipos e instrucciones II
Página 242
typedef enum { enero, febrero, marzo, abril, mayo, junio, julio,
agosto, septiembre, octubre, noviembre, diciembre } tMes;
Luis Hernández Yáñez
if (mes == enero) {
cout << "enero";
}
if (mes == febrero) {
cout << "febrero";
}
if (mes == marzo) {
cout << "marzo";
}
...
if (mes == diciembre) {
cout << "diciembre";
}
Tambiénpodemosutilizarunainstrucciónswitch
Fundamentos de la programación: Tipos e instrucciones II
Página 243
Conjuntodevaloresordenado(posiciónenlaenumeración)
typedef enum { lunes, martes, miercoles, jueves,
viernes, sabado, domingo } tDiaSemana;
tDiaSemana dia;
...
lunes < martes < miercoles < jueves
< viernes < sabado < domingo
if (dia == jueves)...
bool noLaborable = (dia >= sabado);
Luis Hernández Yáñez
Noadmitenoperadoresdeincrementoydecremento
Emulaciónconmoldes:
int i = int(dia); // ¡dia no ha de valer domingo!
i++;
dia = tDiaSemana(i);
Fundamentos de la programación: Tipos e instrucciones II
Página 244
#include <iostream>
using namespace std;
Silostiposseusanenvariasfunciones,
losdeclaramosantesdelosprototipos
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;
Luis Hernández Yáñez
string cadMes(tMes mes);
string cadDia(tDiaSemana dia);
int main() {
tDiaSemana hoy = lunes;
int dia = 21;
tMes mes = octubre;
int anio = 2013;
...
Fundamentos de la programación: Tipos e instrucciones II
Página 245
// Mostramos la fecha
cout << "Hoy es: " << cadDia(hoy) << " " << dia
<< " de " << cadMes(mes) << " de " << anio
<< endl;
Luis Hernández Yáñez
cout << "Pasada la medianoche..." << endl;
dia++;
int i = int(hoy);
i++;
hoy = tDiaSemana(i);
// Mostramos la fecha
cout << "Hoy es: " << cadDia(hoy) << " " << dia
<< " de " << cadMes(mes) << " de " << anio
<< endl;
return 0;
}
Fundamentos de la programación: Tipos e instrucciones II
Página 246
fechas.cpp
string cadMes(tMes mes) {
string cad;
string cadDia(tDiaSemana dia);
string cad;
if (dia == lunes) {
cad = "lunes";
}
if (dia == martes) {
cad = "martes";
}
...
if (dia == domingo) {
cad = "domingo";
}
return cad;
}
return cad;
}
Fundamentos de la programación: Tipos e instrucciones II
Página 247
Fundamentos de la programación: Tipos e instrucciones II
Página 248
Luis Hernández Yáñez
Luis Hernández Yáñez
if (mes == enero) {
cad = "enero";
}
if (mes == febrero) {
cad = "febrero";
}
...
if (mes == diciembre) {
cad = "diciembre";
}
Datosdelprograma:enlamemoriaprincipal(volátil)
Medios(dispositivos)dealmacenamientopermanente:
— Discosmagnéticosfijos(internos)oportátiles(externos)
— Cintasmagnéticas
— Discosópticos(CD,DVD,BlueRay)
— MemoriasUSB
…
Luis Hernández Yáñez
Mantienenlainformaciónenarchivos
Secuenciasdedatos
Fundamentos de la programación: Tipos e instrucciones II
Página 249
Archivodetexto:secuenciadecaracteres
T
o
t
a
l
:
1
2
3
.
4

A
…
Archivobinario:contieneunasecuenciadecódigosbinarios
A0
25
2F
04
D6
FF
00
27
6C
CA
49
07
5F
A4
…
(Códigosrepresentadosennotaciónhexadecimal)
Luis Hernández Yáñez
Losarchivossemanejanenlosprogramaspormediodeflujos
Archivosdetexto:flujosdetexto
SimilaralaE/Sporconsola
(Másadelanteveremoselusodearchivosbinarios)
Fundamentos de la programación: Tipos e instrucciones II
Página 250
Luis Hernández Yáñez
Textosdispuestosensucesivaslíneas
Carácterdefindelíneaentrelíneaylínea(Intro)
Posiblementevariosdatosencadalínea
Ejemplo:Comprasdelosclientes
Encadalínea,NIFdelcliente,unidadescompradas,precio
unitarioydescripcióndeproducto,separadosporespacio
12345678F 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
Fundamentos de la programación: Tipos e instrucciones II
Página 251
#include <fstream>
 Lecturadelarchivo:flujodeentrada
 Escrituraenelarchivo:flujodesalida
Nopodemosleeryescribirenunmismoflujo
Unflujodetextosepuedeutilizarparalecturaoparaescritura:
—
Flujos(archivos)deentrada:variablesdetipoifstream
—
Flujos(archivos)desalida:variablesdetipoofstream
Luis Hernández Yáñez
Bibliotecafstream (sinespaciodenombres)
Fundamentos de la programación: Tipos e instrucciones II
Página 252
Luis Hernández Yáñez
Fundamentos de la programación: Tipos e instrucciones II
Flujosdetextodeentrada
Página 253
ifstream
Paraleerdeunarchivodetexto:
1 Declaraunavariabledetipoifstream
2 Asocialavariableconelarchivodetexto(aperturadelarchivo)
3 Realizalasoperacionesdelectura
Luis Hernández Yáñez
4 Desligalavariabledelarchivodetexto(cierreelarchivo)
Fundamentos de la programación: Tipos e instrucciones II
Página 254
Aperturadelarchivo
Conectalavariableconelarchivodetextodeldispositivo
flujo.open(cadena_literal);
ifstream archivo;
archivo.open("abc.txt");
if (archivo.is_open()) ...
Cierredelarchivo
¡Elarchivodebeexistir!
is_open():
true sielarchivo
sehapodidoabrir
false encasocontrario
Desconectalavariabledelarchivodetextodeldispositivo
Luis Hernández Yáñez
flujo.close();
archivo.close();
Fundamentos de la programación: Tipos e instrucciones II
Página 255
Operacionesdelectura
Luis Hernández Yáñez
 Extractor(>>)
archivo >> variable;
Saltaprimerolosespaciosenblanco(espacio,tab,Intro,...)
Datosnuméricos:leehastaelprimercarácternoválido
Cadenas(string):leehastaelsiguienteespacioenblanco
 archivo.get(c)
Leeelsiguientecarácterenlavariablec,seaelquesea
 getline(archivo, cadena)
Leeenlacadena todosloscaracteresquequedenenlalínea
Incluidoslosespaciosenblanco
Hastaelsiguientesaltodelínea(descartándolo)
Conlosarchivosnotieneefectolafunciónsync()
Fundamentos de la programación: Tipos e instrucciones II
Página 256
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);
Fundamentos de la programación: Tipos e instrucciones II
Página 257
¿Dóndequedapendientelaentrada?
 Númeroleídoconelextractor
Enelprimercarácternoválido(inc.espaciosenblanco)
 Carácterleídoconget()
Enelsiguientecarácter(inc.espaciosenblanco)
Luis Hernández Yáñez
 Unacadenaleídaconelextractor
Enelsiguienteespacioenblanco
 Unacadenaleídaconlafuncióngetline()
Alprincipiodelasiguientelínea
Fundamentos de la programación: Tipos e instrucciones II
Página 258
string nif, producto;
int unidades;
double precio;
char aux;
1 ifstream archivo;
7
2 archivo.open("compras.txt"); // Apertura
5
6
4
3 archivo >> nif >> unidades >> precio;
getline(archivo, producto);
3
2
1
Programa
Luis Hernández Yáñez
4 archivo.close(); // Cierre
Flujodeentrada
archivo
Fundamentos de la programación: Tipos e instrucciones II
Página 259
archivo >> nif;
archivo >> unidades;
archivo >> precio;
getline(archivo, producto);
getline() nosaltaespacios
12345678F 2 123.95 Reproductor de DVD
Elextractorsaltalosespacios
Luis Hernández Yáñez
nif 12345678F
producto
Reproductor de DVD
unidades 2
precio 123.95
Espacio
Fundamentos de la programación: Tipos e instrucciones II
Página 260
archivo >> nif;
archivo >> unidades;
archivo >> precio;
archivo.get(aux); // Salta el espacio en blanco
getline(archivo, producto);
12345678F 2 123.95 Reproductor de DVD
Leemoselespacio
(nohacemosnadaconél)
Luis Hernández Yáñez
nif 12345678F
producto Reproductor de DVD
unidades 2
precio 123.95
Sinespacio
Fundamentos de la programación: Tipos e instrucciones II
Página 261
Luis Hernández Yáñez
Cadalínea,datosdeunacompra
Mostrareltotaldecadacompra
unidadesx preciomásIVA(21%)
Final:"X" comoNIF
Bucledeprocesamiento:
 Cadapasodelbucle(ciclo)procesaunalínea(compra)
 Podemosusarlasmismasvariablesencadaciclo
LeerprimerNIF
MientraselNIFnoseaX:
Leerunidades,precioydescripción
Calcularymostrareltotal
LeerelsiguienteNIF
Fundamentos de la programación: Tipos e instrucciones II
Página 262
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
...
Fundamentos de la programación: Tipos e instrucciones II
Luis Hernández Yáñez
leer.cpp
Página 263
if (archivo.is_open()) { // Existe el archivo
archivo >> nif; // Primer NIF
while (nif != "X") {
archivo >> unidades >> precio;
archivo.get(aux); // Salta el espacio
getline(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
} ...
Fundamentos de la programación: Tipos e instrucciones II
Página 264
archivo.close(); // Cierre
}
else {
cout << "ERROR: No se ha podido abrir el archivo"
<< endl;
}
return 0;
Luis Hernández Yáñez
}
Página 265
Fundamentos de la programación: Tipos e instrucciones II
Página 266
Luis Hernández Yáñez
Fundamentos de la programación: Tipos e instrucciones II
ofstream
Flujosdetextodesalida
Paracrearunarchivodetextoyescribirenél:
1 Declaraunavariabledetipoofstream
2 Asocialavariableconelarchivodetexto(creaelarchivo)
3 Realizalasescrituraspormediodeloperador<< (insertor)
4 Desligalavariabledelarchivodetexto(cierraelarchivo)
Luis Hernández Yáñez
¡Atención!
Sielarchivoyaexiste,seborratodoloquehubiera
¡Atención!
Sinosecierraelarchivosepuedeperderinformación
Fundamentos de la programación: Tipos e instrucciones II
Página 267
int valor = 999;
Programa
1 ofstream archivo;
2 archivo.open("output.txt"); // Apertura
2
1
!
Flujodesalida
archivo
Luis Hernández Yáñez
a
3 archivo << 'X' << " Hola! " << 123.45
<< endl << valor << "Bye!";
l
4 archivo.close(); // Cierre
X
Fundamentos de la programación: Tipos e instrucciones II
o
H
Página 268
escribir.cpp
#include <iostream>
#include <string>
using namespace std;
#include <fstream>
int main() {
string nif, producto;
int unidades;
double precio;
char aux;
ofstream archivo;
Luis Hernández Yáñez
archivo.open("output.txt"); // Apertura (creación)
cout << "NIF del cliente (X para terminar): ";
cin >> nif;
...
Luis Hernández Yáñez
Fundamentos de la programación: Tipos e instrucciones II
Página 269
while (nif != "X") {
// Queda pendiente el Intro anterior...
cin.get(aux); // Leemos el Intro
cout << "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 ellos
archivo << nif << " " << unidades << " "
<< precio << " " << producto << endl;
cout << "NIF del cliente (X para terminar): ";
cin >> nif;
}
...
Fundamentos de la programación: Tipos e instrucciones II
Página 270
// Escribimos el centinela final...
archivo << "X";
archivo.close(); // Cierre del archivo
return 0;
Luis Hernández Yáñez
}
Página 271
Fundamentos de la programación: Tipos e instrucciones II
Página 272
Luis Hernández Yáñez
Fundamentos de la programación: Tipos e instrucciones II
{
Flujodeejecución
Luis Hernández Yáñez
double oper1, oper2, prod;
Instrucción 1
cout << "Operando 1: ";
Instrucción 2
cin >> oper1;
Instrucción 3
cout << "Operando 2: ";
...
cout << "Producto: " << prod;
return 0;
Instrucción N
}
Fundamentos de la programación: Tipos e instrucciones II
Página 273
Unoentredosomáscaminosdeejecución
Selecciónsimple(2caminos)
Selecciónmúltiple(>2caminos)
true
true
Instrucción T
Condición
false
false
true
Instrucción F
false
true
false
Luis Hernández Yáñez
if
if‐else‐if
switch
Diagramas de flujo
Fundamentos de la programación: Tipos e instrucciones II
true
false
Página 274
Repetirlaejecucióndeunaomásinstrucciones
Acumular,procesarcolecciones,...
Inicialización
Sí
No
¿Iterar?
while
for
Fundamentos de la programación: Tipos e instrucciones II
Página 275
Fundamentos de la programación: Tipos e instrucciones II
Página 276
Luis Hernández Yáñez
Luis Hernández Yáñez
Código
Lainstrucciónif
Luis Hernández Yáñez
if (condición) {
códigoT
}
[else {
códigoF
}]
true
BloqueT
Condición
false
BloqueF
Opcional
condición:expresiónbool
Cláusulaelse opcional
Fundamentos de la programación: Tipos e instrucciones II
Página 277
signo.cpp
Luis Hernández Yáñez
int num;
cin >> num;
if (num < 0) {
cout << "Negativo";
}
cin >> num;
else {
false
true
cout << "Positivo";
num < 0
}
cout << "Negativo";
cout << "Positivo";
cout << endl;
cout << endl;
Fundamentos de la programación: Tipos e instrucciones II
Página 278
int num;
cin >> num;
1_29
129
if (num < 0) {
_
Positivo
_
cout << "Negativo";
}
else {
cout << "Positivo";
cin >> num;
}
false
cout << endl;
num < 0
num
129
?
Luis Hernández Yáñez
cout << "Positivo";
cout << endl;
Fundamentos de la programación: Tipos e instrucciones II
Página 279
int num;
cin >> num;
‐5
if (num < 0) {
Negativo
_
cout << "Negativo";
}
else {
cout << "Positivo";
cin >> num;
}
cout << endl;
true
num < 0
num
Luis Hernández Yáñez
cout << "Negativo";
cout << endl;
Fundamentos de la programación: Tipos e instrucciones II
Página 280
‐5
?
división.cpp
Divisiónentredosnúmerosprotegidafrenteaintentodedivisiónpor0
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;
}
Fundamentos de la programación: Tipos e instrucciones II
Página 281
Fundamentos de la programación: Tipos e instrucciones II
Página 282
Luis Hernández Yáñez
Luis Hernández Yáñez
#include <iostream>
using namespace std;
Seaplicanavaloresbool (condiciones)
Elresultadoesdetipobool
!
NO
Monario
&&
Y
Binario
||
O
Binario
Operadores (prioridad)
...
!
* / %
+ ‐
< <= > >=
Luis Hernández Yáñez
== !=
&&
||
Fundamentos de la programación: Tipos e instrucciones II
!
Página 283
&&
true
false
||
true
false
true
false
true
true
false
true
true
true
false
true
false
false
false
false
true
false
NO(Not)
Y(And)
O(Or)
bool cond1, cond2, resultado;
int a = 2, b = 3, c = 4;
resultado = !(a < 5); // !(2 < 5)  !true  false
Luis Hernández Yáñez
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
Fundamentos de la programación: Tipos e instrucciones II
Página 284
condiciones.cpp
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!";
}
Condicionesequivalentes
return 0;
((num >= 1) && (num <= 10))
}
¡Encierralascondiciones
simplesentreparéntesis!
((num > 0) && (num < 11))
((num >= 1) && (num < 11))
((num > 0) && (num <= 10))
Fundamentos de la programación: Tipos e instrucciones II
Página 285
Fundamentos de la programación: Tipos e instrucciones II
Página 286
Luis Hernández Yáñez
Luis Hernández Yáñez
#include <iostream>
using namespace std;
Luis Hernández Yáñez
diasmes.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;
}
}
Fundamentos de la programación: Tipos e instrucciones II
Página 287
Luis Hernández Yáñez
CalendarioGregoriano:bisiestosidivisiblepor4,exceptoelúltimo
decadasiglo(divisiblepor100),salvoqueseadivisiblepor400
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 400
esBisiesto = false;
}
else {
esBisiesto = true; // Año bisiesto
}
}
else {
esBisiesto = false;
}
return esBisiesto;
}
Fundamentos de la programación: Tipos e instrucciones II
Página 288
if (condición1) { if (condición2) {...}
else {...}
}
else {
if (condición3) {
if (condición4) {...}
if (condición5) {...}
else {...}
}
else { ...
Unamalasangríapuedeconfundir
if (x > 0) {
if (y > 0) {...}
else {...}
if (x > 0) {
if (y > 0) {...}
else {...}
Lasangríaayudaaasociarloselse consusif
Fundamentos de la programación: Tipos e instrucciones II
Página 289
Fundamentos de la programación: Tipos e instrucciones II
Página 290
Luis Hernández Yáñez
Luis Hernández Yáñez
Cadaelse seasociaalif anteriormáscercanosinasociar(mismobloque)
• Condiciónsimple:
num < 0
car == 'a'
isalpha(car)
12
Expresiónlógica(true/false)
Sinoperadoreslógicos
CompatibilidadconellenguajeC:
0 esequivalenteafalse
Cualquiervalordistintode0 esequivalenteatrue
Luis Hernández Yáñez
• Condicióncompuesta:
Combinacióndecondicionessimplesyoperadoreslógicos
!isalpha(car)
(num < 0) || (car == 'a')
(num < 0) && ((car == 'a') || !isalpha(car))
Noconfundaseloperadordeigualdad(==)
coneloperadordeasignación(=).
Fundamentos de la programación: Tipos e instrucciones II
Página 291
ShortcutBooleanEvaluation
true || X  true
(n == 0) || (x >= 1.0 / n)
Sin es0:¿divisiónporcero?(segundacondición)
Comolaprimeraseríatrue:¡noseevalúalasegunda!
Luis Hernández Yáñez
false && X  false
(n != 0) && (x < 1.0 / n)
Sin es0:¿divisiónporcero?(segundacondición)
Comolaprimeraseríafalse:¡noseevalúalasegunda!
Fundamentos de la programación: Tipos e instrucciones II
Página 292
Luis Hernández Yáñez
Fundamentos de la programación: Tipos e instrucciones II
Página 293
true
false
true
false
true
false
true
Luis Hernández Yáñez
false
if‐else‐if
switch
Fundamentos de la programación: Tipos e instrucciones II
Página 294
Luis Hernández Yáñez
Fundamentos de la programación: Tipos e instrucciones II
Ejemplo:
Calificación(enletras)
deunestudianteenbase
asunotanumérica(0‐10)
Página 295
true
== 10
cout << "MH"
false
true
Si nota == 10 entoncesMH
sino,si nota >= 9 entoncesSB
sino,si nota >= 7 entoncesNT
Luis Hernández Yáñez
sino,si nota >= 5 entoncesAP
sino SS
Fundamentos de la programación: Tipos e instrucciones II
>= 9
false
cout << "SB"
true
>= 7
false
cout << "NT"
true
>= 5
cout << "AP"
false
cout << "SS"
Página 296
Luis Hernández Yáñez
nota.cpp
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";
}
}
}
}

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";
}
Fundamentos de la programación: Tipos e instrucciones II
Página 297
¡Cuidadoconelordendelascondiciones!
Luis Hernández Yáñez
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"; }

¡Noseejecutannunca!
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"; }

SólomuestraAPoSS
Fundamentos de la programación: Tipos e instrucciones II
Página 298
Simplificacióndelascondiciones
0
SS
5
AP
7
NT
9 SB 10
MH
Luis Hernández Yáñez
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"; }
Siempretrue:ramaselse
Sinoes10,esmenorque10
if (nota == 10) { cout << "MH"; }
Sinoes>=9,esmenorque9
else if (nota >= 9) {cout << "SB"; } Sinoes>=7,esmenorque7
else if (nota >= 7) { cout << "NT"; } …
else if (nota >= 5) { cout << "AP"; } true && X  X
else { cout << "SS"; }
Fundamentos de la programación: Tipos e instrucciones II
Página 299
Luis Hernández Yáñez
nivel.cpp
#include <iostream>
Si num == 4 entonces Muy alto
using namespace std;
Si num == 3 entonces Alto
int main() {
Si num == 2 entonces Medio
int num;
cout << "Introduce el nivel: "; Si num == 1 entonces Bajo
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;
}
Fundamentos de la programación: Tipos e instrucciones II
Página 300
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;
Fundamentos de la programación: Tipos e instrucciones II
Página 301
Fundamentos de la programación: Tipos e instrucciones II
Página 302
Luis Hernández Yáñez
Luis Hernández Yáñez
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; }
Luis Hernández Yáñez
Selecciónentrevaloresposiblesdeunaexpresión
switch (expresión) {
case constante1:
{
código1
}
[break;]
case constante2:
{
código2
}
[break;]
...
Fundamentos de la programación: Tipos e instrucciones II
case constanteN:
{
códigoN
}
[break;]
[default:
{
códigoDefault
}]
}
Página 303
Luis Hernández Yáñez
nivel2.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";
}
}
Fundamentos de la programación: Tipos e instrucciones II
Sinum == 4  Muyalto
Sinum == 3  Alto
Sinum == 2  Medio
Sinum == 1  Bajo
Página 304
Luis Hernández Yáñez
Interrumpe elswitch;continúaenlainstrucciónquelesiga
switch (num) {
...
case 3:
{
cout << "Alto";
}
break;
case 2:
{
cout << "Medio";
}
break;
...
}
Luis Hernández Yáñez
Fundamentos 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";
}
}
Fundamentos de la programación: Tipos e instrucciones II
Num: 3
Alto
Página 305
Num: 3
Alto
Medio
Bajo
Valor no válido
Página 306
true
num==4
Muy alto
break;
false
Sinbreak;
true
num==3
Alto
break;
false
Sinbreak;
true
num==2
Medio
break;
false
Sinbreak;
true
num==1
Luis Hernández Yáñez
false
Bajo
break;
Sinbreak;
default
No válido
Fundamentos de la programación: Tipos e instrucciones II
int menu() {
int op = ‐1; // Cualquiera no válida
Luis Hernández Yáñez
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;
Página 307
1 ‐ Nuevo cliente
2 ‐ Editar cliente
3 ‐ Baja cliente
4 ‐ Ver cliente
0 ‐ Salir
Opción: 5
¡Opción no válida!
1 ‐ Nuevo cliente
2 ‐ Editar cliente
3 ‐ Baja cliente
4 ‐ Ver cliente
0 ‐ Salir
Opción: 3
if ((op < 0) || (op > 4)) {
cout << "¡Opción no válida!" << endl;
}
}
return op;
}
Fundamentos de la programación: Tipos e instrucciones II
Página 308
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
}
Luis Hernández Yáñez
Fundamentos de la programación: Tipos e instrucciones II
Página 309
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
Fundamentos de la programación: Tipos e instrucciones II
Página 310
Luis Hernández Yáñez
nota2.cpp
int nota; // Sin decimales
cout << "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
Luis Hernández Yáñez
Fundamentos de la programación: Tipos e instrucciones II
case
case
{
7:
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 311
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";
}
}
Fundamentos de la programación: Tipos e instrucciones II
Página 312
Luis Hernández Yáñez
Fundamentos de la programación: Tipos e instrucciones II
Página 313
Inicialización
Sí
¿Iterar?
No
Luis Hernández Yáñez
Cuerpo
Bucleswhile yfor
Fundamentos de la programación: Tipos e instrucciones II
Página 314
 Númerodeiteracionescondicionado(recorridovariable):
—
—
Buclewhile
while (condición) cuerpo
Ejecutaelcuerpo mientraslacondición seatrue
Bucledo‐while
Compruebalacondiciónalfinal(loveremosmásadelante)
 Númerodeiteracionesprefijado(recorridofijo):
Buclefor
for (inicialización; condición; paso) cuerpo
Ejecutaelcuerpo mientraslacondición seatrue
Seusaunavariablecontadoraentera
Fundamentos de la programación: Tipos e instrucciones II
Página 315
Fundamentos de la programación: Tipos e instrucciones II
Página 316
Luis Hernández Yáñez
Luis Hernández Yáñez
—
while.cpp
Mientraslacondiciónseacierta,ejecutaelcuerpo
while (condición) {
cuerpo
}
Condiciónalprincipiodelbucle
int i = 1; // Inicialización de la variable i
while (i <= 100) {
cout << i << endl;
i++;
}
Luis Hernández Yáñez
Muestralosnúmerosdel1al100
Fundamentos de la programación: Tipos e instrucciones II
Página 317
int i = 1;
while (i <= 100) {
cout << i << endl; i++;
}
true
Condición
Cuerpo
i = 1
i
100
101
99
?
3
2
1
4
_
1
true
i <= 100
Luis Hernández Yáñez
cout << i << endl;
i++
Fundamentos de la programación: Tipos e instrucciones II
false
2
3
99
100
_
Página 318
false
¿Ysilacondiciónesfalsaalcomenzar?
Noseejecutaelcuerpodelbucleningunavez
Luis Hernández Yáñez
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
Fundamentos de la programación: Tipos e instrucciones II
Página 319
primero.cpp
Primerenterocuyocuadradoesmayorque1.000
#include <iostream>
using namespace std;
int main() {
int num = 1;
Luis Hernández Yáñez
while (num * num <= 1000) {
num++;
}
¡Ejecutaelprogramapara
sabercuálesesenúmero!
Empezamos en 1
Incrementamos en 1
cout << "1er. entero con cuadrado mayor que 1.000: "
<< num << endl;
return 0;
}
Recorrelasecuencia denúmeros1,2,3,4,5,...
Fundamentos de la programación: Tipos e instrucciones II
Página 320
#include <iostream>
Recorrelasecuencia
using namespace std;
denúmerosintroducidos
int main() {
double num, suma = 0, media = 0;
int cont = 0;
cout << "Introduce un número (0 para terminar): ";
cin >> num;
Leemos el primero
while (num != 0) { // 0 para terminar
suma = suma + num;
cont++;
cout << "Introduce un número (0 para terminar): ";
cin >> num;
Leemos el siguiente
}
if (cont > 0) {
media = suma / cont;
}
cout << "Suma = " << suma << endl;
cout << "Media = " << media << endl;
return 0;
}
Fundamentos de la programación: Tipos e instrucciones II
Página 321
Fundamentos de la programación: Tipos e instrucciones II
Página 322
Luis Hernández Yáñez
Luis Hernández Yáñez
sumamedia.cpp
Númerodeiteracionesprefijado
Variablecontadoraquedeterminaelnúmerodeiteraciones:
for ([int] var = ini; condición; paso) cuerpo
Luis Hernández Yáñez
Lacondición comparaelvalordevar conunvalorfinal
Elpaso incrementaodecrementaelvalordevar
Elvalordevar debeiraproximándosealvalorfinal
for (int i = 1; i <= 100; i++)...
1, 2, 3, 4, 5, ..., 100
for (int i = 100; i >= 1; i‐‐)...
100, 99, 98, 97, ..., 1
Tantoscicloscomovalorestomalavariablecontadora
Fundamentos de la programación: Tipos e instrucciones II
Página 323
for (inicialización; condición; paso) cuerpo
for (int i = 1; i <= 100; i++) {
cout << i;
}
i = 1
true
i <= 100
false
Luis Hernández Yáñez
cout << i;
i++
Fundamentos de la programación: Tipos e instrucciones II
Página 324
for1.cpp
for (int i = 1; i <= 100; i++) {
cout << i << endl;
}
i
100
101
2?3
1
...
1
2
i = 1
3
true
i <= 100
cout << i << endl;
99
100
_
Luis Hernández Yáñez
i++
false
Fundamentos de la programación: Tipos e instrucciones II
Página 325
Lavariablecontadora
for2.cpp
Elpaso notieneporquéirdeunoenuno:
for (int i = 1; i <= 100; i = i + 2)
cout << i << endl;
Estebuclefor muestralosnúmerosimparesde1a99
Muyimportante
ElcuerpodelbucleNUNCA debealterarelvalordelcontador
Luis Hernández Yáñez
Garantíadeterminación
Todobucledebeterminarsuejecución
Buclesfor:lavariablecontadoradebeconvergeralvalorfinal
Fundamentos de la programación: Tipos e instrucciones II
Página 326
suma.cpp
#include <iostream>
using namespace std;
long long int suma(int n);
Luis Hernández Yáñez
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;
}
Recorrelasecuencia denúmeros
return total;
1,2,3,4,5,...,n
}
Fundamentos de la programación: Tipos e instrucciones II
Página 327
¿Incremento/decrementoprefijoopostfijo?
Esindiferente
Estosdosbuclesproducenelmismoresultado:
for (int i = 1; i <= 100; i++) ...
for (int i = 1; i <= 100; ++i) ...
Luis Hernández Yáñez
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
Fundamentos de la programación: Tipos e instrucciones II
Página 328
Declaradaenelpropiobucle
for (int i = 1; ...)
Sóloseconoceenelcuerpodelbucle(suámbito)
Nosepuedeusareninstruccionesquesiganalbucle
Declaradaantesdelbucle
Luis Hernández Yáñez
int i;
for (i = 1; ...)
Seconoceenelcuerpodelbucleydespuésdelmismo
Ámbitoexternoalbucle
Fundamentos de la programación: Tipos e instrucciones II
Página 329
Losbuclesfor sepuedenreescribircomobuclescondicionados
for (int i = 1; i <= 100; i++) cuerpo
Esequivalentea:
int i = 1;
while (i <= 100) {
cuerpo
i++;
}
Luis Hernández Yáñez
Lainversanoessiempreposible:
int i;
cin >> i;
while (i != 0) {
cuerpo
cin >> i;
}
¿Buclefor equivalente?
¡Nosabemoscuántosnúmeros
introduciráelusuario!
Fundamentos de la programación: Tipos e instrucciones II
Página 330
Luis Hernández Yáñez
Fundamentos 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
}
}
Paracadavalordei
elvalordej varíaentre1 y5
j varíamásrápido quei
Página 331
i
1
1
1
1
1
2
2
2
2
2
3
j
1
2
3
4
5
1
2
3
4
5
1
...
Fundamentos de la programación: Tipos e instrucciones II
Página 332
tablas.cpp
#include <iostream>
using namespace std;
#include <iomanip>
Luis Hernández Yáñez
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;
}
}
1 x 1 = 1
1 x 2 = 2
1 x 3 = 3
1 x 4 = 4
...
1 x 10 = 10
2 x 1 = 2
2 x 2 = 4
...
10 x 7 = 70
10 x 8 = 80
10 x 9 = 90
10 x 10 = 100
return 0;
}
Fundamentos de la programación: Tipos e instrucciones II
Página 333
tablas2.cpp
Luis Hernández Yáñez
#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;
}
Fundamentos de la programación: Tipos e instrucciones II
Página 334
menú.cpp
#include <iostream>
using namespace std;
#include <iomanip>
Luis Hernández Yáñez
int menu(); // 1: Tablas de multiplicación; 2: Sumatorio
long 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; ...
Fundamentos de la programación: Tipos e instrucciones II
Página 335
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;
}
} // switch
opcion = menu();
} // while (opcion != 0)
return 0;
Luis Hernández Yáñez
}
Fundamentos de la programación: Tipos e instrucciones II
Página 336
Luis Hernández Yáñez
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
Fundamentos de la programación: Tipos e instrucciones II
Página 337
while (opcion != 0) {
...
for (int i = 1; i <= 10; i++) {
for (int j = 1; j <= 10; j++) {
...
}
}
while (num <= 0) {
...
suma()
}
for (int i = 1; i <= n; i++) {
...
}
while ((op < 0) || (op > 2)) {
...
}
menu()
}
Fundamentos de la programación: Tipos e instrucciones II
Página 338
Luis Hernández Yáñez
Fundamentos de la programación: Tipos e instrucciones II
Página 339
Luis Hernández Yáñez
Cadabloquecreaunnuevoámbito:
int main() {
double d = ‐1, suma = 0;
3ámbitosanidados
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;
}
Fundamentos de la programación: Tipos e instrucciones II
Página 340
Luis Hernández Yáñez
Unidentificadorseconoce
enelámbitoenelqueestádeclarado
(apartirdesuinstruccióndedeclaración)
yenlossubámbitosposteriores
Luis Hernández Yáñez
Fundamentos de la programación: Tipos e instrucciones II
Página 341
int main() {
Ámbitodelavariabled
double d;
if (...) {
int cont = 0;
for (int i = 0; i <= 10; i++) {
...
}
}
char c;
if (...) {
double x;
...
}
return 0;
}
Fundamentos de la programación: Tipos e instrucciones II
Página 342
Luis Hernández Yáñez
int main() {
double d;
if (...) {
Ámbitodelavariablecont
int cont = 0;
for (int i = 0; i <= 10; i++) {
...
}
}
char c;
if (...) {
double x;
...
}
return 0;
}
Luis Hernández Yáñez
Fundamentos de la programación: Tipos e instrucciones II
Página 343
int main() {
double d;
if (...) {
int cont = 0;
for (int i = 0; i <= 10; i++) {
...
}
Ámbitodelavariablei
}
char c;
if (...) {
double x;
...
}
return 0;
}
Fundamentos de la programación: Tipos e instrucciones II
Página 344
Luis Hernández Yáñez
int main() {
double d;
if (...) {
int cont = 0;
for (int i = 0; i <= 10; i++) {
...
}
}
char c;
if (...) {
Ámbitodelavariablec
double x;
...
}
return 0;
}
Luis Hernández Yáñez
Fundamentos de la programación: Tipos e instrucciones II
Página 345
int main() {
double d;
if (...) {
int cont = 0;
for (int i = 0; i <= 10; i++) {
...
}
}
char c;
if (...) {
double x;
...
Ámbitodelavariablex
}
return 0;
}
Fundamentos de la programación: Tipos e instrucciones II
Página 346
Luis Hernández Yáñez
Sienunsubámbitosedeclara
unidentificadorconidénticonombre
queunoyadeclaradoenelámbito,
eldelsubámbitooculta aldelámbito
(noesvisible)
Luis Hernández Yáñez
Fundamentos de la programación: Tipos e instrucciones II
Página 347
int main() {
Oculta,ensuámbito,alai anterior
int i, x;
if (...) {
Oculta,ensuámbito,alai anterior
int i = 0;
for(int i = 0; i <= 10; i++) {
...
}
}
char c;
if (...) {
Oculta,ensuámbito,alax anterior
double x;
...
}
return 0;
}
Fundamentos de la programación: Tipos e instrucciones II
Página 348
Luis Hernández Yáñez
Fundamentos de la programación: Tipos e instrucciones II
Página 349
Sucesióndeelementosdeunmismotipoqueseaccedenlinealmente
elemento
secuencia
secuencia
o
(Secuenciavacía)
elemento
Luis Hernández Yáñez
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
Fundamentos de la programación: Tipos e instrucciones II
Página 350
Notratamossecuenciasinfinitas:siemprehayunúltimoelemento
 Secuenciasexplícitas:
—
Sucesióndedatosdeundispositivo(teclado,disco,sensor,...)
 Secuenciascalculadas:
—
Fórmuladerecurrenciaquedeterminaelelementosiguiente
 Listas(másadelante)
Secuenciasexplícitasquemanejaremos:
Luis Hernández Yáñez
Datosintroducidosporeltecladooleídosdeunarchivo
Conunelementoespecialalfinaldelasecuencia(centinela)
1 34 12 26 4 87 184 52 ‐1
Fundamentos de la programación: Tipos e instrucciones II
Página 351
 Secuenciaexplícitaleídadearchivo:
— Detectarlamarcadefinaldearchivo(Eof ‐ End offile)
— Detectarunvalorcentinelaalfinal
Luis Hernández Yáñez
 Secuenciaexplícitaleídadelteclado:
— Preguntaralusuariosiquiereintroducirunnuevodato
— Preguntaralusuarioprimerocuántosdatosvaaintroducir
— Detectarunvalorcentinelaalfinal
Valorcentinela:
Valorespecialalfinalquenopuededarseenlasecuencia
(Secuenciadenúmerospositivos centinela:cualquiernegativo)
12
4
37 23
8
19 83 63
Fundamentos de la programación: Tipos e instrucciones II
2
35 17 76 15 ‐1
Página 352
Debehaberalgúnvalorquenoseaunelementoválido
Secuenciasnuméricas:
Sisepermitecualquiernúmero,nohaycentinelaposible
Cadenasdecaracteres:
¿Caracteresespeciales(noimprimibles)?
Enrealidadelvalorcentinelaespartedelasecuencia,
perosusignificadoesespecialynoseprocesacomoelresto
Significaquesehaalcanzadoelfinaldelasecuencia
(Inclusoaunquehayaelementosposteriores)
Luis Hernández Yáñez
Últimoelemento
12
4
37 23
8
19 83 63 ‐1 35 17 76 15
Noseprocesan
Fundamentos de la programación: Tipos e instrucciones II
Página 353
Tratamientodeloselementosunoaunodesdeelprimero
Recorrido
Unmismotratamientoparatodosloselementosdelasecuencia
Ej.‐ Mostrarloselementosdeunasecuencia,sumarlosnúmeros
deunasecuencia,¿paroimparcadanúmerodeunasecuencia?,...
Terminaalllegaralfinaldelasecuencia
Luis Hernández Yáñez
Búsqueda
Recorridodelasecuenciahastaencontrarunelementobuscado
Ej.‐ Localizarelprimernúmeroqueseamayorque1.000
Terminaallocalizarelprimerelementoquecumplelacondición
oalllegaralfinaldelasecuencia(noencontrado)
Fundamentos de la programación: Tipos e instrucciones II
Página 354
Luis Hernández Yáñez
Fundamentos de la programación: Tipos e instrucciones II
Página 355
Unmismotratamientoatodosloselementos
Luis Hernández Yáñez
Inicialización
Mientrasnoselleguealfinaldelasecuencia:
Obtenerelsiguienteelemento
Procesarelelemento
Finalización
Alempezarseobtieneelprimerelementodelasecuencia
Enlossiguientespasosdelbuclesevanobteniendo
lossiguienteselementosdelasecuencia
Fundamentos de la programación: Tipos e instrucciones II
Página 356
Inicialización
¿Alfinal?
true
false
Obtenerelemento
Luis Hernández Yáñez
Procesarelemento
Nosabemoscuántos
elementoshay
 Nopodemos
implementarconfor
Finalización
Fundamentos de la programación: Tipos e instrucciones II
Página 357
Implementaciónconwhile
Inicialización
Obtenerelprimerelemento
Mientrasnoseaelcentinela:
Procesarelelemento
Obtenerelsiguienteelemento
Finalización
Inicialización
Obtener1º
¿Centinela?
true
false
Procesarelemento
Luis Hernández Yáñez
Obtenersiguiente
Finalización
Fundamentos de la programación: Tipos e instrucciones II
Página 358
Secuenciadenúmerospositivos
Luis Hernández Yáñez
Siempreserealizaalmenosunalectura
Centinela:‐1
double d, suma = 0;
Inicialización
cout << "Valor (‐1 termina): ";
Primerelemento
cin >> d;
while (d != ‐1) {
Mientrasnoelcentinela
suma = suma + d;
Procesarelemento
cout << "Valor (‐1 termina): ";
Siguienteelemento
cin >> d;
}
cout << "Suma = " << suma << endl;
Finalización
Fundamentos de la programación: Tipos e instrucciones II
Longituddeunasecuenciadecaracteres
Página 359
longitud.cpp
Luis Hernández Yáñez
Centinela:carácterpunto(.)
int longitud() {
int l = 0;
char c;
cout << "Texto terminado en punto: ";
cin >> c; // Obtener primer carácter
while (c != '.') { // Mientras no el centinela
l++; // Procesar
cin >> c; // Obtener siguiente carácter
}
return l;
}
Fundamentos de la programación: Tipos e instrucciones II
Página 360
¿Cuántasvecesapareceuncarácterenunacadena?
Luis Hernández Yáñez
Centinela:asterisco(*)
cont.cpp
char buscado, c;
int cont = 0;
cout << "Carácter a buscar: ";
cin >> buscado;
cout << "Cadena: ";
cin >> c;
Primerelemento
while (c != '*') {
Mientrasnoelcentinela
if (c == buscado) {
Procesarelemento
cont++;
}
Siguienteelemento
cin >> c;
}
cout << buscado << " aparece " << cont
<< " veces.";
Fundamentos de la programación: Tipos e instrucciones II
Sumadelosnúmerosdelasecuencia
Página 361
suma2.cpp
Luis Hernández Yáñez
Centinela:0
int sumaSecuencia() {
double d, suma = 0;
ifstream archivo; // Archivo de entrada (lectura)
archivo.open("datos.txt");
if (archivo.is_open()) {
archivo >> d; // Obtener el primero
while (d != 0) { // Mientras no sea el centinela
suma = suma + d; // Procesar el dato
archivo >> d; // Obtener el siguiente
}
archivo.close();
}
return suma;
}
Fundamentos de la programación: Tipos e instrucciones II
Página 362
Luis Hernández Yáñez
Fundamentos de la programación: Tipos e instrucciones II
Página 363
sumatorio.cpp
Recurrencia:
ei+1 =ei +1
e1 =1
1 2 3 4 5 6 7 8 ...
Luis Hernández Yáñez
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;
Últimoelementodelasecuencia:n
}
Fundamentos de la programación: Tipos e instrucciones II
Página 364
long long int suma(int n) {
int sumatorio = 0;
for (int i = 1; i <= n; i++) {
sumatorio = sumatorio + i;
}
...
sumatorio = 0;
int i = 1;
n
5
?
sumatorio
15
10
01
3
6
false
i <= n
i
2
51
4
3
6
2 1
1
5 4 3 2 1
4 3 2 1
3 2 1
Luis Hernández Yáñez
Secuencia
true
sumatorio += i;
i = i + 1;
Fundamentos de la programación: Tipos e instrucciones II
Página 365
Definición
Fi =Fi‐1 +Fi‐2
F1 =0
F2 =1
0 1 1 2 3 5 8 13 21 34 55 89 ... Luis Hernández Yáñez
¿Findelasecuencia?
PrimernúmerodeFibonaccimayorqueunnúmerodado
EsenúmerodeFibonacciactúacomocentinela
Sinum es50,lasecuenciaserá:
0 1 1 2 3 5 8 13 21 34 Fundamentos de la programación: Tipos e instrucciones II
Página 366
fibonacci.cpp
Luis Hernández Yáñez
Recorridodelasecuenciacalculada
int num, fib, fibMenos2 = 0, fibMenos1 = 1; // 1º y 2º
fib = fibMenos2 + fibMenos1; // Calculamos el tercero
cout << "Hasta: ";
cin >> num;
if (num >= 1) { // Ha de ser entero positivo
cout << "0 1 "; // Los dos primeros son <= num
while (fib <= num) { // Mientras no mayor que num
cout << fib << " ";
fibMenos2 = fibMenos1; // Actualizamos anteriores
fibMenos1 = fib; // para obtener...
fib = fibMenos2 + fibMenos1; // ... el siguiente
}
}
¿Demasiadoscomentarios?
Paranooscurecerelcódigo,mejorunaexplicaciónalprincipio
Fundamentos de la programación: Tipos e instrucciones II
Página 367
Elbuclecalculaadecuadamentelasecuencia:
while (fib <= num) {
cout << fib << " ";
fibMenos2 = fibMenos1;
fibMenos1 = fib;
fib = fibMenos2 + fibMenos1;
}
Luis Hernández Yáñez
num 100
?
fib
5
2
3
1
?
fibMenos1
3
1
2
?
fibMenos2
2
1
0
?
Fundamentos de la programación: Tipos e instrucciones II
0 1 1 2 3 5 ...
Página 368
Luis Hernández Yáñez
Fundamentos de la programación: Tipos e instrucciones II
Página 369
Localizacióndelprimerelementoconunapropiedad
Luis Hernández Yáñez
Inicialización
Mientrasnoseencuentreelelemento
y noseestéalfinaldelasecuencia:
Obtenerelsiguienteelemento
Comprobarsielelementosatisfacelacondición
Finalización
(tratarelelementoencontradooindicarquenosehaencontrado)
Elementoquesebusca:satisfaráunacondición
Doscondicionesdeterminacióndelbucle:seencuentra/alfinal
Variablelógicaqueindiquesisehaencontrado
Fundamentos de la programación: Tipos e instrucciones II
Página 370
Localizacióndelprimerelementoconunapropiedad
Inicialización/encontrado = false;
¿Alfinalo
encontrado?
true
false
Obtenerelemento
Luis Hernández Yáñez
¿Encontrado?
Finalización
Fundamentos de la programación: Tipos e instrucciones II
Página 371
Implementaciónconwhile
Inicialización
Obtenerelprimerelemento
Mientrasniencontradonielcentinela:
Obtenerelsiguienteelemento
Finalización(¿encontrado?)
Inicialización
Obtener1º
¿Encontrado
ocentinela?
false
Luis Hernández Yáñez
Obtenersiguiente
Finalización
Fundamentos de la programación: Tipos e instrucciones II
Página 372
true
Primernúmeromayorqueunodado
busca.cpp
double d, num;
bool encontrado = false;
cout << "Encontrar primero mayor que: ";
cin >> num;
cout << "Siguiente (‐1 para terminar): ";
cin >> d; // Obtener el primer elemento
while ((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
}
}
Fundamentos de la programación: Tipos e instrucciones II
Página 373
Fundamentos de la programación: Tipos e instrucciones II
Página 374
Luis Hernández Yáñez
Luis Hernández Yáñez
Centinela:‐1
Coleccioneshomogéneas
Unmismotipodedatoparavarioselementos:
 Notas de los estudiantes de una clase
 Ventas de cada día de la semana
 Temperaturas de cada día del mes
...
EnlugardedeclararN variables...
Luis Hernández Yáñez
vLun
125.40
vMar
76.95
vMie
328.80
vJue
254.62
vVie
435.00
vSab
164.29
vDom
0.00
...declaramosunatabladeN valores:
ventas 125.40
Índices
0
76.95
1
328.80 254.62 435.00 164.29
2
3
4
5
Fundamentos de la programación: Tipos e instrucciones II
0.00
6
Página 375
Estructurasecuencial
Cadaelementoseencuentraenunaposición(índice):
 Losíndicessonenterospositivos
 Elíndicedelprimerelementosiemprees0
 Losíndicesseincrementandeunoenuno
ventas 125.40
Luis Hernández Yáñez
0
76.95
1
328.80 254.62 435.00 164.29
2
3
4
0.00
5
6
Accesodirecto
Acadaelementoseaccedeatravésdesuíndice:
ventas[4] accedeal5ºelemento(contieneelvalor435.00)
cout << ventas[4];
ventas[4] = 442.75;
Datosdeunmismotipobase:
Seusancomocualquiervariable
Fundamentos de la programación: Tipos e instrucciones II
Página 376
Declaracióndetiposdearrays
typedef tipo_base nombre_tipo[tamaño];
Ejemplos:
Luis Hernández Yáñez
typedef
typedef
typedef
typedef
typedef
double tTemp[7];
short int tDiasMes[12];
char tVocales[5];
double tVentas[31];
tMoneda tCalderilla[15]; // Enumerado tMoneda
Recuerda: Adoptamoselconveniodecomenzar
losnombresdetipoconunat minúscula,seguida
deunaovariaspalabras,cadaunaconsuinicialenmayúscula
Fundamentos de la programación: Tipos e instrucciones II
Página 377
Declaracióndevariablesarrays
typedef
typedef
typedef
typedef
tipo nombre;
double tTemp[7];
short int tDiasMes[12];
char tVocales[5];
double tVentas[31];
Ejemplos:
tempMax ? ? ? ? ? ? ?
tTemp tempMax;
0
tDiasMes diasMes;
1
2
1
2
3
5
6
4
5
6
7
8
9
10
11
vocales ? ? ? ? ?
tVocales vocales;
0
Luis Hernández Yáñez
4
diasMes ? ? ? ? ? ? ? ? ? ? ? ?
0
tVentas ventasFeb;
3
1
2
ventasFeb ? ? ? ? ? ? ? ? ? ? ? ? ?
0
1
2
3
4
5
6
7
8
9 10 11 12
NOseinicializanloselementosautomáticamente
Fundamentos de la programación: Tipos e instrucciones II
Página 378
3
...
4
?
30
Luis Hernández Yáñez
Fundamentos de la programación: Tipos e instrucciones II
Página 379
nombre[índice]
Cadaelementoseaccedeatravésdesuíndice(posiciónenelarray)
tVocales vocales;
vocales
typedef char tVocales[5];
'a'
'e'
'i'
'o'
'u'
0
1
2
3
4
5elementos,índicesde0a4:
vocales[0] vocales[1] vocales[2] vocales[3] vocales[4]
Procesamientodecadaelemento:
Comocualquierotravariabledeltipobase
Luis Hernández Yáñez
cout << vocales[4];
vocales[3] = 'o';
if (vocales[i] == 'e') ...
Fundamentos de la programación: Tipos e instrucciones II
Página 380
¡IMPORTANTE!
¡Nosecompruebasielíndiceescorrecto!
¡Esresponsabilidaddelprogramador!
const int Dim = 100;
typedef double tVentas[Dim];
tVentas ventas;
Índicesválidos:enterosentre0yDim‐1
¿Quéesventas[100]?¿Oventas[‐1]?¿Oventas[132]?
¡Memoriadealgunaotravariabledelprograma!
Definelostamañosdelosarraysconconstantes
Fundamentos de la programación: Tipos e instrucciones II
Página 381
Fundamentos de la programación: Tipos e instrucciones II
Página 382
Luis Hernández Yáñez
Luis Hernández Yáñez
ventas[0] ventas[1] ventas[2] ... ventas[98] ventas[99]
Arrays:tamañofijo Buclederecorridofijo(for)
Ejemplo:Mediadeunarraydetemperaturas
Luis Hernández Yáñez
const 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;
Fundamentos 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
tTemp temp;
double media, total = 0; ...
for (int i = 0; i < Dias; i++) {
total = total + temp[i];
}
Memoria
i = 0
true
i<Dias
total+=temp[i]
Luis Hernández Yáñez
Página 383
false
...
i++
Fundamentos de la programación: Tipos e instrucciones II
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
23.36
31.79
84.62
12.40
0.00
43.44
i
3
2
70
4
1
Página 384
mediatemp.cpp
#include <iostream>
using namespace std;
const int Dias = 7;
typedef double tTemp[Dias];
Luis Hernández Yáñez
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;
}
Losusuariosusande1a7paranumerarlosdías
...
Lainterfazdebeaproximarsealosusuarios,
aunqueinternamenteseusenlosíndicesde0a6
Fundamentos de la programación: Tipos e instrucciones II
Página 385
double media(const tTemp temp) {
double med, total = 0; for (int i = 0; i < Dias; i++) { // Recorrido del array
total = total + temp[i];
}
med = total / Dias;
return med;
}
Luis Hernández Yáñez
Losarrayssepasanalasfuncionescomoconstantes
Lasfuncionesnopuedendevolverarrays
Fundamentos de la programación: Tipos e instrucciones II
Página 386
const int Cuantas = 15;
typedef enum { centimo, dos_centimos, cinco_centimos,
diez_centimos, veinte_centimos, medio_euro, euro } tMoneda;
typedef tMoneda tCalderilla[Cuantas];
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;
Fundamentos de la programación: Tipos e instrucciones II
Página 387
Fundamentos de la programación: Tipos e instrucciones II
Página 388
Luis Hernández Yáñez
Luis Hernández Yáñez
string aCadena(tMoneda moneda);
// Devuelve la cadena correspondiente al valor de moneda
buscaarray.cpp
¿Quédíalasventassuperaronlos1.000€?
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;
}
Fundamentos de la programación: Tipos e instrucciones II
Página 389
Fundamentos de la programación: Tipos e instrucciones II
Página 390
Luis Hernández Yáñez
Luis Hernández Yáñez
const int Dias = 365; // Año no bisiesto
typedef double tVentas[Dias];
Luis Hernández Yáñez
Lacapacidaddeunarraynopuedeseralteradaenlaejecución
Eltamañodeunarrayesunadecisióndediseño:
 Enocasionesseráfácil(díasdelasemana)
 Cuandopuedavariarhadeestimarseuntamaño
Nicortoniconmuchodesperdicio(posicionessinusar)
STL (StandardTemplateLibrary)deC++:
Coleccionesmáseficientescuyotamañopuedevariar
Fundamentos de la programación: Tipos e instrucciones II
Página 391
Nosepuedencopiardosarrays(delmismotipo)conasignación:
array2 = array1; // ¡¡¡ NO COPIA LOS ELEMENTOS !!!
Luis Hernández Yáñez
Handecopiarseloselementosunoauno:
for (int i = 0; i < N; i++) {
array2[i] = array1[i];
}
Fundamentos de la programación: Tipos e instrucciones II
Página 392
Luis Hernández Yáñez
Fundamentos de la programación: Tipos e instrucciones II
Página 393
Puedequenonecesitemostodaslasposicionesdeunarray...
Ladimensióndelarrayseráelmáximodeelementos
Peropodremostenermenoselementosdelmáximo
Necesitamosuncontadordeelementos...
Luis Hernández Yáñez
const int Max = 100;
typedef double tArray[Max];
tArray lista;
int contador = 0;
contador:indicacuántasposicionesdelarrayseutilizan
Sóloaccederemosalasposicionesentre0ycontador‐1
Lasdemásposicionesnocontieneninformacióndelprograma
Fundamentos de la programación: Tipos e instrucciones II
Página 394
lista.cpp
#include <iostream>
using namespace std;
#include <fstream>
const int Max = 100;
typedef double tArray[Max];
Luis Hernández Yáñez
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;
} ...
Fundamentos de la programación: Tipos e instrucciones II
Página 395
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;
Luis Hernández Yáñez
}
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;
Sólorecorremoshastacont‐1
return med;
}
Fundamentos de la programación: Tipos e instrucciones II
Página 396
LicenciaCC(Creative Commons)
Estetipodelicenciasofrecenalgunosderechosaterceraspersonas
bajociertascondiciones.
Estedocumentotieneestablecidaslassiguientes:
Reconocimiento(Attribution):
Encualquierexplotacióndelaobraautorizadaporlalicencia
haráfaltareconocerlaautoría.
Luis Hernández Yáñez
Nocomercial(Noncommercial):
Laexplotacióndelaobraquedalimitadaausosnocomerciales.
Compartirigual(Sharealike):
Laexplotaciónautorizadaincluyelacreacióndeobrasderivadas
siemprequemantenganlamismalicenciaalserdivulgadas.
Pulsaenlaimagendearribaaladerechaparasabermás.
Fundamentos de la programación: Tipos e instrucciones II
Página 397
Descargar