Fundamentos de Informtica ETSI Industrial 1 Universidad de Mlaga Jos Antonio Gmez Ruiz
4.1. ESTRUCTURA SECUENCIAL.
4.2. ESTRUCTURAS DE SELECCIN. 4.2.1. Seleccin simple ( i f ). 4.2.2. Seleccin binaria ( i f . . . el se ). 4.2.3. Seleccin mltiple ( swi t ch ). 4.2.4. Anidamientos. 4.3. ESTRUCTURAS DE REPETICIN O ITERATIVAS. BUCLES. 4.3.1. Estructuras no deterministas ( whi l e, do. . . whi l e ). 4.3.2. Estructuras deterministas ( f or ). 4.3.3. Las sentencias br eak y cont i nue. 4.3.4. Diseo de bucles: anidamientos y bucles infinitos. Tema 4: Estructuras de Control Estructura y Contenidos Fundamentos de Informtica ETSI Industrial 2 Universidad de Mlaga Jos Antonio Gmez Ruiz Establecer la necesidad de las estructuras de control Diferenciar las estructuras de seleccin de las iterativas Estructuras de seleccin e iterativas en C / C++ Diseo de bucles: anidamientos y bucles infinitos Todo problema que se pueda resolver en un numero finito de pasos puede expresarse con el uso de estructuras secuenciales, selectivas e iterativas Tema 4: Estructuras de Control OBJ ETIVOS Fundamentos de Informtica ETSI Industrial 3 Universidad de Mlaga Jos Antonio Gmez Ruiz 4.1. ESTRUCTURA SECUENCIAL. 4.2. Estructuras de seleccin. 4.2.1. Seleccin simple ( i f ). 4.2.2. Seleccin binaria ( i f . . . el se ). 4.2.3. Seleccin mltiple ( swi t ch ). 4.2.4. Anidamientos. 4.3. Estructuras de repeticin o iterativas. Bucles. 4.3.1. Estructuras no deterministas ( whi l e, do. . . whi l e ). 4.3.2. Estructuras deterministas ( f or ). 4.3.3. Las sentencias br eak y cont i nue. 4.3.4. Diseo de bucles: anidamientos y bucles infinitos. Tema 4: Estructuras de Control Estructura y Contenidos Fundamentos de Informtica ETSI Industrial 4 Universidad de Mlaga Jos Antonio Gmez Ruiz Estructura Secuencial: aquella en la que las instrucciones o sentencias son ejecutadas una a continuacin de la otra en un determinado orden Se puede alterar esa secuencialidad usando estructuras o sentencias de control. Estas estructuras permiten variar el flujo de control del programa dependiendo de ciertas condiciones Estructuras de Seleccin: Permiten que se tomen rutas alternativas de accin dependiendo del resultado de una condicin Estructuras de Iteracin: (de repeticin o bucle): Permiten repetir un conjunto de sentencias un nmero determinado de veces ESTRUCTURA SECUENCIAL ESTRUCTURA SECUENCIAL Fundamentos de Informtica ETSI Industrial 5 Universidad de Mlaga Jos Antonio Gmez Ruiz Sentencia Sentencia Inicio Sentencia Fin Estructura Secuencial Estructura no Secuencial Iteracin Seleccin Inicio Sentencias Fin Sentencias ? Sentencias ? V F V F ESTRUCTURA SECUENCIAL ESTRUCTURA SECUENCIAL Fundamentos de Informtica ETSI Industrial 6 Universidad de Mlaga Jos Antonio Gmez Ruiz 4.1. Estructura secuencial. 4.2. ESTRUCTURAS DE SELECCIN. 4.2.1. Seleccin simple ( i f ). 4.2.2. Seleccin binaria ( i f . . . el se ). 4.2.3. Seleccin mltiple ( swi t ch ). 4.2.4. Anidamientos. 4.3. Estructuras de repeticin o iterativas. Bucles. 4.3.1. Estructuras no deterministas ( whi l e, do. . . whi l e ). 4.3.2. Estructuras deterministas ( f or ). 4.3.3. Las sentencias br eak y cont i nue. 4.3.4. Diseo de bucles: anidamientos y bucles infinitos. Tema 4: Estructuras de Control Estructura y Contenidos Fundamentos de Informtica ETSI Industrial 7 Universidad de Mlaga Jos Antonio Gmez Ruiz Controlan la seleccin de flujos alternativos en un algoritmo Permiten seleccionar una sentencia o grupo de sentencias en funcin de una condicin que, normalmente, es una expresin lgica (vase tema 3) Tipos de sentencias de seleccin: Seleccin Simple if Seleccin Binaria if ... else Seleccin Mltiple switch ESTRUCTURAS DE SELECCIN ESTRUCTURAS DE SELECCIN Fundamentos de Informtica ETSI Industrial 8 Universidad de Mlaga Jos Antonio Gmez Ruiz <condi ci n>es una expresin que puede ser verdaderao falsa Atencin, cualquier valor distinto de cero se interpretar como verdaderoy el valor cero como falso Por tanto <condi ci n>puede ser cualquier expresin <condi ci n>tiene que ir SIEMPRE entre parntesis Si hay una nica <sent enci a_si >se pueden omitir las llaves if ( <condi ci n>) { <sent enci as_si > } <sent enci as_f uer a> condicin SI NO sentencias_si sentencias_fuera SELECCIN SIMPLE SELECCIN SIMPLE Fundamentos de Informtica ETSI Industrial 9 Universidad de Mlaga Jos Antonio Gmez Ruiz Las mismas consideraciones que para la seleccin simple if ( <condi ci n>) { <sent enci as_si > } else { <sent enci as_no> } <sent enci as_f uer a> condicin SI NO sentencias_si sentencias_fuera sentencias_no SELECCIN BINARIA SELECCIN BINARIA Fundamentos de Informtica ETSI Industrial 10 Universidad de Mlaga Jos Antonio Gmez Ruiz / * Det er mi na el nmer o ms gr ande ent r e t r es */ #i ncl ude <i ost r eam> using namespace st d; int mai n( ) { int n1, n2, n3, mayor ; cout << Pr i mer val or : ci n >> n1; cout << Segundo val or : ; ci n >> n2; cout << Ter cer val or : ; ci n >> n3; if ( n1 > n2) / * Cal cul ar el mayor de n1 y n2 */ mayor = n1; else mayor = n2; if ( n3 > mayor ) / * Ver si n3 es el mayor */ mayor = n3; cout << El val or mayor es << mayor ; return 0; } SELECCIN SIMPLE Y BINARIA SELECCIN SIMPLE Y BINARIA Fundamentos de Informtica ETSI Industrial 11 Universidad de Mlaga Jos Antonio Gmez Ruiz switch ( <sel ect or > ) { case <val or _1>: <Sent enci as_1> break; case <val or _2>: <Sent enci as_2> break; case <val or _3>: <Sent enci as_3> break; default: <Sent enci as_df > } Cmo funciona la sentencia swi t ch? 1. Se evala el selector 2. Comparacin del selector con los <val or es_i > 3. Ejecucin de las <sent enci as_i > correspondientes 4. Cada caso termina con un br eak, o se continua con <sent enci as_i +1> <sel ect or >tiene que ir SIEMPRE entre parntesis <sel ect or >tiene que ser de tipo ordinal Si el selector no coincide con ningn <val or _i > se ejecutan las <sent enci as_df > def aul t no es obligatorio SELECCIN MTIPLE SELECCIN MTIPLE Fundamentos de Informtica ETSI Industrial 12 Universidad de Mlaga Jos Antonio Gmez Ruiz / * Ej empl o de un men muy si mpl e */ #i ncl ude <i ost r eam> using namespace st d; int mai n( ) { int opci on; cout << 1. Espaa\ n 2. Fr anci a\ n 3. I t al i a\ n; cout << 4. I ngl at er r a << endl ; cout << Sel ecci ona una opci n: ; ci n >> opci on; switch ( opci on) { case 1: cout << Hol a\ n; break; case 2: cout << Al l o\ n; break; case 3: cout << Pr ont o\ n; break; case 4: cout << Hel l o\ n; break; } return 0; } SELECCIN MTIPLE SELECCIN MTIPLE Fundamentos de Informtica ETSI Industrial 13 Universidad de Mlaga Jos Antonio Gmez Ruiz / * Ej empl o de cmo engl obar var i os casos */ #i ncl ude <i ost r eam> using namespace st d; int mai n( ) { char l et r a; cout << I nt r oduce una l et r a: ; ci n >> l et r a; switch ( l et r a) / * Aqu el sel ect or es una var i abl e */ { case a : / * de t i po car ct er */ case e : case i : case o : case u : cout << Es una vocal mi nscul a\ n; break; case A : case E : case I : case O : case U : cout << Es una vocal mayscul a\ n; break; default: cout << No es vocal \ n; } return 0; } SELECCIN MTIPLE SELECCIN MTIPLE Fundamentos de Informtica ETSI Industrial 14 Universidad de Mlaga Jos Antonio Gmez Ruiz Unasentencia de seleccin puede contener otra en cualquier rama / *t r ozo de cdi go con ani dami ent os */ if ( n1>n2) { / *Est as l l aves se pueden omi t i r */ if ( n1>n3) cout << El maxi mo es << n1; else cout << El maxi mo es << n3; } else { if ( n2>n3) cout << El maxi mo es << n2; else cout << El maxi mo es << n3; } ANIDAMIENTOS ANIDAMIENTOS Fundamentos de Informtica ETSI Industrial 15 Universidad de Mlaga Jos Antonio Gmez Ruiz cond_1 SI NO accin_2 accin_1 cond_2 cond_3 NO NO accin_3 SI SI M M Seleccin Mltiple ANIDAMIENTOS ANIDAMIENTOS Fundamentos de Informtica ETSI Industrial 16 Universidad de Mlaga Jos Antonio Gmez Ruiz / * si nt axi s abr evi ada */ if ( cond_1) acci n_1; else if ( cond_2) acci n_2; else if ( cond_3) acci n_3; ... if ( not a<5) cout << Suspenso; else if ( not a<7) cout << Apr obado; else if ( not a<9) cout <<Not abl e; else cout <<Sobr esal i ent e; / *caso bi nar i o especi al */ if ( cond_1) acci n_1; else if ( cond_2) acci n_2; else if ( cond_3) acci n_3; ... Importante la indentacin! ANIDAMIENTOS ANIDAMIENTOS Fundamentos de Informtica ETSI Industrial 17 Universidad de Mlaga Jos Antonio Gmez Ruiz if ( oper ador == + ) r esul t ado = a+b; else if ( oper ador == - ) r esul t ado = a- b; else if ( oper ador == * ) r esul t ado = a*b; else if ( oper ador == / ) r esul t ado = a/ b; else cout << \ nI ndef i ni do; switch ( oper ador ) { case + : r esul t ado = a+b; break; case - : r esul t ado = a- b; break; case * : r esul t ado = a*b; break; case / : r esul t ado = a/ b; break; default: cout <<\ nI ndef i ni do; } Es ms legible que... ANIDAMIENTOS ANIDAMIENTOS Fundamentos de Informtica ETSI Industrial 18 Universidad de Mlaga Jos Antonio Gmez Ruiz Desarrolla un programa que lea los coeficientes de una ecuacin de segundo grado y calcule e imprima sus soluciones. Deben contemplarse todos los posibles casos que se puedan dar. Disea primero el algoritmo mediante diagramas de flujo Desarrolla un programa que lea tres nmeros naturales, correspondientes al da, mes y ao de una fecha, e indique si es una fecha vlida del siglo XX Desarrolla un programa que lea cinco letras que corresponden a una hora en formato 24h (hh:mm) e imprima la hora en formato 12h acompaada de AM o PM segn proceda ( p.e. 09:35 -> 09:35 AM ; 18:15 -> 06:35 PM) ESTRUCTURAS DE SELECCIN ESTRUCTURAS DE SELECCIN Fundamentos de Informtica ETSI Industrial 19 Universidad de Mlaga Jos Antonio Gmez Ruiz 4.1. Estructura secuencial. 4.2. Estructuras de seleccin. 4.2.1. Seleccin simple ( i f ). 4.2.2. Seleccin binaria ( i f . . . el se ). 4.2.3. Seleccin mltiple ( swi t ch ). 4.2.4. Anidamientos. 4.3. ESTRUCTURAS DE REPETICIN O ITERATIVAS. BUCLES. 4.3.1. Estructuras no deterministas ( whi l e, do...whi l e ). 4.3.2. Estructuras deterministas ( f or ). 4.3.3. Las sentencias br eak y cont i nue. 4.3.4. Diseo de bucles: anidamientos y bucles infinitos. Tema 4: Estructuras de Control Estructura y Contenidos Fundamentos de Informtica ETSI Industrial 20 Universidad de Mlaga Jos Antonio Gmez Ruiz Tambin llamadasestructuras de iteracin o bucles Permiten repetir una sentencia o grupo de sentencias un nmero o determinado o indeterminado de vecesa priori: bucles deterministas y bucles no deterministas(post-condicin y pre-condicin) Una condicin de control (expresin lgica) permite controlar el nmero de repeticiones Cuerpo de bucle + condicin de control Controla el nmero de repeticiones Sentencias a repetir ESTRUCTURAS DE REPETICIN ESTRUCTURAS DE REPETICIN Fundamentos de Informtica ETSI Industrial 21 Universidad de Mlaga Jos Antonio Gmez Ruiz Bucle post-condicin: do...while la condicin de terminacin se evala despus de cada iteracin <condi ci n>tiene que ir SIEMPRE entre parntesis <sent enci as>se ejecuta 1 ms veces do{ <sent enci as> }while( <condi ci n>) ; <sent enci as_f uer a> condicin SI NO sentencias sentencias_fuera BUCLES NO DETERMINISTAS BUCLES NO DETERMINISTAS Fundamentos de Informtica ETSI Industrial 22 Universidad de Mlaga Jos Antonio Gmez Ruiz Bucle post-condicin: do...while cout << Hol a\ n; cont ador = 1; do{ cout << - ; cont ador ++; while( cont ador <= 4) ; Hol a - - - - 4 cont ador BUCLES NO DETERMINISTAS BUCLES NO DETERMINISTAS Fundamentos de Informtica ETSI Industrial 23 Universidad de Mlaga Jos Antonio Gmez Ruiz Ejemplo: clculo aproximado de e x No se sabe de antemano las veces que se itera el bucle Vamos a mostrar la ejecucin de tres iteraciones ci n >> x; cont =0; ser i e=0. 0; f act =1. 0; pot =1. 0; do{ ser i e = ser i e + pot / f act ; cont ++; f act = f act * ( float) cont ; pot = pot * x; }while( pot / f act > 0. 000001 ) ; . . . + + + + = ! ! 3 2 1 3 2 x x x e x Hasta aportacin de cada trmino menor que 0.000001 BUCLES NO DETERMINISTAS BUCLES NO DETERMINISTAS Fundamentos de Informtica ETSI Industrial 24 Universidad de Mlaga Jos Antonio Gmez Ruiz Ejemplo: validacin de entradas por teclado do{ cout << Nmer o de mes: ; ci n >> mes; }while ( ! ( mes>=1 && mes<=12 ) ) ; do{ cout << D a del mes: ; ci n >> di a; }while ( ! ( di a>=1 && di a<=31 ) ) ; Validar nmero de mes Validar da de mes BUCLES NO DETERMINISTAS BUCLES NO DETERMINISTAS Fundamentos de Informtica ETSI Industrial 25 Universidad de Mlaga Jos Antonio Gmez Ruiz / * Cal cul a el nmer o posi t i vo ms gr ande de una l i st a. La ent r ada se r eal i za mi ent r as l os nmer os sean mayor es que cer o */ #i ncl ude <i ost r eam> using namespace st d; int mai n( ) { int num, max=0; do{ cout << I nt r oduce un nmer o: ; ci n >> num; if( num> max ) max = num; }while( num> 0 ) ; if( max! =0 ) cout << El nmer o ms gr ande es << max; else cout << No se han i nt r oduci do nmer os; return 0; } BUCLES NO DETERMINISTAS BUCLES NO DETERMINISTAS Fundamentos de Informtica ETSI Industrial 26 Universidad de Mlaga Jos Antonio Gmez Ruiz Bucle pre-condicin: while la condicin de terminacin se evala antes de cada iteracin <condi ci n>tiene que ir SIEMPRE entre parntesis <sent enci as>se ejecuta 0 ms veces while( <condi ci n>) { <sent enci as> } <sent enci as_f uer a> condicin SI NO sentencias sentencias_fuera SI cuidado con poner involuntariamente un ; BUCLES NO DETERMINISTAS BUCLES NO DETERMINISTAS Fundamentos de Informtica ETSI Industrial 27 Universidad de Mlaga Jos Antonio Gmez Ruiz Bucle pre-condicin: while Algunos ejemplos muy utilizados son: Bucle controlado por contador Bucle controlado por centinela Bucle contador BUCLES NO DETERMINISTAS BUCLES NO DETERMINISTAS Fundamentos de Informtica ETSI Industrial 28 Universidad de Mlaga Jos Antonio Gmez Ruiz Bucle controlado por contador Se ejecuta un numero determinado de veces Se utiliza una variable de control del bucle(vcb) Componentes Inicializacin Comprobacin de la condicin Actualizacin i =0; / *I ni ci al i zaci n*/ while( i <=10) / *compr obaci n*/ { <sent enci as> i ++; / *act ual i zaci n*/ } En este tipo de bucles usaremos la sentencia for BUCLES NO DETERMINISTAS BUCLES NO DETERMINISTAS Fundamentos de Informtica ETSI Industrial 29 Universidad de Mlaga Jos Antonio Gmez Ruiz Bucle controlado por centinela centinela valor especial de una variable que controla el final del bucle Es necesario actualizar el centinela en cada iteracin La primera evaluacin de la condicin exige una actualizacin adelantada de la variable de control del bucle ci n >> cent i nel a; / *act ual i zaci n adel ant ada*/ while( cent i nel a! =0) { <sent enci as> ci n >> cent i nel a; / *act ual i zaci n*/ } BUCLES NO DETERMINISTAS BUCLES NO DETERMINISTAS Fundamentos de Informtica ETSI Industrial 30 Universidad de Mlaga Jos Antonio Gmez Ruiz Bucle contador til cuando se quiere contar el nmero de veces que se ejecuta el bucle La condicin de terminacin no depende del contador / *hace eco por pant al l a de l a ent r ada y cuent a l os car act er es hast a encont r ar se un punt o*/ cont ador =0; ci n >> ch; while( ch! = . ) { cout << ch; cont ador ++; ci n >> ch; } cout << Car act er es l ei dos << cont ador ; BUCLES NO DETERMINISTAS BUCLES NO DETERMINISTAS Fundamentos de Informtica ETSI Industrial 31 Universidad de Mlaga Jos Antonio Gmez Ruiz / *Ej empl o de bucl e cont ador : cal cul o de l a medi a de una l i st a de nmer os hast a i nt r oduci r el cer o */ #i ncl ude <i ost r eam> using namespace st d; int mai n( ) { int i =0; float x, suma=0. 0; cout << I nt r oduce un nmer o: ; ci n >> x; while ( x ! = 0 ) { suma = suma + x; i ++; cout << I nt r oduce un nmer o: ; ci n >> x; } if ( i ! = 0 ) cout << La medi a es << suma/ ( float) i ; else cout << No se han i nt r oduci do nmer os\ n; return 0; } BUCLES NO DETERMINISTAS BUCLES NO DETERMINISTAS Fundamentos de Informtica ETSI Industrial 32 Universidad de Mlaga Jos Antonio Gmez Ruiz El buclefor Es muy verstil en el lenguaje de programacin C for ( <i ni ci al i zaci n>; <condi ci n>; <act ual i zaci n>) { <sent enci as> } condicin SI NO sentencias inicializacin actualizacin En C la asignacin se considera un operador, y, por tanto, las asignaciones son expresiones. expresiones BUCLES DETERMINISTAS BUCLES DETERMINISTAS Fundamentos de Informtica ETSI Industrial 33 Universidad de Mlaga Jos Antonio Gmez Ruiz El buclefor Lo usaremos cuando el nmero de veces que se repite el bucle se puede determinar a priori Tendremos siempre una variable de control del bucle (vcb) En el cuerpo del bucle, vcb puede usarse, NUNCA cambiarse for( i =1; i <10; i ++) /* i empieza tomando el valor 1, cada vez que el bucle da una iteracin se incrementa en 1. El bucle terminar cuando i sea igual a 10, es decir, el ltimo valor que i tomar dentro del bucle ser 9 */ for( i =2; i <=128; i *=2) /* i empieza tomando el valor 2; cada vez que el bucle da una iteracin i se multiplica por 2. Esto continua mientras i sea menor o igual que 128. Los valores de i dentro del bucle sern 2,4,8,16,32,64 y 128 */ for( j =10; j >0; j - - ) /* j empieza tomando el valor 10, cada vez que el bucle da una iteracin se decrementa en 1. El bucle terminar cuando j sea igual a 0, es decir, el ltimo valor que i tomar dentro del bucle ser 1 */ BUCLES DETERMINISTAS BUCLES DETERMINISTAS Fundamentos de Informtica ETSI Industrial 34 Universidad de Mlaga Jos Antonio Gmez Ruiz El bucle for : ejemplo BUCLES DETERMINISTAS BUCLES DETERMINISTAS Fundamentos de Informtica ETSI Industrial 35 Universidad de Mlaga Jos Antonio Gmez Ruiz El buclefor : ejemplo / * Tabl a de mul t i pl i car */ #i ncl ude <i ost r eam> using namespace st d; int mai n( ) { int i , num; cout << I nt r oduce un nmer o : ; ci n >> num; for( i =1; i <=10; i ++) { cout << num<< x << i << = << num*i ; cout << endl ; } return 0; } I nt r oduce numer o: 5 5 x 1 = 5 5 x 2 = 10 5 x 3 = 15 5 x 4 = 20 5 x 5 = 25 5 x 6 = 30 5 x 7 = 35 5 x 8 = 40 5 x 9 = 45 5 x 10 = 50 BUCLES DETERMINISTAS BUCLES DETERMINISTAS Fundamentos de Informtica ETSI Industrial 36 Universidad de Mlaga Jos Antonio Gmez Ruiz El buclefor : ejemplo / * Fact or i al de un nmer o */ #i ncl ude <i ost r eam> using namespace st d; int mai n( ) { int f act or i al , i , num; cout << I nt r oduce un numer o : ; ci n >> num; f act or i al =1; for( i =1; i <=num; i ++) f act or i al *= i ; cout << \ nEl f act or i al es << f act or i al ; return 0; } I nt r oduce numer o: 6 El f act or i al es 720 BUCLES DETERMINISTAS BUCLES DETERMINISTAS Fundamentos de Informtica ETSI Industrial 37 Universidad de Mlaga Jos Antonio Gmez Ruiz La sentencia br eak se utiliza para forzar la salida de un bucle independientemente de que se cumpla o no la condicin de terminacin. La sentencia cont i nue termina la iteracin en curso y vuelve a evaluar de nuevo la condicin de terminacin del bucle. En programacin estructurada, no es recomendable el uso de este tipo de sentencias y por lo tanto NO LAS USAREMOS "Se demuestra que todo problema que pueda resolverse en un numero finito de pasos puede expresarse usando nicamente 3 tipos de estructuras o bloques fundamentales, con una sola entrada y una sola salida para organizar dichos pasos: Un proceso secuencial. Un mecanismo de decisin binaria. Un mecanismo de bucle generalizado. (Bohmy J acopini, 1965) BREAK y CONTINUE BREAK y CONTINUE Fundamentos de Informtica ETSI Industrial 38 Universidad de Mlaga Jos Antonio Gmez Ruiz Al igual que en las estructuras selectivas, no hay restriccionesen las sentencias del cuerpo del bucle La estructura interna debe de estar totalmente incluidaen la externa Bucle ms externo Bucle anidado Bucle anidado ANIDAMIENTOS DE BUCLES ANIDAMIENTOS DE BUCLES Fundamentos de Informtica ETSI Industrial 39 Universidad de Mlaga Jos Antonio Gmez Ruiz / *Escr i be un r ect ngul o de ast er i scos*/ #i ncl ude <i ost r eam> using namespace st d; int mai n( ) { int i , j ; for( i =1; i <=3; i ++) { for( j =1; j <=8; j ++) cout << *; cout << \ n; } return 0; } ******** ******** ******** bucle exterior bucle interior ANIDAMIENTOS DE BUCLES ANIDAMIENTOS DE BUCLES Fundamentos de Informtica ETSI Industrial 40 Universidad de Mlaga Jos Antonio Gmez Ruiz / *Escr i be un r ect ngul o de ast er i scos*/ #i ncl ude <i ost r eam> using namespace st d; int mai n( ) { int i , j ; for( i =1; i <=3; i ++) { for( j =1; j <= i ; j ++) cout << *; cout << \ n; } return 0; } bucle exterior bucle interior * ** *** ANIDAMIENTOS DE BUCLES ANIDAMIENTOS DE BUCLES Fundamentos de Informtica ETSI Industrial 41 Universidad de Mlaga Jos Antonio Gmez Ruiz I nt r oduce al t ur a: 3 1 12 123 I nt r oduce al t ur a: 4 1 121 12321 1234321 Basndote en el cdigo anterior, modifica el programa para que obtenga los ejemplos adjuntos. La altura del tringulo se pide por teclado. ANIDAMIENTOS DE BUCLES ANIDAMIENTOS DE BUCLES Fundamentos de Informtica ETSI Industrial 42 Universidad de Mlaga Jos Antonio Gmez Ruiz / * Encuent r a el pr i mer nmer o per f ect o mayor que 28. Un nmer o es per f ect o si coi nci de con l a suma de sus di vi sor es, si n cont ar se el mi smo. Ej : 6 = 1+2+3 */ #i ncl ude <i ost r eam> using namespace st d; int mai n( ) {int encont r ado = 0, i nt ent o, cont , suma; i nt ent o = 29; / * empi ezo con el si gui ent e de 28 */ while( ! encont r ado) { suma=1; / * el 1 es di vi sor de t odos l os numer os */ for ( cont =2; cont <i nt ent o; cont ++ ) if ( ( i nt ent o%cont ) ==0) / * si cont es di vi sor */ suma+=cont ; / * l o sumo */ if ( suma == i nt ent o ) encont r ado = 1; / * si coi nci de l o hemos encont r ado */ else i nt ent o++; / * si no, pr obamos con el si gui ent e */ } cout << Nmer o per f ect o mayor que 28 = << i nt ent o; return 0; } ANIDAMIENTOS DE BUCLES ANIDAMIENTOS DE BUCLES Fundamentos de Informtica ETSI Industrial 43 Universidad de Mlaga Jos Antonio Gmez Ruiz Un bucle infinitoes un bucle que nunca acaba Normalmente se produce cuando un bucle no alcanza la condicin de finalizacin Mucho cuidado con los puntos y coma tras las condiciones Por tanto, al disear un bucle, hay quecomprobar siempre quelas condiciones de finalizacin sern alcanzadas suma = 0; N = 0; while ( N <= 100) suma = suma + N; cout << suma; suma = 0; N = 0; while ( N <= 100) ; { suma = suma + N; N++; } cout << suma; N++; BUCLES INFINITOS BUCLES INFINITOS Fundamentos de Informtica ETSI Industrial 44 Universidad de Mlaga Jos Antonio Gmez Ruiz Desarrolla un programa que lea una secuencia de nmeros naturales terminada en cero e indique la posicin de la primera y ltima ocurrencia del nmero doce. Desarrolla un programa que, dado un nmero natural ledo por teclado, indique si es o no nmero primo. El programa preguntar si se quiere repetir de nuevo el proceso. Desarrolla un programa que, dada una secuencia de ceros y unos terminada en un punto, muestre por pantalla el tamao de todas las subcadenas de unos e indique cual es la mayor. EJ ERCICIOS EJ ERCICIOS Fundamentos de Informtica ETSI Industrial 45 Universidad de Mlaga Jos Antonio Gmez Ruiz Tema 4: Estructuras de Control FIN DEL TEMA