Vous êtes sur la page 1sur 32

Conceptos Bsicos de Algoritmia

1.1 Algoritmo
1.2 Pseudocdigo
1.3 Variables
1.4 Literales
1.5 Instrucciones Algoritmicas Bsicas
1.6 Expresiones Aritmticas
1.7 Expresiones Lgicas

1.1 Algoritmo
Un algoritmo es un conjunto ordenado y finito de instrucciones que conducen a la solucin de un
problema. En la vida cotidiana ejecutamos constantamente algoritmos. Por ejemplo, al instalar un
equipo de sonido ejecutamos las instrucciones contenidas en el manual del equipo, este conjunto
de instrucciones constituyen un algoritmo. Otro caso de algoritmo es el algoritmo matemtico de
Euclides para la obtencin del mximo comn divisor de dos nmeros.

Si un algoritmo puede ser ejecutado por una computadora, se dice que es un algoritmo
computacional; en caso contrario, se dice que es un algoritmo no computacional. Segn esto,
el algoritmo de Euclides es un algoritmo computacional; pero el algoritmo para instalar el equipo de
sonido es un algoritmo no computacional. Para que un algoritmo pueda ser ejecutado por una
computadora se necesita expresar el algoritmo en instrucciones comprensibles por la computadora,
para esto se requiere de un determinado lenguaje de programacin. Al algoritmo expresado en un
determinado lenguaje de programacin, se denomina programa. Puesto de otra manera, podemos
decir que, un programa es la implementacin o expresin de un algoritmo en un determinado
lenguaje de programacin siguiendo las reglas establecidas por el lenguaje elegido. En la Figura
2.1 que sigue se muestra la relacin entre problema, algoritmo y programa.

Figura 1.1 Problema, algoritmo y programa

Todo algoritmo debe tener las siguientes caractersticas:

Debe ser preciso, es decir, cada instruccin debe indicar de forma inequvoca que se tiene
que hacer.

Debe ser finito, es decir, debe tener un nmero limitado de pasos.

Debe ser definido, es decir, debe producir los mismos resultados para las mismas
condiciones de entrada.

Todo algoritmo puede ser descompuesto en tres partes:

Entrada de datos.
Proceso.

Salida de resultados.

Ejemplo 1.1:- Algoritmo para preparar ceviche de bonito para 6 personas.

Entradas :
- 1 kilo de bonito
- 3 camotes sancochados
- 3 cebollas cortadas a lo largo
- 1 rocoto en rodajas
- 3 ramas de apio picado
- 2 ramitas de culantro picado
- 4 vasos de jugo de limn
- 4 cucharadas de ajo molido
- 2 cucharadas de aj amarillo molido
- sal y pimienta

Proceso :
- Cortar la carne de pescado en pequeos trozos.
- Mezclar la carne con el jugo de limn, el ajo, la pimienta, el
culantro, el aj amarillo y el apio.
- Dejar reposar 30 minutos.
- Agregar sal al gusto y echar las cebollas cortadas.
- Servir acompaando el cebiche con el camote sancochado y el
rocoto en rodajas

Salida :
El ceviche

Evidentemente este es un algoritmo no computacional, no podr ser ejecutado por una


computadora, pero s por una persona. Por si acaso el ceviche es peruano.

Ejemplo 1.2:- Algoritmo para expresar en centmetros y pulgadas una cantidad dada en metros.

Entrada:
La cantidad M de metros

Proceso:
Clculo de centmetros : C = M*100
Clculo de pulgadas : P = C/2.54

Salida :
La cantidad C de centmetros y la cantidad P de pulgadas

Este es un algoritmo computacional escrito en lenguaje natural, puede ser convertido en un


programa de computadora, pero tambin puede ser ejecutado manualmente por una persona.

1.2 El Pseudocdigo
El pseudocdigo es un lenguaje de pseudoprogramacin utilizado para escribir algoritmos
computacionales. Como lenguaje de pseudoprogramacin, el pseudocdigo es una imitacin de
uno o ms lenguajes de programacin. De esta manera podemos encontrar pseudocdigos
orientados a lenguajes de programacin como Pascal, Java, C, C++, etc. En el caso de este curso
orientaremos los pseudocdigos a los lenguajes Java, C y C++. El objetivo del pseudocdigo es
permitir que el programador se centre en los aspectos lgicos de la solucin, evitando las reglas de
sintxis de los lenguajes de programacin. No siendo el pseudocdigo un lenguaje formal, los
pseudocdigos varan de un programador a otro, es decir, no hay un pseudocdigo estndar.

1.3 Variables
Una variable es una localizacin o casillero en la memoria principal que almacena un valor que
puede cambiar en el transcurso de la ejecucin del programa. Cuando un programa necesita
almacenar un dato, necesita una variable. Toda variable tiene un nombre, un tipo de dato y
un valor. Antes de poder utilizar una variable es necesario declararla especificando su nombre y
su tipo de dato. Para declarar declarar variables usaremos los siguientes formatos:

Declaracin de una variable:

tipo nombre

Declaracin de varias variables con el mismo tipo de dato:

tipo nombre1, nombre2, nombre3, ..., nombren

Donde:

tipo Es el tipo de dato de la variable que puede ser: ENTERO (si la


variable almacenar un nmero entero) , REAL (si la variable
almacenar un nmero decimal) , CARACTER (si la variable
almacenar un carcter), CADENA (si la variable almacenar un
conjunto de carcteres) o LOGICO (si la variable almacenar el
valor verdadero o el valor falso).

nombre1, nombre2, ..., Nombres de las variables . El nombre de una variable debe
nombren comenzar con una letra, un smbolo de subrayado o un smbolo
de dlar. Los dems caractres del nombre puede ser letras,
smbolos de subrayado o smbolo de dlar. Debe considerarse
tambin que una letra mayscula se considera diferente de una
letra minscula.

Ejemplo 1.3:- Declaracin de variables.

La siguiente instruccin declara la variable edad de tipo ENTERO y la


