Vous êtes sur la page 1sur 25

CI2125 TEORIA

semana 4

Estructura Algortmica: SELECCIN


Seleccin Simple: SI
Ejemplo en C: if
Seleccin Doble: SI-SINO
Ejemplo en C: if else
Seleccin Doble en cascada: SI-SINO-SI
Ejemplo en C: if else { if else { } . }
Seleccin Mltiple: SEGN
Ejemplo en C: switch

Expresiones Lgicas en C
#include <stdio.h>
#define TRUE 1
#define FALSE 0

Cualquier variable entera con


un valor distinto de cero, se
considera Verdadera

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
b=1
b=0

TRUE
TRUE
FALSE

Expresiones Lgicas en C
/* Aplicacin de Operadores en C */
#include <stdio.h>
#define TRUE 1
#define FALSE 0

Que imprime
Este programa ??

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

Imprime:
El valor de j es: 0
El valor de k es: 1
El valor de l es: 0

Estructura de Seleccin Simple SI

V
condicin

SI ( condicin )
accin a

F
accin

En C:
If ( condicin )
sentencia_1;

Pseudocdigo (accin simple)

If ( condicin )
{
sentencia_1;
sentencia_2;
}

Pseudocdigo (accin compuesta)


SI ( condicin )
{
accin 1
accin 2
.
.
.
accin n
}

Estructura de Seleccin 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
Anlisis:
1
Entrada: Se recibe variable de tipo real que
representa el promedio del alumno. Pre-condicin:
dato real.
Salida: Se debe imprimir si esta aprobado si se
cumple la condicin establecida, con el formato
Aprobado
Proceso: Si se cumple la expresin lgica el
promedio es mayor o igual a 6, entonces se
imprimir Aprobado.
Sea Pro la variable real que representa el promedio
Verificacin:
Corrida
1
2
3
4

Diagrama de
Flujo
INICIO

Pro

Pro >= 6

Aprobado

Resultado
Aprobado
Aprobado

3
Dato Pro
6,75
5,90
4,00
8,80

FIN

Estructura de Seleccin 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

INICIO

Pro

Pro >= 6

#include <stdio.h>
#define VALOR 6
V

F
Aprobado

FIN

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

void main()
{
float Pro;
printf( "Ingrese el promedio del curso: \a \n " );
scanf( "%f", &Pro );
if ( Pro >= VALOR)
printf( " \Aprobado\ \n" );
}

Estructura de Seleccin Doble SI SINO


Pseudocdigo (accin simple)

condicin

accin A

En C:
If ( condicin )
sentencia_1;
else
sentencia_2;

accin B

If ( condicin ) {
sentencia_1;
sentencia_2;
}
else {
sentencia_3;
sentencia_4;
}

SI ( condicion)
acciona
SINO
accionb
Pseudocdigo (accin compuesta)
SI ( condicion ) {
acciona1
.
.
accionan
}
SINO {
accionb1
.
.
accionbn
}

Estructura de Seleccin Doble SI SINO


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

Anlisis:
1
Entrada: Se recibe variable de tipo real que
representa el promedio del alumno. Pre-condicin:
dato real.
Salida: Se debe imprimir si esta aprobado si se
cumple la condicin establecida, con el formato
Aprobado, sino Reprobado
Proceso: Si se cumple la expresin lgica el
promedio es mayor o igual a 6, entonces se
imprimir Aprobado, sino Reprobado
Sea Pro la variable real que representa el promedio
Verificacin:
Corrida
1
2
3
4

3
Dato Pro
6,75
5,90
4,00
8,80

Resultado
Aprobado
Reprobado
Reprobado
Aprobado

Diagrama de
Flujo

INICIO

Pro

Pro >= 6

Aprobado

Reprobado

FIN

Estructura de Seleccin Doble SI SINO


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

Diagrama de
Flujo

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

INICIO

#include <stdio.h>
#define VALOR 6

Pro

Pro >= 6

Aprobado

Reprobado

FIN

Codificacin en Lenguaje C

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

Estructura de Seleccin Doble en Cascada SI-SINO-SI


Pseudocdigo ( accion simple )
SI ( condicion1 )
accion1
SINO
SI ( condicion2 )
accion2
SINO
SI ( condicion3 )
accion3
.
.
.
SINO
acciondefecto

Estructura de Seleccin Doble en Cascada SI-SINO-SI


Pseudocdigo ( accion compuesta)
SI ( condicion1 ) {
acciona1

accionan
}
SINO
SI ( condicion2 ) {
accionb2

accionbn
}
SINO
.
.
SINO {
acciondefecto1
.
acciondefecton
}

