Está en la página 1de 21

ESTRUCTURAS LGICAS DE DECISIN

ESTRUCTURA LGICA DE DECISIN MLTIPLE: SI MLTIPLE

Definicin:
Una estructura de decisin mltiple SI MLTIPLE permite alterar el flujo
secuencial de una solucin ejecutando un conjunto de pasos dependiendo del valor
de una condicin lgica. Tiene la misma funcionalidad que la estructura CUANDO
pero la diferencia es que en lugar de utilizar una variable se utiliza una condicin
lgica.

Representacin:
Formato para disear algoritmos:
En pseudocdigo:

SI (condicin) ENTONCES

instrucciones

FINSI
SI (condicin) ENTONCES

instrucciones

FINSI
SI (condicin) ENTONCES

instrucciones

FINSI

EXPLICACIN:
Si la condicin resulta verdadera, se
ejecutan las instrucciones que se
encuentran
entre
las
reglas
SIENTONCES y FINSI.
Si la condicin resulta falsa, no se
ejecutan las instrucciones que se
encuentran
entre
las
reglas
SIENTONCES y FINSI.
Esta evaluacin se realiza con cada
una de las estructuras lgicas de
decisin simple.

Para disear el diagrama de flujo se puede utilizar cualquiera de las formas


presentadas anteriormente para la estructura lgica de decisin. El diseo del
diagrama de flujo depender de la cantidad de estructuras lgicas de decisin simple
que utiliza para una determinada solucin.
De igual forma, la codificacin del algoritmo en un lenguaje de programacin
depender de la cantidad de estructuras lgicas de decisin simple utilizadas.

Pag. - 1 -

ESTRUCTURAS LGICAS DE DECISIN


ESTRUCTURA LGICA DE DECISIN MLTIPLE: SI ANIDADOS

Definicin:
Una estructura de decisin mltiple SI ANIDADOS permite alterar el flujo
secuencial de una solucin ejecutando un conjunto de pasos dependiendo del
resultado de varias condiciones lgicas. Generalmente, cuando se tiene un problema
con mltiples condiciones lgicas la mejor opcin ser emplear SI ANIDADOS para la
solucin. Esto fundamentalmente por que la Estructura Lgica de Decisin Mltiple
CUANDO no trabaja con condiciones lgicas sino slo con el valor de una variable
que puede ser de tipo CARACTER o ENTERO.
Este tipo de estructura es til cuando se tiene la necesidad de escoger entre ms de
dos opciones y se presentan mltiples condiciones lgicas.

Representacin:
Formato para disear algoritmos:
En pseudocdigo:

EXPLICACIN:
SI (condicin) ENTONCES

instrucciones

Si la condicin resulta verdadera,


se ejecutan las instrucciones que
se encuentran entre las reglas
SIENTONCES y SINO.

SINO

Si la condicin resulta falsa se


ejecutan las instrucciones que se
encuentran entre las reglas
SINO y FINSI.

SI (condicin) ENTONCES

instrucciones

FINSI
FINSI

Pag. - 2 -

Slo se ejecuta uno de los


grupos de instrucciones, en
ningn caso se podr ejecutar
ambos grupos.

En diagrama de flujo:

FALSO

VERDADERO
condicin 1

condicin 2

FALSO

VERDADERO

...
instrucciones
...
...

...
instrucciones
...
...

Figura 03-18

En la figura 03-18 se muestra una estructura de decisin mltiple utilizando diagramas de flujo.

En la figura, se puede observar claramente el diagrama de flujo de una estructura de


decisin doble y el diagrama de flujo de una estructura de decisin simple en el flujo
FALSO de la evaluacin de la condicin. La idea fundamental es que el diagrama de
flujo represente una estructura de decisin mltiple donde se debe utilizar diagramas
de flujo de estructuras de decisin simple y doble en forma combinada, de acuerdo a
las necesidades que se determinen.
En la figura 03-19, 03-20, 03-21, 03-22, y 03-23 puede apreciar algunos ejemplos.
Observe que en todo momento se elaboran los diagramas de flujo guardando
esttica, simetra y buen gusto.

Pag. - 3 -

VERDADERO

FALSO
condicin 1

VERDADERO

FALSO

condicin 2

...
instrucciones
...
...

...
instrucciones
...
...

...
instrucciones
...
...

Figura 03-19

FALSO

VERDADERO
condicin 1

VERDADERO
condicin 2

FALSO

