Estructuras de Control 3

Documentos relacionados
Programación: Estructuras de Control

Tema 3. Estructuras de control en C++

TEMA 4: Estructuras de Control

TEMA 4. ESTRUCTURAS DE CONTROL

TEMA 4: Programación estructurada

Programación. Test Autoevaluación Tema 4

Tema 4. Control de flujo. Programación Programación - Tema 4: Control de Flujo

Dobles: Es el caso de la instrucción if-else (punto 1.2).

Objetivos de la práctica: - Trabajar las estructuras de control repetitivas en la realización de programas.

ESTRUCTURAS DE CONTROL

GUÍA DE LABORATORIO #3 ESTRUCTURAS ALGORÍTMICAS CONDICIONALES SIMPLES, DOBLES Y MÚLTIPLES

TEMA 5. CONTROL DE FLUJO DEL PROGRAMA. Sentencia Instrucción Expresión Operadores + Operandos Sintaxis: Sentencia ;

Sentencias de control de flujo

Palabras reservadas de C++ y C. Una palabra reservada no puede declararse como un identificador, esto haría un conflicto entre conectores y funciones.

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Fundamentos de programación

Facultad de Ciencias de la Computación. Abraham Sánchez López Grupo MOVIS

Operadores aritméticos

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

ESTRUCTURAS DE CONTROL

Tema 3. Estructuras de control

Cuales son los tipos de instrucciones que se utilizan en la programación?

Laboratorio de Arquitectura de Redes. Sentencias de control en lenguaje C

Informática Ingeniería en Electrónica y Automática Industrial

Programcaión Básica. Secuencias de Control y Repetición. Arturo Vega González.

1.9. SENTENCIAS DE CONTROL DE PROGRAMA

Introducción a C++ Algoritmos y Estructuras de datos II Dra. Carmen Mezura Godoy. Febrero 2009

Sentencias iterativas

Control de Flujo. Estructuras de Control! Experiencia Educativa de Algorítmica CONTROL DE FLUJO

Lección 3 Sentencias de control

Estructuras de control

Introducción a las sentencias de control

FUNDAMENTOS PARA LA CONSTRUCCIÓN DEL CÓDIGO A PARTIR DEL ALGORITMO

5. Sentencias selectivas o condicionales

TEMA 5. ESTRUCTURAS DE CONTROL: BUCLES.

Control de Flujo. Estructuras de Control! Experiencia Educativa de Algorítmica CONTROL DE FLUJO

Estructuras de Control

1. Detalle de los Comandos:

Programación 1 Tema 5. Instrucciones simples y estructuradas

Programación 1 Tema 5. Instrucciones simples y estructuradas

Ciclos. Recordando Estructuras de Control Básicas: SELECCIÓN (condición) SECUENCIAL

Algoritmo, Estructuras y Programación I Ing. Marglorie Colina

Tema 3. Estructuras de Datos

Operadores. Java es un lenguaje rico en operadores, que son casi idénticos a los de C/C++.

Estructuras de Repetición: Repita Mientras.

ESTRUCTURAS DE CONTROL REPETITIVAS

Programación Estructurada

Programación Orientada Objetos. Estructuras de control if, If else, switch

Fundamentos de Informática

Sentencias de Procesamiento Iterativo: while y do-while

Lenguaje de programación C. Introducción

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

fundamentos de programación (unidad 4) programación estructurada en Java

Tema: Estructuras de Selección en C#.

Actividad Algoritmos, Estructura y Programación I. FOR, DO-WHILE

Tema 4: Estructuras de Control Estructura y Contenidos

Autor: Ing. Nahuel González INTRODUCCIÓN A C. Clase 1

Programación n Orientada a Objetos Sentencias Java Parte I. Ing. Julio Ernesto Carreño o Vargas MsC.

ESTRUCTURAS REPETITIVAS

Bloque II. Elementos del lenguaje de programación Java

Estructura de Selección y Repetición en C#

Programación en Lenguaje C

Universidad Autónoma del Estado de México Facultad de Medicina

