Departamento de Informática Universidad Técnica Federico Santa María Estructuras de Control en C Programación de Computadores Profesor Teddy Alfaro Secuencia • El secuencialismo está inserto en todo programa como tal. Al ejecutar un programa las instrucciones siguen el extricto orden secuencia en la forma que fueron programadas (escritas). 1 Acción simple y acción compuesta • Acción simple, corresponde a una instrucción simple a ejecutar. Es una sentencia seguida de ; • Acción compuesta, corresponde a un conjunto de sentencias que se ejecutan dentro de un bloque. Un bloque de instrucción se puede indentificar por estar entre un { y un } Acción simple y compuesta • Ejemplo acción simple • Ejemplo acción compuesta { X=4*Pi*sqr( r ); X=4*Pi; r2= sqr( r ); area= X*r2; } 2 Estructuras de control • Trabajaremos con 3 estructuras de selección de C if( ) {…} if( ) {…} else {…} switch ( ) {…} • Y con 3 estructuras de repetición while ( ){…} do {…} while( ); for( ; ; ) {…} Selección: If • Formato acción simple if condición acción; • Formato acción compuesta if condición { acción_1; acción_2; ... acción_n; } V condición Acción; F condición F V Acción_1; Acción_2; ... Acción_n; 3 Selección: if..else • Formato: if condición { accion_1a; ... accion_n } else { accion_1b; ... accion_m }; F condición Accion_1b; ... Accion_m V Accion_1a; ... Accion_n Ejemplo if-else float a,b,c; // solucionando ax^2 + bx +c = 0 scanf(“%f %f %f”,&a,&b,&c); if( (b*b-4*a*c>0) && (a!=0) ) { x1 = (-b + sqrt(b*b-4*a*c))/(2*a); x2 = (-b - sqrt(b*b-4*a*c))/(2*a); printf("resultado de ax^2+bx+c=0 es x1=%f y x2=%f\n",x1, x2); } Else printf(“ax^2+bx+c=0 no tiene solucion real\n”); 4 Sentencia: switch • La estructura SWITCH podría considerarse como un IF pero de un mayor nº de alternativas. switch if .. else Nos permite elegir entre una o más de una alternativa. Nos permite elegir entre una o dos alternativas. alternativa No cumple condición cumple Alter.2 Alter.1 ... Alter.n Alter.3 Sentencia: SWITCH • Formato General: switch expresión { case valor1_1:case valor1_2, ... ,case valor1_m : instruccion1; case valor2 : instruccion2_1; instruccion2_2; .... break; case valor3 : instrucción3_1; ..........; instruccion3_n; case valor4 : instrucción4_1; break; ... case valor_p: instrucción_p; break; default: instrucción_x; break; } 5 Ejemplo switch int n; char c; scanf("%c",&c); switch (c) { case '0': n= (int)c-(int)'0'; break; case '1': n= (int)c-(int)'0'; break; case '2': n= (int)c-(int)'0'; break; case '3': n= (int)c-(int)'0'; break; case '4': n= (int)c-(int)'0'; break; case '5': n= (int)c-(int)'0'; break; case '6': n= (int)c-(int)'0'; break; case '7': n= (int)c-(int)'0'; break; case '8': n= (int)c-(int)'0'; break; case '9': n= (int)c-(int)'0'; break; default: n= -1; break; } printf("\nel valor numero es %d\n",n); int n; char c; scanf("%c",&c); switch (c) { case '0':case '1': case '2':case '3':case '4': case '5':case '6':case '7':case '8': case '9': n= (int)c-(int)'0'; break; default: n= -1; break; } printf("\nel valor numero es %d\n",n); //programas equivalentes Estructuras de Repetición • Esta sentencias se utilizan para repetir una acción simple o compuesta bajo el control de una condición; además conocerse o no de antemano en número iteraciones. • Repetición con iteraciones condicionales: while(condicion) { … } do { … } while(condicion); • Repetición con iteraciones fijas for(inicializacion; condicion ; accion ) 6 Repetición: WHILE • Formato: acción simple while (condición) acción: • Formato: acción compuesta while (condición) { acción1; acción2; ...; acción_n } condición V acción; F Acción_n ... acción2; condición V acción1; F Ejemplo while • Factorial de un número positivo i=1; d=1; while(i<n+1) { d *= i; i++; } printf(" el factorial de %d es %f\n",n,d); 7 Repetición: DO..WHILE • Formato: acción simple do acción; while (condición); • Formato: acción compuesta do { acción_1; acción_2; .... acción_n; } while (condición); acción; condición F V acción; acción; acción; condición F V Ejemplo do-while • Factorial de un número d=1; i=1; do{ d*=i; i++; } while (i<n+1); printf(" el factorial de %d es %f\n",n,d); 8 Sentencia Repetitiva: FOR • La sentencia FOR se emplea para indicar que una acción será repetidamente ejecutada, mientras se asigna una progresión ordenada de valores a una variable de control. • Es similar al while y al do-while, y en general es utilizado cuando se conoce de antemano el número de repeticiones. • Existen dos tipos de for: – Progresivo – Regresivo Sentencia For • Formato general For for( inicia1,..,iniciaN; condiciones; accina-1,..,acciona-N ) { acción_1; ...... acción_n } • Formato For estandar progresivo for(i=0; i<N; i++) { ... } • Formato For estandar regresivo for(i=N; i>0; i--) { ... } for ... 9 Ejemplo: FOR • Cálculo del factorial int i,n; double d=1.0; scanf(“%d”, &n); for(i=1; i<n+1; i++ ) d *= i; printf(“el factorial de %d es %f\n”,n,d); Usos avanzados con FOR • El for es una sentencia la cual podemos manejar muchas operaciones en una sola declaración. Sólo basta ver los siguientes ejemplos: for (x=0;((x>3) && (x<9)); x++) for (x=0,y=4;((x>3) && (y<9)); x++,y+=2) for (x=0,y=4,z=4000;z; z/=10) 10 Ejercicio • Desarrollar un Algoritmo cuya entrada de datos a,b,c corresponden a los lados de un triángulo cualquiera. El algoritmo debe detectar si se trata de un triángulo rectángulo, sino si es isóceles y/o equilátero, y por último si no corresponde a ninguno de estos 3 tipos de triángulos. Ejercicios • La función seno puede ser aproximada: La precisión del en esta serie infinita puede ser ajustada de acuerdo a n, es decir, mientras mayor sea el n más preciso. Se pide desarrollar un programa C, que permita calcular aproximación del seno de un determinado número y un n dado. Además del resultado de la aproximación, se debe mostrar el error real al compararla con la función sin( ) de C. Suponga que la función factorial( ) y sin( ) ya existen. 11 Ejercicios • Si x e y son ambos enteros, no cero, su máximo común divisor puede ser obtenido con el algoritmo de euclides: “Mientras los nºs sean diferentes , deje el menor, y forme el otro restando el menor con el mayor. El algoritmo finaliza cuando los nºs quedan iguales, y este corresponde al MCD” • Se define Paridad Aditiva como la propiedad de un nº, tal que cumple que la suma de sus dígitos resulta ser par (de lo contrario no lo es). Desarrollar un programa cuya entrada sea en entero N, y el programa debe ser capaz de discernir si este cumple con la Paridad Aditiva o no. Ejercicios • Un número entero positivo se dice alternante si está compuesto de una secuencia de dígitos que alterna entre uno par y otro impar. Ejemplo: 1236781, 238 y 1347 son alternantes. Desarrollar un programa que determine si el nº es alternante. • Los números de Fibonacci son una secuencia de número de la forma: 1,1,2,3,5,8,13,21,55,89,144,233,377,610,.... f1=1, f2=1, f3=2 ... f14=610 ... fn= (n-2)+(n-1) Desarrollar un programa que muestre por pantalla la serie de nºs hasta un N ingresado por teclado. 12