...
instrucciones
...
...

Figura 03-20

Pag. - 4 -

...
instrucciones
...
...

FALSO

VERDADERO
condicin 1

VERDADERO
FALSO

condicin 2

...
instrucciones
...
...

...
instrucciones
...
...

...
instrucciones
...
...

Figura 03-21

VERDADERO
condicin 1

VERDADERO

FALSO
condicin 2

FALSO

...
instrucciones
...
...

Figura 03-22

Pag. - 5 -

...
instrucciones
...
...

FALSO

VERDADERO

condicin 1

VERDADERO

FALSO

FALSO

condicin 2

...
instrucciones
...
...

...
instrucciones
...
...

...
instrucciones
...
...

VERDADERO
condicin 3

...
instrucciones
...
...

Figura 03-23

Existe la posibilidad de reducir el tamao del diagrama de flujo cuando se tienen


mltiples condiciones y cada condicin en su flujo VERDADERO ejecuta una o
dos instrucciones. Esto puede apreciarse a continuacin:

Pag. - 6 -

VERDADERO
condicin 1

Figura 02 21 instrucciones

FALSO

VERDADERO
condicin 2

FALSO

instrucciones
VERDADERO

condicin 3

instrucciones

FALSO

...
instrucciones
...
...

Figura 03-24

Observe la figura anterior, y podr apreciar que el diagrama de flujo se ha elaborado


utilizando mltiples estructuras de decisin doble (ver figura 0308). Recuerde que si
existien muchas instrucciones en los flujos VERDADERO de las condiciones lgicas,
existe la posibilidad que el diagrama de flujo pierda simetra y esttica, en ese caso,
sera recomendable utilizar un diagrama de flujo como el que se muestra en la figura
0323.

Pag. - 7 -

Problema 016
Etapa 01 - Descripcin del problema.
Enunciado:
Calcular el rea de un rectngulo conociendo su base y altura. Si el rea es menor que 100,
se deber visualizar el mensaje rectngulo pequeo; si el rea es mayor o igual a 100 y
menor que 1000, se visualizar el mensaje rectngulo mediano; y si el rea es mayor o igual
que 1000, el mensaje ser rectngulo grande.
Etapa 02 - Definicin de la solucin.

Resultado deseado:

Datos necesarios:
Procesamiento:

Mostrar el rea de un rectngulo y un mensaje referido al tamao de


ste.
La base y la altura del rectngulo.
La base y la altura del rectngulo se almacenarn en variables (base
y altura). Se calcula el rea del rectngulo (base y altura) y se
almacena en una variable (area). Si el rea resulta menor que 100,
se almacenar en una variable (mensaje) el texto rectngulo
pequeo. Si el rea resulta mayor o igual que 100 y menor que
1000, se almacenar el texto rectngulo mediano. Si el rea resulta
mayor o igual que 1000, se almacenar el texto rectngulo grande.
Finalmente, se mostrar el rea (area) y el texto respectivo
(mensaje) en pantalla.

Etapa 03 - Diseo de la lgica.


1. Diseo del algoritmo.
En pseudocdigo:
Algoritmo PrgAreaRectangulo main ( )
ENTRADA:
SALIDA:

base, altura
area, mensaje

INICIO
REAL base, altura, area
TEXTO mensaje
LEER base, altura
area = base * altura
SI ( area < 100 ) ENTONCES
mensaje = rectngulo pequeo
SINO
SI ( area >= 1000 ) ENTONCES
mensaje = rectngulo grande
SINO
mensaje = rectngulo mediano
FINSI
FINSI
ESCRIBIR area, mensaje
FIN

Pag. - 8 -

En diagrama de flujo:
Algoritmo PrgAreaRectangulo main ( )

INICIO

REAL base, altura, area


TEXTO mensaje

base, altura

area= base * altura

FALSO

VERDADERO
area <100

FALSO

VERDADERO

mensaje = rectngulo pequeo

area >=1000

mensaje = rectngulo mediano

mensaje = rectngulo grande

mensaje

FIN

Pag. - 9 -

Etapa 04 - Desarrollo de la codificacin.


En lenguaje de programacin C++:
Clase PrgAreaRectangulo
#include <iostream>
#include <string>

using std::cout ;
using std::cin ;
using std::string ;

