Está en la página 1de 39

Introducción Selectiva simple Selectiva doble Selectiva múltiple anidada Ejemplos

Introducción a los Computadores


Estructuras algorı́tmicas selectivas

CNM-130

Departamento de Matemáticas
Facultad de Ciencias Exactas y Naturales
Universidad de Antioquia

Copyleft« 2010. Reproducción permitida bajo los


términos de la licencia de documentación libre GNU.
Introducción Selectiva simple Selectiva doble Selectiva múltiple anidada Ejemplos

Contenido

1 Introducción

2 Estructura selectiva simple

3 Estructura selectiva doble

4 Estructura selectiva anidada

5 Ejemplos
Introducción Selectiva simple Selectiva doble Selectiva múltiple anidada Ejemplos

Estructuras de control selectivas

Una sentencia condicional es una instrucción o grupo de


instrucciones que se pueden ejecutar o no en función del valor de una
condición.

Se utilizan cuando en el desarrollo de la solución de un problema se


hace necesario tomar una decisión para establecer un proceso.

Los sentencias condicionales constituyen, junto con los bucles, los


pilares de la programación estructurada.

Las estructuras selectivas se utilizan para tomar decisiones lógicas.

Por medio de las estructuras selectivas se evalúa una condición y


dependiendo del resultado la misma se realiza un proceso.
Introducción Selectiva simple Selectiva doble Selectiva múltiple anidada Ejemplos

Estructuras de control selectivas

Las condiciones evaluadas por medio de las estructuras selectivas se


especifican utilizando expresiones lógicas.

Clasificación de las estructuras de control selectivas:

Si entonces (Estructura selectiva simple)

Si entonces / sino (Estructura selectiva doble)

Si múltiple (Estructura selectiva múltiple)


Introducción Selectiva simple Selectiva doble Selectiva múltiple anidada Ejemplos

Estructura selectiva simple

La instrucción selectiva determina si una instrucción particular se


ejecuta o no, según el cumplimiento de una condición P.

La representación de una estructura selectiva se hace con palabras


(pseudocódigo) o por medio de una figura geométrica (diagrama de
flujo).

Sintaxis en Octave
if P
Instrucciones;
end

donde
P: condición o conjunto de condiciones a
evaluar.
Intrucciones: instrucciones a realizar si
la condición P es verdadera.
Introducción Selectiva simple Selectiva doble Selectiva múltiple anidada Ejemplos

Ejemplos

Ejemplo 2.1

Ralice un algoritmo (impleméntelo en DFD y Octave) tal que dado como dato la
calificación de un alumno en un examen, escriba “reprobado” en caso de que
dicha nota sea menor a 3.

Solución

nota.m

% Programa : nota.m
% Descripcion: Dada la calificación de un
% alumno en un examen, se imprime "reprobado"
% si la calificación menor a 3.

% Lee la calificación del alumno


NOTA = input("Ingrese la nota: ");
if NOTA<3.0
disp("Reprobado");
end
Introducción Selectiva simple Selectiva doble Selectiva múltiple anidada Ejemplos

Ejemplo 2.2

Ejemplo 2.2

A un trabajador se le aplica un aumento del 15 % en su salario si éste es


menor a 400 mil pesos. Realice un algoritmo (diagrama de flujo,
pseudocódigo) que imprima el sueldo del trabajador. Impleméntelo en DFD.

Solución

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ón Selectiva simple Selectiva doble Selectiva múltiple 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 \n", NSUE);
end

# SUE AUM NSUE


1 145000 21750 166750
2 517320
3 284215 42632,25 326847,25
4 180500 27075 207575
Introducción Selectiva simple Selectiva doble Selectiva múltiple anidada Ejemplos

Estructura selectiva doble

La instrucción selectiva doble si entonces / sino permite que el flujo


del diagrama se bifurque por dos ramas diferentes dependiendo del
cumplimiento de una condición P.

Si al evaluar la condición 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ón Selectiva simple Selectiva doble Selectiva múltiple anidada Ejemplos

Ejemplo 3.1

Ejemplo 3.1

Realice un algoritmo (DFD, octave) tal que dado como dato la calificación
de un alumno en un examen, escriba “aprobado” si su calificación es mayor
o igual a 3 y “reprobado” en caso contrario.

Solución
nota2.m

% Dada la calificación de un alumno en


% un examen, se imprime "aprobado"si la
% calificación mayor o igual a 3 y
% "reprobado" en caso contrario

% Lee la calificación del alumno


