25
•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

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:

Embed Size (px)

Citation preview

Page 1: 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:

•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

Page 2: 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:

#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

Page 3: 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:

/* 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:

Page 4: 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:

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; }

Page 5: 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:

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

Page 6: 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:

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

Page 7: 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:

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 }

acción B

condiciónFV

acción A

If ( condición ) {    sentencia_1; sentencia_2; }else { sentencia_3; sentencia_4;}

Page 8: 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:

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”

Page 9: 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:

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”

Page 10: 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:

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

Page 11: 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:

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;

Page 12: 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:

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

Page 13: 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:

Estructura de Selección Doble en Cascada “SI-SINO-SI”

Verificación:Corr num Resultado1 8 “No pertenece”2 11 “Si pertenece”3 99 “Si pertenece”4 1000 “No pertenece”

3

/* 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

Page 14: 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:

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”

Page 15: 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:

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

Page 16: 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:

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

Page 17: 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:

Estructura de Selección Múltiple “SEGÚN”

Page 18: 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:

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

Page 19: 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:

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}

Page 20: 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:

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:

Page 21: 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:

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

Page 22: 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:

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”

Page 23: 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:

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

Page 24: 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:

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”

Page 25: 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:

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