int main ( ) {
double base, altura, area ;
string mensaje ;
cout << Ingrese la base del rectngulo: ;
cin >> base ;
cout << Ingrese la altura del rectngulo: ;
cin >> altura ;
area = base * altura ;
if ( area < 100 ) {
mensaje = rectngulo pequeo ;
} else {
if ( area >= 1000 ) {
mensaje = rectngulo grande ;
} else {
mensaje = rectngulo mediano ;
}
}
cout << \n ;
cout << El rea es: << area << \n ;
cout << Es un << mensaje << \n\n ;
system ( PAUSE ) ;
return 0 ;
}

Pag. - 10 -

Problema 017
Etapa 01 - Descripcin del problema.
Enunciado:
Leer el sueldo de un trabajador y calcule su aumento por incremento del costo de vida de
acuerdo a la siguiente tabla. Mostrar el nuevo sueldo.
Condicin
sueldo < 2000
2000 < = sueldo < =3000
sueldo > 3000

Aumento
20 %
13 %
9%

Etapa 02 - Definicin de la solucin.

Resultado deseado:
Datos necesarios:
Procesamiento:

Mostrar el sueldo del trabajador incluido su incremento.


El sueldo actual del trabajador.
El sueldo actual del trabajador se almacenar en una variable
(sueldo). Si el sueldo resulta menor que S/.2000 nuevos soles, el
incremento ser del 20%; Si es mayor que S/.3000 nuevos soles,
ser de 9%; en otros casos ser de 13%. El resultado se almacenar
en una variable (nuevoSueldo) para luego ser mostrado en pantalla.

Etapa 03 - Diseo de la lgica.


1. Diseo del algoritmo.
En pseudocdigo:
Algoritmo PrgAumentoSueldo2 main ( )

ENTRADA:
SALIDA:

sueldo
nuevoSueldo

INICIO
REAL sueldo, nuevoSueldo
LEER sueldo
SI ( sueldo < 2000 ) ENTONCES
nuevoSueldo = sueldo * 1.2
SINO
SI ( sueldo > 3000 ) ENTONCES
nuevoSueldo = sueldo * 1.09
SINO
nuevoSueldo = sueldo * 1.13
FINSI
FINSI
ESCRIBIR nuevoSueldo
FIN

Pag. - 11 -

En diagrama de flujo:
Algoritmo PrgAumentoSueldo2 main ( )

INICIO

REAL sueldo, nuevoSueldo

sueldo

FALSO

VERDADERO
sueldo<2000

FALSO

VERDADERO
sueldo>3000

nuevoSueldo = sueldo * 1.13

nuevoSueldo = sueldo * 1.09

nuevoSueldo

FIN

Pag. - 12 -

nuevoSueldo = sueldo * 1.2

Etapa 04 - Desarrollo de la codificacin.


En lenguaje de programacin C++:
Clase PrgAumentoSueldo2
#include <iostream>
using namespace::std;
int main ( ) {
double sueldo, nuevoSueldo ;
cout << Ingrese el sueldo del trabajador: ;
cin >> sueldo ;
if ( sueldo < 2000 ) {
nuevoSueldo = sueldo * 1.2 ;
} else {
if ( sueldo > 3000 ) {
nuevoSueldo = sueldo * 1.09 ;
} else {
nuevoSueldo = sueldo * 1.13 ;
}
}
cout << El nuevo sueldo es: << nuevoSueldo << \n\n ;
system ( PAUSE ) ;
return 0 ;
}

Pag. - 13 -

Problema 018
Etapa 01 - Descripcin del problema.
Enunciado:
Desarrolle una solucin que permita determinar si un nmero (num) es par, impar o nulo.
Muestre un mensaje si el nmero es par, impar o nulo.

Etapa 02 - Definicin de la solucin.

Resultado deseado:
Datos necesarios:
Procesamiento:

Mostrar si un nmero es par, impar o nulo.


Un nmero.
El nmero a evaluar ser almacenado en una variable
(num). Si el resultado de la evaluacin (num == 0)
resulta verdadera, se almacenar en una variable tipo
texto el nmero es nulo. Si el resultado es falso, se
evaluara (num%2 == 0) si el resultado es verdadero, el
nmero evaluado ser un nmero par y se almacenar
el texto el nmero es par; en otros casos, el nmero
evaluado ser un nmero impar y se almacenar el
texto el nmero es impar.

Etapa 03 - Diseo de la lgica.