NOTA = input("Ingrese la nota: ");
if NOTA>=3.0
disp("aprobado");
else
disp("reprobado");
end
Introducción Selectiva simple Selectiva doble Selectiva múltiple anidada Ejemplos

Ejemplo 3.2

Ejemplo 3.2

A un trabajador se le aplica un aumento del 15 % en su salario si éste es


menor a 400 mil pesos y 8 % en caso contrario. Realice un algoritmo
(diagrama de flujo, pseudocódigo) que imprima el sueldo del trabajador.
Impleméntelo en DFD.

Solución

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ón Selectiva simple Selectiva doble Selectiva múltiple 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 \n", NSUE);

# SUE NSUE
1 200000 230000
2 550000 594000
3 140000 161000
4 400000 460000
Introducción Selectiva simple Selectiva doble Selectiva múltiple 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ón Selectiva simple Selectiva doble Selectiva múltiple anidada Ejemplos

Ejemplo

Sintaxis en Octave
if P1
Operacion11;
elseif P2
Operacion21;
else
Operacion22;
end
Introducción Selectiva simple Selectiva doble Selectiva múltiple anidada Ejemplos

Ejemplo

Sintaxis en Octave
if Condicion1
if Condicion2
Operacion21;
else
Operacion22;
end
else
if Condicion3
Operacion31;
end
end
Introducción Selectiva simple Selectiva doble Selectiva múltiple 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ón

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úmero es par \n");
elseif (rem (a, 3) == 0)
printf("El número es impar...
y no es divisible por 3 \n");
end
Introducción Selectiva simple Selectiva doble Selectiva múltiple anidada Ejemplos

Ejemplo 4.2

Ejemplo 4.2

Realice un algoritmo (diagrama de flujo, pseudocódigo) que reciba como


datos de entrada tres números enteros distintos A, B y C y los escriba de
mayor a menor. Impleméntelo en FreeDFD.

Solución

Datos:

A, B, C: variables de tipo entero.

Variables de salida:

A, B, C: variables de tipo entero; se imprimen en orden descendente.


Introducción Selectiva simple Selectiva doble Selectiva múltiple anidada Ejemplos

comparar.m

%*******************************************
% Descripción: 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
Introducción Selectiva simple Selectiva doble Selectiva múltiple 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éntelo en FreeDFD.

Solución
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)
Introducción Selectiva simple Selectiva doble Selectiva múltiple 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á");
else
disp("Sı́ está");
end
Introducción Selectiva simple Selectiva doble Selectiva múltiple 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éntelo en FreeDFD.

Solución
Datos:

x, y: variables de tipo real (coordenadas del punto).

Consideraciones:

La circunferencia con centro en (0, 0) y radio 3 está dada por el conjunto de


puntos (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)
Introducción Selectiva simple Selectiva doble Selectiva múltiple 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á");
else
disp("No está");
end
Introducción Selectiva simple Selectiva doble Selectiva múltiple anidada Ejemplos

Ejemplo 5.3
Ejemplo 5.3

Realice un algoritmo (DFD, Octave) que calcule, de ser posible, las raices
reales de la ecuación

ax2 + bx + c = 0, a 6= 0. (6)

Solución
Consideraciones:
Las soluciones de la ecuación cuadrática (6) vienen dadas por

−b ± b2 − 4ac
x= (7)
2a
La fórmula (7) puede conducir a soluciones complejas si
∆ = b2 − 4ac < 0

Variables:
a, b, c: variables de tipo real (coeficientes de la ecuación) con a 6= 0.
dis: variable de tipo real; almacena el discriminante de la ecuación.
x1 y x2: variables de tipo real; almacenan las raices de la ecuación.
Introducción Selectiva simple Selectiva doble Selectiva múltiple anidada Ejemplos

Ejemplo 5.3

raices.m

% Determina las soluciones reales de la


% ecuación cuadrática ax∧2+bx+c=0

% Lee los coeficientes de la ecuación


a = 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
Introducción Selectiva simple Selectiva doble Selectiva múltiple anidada Ejemplos

Ejemplo 5.4
Ejemplo 5.4

Realice un algoritmo (DFD, Octave) tal que dado como dato un número
entero, determine e imprima si el mismo es postivo, negativo o nulo.

Solución
signo.m

% Dado como dato un entero,


% determina si el número es
% postivo, negativo o nulo.
% Lee el número
NUM = input("Ingrese un número: ");
if NUM > 0
disp("Positivo");
else
if NUM == 0
disp("Nulo");
else
disp("Negativo");
end
end
Introducción Selectiva simple Selectiva doble Selectiva múltiple anidada Ejemplos

