19
Programación I E. U. Estadística, U. Complutense de Madrid Primer curso, Grupo B Primer curso, Grupo B Curso 2009-2010 Instrucciones de control en C++ Yolanda García Ruiz D17C ygarciar@fdi.ucm.es http://gpd.sip.ucm.es/yolanda/ Departamento de Sistemas Informáticos y Computación (UCM) 1 INSTRUCCIONES DE CONTROL CONTENIDOS CONTENIDOS 1 Introducción a las sentencias de control 1. Introducción a las sentencias de control. 2. Instrucciones o sentencias condicionales: IF, IF-ELSE, SWITCH. 3. Instrucciones o sentencias repetitivas o iterativas: WHILE, DO-WHILE, FOR. 4. Sentencias BREAK y CONTINUE. Instrucciones de control en C++ Yolanda García Ruiz 2009/2010 2

Intrucciones de Dev c++

Embed Size (px)

Citation preview

Page 1: Intrucciones de Dev c++

Programación IE. U. Estadística, U. Complutense de Madrid

Primer curso, Grupo BPrimer curso, Grupo BCurso 2009-2010

Instrucciones de control en C++

Yolanda García Ruiz D17C [email protected] @http://gpd.sip.ucm.es/yolanda/

Departamento de Sistemas Informáticos y Computación (UCM)

1

INSTRUCCIONES DE CONTROL

CONTENIDOSCONTENIDOS

1 Introducción a las sentencias de control1. Introducción a las sentencias de control.

2. Instrucciones o sentencias condicionales: IF, IF-ELSE, SWITCH.

3. Instrucciones o sentencias repetitivas o iterativas: WHILE, DO-WHILE, FOR.

4. Sentencias BREAK y CONTINUE.

Instrucciones de control en C++ Yolanda García Ruiz 2009/2010 2

Page 2: Intrucciones de Dev c++

INSTRUCCIONES DE CONTROL

1Introducción a las sentencias de controlIntroducción a las sentencias de control

3Instrucciones de control en C++ Yolanda García Ruiz 2009/2010

INSTRUCCIONES DE CONTROL

Introducción

Hasta ahora solo hemos visto la codificación en el lenguaje C++ de las estructuras secuenciales, lo que nos proporciona programas lineales, es decir, comienzan por la primera instrucción y acababan por la última,decir, comienzan por la primera instrucción y acababan por la última, ejecutándose todas una sola vez.

EntradaSecuenciales Salida

Asignación

C di i lSimplesEstructuras CondicionalesSimplesMúltiples

Cí liHacer para

EstructurasAlgorítmicas

Cíclicas Hacer mientrasRepetir hasta

4Instrucciones de control en C++ Yolanda García Ruiz 2009/2010

Page 3: Intrucciones de Dev c++

INSTRUCCIONES DE CONTROL en C++

Esta forma de programación sólo me permite resolver problemas sencillos.

Para resolver problemas más complejos, nos puede interesar que dependiendo de los valores de los datos, se ejecuten unas instrucciones u otras. Las instrucciones condicionales nos van a permitir representar éste tipo de comportamiento.

Sentencias IF y SWITCH

En otro casos, nos encontraremos con la necesidad de repetir una

Sentencias IF y SWITCH

instrucción ó instrucciones un número determinado de veces. En éstos casos utilizaremos instrucciones de control iterativas ó repetitivas(ciclos).( )

Sentencias WHILE, DO-WHILE y FOR

5Instrucciones de control en C++ Yolanda García Ruiz 2009/2010

INSTRUCCIONES DE CONTROL en C++

2Instrucciones o sentencias condicionalesInstrucciones o sentencias condicionales

IF, IF-ELSE, SWITCH

6Instrucciones de control en C++ Yolanda García Ruiz 2009/2010

Page 4: Intrucciones de Dev c++

Instrucciones Condicionales en C++

Instrucción condicional simple: IF

