Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales....

63
TEMA Estructuras de control Dept. Ciencias de la Computación e I.A. Universidad de Granada

Transcript of Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales....

Page 1: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

TEM

A

Estructuras de control

Dept. Ciencias de la Computación e I.A.

Universidad de Granada

Page 2: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

ÍndiceEstructura secuencial.

Ejemplos

Estructuras condicionales. Condicional SimpleCondicional DobleCondicional MúltipleEjemplos

Estructuras repetitivas. Bucles Controlados por condiciónBucles Controlados por contadorEjemplos

Page 3: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Conceptos Básicos

Las estructuras de control de un lenguaje de programación se refieren al orden en que lasinstrucciones de un algoritmo se ejecutarán. El orden de ejecución de las sentencias o instrucciones determinán el flujo de control.

Las tres estructuras básicas de control son:

secuenciaselecciónrepetición

Page 4: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Conceptos BásicosUn programa propio puede ser escrito utilizandolas tres estructuras de control básicas (Bôhm y Jacopin (1996)).

Un programa se define como propio si cumple lo siguiente:

Posee un sólo punto de entrada y salida o fin paracontrol del programa.Existen caminos desde la entrada hasta la salidaque se pueden seguir y que pasan por todas laspartes del programa.Todas las instrucciones son ejecutadas y no existen lazos o bucles infinitos.

Page 5: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Estructura SecuencialLas sentencias se ejecutan sucesivamente, en el orden en que aparecen. No existen “saltos” o bifurcaciones.// Cálculo de Raices de una ecuación de grado 2.#include <iostream>

#include <cmath>

using namespace std;

int main(){

double a,b,c,r1,r2;

1 cout << "\nIntroduce coeficiente de 2o grado: ";

2 cin >> a;

3 cout << "\nIntroduce coeficiente de 1er grado: ";

4 cin >> b;

5 cout << "\nIntroduce coeficiente independiente: ";

6 cin >> c;

7 r1 = ( -b + sqrt( b*b-4*a*c ) ) / (2*a);

8 r2 = ( -b - sqrt( b*b-4*a*c ) ) / (2*a);

9 cout << "Las raíces son" << r1 << " y " << r2 << endl;

}

Page 6: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Estructura SecuencialSi bien el programa anterior es correcto, no es capaz de manejar situaciones excepcionales. Por ejemplo, ¿qué pasa en la sentencia:

r1 = ( -b + sqrt( b*b-4*a*c ) ) / (2*a);si a = 0 o b*b-4*a*c < 0?En el primer caso, obtendríamos un error de ejecución por intentar hacer una división por cero.

Solución: primero comprobar (mediante estructuras condicionales), y no efectuar el cálculo si no es posible

Pero antes....

Page 7: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Diagrama de Flujo

Es una representación gráfica de un algoritmoSe construyen a partir de símbolos especiales que se conectan mediante flechas que indican el flujo de ejecución.

Operacionesde E/S

Estructura Secuencial

Condición

Dirección de Flujo

Inicio

Fin

Page 8: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Ejemplo del Cálculo de Raíces (suponiendo discriminante no negativo)

Page 9: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Estructura CondicionalTambien recibe el nombre de “estructura de selección”

Permite elegir entre diferentes cursos de acción en función de condiciones.

Si la nota del examen es mayor o igual que 5mostrar “Aprobado”

Si la condición es verdadera, entonces se ejecuta la sentencia mostrar, y luego el programa continuaría en la sentencia siguiente al Si

Si la condición es falsa, la sentencia mostrar se ignora y el programa continúa

Page 10: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Estructura Condicional Simple

La instrucción en pseudo código

Si la nota del examen es mayor o igual que 5mostrar “Aprobado”

Se traduce a C++ mediante una sentencia condicional simple:

if ( nota >= 5 ) cout << “Aprobado”;

La forma general es:

if (<condicion>) <bloque if>;

Una expresión lógica

