Estructuras de Control

Embed Size (px)

Citation preview

  • UNIVERSIDAD MILITAR NUEVA GRANADA CENTRO DE SISTEMAS

    1

    4. ESTRUCTURAS DE CONTROL OBJETIVOS DE LA UNIDAD Utilizar la estructura selectiva if y switch de C++, para la toma de decisiones en la elaboracin de un programa.

    Permitir la utilizacin las sentencias while, do-while y for en los programas de C++, para que se ejecuten bloques de instrucciones mas de una vez.

    INTRODUCCION Los programas que hasta el momento se han realizados en C++, contienen instrucciones de control en las que se ejecutan todas las instrucciones de arriba hacia abajo en el orden que las escribimos; sin embargo en casi todos los programas, se requiere seleccionar las instrucciones a ejecutar segn se cumpla o no condiciones dadas por el programador y ejecutar un nmero determinado de veces un mismo bloque de instrucciones, con un conjunto de datos diferentes. Las estructuras de control selectivas o condicionales, nos permiten realizar cambios en la secuencia o flujo de ejecucin de unas u otras sentencias. En este captulo se aprender a utilizar las estructuras de seleccin if y switch, en cumplimiento o no de una condicin. C++, utiliza dos procedimientos de repeticin: Repeticin controlada por contador y repeticin controlada por centinela, utilizando tres tipos de estructuras de control de repeticin: while, do-while y for.

    4.1 ESTRUCTURAS DE CONTROL SELECTIVAS

    4.1.1 SENTENCIA if La estructura de control de seleccin if en C++, tiene dos alternativas que se ejecutan en funcin del cumplimiento o no de una condicin.

    CASO 1. Sentencias if sencillas Se utiliza cuando se deben ejecutar instrucciones en cumplimiento de una condicin. Sintaxis de la instruccin: if (expresin) Accin En este caso se evala la expresin del parntesis. Si la expresin es verdadera se ejecuta la accin; de lo contrario se ignoran estas acciones y se contina con la ejecucin del programa.

  • MANUAL DE PROGRAMACIN EN C++

    2

    Por ejemplo: if (numero>=0)

    cout

  • UNIVERSIDAD MILITAR NUEVA GRANADA CENTRO DE SISTEMAS

    3

    : : Accin-n Utilizamos este caso cuando se deben evaluar tres o mas alternativas. Cuando la expresin es verdadera, se ejecutan las instrucciones que se mencionen en Accin1, en caso contrario se evala nuevamente la expresin para ejecutar las instrucciones por verdadero en Accin2. Si hay ms alternativas, se colocan mas expresiones. De esta forma si un programa tiene tres alternativas, se requiere dos condicionales; si tiene cuatro alternativas, se requieren tres condicionales y as sucesivamente. Por ejemplo: if (numero==0) cout

  • MANUAL DE PROGRAMACIN EN C++

    4

    EJEMPLO 1: Leer un nmero y escribir si es mayor o menor o igual que 100 Variables: numero

    PSEUDOCODIGO DIAGRAMA DE FLUJO

    Inicio leer numero si (numero > 100) entonces escribir mayor sino escribir menor o igual fin_si fin

    CODIGO EN C++ /*Nmero mayor o menor o igual que cien*/ #include using namespace std; int main() { int numero; cout

  • UNIVERSIDAD MILITAR NUEVA GRANADA CENTRO DE SISTEMAS

    5

    EJEMPLO 2: Leer un nmero y escribir si es menor que cero, igual a cero o mayor que cero. Variable: NUMERO Variables: A: NUMERO

    PSEUDOCODIGO DIAGRAMA DE FLUJO Inicio leer NUMERO si (NUMERO < 0) entonces escribir menor que cero sino si (NUMERO = 0) entonces escribir igual a cero sino escribir mayor que cero fin_si fin_si Fin

    CODIGO EN C++ //Nmero mayor, menor o igual que cero #include using namespace std; int main() { int numero; cout

  • MANUAL DE PROGRAMACIN EN C++

    6

    EJEMPLO 3: Leer tres nmeros, determinar cual es el mayor. Variables: A: Numero 1 B: Numero 2 C: Numero 3

    PSEUDOCODIGO

    DIAGRAMA DE FLUJO

    Inicio leer A, B, C si (A > B y A>C) entonces escribir A sino si (B>A y B>C) entonces escribir B sino escribir C fin_si fin_si fin

    CODIGO EN C++ //Determinar cual es el mayor de tres nmeros #include using namespace std; int main() { int A, B, C; coutB>>C; if(A > B && A>C) cout

  • UNIVERSIDAD MILITAR NUEVA GRANADA CENTRO DE SISTEMAS

    7

    4.1.2 sentencia switch La estructura de control de seleccin switch en C++, permite seleccionar una entre mltiples alternativas. Es especialmente til cuando la seleccin se basa en valores exacto de una variable. Escoger alternativas de valores exactos es ms fcil con un switch que con if anidados. La variable que se utiliza para el switch, se denomina expresin de control o selector, esta puede ser solo de tipo int o char. Sintaxis de la instruccin: switch (selector) {

    case etiqueta1 : sentencias1; break;

    case etiqueta2 : sentencias2; break;

    case etiqueta3 : sentencias3; : break; : : :

    case etiquetan : sentenciasn; break;

    default : sentenciasd; } Se evala la expresin de control o selector y se compara con cada una de las etiquetas case para ejecutar la secuencia de acciones hasta la sentencia break. Cada etiqueta es un valor nico y diferente de los otros, la etiqueta default, es opcional y se utiliza cuando se sospecha que pueden venir valores diferentes a los de las etiquetas. Cuando el computador encuentra la sentencia break, saltar a la primera sentencia luego de la llave de cierre del switch. Por ejemplo: switch (opcion) {

    case 0 : cout

  • MANUAL DE PROGRAMACIN EN C++

    8

    En este ejemplo se presentan cuatro casos de valores exactos para escoger la alternativa de impresin; en caso de que la variable opcin sea diferente de 0, 1, 2, 3, imprimir opcin no vlida. Uno de los usos mas frecuentes del switch est en la implementacin de mens, esto es, presentar en pantalla una serie de alternativas para que el usuario elija una. EJEMPLO: El siguiente ejemplo presenta en pantalla un men con tres opciones y la captura de la seleccin del usuario. El programa evaluar la opcin y escoger una alternativa; en caso de que la opcin sea diferente de 1, 2 o 3, utilizar la opcin por defecto. 1. //Programa ejemplo de utilizacin del switch 2. #include 3. using namespace std; 4. int main() 5. { 6. int opcion; 7. float area=0, base, altura, lado, radio, pi=3.141592; 8. cout

  • UNIVERSIDAD MILITAR NUEVA GRANADA CENTRO DE SISTEMAS

    9

    Cada una de las lneas hace lo siguiente: Lnea 1: Lnea de comentario, para documentar el programa. Lnea 2y3: Instrucciones de preprocesador. Lnea 4: Funcin principal. Lnea 5: Inicio de bloque de instrucciones. Lnea 6: Definicin de la variable de tipo entero: opcin, que servir de expresin de

    control o selector para el switch. Lnea 7: Definicin de las variables para los clculos de las reas. Lneas 8a11: Flujo de salida, imprime en pantalla el men. Lnea 12: Flujo de entrada, captura en la variable opcion, la seleccin del men. Lnea 13: El switch es una expresin de control, que evaluar y comparar con cada

    una de las etiquetas, la variable opcion. Lnea 14: Inicio de bloque de instrucciones del switch. Lnea 15: Valor de etiqueta 1. Primer grupo de sentencias que permiten el clculo del rea del tringulo. La instruccin break, transfiere el control a la lnea 19, para que no se

    ejecuten las instrucciones de los otros case. Lnea 16: Valor de etiqueta 2. Segundo grupo de sentencias que permiten el clculo del rea del

    cuadrado. Lnea 17: Valor de etiqueta 3. Sentencias que permiten el clculo del rea del crculo. Lnea 18: Etiqueta default, para cuando vienen valores diferentes a los de las

    etiquetas. Imprime el mensaje: opcin no vlida. Lnea 19: Fin de bloque de instrucciones del switch. Lnea 20: Imprime el mensaje: EL AREA ES: y el clculo realizado por cualquiera de

    las opciones del switch. Lnea 21: Instruccin para detener la consola. Lnea 22: Fin de bloque principal.

    4.2 ESTRUCTURAS DE CONTROL REPETITIVAS Al grupo de instrucciones que se repiten en un programa se les llama bucle, ciclo o gaza. A cada repeticin de las instrucciones del bucle se le denomina una iteracin. En las repeticiones controladas por contador, se utiliza una variable de control que permite contar el nmero de iteraciones. La variable se aumenta un nmero fijo, cada vez que se ejecuta una iteracin. Cuando la variable de control indica que ya se han ejecutado todas las interacciones, se termina el bucle y el programa contina en la instruccin siguiente a la del fin de la estructura de repeticin. A estas instrucciones controladas por contador se le denomina de repeticin definida, por que se sabe con exactitud cuntas veces se ejecutar el ciclo. Las repeticiones controladas por centinela, se utilizan cuando el nmero de iteraciones no es conocido con anticipacin o el bucle incluye enunciados para obtener datos cada vez que se ejecute. El valor del centinela (santo y sea), es proporcionado al programa para terminar el bucle, una vez se le han suministrado todos los datos que requiere el programa. A este tipo de repeticin por centinela, se le denomina repeticin indefinida, por que no se sabe con anticipacin cuntas veces se necesitar ejecutar el bucle.

  • MANUAL DE PROGRAMACIN EN C++

    10

    En caso de que la condicin o centinela no se ingrese, el programa se ejecutara infinitas veces y no podra terminar (a este error se le denomina un loop) y debe corregirse.

    4.2.1 Sentencia for (para) La estructura de control for, genera bucles controlados por contador, en los cuales se sabe de antemano cuantas son las iteraciones del bucle.

    Sintaxis de la instruccin:

    for (inicializacin del contador; condicin-expresin lgica; incremento o decremento) { Bloque de sentencias } Para controlar el nmero de veces que se repite el bucle, se requiere la utilizacin de un contador y especificar en que valor va a iniciar, adems en qu cantidad constante se incrementar o decrementar esta variable. El contador puede ser declarado como variable en la misma instruccin for. La condicin es una expresin booleana que indica cuando se debe terminar con las iteraciones. Cada iteracin en el ciclo, produce el incremento ( decremento) del contador. Se acostumbra a utilizan los operadores incrementales o decrementales para mostrar de una manera sencilla el cambio en el contador, as:

    a++ cuando se desea incrementar en uno el contador

    a-- cuando se desea restar en uno el contador

    a+=2 cuando se desea incrementar en dos el contador

    Los puntos y comas son indispensables para separar la inicializacin del contador, con la expresin lgica y el incremento o decremento. Cuando el bucle contiene solo una sentencia, no es indispensable las llaves { } en la sintaxis, as: for (condicin) sentencia;

  • UNIVERSIDAD MILITAR NUEVA GRANADA CENTRO DE SISTEMAS

    11

    El siguiente ejemplo:

    int K; for (k=1; k

  • MANUAL DE PROGRAMACIN EN C++

    12

    EJEMPLO: Sumar 10 nmeros enteros introducidos por teclado

    PSEUDOCODIGO DIAGRAMA DE FLUJO

    Inicio SU 0 para i 1,10,1 haga leer NU SU SU + NU fin_para escribir SU fin

    CODIGO EN C++ #include using namespace std; int main() { int SU=0,NU; cout

  • UNIVERSIDAD MILITAR NUEVA GRANADA CENTRO DE SISTEMAS

    13

    4.2.2 Sentencia while (mientras que) La estructura de control while, genera bucles controlados por centinela en los cuales se sabe la condicin de terminacin del bucle, pero no se sabe de antemano cuantas son las iteraciones del bucle. Aunque con la estructura while podramos hacer bucles for, por facilidad en el control del contador, es mas utilizado el for para implementar los bucles controlados por contador.

    Sintaxis de la instruccin:

    while (condicin) { sentencia-1; sentencia-2; sentencia-3; : : sentencia-n; }

    En este caso las sentencias se repiten, mientras la expresin lgica o condicin del bucle sea verdadera.

    La condicin del bucle se evala antes de que se ejecuten las sentencias. Si la condicin es falsa, no se ingresar al bucle.

    Note que no se coloca punto y coma (;) en el la lnea del while, de hacerse no ejecutar el bucle.

    Cuando se debe ejecutar solo una sentencia varias veces, no es indispensable las llaves { }.

    En el siguiente ejemplo:

    int y=z=0; while(y!=10) {

    cin>>y z=z+y;

    } cout

  • MANUAL DE PROGRAMACIN EN C++

    14

    EJEMPLO Contar los nmeros positivos que se ingresan por teclado hasta que se ingrese un nmero negativo.

    Variables: X: es el centinela

    P: es el contador

    PSEUDOCODIGO DIAGRAMA DE FLUJO

    Inicio X 0 P -1 mientras (X >=0) hacer P P + 1 Leer X fin_mientras escribir P fin

    CDIGO EN C++ #include using namespace std; int main() { int X=0,P=-1; cout

  • UNIVERSIDAD MILITAR NUEVA GRANADA CENTRO DE SISTEMAS

    15

    4.2.3 Sentencia do- while (haga mientras que) Esta sentencia funciona de modo anlogo a la instruccin while, con la diferencia de que la condicin se evala despus de ejecutar las primeras sentencias, esto significa que el bucle se ejecuta por lo menos una vez.

    Sintaxis de la instruccin:

    do { sentencia-1; sentencia-2; sentencia-3; : : sentencia-n; } while (condicin);

    Comienza ejecutando las sentencias y se evala a continuacin el ciclo. Si la condicin es verdadera, entonces se repite la ejecucin de las sentencias. Este proceso contina hasta que la condicin sea falsa.

    Observe que se coloca punto y coma (;), luego de la condicin del while.

    El siguiente ejemplo:

    int x=1; do { cout

  • MANUAL DE PROGRAMACIN EN C++

    16

    Cada una de las lneas hace lo siguiente: Lnea 1: Lnea de comentario. Lnea 2y3: Instrucciones de preprocesador. Lnea 4: Funcin principal. Lnea 5: Inicio de bloque de instrucciones. Lnea 6: Definicin de la variable entera n, para el ingreso del dato (multiplicando) y

    la variable contador y (multiplicador). Lnea 7: Flujo de salida, imprime en pantalla el mensaje:

    Cual tabla desea imprimir? Lnea 8: Flujo de entrada, captura el dato suministrado por teclado. Lnea 9: Sentencia do que ejecuta las instrucciones del bucle. Lnea 10: Llave de inicio del cuerpo del bucle y flujo de salida que imprime cada una

    de las lneas de la tabla de multiplicar. Lnea 11: Expresin matemtica que realiza incrementos de 1 en la variable y. Lnea 12: Llave de fin del cuerpo del bucle y estructura de control repetitiva while,

    que evala si el cuerpo del bucle se vuelve a repetir. Lnea 13: Instruccin para detener la consola. Lnea 14: Fin del bloque de instrucciones de la funcin principal.

    4.2.4 Bucles anidados Es posible anidar bucles en C++. Los bucles anidados constan de un bucle externo con uno o ms bucles internos. Cada vez que se realiza una iteracin en el bucle externo, los bucles internos se repiten.

    Se pueden hacer combinaciones de bucles for, while y do while:

  • UNIVERSIDAD MILITAR NUEVA GRANADA CENTRO DE SISTEMAS

    17

    EJEMPLO

    Escribir las tablas de multiplicar de la 1 a la 5, con 10 multiplicandos cada una.

    PSEUDOCODIGO DIAGRAMA DE FLUJO

    Inicio para i 1,5,1 haga para j 1,10,1 haga R i * j escribir R fin_para fin_para Fin

    CODIGO EN C++ #include using namespace std; int main() { for(int i=1 ;i

  • MANUAL DE PROGRAMACIN EN C++

    18

    4.2.5 iNSTRUCCIONES BREAK Y CONTINUE

    Algunas veces es necesario interrumpir un bucle o no tomar en cuenta una iteracin, la instruccin break, obliga a una terminacin inmediata de la instruccin switch, while, for o do-while y la instruccin continue, transfiere el control al inicio del bucle.

    La instruccin break, se utiliza por lo general, cuando se detecta que va a suceder algo fuera de lo normal en un programa, como por ejemplo cuando se introduce un dato que puede ocasionar una divisin por cero.

    Sintaxis de la instruccin:

    break;

    EJEMPLO En el siguiente ejemplo: se desea calcular la ecuacin:

    72*3

    +=

    xxy , para 10 nmeros que se introducidos por teclado.

    #include using namespace std; int main() { int x; float y; for (int contador=1;contador

  • UNIVERSIDAD MILITAR NUEVA GRANADA CENTRO DE SISTEMAS

    19

    La instruccin continue, se aplica en los ciclos while, do-while o for. Cuando continue aparece en una instruccin while, significa que la ejecucin se transferir automticamente a la parte superior del ciclo y empezar a evaluar nuevamente la condicin.

    Sintaxis de la instruccin:

    continue; EJEMPLO Es til la instruccin continue para no contabilizar datos invlidos. Por ejemplo las notas erradas de un grupo de estudiantes cuando se desea el promedio y se ingresan datos por fuera del rango 1 a 5:

    #include using namespace std; int main() { const int TOPE=100; float cuenta=0, calificacion, suma=0; cout

  • MANUAL DE PROGRAMACIN EN C++

    20

    4.3 EJERCICIOS RESUELTOS EJERCICIO 1 1. //Programa que utiliza un centinela para controlar el bucle 2. //Problema: Solicitar notas y promediarlas 3. #include 4. using namespace std; 5. int main() 6. { 7. const int centinela=-1; 8. int cuenta=0; 9. float nota, suma,promedio; 10. suma=promedio=0; 11. coutnota; 13. while (nota!=centinela) 14. {

    cuenta++; suma+=nota; coutnota;

    15. } 16. promedio=suma/cuenta; 17. cout

  • UNIVERSIDAD MILITAR NUEVA GRANADA CENTRO DE SISTEMAS

    21

    EJERCICIO 2

    1. //Programa que confirma la clave del usuario 2. #include 3. using namespace std; 4. int main() 5. { 6. int clave, entrada=-999; 7. cout99&&clave

  • MANUAL DE PROGRAMACIN EN C++

    22

    EJERCICIO 3 1. //Programa que elabora la estadstica de notas de estudiantes de un curso 2. #include 3. using namespace std; 4. int main() 5. { 6. int numero, i, aprobados=0, reprobados=0; 7. float nota, promedio=0; 8. cout

  • UNIVERSIDAD MILITAR NUEVA GRANADA CENTRO DE SISTEMAS

    23

    EJERCICIO 4

    1. //Programa que imprime un rectngulo de 6 filas por 4 columnas 2. #include 3. using namespace std; 4. int main() 5. { 6. int i, j, filas=6, columnas=10; 7. char simbolo='*'; 8. for ( i=1; i

  • MANUAL DE PROGRAMACIN EN C++

    24

    - Cuando se evalan tres o mas alternativas, se deben anidar instrucciones if. - La estructura de control de seleccin switch en C++, permite seleccionar una entre

    mltiples alternativas, con se trate de valores exctos. - Las estructuras de control de repeticin permiten ejecutar un nmero determinado de

    veces un mismo bloque de instrucciones, con un conjunto de datos diferentes. - Se utilizan dos procedimientos de repeticin: Repeticin controlada por contador y

    repeticin controlada por centinela. - C++ soporta tres tipos de estructuras de control de repeticin: while, do-while y

    for. - Un bucle o ciclo es un grupo de instrucciones que el computador ejecuta en forma

    rpida, en tanto se conserve verdadera alguna condicin de continuacin del ciclo. - En las repeticiones denominadas repeticin definida o repeticin controlada por

    contador, se sabe con exactitud cuntas veces se ejecutar el ciclo, en las repeticiones controladas por centinela o repeticin indefinida, el nmero de repeticiones no es conocido con anticipacin.

    - En la repeticin controlada por contador se utiliza una variable de control, para contar

    el nmero de repeticiones. Estas se pueden realizar con la instruccin while o mas fcilmente con la instruccin for.

    - La repeticin controlada por centinela se utiliza con la estructura de control while

    nicamente, se deben generar bucles en los cuales se sabe la condicin para terminar el bucle, pero no se sabe de antemano cuantas son las iteraciones o repeticiones del bucle.

    - La estructura de control do-while, funciona de modo anlogo a la instruccin while,

    con la diferencia de que la condicin se evala despus de ejecutar las sentencias, esto significa que el ciclo se ejecuta por lo menos una vez.

    - Los bucles anidados constan de un bucle externo con uno o ms bucles internos.

    Cada vez que se repite el bucle externo, los bucles internos se repiten, se verifican las variables de control y se ejecutan las iteraciones requeridas.

    - La instruccin break, se utiliza cuando se detecta que va a suceder algo fuera de lo

    normal en un programa y se debe forzar a salir del bucle. - La instruccin continue, se aplica en los ciclos while, do-while o for. Cuando

    continue aparece en una instruccin while, significa que la ejecucin se transferir automticamente a la parte superior del bucle y empezar a evaluar nuevamente la condicin.

    4.1 ESTRUCTURAS DE CONTROL SELECTIVAS4.1.1 SENTENCIA if4.1.2 sentencia switch4.2 ESTRUCTURAS DE CONTROL REPETITIVAS4.2.1 Sentencia for (para)4.2.2 Sentencia while (mientras que)4.2.3 Sentencia do- while (haga mientras que)4.2.4 Bucles anidados4.2.5 iNSTRUCCIONES BREAK Y CONTINUE4.3 EJERCICIOS RESUELTOSRESUMEN