Se corresponde con la estructura algorítmica

El formato general de una

si ?

condiciónno

El formato general de una

sentencia if es la siguiente:Instrucción (es )

if (condición) instrucción;

if (condición) {

instrucción 1;instrucción 1;…instrucción n;

}Si se cumple la condición, entonces seejecuta la instrucción ó el bloque de} j qinstrucciones; en caso contrario, no seejecutan.Atención !!!

7Instrucciones de control en C++ Yolanda García Ruiz 2009/2010

Instrucciones Condicionales

Instrucción condicional simple: IF

Ejemplos:#include <iostream>int main(){

#include <iostream>int main(){

{...

if (cantidad > 100){

{int a, x = 0, y;cin >> a;

if (a==0)

{descuento = 0.2;precio = n*descuento;

}if (a==0)x = 1;

cout << x;

}

...return 0;

}return 0;}

}

8Instrucciones de control en C++ Yolanda García Ruiz 2009/2010

Page 5: Intrucciones de Dev c++

Instrucciones Condicionales

Instrucción condicional doble : IF-ELSEnosi ?

di iócondición

Instrucción(es )1 Instrucción(es )2

Estructura algorítmica asociada:

Formato general de la Instrucción(es )1 Instrucción(es )2Formato general de la sentencia if-else

if ( di ió )if ( di ió ) if (condición) instrucción 1;

elseinstrucción 2;

if (condición) {

varias instrucciones 1;} instrucción 2;}

else{

varias instrucciones 2;Si se cumple la condición, se ejecutan lasinstrucciones del primer bloque;varias instrucciones 2;

}instrucciones del primer bloque;

si no, se ejecutan las instrucciones del segundobloque.

9Instrucciones de control en C++ Yolanda García Ruiz 2009/2010

Instrucciones Condicionales

Instrucción condicional IF, IF-ELSE

Diagrama sintáctico:

if ( )condición instrucción ;

{ }instrucción ;

else instrucción ;

{ }instrucción ;

10Instrucciones de control en C++ Yolanda García Ruiz 2009/2010

Page 6: Intrucciones de Dev c++

Instrucciones Condicionales

Instrucción condicional doble : IF-ELSEEjemplos:Ejemplos:

#include <iostream>int main()

#include <iostream>int main(){

int main(){

int a, x;cin >> a;

...

if (cantidad > 100){

if (a==0)x = 1;

else

{descuento = 0.2;precio = n*descuento;

}lelse

x= 0;

cout << x;

elseprecio = n;

...return 0;

}return 0;

}

11Instrucciones de control en C++ Yolanda García Ruiz 2009/2010

Instrucciones Condicionales

Instrucción condicional doble : IF-ELSE anidadas

Hemos visto dos tipos de instrucciones condicionales, con una o dos alternativas. Podemos utilizar las instrucciones IF-ELSE anidadas, es decir, que alguna de las ramas sea a su vez otra instrucción IF-ELSE. Así podemos implementar decisiones que implican más de dos alternativas.

nosi ?

condición1

A ió ( ) nosi ?Acción (es) nosi ?

condición2

Acción (es) Acción (es)

12Instrucciones de control en C++ Yolanda García Ruiz 2009/2010

Page 7: Intrucciones de Dev c++

Instrucciones Condicionales

Instrucción condicional doble : IF-ELSE anidadas

.if (condición1)

instrucción 1;

La sintaxis deinstrucciones IF-ELSE anidadas

instrucción 1;else

if (condición2) instrucción 2;

if (condición1) instrucción 1;;

elseinstrucción 3;

elseif (condición2)

instrucción 2;else

if (condición3) instrucción 3;

La escritura en sangría facilita la comprensión del código así como el

elseinstrucción 4;

p gchequeo del buen funcionamiento.

13Instrucciones de control en C++ Yolanda García Ruiz 2009/2010

Instrucciones Condicionales

