Introducci´ on on
Selectiva Selectiv a simple
Selectiva Selectiv a doble
Selectiva Selectiv a m´ ultiple anidada ultiple
Introducci´ on a los Computadores on Estruc Est ructur turas as algo algorr´ıtm ıtmicas icas sel select ectivas ivas
CNM-130 Departamento de Matem´ aticas aticas Facultad de Ciencias Exactas y Naturales Universidad de Antioquia Copyleft 2010. 2010. Reproducci´ Reproducci´ on permitida bajo los on t´ erminos erminos de la licencia de documentaci´ on on libre GNU
.
Ejemplos
Introducci´ on on
Selectiva Selectiv a simple
Selectiva Selectiv a doble
Contenido
1
Introducci´ on on
2
Estructura selectiva simple
3
Estructura selectiva doble
4
Estructura selectiva anidada
5
Ejemplos
Selectiva Selectiv a m´ ultiple anidada ultiple
Ejemplos
Introducci´ on on
Selectiva Selectiv a simple
Selectiva Selectiv a doble
Contenido
1
Introducci´ on on
2
Estructura selectiva simple
3
Estructura selectiva doble
4
Estructura selectiva anidada
5
Ejemplos
Selectiva Selectiv a m´ ultiple anidada ultiple
Ejemplos
Introducci´ on on
Selectiva Selectiv a simple
Selectiva Selectiv a doble
Selectiva Selectiv a m´ ultiple anidada ultiple
Ejemplos
Estructuras de control selectivas
Una sentencia condicional es una instrucci´ on on o grupo de instrucciones que se pueden ejecutar o no en funci´ on on del valor de una condici´ on. on. Se utilizan cuando en el desarrollo de la soluci´on on de un problema se on para establecer un proceso. hace necesario tomar una decisi´ Los sentencias condicionales constituyen, junto con los bucles, los on on estructurada. pilares de la programaci´ Las estructuras selectivas se utilizan para tomar decisiones l´ ogicas. ogicas. Por medio de las estructuras selectivas se eval´ ua ua una condici´ on on y dependiendo del resultado la misma se realiza un proceso.
Introducci´ on
Selectiva simple
Selectiva doble
Selectiva m´ ultiple anidada
Ejemplos
Estructuras de control selectivas
Las condiciones evaluadas por medio de las estructuras selectivas se especifican utilizando expresiones l´ ogicas. Clasificaci´ on de las estructuras de control selectivas: Si entonces (Estructura selectiva simple) Si entonces / sino (Estructura selectiva doble) Si m´ ultiple (Estructura selectiva m´ ultiple)
Introducci´ on
Selectiva simple
Selectiva doble
Selectiva m´ ultiple anidada
Ejemplos
Estructura selectiva simple La instrucci´ on selectiva determina si una instrucci´ on particular se ejecuta o no, seg´ un el cumplimiento de una condici´on P. La representaci´ on de una estructura selectiva se hace con palabras (pseudoc´odigo) o por medio de una figura geom´ etrica (diagrama de flujo). Sintaxis en Octave if P Instrucciones; end
donde P: condici´ on o conjunto de condiciones a
evaluar. Intrucciones: instrucciones a realizar si la condici´ on P es verdadera.
Introducci´ on
Selectiva simple
Selectiva doble
Selectiva m´ ultiple anidada
Ejemplos
Ejemplos Ejemplo 2.1 Ralice un algoritmo (implem´ entelo en DFD y Octave) tal que dado como dato la calificaci´ on de un alumno en un examen, escriba “reprobado” en caso de que dicha nota sea menor a 3. Soluci´ on
nota.m
% % % %
Programa : nota.m Descripcion: Dada la calificaci´ o n de un alumno en un examen, se imprime "reprobado" si la calificaci´ o n menor a 3.
% Lee la calificaci´ o n del alumno NOTA = input("Ingrese la nota: "); if NOTA<3.0 disp("Reprobado"); end
Introducci´ on
Selectiva simple
Selectiva doble
Selectiva m´ ultiple anidada
Ejemplos
Ejemplo 2.2 Ejemplo 2.2 A un trabajador se le aplica un aumento del 15 % en su salario si ´este es menor a 400 mil pesos. Realice un algoritmo (diagrama de flujo, pseudoc´ odigo) que imprima el sueldo del trabajador. Implem´ entelo en DFD. Soluci´ on
Datos: SUE:
variable de tipo real que representa el salario del trabajador.
Variables de salida: AUM:
variable de tipo real; almacena el aumento del trabajador.
NSUE:
variable de tipo real; almacena el nuevo sueldo del trabajador.
Introducci´ on
Selectiva simple
Selectiva doble
Selectiva m´ ultiple anidada
Ejemplos
Ejemplo 2.2 sueldo.m
% Dado como dato el sueldo de un trabajador, % el programa aplica un aumento del 15 % si % el sueldo es inferior a 400 mil pesos. % Lee el sueldo del empleado SUE = input("Ingrese el sueldo: "); if SUE<400000 AUM = SUE*0.15; NSUE = SUE + AUM; fprintf("El nuevo sueldo es %g end
# 1 2 3 4
SUE 145000 517320 284215 180500
\n",
AUM 21750
NSUE 166750
42632 25 27075
326847 25 207575
,
,
NSUE);
Introducci´ on
Selectiva simple
Selectiva doble
Selectiva m´ ultiple anidada
Ejemplos
Estructura selectiva doble La instrucci´ on selectiva doble si entonces / sino permite que el flujo del diagrama se bifurque por dos ramas diferentes dependiendo del cumplimiento de una condici´on P. Si al evaluar la condici´ on P el resultado es verdadero, entonces se ejecuta un conjunto de instrucciones; si el resultado es falso se ejecutan otro conjunto de instrucciones.
Sintaxis en Octave if P Instrucciones1; else Instrucciones2; end
Introducci´ on
Selectiva simple
Selectiva doble
Selectiva m´ ultiple anidada
Ejemplos
Ejemplo 3.1 Ejemplo 3.1 Realice un algoritmo (DFD, octave) tal que dado como dato la calificaci´ on de un alumno en un examen, escriba “aprobado” si su calificaci´ on es mayor o igual a 3 y “reprobado” en caso contrario. Soluci´ on nota2.m
% % % %
Dada la calificaci´ o n de un alumno en un examen, se imprime "aprobado"si la calificaci´ o n mayor o igual a 3 y "reprobado" en caso contrario
% Lee la calificaci´ o n del alumno NOTA = input("Ingrese la nota: "); if NOTA>=3.0 disp("aprobado"); else disp("reprobado"); end
Introducci´ on
Selectiva simple
Selectiva doble
Selectiva m´ ultiple anidada
Ejemplos
Ejemplo 3.2
Ejemplo 3.2 A un trabajador se le aplica un aumento del 15 % en su salario si ´este es menor a 400 mil pesos y 8 % en caso contrario. Realice un algoritmo (diagrama de flujo, pseudoc´ odigo) que imprima el sueldo del trabajador. Implem´ entelo en DFD. Soluci´ on
Datos: SUE:
variable de tipo real que representa el salario del trabajador.
Variables de salida: NSUE:
variable de tipo real; almacena el nuevo sueldo del trabajador.
Introducci´ on
Selectiva simple
Selectiva doble
Selectiva m´ ultiple anidada
Ejemplos
Ejemplo 3.2 sueldo2.m
% % % %
Dado como dato el sueldo de un trabajador, el programa aplica un aumento del 15 % si el sueldo es inferior a 400 mil pesos y en caso contrario el aumento es del 8 %.
% Lee el sueldo del empleado SUE = input("Ingrese el sueldo: "); if SUE<=400000 NSUE = SUE*1.15; else NSUE = SUE*1.08; end printf("El nuevo sueldo es %f
# 1 2 3 4
SUE 200000 550000 140000 400000
\n",
NSUE 230000 594000 161000 460000
NSUE);
Introducci´ on
Selectiva simple
Selectiva doble
Selectiva m´ ultiple anidada
Ejemplos
Estructura selectiva anidada
Son estructuras selectivas que contienen a otras estructuras selectivas
Sintaxis en Octave if Condicion1 if Condicion2 Operacion21; else Operacion22; end end
Introducci´ on
Selectiva simple
Selectiva doble
Selectiva m´ ultiple anidada
Ejemplos
Ejemplo
Sintaxis en Octave if P1 Operacion11; elseif P2 Operacion21; else Operacion22; end
Introducci´ on
Selectiva simple
Selectiva doble
Selectiva m´ ultiple anidada
Ejemplos
Ejemplo
Sintaxis en Octave if Condicion1 if Condicion2 Operacion21; else Operacion22; end else if Condicion3 Operacion31; end end
Introducci´ on
Selectiva simple
Selectiva doble
Selectiva m´ ultiple anidada
Ejemplos
Ejemplo 4.1 Realice un algoritmo (DFD, octave) tal que dado como dato un entero, determine si es par y en caso de no serlo, determine si es divisble por 3. Soluci´ on par.m
% Determina si un entero es par y en caso % de no serlo, determina si es divisible % por 3 % Lee entero a = input("Ingrese un entero: "); if (rem (a, 2) == 0) printf ("El n´ u mero es par elseif (rem (a, 3) == 0)
\n");
printf("El n´ umero es impar... y no es divisible por 3 end
\n");
Introducci´ on
Selectiva simple
Selectiva doble
Selectiva m´ ultiple anidada
Ejemplos
Ejemplo 4.2
Ejemplo 4.2 Realice un algoritmo (diagrama de flujo, pseudoc´ odigo) que reciba como datos de entrada tres n´ umeros enteros distintos A, B y C y los escriba de mayor a menor. Implem´entelo en FreeDFD.
Soluci´ on
Datos: A, B, C:
variables de tipo entero.
Variables de salida: A, B, C:
variables de tipo entero; se imprimen en orden descendente.
Introducci´ on
Selectiva simple
Selectiva doble
Selectiva m´ ultiple anidada
Ejemplos
comparar.m
%******************************************* % Descripci´ on: Dado tres enteros distintos, % el programa los ordena de mayor a menor. %******************************************* % A B C
Lee tres enteros = input("Ingrese = input("Ingrese = input("Ingrese
distintos un entero: "); un entero: "); un entero: ");
if A>B if A>C if B>C printf(" %d, %d, %d else printf(" %d, %d, %d end else printf(" %d, %d, %d end else if B>C if A>C printf(" %d, %d, %d else printf(" %d, %d, %d end else printf(" %d, %d, %d end end
\n", A, B, C); \n", A, C, B); \n", C, A, B);
\n", B, A, C); \n", B, C, A); \n", C, B, A);
Introducci´ on
Selectiva simple
Selectiva doble
Selectiva m´ ultiple anidada
Ejemplos
Ejemplo 5.1 Ejemplo 5.1 Realice un algoritmo (DFD, Octave) que determine si un punto con coordenadas (x, y ) se encuentra en el segundo o cuarto cuadrante del plano cartesiano. Implem´entelo en FreeDFD. Soluci´ on Datos: x, y: variables de tipo real (coordenadas del punto).
Consideraciones: Un punto (x, y) se encuentra en el segundo cuadrante si x<0
y
y>0
(1)
Un punto (x, y) se encuentra en el cuarto cuadrante si x>0
y
y<0
(2)
De (1) y (2), un punto (x, y) se encuentra en el segundo o cuarto cuadrante si <0
(3)
Introducci´ on
Selectiva simple
Selectiva doble
Selectiva m´ ultiple anidada
Ejemplos
Ejemplo 5.1
cuadrantes.m
% Determina si un punto de coordenadas % (x,y) se encuentra en el segundo o % cuarto cuadrante % Lee x e y x = input("Ingrese x: "); y = input("Ingrese y: "); if x*y<0 disp("S´ ı est´ a"); else disp("S´ ı est´ a"); end
Introducci´ on
Selectiva simple
Selectiva doble
Selectiva m´ ultiple anidada
Ejemplos
Ejemplo 5.2 Ejemplo 5.2 Realice un algoritmo (DFD, Octave) que determine si un punto con coordenadas (x, y ) se encuentra en el interior de la circunferencia con centro en el origen y radio 3. Implem´entelo en FreeDFD. Soluci´ on Datos: x, y: variables de tipo real (coordenadas del punto).
Consideraciones: La circunferencia con centro en (0, 0) y radio 3 est´ a dada por el conjunto de puntos (x, y) que satisfacen x2 + y 2 = 9
(4)
Un punto (x, y) se encuentra en el interior de dicha circunferencia si x2 + y 2 < 9
(5)
Introducci´ on
Selectiva simple
Selectiva doble
Selectiva m´ ultiple anidada
Ejemplos
Ejemplo 5.2 cuadrantes.m
% % % %
Determina si un punto de coordenadas (x,y) se encuentra en el interior de una circunferencia con centro en el origen y radio 3
% Lee x e y x = input("Ingrese x: "); y = input("Ingrese y: "); expr = x∧2+y∧2; if expr<9 disp("S´ ı est´ a"); else disp("No est´ a"); end
Introducci´ on
Selectiva simple
Selectiva doble
Selectiva m´ ultiple anidada
Ejemplos
Ejemplo 5.3 Ejemplo 5.3 Realice un algoritmo (DFD, Octave) que calcule, de ser posible, las raices reales de la ecuaci´ on 2
ax + bx + c = 0,
a = 0.
(6)
Soluci´ on Consideraciones: Las soluciones de la ecuaci´ on cuadr´ atica (6) vienen dadas por
√ − b ± b − 4ac x= 2
(7)
2a
La f´ ormula (7) puede conducir a soluciones complejas si ∆ = b2
− 4ac < 0
Variables: a, b, c: variables de tipo real (coeficientes de la ecuaci´ on) con a = 0.
dis: variable de tipo real; almacena el discriminante de la ecuaci´ on. x1 y x2: variables de tipo real; almacenan las raices de la ecuaci´ on.
Introducci´ on
Selectiva simple
Selectiva doble
Selectiva m´ ultiple anidada
Ejemplos
Ejemplo 5.3
raices.m
% Determina las soluciones reales de la % ecuaci´ on cuadr´ atica ax∧2+bx+c=0 % a b c
Lee los coeficientes de la ecuaci´ on = input("Ingrese a: "); = input("Ingrese b: "); = input("Ingrese c: ");
dis = b∧2-4*a*c; if dis>=0 x1 = (-b+sqrt(dis))/(2*a); x2 = (-b-sqrt(dis))/(2*a); printf("Ra´ ıces reales: %g y %g end
\n", x1,
x2);
Introducci´ on
Selectiva simple
Selectiva doble
Selectiva m´ ultiple anidada
Ejemplos
Ejemplo 5.4 Ejemplo 5.4 Realice un algoritmo (DFD, Octave) tal que dado como dato un n´ umero entero, determine e imprima si el mismo es postivo, negativo o nulo. Soluci´ on signo.m
% Dado como dato un entero, % determina si el n´ umero es % postivo, negativo o nulo. % Lee el n´ umero NUM = input("Ingrese un n´ umero: "); if NUM > 0 disp("Positivo"); else if NUM == 0 disp("Nulo"); else disp("Negativo"); end end
Introducci´ on
Selectiva simple
Selectiva doble
Selectiva m´ ultiple anidada
Ejemplos
Ejemplo 5.5 Ejemplo 5.5 Realice un algoritmo (DFD, Octave) tal que dado como dato un n´ umero entero, determine e imprima si el mismo es par, impar o nulo. Soluci´ on par2.m
% Dado como dato un n´ umero entero % N, determina si el n´ u mero es par, % impar o nulo. % Lee el n´ umero N = input("Ingrese un n´ umero: "); if N==0 disp("Nulo"); else if (-1)∧ N > 0 disp("Par"); else disp("Impar"); end endif
Introducci´ on
Selectiva simple
Selectiva doble
Selectiva m´ ultiple anidada
Ejemplos
Ejemplo 5.6 Ejemplo 5.6 Realice un algoritmo (DFD, Octave) tal que dado como datos tres n´ umeros enteros, determine si ´estos est´ an en orden creciente. Soluci´ on ordenar.m
% Descripci´ on: Dado tres enteros distintos, determina % si est´ an ordenados de menor a mayor % A B C
Lee tres enteros = input("Ingrese = input("Ingrese = input("Ingrese
if A
distintos un entero: "); un entero: "); un entero: ");
B
<
if B < = C disp("Los n´ umeros est´ an en orden creciente"); else disp("Los n´ umeros no est´ an en orden creciente"); end else disp("Los n´ umeros no est´ an en orden creciente"); end
Introducci´ on
Selectiva simple
Selectiva doble
Selectiva m´ ultiple anidada
Ejemplos
Ejemplo 5.7 Ejemplo 5.7 Una tienda norteamericana efect´ ua un descuento a sus clientes dependiendo del monto de la compra (en d´ olares). El descuento se efect´ ua de acuerdo a los siguientes criterios: 1
2
3
monto < $500 ⇒ no hay
11 % de descuento
descuento
4
$500 < monto ≤ $1000 ⇒ 5 % de descuento
$7000 < monto ≤ $15000 ⇒ 18 % de descuento
5
monto > $15000 ⇒ 25 % de
$1000 < monto ≤ $7000 ⇒
descuento
Realice un algoritmo (diagrama de flujo, pseudoc´ odigo) tal que dado el monto de la compra de un cliente, determine lo que el mismo debe pagar. Soluci´ on
Datos: COMPRA : PAGO:
variables de tipo real; representa el monto de la compra.
variables de tipo real; representa el valor a pagar.
Introducci´ on
Selectiva simple
Selectiva doble
Selectiva m´ ultiple anidada
Ejemplos
Ejemplo 5.7 descuentos.m
COMPRA = input("Valor de la compra: "); if COMPRA < 500 PAGO = COMPRA; else if COMPRA < 1000; PAGO = 0.95*COMPRA; else if COMPRA <= 7000; PAGO = 0.89*COMPRA; else if COMPRA <= 15000; PAGO = 0.82*COMPRA; else PAGO = 0.75*COMPRA; end end end endif printf("Cantidad a pagar: %g
\n",
PAGO);
Introducci´ on
Selectiva simple
Selectiva doble
Selectiva m´ ultiple anidada
Ejemplos
Ejemplo 5.8 Ejemplo 5.8 En un pa´ıs los impuestos que debe pagar una persona al comprar un art´ıculo se calculan de la siguiente manera: los primeros $20 no causan impuesto, los siguientes $20 tienen el 30 % de impuesto y el resto el 40 % de impuesto, pero si el costo del producto es mayor a $500, entonces en lugar del 40 % se cobra el 50 %. Realice un algoritmo (DFD, Octave) que lea el costo b´ asico de un art´ıculo y calcule su precio total (precio total = precio b´ asico + impuesto). Soluci´ on
Variables: PREBAS :
variables de tipo real; almacena el precio b´asico del producto.
IMP:
variables de tipo real; almacena el impuesto del producto que se ingresa. PRETOT :
variables de tipo real; almacena el costo total del producto (costo b´ asico m´ as impuesto).
Introducci´ on
Selectiva simple
Selectiva doble
Selectiva m´ ultiple anidada
Ejemplos
impuestos.m
% Dado el costo de un art´ ıculo, % aplica un descuento. % Lee el precio b´ asico PREBAS = input("Ingrese precio b´ asico: "); if PREBAS > 500 IMP = 20*0.30 + (PREBAS-40)*0.5; else if PREBAS > 40 IMP = 20*0.30 + (PREBAS-40)*0.4; else if PREBAS > 20 IMP = (PREBAS-20)*0.3; else IMP = 0; end end end PRETOT = PREBAS + IMP; printf("Precio total: %g
\n",
PRETOT);
Introducci´ on
Selectiva simple
Selectiva doble
Selectiva m´ ultiple anidada
Ejemplos
Ejemplo 5.9 Ejemplo 5.9 Cierta universidad para liquidar el pago de matr´ıcula de un estudiante exige los siguientes datos: 1
N´ umero de inscripci´ on
3
Patrimonio
2
Nombres
4
Estrato social
La universidad cobra un valor constante para cada estudiante de $50000. Si el patrimonio es mayor a dos millones y el estrato es superior a 3, se le incrementa un porcentaje dle 3 % sobre el patrimonio. Realice un algoritmo (diagrama de flujo, pseudoc´ odigo) que muestre: N´ umero de inscripci´ on
Nombres
Pago de matr´ıcula
Soluci´ on
Variables: NI: variable de tipo entera, representa el n´ umero de inscripci´ on. NOM: variable de tipo cadena de caracteres, representa el nombre. PAT: variable de tipo real, representa el patrimonio. EST: variable de tipo entera, representa el estrato.
ariable de
real, almacena el
de
´ıcula.
Introducci´ on
Selectiva simple
Selectiva doble
Selectiva m´ ultiple anidada
Ejemplos
Ejemplo 5.9
pago matricula.m
% Calcula el pago de matr´ ı cula de un % estudiante dependiendo de su estrato % social y su patrimonio. NI = input("Ingrese n´ umero de inscripci´ o n: "); NOM = input("Ingrese nombres: ", "s"); PAT = input("Ingrese patrimonio: "); EST = input("Ingrese estrato social: "); PAGMAT = 50000; if (PAT> 2000000) & EST>3 PAGMAT = PAGMAT + 0.03; endif
\
\
printf(" nN´ umero de inscripci´ on: %g n", NI); printf("Nombre: %s n", NOM); printf("Pago de matr´ ıcula: %g n", PAGMAT);
\
\
Introducci´ on
Selectiva simple
Selectiva doble
Selectiva m´ ultiple anidada
Ejemplos
Ejemplo 5.10 Ejemplo 5.10 Un almac´en efect´ ua una promoci´ on en la cual se hace un descuento sobre el valor de la compra total, seg´ un el color de la bolita que el cliente saque al pagar en la caja. Si la bolita es blanca no se le har´ a descuento alguno, si es verde se le har´ a un 10 % de descuento, si es amarilla un 25 %, si es azul un 50 % y si es roja un 100 %. Realice un algoritmo (DFD, Octave) que determine la cantidad final que un cliente deber´ a pagar por su compra. Se sabe que s´ olo hay bolitas de los colores mencionados. Soluci´ on
Variables : VCOMP:
variable de tipo real, almacena el valor de la compra.
COL:
variable de tipo cadena de caracteres, almacena el color de la bolita. VPAG:
variable de tipo real, almacena valor a pagar.
PDES:
variable de tipo entera, almacena el porcentaje de descuento.
Introducci´ on
Selectiva simple
Selectiva doble
Selectiva m´ ultiple anidada
Ejemplos
balotas.m
VCOMP = input("Ingrese valor de la compra: "); COL = input("Ingrese color obtenido: ", "s"); if strcmp(COL,"BLANCO") PDES = 0; else if strcmp(COL,"VERDE") PDES = 10; else if strcmp(COL, "AMARILLO") PDES = 25; else if strcmp(COL,"AZUL") PDES = 50; else PDES = 100; end end end end VPAG = VCOMP - PDES*VCOMP/100; printf("El cliente debe pagar: %g
\n",
VPAG);
Introducci´ on
Selectiva simple
Selectiva doble
Selectiva m´ ultiple anidada
Ejemplos
Ejemplo 5.11
Ejemplo 5.11 Se tienen cuatro esferas A, B, C y D de las cuales se sabe que tres son de igual peso y una diferente. Realice un algoritmo (DFD, Octave) que reciba como datos los pesos de las cuatro esferas y determine cu´ al es la esfera diferente y si es de mayor o menor peso.
Soluci´ on
Variables : PESOA:
variable de tipo real, almacena el peso de la esfera A
PESOB:
variable de tipo real, almacena el peso de la esfera B
PESOC:
variable de tipo real, almacena el peso de la esfera C
PESOD:
variable de tipo real, almacena el peso de la esfera D
Introducci´ on
Selectiva simple
Selectiva doble
Selectiva m´ ultiple anidada
Ejemplos
Introducci´ on
Selectiva simple
Selectiva doble
Selectiva m´ ultiple anidada
Ejemplos
esferas.m
PESOA = input("Ingrese peso esfera A: "); PESOB = input("Ingrese peso esfera B: "); PESOC = input("Ingrese peso esfera C: "); PESOD = input("Ingrese peso esfera D: "); if (PESOA == PESOB) & (PESOA == PESOC) if PESOD > PESOA disp("La esfera D es la diferente y es de mayor peso"); else disp("La esfera D es la diferente y es de menor peso"); end else if (PESOA == PESOB) & (PESOA == PESOD) if PESOC > PESOA disp("La esfera C es la diferente y es de mayor peso"); else disp("La esfera C es la diferente y es de menor peso"); end else if (PESOA == PESOC) & (PESOA == PESOD) if PESOB > PESOA disp("La esfera B es la diferente else disp("La esfera B es la diferente end else if PESOA > PESOB disp("La esfera A es la diferente else disp("La esfera A es la diferente end end end
y es de mayor peso"); y es de menor peso");
y es de mayor peso"); y es de menor peso");