Ejemplo 5.5

Ejemplo 5.5

Realice un algoritmo (DFD, Octave) tal que dado como dato un número
entero, determine e imprima si el mismo es par, impar o nulo.

Solución

par2.m

% Dado como dato un número entero


% N, determina si el número es par,
% impar o nulo.
% Lee el número
N = input("Ingrese un número: ");
if N==0
disp("Nulo");
else
if (-1)∧ N > 0
disp("Par");
else
disp("Impar");
end
endif
Introducción Selectiva simple Selectiva doble Selectiva múltiple anidada Ejemplos

Ejemplo 5.6
Ejemplo 5.6

Realice un algoritmo (DFD, Octave) tal que dado como datos tres números
enteros, determine si éstos están en orden creciente.

Solución
ordenar.m

% Descripción: Dado tres enteros distintos, determina


% si están 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 números están en orden creciente");
else
disp("Los números no están en orden creciente");
end
else
disp("Los números no están en orden creciente");
end
Introducción Selectiva simple Selectiva doble Selectiva múltiple anidada Ejemplos

Ejemplo 5.7

Ejemplo 5.7

Una tienda norteamericana efectúa un descuento a sus clientes dependiendo


del monto de la compra (en dólares). El descuento se efectúa de acuerdo a
los siguientes criterios:
1 monto < $500 ⇒ no hay 11 % de descuento
descuento 4 $7000 < monto ≤ $15000 ⇒
2 $500 < monto ≤ $1000 ⇒ 5 % 18 % de descuento
de descuento 5 monto > $15000 ⇒ 25 % de
3 $1000 < monto ≤ $7000 ⇒ descuento

Realice un algoritmo (diagrama de flujo, pseudocódigo) tal que dado el


monto de la compra de un cliente, determine lo que el mismo debe pagar.

Solución
Datos:

COMPRA: variables de tipo real; representa el monto de la compra.


PAGO: variables de tipo real; representa el valor a pagar.
Introducción Selectiva simple Selectiva doble Selectiva múltiple 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ón Selectiva simple Selectiva doble Selectiva múltiple 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ásico de un
artı́culo y calcule su precio total (precio total = precio básico + impuesto).

Solución
Variables:

PREBAS: variables de tipo real; almacena el precio básico 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ásico más impuesto).
Introducción Selectiva simple Selectiva doble Selectiva múltiple anidada Ejemplos

impuestos.m

% Dado el costo de un artı́culo,


% aplica un descuento.
% Lee el precio básico
PREBAS = input("Ingrese precio básico: ");
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ón Selectiva simple Selectiva doble Selectiva múltiple 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úmero de inscripción 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ódigo) que muestre:
Número de Nombres Pago de matrı́cula
inscripción

Solución
Variables:
NI: variable de tipo entera, representa el número de inscripción.
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.
Introducción Selectiva simple Selectiva doble Selectiva múltiple 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úmero de inscripció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úmero de inscripción: %g \n", NI);
printf("Nombre: %s \n", NOM);
printf("Pago de matrı́cula: %g \n", PAGMAT);
Introducción Selectiva simple Selectiva doble Selectiva múltiple anidada Ejemplos

Ejemplo 5.10
Ejemplo 5.10

Un almacén efectúa una promoción en la cual se hace un descuento sobre el


valor de la compra total, según el color de la bolita que el cliente saque al
pagar en la caja. Si la bolita es blanca no se le hará descuento alguno, si es
verde se le hará 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á pagar por su compra. Se sabe que sólo hay bolitas de los
colores mencionados.

Solución
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ón Selectiva simple Selectiva doble Selectiva múltiple 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ón Selectiva simple Selectiva doble Selectiva múltiple 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ál es la esfera
diferente y si es de mayor o menor peso.

Solución

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ón Selectiva simple Selectiva doble Selectiva múltiple anidada Ejemplos
Introducción Selectiva simple Selectiva doble Selectiva múltiple 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
Introducción Selectiva simple Selectiva doble Selectiva múltiple anidada Ejemplos

Referencias

O. Cairó
Metodologı́a de la programación
Segunda edición. Alfaomega Grupo Editor, S.A., 2005

M.A. Criado
Programación en lenguajes estructurados
Alfaomega Grupo Editor, S.A. de C.V. Primera Edición, 2006

J.W. Eaton
GNU Octave: A high-level interactive language for numerical
computations
Network Theory Ltd., 2002