variable descuento de tipo REAL..

ENTERO edad
REAL descuento

Esto crea los casilleros de memoria edad y descuento. Luego de la creacin, las variables estn
indefinidas ( ? ).

edad ?
descuento ?
La siguiente instruccin declara las variables nota1, nota2 y nota3, todas de
tipo ENTERO.

ENTERO nota1, nota2, nota3

Esto crea los casilleros de memoria nota1, nota2 y nota3. Luego de la creacin, las variables
estn indefinidas ( ? ).

nota1 ?
nota2 ?
nota3 ?

1.4 Literales
Se denominan literales a todos aquellos valores que figuran en el pseudocdigo y pueden ser:

Literales enteros

12, 20300, 15, etc.

Literales reales

3.1416, 2345.456, etc.

Literales de carcter

'a', 'B', ';', '<', '+', etc.

Lieterales de cadena

"Hola", "Algoritmos Computacionales", etc.

Literales lgicos

verdadero, falso

1.5 Instrucciones Algortmicas Bsicas


Existen tres instrucciones algortmicas bsicas que son las siguientes

1.5.1 Entrada

Consiste en obtener un dato de un dispositivo de entrada, como el teclado, y almacenarlo en una


variable. En general, la accin de ingresar un dato a una variable se expresa en el pseudocdigo
mediante la palabra LEER, de la siguiente forma:

LEER variable

Por ejemplo, la instruccin:


LEER estatura

Solicita el ingreso de un valor, desde algn dispositivo de entrada (como el teclado), para la
variable estatura.

1.5.2 Salida

Consiste en mostrar el valor de una variable en un dispositivo de salida, como la pantalla. En


general, la accin de mostrar el valor de una variable se expresa en el pseudocdigo mediante la
palabra IMPRIMIR de la siguiente forma:

IMPRIMIR variable

Por ejemplo, la instruccin:

IMPRIMIR importeCompra

Muestra, en algn dispositivo de salida (como la pantalla), el valor de la variable importeCompra.

1.5.3 Asignacin

Consiste en asignar a una variable el valor de una expresin. La expresin puede ser una simple
variable, un simple literal o una combinacin de variables, literales y operadores. La asignacin se
expresa en el pseudocdigo de la siguiente forma:

variable = expresin

Donde variable y el valor de expresin deben tener el mismo tipo de dato.

Cuando se asigna un valor ENTERO a una variable REAL, entonces el valor ENTERO se
convertir en REAL antes de almacenarse. As, al asignar el valor ENTERO 25 a una variable
REAL, se almacenar 25.0.

Ejemplo 1.4:- Algoritmo para expresar en centmetros y pulgadas una cantidad dada en metros.

Esta es una solucin en pseudocdigo del ejemplo 1.2 utilizando conceptos computacionales de
variable, entrada de datos y salida de resultados. La solucin considera que 1 metro = 100
centmetros y que 1 pulgada = 2.54 centmetros.

INICIO
// Declara las variables M, C y P
REAL M, C, P

// Solicita el ingreso de la cantidad en metros


LEER M

// Calcula la cantidad en centmetros y lo asigna a la variable C


C = M*100
// Calcula la cantidad en pulgadas y lo asigna a la variable P
P = C/2.54

// Muestra los valores de las variables C y P


IMPRIMIR C, P
FIN

1.6 Expresiones Aritmticas


Una expresin aritmtica es una combinacin de variables, literales y operadores aritmticos.

1.6.1 Operadores Aritmticos

En la tabla que sigue se muestran los operadores aritmticos que vamos a utilizar.

Tabla 1.1 Operadores aritmticos

Operador Significado Ejemplo


+ Suma a+b
- Resta a-b
* Multiplicacin a*b
/ Divisin a/b
% Residuo a%b

Los operadores aritmticos pueden utilizarse con tipos enteros y reales. Si en una operacin con
dos operandos, ambos operandos son enteros, el resultado es un entero; si alguno de ellos es real,
el resultado es real. As, 15/4 es 3 y no 3.75; en cambio, 15.0/4 es 3.75.

1.6.2 Reglas de jerarqua de los operadores aritmticos

Cuando una expresin aritmtica tiene ms de un operador aritmtico, el orden de aplicacin de los
operadores sigue un orden preciso determinado por las reglas de jerarqua de los operadores
aritmticos, que se muestran en la siguiente tabla:

Tabla 1.2 Reglas de jerarqua de los operadores aritmticos

Operador Orden de evaluacin


() Se evalan en primer lugar
*, /, % Se evalan en segundo lugar
+, - Se evalan en tercer lugar

Si existen parntesis anidados, se evala primero la expresin en el par ms interno. Si varios


operadores o parntesis tienen la misma jerarqua, la evaluacin ser de izquierda a derecha.

Ejemplo 1.4:- Cul es el equivalente en pseudocdigo de la siguiente expresin algebraica?

Solucin
e = a/b/c

Como todos los operadores tienen la misma jerarqua, la evaluacin ser de izquierda a derecha:

Primero, se dividir a entre b.


Segundo, el resultado ya obtenido de a/b se dividir entre c.

Note que el orden de ejecucin esta de acuerdo con la expresin algebraica, por lo que no se
requiere ninguna pareja de parntesis.

Ejemplo 1.5:- Cul es el equivalente en pseudocdigo de la siguiente expresin algebraica?

Solucin

e = a*b*c/d/e

Como todos los operadores tienen la misma jerarqua, la evaluacin ser de izquierda a derecha:

Primero, se multiplicar a por b.


Segundo, el resultado ya obtenido de a*b se multiplicar por c.
Tercero, el resultado ya obtenido de a*b*c se dividir entre d.
Cuarto, el resultado ya obtenido de a*b*c/d se divivir entre e.

Note que el orden de ejecucin esta de acuerdo con la expresin algebraica, por lo que no se
requiere ninguna pareja de parntesis.