#include <iostream>int main()

#include <iostream>int main()A B

{int a, b, c, max;cin >> a >> b >> c;

{int a, b, c, max;cin >> a >> b >> c;

if (a > b)if (a > c)

cout << a;

if (a > b)if (a > c)

cout << a;¿Qué hacen else

cout << c;else

if (b > c)

else cout << c;

elseif (b > c)

¿Qéstos

códigos ?

if (b > c)cout << b;

else cout << c;

if (b > c)cout << b;

else cout << c;

return 0;}

cout << “fin del programa”;

return 0;}

14Instrucciones de control en C++ Yolanda García Ruiz 2009/2010

Page 8: Intrucciones de Dev c++

Instrucciones Condicionales

Instrucción condicional múltiple : SWITCH

Estructura algorítmica asociada

Formato general de la sentencia witch

Constante 1 ?DATO

A ió ( ) A ió ( )

ConstanteN

sentencia witch

switch (selector) {

Acción (es)

Acción (es)

Constante 2

. . .

Acción (es)

. . .

{case constante1:

instrucción1 ó bloque de instruccionesbreak;

t t 2 icase constante2:instrucción2 ó bloque de instruccionesbreak;

defeault:

Permiten comparar una ‘variable’ con distintos

valores posibles, ejecutando defeault:instrucción2 ó bloque de instrucciones

}para cada caso una serie de instrucciones específicas.

15Instrucciones de control en C++ Yolanda García Ruiz 2009/2010

Instrucciones Condicionales

Instrucción condicional múltiple : SWITCH

Formato general de la sentencia witch

El valor de selector debe ser un número

switch (selector) {

case constante1:i t ió 1 ó bl d i t i

entero. Puede ser una variable, una expresión ó una llamada a una función.

instrucción1 ó bloque de instruccionesbreak;

case constante2:instrucción2 ó bloque de instrucciones

Cada caso comienza con un case y termina con un break

qbreak;

defeault:instrucción3 ó bloque de instrucciones

}¿Qué ocurre si se me

} olvida algún break ?

16Instrucciones de control en C++ Yolanda García Ruiz 2009/2010

Page 9: Intrucciones de Dev c++

Instrucciones Condicionales

Instrucción condicional múltiple : SWITCH

#include <iostream>int main (){ Si al ejecutar el programa

Ejemplo

{cin>> num;switch (num)

{case 1:

introducimos un 2, obtenemos el mensaje:

‘Ha introducido el nº 2’case 1:

cout << “Ha introducido el nº 1\n”;case 2:

cout << “Ha introducido el nº 2\n”;Si al ejecutar el programa i t d i 1 btbreak;

defeault:cout << “Ha introducido otro nº”;

}

introducimos un 1, obtenemos el mensaje:

‘Ha introducido el nº 1’‘Ha introducido el nº 2’}

return 0;}

‘Ha introducido el nº 2

17Instrucciones de control en C++ Yolanda García Ruiz 2009/2010

INSTRUCCIONES DE CONTROL

3Instrucciones o sentencias repetitivas o iterativasInstrucciones o sentencias repetitivas o iterativas

WHILE, DO-WHILE, FOR

18Instrucciones de control en C++ Yolanda García Ruiz 2009/2010

Page 10: Intrucciones de Dev c++

Instrucciones Iterativas o repetitivas

Instrucciones de control repetitivas

Son aquellas que controlan la repetición de un conjunto de instrucciones denominado bloque o cuerpo del bucle, mediante la evaluación de una

di ió di dcondición o mediante un contador.

Sentencias WHILE, DO-WHILE y FOR

19Instrucciones de control en C++ Yolanda García Ruiz 2009/2010

Instrucciones Iterativas o repetitivas

Instrucción de control repetitiva : WHILE

Se corresponde con la estructura algorítmica hacer_mientras: no?

condiciónsi

Acción(es)Cuerpo del bucle