1. Diseo del algoritmo.
En pseudocdigo:
Algoritmo PrgNumTipo2 - main ( )
ENTRADA: num
SALIDA:
tipo
INICIO
ENTERO num
TEXTO tipo
LEER num
SI ( num == 0 ) ENTONCES
tipo = El nmero es nulo
SINO
SI ( num % 2 == 0 ) ENTONCES
tipo = El nmero es par
SINO
tipo = El nmero es impar
FINSI
FINSI
ESCRIBIR tipo
FIN

Pag. - 14 -

En diagrama de flujo:
Algoritmo PrgNumTipo2 main ( )

INICIO

ENTERO num
TEXTO tipo

num

FALSO

VERDADERO
num == 0

VERDADERO

FALSO
num % 2 == 0

tipo = El nmero es par

tipo = El nmero es par

tipo

FIN

Pag. - 15 -

tipo = El nmero es nulo

Etapa 04 - Desarrollo de la codificacin.


En lenguaje de programacin C++:
Clase PrgNumTipo2

#include <iostream>
using namespace::std;

int main ( ) {
int num ;
string tipo ;
cout << Ingrese un nmero: ;
cin >> num ;
if ( num == 0 ) {
tipo = El nmero es nulo ;
} else {
if (num % 2 == 0 ) {
tipo = El nmero es par ;
} else {
tipo = El nmero es impar ;
}
}
cout << tipo << \n\n ;
system ( PAUSE ) ;
return 0 ;
}

Pag. - 16 -

Problema 019
Etapa 01 - Descripcin del problema.
Enunciado:
Determinar si un nmero es divisor de otro nmero.
Utilice la expresin (num1 % num2 == 0) donde num1 y num2 son los dos nmeros.

Etapa 02 - Definicin de la solucin.

Resultado deseado:
Datos necesarios:
Procesamiento:

Mostrar si un nmero es divisor de otro.


Dos nmeros.
Los dos nmeros a evaluar sern almacenados en
variables (num1 y num2). Se determinar cul de los
dos es el nmero mayor y luego se utilizar la
expresin (num1 RESTO num2) == 0 en el caso que el
primer nmero (num1) sea mayor o igual que el
segundo nmero (num2) o la expresin (num2 RESTO
num1) == 0 en el caso que el segundo nmero (num2)
sea mayor que el primer nmero (num1), para
determinar si un nmero es divisor o no del otro.
Finalmente, se mostrar la variable (mensaje) que
indica si uno de los nmeros es o no divisor del otro
nmero.

Etapa 03 - Diseo de la lgica.


1. Diseo del algoritmo.
En pseudocdigo:
Algoritmo PrgNumeroDivisor - main ( )
ENTRADA:
SALIDA:

num1, num2
mensaje

INICIO
ENTERO num1, num2
TEXTO mensaje
LEER num1, num2
SI ( num1 >= num2 ) ENTONCES
SI ( num1 % num2 == 0 ) ENTONCES
mensaje = El segundo nmero es divisor del primer nmero
SINO
mensaje = El segundo nmero no es divisor del primer nmero
FINSI

Pag. - 17 -

Algoritmo PrgNumeroDivisor - main ( )

SINO
SI ( num2 % num1 == 0 ) ENTONCES
mensaje = El primer nmero es divisor del segundo nmero
SINO
mensaje = El primer nmero no es divisor del segundo nmero
FINSI
FINSI
ESCRIBIR mensaje
FIN
Intente disear el algoritmo en diagrama de flujo.

Etapa 04 - Desarrollo de la codificacin.


En lenguaje de programacin C++:
Clase PrgNumeroDivisor
#include <iostream>
#include <string>
using namespace::std;
int main ( ) {
int num1, num2 ;
string mensaje ;
cout << Ingrese el primer nmero: ;
cin >> num1 ;
cout << Ingrese el segundo nmero: ;
cin >> num2 ;
if ( num1 >= num2 ) {
if ( num1 % num2 == 0 ) {
mensaje = El segundo nmero es divisor del primero ;
} else {
mensaje = El segundo nmero no es divisor del primero ;
}
} else {
if ( num2 % num1 == 0 ) {
mensaje = Primer nmero es divisor del segundo ;
} else {
mensaje = Primer nmero no es divisor del segundo ;
}
}
cout << mensaje << \n\n ;
system ( PAUSE ) ;
return 0 ;
}

Pag. - 18 -

