Post on 27-Jun-2015
Introduccion Selectiva simple Selectiva doble Selectiva multiple anidada Ejemplos
Introduccion a los ComputadoresEstructuras algorıtmicas selectivas
CNM-130
Departamento de MatematicasFacultad de Ciencias Exactas y Naturales
Universidad de Antioquia
Copyleft «2010. Reproduccion permitida bajo los
terminos de la licencia de documentacion libre GNU.
Introduccion Selectiva simple Selectiva doble Selectiva multiple anidada Ejemplos
Contenido
1 Introduccion
2 Estructura selectiva simple
3 Estructura selectiva doble
4 Estructura selectiva anidada
5 Ejemplos
Introduccion Selectiva simple Selectiva doble Selectiva multiple anidada Ejemplos
Estructuras de control selectivas
Una sentencia condicional es una instruccion o grupo deinstrucciones que se pueden ejecutar o no en funcion del valor de unacondicion.
Se utilizan cuando en el desarrollo de la solucion de un problema sehace necesario tomar una decision para establecer un proceso.
Los sentencias condicionales constituyen, junto con los bucles, lospilares de la programacion estructurada.
Las estructuras selectivas se utilizan para tomar decisiones logicas.
Por medio de las estructuras selectivas se evalua una condicion ydependiendo del resultado la misma se realiza un proceso.
Introduccion Selectiva simple Selectiva doble Selectiva multiple anidada Ejemplos
Estructuras de control selectivas
Las condiciones evaluadas por medio de las estructuras selectivas seespecifican utilizando expresiones logicas.
Clasificacion de las estructuras de control selectivas:
Si entonces (Estructura selectiva simple)
Si entonces / sino (Estructura selectiva doble)
Si multiple (Estructura selectiva multiple)
Introduccion Selectiva simple Selectiva doble Selectiva multiple anidada Ejemplos
Estructura selectiva simple
La instruccion selectiva determina si una instruccion particular seejecuta o no, segun el cumplimiento de una condicion P.
La representacion de una estructura selectiva se hace con palabras(pseudocodigo) o por medio de una figura geometrica (diagrama deflujo).
Sintaxis en Octave
if P
Instrucciones;
end
donde
P: condicion o conjunto de condiciones aevaluar.
Intrucciones: instrucciones a realizar sila condicion P es verdadera.
Introduccion Selectiva simple Selectiva doble Selectiva multiple anidada Ejemplos
Ejemplos
Ejemplo 2.1
Ralice un algoritmo (implementelo en DFD y Octave) tal que dado como dato lacalificacion de un alumno en un examen, escriba “reprobado” en caso de quedicha nota sea menor a 3.
Solucion
nota.m
% Programa : nota.m
% Descripcion: Dada la calificacion de un
% alumno en un examen, se imprime "reprobado"
% si la calificacion menor a 3.
% Lee la calificacion del alumnoNOTA = input("Ingrese la nota: ");
if NOTA<3.0
disp("Reprobado");
end
Introduccion Selectiva simple Selectiva doble Selectiva multiple anidada Ejemplos
Ejemplo 2.2
Ejemplo 2.2
A un trabajador se le aplica un aumento del 15 % en su salario si este esmenor a 400 mil pesos. Realice un algoritmo (diagrama de flujo,pseudocodigo) que imprima el sueldo del trabajador. Implementelo en DFD.
Solucion
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.
Introduccion Selectiva simple Selectiva doble Selectiva multiple 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 empleadoSUE = input("Ingrese el sueldo: ");
if SUE<400000
AUM = SUE*0.15;
NSUE = SUE + AUM;
fprintf("El nuevo sueldo es %g \n", NSUE);
end
# SUE AUM NSUE
1 145000 21750 1667502 5173203 284215 42632,25 326847,254 180500 27075 207575
Introduccion Selectiva simple Selectiva doble Selectiva multiple anidada Ejemplos
Estructura selectiva doble
La instruccion selectiva doble si entonces / sino permite que el flujodel diagrama se bifurque por dos ramas diferentes dependiendo delcumplimiento de una condicion P.
Si al evaluar la condicion P el resultado es verdadero, entonces seejecuta un conjunto de instrucciones; si el resultado es falso seejecutan otro conjunto de instrucciones.
Sintaxis en Octave
if P
Instrucciones1;
else
Instrucciones2;
end
Introduccion Selectiva simple Selectiva doble Selectiva multiple anidada Ejemplos
Ejemplo 3.1
Ejemplo 3.1
Realice un algoritmo (DFD, octave) tal que dado como dato la calificacionde un alumno en un examen, escriba “aprobado” si su calificacion es mayoro igual a 3 y “reprobado” en caso contrario.
Solucion
nota2.m
% Dada la calificacion de un alumno en
% un examen, se imprime "aprobado"si la
% calificacion mayor o igual a 3 y
% "reprobado" en caso contrario
% Lee la calificacion del alumnoNOTA = input("Ingrese la nota: ");
if NOTA>=3.0
disp("aprobado");
else
disp("reprobado");
end
Introduccion Selectiva simple Selectiva doble Selectiva multiple anidada Ejemplos
Ejemplo 3.2
Ejemplo 3.2
A un trabajador se le aplica un aumento del 15 % en su salario si este esmenor a 400 mil pesos y 8 % en caso contrario. Realice un algoritmo(diagrama de flujo, pseudocodigo) que imprima el sueldo del trabajador.Implementelo en DFD.
Solucion
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.
Introduccion Selectiva simple Selectiva doble Selectiva multiple 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 empleadoSUE = input("Ingrese el sueldo: ");
if SUE<=400000
NSUE = SUE*1.15;
else
NSUE = SUE*1.08;
end
printf("El nuevo sueldo es %f \n", NSUE);
# SUE NSUE
1 200000 2300002 550000 5940003 140000 1610004 400000 460000
Introduccion Selectiva simple Selectiva doble Selectiva multiple 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
Introduccion Selectiva simple Selectiva doble Selectiva multiple anidada Ejemplos
Ejemplo
Sintaxis en Octave
if P1
Operacion11;
elseif P2
Operacion21;
else
Operacion22;
end
Introduccion Selectiva simple Selectiva doble Selectiva multiple anidada Ejemplos
Ejemplo
Sintaxis en Octave
if Condicion1
if Condicion2
Operacion21;else
Operacion22;
end
else
if Condicion3
Operacion31;
end
end
Introduccion Selectiva simple Selectiva doble Selectiva multiple 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.
Solucion
par.m
% Determina si un entero es par y en caso
% de no serlo, determina si es divisible
% por 3
% Lee enteroa = input("Ingrese un entero: ");
if (rem (a, 2) == 0)
printf ("El numero es par \n");elseif (rem (a, 3) == 0)
printf("El numero es impar...y no es divisible por 3 \n");
end
Introduccion Selectiva simple Selectiva doble Selectiva multiple anidada Ejemplos
Ejemplo 4.2
Ejemplo 4.2
Realice un algoritmo (diagrama de flujo, pseudocodigo) que reciba comodatos de entrada tres numeros enteros distintos A, B y C y los escriba demayor a menor. Implementelo en FreeDFD.
Solucion
Datos:
A, B, C: variables de tipo entero.
Variables de salida:
A, B, C: variables de tipo entero; se imprimen en orden descendente.
Introduccion Selectiva simple Selectiva doble Selectiva multiple anidada Ejemplos
comparar.m
%*******************************************
% Descripcion: Dado tres enteros distintos,
% el programa los ordena de mayor a menor.
%*******************************************
% Lee tres enteros distintos
A = input("Ingrese un entero: ");
B = input("Ingrese un entero: ");
C = input("Ingrese un entero: ");
if A>B
if A>C
if B>C
printf(" %d, %d, %d \n", A, B, C);
else
printf(" %d, %d, %d \n", A, C, B);
end
else
printf(" %d, %d, %d \n", C, A, B);
end
else
if B>C
if A>C
printf(" %d, %d, %d \n", B, A, C);
else
printf(" %d, %d, %d \n", B, C, A);
end
else
printf(" %d, %d, %d \n", C, B, A);
end
end
Introduccion Selectiva simple Selectiva doble Selectiva multiple anidada Ejemplos
Ejemplo 5.1
Ejemplo 5.1
Realice un algoritmo (DFD, Octave) que determine si un punto concoordenadas (x, y) se encuentra en el segundo o cuarto cuadrante del planocartesiano. Implementelo en FreeDFD.
Solucion
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
x · y < 0 (3)
Introduccion Selectiva simple Selectiva doble Selectiva multiple 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 yx = input("Ingrese x: ");y = input("Ingrese y: ");
if x*y<0
disp("Sı esta");
else
disp("Sı esta");
end
Introduccion Selectiva simple Selectiva doble Selectiva multiple anidada Ejemplos
Ejemplo 5.2
Ejemplo 5.2
Realice un algoritmo (DFD, Octave) que determine si un punto concoordenadas (x, y) se encuentra en el interior de la circunferencia concentro en el origen y radio 3. Implementelo en FreeDFD.
Solucion
Datos:
x, y: variables de tipo real (coordenadas del punto).
Consideraciones:
La circunferencia con centro en (0, 0) y radio 3 esta dada por el conjunto depuntos (x, y) que satisfacen
x2 + y2 = 9 (4)
Un punto (x, y) se encuentra en el interior de dicha circunferencia si
x2 + y2 < 9 (5)
Introduccion Selectiva simple Selectiva doble Selectiva multiple 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 yx = input("Ingrese x: ");y = input("Ingrese y: ");
expr = x∧2+y∧2;
if expr<9
disp("Sı esta");
else
disp("No esta");
end
Introduccion Selectiva simple Selectiva doble Selectiva multiple anidada Ejemplos
Ejemplo 5.3
Ejemplo 5.3
Realice un algoritmo (DFD, Octave) que calcule, de ser posible, las raicesreales de la ecuacion
ax2 + bx + c = 0, a 6= 0. (6)
Solucion
Consideraciones:
Las soluciones de la ecuacion cuadratica (6) vienen dadas por
x =−b±
√b2 − 4ac
2a(7)
La formula (7) puede conducir a soluciones complejas si
∆ = b2 − 4ac < 0
Variables:
a, b, c: variables de tipo real (coeficientes de la ecuacion) con a 6= 0.
dis: variable de tipo real; almacena el discriminante de la ecuacion.
x1 y x2: variables de tipo real; almacenan las raices de la ecuacion.
Introduccion Selectiva simple Selectiva doble Selectiva multiple anidada Ejemplos
Ejemplo 5.3
raices.m
% Determina las soluciones reales de la
% ecuacion cuadratica ax∧2+bx+c=0
% Lee los coeficientes de la ecuaciona = input("Ingrese a: ");b = input("Ingrese b: ");c = 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 \n", x1, x2);
end
Introduccion Selectiva simple Selectiva doble Selectiva multiple anidada Ejemplos
Ejemplo 5.4
Ejemplo 5.4
Realice un algoritmo (DFD, Octave) tal que dado como dato un numeroentero, determine e imprima si el mismo es postivo, negativo o nulo.
Solucion
signo.m
% Dado como dato un entero,
% determina si el numero es
% postivo, negativo o nulo.
% Lee el numeroNUM = input("Ingrese un numero: ");
if NUM > 0disp("Positivo");
elseif NUM == 0
disp("Nulo");else
disp("Negativo");end
end
Introduccion Selectiva simple Selectiva doble Selectiva multiple anidada Ejemplos
Ejemplo 5.5
Ejemplo 5.5
Realice un algoritmo (DFD, Octave) tal que dado como dato un numeroentero, determine e imprima si el mismo es par, impar o nulo.
Solucion
par2.m
% Dado como dato un numero entero
% N, determina si el numero es par,
% impar o nulo.
% Lee el numeroN = input("Ingrese un numero: ");
if N==0disp("Nulo");
elseif (-1)∧ N > 0
disp("Par");else
disp("Impar");end
endif
Introduccion Selectiva simple Selectiva doble Selectiva multiple anidada Ejemplos
Ejemplo 5.6
Ejemplo 5.6
Realice un algoritmo (DFD, Octave) tal que dado como datos tres numerosenteros, determine si estos estan en orden creciente.
Solucionordenar.m
% Descripcion: Dado tres enteros distintos, determina
% si estan ordenados de menor a mayor
% Lee tres enteros distintos
A = input("Ingrese un entero: ");
B = input("Ingrese un entero: ");
C = input("Ingrese un entero: ");
if A < B
if B <= C
disp("Los numeros estan en orden creciente");
else
disp("Los numeros no estan en orden creciente");
end
else
disp("Los numeros no estan en orden creciente");
end
Introduccion Selectiva simple Selectiva doble Selectiva multiple anidada Ejemplos
Ejemplo 5.7
Ejemplo 5.7
Una tienda norteamericana efectua un descuento a sus clientes dependiendodel monto de la compra (en dolares). El descuento se efectua de acuerdo alos siguientes criterios:
1 monto < $500⇒ no haydescuento
2 $500 < monto ≤ $1000⇒ 5 %de descuento
3 $1000 < monto ≤ $7000⇒
11 % de descuento
4 $7000 < monto ≤ $15000⇒18 % de descuento
5 monto > $15000⇒ 25 % dedescuento
Realice un algoritmo (diagrama de flujo, pseudocodigo) tal que dado elmonto de la compra de un cliente, determine lo que el mismo debe pagar.
Solucion
Datos:
COMPRA: variables de tipo real; representa el monto de la compra.
PAGO: variables de tipo real; representa el valor a pagar.
Introduccion Selectiva simple Selectiva doble Selectiva multiple 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);
Introduccion Selectiva simple Selectiva doble Selectiva multiple anidada Ejemplos
Ejemplo 5.8
Ejemplo 5.8
En un paıs los impuestos que debe pagar una persona al comprar unartıculo se calculan de la siguiente manera: los primeros $20 no causanimpuesto, los siguientes $20 tienen el 30 % de impuesto y el resto el 40 % deimpuesto, pero si el costo del producto es mayor a $500, entonces en lugardel 40 % se cobra el 50 %.
Realice un algoritmo (DFD, Octave) que lea el costo basico de unartıculo y calcule su precio total (precio total = precio basico + impuesto).
Solucion
Variables:
PREBAS: variables de tipo real; almacena el precio basico del producto.
IMP: variables de tipo real; almacena el impuesto del producto que seingresa.
PRETOT: variables de tipo real; almacena el costo total del producto(costo basico mas impuesto).
Introduccion Selectiva simple Selectiva doble Selectiva multiple anidada Ejemplos
impuestos.m
% Dado el costo de un artıculo,
% aplica un descuento.
% Lee el precio basicoPREBAS = input("Ingrese precio basico: ");
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);
Introduccion Selectiva simple Selectiva doble Selectiva multiple anidada Ejemplos
Ejemplo 5.9
Ejemplo 5.9
Cierta universidad para liquidar el pago de matrıcula de un estudiante exige lossiguientes datos:
1 Numero de inscripcion
2 Nombres
3 Patrimonio
4 Estrato social
La universidad cobra un valor constante para cada estudiante de $50000. Si elpatrimonio es mayor a dos millones y el estrato es superior a 3, se le incrementaun porcentaje dle 3 % sobre el patrimonio. Realice un algoritmo (diagrama deflujo, pseudocodigo) que muestre:
Numero deinscripcion
Nombres Pago de matrıcula
Solucion
Variables:
NI: variable de tipo entera, representa el numero de inscripcion.
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.
PAGMAT: variable de tipo real, almacena el pago de matrıcula.
Introduccion Selectiva simple Selectiva doble Selectiva multiple 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 numero de inscripcion: ");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("\nNumero de inscripcion: %g \n", NI);printf("Nombre: %s \n", NOM);printf("Pago de matrıcula: %g \n", PAGMAT);
Introduccion Selectiva simple Selectiva doble Selectiva multiple anidada Ejemplos
Ejemplo 5.10
Ejemplo 5.10
Un almacen efectua una promocion en la cual se hace un descuento sobre elvalor de la compra total, segun el color de la bolita que el cliente saque alpagar en la caja. Si la bolita es blanca no se le hara descuento alguno, si esverde se le hara un 10 % de descuento, si es amarilla un 25 %, si es azul un50 % y si es roja un 100 %.
Realice un algoritmo (DFD, Octave) que determine la cantidad final que uncliente debera pagar por su compra. Se sabe que solo hay bolitas de loscolores mencionados.
Solucion
Variables :
VCOMP: variable de tipo real, almacena el valor de la compra.
COL: variable de tipo cadena de caracteres, almacena el color de labolita.
VPAG: variable de tipo real, almacena valor a pagar.
PDES: variable de tipo entera, almacena el porcentaje de descuento.
Introduccion Selectiva simple Selectiva doble Selectiva multiple 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);
Introduccion Selectiva simple Selectiva doble Selectiva multiple 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 deigual peso y una diferente. Realice un algoritmo (DFD, Octave) que recibacomo datos los pesos de las cuatro esferas y determine cual es la esferadiferente y si es de mayor o menor peso.
Solucion
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
Introduccion Selectiva simple Selectiva doble Selectiva multiple anidada Ejemplos
Introduccion Selectiva simple Selectiva doble Selectiva multiple 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 y es de mayor peso");
else
disp("La esfera B es la diferente y es de menor peso");
end
else
if PESOA > PESOB
disp("La esfera A es la diferente y es de mayor peso");
else
disp("La esfera A es la diferente y es de menor peso");
end
end
end
endif
Introduccion Selectiva simple Selectiva doble Selectiva multiple anidada Ejemplos
Referencias
O. CairoMetodologıa de la programacionSegunda edicion. Alfaomega Grupo Editor, S.A., 2005
M.A. CriadoProgramacion en lenguajes estructuradosAlfaomega Grupo Editor, S.A. de C.V. Primera Edicion, 2006
J.W. EatonGNU Octave: A high-level interactive language for numericalcomputationsNetwork Theory Ltd., 2002