Formato general de la t i hil

Controla la ejecución de un bloque de instrucciones de tal forma que éstas se ejecutan mientras se cumpla la condición que seráwhile ( condición )

sentencia while

hil ( di ió )

mientras se cumpla la condición, que será evaluada siempre antes de cada repetición.

( ){

instrucción 1;…

instrucción n; Cada repetición del cuerpowhile ( condición )

instrucción;

instrucción n;}

Cada repetición del cuerpo del bucle se denomina

iteración

20Instrucciones de control en C++ Yolanda García Ruiz 2009/2010

Page 11: Intrucciones de Dev c++

Instrucciones Iterativas o repetitivas

Instrucción de control repetitiva : WHILE

Ejemplo:

#include <iostream>i t i ()int main(){

…contador = 0;

La condición será evaluada i t d d it ió

;while (contador < 100)

{cout << “Hola”;

t d ++ erpo

El cuerpo del bucle while se repite

siempre antes de cada iteración.

contador ++;}

...cu

e p pmientras la condición sea cierta.

El cuerpo de un bucle while return 0;

}se ejecutará cero o más veces.

21Instrucciones de control en C++ Yolanda García Ruiz 2009/2010

Instrucciones Iterativas o repetitivasIMPORTANTE

Instrucción de control repetitiva : WHILE

IMPORTANTE

La variable que representa la condición del bucle se denomina

i bl d t l d l b l

InicializaciónSe realiza antes de la instrucción while

variable de control del bucle. Dicha variable debe ser:

- inicializada…contador = 0;while (contador < 100)

- comprobada- actualizada

while (contador < 100){

cout << “Hola”;contador ++; cu

erpo

}...

c

ComprobaciónSe comprueba el valor de la variablep

antes de comenzar la repetición ActualizaciónSe realiza dentro del cuerpo del bucle

durante cada iteración

22Instrucciones de control en C++ Yolanda García Ruiz 2009/2010

Page 12: Intrucciones de Dev c++

Instrucciones Iterativas o repetitivas

Instrucción de control repetitiva : WHILE

int main(){

const bool continuar = true;bool a = true;

Inicializaciónbool a = true;int n;while (a ==continuar){

Comprobación

cin >> n;if (n<0)

{cout << "No se admiten negativos";

Es importante comprobar que en algún momento, la condición del b l h f l d f

ga = false;

}else

cout << "Muy bien otro más: " ;

bucle se hace falsa, de forma que no obtengamos bucles infinitos.

cout << Muy bien, otro más: ;}return 0;

} Actualización

23Instrucciones de control en C++ Yolanda García Ruiz 2009/2010

Instrucciones Iterativas o repetitivas

Instrucción de control repetitiva : DO-WHILE

Se corresponde con la estructura algorítmicaAcción(es)

doinstrucción;

Formato general de la sentencia do-while si

?

condiciónno

instrucción;while ( condición );

do{

instrucción 1;

Se utiliza para ejecutar un bloque de instrucciones al menos una vez.

El cuerpo del bucle se repite mientras se

…instrucción n;

} hil ( di ió )El cuerpo del bucle se repite mientras se

verifica la condición. Dicha condición será evaluada después de cada repetición.

} while ( condición );

24Instrucciones de control en C++ Yolanda García Ruiz 2009/2010

Page 13: Intrucciones de Dev c++

Instrucciones Iterativas o repetitivas

Instrucción de control repetitiva : DO-WHILE

#include <iostream>int main()

Ejemplo:

El cuerpo de un bucle do-whileint main(){

char n;do{ El cuerpo del bucle do-while

El cuerpo de un bucle do while se ejecutará una o más veces.

{cout << "introducir número: ";cin >> n;if ((isdigit(n))== false)

El cuerpo del bucle do-whilese repite mientras la condición sea cierta.

uerp

o

if ((isdigit(n)) false)cout << ”Solo se admiten números";

} while ((isdigit(n)) != false); La condición será evaluada siempre después de cada

cu

return 0;}

siempre después de cada iteración.

25Instrucciones de control en C++ Yolanda García Ruiz 2009/2010

Instrucciones Iterativas o repetitivas

Diferencias entre las instrucciones WHILE y DO-WHILEWHILE y DO-WHILE

En while primero se tiene que cumplirp q pla condición, y luego se ejecuta el

bloque de instrucciones. no?

condiciónsi

A ió ( )

Acción(es)

Acción(es)

?

di ió

Acción(es)

no En do-while primero se ejecuta el bloque de instrucciones y luego sesicondición bloque de instrucciones y luego se comprueba la condición.

26Instrucciones de control en C++ Yolanda García Ruiz 2009/2010

Page 14: Intrucciones de Dev c++

Instrucciones Iterativas o repetitivas

Traducción de WHILE a DO-WHILE

while ( condición )while ( condición ){

instrucción 1;if (condición)

do{…

instrucción n;}

{ instrucción 1;

…instrucción n;;

} while ( condición );

27Instrucciones de control en C++ Yolanda García Ruiz 2009/2010

Instrucciones Iterativas o repetitivas

Instrucción de control repetitiva : FORi ← inf

noSe utiliza para ejecutar un bloque de instrucciones un número fijo de veces que se conoce de antemano.

si ?

i ≤ sup

Se corresponde con la estructura algorítmica hacer_desde … hasta …

se conoce de antemano.Acción(es)

i ← i + 1

for ( inicialización ; condición ; actualización ){

instrucción 1;…

i t ióinstrucción n;} Formato general de la

sentencia for

28Instrucciones de control en C++ Yolanda García Ruiz 2009/2010

Page 15: Intrucciones de Dev c++

Instrucciones Iterativas o repetitivas

Instrucción de control repetitiva : FOR

La instrucción for se vale de una variable de control del ciclo. El ciclo se repite desde el límite inferior, hasta que la variable de control llegue la límite superior.

for ( inicialización; condición; actualización ){

instrucción 1;

p

instrucción 1;…

instrucción n;}

Cabecera del for

}

Una diferencia con el bucle while es que en el for, las operaciones deUna diferencia con el bucle while es que en el for, las operaciones de control del bucle (inicialización, comprobación y actualización ) se realizan en un solo sitio: la cabecera del for.

29Instrucciones de control en C++ Yolanda García Ruiz 2009/2010

Instrucciones Iterativas o repetitivas

Instrucción de control repetitiva : FOR

Parte de inicialización: Inicializa la variable de control del bucle Se

En la cabecera del for nos podemos encontrar con 3 partes o secciones:

Parte de inicialización: Inicializa la variable de control del bucle. Sepueden utilizar una o varias variables.

Parte de iteración: Expresión lógica int main()Parte de iteración: Expresión lógica. El cuerpo del bucle se repite mientras la expresión sea verdadera.

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

Parte de incremento: Incrementa o decrementa el valor de la variable

{cout << “Número: ” << i ;cout << << endl;

}o decrementa el valor de la variable o variables de control.

….return 0;

}

30Instrucciones de control en C++ Yolanda García Ruiz 2009/2010

Page 16: Intrucciones de Dev c++

Instrucciones Iterativas o repetitivas

Instrucción de control repetitiva : FOR

int main()

Ejemplo: La variable de control es n