Una sentencia o conjunto de sentencias (encerradas entre {} )

Page 11: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Estructura Condicional SimpleEl diagrama de flujo asociado es:

Expr Cond.

Bloque IF

True

False

Page 12: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Cálculo de Raíces// Calculo de Raices: control de la variable a#include <iostream>#include <cmath>using namespace std;

int main(){double a,b,c,r1,r2; 1 cout << "\nIntroduce coeficiente de 2o grado: ";2 cin >> a;3 cout << "\nIntroduce coeficiente de 1er grado: ";4 cin >> b;5 cout << "\nIntroduce coeficiente independiente: ";6 cin >> c;7 if (a!=0) {8 r1 = ( -b + sqrt( b*b-4*a*c ) ) / (2*a);9 r2 = ( -b - sqrt( b*b-4*a*c ) ) / (2*a);10 cout << "Las raíces son" << r1 << " y “ << r2;

}}

Page 13: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Cálculo de Raíces (2)

Esta aproximación no calcula raíces si a=0.

¿Cómo hacer que también calcule la solución sia=0 (ecuación de primer grado)?

11 if (a==0)12 cout << “Tiene una única raíz " << -c/b << endl;}

Algo a considerar: las condiciones son excluyentes (a vale cero o a vale distinto de cero)

Page 14: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Estructura Condicional DoblePermite elegir entre 2 cursos de acción diferentes en función del valor de verdad de una expresión lógica.

Si la nota del examen es mayor o igual que 5mostrar “Aprobado”

Si no mostrar “Suspenso”

En C++:

if ( nota >= 5 ) cout << “Aprobado”;

else

cout << “Suspenso”;

La forma general es:

if( <condicion> ) < bloque if >;

else

< bloque else >;

Page 15: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Estructura Condicional DobleEl diagrama de flujo asociado es:

Expr Cond.

Bloque IF

TrueFalse

Bloque ELSE

Page 16: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Cálculo de Raíces

7 if (a!=0) {8 r1 = ( -b + sqrt( b*b-4*a*c ) ) / (2*a);9 r2 = ( -b - sqrt( b*b-4*a*c ) ) / (2*a);10 cout << "Las raíces son" << r1 << "y“ << r2;

}11 else {12 r1 = -c / b;13 cout << “La unica raiz es: “ << r1;

}

En la ecuación de segundo grado, cuando a = 0, entonces la raíz es única y vale –c/b

Los bloques comienzan con { y terminan con }

// Inicio Bloque

// Inicio Bloque

// Fin Bloque

// Fin Bloque

Page 17: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Ejemplo: el mayor de tres números

¿Cómo hacer para calcular el máximo de tres números a, b y c y almacenar el resultado en una variable max cuyo valor se mostrará por pantalla al final?

Page 18: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Ejemplo: el mayor de tres… (2)

// Programa para calcular el máximo de tres números// que se almacenará en otra variable y se // mostrará en la pantalla#include <iostream>#include <cmath>

using namespace std;

int main() {int a, b, c, max;

1 cout << “Valor de a: “; cin >> a;2 cout << “Valor de b: “; cin >> b;3 cout << “Valor de c: “; cin >> c;

...

Page 19: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Ejemplo: el mayor de tres… (3)

...4 if ((a>=b) && (a>=c))5 max = a;6 if ((b>=a) && (b>=c))7 max = b;8 if ((c>=a) && (c>=b))9 max = c;

10 cout << “El mayor es “ << max << endl;}

Page 20: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Ejemplo: el mayor de tres… (4)

(a>=b)y

(a>=c)max = a

(b>=a)y

(b>=c)max = b

(c>=a)y

(c>=b)max = c

cout << max

true

true

true

false

false

false

Page 21: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Anidamiento de Estructuras Condicionales

Si la nota es mayor o igualque 9

imprimir "Sobresaliente”else Si la nota es mayor o igual que 7

imprimir "Notable"else Si la nota es mayor o igualque 5