Ejercicio 1.6:- Cul es el equivalente en pseudocdigo de la siguiente expresin algebraica?

Solucin

e = 4/((a+b)/(c/d)) + v/w/p + 5*m*n*q

Aplicando las reglas de jerarqua de los operadores aritmticos:

Primero, se sumar a ms b.
Segundo, se dividir c entre d.
Tercero, el resultado ya obtenido de a+b se dividir entre el resultado ya obtenido de c/d.
Cuarto, se dividir 4 entre el resultado ya obtenido de ((a+b)/(c/d))
Quinto, se dividir v entre w.
Sexto, se dividir el resultado ya obtenido de v/w entre p.
Sptimo, se multiplicar 5 por m.
Octavo, se multiplicar el resultado ya obtenido de 5*m por n.
Noveno, se multiplicar el resultado ya obtenido de 5*m*n por q.
Dcimo, se sumar el resultado ya obtenido de 4/((a+b)/(c/d)) ms el resultado ya obtenido de
v/w/p.
Undcimo, se sumar el resultado ya obtenido de 4/((a+b)/(c/d)) + v/w/p ms el resultado ya
obtenido de 5*m*n*q.

Se ha utilizado la mnima cantidad posible de parntesis. Pueden usarse parntesis adicionales, lo


que no es un error. Por ejemplo, otra solucin posible que arroja el mismo resultado final es:

e = (4/((a+b)/(c/d))) + ((v/w)/p) + (5*m*n*q)

Note que usando correctamente las reglas de jerarqua, es posible usar menos parejas de
parntesis.

1.7 Expresiones Lgicas


Una expresin lgica combina variables, literales, operadores aritmticos, operadores relacionales
y operadores lgicos. Los operadores relacionales y los operadores lgicos se muestran en las
tablas 3.1 y 3.2.

Tabla 1.3 Operadores relacionales

Operador Significado Ejemplo


> mayor que a > b
>= mayor o igual que a >= b
< menor que a < b
<= menor o igual que a <= b
== igual a a == b
!= diferente de a != b

Tabla 1.4 Operadores lgicos

Operador Significado Ejemplo


! no !a
&& y a && b
|| a || b

Estructuras de Secuencia

2.1 Concepto
2.2 Ejercicios 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, 12, 13
2.1 Concepto
Una estructura secuencial es aquella en la que las instrucciones estan una a continuacin de la
otra siguiendo una secuencia nica, sin cambios de ruta. La estructura secuencial tiene una
entrada y una salida.

En la Figura 4.1 se muestra el diagrama de flujo y el pseudocdigo de una estructura secuencial.

Diagrama de Flujo Pseudocdigo

Inicio
.
.
accin 1
accin 2
accin 3
.
.
Fin

Figura 2.1 Estructura Secuencial: Diagrama de Flujo y Pseudocdigo

2.2 Ejercicios
Ejercicio 1:- Disee un pseudocdigo que halle el rea y el permetro de un rectngulo. Considere
que: area = base x altura y perimetro = 2 x (base+altura).

Algoritmo

INICIO
// Declaracin de variables
REAL base, altura, area, perimetro

// Entrada de datos
LEER base, altura

// Proceso de clculo
area = base*altura
perimetro = 2*(base+altura)

// Salida de resultados
IMPRIMIR area, perimetro
FIN
Ejemplo 2:- Disee un pseudocdigo para convertir una longitud dada en metros a sus
equivalentes en centmetros, pies, pulgadas y yardas. Considere que: 1 metro = 100 centmetros, 1
pulgada = 2.54 centimetros, 1 pie = 12 pulgadas, 1 yarda = 3 pies.

Algoritmo

INICIO
// Declaracin de variables
REAL cmetr,ccent, cpies, cpulg, cyard

// Entrada de datos
LEER cmetr

// Proceso de clculo
ccent = cmetr*100
cpulg = ccent/2.54
cpies = cpulg/12
cyard = cpies/3

// Salida de resultados
IMPRIMIR cpulg, cpies, cyard
FIN

Ejercicio 3:- Una institucin benfica europea ha recibido tres donaciones en soles, dolares y
marcos. La donacin ser repartida en tres rubros: 60% para la implementacin de un centro de
salud, 40% para un comedor de nios y el resto para gastos administrativos. Disee un algoritmo
que determine el monto en euros que le corresponde a cada rubro. Considere que: 1 dlar = 3.52
soles, 1 dlar = 2.08 marcos, 1 dlar = 1.07 euros.

Algoritmo

INICIO
// Declaracin de variables
REAL c soles, cdolares, c marcos, ceuros, rubro1, rubro2, rubro3

// Entrada de datos
LEER csoles, cdolares, cmarcos

// Proceso de clculo
ceuros = (csoles/3.52 + cdolares + cmarcos/2.08)*1.07
rubro1 = ceuros*0.60
rubro2 = ceuros*0.40
rubro3 = ceuros*0.20

// Salida de resultados
IMPRIMIR rubro1, rubro2, rubro3
FIN

Ejercicio 4:- En una competencia atltica de velocidad el tiempo se mide en minutos, segundos y
centsimas de segundo y, el espacio recorrido se mide en metros. Disee un algoritmo para
determinar la velocidad promedio de un atleta en km/hr. Considere que: 1 hora = 60 minutos, 1
minuto = 60 segundos, 1 segundo = 100 centsimas de segundo, 1 kilmetro = 1000 metros.

Algoritmo
INICIO
// Declaracin de variables
ENTERO tmin, tseg, tcen
REAL thor, velkmhr, espmt, espkm

// Entrada de datos
LEER tmin, tseg, tcen, espmt

// Clculo del tiempo total empleado en horas


thor = tmin/60 + tseg/3600 + tcen/360000

// Clculo del espacio recorrido en kilmetros


espkm = espmt/1000

// Clculo de la velocidad en km/hr


velkmhr = espkm/thor

// Salida de resultados
IMPRIMIR velkmhr
FIN