Es de tipo entero, su valor inicial es 1{

….for (int n = 1; n<=10; n=n+2){

Su valor final es 10

Se incrementa de 2 en 2{cout << “Número: ” << n <<“\t” << n*n ;cout << << endl;

}

Se incrementa de 2 en 2.

Pasada Valor de n

1 1….

return 0;}

2 33 54 75 9

En la primera iteración ó pasada, el valor de n es 1, en la segunda pasada n vale 3. La última pasada se realiza cuando n vale 9.

31Instrucciones de control en C++ Yolanda García Ruiz 2009/2010

Instrucciones Iterativas o repetitivas

Instrucción de control repetitiva : FOR

Se puede inicializar más de una variable, se puede poner más de una condición ó más de un incremento.

int main(){

….for ( int i = 0 j = 100; i<j ; i++ j )

Se declaran 2 variables de control: i y j

Se inicializan a 0 y 100for ( int i = 0, j = 100; i<j ; i++, j--){

int k;k = i+2*j ;

Se inicializan a 0 y 100respectivamente

jcout << k << endl;

}….

return 0;

El cuerpo se ejecutará mientras i sea menor que j

return 0;} Se incrementa la variable i y se

decrementa la variable j

32Instrucciones de control en C++ Yolanda García Ruiz 2009/2010

Page 17: Intrucciones de Dev c++

Instrucciones Iterativas o repetitivas

Instrucción de control repetitiva : FOR

int main(){

…. valor de i valor de j i+j

Valor de las variables de control en cada pasada

for ( int i = 0, j = 5; i+j <100 ; i++, j =j+5 ){

cout << i <<“\t” <<j << (i+j) ;t << dl

valor de i valor de j i+j

0 5 51 10 112 15 173 20 23cout << endl;

}….

return 0;

3 20 234 25 295 30 356 35 417 40 47;

} 7 40 478 45 539 50 5910 55 6511 60 71

Se realizan un totalde 16 pasadas.

12 65 7713 70 8314 75 8915 80 95

Se ejecuta el cuerpo de la instrucción for mientras se cumpla la condición.

33Instrucciones de control en C++ Yolanda García Ruiz 2009/2010

Instrucciones Iterativas o repetitivas

Instrucción de control repetitiva : FOR

Se puede omitir cualquiera de las partes de la cabecera del for (inicialización, condición o incremento).

int main(){

….contador = 1;

Se comporta igual que un while

contador = 1;for ( ; contador <10 ; ){

cout << contador ;

int main(){

….for ( ; ; )

contador++ ;}….

return 0;

for ( ; ; ){

... }Bucle infinito

return 0;}

….return 0;

}

34Instrucciones de control en C++ Yolanda García Ruiz 2009/2010

Page 18: Intrucciones de Dev c++

INSTRUCCIONES DE CONTROL

4 Sentencias BREAK y CONTINUESentencias BREAK y CONTINUE

35Instrucciones de control en C++ Yolanda García Ruiz 2009/2010

Instrucciones Iterativas o repetitivas

Instrucciones break y continue

La instrucción break, además de terminar los case de una instrucción switch, sirve para forzar la terminación inmediata de un bucle.

{instrucción 1;

{instrucción 1;

break;…

instrucción n;

continue;…

instrucción n;;}

...

;}

...

La instrucción continue , interrumpe la ejecución del cuerpo del bucle y fuerza una nueva iteración.

36Instrucciones de control en C++ Yolanda García Ruiz 2009/2010

Page 19: Intrucciones de Dev c++

Instrucciones Iterativas o repetitivas

Instrucciones break y continue

int main(){

….

Ejemplos

for ( int t = 0; t <100 ; t++ ){

cout << t;if (t 10)

int main(){

if (t==10)break; // salir del for

}….

….for ( int t = 0; t <100 ; t++ ){

if (t%10==0)return 0;

}

(t% 0 0)continue;

cout << t;}….

return 0;}

37Instrucciones de control en C++ Yolanda García Ruiz 2009/2010

Instrucciones Iterativas o repetitivas

Instrucciones break y continue

int main(){

Ejemplo

{….do{ Ignora lo que sigue y vuelve a

b l di iócin >> x;if ( x < 0 )

continue;cout << x;

comprobar la condición.

cout << x;

}while (x !=100);….

return 0;}

38Instrucciones de control en C++ Yolanda García Ruiz 2009/2010