imprimir "Aprobado"else

imprimir "Suspenso"

if (nota>=90)

cout << “A”;

else if (nota>=80)

cout << “B”;

else if (nota>=70)

cout << “C”;

else if (nota>=60)

cout << “D”;

else cout << “E”;

Page 22: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

¿ Cuando se ejecuta cada instrucción ?

if (condic_1) {inst_1;if (condic_2)

{inst_2;}

else{ inst_3;}

inst_4;}

else{ inst_5;}

condic_1 condic_2

inst_1 true independiente

inst_2 true true

inst_3 true false

inst_4 true independiente

inst_5 false independiente

Page 23: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Ejemplo: el mayor de tres… (5)...

4 if (a>=b) 5 if (a>=c) 6 max = a;7 else8 max = c;9 else7 if (b>=c) 4 max = b;5 else6 max = c;

...

Opción 2

Page 24: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Ejemplo: el mayor de tres… (6)

a>=b

b>=c a>=c

max = amax = cmax = bmax = c

Imprime max

true

truetrue

false

false false

Page 25: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Ejemplo: el mayor de tres… (7)

...4 if (a>=b) 5 max = a;6 else7 max = b;8 if (c>max) 9 max = c;

...

Opción 3

Page 26: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Ejemplo: el mayor de tres… (8)

a>=btruefalse

max = amax = b

c>max

max = c

true

Imprime max

false

Page 27: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Ejemplo: el mayor de tres… (8)

1 ó 22Opción 3

12Opción 2

13Opción 1

AsignacionesCondiciones

Buscaremos un término medio entre Eficiencia y Elegancia

Page 28: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Ejercicios

Completar el programa de la ecuación de segundo grado, teniendo en cuenta los valores del discriminante también.

Implementa un programa que calcule el mayor de cuatro números.

Page 29: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Ejemplo#include <iostream>using namespace std;int main(){int dato1,dato2;char opcion;

cout << "Introduce el primer operando: ";cin >> dato1;cout << "Introduce el segundo operando: ";cin >> dato2;cout << "Selecciona (S) sumar, (R) restar: ";cin >> opcion;

if (opcion == 'S')cout << "Suma = " << dato1+dato2 << endl;

if (opcion == 'R')cout << "Resta = " << dato1-dato2 << endl;

if ((opcion != 'R') && (opcion != 'S'))cout << "Ninguna operacion\n";

}

En este caso, las condiciones no son excluyentes

Page 30: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Ejemplo#include <iostream>using namespace std;

int main(){int dato1,dato2;char opcion;

cout << "Introduce el primer operando: ";cin >> dato1;cout << "Introduce el segundo operando: ";cin >> dato2;cout << "Selecciona (S) sumar, (R) restar: ";cin >> opcion;

if (opcion == 'S')cout << "Suma = " << dato1+dato2 << endl;

else if (opcion == 'R')cout << "Resta = " << dato1-dato2 << endl;

else cout << "Ninguna operacion\n";}

Más eficiente

Page 31: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Estructura Condicional MúltiplePermite definir en una sola estructura, una serie de pares (condición, acción), con condiciones mútuamente excluyentes.Muy utilizada en la construcción de menús.

switch (<expresión>) {

case<constante1>:<sentencias1>

break;

case <constante2>:<sentencias2>

break;

.........................

[default: <sentencias>]

}

Page 32: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Estructura Condicional Múltiple<expresión> es una expresión entera o carácter.<constante1> ó <constante2> es un literal tipo entero o tipo carácter.switch sólo comprueba la igualdad.No debe haber dos casos (case) con la misma <constante> en el mismo switch. Si esto ocurre, sólo se ejecutan las sentencias correspondientes al caso que aparezca primero.El identificador especial default permite incluir un caso por defecto, que se ejecutará si no se cumple ningún otro. Se suele colocar como el último de los casos.En las estructuras condicionales múltiples también se permite el anidamiento.

Page 33: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