Problema 020
Etapa 01 - Descripcin del problema.
Enunciado:
Un curso se evala de la siguiente forma: se toma cinco prcticas calificadas, se determina el
promedio de las cuatro notas ms altas y se le da al estudiante una categora que puede ser
A, B, C o D. Segn la tabla mostrada. Mostrar el promedio y la categora del alumno.
Considerar que todas las notas ingresadas estn dentro de los valores vlidos (de 0 a 20).
Rango
Desde 17 a 20
Desde 14 a 16
Desde 10 a 13
Desde 00 a 09

Categora
A
B
C
D

Etapa 02 - Definicin de la solucin.

Resultado deseado:
Datos necesarios:
Procesamiento:

Mostrar la categora del alumno.


Las cinco notas del estudiante.
Las cinco notas del estudiante se ingresan a travs del
teclado y se almacenan en variables (n1, n2, n3, n4 y
n5). La menor de estas notas se guardar en una
variable (notaMenor). La suma de las cinco notas se
guardar en una variable (sumaNotas). Se realizar el
clculo del promedio del alumno de la siguiente forma:
promedio = ( sumaNotas notaMenor ) / 4
El resultado es almacenado en la variable (promedio),
este resultado nos permitir obtener la categora del
alumno (categoria), para luego ser mostrada por
pantalla.

Etapa 03 - Diseo de la lgica.


1. Diseo del algoritmo.
En pseudocdigo:
Algoritmo PrgCategoriaAlumno - main ( )
ENTRADA:
SALIDA:

n1, n2, n3, n4, n5


categoria

INICIO
REAL n1, n2, n3, n4, n5, sumaNotas
REAL notaMenor, promedio
CARACTER categoria =

Pag. - 19 -

Algoritmo PrgCategoriaAlumno - main ( )

LEER n1, n2, n3, n4, n5


sumaNotas = n1 + n2 + n3 + n4 + n5
notaMenor = n1
SI ( notaMenor > n2 ) ENTONCES
notaMenor = n2
FINSI
SI ( notaMenor > n3 ) ENTONCES
notaMenor = n3
FINSI
SI ( notaMenor > n4 ) ENTONCES
notaMenor = n4
FINSI
SI ( notaMenor > n5 ) ENTONCES
notaMenor = n5
FINSI
promedio = ( sumaNotas notaMenor ) / 4
SI ( promedio <= 20 AND promedio >= 17 ) ENTONCES
categoria = A
SINO
SI ( promedio >= 14 ) ENTONCES
categoria = B
SINO
SI ( promedio >= 10 ) ENTONCES
categoria = C
SINO
categoria = D
FINSI
FINSI
FINSI
ESCRIBIR promedio, categoria
FIN
Intente disear el algoritmo en diagrama de flujo.

Etapa 04 - Desarrollo de la codificacin.


En lenguaje de programacin C++:
Clase PrgCategoriaAlumno
#include <iostream>
using std::cout ;
using std::cin ;
using std::endl ;

Pag. - 20 -

Clase PrgCategoriaAlumno
int main ( ) {
double n1, n2, n3, n4, n5, sumaNotas ;
double notaMenor , promedio ;
char categoria = ;
cout << Ingrese la 1ra. nota: ;
cin >>n1 ;
cout << Ingrese la 2da. nota: ;
cin >>n2 ;
cout << Ingrese la 3ra. nota: ;
cin >>n3 ;
cout << Ingrese la 4ta. nota: ;
cin >>n4;
cout << Ingrese la 5ta. nota: ;
cin >> n5 ;
sumaNotas = n1 + n2 + n3 + n4 + n5 ;
notaMenor = n1 ;
if ( notaMenor > n2 )
notaMenor = n2 ;
if ( notaMenor > n3 )
notaMenor = n3 ;
if ( notaMenor > n4 )
notaMenor = n4 ;
if ( notaMenor > n5 )
notaMenor = n5 ;
promedio = ( sumaNotas notaMenor ) / 4 ;
if ( promedio <= 20 && promedio >= 17 ) {
categoria = A ;
} else {
if (promedio >= 14 ) {
categoria = B ;
} else {
if (promedio >= 10 ) {
categoria = C ;
} else {
categoria = D ;
}
}
}
cout << \n El promedio del alumno es: " << promedio << \n ;
cout << Su categora es: << categoria << \n ;
cout << \n ;
system ( PAUSE ) ;
return 0 ;
}

Ahora, se recomienda solucionar los problemas propuestos del 16 al 20.

Pag. - 21 -

También podría gustarte