Ejercicio 5:- Disee un algoritmo que determine la cifra de las unidades de un nmero natural.

Solucin 1

Anlisis

Puede comprobarse que la cifra de las unidades de un nmero es igual al resto de la divisin del
nmero entre 10. Observe para ello las siguientes divisiones:

3245 10
5 324

768 10
8 76

9 10
9 0

Podemos concluir entonces que:

unidades = numero % 10

Siendo % el operador residuo. Este operador permite obtener el residuo de una divisin, as como /
permite obtener el cociente.

Algoritmo

INICIO
// Declaracin de variables
ENTERO numero, unidades
// Entrada de datos
LEER numero

// Proceso de clculo
unidades = numero % 10

// Salida de resultados
IMPRIMIR unidades
FIN

Solucin 2

Anlisis

El residuo de una divisin entera puede obtenerse tambin sin recurrir al operador %, de la
siguiente forma:

unidades = numero - (numero / 10) * 10

observe para esto que en la divisin (numero/10) los operandos son enteros por lo que el cociente
ser un entero. As por ejemplo, si numero es igual a 3245, la divisin (numero/10) produce 324,
aunque matemticamente sea 324.5; es decir, se descarta la parte decimal.

Algoritmo

INICIO
// Declaracin de variables
ENTERO numero, unidades

// Entrada de datos
LEER numero

// Proceso de clculo
unidades = numero - (numero/10)*10

// Salida de resultados
IMPRIMIR unidades
FIN

Ejercicio 6:- Disee un algoritmo que determine la suma de las cifras de un nmero entero positivo
de 4 cifras.

Solucin 1

Anlisis

Las cifras pueden ser obtenidas mediante divisiones sucesivas entre 10. Para el efecto, considere
el caso de un nmero N igual a 3245:

3245 10
5 324
unidades = N%10
cociente = N/10

324 10
4 32

decenas = cociente%10
cociente = cociente/10

32 10
2 3

centenas = cociente%10
millares = cociente/10

Algoritmo

INICIO
// Declaracin de variables
ENTERO N, suma, millares, centenas, decenas, unidades, resto

// Entrada de datos
LEER N

// Proceso de clculo
unidades = N%10
cociente = N/10
decenas = cociente%10
cociente = cociente/10
centenas = cociente%10
millares = cociente/10
suma = unidades + decenas + centenas + millares

// Salida de resultados
IMPRIMIR suma
FIN

Solucin 2

Anlisis 2

Considerando que el nmero tiene 4 cifras, las cifras tambin pueden ser obtenidas mediante
divisiones sucesivas entre 1000, 100 y 10. Para el efecto, considere el caso de un nmero N igual
a 3245:

3245 1000
245 3

millares = N/1000
resto = N%1000

245 100
45 2

centenas = resto/100
resto = resto%100

45 10
3 4

decenas = resto/10
unidades = resto%10

Algoritmo

INICIO
// Declaracin de variables
ENTERO N, suma, millares, centenas, decenas, unidades, resto

// Entrada de datos
LEER N

// Proceso de clculo
millares = N/1000
resto = N%1000
centenas = resto/100
resto = resto%100
decenas = resto/10
unidades = resto%10
suma = unidades + decenas + centenas + millares

// Salida de resultados
IMPRIMIR suma
FIN

Ejercicio 7:- Disee un algoritmo que lea la hora actual del da HH:MM:SS y determine cuantas
horas, minutos y segundos restan para culminar el da.

Algoritmo

INICIO
// Declaracin de variables
ENTERO hor1, min1, seg1, hor2, min2, seg2, segres, resto

// Entrada de datos
LEER hor1, min1, seg1

// Clculo de la cantidad de segundos que restan para culminar el da


segres = 86400 - (hor1*3600 + min1*60 + seg1)

// Descomposicin de segres en horas, minutos y segundos


hor2 = segres/3600
resto = segres%3600
min2 = resto/60
seg2 = resto%60
// Salida de resultados
IMPRIMIR hor2, min2, seg2
FIN

Ejercicio 8:- Disee un algoritmo para sumar dos tiempos dados en horas, minutos y segundos.

Algoritmo

INICIO
// Declaracin de variables
ENTERO hor1, min1, seg1, hor2, min2, seg2, hor3, min3, seg3, totseg,
resto

// Entrada de datos
LEER hor1, min1, seg1, hor2, min2, seg2

// Determina la cantidad total de segundos entre los dos tiempos


totseg = (hor1+hor2)*3600 + (min1+min2)*60 + (seg1+seg2)

// Descompone totseg en horas, minutos y segundos


hor3 = totseg/3600
resto = totseg%3600
min3 = resto/60
seg3 = resto%60

// Salida de resultados
IMPRIMIR hor3, min3, seg3
FIN

Ejercicio 9:- El sueldo neto de un vendedor se calcula como la suma de un sueldo bsico de
S/.250 ms el 12% del monto total vendido. Disee un algoritmo que determine el sueldo neto de
un vendedor sabiendo que hizo tres ventas en el mes.

Algoritmo

INICIO
// Declaracin de variables
REAL venta1, venta2, venta3, ventatot, comision, sueldoneto

// Entrada de datos
LEER venta1, venta2, venta3

// Proceso de clculo
ventatot = venta1 + venta2 + venta3
comision = 0.12*ventatot
sueldoneto = 250 + comision

// Salida de resultados
IMPRIMIR sueldoneto
FIN

Ejercicio 10:- Disee un algoritmo que determine el porcentaje de varones y de mujeres que hay
en un saln de clases.

Algoritmo
INICIO
// Declaracin de variables
REAL porcvar, porcmuj
ENTERO varones, mujeres, total

// Entrada de datos
LEER varones, mujeres

// Proceso de clculo
total = varones + mujeres
porcvar = varones*100.0/total
porcmuj = mujeres*100.0/total

// Salida de resultados
IMPRIMIR porcvar, porcmuj
FIN

