Estructuras de Control en C Secuencia

Anuncio
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
Descargar