En C:
If ( condicin_a )
sentencia_a;
else
if ( condicin_b )
sentencia_b;
else
sentencia_por_defecto;
If ( condicin_a ) {
sentencia_a1;
sentencia_a2;
}
else if ( condicin_b ) {
sentencia_b1;
sentencia_b2;
}
else
sentencia_por_defecto;

Estructura de Seleccin Doble en Cascada SI-SINO-SI


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

Anlisis:

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 seleccin 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

INICIO

num

num <= 0

No pertenece

(num >0) y
(num<100)
V
Si pertenece

FIN

No pertenece

Estructura de Seleccin Doble en Cascada SI-SINO-SI


Verificacin:
3
Corr num Resultado
1
8 No pertenece
2
11 Si pertenece
3
99 Si pertenece
4
1000 No pertenece

Codificacin

/* 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 nmero " );
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" );
}

Estructura de Seleccin 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
Anlisis:
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 seleccin 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 seleccin 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,

Estructura de Seleccin 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

INICIO

p, s, r

p, s, r

s>r

p>r
F

p, r, s

p>s
F

r, p, s

s, p, r

FIN

p>r

s>r
F

r, s, p

s, r, p

3 Verificar !

Estructura de Seleccin Doble en Cascada SI-SINO-SI


/* 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);
}

Codificacin
en C:

Estructura de Seleccin Mltiple SEGN

Estructura de Seleccin Mltiple SEGN

selector

valor1

accin 1

valor2

accin 2

Valor3, valor4

accin 3

valor5

accin 5

valorx

accin x

Estructura de Seleccin Mltiple SEGN


Pseudocdigo ( accin simple )

Pseudocdigo ( accin compuesta)

SEGN ( selector ) {
CASO c1 : accion1
CASO c2 : accion2
CASO c3 : accion3
.
.
.
CASO cn : accionn
DEFECTO : acciondefecto
}

SEGN ( selector ) {
CASO c1 : {
acciona1

accionan
}
CASO c2 : accion2
CASO c3 : accion3
.
.
.
CASO cn : accionn
DEFECTO : acciondefecto
}

Estructura de Seleccin Mltiple SEGN


Cdigo en C:
switch ( selector )
{
case c1: accin_c1;
accin_c11;
break;
case c2: accin_c2;
break;
case c3: accin_c3;
accin_c31
break;
.
.
.
case cn: accin_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;
}

Estructura de Seleccin Mltiple switch


#include <stdio.h>
int main()
{
int num;
printf( "Introduce un nmero " );
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);
}

mltiples casos con if-else


con switch

#include <stdio.h>
int main()
{
int num;
printf( "Introduce un nmero " );
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;
}
}

Estructura de Seleccin Mltiple 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 funcin
| t/5, si Op = 1
| t ** t, si Op = 2
F(t) = | 6*t/2, si Op=3, 4
| 1, para cualquier otro caso
Anlisis:
1
Entrada: Se reciben dos variables enteras, Op representa el tipo de
operacin a realizar, y t el valor que se usa para el calculo de la funcin
Salida: Se deben imprimir el resultado de la funcin f(t), para Op y t
dado.
Proceso: El algoritmo debe comparar el valor de Op, contra las
opciones dadas por la funcin, que son: 1,2,3,4, y cualquier otro caso, y
en cada caso realizar el calculo correspondiente de la funcin para el t
dado.
Para esto usaremos una estructura de seleccin mltiple Segn.

Estructura de Seleccin Mltiple switch


2

Diagrama de
Flujo

INICIO

Op, t

Op
1

cal t/5

3, 4

cal 6*t/2

cal t**t

otro

cal 1

Op, t,
cal
FIN

3 Verificar !

Estructura de Seleccin Mltiple switch


4
/* funcion matematica, El programa obtiene el resultado de una funcion */
#include <stdio.h>
Codificacin
#include <math.h>
void main()
en C:
{
int Op, t;
float cal;
printf( "Ingrese la opcion del calculo de la funcin 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 );
}

Estructura de Seleccin Mltiple SEGN


#include <stdio.h>
#define TRUE 1
int main()
{
int mes, dias, bisiesto; /* bisiesto es TRUE si el ao es bisiesto */
bisiesto = TRUE;
/* suponemos que el ao 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 )
Dado el numero del mes
dias = 29;
Determinar numero de das
else dias = 28;
break;
Se supone ao bisiesto
default:
dias = 30;
break;
}
printf ( Dias del mes son %d\n ,dias);
}

Vous aimerez peut-être aussi