Ejercicio 11:- En pases de habla inglesa es comn dar la estatura de una persona como la suma
de una cantidad entera de pies ms una cantidad entera de pulgadas. As, la estatura de una
persona podra ser 3' 2" ( 3 pies 2 pulgadas ). Disee un algoritmo que determine la estatura de
una persona en metros, conociendo su estatura en el formato ingls. Considere que: 1 pie = 12 plg,
1 plg = 2.54 cm, 1 m = 100 cm.

Algoritmo

INICIO
// Declaracin de variables
REAL estmt
ENTERO cpies, cplgs

// Entrada de datos
LEER cpies, cplgs

// Proceso de clculo
estmt = (cpies*12 + cplgs)*2.54/100

// Salida de resultados
IMPRIMIR estmt
FIN

Ejercicio 12:- Disee un algoritmo que exprese la capacidad de un disco duro en megabytes,
kilobytes y bytes, conociendo la capacidad del disco en gigabytes. Considere que: 1 kilobyte =
1024 bytes, 1 megabyte = 1024 kilobyte, 1 gigabyte = 1024 megabytes.

Algoritmo

INICIO
// Declaracin de variables
REAL cgigabyte, cmegabyte, ckilobyte, cbyte

// Entrada de datos
LEER cgigabyte

// Proceso de clculo
cmegabyte = cgigabyte*1024
ckilobyte = cmegabyte*1024
cbyte = ckilobyte*1024

// Salida de resultados
IMPRIMIR cmegabyte, ckilobyte, cbyte
FIN

Ejercicio 13:- Disee un algoritmo que intercambie las cifras de las unidades de dos nmeros
naturales.

Algoritmo

INICIO
// Declaracin de variables
ENTERO numero1, numero2, unidades1, unidades2

// Entrada de datos
LEER numero1, numero2

// Determina las cifras de las unidades


unidades1 = n1%10
unidades2 = n2%10

// Intercambia las cifras de las unidades


numero1 = numero1 - unidades1 + unidades2
numero2 = numero2 - unidades2 + unidades1

// Salida de resultados
IMPRIMIR n1, n2
FIN

Estructuras de Seleccin

3.1 Concepto
3.2 Estructura de Seleccin Simple SI
3.3 Estructura de Seleccin Doble SI-SINO
3.4 Estructura de Seleccin Doble en Cascada SI-SINO-SI
3.5 Estructura de Seleccin Mltiple SEGUN
3.6 Ejercicios 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, 12, 13, 14, 15

3.1 Introduccin
Las estructuras de seleccin son estructuras de control utilizadas para la toma decisiones dentro
de un programa. A estas estructuras se conocen tambin como estructuras
selectivas o estructuras de decisin y son las siguientes:

La estructura de seleccin simple (SI).

La estructura de seleccin doble (SI-SINO).


La estructura de seleccin mltiple (SEGUN)

3.2 Estructura de Seleccin Simple SI


La estructura de seleccin simple permite ejecutar una accin o un grupo de acciones slo si se
cumple una determinada condicin. As, en el grfico 3.1, si la condicin es verdadera se ejecuta la
accin acciona; en caso contrario, no se hace nada.

Diagrama de Flujo Pseudocdigo (accin simple)

SI( condicion )
acciona

Pseudocdigo (accin compuesta)

SI( condicion ){
acciona1
acciona2
.
.
.
accionan
}

Figura 3.1 Estructura de Seleccin Simple

Por ejemplo, si se desea cambiar el signo de un nmero nicamente en caso que sea negativo,
podemos escribir:

SI( numero < 0 )


numero = -1 * numero

Si el nmero no es negativo, simplemente esta estructura se pasara por alto y se continuara en la


siguiente instruccin despus del SI.

3.3 Estructura de Seleccin Doble SI - SINO


La estructura de seleccin doble permite seleccionar una ruta de dos rutas posibles en base a la
verdad o falsedad de una condicin. As, en la Figura 3.2, si la condicin es verdadera, se ejecuta
la accin A; en caso contrario, se ejecuta la accin B.

En la Figura 3.2 se muestra el diagrama de flujo y el pseudocdigo de la estructura de seleccin


doble.

Diagrama de Flujo Pseudocdigo (accin simple)

SI( condicion )
acciona
SINO
accionb

Pseudocdigo (accin compuesta)

SI( condicion ){
acciona1
acciona2
.
.
.
accionan
}
SINO{
accionb1
accionb2
.
.
.
accionbn
}

Figura 3.2 Estructura de Seleccin Doble

Por ejemplo, la siguiente estructura de seleccin doble determina si una persona es mayor o menor
de edad:

SI( edad >= 18 )


estado = "Mayor de edad"
SINO
estado = "Menor de edad"

Esto imprime "Mayor de edad" si la persona tiene 18 aos ms e imprime "Menor de edad" si la
persona tiene menos de 18 aos. En cualquiera de los casos, despus de efectuar la impresin, se
ejecutar la primera instruccin que sigue a la estructura SI...SINO.

3.4 Estructura de Seleccin Doble en Cascada SI-SINO-SI


La estructura de seleccin doble en cascada esta formada por varias estructuras de seleccin
doble SI-SINO puestas una a continuacin de otra de forma que a un SI-SINO le sigue otro SI-
SINO.

En la estructura de seleccin doble en cascada, las condiciones se evalan en orden descendente,


pasando de una condicin a otra si la condicin anterior resulta falsa. En el momento que se
encuentra una condicin verdadera, se efecta la accin correspondiente a dicha condicin y se
corta el resto de la estructura. Si todas las condiciones resultan falsas, se efecta la accin
correspondiente al ltimo SINO, que se considera como la accin por defecto.

En la Figura 3.3 se muestra el diagrama de flujo y el pseudocdigo de la estructura de seleccin


doble en cascada.
Diagrama de Flujo Pseudocdigo ( Forma 1 )

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

Pseudocdigo ( Forma 2 )

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

Figura 3.3 Estructura de Seleccin Doble en Cascada