Estructura de un programa en Java. Tipos de datos básicos. class miprimerprograma{ // comentario, no es parte del programa

Programación.Net Lenguaje C#

Tema 4. Estructuras de control

JavaScript Básico. Elementos Básicos: Comentarios: Literales: Valores que puede tomar una variable o una constante.

Objetivos. Conceptos 1. ESTRUCTURAS DE CONTROL SELECTIVAS. Estructura condicional if-else

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Programación Orientada a Objetos Sentencias Java Parte I Ing. Julio Ernesto Carreño Vargas MsC.

MÚLTIPLES Estructuras condicionales anidadas if(expresion1 o condición1){ Sentencias1 } else { if (expresion2){ Sentencias2

Introducción a c++ Introducción a la programación EIS Informática III

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS COORDINACION DE COMPUTACION

Hoja de ejercicios del Tema 3

Hoja de ejercicios del Tema 3

Lenguaje C. República Bolivariana de Venezuela Fundación Misión Sucre Aldea Fray Pedro de Agreda Introducción a la Programación III

GUÍA DE TRABAJO N 1 C# Ing. Néstor Raúl Suarez Perpiñan Página 1 de 13

Conceptos. Generales ALGORITMOS

Capítulo 3. Sentencias condicionales

Curso Informática Lección 4. Instrucciones de control

Java Avanzado. Guía 1. Java Avanzado Facultad de Ingeniería. Escuela de computación.

NOTA: Un algoritmo o programa de computadoras está estructurado si en su diseño se hace uso de los siguientes tres métodos o estructuras de control:

RECORDAR TIPOS DE DATOS

Tema 06: Estructuras y sentencias de control en C

Introducción rápida a la programación (estructurada ) con C++

Introducción a la Programación IV. Estructuras de Control. Orden de ejecución. Transferencia de Control. Transferencia de Control II 12/3/10

Estructuras de Control Selección o Decisión

Transcripción:

Estructuras de Control 3 Contenido 3.1.- Introducción 3.2.- Estructuras de Selección 3.2.1.- Sentencia if 3.2.2.- Sentencia switch 3.3.- Estructuras de Iteración 3.3.1.- Sentencia while 3.3.2.- Sentencia do-while 3.3.3.- Sentencia for 3.4.- Ejemplo Ejercicios 3.1.- Introducción Los programas definidos hasta este punto se ejecutan de modo secuencial, es decir, una sentencia después de otra. La ejecución comienza con la primera sentencia del programa y prosigue hasta la última sentencia, cada una de las cuales se ejecuta una sola vez. Esta forma de programación es adecuada para programas sencillos. Sin embargo, para la resolución de problemas de tipo general se necesita la capacidad de controlar cuáles son las sentencias que se ejecutan, y en qué momentos. Las estructuras de control o construcciones de control controlan la secuencia o flujo de ejecución de las sentencias. Las estructuras de control se dividen en tres grandes categorías en función del flujo de ejecución: secuencia, selección e iteración. Hasta este momento sólo se ha usado el flujo secuencial. Cada una de las sentencias que se utilizan en C++ están separadas por el carácter punto y coma (;). No obstante, en algunos casos nos interesará agrupar en un bloque una serie de sentencias, como veremos al explicar las estructuras de selección y de iteración. El bloque de sentencias se define por el carácter llave de apertura () para marcar el inicio del mismo, Elementos de Programación Estructuras de Control Pág 1

y el carácter llave de cierre ()para marcar el final. Ejemplo: sentencia 1 ; sentencia 2 ; sentencia n ; Sin embargo, en caso de que el bloque de sentencias este constituido por una única sentencia no es obligatorio el uso de las llaves de apertura y cierre ( ), aunque si recomendable. Por tanto, la notación BNF de un bloque de sentencias será la siguiente: <bloque>:= ''<sent>'' 3.2.- Estructuras de Selección Las estructuras de selección o condicionales controlan si una sentencia o secuencia de sentencias se ejecutan, en función del cumplimiento o no de una condición o expresión lógica. C++ tiene dos estructuras de control para la selección, if y switch. 3.2.1.- Sentencia if La sentencia if elige entre varias alternativas en base al valor de una o más expresiones lógicas. La notación BNF de esta sentencia es la siguiente: <sent_if> ::= if '('<expres_log>')' (<sent> <bloque>) else if '('<expres_log>') (<sent> <bloque>) [else (<sent> <bloque>)] donde <expres_log> es una expresión lógica que ha de ir entre paréntesis, y <sent> es una sentencia, y <bloque> es un bloque de sentencias. Las formas más sencillas de esta sentencia, que se corresponden con las vistas en el pseudolenguaje de Elementos de Programación SI- ENTONCES-ENOTROCASO, son la sentencia de selección simple y la sentencia de selección doble: if (<expres_log>) if (<expres_log>) else Los siguientes programas son ejemplos sencillos de sentencias de selección simple y doble: Elementos de Programación Estructuras de Control Pág 2

int num; int num; cout <<"Introduzca numero:"; cout << "Introduzca numero:"; cin >> num; cin >> num; if ((num%2)==0) if ((num%2)==0) cout << "PAR" << endl; cout << "El numero" << num; cout << "es PAR" << endl; else cout << "IMPAR" << endl; En el ejemplo anterior la sentencia de selección simple también hubiera sido correcta, si no hubiéramos escrito las llaves ( ) antes y después de la sentencia (cout << "PAR" << endl;), ya que el bloque de sentencias está formado por una única sentencia. En caso de que el bloque éste formado por dos o más sentencias ya es necesario usar las llaves( ) para marcar el inicio y el fin del bloque. Sin embargo, es aconsejable usar siempre llaves incluso con bloques formados por una única sentencia para evitar errores como el siguiente: int num1, num2; cout << "Escribe un numero:"; cin >> num1; cout << "Escribe otro número:"; cin >> num2; if (num1==num2) cout << "Iguales" << endl; else cout << "Distintos" << endl; cout << "pues no son iguales" << endl; Si ejecutamos el programa anterior introduciendo dos valores iguales el programa mostrará la siguiente salida: Escribe un numero: 3 Escribe otro numero: 3 Iguales pues no son iguales Esto es debido a que el programador olvidó las llaves en el bloque de sentencias de la parte else. Por tanto la segunda sentencia en el bloque de sentencias del else (cout << "pues no son Elementos de Programación Estructuras de Control Pág 3

iguales" << endl;), ya no pertenece al else. Las sentencias if mostradas hasta el momento implementan decisiones que implican una o dos alternativas. Sin embargo, también es posible utilizarlas para implementar decisiones que impliquen diferentes alternativas. Una sentencia if es anidada cuando la sentencia de la rama verdadera o de la rama falsa es a su vez otra sentencia if. Una sentencia if anidada se puede utilizar para implementar decisiones con varias alternativas o multi-alternativas. Una estructura típica if-else anidada sería la siguiente: if (<expres_log>) else if (<expres_log>) else if (<expres_log>) else Como ejemplo, considérese un programa que nos permita escribir en pantalla el mensaje correspondiente a un valor que representa una calificación numérica. El programa utilizando sentencias if anidadas sería el siguiente: unsigned int nota; cout << "Introduzca una calificación numérica:"; cin >> nota; cout << "La calificación del alumno es" << endl; if (nota == 10) cout << "Matricula de Honor" << endl; else if (nota >= 9) cout << "Sobresaliente" << endl; else if (nota >= 7) cout << "Notable" << endl; else if (nota >= 5) cout << "Aprobado" << endl; else cout << "Suspenso" << endl; Elementos de Programación Estructuras de Control Pág 4

3.2.2.- Sentencia switch La sentencia switch es una sentencia de C++ que se utiliza para seleccionar una de entre múltiples alternativas. Esta sentencia es especialmente útil cuando la selección se basa en el valor de una variable de un tipo simple o de una expresión de un tipo simple denominada expresión de control o selector. La notación BNF de la sentencia es la siguiente: <sent_case>::= switch '('<expres_log>')' '' <rama> [default : <sent>] '' <rama> ::= <etiqueta> <sent> [] <etiqueta> ::= CASE <exp_const> : donde <expres_log> es una expresión lógica, <sent> es una sentencia o secuencia de sentencias terminadas en punto y coma (;), y <exp_const> es una expresión constante. La sintaxis de la sentencia, que se corresponden con la sentencia CASO estudiada en el pseudolenguaje de Elementos de Programación, es la siguiente: switch (selector) case <etiqueta> : case <etiqueta> :... case <etiqueta> : default : <sent> //opcional La expresión selector debe ser un tipo ordinal (por ejemplo int, char, bool pero no float, double o string). El tipo de cada etiqueta debe ser el mismo que el de la expresión selector. Las expresiones están permitidas como etiquetas, pero únicamente si cada operando de la expresión es en si mismo una constante (ej. 4+8, c*20 si c ha sido definido anteriormente como constante). Ejemplo: int A,B, Resultado; Elementos de Programación Estructuras de Control Pág 5

char operador; cout << "Introduzca un numero:"; cin >> A; cout << "Introduzca otro numero:"; cin >> B; cout <<"Introduzca un operador (+,-,*,/):"; cin >> operador; Resultado = 0; switch (operador) case - : Resultado = A - B case + : Resultado = A + B case * : Resultado = A * B case / : Resultado = A / B default : cout << "Operador Invalido"<< endl; cout << "El resultado es:"; cout << Resultado << endl; //suponemos B!=0 Cuando se ejecuta la sentencia switch se evalúa el selector. Si el valor de la expresión es igual a una etiqueta, entonces se transfiere el flujo de control a las sentencias asociadas con la etiqueta correspondiente, y se ejecutan todas las sentencias del bloque de sentencias hasta que se encuentre una sentencia break (o hasta que se encuentre el final de la sentencia de control switch). Si el valor del selector no esta listado en ninguna etiqueta case, no se ejecutará ninguna de las opciones a menos que se especifique la acción por defecto default. La omisión de la etiqueta default puede ocasionar un error lógico difícil de prever. Aunque esta etiqueta es opcional, se recomienda su uso a menos de que se esté absolutamente seguro de que todos los valores del selector están incluidos en las etiquetas case. En el siguiente ejemplo se muestra un programa que determina si un carácter leído es o no una vocal. En este caso como la sentencia a ejecutar por todas las etiquetas case es la misma, esta sentencia se pone una única vez al final: char car; cout << "Introduzca un caracter:"; cin >> car; switch (car) case a : case A : case e : case E : case i : case I : case o : case O : case u : case U : Elementos de Programación Estructuras de Control Pág 6

cout << car << " es una vocal" << endl; default : cout << car << "no es una vocal" << endl; Precaución: Si se olvida break en una sentencia switch, el compilador no emitirá un mensaje de error, ya que se habrá escrito una sentencia switch sintácticamente correcta, pero no realizará las tareas previstas. Cuando el ordenador empieza a ejecutar una sentencia case, no detiene su ejecución hasta que se encuentra o bien una sentencia break o bien una sentencia switch. 3.3.- Estructuras de Iteración C++ soporta tres tipos de estructuras de iteración: los bucles while, do-while y for. Éstos se corresponden con los esquemas de iteración vistos en el pseudolenguaje definido en Elementos de Programación. 3.3.1- Sentencia while Se corresponde con el esquema MIENTRAS del pseudolenguaje. La notación BNF de la sentencia while es la siguiente: <sent_while> ::= while '('<expres_log>')' <sent> <bloque> Un bucle while tiene una condición de control o expresión lógica (<expres_log>), que ha de ir encerrada entre paréntesis, que controla la secuencia de repetición. La posición de esta condición es delante del cuerpo del bucle, y por este motivo el bucle while es un bucle preprueba, ya que se evalúa la condición antes de que se ejecute el cuerpo del bucle. El cuerpo del bucle se ejecuta mientras se cumpla la condición de control. Si la condición es falsa, entonces el cuerpo no se ejecuta. Hay que hacer notar que si la condición es cierta inicialmente, la sentencia while no terminará nunca (bucle infinito) a menos que en el cuerpo de la misma se modifique de alguna forma la condición de control del bucle. Una sentencia while se ejecutará cero (condición de control inicialmente falsa) o más veces. La sintaxis de la sentencia es la siguiente: while (<expres_log>) Como en el caso de la sentencia de selección simple o doble, la utilización de llaves ( ) antes y después del bloque de sentencias únicamente es obligatorio si el número se sentencias del bloque es mayor o igual que dos. Sin embargo, se aconseja siempre su uso en prevención del posibles errores como los mencionados en el apartado 3.2.1. Elementos de Programación Estructuras de Control Pág 7

Por ejemplo, si queremos leer una secuencia de enteros y calcular su suma deteniéndonos cuando se lea un número negativo, podemos hacer el siguiente programa: int sum, i; cout << "Introduzca un numero:"; cin >> i; //lectura adelantada sum = 0; while (i >= 0) sum = sum + i; cin >> i; //actualización cout << "El resultado es:"; cout << sum << endl; Este otro ejemplo visualiza por pantalla n asteriscos: int n=20; int contador; contador=0; while (contador < n) cout << " * "; contador++; //inicialización //incremento 3.3.2- Sentencia do-while Se corresponde con el esquema REPETIR del pseudolenguaje. La notación BNF de la sentencia dowhile es la siguiente: <sent_do-while> ::= do <sent> <bloque> while '('<expres_log>')'; En esta sentencia, el cuerpo del bucle se ejecuta hasta que sea FALSA la expresión lógica (<expres_log>)(que ha de ir encerrada entre paréntesis). Por tanto, al igual que en el bucle while el cuerpo del bucle se ejecuta mientras la expresión lógica sea cierta. Esto supone una diferencia con la sentencia REPETIR del pseudolenguaje en la que el cuerpo del bucle se ejecutaba hasta que la expresión lógica fuese verdadera. El bucle do-while también se denomina post-prueba, ya que la expresión lógica se comprueba cada vez después de la ejecución del cuerpo del bucle. La sintaxis del bucle do-while es la siguiente: Elementos de Programación Estructuras de Control Pág 8

do while (<expres_log>); Como en el caso anterior, la utilización de llaves ( ) antes y después del bloque de sentencias únicamente es obligatorio si el número se sentencias del bloque es mayor o igual que dos. Sin embargo, se aconseja siempre su uso en prevención del posibles errores. El cuerpo de una sentencia do-while siempre se ejecuta al menos una vez. Cuando esto deba ocurrir en un programa (el cuerpo del bucle tenga que ejecutarse una o más veces), es conveniente el uso de la sentencia do-while en lugar de la sentencia while. Por ejemplo, en lugar de escribir: int numero; cout << "Introduzca un numero entre 1 y 10"; cin >> numero; while!((numero>=1) && (numero <= 10)) cout << "Introduzca un número entre 1 y 10"); cin >> numero; podemos escribir: int numero; do cout << "Introduzca un numero entre 1 y 10"; cin >> numero; while ((numero < 1) (numero > 10)); La primera ejecución del bucle da a numero un valor, de manera que no necesitamos inicializarlo antes del comienzo del bucle 3.3.3.- Sentencia for Se corresponde con el esquema PARA del pseudolenguaje. Su notación BNF es la siguiente: Elementos de Programación Estructuras de Control Pág 9

<sent_for> ::= for '(' <inicializacion> ; <expres_log> ; <incremento> ')' <sent> <bloque> <inicializacion> ::= <ident> = <expresion_constante> donde (<inicializacion>) es la parte en la que se inicializa la variable de control del bucle, (<expres_log>) es una expresión lógica que hace que el bucle ejecute el bloque de sentencias mientras que dicha expresión sea cierta, e (<incremento>) es una expresión que decrementa o incrementa la variable de control del bucle. De esta manera para cada valor que tome la variable de control de bucle, el cuerpo del bucle se ejecuta una vez. Cuando la variable de control del bucle toma su primer valor, (<inicializacion>), ésta se va modificando automáticamente en cada iteración del bucle de acuerdo al valor de incremento (<incremento>) hasta que la expresión lógica (<expres_log>) llegue a ser cierta. En el caso de que cuando la variable de control del bucle tome su primer valor la expresión lógica sea falsa, el cuerpo del bucle no se ejecutará ninguna vez. Una estruuctura típica for sería la siguiente: for (<inicializacion> ; <expres_log> ; <incremento>) La utilización de llaves ( ) antes y después del bloque de sentencias únicamente es obligatoria si el número se sentencias del bloque es mayor o igual que dos. Sin embargo, se aconseja siempre su uso en prevención de posibles errores. Existen dos formas de implementar la sentencia for: (i) formato ascendente, en el que la variable de control se incrementa, y (ii) formato descendente, en el que la variable de control se decrementa. A continuación mostramos dos ejemplos de formato ascendente y descendente: // formato ascendente // formato descendente int n; int i; for (n = 1; n <= 10; n++) for (i = 9; i >= 0; i -= 3) cout << n << endl; cout << i << endl; En el ejemplo de formato ascendente la variable de control es n y su valor inicial es 1, el valor límite es 10 y la expresión de incremento es n++. Esto significa que el bucle ejecuta la sentencia del cuerpo del bucle una vez por cada valor de n en orden ascendente de 1 a 10, por tanto Elementos de Programación Estructuras de Control Pág 10

el bucle se ejecutará 10 veces. En la primera iteración n tomará el valor 1, en la segunda el valor 2, y así sucesivamente hasta el valor 10. El ejemplo de formato descendente inicializa la variable de control i a 9. El bucle se ejecuta mientras i no sea negativo, y como la variable de control del bucle se decrementa en 3, el bucle se ejecutará 4 veces con el valor de la variable de control i, 9, 6, 3 y 0. C++ permite declarar la variable de control de bucle al mismo tiempo que se inicializa, sin embargo nosotros siempre la declararemos en la zona de declaraciones al principio del programa. La variable de control se puede incrementar o decrementar en valores de tipo int, pero también es posible en valores de tipo double, y por tanto estaríamos incrementando en una cantidad decimal. La expresión de incremento no necesita ser una suma o una resta. Tampoco se requiere que la inicialización de una variable de control sea igual a una constante. Se puede inicializar y modificar una variable de control de bucle en cualquier cantidad que se desee. Lógicamente, cuando la variable de control no sea de tipo int se tendrán menos garantías de precisión. Por ejemplo: double x; for (x = pow (y, 3.0); x > 2.0; x = sqrt (x)) cout << "x es ahora igual a "<< x << endl; Precauciones en el uso de for (1) No es recomendable modificar el valor de cualquier variable de la condición del bucle dentro del cuerpo de un bucle for, ya que se pueden producir resultados imprevistos. Ejemplo: int i, limite =1; for (i = 0; i <= limite; i++) cout << i << endl; limite++; Este ejemplo produce una secuencia infinita de enteros ya que en cada iteración, la expresión (limite++) incrementa limite en 1, antes de que i++ incremente a i. A consecuencia de esto, la condición del bucle (i <= limite) siempre es cierta. (2) Se ha de tener cuidado a la hora se situar el punto y coma (;) después del paréntesis final del Elementos de Programación Estructuras de Control Pág 11

bucle for. Por ejemplo el bucle: int i; for (i = 1; i <= 10; i++); // Atención al ; cout << "Elementos de Programación" << endl; no visualiza la frase "Elementos de Programación" 10 veces, ni produce un mensaje de error por parte del compilador. En realidad lo que sucede es que se visualiza una vez la frase "Elementos de Programación", ya que la sentencia for es una sentencia vacía al terminar con un punto y coma (;). Por tanto, lo que sucede es que la sentencia for no hace absolutamente nada y tras 10 iteraciones, y por tanto después de que el bucle for haya terminado, se ejecuta la sentencia cout y se escribe la frase "Elementos de Programación". (3) El siguiente bucle for implementa un bucle infinito: for (; ;) cout << "Siempre igual" << endl; La razón es que se han eliminado la expresión de inicialización, la condición del bucle y la expresión de incremento. Por tanto, el bucle producirá la salida "Siempre igual" un número ilimitado de veces. Qué estructura de iteración usar?. Como recomendación : - Si antes de la ejecución del bucle se puede conocer el número de veces que se ejecutará éste, es mejor utilizar una sentencia for. - En otro caso y si se ejecuta al menos una vez, debemos utilizar un do-while. - En cualquier otro caso utilizaremos un bucle while. NOTA: NO SE PERMITE EL USO DE LAS SENTENCIAS break O continue EN UN BUCLE (for, do-while o while) 3.4.- EJEMPLO Elementos de Programación Estructuras de Control Pág 12

Para terminar veamos un programa ejemplo en el que aparecen algunas de las estructuras vistas anteriormente. El programa encuentra el primer número perfecto mayor que 28. //------------------------------------------------------------------------ // Autor: // Fecha: Versión: 1.0 //------------------------------------------------------------------------ // Programa ejemplo para el cálculo del primer número perfecto mayor que // 28 //------------------------------------------------------------------------ int intento, cont, suma; bool encontrado; encontrado = false; intento = 29; while (!encontrado) suma = 1; for (cont = 2; cont < intento; cont++) if (intento % cont == 0) suma = suma + cont; if (suma == intento) encontrado = true; else intento = intento + 1; cout << " El Numero perfecto mayor que 28 = " << intento << endl; Aunque existe otra forma más óptima de resolver este problema, el programa anterior nos da una visión de como se pueden utilizar conjuntamente las distintas estructuras de control vistas en esta sección. Conviene hacer hincapié principalmente en que los anidamientos de estructuras tienen que ser correctos, es decir, que una estructura anidada dentro de otra lo debe estar totalmente. Por esto hay que tener mucho cuidado con las llaves () a lo largo de un programa. Elementos de Programación Estructuras de Control Pág 13

EJERCICIOS 1.- Una empresa maneja códigos numéricos con las siguientes características: - Cada código consta de cuatro dígitos: - El primero representa a una provincia. - El segundo el tipo de operación. - Los dos últimos el número de la operación. Escriba un programa que lea de teclado un número de cuatro dígitos, y posteriormente imprima en pantalla la siguiente información. PROVINCIA & TIPO DE OPERACION & NUMERO DE OPERACION && En caso de que el número no tenga exactamente cuatro dígitos, en lugar del mensaje anterior, habrá que imprimir en pantalla el siguiente mensaje de error: ERROR: CODIGO INVALIDO. 2.- El recibo de la electricidad se elabora de la siguiente forma: - 100 Ptas de gastos fijos. - 50 Ptas/Kw para los primeros 100 Kw. - 35 Ptas/Kw para los siguientes 150 Kw. - 25 Ptas/Kw para el resto. Elabore un programa que lea de teclado los dos últimos valores del contador, y calcule e imprima en pantalla el importe total a pagar. 3.- Codifique un programa que se comporte como una calculadora simple. Para ello deberá tener las siguientes características: - Solo efectuará operaciones con dos operandos. - Operaciones permitidas: (+,-,*,/). - Se trabajará con operandos enteros. - Pedirá en primer lugar el operados, y a continuación los dos operandos. Si el operador no se corresponde con alguno de los indicados se emitirá un mensaje de error. EJEMPLO: Operacion : * Operando 1 : 24 Operando 2 : 3 Resultado : 72 4.- Escriba un programa que resuelva completamente una ecuación de segundo grado, tanto si tiene raíces reales como imaginarias. Los coeficientes se leerán de teclado. EJEMPLO: Primer coeficiente : 1 Elementos de Programación Estructuras de Control Pág 14

Segundo coeficiente : 0 Tercer coeficiente : 1 SOLUCIONES: 0+i 0-i 5.- Escriba un programa que lea un número N de teclado y a continuación imprima en pantalla: * Su factorial. * La suma de los N primeros términos de la serie armónica (1+1/2+...+1/N) * Los n primeros términos de la sucesión de Fibonacci. Utilice una estructura repetitiva distinta para cada caso. Cual es más apropiada? 6.- Dado un número entero que representa una determinada cantidad de dinero, escriba un programa que lea dicho número del teclado y lo desglose para saber cuantas monedas de 500, 100, 50, 25, 5 y 1 pesetas se necesitan. 7.- Escriba un programa que lea un número N e imprima una pirámide de números con N filas como en la siguiente figura: 1 121 12321 1234321 8.- Calcule e imprima en pantalla los N primeros números primos, siendo N un número que se introduce por teclado. 9.- Calculador repetitivo. Modifique el programa 3 para que se repita un número indefinido de veces. El calculador dejará de trabajar cuando se introduzca como código de operación &. Ejemplo: Operación : * Operando 1 : 13 Operando 2 : 10 Resultado : 130 Operación : u ERROR!!!! Operación : + Operando 1 : 12 Operando 2 : 3 Resultado : 15 Operación : & FIN DEL PROGRAMA. 10.- Escriba un programa que determine si la cadena abc aparece en una sucesión de caracteres cuyo final viene dado por un punto. Elementos de Programación Estructuras de Control Pág 15