•Estructura Algorítmica: SELECCIÓN • Selección Simple: “SI” • Ejemplo en C: if • Selección Doble: “SI-SINO” • Ejemplo en C: if – else • Selección Doble en cascada: “SI- SINO-SI” • Ejemplo en C: if – else { if – else { … } …. } • Selección Múltiple: “SEGÚN” • Ejemplo en C: switch TEORIA
25
Embed
Estructura Algorítmica: SELECCIÓN Selección Simple: “SI” Ejemplo en C: if Selección Doble: “SI-SINO” Ejemplo en C: if – else Selección Doble en cascada:
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
•Estructura Algorítmica: SELECCIÓN
• Selección Simple: “SI”• Ejemplo en C: if
• Selección Doble: “SI-SINO”• Ejemplo en C: if – else
• Selección Doble en cascada: “SI-SINO-SI”• Ejemplo en C: if – else { if – else { … } …. }
• Selección Múltiple: “SEGÚN” • Ejemplo en C: switch
CI2125 TEORIA semana 4
#include <stdio.h>
#define TRUE 1
#define FALSE 0
void main()
{
int a,b,x,y; /* se declaran de tipo entero */
x =5; y = 10;
a = TRUE;
b = a && x;
printf(“b= %d\n”, b );
b = a && y;
printf(“b= %d\n”, b );
b = x == y;
printf(“b= %d\n”, b );
b = a && x != y;
}
Resultado:
b = 1 TRUEb = 1 TRUEb = 0 FALSE
Cualquier variable entera con un valor distinto de cero, se considera Verdadera
Expresiones Lógicas en C
/* Aplicación de Operadores en C */#include <stdio.h> #define TRUE 1#define FALSE 0
void main() { int i= 15, j, k, l; j = (( 15 > i--) > ( 14 < ++i )) && TRUE; printf(“\nEl valor de j es: %d”, j);
k = ! ( ‘b’ != ‘d’ ) > ( i – 16 ); printf(“\nEl valor de k es: %d”, k); l = ( ! ( 34 > ( 70 % 2 )) || FALSE ); printf(“\nEl valor de l es: %d ”, l);}
Expresiones Lógicas en C
Que imprimeEste programa ??
El valor de j es: 0El valor de k es: 1El valor de l es: 0
Imprime:
Estructura de Selección Simple “SI”
Pseudocódigo (acción simple) SI ( condición ) acción a
Pseudocódigo (acción compuesta) SI ( condición ) { acción 1 acción 2 . . . acción n }
If ( condición ) sentencia_1;
En C:
acción
condición
F
V
If ( condición ) { sentencia_1; sentencia_2; }
Estructura de Selección Simple “SI”
Problema: Codificar un programa que al recibir el promedio de un alumno en un curso, escribe “Aprobado” si el promedio es mayor o igual a 6
Análisis: Entrada: Se recibe variable de tipo real que representa el promedio del alumno. Pre-condición: dato real.Salida: Se debe imprimir si esta aprobado si se cumple la condición establecida, con el formato “Aprobado”Proceso: Si se cumple la expresión lógica ‘el promedio es mayor o igual a 6’, entonces se imprimirá “Aprobado”.Sea Pro la variable real que representa el promedio
Verificación:Corrida Dato Pro Resultado 1 6,75 “Aprobado” 2 5,90 3 4,00 4 8,80 “Aprobado”
Diagrama de Flujo
1 2
3
INICIO
Pro
Pro >= 6
“Aprobado”
FIN
V
F
Estructura de Selección Simple “SI”
Problema: Codificar un programa que al recibir el promedio de un alumno en un curso, escribe “Aprobado” si el promedio es mayor o igual a 6
Diagrama de Flujo
2 Codificación en Lenguaje C/* Promedio curso: El programa recibe como dato el promedio de un alumno en un curso , escribe “Aprobado” si su promedio es mayor o igual a 6 */
#include <stdio.h>#define VALOR 6
void main(){ float Pro; printf( "Ingrese el promedio del curso: \a \n " ); scanf( "%f", &Pro );
if ( Pro >= VALOR) printf( " \”Aprobado\” \n" );}
4
INICIO
Pro
Pro >= 6
“Aprobado”
FIN
V
F
Estructura de Selección Doble “SI – SINO”
If ( condición ) sentencia_1;else sentencia_2;
En C:
Pseudocódigo (acción simple)
SI ( condicion) acciona SINO accionb
Pseudocódigo (acción compuesta) SI ( condicion ) { acciona1 . . accionan } SINO { accionb1 . . accionbn }
Problema: Codificar un programa que al recibir el promedio de un alumno en un curso, escribe “Aprobado” si el promedio es mayor o igual a 6, sino escribir “Reprobado”
Análisis: Entrada: Se recibe variable de tipo real que representa el promedio del alumno. Pre-condición: dato real.Salida: Se debe imprimir si esta aprobado si se cumple la condición establecida, con el formato “Aprobado”, sino “Reprobado”Proceso: Si se cumple la expresión lógica ‘el promedio es mayor o igual a 6’, entonces se imprimirá “Aprobado, sino “Reprobado”Sea Pro la variable real que representa el promedio
Verificación:Corrida Dato Pro Resultado 1 6,75 “Aprobado” 2 5,90 “Reprobado” 3 4,00 “Reprobado” 4 8,80 “Aprobado”
Diagrama de Flujo
1 2
3
Estructura de Selección Doble “SI – SINO”
INICIO
Pro
Pro >= 6
“Reprobado”
FIN
V F
“Aprobado”
Diagrama de Flujo
2 Codificación en Lenguaje C/* Promedio curso: El programa recibe como dato el promedio de un alumno en un curso , escribe “Aprobado” si su promedio es mayor o igual a 6, sino escribe “Reprobado” */
#include <stdio.h>#define VALOR 6
void main(){ float Pro; printf( "Ingrese el promedio del curso: \a \n " ); scanf( "%f", &Pro );
if ( Pro >= VALOR) printf( " \”Aprobado\” \n" ); else printf( " \”Reprobado\” \n" );}
4
Problema: Codificar un programa que al recibir el promedio de un alumno en un curso, escribe “Aprobado” si el promedio es mayor o igual a 6, sino escribir “Reprobado”
Estructura de Selección Doble “SI – SINO”
INICIO
Pro
Pro >= 6
“Reprobado”
FIN
V F
“Aprobado”
Estructura de Selección Doble en Cascada “SI-SINO-SI”
Pseudocódigo ( accion simple ) SI ( condicion1 ) accion1SINO SI ( condicion2 ) accion2 SINO SI ( condicion3 ) accion3 . . . SINO acciondefecto
Estructura de Selección Doble en Cascada “SI-SINO-SI”
En C:Pseudocódigo ( accion compuesta) SI ( condicion1 ) { acciona1 … accionan }SINO SI ( condicion2 ) { accionb2 … accionbn } SINO . . SINO { acciondefecto1 …. acciondefecton }
If ( condición_a ) sentencia_a;else if ( condición_b ) sentencia_b; else sentencia_por_defecto;
If ( condición_a ) { sentencia_a1; sentencia_a2; }else if ( condición_b ) { sentencia_b1; sentencia_b2; }else sentencia_por_defecto;
Problema: Codificar un programa que al recibir un numero entero, determine si pertenece al intervalo (10,100) e imprimir “Si pertenece”, de lo contrario imprimir “No pertenece”
Análisis:
Entrada: Se recibe variable de tipo entera, num.Salida: Se debe imprimir “Si pertenece” si num pertenece a (10,100) de lo contrario se imprime “No pertenece”Proceso: El algoritmo debe determinar si la variable num, se encuentra dentro o fuera del intervalo, para lo cual se usa una estructura de selección en cascada. Verificamos si el num <= 10, si 0 < num < 100, o si por defecto num > = 100, en cuyos casos se imprime lo que corresponda.
Diagrama de Flujo
1 2
Estructura de Selección Doble en Cascada “SI-SINO-SI”
INICIO
num
num <= 0
FIN
V F
“No pertenece” (num >0) y (num<100)
“No pertenece”
“Si pertenece”
F
V
Estructura de Selección Doble en Cascada “SI-SINO-SI”
/* Programa que determina si num pertenece al intervalo (10,100) */#include <stdio.h>#define RANGO_INF 10#define RANGO_SUP 100
void main(){ int num; printf( "Introduce un número " ); scanf( "%i", &num ); if ( num < RANGO_INF ) printf ( “No pertenece \n" ); else if ( (num>RANGO_INF) && (num<RANGO_SUP) ) printf ( “Si pertenece \n" );
else printf( “No pertenece \n" );}
4Codificación
Problema: Leer los datos de las ventas de tres vendedores de una tienda de discos, escribir las mismas en forma descendente”
Análisis: Entrada: Se reciben tres variables de tipo flotante, p, s y r.
Salida: Se deben imprimir las mismas variables ordenadas descendentemente, es decir, de mayor a menor.
Proceso: El algoritmo debe comparar las variables entre si y determinar la mayor de todas, y luego compara las dos restantes y determina la mayor de estas dos y encontrar asi la intermedia y la menor.Para esto, se usa una estructura de selección en cascada, que permite comparar dos variables, p > s ?, si es verdad, entonces compara p > r ?, si esto es verdad, compara s > r ?, si todo esto se cumple, es decir p>s>r es Verdadero, entonces imprime p, s, r. Esto es una sola rama del árbol que se genera en la estructura de selección en cascada. De las diferentes ramas salen todos los posibles casos: p>r>s, r>p>s, r>s>p, s>p>r, s>r>p,
1
Estructura de Selección Doble en Cascada “SI-SINO-SI”
Problema: Leer los datos de las ventas de tres vendedores de una tienda de discos, escribir las mismas en forma descendente
Diagrama de Flujo
2
Estructura de Selección Doble en Cascada “SI-SINO-SI”
INICIO
p, s, r
p > s
FIN
V F
p, s, r
F p > r s > r
V V F
F s > r
V
p, r, s
r, p, s
s, p, r
F p > r
V
s, r, p
r, s, p
Verificar !3
Estructura de Selección Doble en Cascada “SI-SINO-SI”
Codificación en C:
/* Imprime en orden descendente, 3 valores de ventas */#include <stdio.h>
void main(){ float p, s, r; printf( "Ingrese las ventas de los tres vendedores" ); scanf( "%f %f %f", &p, &s, &r ); if ( p > s ) if ( p > r ) if ( s > r )
printf(“\n El orden es: %f %f %f”,p,s,r); else printf(“\n El orden es: %f %f %f”,p,r,s); else printf(“\n El orden es: %f %f %f”,r,p,s); else if ( s > r ) if ( p > r )
printf(“\n El orden es: %f %f %f”,s,p,r); else printf(“\n El orden es: %f %f %f”,s,r,p); else printf((“\n El orden es: %f %f %f”,r,s,p); }
4
Estructura de Selección Múltiple “SEGÚN”
Estructura de Selección Múltiple “SEGÚN”
selector
acción 1 acción 2 acción 3 acción 5 acción x
valor1 valor2 Valor3, valor4 valor5 valorx
Estructura de Selección Múltiple “SEGÚN”
Pseudocódigo ( acción simple )
SEGÚN ( selector ) { CASO c1 : accion1 CASO c2 : accion2 CASO c3 : accion3 . . . CASO cn : accionn DEFECTO : acciondefecto}
Pseudocódigo ( acción compuesta)
SEGÚN ( selector ) { CASO c1 : {
acciona1 …accionan}
CASO c2 : accion2 CASO c3 : accion3 . . . CASO cn : accionn DEFECTO : acciondefecto}
Estructura de Selección Múltiple “SEGÚN”
switch ( selector ) { case c1: acción_c1;
acción_c11; break;
case c2: acción_c2; break;
case c3: acción_c3; acción_c31 break;...
case cn: acción_cn; break;
default : accion_defecto; /*opcional*/}
/* Ejemplo switch */
int numero; /* 1 es Primavera…*/char nombreEst; /* estaciones */
switch (numero) { case 1 :
nombreEst = ‘P’; break;
case 2 : nombreEst = ‘V’; break;
case 3 : nombreEst = ‘O’; break;
default : nombreEst = ‘I’;
}
Código en C:
Estructura de Selección Múltiple “switch”
#include <stdio.h>int main(){ int num; printf( "Introduce un número " ); scanf( "%i", &num );
if ( num==1 ) printf( "Es un 1\n" ); else if ( num==2 ); printf( "Es un 2\n" ); else if ( num==3 ) printf( "Es un 3\n" ); else printf( "No era ni 1, ni 2, ni 3\n“);}
#include <stdio.h>int main(){ int num; printf( "Introduce un número " ); scanf( "%i", &num ); switch( num ) { case 1: printf( "Es un 1\n" ); break; case 2: printf( "Es un 2\n" ); break; case 3: printf( "Es un 3\n" ); break; default: printf( "No es ni 1, ni 2, ni 3\n" ); break; }}
múltiples casos con if-else
con switch
Problema: Construir diagrama de flujo y el programa en C, que al recibir como datos dos variables enteras, Obtenga el resultado de evaluar la siguiente función
| t/5, si Op = 1| t ** t, si Op = 2
F(t) = | 6*t/2, si Op=3, 4| 1, para cualquier otro caso
Análisis: Entrada: Se reciben dos variables enteras, Op representa el tipo de operación a realizar, y t el valor que se usa para el calculo de la función
Salida: Se deben imprimir el resultado de la función f(t), para Op y t dado.
Proceso: El algoritmo debe comparar el valor de Op, contra las opciones dadas por la función, que son: 1,2,3,4, y cualquier otro caso, y en cada caso realizar el calculo correspondiente de la función para el t dado.Para esto usaremos una estructura de selección múltiple “Según”.
1
Estructura de Selección Múltiple “switch”
Diagrama de Flujo
2INICIO
Op, t
FIN Verificar !3
Estructura de Selección Múltiple “switch”
Op
cal t/5
1 2 3, 4 otro
cal t**t cal 6*t/2 cal 1
Op, t,cal
Codificación en C:
/* funcion matematica, El programa obtiene el resultado de una funcion */#include <stdio.h>#include <math.h>void main(){ int Op, t; float cal; printf( "Ingrese la opcion del calculo de la función y el valor a calcular" ); scanf( "%d %d", &Op, &t ); switch( Op ) { case 1: cal = t/5; break; case 2: cal = pow(t,t); break; case 3: case 4: cal = 6*t/2; break; default: cal = 1; break; } printf( “Resultado f(%d) = %f, para Op=%d \n“, t, cal, Op ); }
4
Estructura de Selección Múltiple “switch”
Estructura de Selección Múltiple “SEGÚN”
#include <stdio.h>#define TRUE 1int main(){ int mes, dias, bisiesto; /* bisiesto es TRUE si el año es bisiesto */ bisiesto = TRUE; /* suponemos que el año es bisiesto */ printf( "Introduce el numero del mes \n “); scanf( "%i", &mes ); switch( mes ) { case 1: /* los meses enero, marzo, mayo, julio, agosto, octubre y diciembre tienen 31 dias */ case 3: case 5: case 7: case 8: case 10: /* verificar la sintaxis del compilador DevC++, lineal o cada case debajo del otro */ case 12: dias = 31; break; case 2:
if ( bisiesto ) dias = 29;else dias = 28;break;
default: dias = 30; break; } printf ( “Dias del mes son %d\n “,dias); }
Dado el numero del mesDeterminar numero de díasSe supone año bisiesto