Beruflich Dokumente
Kultur Dokumente
A Reconquista
Bienvenido al curso de Algoritmia. Este es un curso inicial que cubre nicamente los
aspectos bsicos de la algoritmia y por lo mismo esta pensado para personas que se inician en
la programacin de computadoras. Este curso est en constante mejora :
peridicamente reviso los contenidos, aado ms ejercicios, reformulo algunos ejercicios
existentes y quito los inadecuados.
Por ahora el curso es para leerse en lnea sin restricciones de ningn tipo y espero que para
seguir as me hagan llegar sus comentarios y sugerencias, para saber si el curso es de utilidad.
Captulo 1: Introduccin a los Sistemas de Cmputo
1.1
Definicin de Computadora
1.2
Hardware
1.2.1
Procesador o Unidad Central de Proceso
1.2.2
Memoria Principal
1.2.3
Dispositivos de Entrada/Salida
1.2.4
Memoria Auxiliar
1.3
Software
1.3.1
Software de Especfico o de Aplicacin
1.3.2
Software de Sistema
1.4
Lenguajes de Programacin
1.4.1
Lenguajes Mquina
1.4.2
Lenguajes de Bajo Nivel
1.4.3
Lenguajes de Alto Nivel
Captulo 2: Algoritmos, Programas y Conceptos Fundamentales
2.1
Algoritmo vs Programa
2.2
El Pseudocdigo
2.3
Conceptos Fundamentales
2.3.1
Identificadores
2.3.2
Tipos de Datos
2.3.3
Variables
2.3.4
Constantes
2.3.5
Instrucciones Bsicas de Programacin
2.4
Expresiones Aritmticas
2.5
Expresiones Lgicas
2.6
Ejercicios 2.1 2.2
Captulo 3: Solucin de Problemas con la Computadora
3.1
Introduccon
3.2
Anlisis del Problema
3.3
Diseo del Algoritmo
3.4
Implementacin del Algoritmo en la Computadora
Captulo 4: Estructuras de Secuencia
4.1
Concepto
4.2
Ejercicios
Captulo 5: Estructuras de Seleccin
5.1
Introduccin
5.2
Estructura de Seleccin Simple SI
5.3
Estructura de Seleccin Doble SI-SINO
5.4
Estructura de Seleccin Mltiple EN CASO-SEA
5.5
Ejercicios
CAPITULO 1
INTRODUCCIN A LOS SISTEMAS DE COMPUTO
1.1 Definicin de computadora
Una computadora es una mquina electrnica digital capaz de procesar informacin y
producir datos de salida para lo cual requiere de ciertos datos de entrada. El trmino digital
alude al hecho de que la informacin almacenada y procesada por la computadora esta
representada mediante cdigos numricos binarios formados por ceros y unos ( 0 y 1 )
conocidos como bits.
Lo sorprendente de las computadoras es que pueden realizar operaciones complejas
cuando sus circuitos electrnicos solo pueden comparar dos bits o cambiar un bit de 0 a 1.
Como es esto posible?, pues debido a las altas velocidades con que se ejecutan estas
operaciones sencillas.
Para los informticos hay una diferencia entre datos e informacin. Dato vendra a ser la
representacin de algn hecho, concepto o entidad real, es la materia prima de la informacin.
Informacin vendra a ser el resultado del procesamiento de los datos. Para este curso no
haremos distincin entre dato e informacin sino que hablaremos de datos de entrada y datos de
salida.
Un sistema de procesamiento de la informacin involucra tres componentes: datos de
entrada, procesador y datos de salida, como se muestra en la Fig.1.1. El procesador transforma
los datos de entrada en datos de salida ejecutando instrucciones precisas y detalladas que se
denominan programas.
Una computadora esta compuesta por dos elementos fundamentales: Hardware y Software.
El Hardware es la parte fsica de la computadora. Es aquello que podemos ver y tocar.
Esta formado por el monitor, el teclado, el mouse, la unidad del sistema, la impresora, etc.
El Software es la parte lgica de la computadora y esta formado por el conjunto de
programas que controlan el funcionamiento de la computadora.
1.2 El hardware
Daremos aqu una breve descripcin de las partes fundamentales del hardware sin entrar
en detalles internos. Sin hacer distincin de tamaos, cualquier computadora, puede
descomponerse fsicamente en cuatro partes fundamentales:
Procesador (llamado tambin Unidad Central de Proceso o CPU, del ingls, Central
Processing Unit).
Memoria principal.
Dispositivos de entrada y salida E/S.
Memoria auxiliar.
1.3 El software
El Software es el conjunto de datos y programas que usa la computadora y se guardan
en algn dispositivo del hardware como, por ejemplo, un disco duro. El software es intangible
(usted no lo puede tocar). Suponga que tiene un disco flexible conteniendo un programa, cuando
usted borra el programa los tomos y molculas del disco son los mismos que antes, pero ahora
el programa ya no est. Se ha removido algo intangible sin alterar el medio tangible en el que
estaba almacenado.
Un programa es un conjunto detallado de instrucciones que instruyen al procesador para
realizar determinados procesos. Los datos pueden ser cualquier informacin que necesite el
programa: carcteres, nmeros, imgenes, etc. Para efectos de la memoria de la computadora
(principal y secundaria) no hay ninguna distincin entre programas y datos.
Lenguajes mquina.
Lenguajes de bajo nivel.
Lenguajes de alto nivel.
1.4.1 Lenguajes mquina
Los lenguajes mquina permiten escribir instrucciones directamente entendibles por el
procesador. Una instruccin mquina consiste en una secuencia de dgitos binarios (0 y 1) en la
memoria principal, que le indica al procesador que operacin mquina debe realizar. Una
coleccin de instrucciones mquina en la memoria principal se denomina programa en lenguaje
mquina o (ms comumemente) programa ejecutable. Un programa ejecutable tiene,
normalmente, millones de instrucciones mquina.
Por otro lado, cada tipo de procesador tiene su propio lenguaje mquina (su propio juego de
instrucciones). De manera que un programama ejecutable que corre en una computadora
equipada con un procesador Pentium II no podra correr, por ejemplo, en una Apple Power
Macintosh.
Como ejemplo, observe la siguiente instruccin escrita en lenguaje mquina.
1001 1111 1011 1101
Import java.io. *;
public class Bienvenida
{
public static void main( String args[] ) throws IOException
{
System.print.out( "Bienvenido a Java" );
}
}
El cdigo fuente de un programa no puede ser ejecutado por el procesador sino que se
requiere de un proceso previo de traduccin al lenguaje mquina. Este proceso de traduccin
puede llevarse a cabo de una de las siguientes formas enunciadas a continuacin, dependiendo
del lenguaje de programacin:
Traduciendo previamente todo el cdigo fuente a cdigo mquina obtenindose un
cdigo denominado cdigo ejecutable o programa ejecutable. Este programa ejecutable puede
cargarse a la memoria y ejecutarse sin requerir ya del cdigo fuente. Este proceso de traduccin
lo realiza un programa especializado denominado compilador, que es propio del lenguaje de
programacin que se est utilizando. As, existen compiladores para el lenguaje C, compiladores
para el lenguaje C++, compiladores para el lenguaje Pascal, compiladores para el lenguaje Ada,
etc. Desde el punto de vista de la forma de ejecucin, a este tipo de lenguajes se denominan
lenguajes compilados.
Leyendo el cdigo fuente instruccin por instruccin y convirtindolo a cdigo mquina
cada vez que se vaya a ejecutar el programa. Este proceso de traduccin lo realiza un programa
especializado denominado intrprete, que es propio del lenguaje de programacin que se est
utilizando. Un ejemplo de lenguaje interpretado es el lenguaje Basic. Desde el punto de vista de
la forma de ejecucin, aA este tipo de lenguajes se denominan lenguajes interpretados. Cuando
se usa un intrprete humano como intermediario la conversacin es ms lenta que cuando se
conversa directamente. El mismo es verdad para los programas intrpretes de computadora.
Esto contrasta con un programa ejecutable (en los lenguajes compilados) que pueden ser
ejecutados directamente sin necesidad de intermediarios.
Una tercera forma es una forma hbrida y usa tanto un compilador como un intrprete.
En esta, el cdigo fuente se compila generndose un cierto cdigo intermedio (p-code en Visual
Basic, bytecode en Java). Luego, el cdigo intermedio generado es ejecutado por el intrprete.
Desde el punto de vista de la forma de ejecucin, a este tipo de lenguajes se denominan
lenguajes hbridos.
10
CAPITULO 2
ALGORITMOS, PROGRAMAS Y CONCEPTOS
FUNDAMENTALES
2.2 El Pseudocdigo
El pseudocdigo es una herramienta algortmica que permite escribir pseudoprogramas
(una imitacin de un programa real) utilizando un lenguaje de pseudoprogramacin que es una
imitacin de los lenguajes de programacin de alto nivel. As, un pseudocdigo es una
combinacin de smbolos (+, -, *, /, %, >, >=, <, <=,!=, ==, y, o, no), trminos (Leer, Imprimir,
Abrir, Cerrar, Hacer... Mientras, Mientras... Hacer, Para... Mientras, etc.) y otras caractersticas
comnmente utilizadas en uno o ms lenguajes de alto nivel.
No existen reglas que determinen que es o no es un pseudocdigo, sino que vara de un
programador a otro. El objetivo del pseudocdigo es permitir al programador centrarse en los
aspectos lgicos de la solucin evitando las reglas de sintxis de un lenguaje de programacin.
Posteriormente el pseudocdigo debe ser traducido a programa usando un lenguaje de
programacin de alto nivel como Java, C++, C, etc.
11
2.3.1 Identificadores
Un identificador es un nombre que puede darse a una variable, a una constante y en
general a cualquier elemento de un programa que necesite nombrarse.
Los lenguajes de programacin imponen ciertas reglas para la creacin de
identificadores. As, por ejemplo, en el lenguaje Java, existen dos reglas:
El primer carcter debe ser una letra, el smbolo de subrayado o el smbolo de dlar. Los
dems caracteres pueden ser letras, smbolos de subrayado, smbolos de dlar o dgitos.
No puede ser ninguna palabra reservada del lenguaje Java.
12
Real
Booleano
Rango
de
Valores
0 a 65535
-128 a 127
-32768 a 32767
2147483648 a 2147483647
-9223372036854775808 a
9223372036854775807
-3.4 x 1038 a 3.4 x 1038
float
Double
boolean
true, false
13
2.3.3 Variables
Una variable es una localizacin en la memoria principal que almacena un dato que
puede cambiar a lo largo de la ejecucin del programa.
Una variable tiene asociada dos cosas fundamentales: un identificador y un tipo de dato.
El nombre identifica de manera nica la localizacin de memoria donde se almacena el dato. El
tipo de dato especifica la naturaleza de dato que puede almacenar la variable. Segn el tipo de
dato de la variable podemos tener variables enteras, variables reales, variables de carcter,
variables booleanas, etc.
En el grfico siguiente se muestran dos variables con sus contenidos en memoria. La
variable llamada Edad (de tipo entero) cuyo contenido es 27 y la variable llamada Descuento
(de tipo real) cuyo contenido es 23.57.
Edad
Descuento
301
23.57
2.3.4 Constantes
Se denominan constantes a todos aquellos valores que no cambian durante la ejecucin
de un programa. Segn el tipo de dato podemos tener constantes enteras, constantes reales,
constantes de carcter y constantes de cadena.
Constantes enteras
12, 20300, 15, etc.
Constantes reales
3.1416, 2345.456, etc.
Constantes de carcter
'A', 'B', ';', '<', '+', etc.
Constantes de cadena
"Hola", "Algoritmos Computacionales", etc.
Constantes lgicas
verdadero, falso
14
Tipo de Instruccin
Entrada
Asignacin
Salida
15
Despus de la asignacin:
Kilometros
25
12
Vara
15
Despus de la asignacin
Vara toma el valor de varb, luego de lo cual ambas variables tienen el mismo valor. Note
que el valor anterior de vara se destruye de forma irrecuperable.
Varb
12
Vara
12
16
1350
montoDes
150
montoPag
Despus de la asignacin
MontoBru
1350
MontoDes
150
MontoDes
1200
Significado
Suma
Resta
Multiplicacin
Divisin
17
En todos los lenguajes existen los operadores +, -. * y /, mientras que el operador % es propio
de C, C++ y Java.
Notas
1.Si en una operacin ambos operandos son enteros, entonces el resultado de la operacin es
un entero.
2.Si en una operacin uno o ambos operandos son reales, entonces el resultado de la operacin
es un real.
3.El operador / produce un cociente entero si los dos operandos son enteros. Esto significa
que se pierde la parte decimal si la divisin no es exacta. Esta es una consecuencia de la nota 1.
4.El operador / produce un cociente real si uno o los dos operandos son reales. Esta es una
consecuencia de la nota 2.
Por ejemplo
7 / 2 es igual a 3 y no 3.5 como lo es matemticamente. Esto debido a que 7 y 2 son enteros y al
dividir dos enteros se pierde la parte fraccionaria, no se redondea.
En cambio:
7.0 / 2 es igual a 3.5 ya que si uno o los dos operandos son reales, entonces el resultado es real.
En este caso 7.0 es real.
Ejemplo 2.5:- Expresiones aritmticas.
sueldoBru = sueldoBas + 0.15*montoVen
numero = centenas*100 + decenas*10 + unidades
e = a*b*b / 3 + (a*a + b) / (b + c)
Ejemplo 2.6:- Disee un algoritmo que determine el cociente y el residuo de una divisin entera.
VARIABLES
ENTERO m, m
INICIO
LEER m, n
cociente = m/n
residuo = m%n
IMPRIMIR residuo, cociente
FIN
Nota:- Observe que m/n es entero debido a que amnbas variables son enteras.
18
En la tabla 2.4 se muestran los operadores relacionales y en la tabla 2.5 se muestran los
operadores lgicos:
Significado
mayor
mayor o igual que
menor
menor o igual que
igual a
diferente de
Significado
negacin
conjuncin
disyuncin
a. B es mayor que 2.
b. M es menor igual que 5 pero mayor que 25.
c. P es igual a 6 mayor que Q.
d. N es par menor que 50.
e. M es mayor que A, B y C.
f. Z esta en el intervalo de 4 a 100.
g. T es igual a 2, 3 4.
a. B > 2
b. ( M <= 5 ) y ( M > 25 )
c. ( P == 6 ) o ( P > Q )
d. ( ( N % 2 ) == 0 ) y ( N < 50 )
e. (M > A ) y ( M > B ) y ( M > C )
f. (Z >= 4 ) y ( Z <= 100 )
g. (T == 2 ) o ( T == 3 ) o ( T== 4 )
2.6 Ejercicios
Ejercicio 2.1:-Considere dos variables A y B, cuyos valores se muestran en el grfico, determine
que valores tendrn A y B luego de las siguientes instrucciones de asignacin:
A
12
B
13
19
A=B+A
B=B+A
Solucin:
A=B+A
A
25
B
13
B=B+A
A
25
B
38
Ejercicio 2.2:- Cules son los valores de A y B luego de las siguientes instrucciones?
A=3
B=4
C = 2*A*B
A = A+2
B = C-A
Solucin:
A=3
asigna a A el valor 3
B=4
asigna a B el valor 4
C = 2*A*B
asigna a C el valor 24 (resultado de calcular 2*3*4)
A = A+2
asigna a A el valor 5 (resultado de calcular 3+2), esto borra el valor 3 que tena
anteriormente
B = C-A
asigna a B el valor 19 (resultado de calcular 24-5), esto borra el valor 4 que tena
anteriormente
20
CAPITULO 3
SOLUCION DE PROBLEMAS CON LA COMPUTADORA
3.1 Introduccin
Etimolgicamente, la palabra problema deriva del griego proballein y significa algo
lanzado hacia delante. Un problema es un asunto o un conjunto de cuestiones que se plantean
para ser resueltas. La naturaleza de los problemas vara con el mbito o con el contexto donde
estn planteados; as, existen problemas matemticos, qumicos, filosficos, etc. Consideramos
aqu slo aquellos problemas cuya solucin se puede calcular utilizando una serie de reglas
introducidas en la computadora.
No existe un mtodo universal que permita resolver cualquier problema. En general, la
resolucin de problemas es un proceso creativo donde el conocimiento, la habilidad y la
experiencia tienen un papel importante. El proceder de manera sistemtica (sobre todo si se trata
de problemas complejos) puede ayudar en la solucin.
En general, la solucin de problemas con la computadora se puede dividir en tres etapas:
Anlisis del problema
Diseo del algoritmo
Implementacin del algoritmo en la computadora
21
Para un diseo eficiente del algoritmo es importante abordar la solucin mediante una
metodologa de diseo. Una estrategia popular consiste en aplicar el dicho romano "divide y
vencers". Este mtodo consiste en dividir el problema en subproblemas ms simples, para
facilitar la comprensin y solucin del problema. Si algn subproblema todava es complejo
puede a su vez subdivirse en otros subproblemas. Este proceso de subdivisin puede continuar
hasta obetener subproblemas simples de resolver. A esta metodologa de diseo se conoce como
el mtodo del diseo modular descendente, debido a que cada subproblema puede resolverse
mediante un mdulo de programa.
22
Datos de entrada
Nmero de unidades adquiridas: unidades
Costo del producto: S/. 25.45
Impuesto: 18%
Datos de salida
Monto bruto: montobruto
Monto del impuesto: montoimpuesto
Monto a pagar: montopagar
Observe que el costo del producto y el porcentaje del impuesto ya tienen valores
preestablecidos. Segn esto, estos datos no requerirn ser ingresados.
Diseo del algoritmo
Primer diseo descendente
En un primer momento el problema puede descomponerse de manera bastante general. En este
caso se ha descompuesto en tres pasos.
Inicio
1. Leer unidades
2. Clculo de montos
3. Imprimir montoBruto, montoImpuesto, montoPagar
Fin
Primer refinamiento
Luego de un refinamiento en el subproblema Clculo de montos llegamos al siguiente diseo:
Inicio
1. Leer unidades
2. Clculo de montos
2.1 Calcular el monto bruto
2.2 Calcular el monto del impuesto
2.3 Calcular el monto a pagar
3. Imprimir montoBruto, montoImpuesto, montoPagar
Fin
Segundo refinamiento
Finalmente llegamos al algoritmo definitvo:
Inicio
// Ingreso de datos
Leer unidades
// Clculo de montos
montobruto = unidades * 25.45
montoimpuesto = montobruto * 0.18
montopagar = montobruto + montoimpuesto
// Salida de resultados
23
24
25
26
CAPITULO 4
ESTRUCTURAS DE SECUENCIAS
4.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 3.1 se muestra el pseudocdigo de una estructura secuencial.
inicio
accin 1
accin 2
accin 3
.
.
.
fin
Figura 3.1 Pseudocdigo de una estructura secuencial
4.2 Ejercicios
Ejercicio 4.1:- Disee un pseudocdigo que halle el rea y el permetro de un rectngulo.
Considere las siguientes frmulas:
area = base x altura, perimetro = 2 x (base+altura).
Anlisis
Datos de entrada
Base del rectngulo ( base )
Altura del rectngulo ( altura )
Datos de salida
Area del rectngulo ( area )
Permetro del rectngulo ( perimetro )
Algoritmo
VARIABLES
REAL base, altura, area, perimetro
27
INICIO
LEER base, altura
area = base*altura
perimetro = 2*(base+altura)
IMPRIMIR area, perimetro
FIN
Ejercicio 4.2:- Disee un pseudocdigo para convertir una longitud dada en centmetros a pies.
Considere que:
1 pie = 30.48 centmetros.
Anlisis
Datos de entrada
Cantidad en centmetros ( cantCent)
Datos de salida
Cantidad en pies ( cantPies )
Consideraciones
Para convertir cantPies a cantCent debemos buscar una frmula que relacione estas dos
variables, para esto podemos
recurrir a la regla de tres simple como se muestra a continuacin:
pies
1
cantPies
centmetros
30.48
cantCent
28
29
Anlisis
Datos de entrada
Espacio recorrido en metros ( espacioMet )
Tiempo empleado en segundos ( tiempoSeg )
Datos de salida
Velocidad en km/hr ( velocidadKmHr )
Consideraciones
De la frmula de la velocidad obtenemos:
velocidadKmHr = espacio en kilmetros / tiempo en horas
Tomando en cuenta las variables del problema:
velocidadKmHr = (espacioMet/1000) / (tiempoSeg/3600)
Simplificando:
velocidadKmHr = (espacioMet*18)/(tiempoHr*5)
Algoritmo
VARIABLES
REAL espacioMet, tiempoSeg, velocidadKmHr
INICIO
LEER espacioMet, tiempoSeg
velocidadKmHr = (espacioMet*18)/(tiempoHr*5)
IMPRIMIR velocidadKmHr
FIN
Ejercicio 4.6:- En una competencia atltica el tiempo se mide en minutos, segundos y
centsimas de segundo. Disee un algoritmo para determinar el tiempo total empleado por un
atleta, en segundos.
Anlisis
Datos de entrada
Cantidad de minutos ( cantMin )
Cantidad de segundos ( cantSeg )
Cantidad de centsimas de segundo ( cantCen )
Datos de salida
Cantidad total de segundos
Consideraciones
30
31
Observe que para la segunda y tercera divisin se requiere el residuo de la divisin anterior, el
que almacenaremos en la variable R. As, el proceso puede expresarse como:
millares = cociente de N 1000
R = residuo de N 1000
centenas = cociente de R 100
R = residuo de R 100
decenas = cociente de R 10
R = residuo de R 10
unidades = R
Para obtener el cociente de una divisin entera simplemente aplicamos el operador cociente /
puesto que el cociente de dos cantidades enteras es un valor entero ( lo que en divisin entera se
conoce simplemente como el cociente ). As:
millares = cociente de N 1000
Se expresa como:
millares = N/1000
Ya que tanto N como 1000 son valores enteros.
Para calcular el residuo de una divisin entera usamos el operador porcentaje %. As:
R = residuo de N 1000
Se expresa como:
R = N % 1000
Algoritmo
VARIABLES
ENTERO N, suma, millares, centenas, decenas, unidades, R
INICIO
LEER N
millares = N/1000
R
= N%1000
centenas = R/100
R
= R%100
decenas = R/10
R
= R%10
unidades = R
suma
= unidades + decenas + centenas + millares
IMPRIMIR suma
FIN
Ejercicio 4.8:- Disee un algoritmo para cifrar claves numricas para una empresa. Cada clave
es un nmero entero de 4 dgitos. El proceso de cifrado es el siguiente: a cada dgito de la clave
normal se suma 7 y se obtiene el residuo de dividir la suma entre 10, el resultado es el dgito
correspondiente de la clave cifrada.
32
Anlisis
Datos de entrada
Clave normal ( clavenorm )
Datos de salida
Clave cifrada ( clavecifr )
Datos auxiliares
Cifras de la clave normal y luego de la clave cifrada ( unidades, decenas, centenas, millares )
Residuos obtenidos en la descomposicin de la clave normal ( resto )
Consideraciones
De acuerdo a la lectura del problema, el cifrado cumple la siguiente relacin:
digitocifrado = (digitonormal+7)%10
Algoritmo
VARIABLES
ENTERO clavenorm, clavecifr, millares, centenas, decenas, unidades, resto
INICIO
LEER clavenorm
// Descomposicin de la clave normal en dgitos
millares = clavenorm/1000
resto = clavenorm%1000
centenas = resto/100
resto = resto%100
decenas = resto/10
unidades = resto%10
// Determinacin de las cifras de la clave cifrada
millares = (millares+7)%10
centenas = (centenas+7)%10
decenas = (decenas+7)%10
unidades = (unidades+7)%10
// Formacin de la clave cifrada
clavecifr = millares*1000 + centenas*100 + decenas*10 + unidades
IMPRIMIR clavecifr
FIN
Ejercicio 4.9:- Se cuenta con tres cantidades de dinero en soles, dlares y marcos. Disee un
algoritmo que determine el monto total del dinero en euros. Considere los siguientes tipos de
cambio: 1 dlar = 3.48 soles, 1 dlar = 1.07 euros, 1 dlar = 2.08 marcos.
Anlisis
Datos de entrada
33
Algoritmo
VARIABLES
ENTERO hor1, min1, seg1, hor2, min2, seg2, segres, resto
INICIO
34
35
CAPITULO 5
36
ESTRUCTURAS DE SELECCION
5.1 Introduccin
En el desarrollo de un algoritmo es frecuente la necesidad de tomar una decisin antes
de efectuar una accin o un conjunto de acciones. Estas tomas de decisiones dependen de ciertas
condiciones que hacen variar el flujo de control del programa, que debe seleccionar entre dos o
ms rutas posibles.
Para seleccionar una ruta posible, en el flujo de control de un programa, se requieren de
estructuras de seleccin. En una estructura de seleccin se evala una condicin y en funcin
del resultado (verdadero falso) se elige una ruta u otra. Las condiciones se especifican usando
expresiones lgicas.
Las estructuras selectivas o de seleccin se clasifican en:
Estructura de seleccin simple (SI).
Estructura de seleccin doble (SI - SINO).
Estructura de seleccin mltiple (EN CASO - SEA)
Ejemplo 5.1:- Disee un algoritmo que determine si una persona es mayor o menor de edad. Se
consideran personas mayores de edad a partir de 18 aos.
Vea el ejemplo 5.4 para una solucin ms eficiente usando seleccin doble.
Algoritmo 1
VARIABLES
ENTERO edad // Edad de la persona
CADENA mensaje // Mensaje de salida
INICIO
37
LEER edad
// Asumimos que la persona es menor de edad
mensaje = "menor de edad"
// Pero si la persona es mayor de edad, cambiamos el mensaje
SI( edad >= 18 )
mensaje = "mayor de edad"
FIN_SI
IMPRIMIR mensaje
FIN
Algoritmo 2
VARIABLES
ENTERO edad // Edad de la persona
CADENA mensaje // Mensaje de salida
INICIO
LEER edad
// Si es menor de edad
SI( edad < 18 )
mensaje = "menor de edad"
FIN_SI
// Si es mayor de edad
SI( edad >= 18 )
mensaje = "mayor de edad"
FIN_SI
IMPRIMIR mensaje
FIN
Ejemplo 5.2:- Disee un algoritmo que determine el mayor de tres nmeros. Considere que los
tres nmeros son diferentes entre si.
Algoritmo
VARIABLES
REAL a, b, c, mayor // Los tres nmeros y el mayor
INICIO
LEER a, b, c
// Asumimos que el primero es el mayor
mayor = a
// Pero si b supera al mayor, b pasa a ser el mayor
SI( b > mayor )
mayor = b
FIN_SI
// Pero si c supera al mayor, c pasa a ser el mayor
38
accin A2
FIN_SI
Figura 5.2 Estructura de seleccin doble: pseudocdigo
40
SI( condicin C1 )
accin A1
SINO
SI( condicin C2 )
accin A2
SINO
SI( condicin C3 )
accin A3
.
.
.
SINO
accin An
FIN_SI
FIN_SI
FIN_SI
Figura 5.3 Seleccin doble en cascada: Forma 1
SI( condicin C1 )
accin A1
41
42
INICIO
LEER n
SI( n > 0 )
mensaje = "Positivo"
SINO SI( n < 0 )
mensaje = "Negativo"
SINO
mensaje = "Cero"
FIN_SI
IMPRIMIR mensaje
FIN
Ejemplo 5.7:- Disee un algoritmo que lea un nmero entero en el intervalo de 1 a 7 e imprima
el nombre del da correspondiente. Considere 1 para domingo, 2 para lunes, 3 para martes, etc.
Vea el Ejemplo 5.8 para una solucin usando seleccin mltiple.
Algoritmo
VARIABLES
ENTERO dia // Nmero del da de la semana
CADENA mensaje // Nombre del da de la semana
INICIO
LEER dia
SI( dia == 1 )
mensaje = "Domingo"
SINO SI( dia == 2 )
mensaje = "Lunes"
SINO SI( dia == 3 )
mensaje = "Martes"
SINO SI ( dia == 4 )
mensaje = "Mircoles"
SINO SI( dia == 5 )
mensaje = "Jueves"
SINO SI ( dia == 6 )
mensaje = "Viernes"
SINO
mensaje = "Sbado"
FIN_SI
IMPRIMIR mensaje
FIN
43
44
Se dice que una estructura SI ( o SI-SINO ) esta anidada cuando esta contenida dentro
de otra estructura SI o dentro de otra estructura SI-SINO. No existe lmite en cuanto al nivel de
anidamiento.
Por ejemplo, una estructura SI con tres niveles de anidamiento tendra el siguiente formato:
SI( condicin C1 )
accin A1
SI( condicin C2 )
accin A2
SI( condicin C3 )
accin A3
FIN_SI
FIN_SI
FIN_SI
En general, el anidamiento podra evitarse usando el operador lgico "y". As, la anterior
seleccin SI anidada puede descomponerse en tres estructuras de seleccin simple no anidadas,
como se muestra a continuacin.
SI( condicin C1 )
accin A1
FIN_SI
SI( condicin C1 y condicin C2 )
accin A2
FIN_SI
SI( condicin C1 y condicin C2 y condicin C3 )
accin A3
FIN_SI
La estructura de seleccin doble en cascada es un caso especial de la estructura SI anidada.
Ejemplo 5.9:- Para ingresar a un cierto espectculo se requiere ser varn mayor de 18 aos.
Disee un algoritmo que decida si una persona puede o no ingresar al espectculo.
Algoritmo 1 : Sin usar el operador lgico "y"
VARIABLES
ENTERO edad // Edad de la persona
CADENA mensaje // Mensaje de salida
CARACTER sexo // Sexo de la persona
INICIO
LEER edad, sexo
SI( edad > 18 )
SI( sexo == 'm' )
mensaje = "Puede ingresar"
SINO
mensaje = "No puede ingresar"
FIN_SI
SINO
mensaje = "No puede ingresar"
45
FIN_SI
IMPRIMIR mensaje
FIN
Algoritmo 2 : Usando el operador lgico "y"
VARIABLES
ENTERO edad // Edad de la persona
CADENA mensaje // Mensaje de salida
CARACTER sexo // Sexo de la persona
INICIO
LEER edad, sexo
SI( edad > 18 y sexo == 'm' )
mensaje = "Puede ingresar"
SINO
mensaje = "No puede ingresar"
FIN_SI
IMPRIMIR mensaje
FIN
Ejemplo 5.10:- Una empresa ha decidido clasificar a sus empleados en cuatro grupos:
Grupo 1: Solteros con menos de 25 aos.
Grupo 2: Solteros con 25 aos a mas.
Grupo 3: Casados con menos de 34 aos.
Grupo 4: Casados con 34 aos a mas.
Disee un algoritmo que determine el grupo que le corresponde a un empleado.
Algoritmo 1 : Sin usar el operador lgico "y"
VARIABLES
ENTERO edad
// Edad de la persona
CARACTER estcivil // Estado civil del empleado ('s'=soltero, 'c'=casado)
CADENA mensaje // Mensaje de salida
INICIO
LEER edad, estcivil
SI( estcivil == 's' )
SI( edad < 25 )
mensaje = "Grupo 1"
SINO
mensaje = "Grupo 2"
FIN_SI
SINO
SI( edad < 34 )
mensaje = "Grupo 3"
SINO
mensaje = "Grupo 4"
FIN_SI
46
FIN_SI
IMPRIMIR mensaje
FIN
Algoritmo 2 : Usando el operador lgico "y"
VARIABLES
ENTERO edad
// Edad de la persona
CARACTER estcivil // Estado civil del empleado ('s'=soltero, 'c'=casado)
CADENA mensaje // Mensaje de salida
INICIO
LEER edad, estcivil
SI( estcivil == 's' y edad < 25 )
mensaje = "Grupo 1"
SINO SI( estcivil == 's' y edad >= 25 )
mensaje = "Grupo 2"
SINO SI( estcivil == 'c' y edad < 34 )
mensaje = "Grupo 3"
SINO
mensaje = "Grupo 4"
FIN_SI
IMPRIMIR mensaje
FIN
5.4 Ejercicios
Ejercicio 5.1:- Disee un algoritmo que determine el nmero de elementos que forman parte de
la interseccin de dos conjuntos de nmeros enteros consecutivos. As, el nmero de elementos
de la interseccin de los conjuntos: A = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11} y B = {8, 9, 10, 11, 12, 13,
14, 15, 16, 17 } es 4.
Algoritmo 1 : Sin usar el operador lgico "y"
VARIABLES
ENTERO mina, maxa, // Elementos mnimo y mximo del conjunto A
minb, maxb, // Elementos mnimo y mximo del conjunto B
numelem // Nmero de elementos de la interseccin
INICIO
LEER mina, maxa, minb, maxb
SI( minb <= maxa)
SI( maxa <= maxb )
numelem = maxa-minb+1;
SINO
numelem = maxb-minb+1;
FIN_SI
SINO SI( mina <= maxb )
SI( maxb <= maxa )
numelem = maxb-mina+1;
SINO
numelem = maxa-mina+1
47
FIN_SI
SINO
numelem = 0
FIN_SI
FIN
Algoritmo 2 : Usando el operador lgico "y"
VARIABLES
ENTERO mina, maxa, // Elementos mnimo y mximo del conjunto A
minb, maxb, // Elementos mnimo y mximo del conjunto B
numelem // Nmero de elementos de la interseccin
INICIO
LEER mina, maxa, minb, maxb
SI( minb <= maxa y maxa <= maxb )
numelem = maxa-minb+1;
SINO SI( minb <= maxa y maxa > maxb )
numelem = maxb-minb+1;
SINO SI( mina <= maxb y maxb <= maxa )
numelem = maxb-mina+1;
SINO SI( mina <= maxb y maxb > maxa )
numelem = maxa-mina+1
SINO
numelem = 0
FIN_SI
FIN
Ejercicio 5.2:- Una compaa dedicada al alquiler de automoviles cobra $30 hasta un mximo
de 300 km de distancia recorrida. Para ms de 300 km y hasta 1000 km, cobra $30 ms un
monto adicional de $ 0.15 por cada kilmetro en exceso sobre 300. Para ms de 1000 km cobra
$30 ms 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
CONSTANTES
REAL IGV = 0.18 // Porcentaje del impuesto general a las ventas
VARIABLES
REAL kilomIni, // Lectura inicial del contador de kilmetros
kilomFin, // Lectura final del contador de kilmetros
kilomRec, // Kilmetros recorridos
montoFijo,// Monto fijo
montoAdic,// Monto adicional
montoPag, // Monto a pagar
montoIgv // Monto del impuesto general a las ventas, IGV
INICIO
LEER kilomIni, kilomFin
kilomRec = kilomIni - kilomFin
// Cculo el monto fijo, por el total de kilmetros recorridos
48
montoFijo = 30*kilomRec
// Clculo del monto adicional, por los kilmetros excedidos
SI( kilomRec <= 300 )
montoAdic = 0
SINO SI( kilomRec <= 1000 )
montoAdic = 0.15*(kilomRec-300)
SINO
montoAdic = 0.15*700 + 0.10*(kilomRec-1000)
FIN_SI
// Clculo del monto a pagar y del monto del impuesto
montoPag = montoFijo + montoAdic
montoIgv = IGV*montoPag /(1+IGV)
IMPRIMIR montoPag, montoIgv
FIN
Ejercicio 5.3:- Disee un algoritmo que determine quien tiene la mayor edad entre Juan, Mario
y Pedro. Considere que dos pueden tener la mayor edad o ser contemporneos los tres.
Algoritmo
VARIABLES
ENTERO edjuan, // Edad de Juan
edmario, // Edad de Mario
edpedro // Edad de Pedro
CADENA mensaje // Mensaje de salida
INICIO
LEER edjuan, edmario, edpedro
SI( edjuan > edmario y edjuan > edpedro )
mensaje = "Juan es el mayor"
SINO SI( edmario > edjuan y edmario > edpedro )
mensaje = "Mario es el mayor"
SINO SI( edpedro > edjuan y edpedro > edmario )
mensaje = "Pedro es el mayor"
SINO SI( edjuan == edmario y edmario > edpedro )
mensaje = "Juan y Mario son los mayores"
SINO SI( edjuan == edpedro y edpedro > edmario )
mensaje = "Juan y Pedro son los mayores"
SINO SI( edmario == edpedro y edpedro > edjuan )
mensaje = "Mario y Pedro son los mayores"
SINO
mensaje = "Los tres son contemporneos"
FIN_SI
IMPRIMIR mensaje
FIN
Ejercicio 5.4:- En una playa de estacionamiento de vehculos se cobra S/. 2.5 por hora o
fraccin. La medicin del tiempo se efecta anotando la hora de entrada y la hora de la salida,
ambas en el formato HH:MM, segn un reloj de 24 horas. Disee un algoritmo para determinar
49
el monto que debe pagar un cliente por el estacionamiento de su vehculo. Considere que tanto
la
hora de entrada como de salida corresponden al mismo da.
Algoritmo
VARIABLES
ENTERO hore, mine, // Hora y minutos de entrada
hors, mins, // Hora y minutos de salida
tiempoMin // Tiempo de estacionamiento en minutos
horPag, // Horas a pagar
resMin // Residuo en minutos de tiempoMin entre 60
REAL montoPag, // Monto a pagar
INICIO
LEER hore, mine, hors, mins
// Determina el tiempo empleado en minutos
tiempoMin = (hors-hore)*60 + (mins-mine)
// Determina la cantidad entera de horas a pagar
// Si sobran minutos, entonces se cobra como una hora adicional
horPag = tiempoMin/60 // Cantidad entera de horas
resMin = tiempoMin%60 // Minutos de sobra
SI( residuo != 0 ) // Si sobran minutos
horPag = horPag + 1
FIN
// Determina el monto a pagar
montoPag = 2.5*horPag
IMPRIMIR montoPag
FIN
Ejercicio 5.5:- El promedio de prcticas de un curso se calcula en base a cuatro prcticas
calificadas de las cuales se promedian las tres notas ms altas eliminndose la nota menor.
Disee un algoritmo que determine el promedio de prcticas de un estudiante y la nota de
prctica eliminada.
Algoritmo
VARIABLES
ENTERO pc1, pc2, pc3, pc4 // Prcticas calificadas
notaMenor // Nota de prctica eliminada
REAL promPrac // Promedio de prcticas
INICIO
LEER pc1, pc2, pc3, pc4
// Determina la nota menor
notaMenor = pc1
SI( pc2 < notaMenor )
notaMenor = pc2
FIN_SI
SI( pc3 < notaMenor )
50
notaMenor = pc3
FIN_SI
SI( pc4 < notaMenor )
notaMenor = pc4
FIN_SI
// Determina el promedio de prcticas
promPrac = (pc1 + pc2 + pc3 + pc4 - notaMenor )/3.0
IMPRIMIR promPrac, notaMenor
FIN
Ejercicio 5.6:- 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".
Algoritmo 1 : usando operadores lgicos
VARIABLES
REAL L1, L2, L3 // Las tres longitudes
CADENA mensaje // Mensaje de salida
INICIO
LEER L1, L2, L3
// Determina la mayor longitud
mayor = L1
SI( L2 > mayor )
mayor = L2
FIN_SI
SI( L3 > mayor )
mayor = L3
FIN_SI
// Determina la suma de los otros dos lados
suma = L1 + L2 + L3 - mayor
// Determina si las longitudes forman o no un tringulo
SI( mayor < suma )
SI( ( L1 == L2 ) y ( L2 == L3 ) )
mensaje = "Tringulo equiltero"
SINO SI( ( L1 == L2 ) o ( L1 == L3 ) o ( L2 == L3 ) )
mensaje = "Tringulo issceles"
SINO
mensaje = "Tringulo escaleno"
FIN_SI
SINO
mensaje = "No es un tringulo"
FIN_SI
IMPRIMIR mensaje
FIN
51
52
menor = a
SI( b > 0 y b < menor )
menor = b
FIN_SI
SI( c > 0 y c < menor )
menor = c
FIN_SI
mensaje = mensaje + menor
SINO SI( b > 0 )
menor = b
SI( a > 0 y a < menor )
menor = a
FIN_SI
SI( c > 0 y c < menor )
menor = c
FIN_SI
mensaje = mensaje + menor
SINO SI( c > 0 )
menor = c
SI( a > 0 y a < menor )
menor = a
FIN_SI
SI( b > 0 y b < menor )
menor = b
FIN_SI
mensaje = mensaje + menor
SINO
mensaje = "No hay ningn nmero positivo"
FIN_SI
IMPRIMIR mensaje
FIN
53