#include <iostream>using namespace std;int main(){int dato1,dato2;char opcion;

cout << "Introduce el primer operando: ";cin >> dato1;cout << "Introduce el segundo operando: ";cin >> dato2;cout << "Selecciona (S) sumar, (R) restar: ";cin >> opcion;

switch (opcion){case 'S': {cout << "Suma = " << dato1+dato2 << endl;

break;}

case 'R': {cout << "Resta = " << dato1-dato2 << endl;break;}

default: cout << "Ninguna operacion\n";}

}

Ejemplo 1

Page 34: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

cout << "Introduce el primer operando: ";cin >> dato1;cout << "Introduce el segundo operando: ";cin >> dato2;cout << "Selecciona (S) sumar, (R) restar: ";cin >> opcion;

switch (opcion){case 's':case 'S': {cout << "Suma = " << dato1+dato2 << endl;

break;}

case 'r':case 'R': {cout << "Resta = " << dato1-dato2 << endl;

break;}

default: cout << "Ninguna operacion\n";}

}

Ejemplo 2

Page 35: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Estructuras Repetitivas

Page 36: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Estructuras Repetitivas

Las estructuras repetitivas son también conocidas como bucles, ciclos o lazos.

Una estructura repetitiva permite la ejecución de un conjunto de sentencias:

hasta que se satisface una determinada condición (controladas por condición)

un número determinado de veces (controladas por contador)

Page 37: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Bucles Controlados por Condición

Se ejecuta el conjunto de sentencias de interés mientras la condición sea verdadera.

Existen dos formas básicas de construcción:

Pre - Testwhile (< condición>){

<cuerpo del bucle>}

Post - Testdo{<cuerpo del bucle>}while (< condición>);

Primero se pregunta y luego se ejecuta

Primero se ejecuta luego se pregunta

Page 38: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Bucles (Pre / Post) Test

Condición

<Cuerpo Bucle>

True

False

Condición

<Cuerpo Bucle>

True

False

Pre - Test Post - Test

Page 39: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Ejemplo

cont = 1;

do {cout << "****" << endl;cont = cont + 1;

}while (cont <= 10);

cont = 0;

do {cout << "****" << endl;cont = cont + 1;

}while (cont < 10);

Escribir 10 líneas con 4 estrellas cada una

cont = 1;

while (cont <= 10){cout << "****" << endl;cont = cont + 1;

}

cont = 0;

while (cont < 10){cout << "****" << endl;cont = cont + 1;

}

Page 40: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Ejemplo

cin >> topecont = 0;

do {cout << "****" << endl;cont = cont + 1;

}while (cont < tope);

Escribir tope líneas con 4 estrellas cada una

Problema si tope = 0

cin >> tope;cont = 0;

while (cont < tope){cout << "****" << endl;cont = cont + 1;

}

Solución

Page 41: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Ejemplo

cin >> topei = 0;while (i <= tope)

{cout << i << endl;i = i + 2;}

Escribir los números pares entre [0..tope]

¿Qué ocurre si el código anterior se cambia por :

cin >> topei = 0;while (i <= tope)

{i = i + 2;cout << i << endl;}

El 0 no se imprime e imprime un número par

de más

Page 42: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Ejemplo: control por centinela

suma = 0;do{cin >> valor;suma = suma + valor;

}while (valor != -1)cout << "La suma es"

<< suma;

Sumar valores que se leen por teclado hasta que se lee -1.(el valor utilizado para detener el procesamiento se conoce como centinela)

Se procesa el valor centinela.Esta clase de problemas se evita utilizando la técnica de lectura anticipada.

suma = 0;cin >> valor;while (valor != -1){suma = suma + valor;cin >> valor;} cout << "La suma es"

<< suma;

Lectura anticipada: se usa un bucle pre-test y se comprueba el primer valor.

Page 43: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Ciclos post-test como Filtros en la Entrada de Datos

Los ciclos post-test son útiles para forzar que los datos de entrada pertenezcan a un rango o conjunto de opciones predeterminados.