Por ejemplo, la siguiente estructura de seleccin doble en cascada determina el signo de un


nmero entre positivo, negativo o cero:

SI( n > 0 )
signo = "Positivo"
SINO
SI( n < 0 )
signo = "Negativo"
SINO
signo = "Cero"

Usando el otro formato tendramos:

SI( n > 0 )
signo = "Positivo"
SINO SI( n < 0 )
signo = "Negativo"
SINO
signo = "Cero"

3.5 Estructura de Seleccin Mltiple SEGUN


La estructura de seleccin mltiple SEGUN permite elegir una ruta de entre varias rutas posibles,
en base al valor de una variable que acta como selector. La estructura compara el valor
del selector con las constantes c1, c2, ..., cn en orden descendente. En el momento en que se
encuentre una coincidencia, se ejecuta la accin correspondiente a dicha constante y se abandona
la estructura.

En la Figura 3.4 se muestra el diagrama de flujo y el pseudocdigo de la estructura de seleccin


mltiple.

Diagrama de Flujo Pseudocdigo

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

Figura 3.4 Estructura de Seleccin Mltiple

Por ejemplo, la siguiente estructura de seleccin mltiple determina el nombre de la estacin del
ao conociendo el nmero de la estacin (1 para Primavera, 2 para Verano, 3 para Otoo y 4 para
Invierno) :

SEGUN(numeroEstacion){
CASO 1 : nombreEstacion = "Primavera"
CASO 2 : nombreEstacion = "Verano"
CASO 3 : nombreEstacion = "Otoo"
DEFECTO : nombreEstacion = "Invierno"
}

3.6 Ejercicios
Ejercicio 1:- En una playa de estacionamiento cobran S/. 2.5 por hora o fraccin. Disee un
algoritmo que determine cuanto debe pagar un cliente por el estacionamiento de su vehculo,
conociendo el tiempo de estacionamiento en horas y minutos.
Algoritmo 1

INICIO
// Declaracin de variables
ENTERO horas, minutos
REAL pago

// Entrada de datos
LEER horas, minutos

// Si hay alguna fraccin de hora, incrementa las horas a pagar en


una unidad
SI( minutos > 0 )
horas = horas + 1

// Determina el importe a pagar


pago = horas * 2.5

// Salida de resultados
IMPRIMIR pago
FIN

Algoritmo 2

INICIO
// Declaracin de variables
ENTERO horas, minutos, horasPagar
REAL pago

// Entrada de datos
LEER horas, minutos

// Determina el nmero de horas a pagar


SI( minutos > 0 )
horasPagar = horas + 1
SINO
horasPagar = horas

// Determina el importe a pagar


pago = horasPagar * 2.5

// Salida de resultados
IMPRIMIR pago
FIN

Ejercicio 2:- Disee un algoritmo que determine si n nmero es o no es, par positivo.

Algoritmo

INICIO
// Declaracin de variables
REAL numero
CADENA tipoNumero

// Entrada de datos
LEER numero

// Determina si el nmero es o no es, par positivo


SI( (numero%2==0) && (numero>0) )
tipoNumero = "El nmero es par positivo"
SINO
tipoNumero = "El nmero no es par positivo"

// Salida de resultados
IMPRIMIR tipoNumero
FIN

Ejercicio 3:- Disee un algoritmo que lea tres nmeros y determine el nmero mayor.

Algoritmo

INICIO
// Declaracin de variables
REAL numero1, numero2, numero3, numeroMayor

// Entrada de datos
LEER numero1, numero2, numero3

// Determina el mayor
numeroMayor = numero1
SI( numero2 > numeroMayor )
numeroMayor = numero2
SI( numero3 > numeroMayor )
numeroMayor = numero3

// Salida de resultados
IMPRIMIR mayor
FIN

Ejercicio 4:- Una tienda ha puesto en oferta la venta al por mayor de cierto producto, ofreciendo un
descuento del 15% por la compra de ms de 3 docenas y 10% en caso contrario. Adems por la
compra de ms de 3 docenas se obsequia una unidad del producto por cada docena en exceso
sobre 3. Disee un algoritmo que determine el monto de la compra, el monto del descuento, el
monto a pagar y el nmero de unidades de obsequio por la compra de cierta cantidad de docenas
del producto.

Algoritmo

INICIO
// Declaracin de variables
REAL montopag, montocom, montodes, precio
ENTERO docenas, obsequio

// Entrada de datos
LEER docenas, precio

// Determina el monto de la compra


montocom = docenas*precio

// Determina el monto del descuento y el obsequio


SI( docenas > 3 ){
montodes = 0.15*montocom
obsequio = docenas-3
}
SINO{
montodes = 0.10*montocom
obsequio = 0
}

// Determina el monto a pagar


montopag = montocom - montodes

// Salida de resultados
IMPRIMIR montocom, montodes, montopag, obsequio
FIN

Ejercicio 5:- Disee un algoritmo que lea un nmero de tres cifras y determine si es o no capica.
Un nmero es capica si es igual al revs del nmero.

Observacin

Como el nmero tiene tres cifras, para ser capica basta con que la cifra de las unidades sea igual
a la cifra de las centenas. Por ejemplo: 353, 878, etc.

Algoritmo

INICIO
// Salida de resultados
ENTERO numero, unidades, centenas
CADENA tipoNumero

// Entrada de datos
LEER numero

// Si el nmero tiene tres cifras...


SI(numero >= 100 && numero <= 999 ){

// Determina la cifra de las unidades y la cifra de las


centenas
unidades = numero%10
centenas = numero/100

// Determina el tipo de nmero entre capica o no capica


SI( unidades == centenas )
tipoNumero = "El nmero es capica"
SINO
tipoNumero = "El nmero no es capica"

// Muestra el tipo de nmero


IMPRIMIR tipoNumero
}
SINO
IMPRIMIR "Ingrese un nmero de tres cifras"
FIN
Ejercicio 6:- Disee un algoritmo que califique el puntaje obtenido en el lanzamiento de tres dados
en base a la cantidad seis obtenidos, de acuerdo a lo siguiente: tres seis, excelente; dos seis, muy
bien; un seis, regular; ningn seis, psimo.