// filtro para valores positivosdo{cout << "Introduzca un valor > 0:";cin >> valor;

}while (valor < 0);

// filtro para 's','S','n','N'do{cout << "Desea Salir (s/n)?:";cin >> opc;

}while((opc != 's')&&(opc !='S')&&(opc != 'n')&&(opc != 'N'));

Page 44: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Ejemplo: lectura anticipada (1)// Programa que va leyendo números enteros hasta que// se introduzca el cero. Imprimir el número de// pares e impares introducidos

#include <iostream>using namespace std;

int main(){int ContPar, ContImpar, valor;

ContPar=0;ContImpar=0;cout << "Introduce valor: \n";cin >> valor;...

Page 45: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Ejemplo: lectura anticipada (1)

...while (valor != 0) {

if (valor % 2 == 0)ContPar = ContPar + 1;

elseContImpar = ContImpar + 1;

cout << "Introduce valor: \n";cin >> valor;}

cout << "Fueron " << ContPar << " pares y "<< ContImpar << " impares\n";

}

Page 46: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Problema para Resolver

Tenemos que realizar un programa que calcule la nota promedio de un conjunto de notas. La cantidad de notas puede variar en cadaejecución del programa.

Utilizaremos un valor "centinela" para indicarel fin de las notas.El proceso terminará cuando se ingrese dichovalorEl valor concreto del centinela debe ser diferente al de cualquier posible entrada válida(en este caso podría ser -1)

Page 47: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Bucles sin fin

Bucle al que la evaluación de la condición nunca le permite dejar de ejecutarse.

contador = 2;while (contador < 3) {

contador--;cout << contador << endl;}

contador = 1;while (contador != 10) {

contador = contador + 2;}

contador = contador – 1;

Page 48: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Utilidad: filtros con bucles post-test// Introducir un único valor, pero positivo.// Imprimir el coseno.// Entrada: Un valor entero positivo.// Salida: El coseno del valor introducido.#include <iostream>#include <cmath>using namespace std;int main(){

int valor;

do {cout << "\nIntroduzca un valor positivo: ";cin >> valor;}while (valor < 0);

cout << cos(valor);}

Sigue pidiendo el valor mientras sea negativo

(hasta que sea positivo)

Page 49: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Utilidad: filtros con bucles… (2)

char opcion;do{

cout << "Introduzca una opción: \n";cin >> opcion;}while ((opcion!='s') && (opcion!='S') &&

(opcion!='n') && (opcion!='N') );

Sigue pidiendo la opción mientras sea distinta de ‘s’, ‘S’, ‘n’ y ‘N’(hasta que sea una de ellas)

Page 50: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Bucles controlados por contador

Se utilizan para repetir un conjunto de sentencias un número fijo de veces. Se necesita una variable controladora, un valor inicial, un valor final y un incremento.

Page 51: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Ejemplo// Hallar la media de 5 números enteros.// Entradas: 5 números enteros (se leen en valor).// Salidas: La media de los 5 números.…………………int main(){int i, valor, suma;double media;

suma = 0;i = 1; while (i <= 5){

cout << "Introduce el número " << i << "o: \n";cin >> valor;suma = suma + valor;i++; }

media = suma / 5.0;cout << "La media es " << media << endl;}

Valor inicial del contador Prueba de límites del

valor del contador

Incremento del valor del contador

Page 52: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Ejemplo: diagrama de flujo

v_c <= v_final

trueCuerpo del bucle

V_c = v_c + v_incr

true

false

v_c = v_inic

Existe un tipo específico de bucles con esta utilidad

Page 53: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Nuestro problema es:Determinar el promedio de las notas de un

examen

Esta tarea la podemos subdividir en otras máspequeñas: 1. Inicializar variables2. Ingresar, Sumar y Contar las notas del

examen3. Calcular e imprimir el promedio

Pseudo Código y Refinamientos Sucesivos