Algoritmo

INICIO
// Declaracin de variables
ENTERO dado1, dado2, dado3
CADENA calificacion

// Entrada de datos
LEER dado1, dado2, dado3

// Determina la calificacin
SI( dado1 + dado2 + dado3 == 18 )
calificacion = "Excelente"
SINO SI( dado1+dado2 == 12 || dado1+dado3 == 12 || dado2+dado3 ==
12 )
calificacion = "Muy bin"
SINO SI( dado1 == 6 || dado2 == 6 || dado3 == 6 )
calificacion = "Regular"
SINO
calificacion = "Psimo"

// Salida de resultados
IMPRIMIR calificacion
FIN

Ejercicio 7:- Una compaa dedicada al alquiler de automoviles cobra un monto fijo de $30 para
los primeros 300 km de recorrido. Para ms de 300 km y hasta 1000 km, cobra un monto adicional
de $ 0.15 por cada kilmetro en exceso sobre 300. Para ms de 1000 km cobra un monto adicional
de $ 0.10 por cada kilmetro en exceso sobre 1000. Los precios ya incluyen el 18% del impuesto
general a las ventas, IGV. Disee un algoritmo que determine el monto a pagar por el alquiler de un
vehculo y el monto includo del impuesto.

Algoritmo

INICIO
// Declaracin de variables
REAL kilomrec, montopag, montoigv, montofijo = 30, igv = 0.18

// Entrada de datos
LEER kilomrec

// Determina el monto a pagar


SI( kilomrec <= 300 )
montopag = montofijo
SINO SI( kilomrec <= 1000 )
montopag = montofijo + 0.15*(kilomrec-300)
SINO
montopag = montofijo + 0.15*700 + 0.10*(kilomrec-1000)

// Determina el monto del impuesto


montoigv = igv*montopag /(1+igv)
// Salida de resultados
IMPRIMIR montopag, montoigv
FIN

Ejercicio 8:- Disee un algoritmo que determine quienes son contemporneos entre Juan, Mario y
Pedro.

Algoritmo

INICIO
// Declaracin de variables
ENTERO juan, mario, pedro
CADENA contemporaneos

// Entrada de datos
LEER juan, mario, pedro

// Determina quienes son contemporneos


SI( juan == mario && mario == pedro )
contemporaneos = "Los tres son contemporneos"
SINO SI( juan == mario )
contemporaneos = "Juan y Mario son contemporneos"
SINO SI( juan == pedro )
contemporaneos = "Juan y Pedro son contemporneos"
SINO SI( mario == pedro )
contemporaneos = "Mario y Pedro son contemporneos"
SINO
contemporaneos = "No hay contemporneos"

// Salida de resultados
IMPRIMIR contemporaneos
FIN

Ejercicio 9:- El promedio de prcticas de un curso se calcula en base a cuatro prcticas calificadas
de las cuales se elimina la nota menor y se promedian las tres notas ms altas. Disee un
algoritmo que determine la nota eliminada y el promedio de prcticas de un estudiante.

Algoritmo

INICIO
// Declaracin de variables
REAL pc1, pc2, pc3, pc4, pcmenor, promedio

// Entrada de datos
LEER pc1, pc2, pc3, pc4

// Determina la nota menor


pcmenor = pc1
SI( pc2 < pcmenor )
pcmenor = pc2
SI( pc3 < pcmenor )
pcmenor = pc3
SI( pc4 < pcmenor )
pcmenor = pc4

// Determina el promedio
promedio = (pc1 + pc2 + pc3 + pc4 - pcmenor )/3

// Salida de resultados
IMPRIMIR promedio, pcmenor
FIN

Ejercicio 10:- Disee un algoritmo que lea tres longitudes y determine si forman o no un tringulo.
Si es un tringulo determine de que tipo de tringulo se trata entre: equiltero (si tiene tres lados
iguales), issceles (si tiene dos lados iguales) o escaleno (si tiene tres lados desiguales).
Considere que para formar un tringulo se requiere que: "el lado mayor sea menor que la suma de
los otros dos lados".

Algoritmo

INICIO
// Declaracin de variables
REAL L1, L2, L3, suma
CADENA tipoRectangulo

// Entrada de datos
LEER L1, L2, L3<

// Determina el lado mayor


mayor = L1
SI( L2 > mayor )
mayor = L2
SI( L3 > mayor )
mayor = L3

// Determina la suma de los lados a excepcin del lado mayor


suma = L1 + L2 + L3 - mayor

// Determina de que tipo de tringulo se trata


SI( mayor < suma ){
SI( ( L1 == L2 ) && ( L2 == L3 ) )
tipoRectangulo = "Tringulo equiltero"
SINO SI( ( L1 == L2 ) || ( L1 == L3 ) || ( L2 == L3 ) )
tipoRectangulo = "Tringulo issceles"
SINO
tipoRectangulo = "Tringulo escaleno"
}
SINO
tipoRectangulo = "No es un tringulo"

// Salida de resultados
IMPRIMIR tipoRectangulo
FIN

Ejercicio 11:- Disee un algoritmo que lea tres nmeros enteros y determine el menor valor
positivo. Si los nmeros positivos son iguales, dar como menor a cualquiera de ellos.

Algoritmo
INICIO
// Declaracin de variables
ENTERO a, b, c, menor

// Entrada de datos
LEER a, b, c

// Determina el menor

// Aqu a, b y c podran ser positivos


SI( a > 0 ){
menor = a
SI( b > 0 && b < menor )
menor = b
SI( c > 0 && c < menor )
menor = c
}
// Aqu slo b y c podran ser positivos
SINO SI( b > 0 ){
menor = b
SI( c > 0 && c < menor )
menor = c
}
// Aqu slo c podran ser positivos
SINO SI( c > 0 ){
menor = c
}
// Guardamos el indicador -1 para saber que no hay positivos
SINO
menor = -1