Page 54: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

La fase de inicialización Inicializar variables se puede refinar a:

Inicializar la variable total a ceroInicializar el contador de notas a cero

La fase Ingresar, Sumar y Contar las notas del examen

se puede refinar a

Ingresar la primera nota (posiblemente el centinela)

Mientras el usuario no ingrese el valor centinelasumar la nota al totalsumar uno al contadorIngresar la siguiente nota (posiblemente el centinela)

Page 55: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

La fase Calcular e imprimir el promedio se puede refinar a

Si la cantidad de notas es distinta de ceroel promedio es la suma de las notas dividido la cantidad Imprimir el promedio

En caso contrarioImprimir “No se ingresaron notas"

Page 56: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Resolución en PseudoCodigoInicializar la variable total a ceroInicializar el contador de notas a cero Ingresar la primera nota (posiblemente el centinela)

Mientras el usuario no ingrese el valor centinelasumar la nota al totalsumar uno al contadorIngresar la siguiente nota (posiblemente el

centinela)

Si la cantidad de notas es distinta de ceroel promedio es la suma de las notas dividido la

cantidadImprimir el promedio

En caso contrarioImprimir “No se ingresaron notas"

Page 57: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

………………….const double CENTINELA = -1.0;int main(){ double contador, suma, avg, nota;

suma = 0; contador = 0; cout << "Ingrese la nota (-1 para fin) ";cin >> nota;

while (nota != CENTINELA){suma = suma + nota;contador = contador + 1;cout << "Ingrese la nota (-1 para fin) ";cin >> nota;

}if(contador > 0)

{avg = suma / contador;cout << " El promedio es " << avg;

}elsecout << " No se ingresaron notas ";

}

Resolución en C++

Ejecutar

Page 58: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Bucles controlados por Contador: FOR

SI conocemos exactamente la cantidad de veces que necesitamos repetir un conjunto de sentencias, entonces podemos usar un bucle FOR.

En general, los bucles controlados por contadorrequieren

una variable de control o contadorUn valor inicial para el contadorUn valor final para el contadorUna condición para verificar si la variable de control alcanzó su valor final.Un valor de incremento (o decremento) con el cualse modifica la variable de control en cada bucle

Page 59: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Bucles controlados por Contador: FOR

La forma general del bucle FOR es:

for (inicializacion; condicion continuación;incremento )< conjunto de sentencias>

Ejemplo: imprimir los valores enteros entre 1 y 10

for( nro = 1; nro <= 10; nro = nro + 1)cout << nro << endl;

Page 60: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Diagrama de Flujo del FOR

Condición

<Cuerpo Bucle>

TrueFalse

Inicialización

Incremento

Page 61: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Relación entre FOR y WHILE

Se debe notar que los bucles FOR se pueden reescribir como bucles WHILE

inicializacion

while (condicion continuacion)

< conjunto de sentencias>

incremento

for ( inicializacion; condicion continuación, incremento )

< conjunto de sentencias>

Page 62: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Ejemplos// tabla de multiplicar de un nro dadoint i,nro;cin >> nro;for(i = 1; i <= 10; i = i + 1){cout << nro * i << endl;}

// sumar los nros pares entre 2 y 200int i,suma;suma = 0;for(i = 2; i <= 200; i = i + 2){ suma = suma + i;}

cout << "la suma es " << suma << endl;

Page 63: Estructuras de controldecsai.ugr.es/~jabellan/temas/t4.pdf · Estructuras condicionales. Condicional Simple ... Estructura Condicional Doble Permite elegir entre 2 cursos de acción

Ejemplos// tabla de multiplicar de un nro dadoint i,nro;cin >> nro;i = 1;while (i <= 10){cout << nro * i << endl;i = i+1; }

// sumar los nros pares entre 2 y 200int i,suma;suma = 0;i = 2;while (i <= 200){ suma = suma + i;

i = i+2;}

cout << "la suma es " << suma << endl;