// Salida de resultados
SI( menor != -1 )
IMPRIMIR menor
SINO
IMPRIMIR "No se ingres ningn nmero positivo"
FIN

Ejercicio 12:- Disee un algoritmo que lea tres nmeros y los imprima de mayor a menor y de
menor a mayor.

Algoritmo

INICIO
// Declaracin de variables
REAL n1, n2, n3, mayor, menor, medio

// Entrada de datos
LEER n1, n2, n3

// Determina el menor
menor = n1
SI( n2 < menor )
menor = n2
SI( n3 < menor )
menor = n3
// Determina el mayor
mayor = n1
SI( n2 > mayor )
mayor = n2
SI( n3 > mayor )
mayor = n3

// Determina el medio
medio = n1+n2+n3-mayor-menor

// Imprime en orden ascendente


IMPRIMIR menor, medio, mayor

// Imprime en orden descendente


IMPRIMIR mayor, medio, menor
FIN

Ejercicio 13:- Disee un algoritmo para obtener el grado de eficiencia de un operario de una
fbrica de tornillos, de acuerdo a las siguientes condiciones, que se le imponen para un perodo de
prueba:

- Menos de 200 tornillos defectuosos.


- Ms de 10000 tornillos producidos.

El grado de eficiencia se determina de la siguiente manera:

- Si no cumple niguna de las condiciones, grado 5.


- Si slo cumple la primera condicin, grado 6.
- Si slo cumple la segunda condicin, grado 7.
- Si cumple las dos condiciones, grado 8.

Las condiciones impuestas por la fbrica son:

torpro < 200 siendo torpro el nmero de tornillos producidos


tordef > 10000 siendo tordef el nmero de tornillos defectuosos

Algoritmo 1

INICIO
// Declaracin de variables
ENTERO torpro, tordef, grado

// Entrada de datos
LEER torpro, tordef

// Determina el grado de eficiencia


SI( tordef < 200 ){
SI( torpro > 10000 )
grado = 8
SINO
grado = 6
}
SINO{
SI( torpro > 10000 )
grado = 7
SINO
grado = 5
}

// Salida de resultados
IMPRIMIR grado
FIN

Algoritmo 2

INICIO
// Declaracin de variables
ENTERO torpro, tordef, grado

// Entrada de datos
LEER torpro, tordef

// Determina el grado de eficiencia


SI( tordef < 200 && torpro > 10000 )
grado = 8
SINO SI( tordef < 200 )
grado = 6
SINO SI( torpro > 10000 )
grado = 7
SINO
grado = 5

// Salida de resultados
IMPRIMIR grado
FIN

Ejercicio 14:- Se cuenta con los votos obtenidos por Juan, Pedro y Maria en una eleccin
democrtica a la presidencia de un club. Para ganar la eleccin se debe obtener como mnimo el
50% de los votos ms 1. En caso que no haya un ganador se repite la eleccin en una segunda
vuelta. Van a la segunda vuelta los dos candidatos que obtengan la ms alta votacin. Se anula la
eleccin en caso de producirse un empate doble por el segundo lugar o un empate triple. Disee
un algoritmo que determine el resultado de la eleccin.

Algoritmo

INICIO
// Declaracin de variables
ENTERO vjuan, vpedro, vmaria, vmingan
CADENA resultado

// Entrada de datos
LEER vjuan, vpedro, vmaria

// Determina la votacin mnima para ganar


vmingan = (vjuan + vpedro + vmaria)/2 + 1

// Determina el resultado de la eleccin


SI( vjuan >= vmingan )
resultado = "Gana Juan "
SINO SI( vpedro >= vmingan )
resultado = "Gana Pedro"
SINO SI( vmaria >= vmingan )
resultado = "Gana Mara"
SINO SI( vpedro > vjuan && vmaria > vjuan )
resultado = "Pasan a la segunda vuelta Pedro y Mara"
SINO SI( vpedro > vmaria && vjuan > vmaria )
resultado = "Pasan a la segunda vuelta Pedro y Juan"
SINO SI( vmaria > vpedro && vjuan > vpedro )
resultado = "Pasan a la segunda vuelta Mara y Juan "
SINO
resultado = "Eleccin anulada"

// Salida de resultados
IMPRIMIR resultado
FIN

Ejercicio 15:- Disee un algoritmo que lea un nmero entero de 3 cifras, y forme el mayor nmero
posible con las cifras del nmero ingresado. El nmero formado debe tener el mismo signo que el
nmero ingresado.

Algoritmo

INICIO
// Declaracin de variables
ENTERO num1, num2, numaux, uni, dec, cen, menor, mayor,medio

// Entrada de datos
LEER num1

// Si el nmero tiene tres cifras...


SI( ( num1 >= 100 && num1 <= 999 ) && ( num1 >= -999 && num1 <=
-100 ) ){

// Guarda el nmero en una variable auxiliar para preservar el


signo
numaux = num1

// Cambia el signo de num1 en caso de ser negativo


SI( num1 < 0 )
num1 = -num1

// Determina las cifras del nmero


cen = num1/100
dec = (num1%100)/10
uni = (num1%100)%10

// Determina la cifra menor


menor = cen
SI( dec < menor )
menor = dec
SI( uni < menor )
menor = uni
// Determina la cifra mayor
mayor = cen
SI( dec > mayor )
mayor = dec
SI( uni > mayor )
mayor = uni

// Determina la cifra del medio


medio = cen+dec+uni-mayor-menor

// Forma el nuevo nmero


SI( numaux > 0 )
num2 = mayor*100 + medio*10 + menor
SINO
num2 = -1*(menor*100 + medio*10 + mayor)

// Imprime el nuevo nmero


IMPRIMIR num2
}
SINO
IMPRIMIR "El nmero no tiene tres cifras"
FIN