Vous êtes sur la page 1sur 113

CURSO DE ALGORITMOS Y

ESTRUCTURA DE DATOS
Primera Parte

Enero 2011

Curso de Algoritmos y Estructura de Datos

Este pequeo compendio va dirigido a toda la gente chvere de la Facultad de Ingeniera


Industrial y de Sistemas de la Universidad Nacional de Ingeniera que estn llevando el
curso de Algoritmos y Estructura de Datos, ya sea la primera vez o la segunda, la
tercera, o la ensima vez, no importa, con tal que se esfuercen y sigan estudiando ya que
todo se aprende con esfuerzo y prctica constante.
Mi objetivo principal es ayudar, de alguna forma, a todos los estudiantes que llevan por
primera vez este curso, debido a que muchos se enfrentan al curso sin tener algn material
con qu guiarse. Los que ya lo han llevado antes, sin excepcin, se habrn dado cuenta que
cuando vemos por primera vez el curso, nos encontramos frente a algo totalmente nuevo y
mientras las clases van avanzando los temas se complican. En vista de que en este curso el
nmero de desaprobados es bastante, y solo son pocos los que aprueban (generalmente los
que ya lo han llevado antes), es que me anim a transcribir las primeras clases de mi
cuaderno, buscar problemas y ordenarlos conforme el nivel aumente, y compartirlo con
todos.
Este libro no ha sido revisado por algn experto ni editado por una editorial ni nada, al
igual que ustedes, soy un estudiante y deseo compartir lo que en algn me sirvi para
aprender y aprobar el curso. Por falta de tiempo, no puedo presentarles el curso completo,
pero s est todo lo relacionado a la primera parte, acerca de los conceptos bsicos, los
datos simples, y las estructuras de control. Este texto debe ser dominado a la perfeccin
para que no tengan problemas con los temas restantes.
Los ejercicios que presento, fueron extrados de distintas fuentes, algunos corresponden a
los resueltos en clase por mis profesores y otros que han sido extrados de prcticas y
libros, como tambin de un texto denominado cuaderno de algoritmo que encontr en la
pgina web www.ingfiis.tk en el enlace 2do ciclo

y apuntes que he realizado mientras

llev el curso. Si quisieran profundizar en la teora, les recomendara el libro Fundamentos


de Programacin, algoritmos y estructura de datos y objetos de Luis Joyanes Aguilar.
Algunas sugerencias:
Hasta la fecha, los profesores que regularmente ensean el curso son: Inga, Acosta,
Grimanesa y Crdova.
Todos los que llevamos el curso por primera vez necesitamos una buena base y la mejor
profesora, creo yo, es la profesora Inga. No tuve la suerte de llevar con ella, pero todos

Curso de Algoritmos y Estructura de Datos

comentan que es ordenada y explica muy bien, adems que desarrolla una gran variedad
de ejercicios y problemas.
Sin nimo de ofender, los tres profesores que siguen tienen algunas deficiencias. El profesor
Acosta es ordenado, es puntual en la revisin de los exmenes, es muy estricto en su
calificacin, avanza bastante, pero no explica muy bien y tiene la costumbre de realizar
problemas con un nivel muy complejo cuando debera empezar con ejercicios simples,
adems que es arrogante. De la profesora Grimanesa puedo rescatar que es bien ordenada
y organizada, deja tareas y aumenta puntos a los que lo resuelven, pero avanza despacio y
se retrasa mucho en las clases. Generalmente, los que se matriculan con ella son los
repitentes que ya tienen la base y solo desean aprobar el curso. Si es que llevan el curso por
primera vez, no sera muy recomendable. El profesor Crdova es un ingeniero con mucha
experiencia, domina su materia pero sus clases no son ordenadas (me refiero a la pizarra),
adems que hay que hacer un esfuerzo para entenderle. Recalco que no pretendo ofender a
los profesores, solo darle unas sugerencias. (Ya que yo llev el curso tres veces con los tres
ltimos profesores mencionados)
Una ltima sugerencia es la siguiente: Cada profesor hace su clase diferente, segn la
seccin en donde se encuentren el formato de la resolucin de los problemas cambia. Por
qu? Porque para la escritura de algoritmos no existe un estndar (en otras universidades
tambin usan diferentes estilos) pero la idea y la lgica es lo que importa.
En este texto usar el formato del profesor Acosta, por costumbre y por ser entendible.
Aunque estn en otras secciones, esta primera parte del curso, les va a servir a todos, ya
que los algoritmos no difieren mucho. La diferencia se va haciendo mayor en los ltimos
temas.
A mi parecer, los ejercicios de este compendio son la base del curso. Los temas que siguen, y
que no estn aqu, incorporan nuevas cosas pero se sigue utilizando la teora de la primera
parte. Ms adelante procurar subir a Internet los temas que faltan.
Una vez ledo el libro (incluso antes), si es que les lleg a ser de gran ayuda, no duden en
recomendrselo a otros que tambin lo pueden estar necesitando. Para mejorar este texto,
pueden mandarme cualquier sugerencia al correo electrnico theoliztik@gmail.com y
tambin aquellos que quisieran aportar con problemas resueltos de prcticas y exmenes.
Su amigo: The Oliztik

Curso de Algoritmos y Estructura de Datos

UNIDAD I
ALGORITMOS Y ESTRUCTURA DE DATOS
Cuando llevamos algoritmos, lo ideal sera que ya conociramos los siguientes cursos:
Clculo Diferencial. Geometra Analtica, Clculo Integral, lgebra Lineal adems de poseer una
gran capacidad de abstraccin. Esa es la razn por la que se el profesor Acosta opina que sera
mejor llevar este curso en el tercer ciclo y ya no en el segundo. En este curso nos van a dar la
base y los cimientos para que ms adelante seamos unos excelentes programadores.
CONCEPTOS BSICOS:
DATO:
Es un MENSAJE (segn la IBM), posee la caracterstica de ser OBJETIVO, es decir, es
independiente de quien lo emite pues un MENSAJE es nico.
Es la representacin de un hecho real. Un dato es aquel que puede ser registrado por un
computador. Ejemplo: El peso de una persona, la temperatura, el nombre de una persona, etc.
Es la expresin general que describe los objetos con los cuales opera una computadora.
INFORMACIN:
Es la INTERPRETACIN de un DATO o MENSAJE. La informacin posee la caracterstica de ser
SUBJETIVO ya que cada persona interpreta un mensaje de diferente forma.
CLASIFICACIN DE LOS DATOS
Los datos se clasifican en datos simples y datos compuestos (tambin llamados estructurados).
La clasificacin general es la siguiente:

Curso de Algoritmos y Estructura de Datos

DATOS

Simples o Primitivos

Compuestos o Estructurados
ESTTICOS

DINMICOS

NUMRICO

Entero

Arreglos

Punteros

Real

Cadenas

Listas

LGICO

Registros

rboles

Archivos

Grafos

Verdadero
Falso

CARACTER

Alfabtico
Numrico
Especial

Por ahora nos centraremos en los datos simples, en la tercera unidad se ver con ms detalle los
datos estructurados.

Curso de Algoritmos y Estructura de Datos

DATOS SIMPLES

A. PRIMERA FORMA DE CLASIFICACIN: Numrico, Caracter y Lgico.


1. NUMRICO: Con estos datos se van a realizar las operaciones aritmticas y dems clculos
matemticos.
Entero: Son aquellos nmeros enteros que conocemos.
-2 , -1 , 0 , 1 , 2 , 458, 78989
Real: Todos aquellos que no son enteros sern considerados reales. En palabras simples,
van a ser datos numrico de tipo real todo nmero que lleva un punto decimal.
-0.1, 8.33, etc.
2. CARACTER: Siempre tiene que ir entre comillas simples (apstrofos

) y constan de un solo

caracter (una sola letra, un nico dgito o un nico smbolo)


Alfabtico: Corresponde a las letras del alfabeto ya sea maysculas o minsculas
,

, ,

, , ,...

,...

Numrico: No confundir con los datos numricos anteriores. Los datos de tipo caracter
numrico van entre comillas simples. Son solo 10 datos de tipo caracter numrico, adems
con estos no se pueden realizar operaciones aritmticas
1, 2, 3, 4, 5, 6, 7, 8, 9, 0
Especial: Corresponden a ciertos caracteres como: ,

* ,

{ ,

@ , etc.

3. LGICO: Son solo dos, Verdadero y Falso, y se va a utilizar cuando se evalen condiciones. En
este curso vamos a utilizar las letras V y F cuando hagamos referencia a algn dato lgico.
B. SEGUNDA FORMA DE CLASIFICACIN: Ordinales y no Ordinales

Curso de Algoritmos y Estructura de Datos

1. ORDINALES: Vamos a considerar como ordinales a los siguientes tipos de datos:


Los datos de tipo numrico entero
Los datos de tipo caracter tanto alfabtico y numrico (Estos se van a ordenar de acuerdo a
su cdigo. Resulta que cada caracter tiene un cdigo llamado ASCII, esto por ahora no es tan
importante)
Los datos de tipo lgicos verdadero y falso
2. NO ORDINALES
Vamos a considerar como no ordinales a los datos numricos del tipo real.

OBSERVACIONES:

De ahora en adelante para ya no estar mencionando la palabra completa dato de tipo


numrico entero solo se va a mencionar dato numrico entero o dato entero . Lo mismo se
aplica para el dato real , dato caracter y dato lgico .

CODIGO ASCII: Los caracteres tienen un cdigo que entre otras cosas, nos permite
ordenarlos. Por ejemplo:

<

<

<

El caracter espacio en blanco tambin es de tipo especial

El hecho de que a los datos reales se les considere no ordinales, no quiere decir que no
puedan ser comparados. (La proposicin 5.2 < 6.6 es verdadera), sino, son considerados no
ordinales pues, dado un dato real, no se sabe que nmero es el que le sigue, en cambio, dado
un dato ordinal, podemos saber que datos le anteceden y que datos le siguen. Ejemplo:
Dado el dato entero: 5 , sabemos que le precede el 4 y le sigue el 6.
Dado el dato caracter:

, sabemos que le precede

y le sigue

Pero, dado el dato real: 5.2 , no podemos determinar quin le antecede y quin le sigue. Y
aunque sepamos cules son los nmeros mayores o menores que ste, es considerado
no ordinal.

Curso de Algoritmos y Estructura de Datos

OPERADORES QUE TRABAJAN CON DATOS SIMPLES


OPERADORES ARITMTICOS
Adicin + , se usa el smbolo cruz
Sustraccin - , se usa el smbolo guin
Multiplicacin * , se usa el smbolo asterisco
Divisin: / , div , se usa el smbolo eslash o la palabrita div .
En esta parte hagamos una observacin importante. En matemticas nosotros podemos dividir
de dos formas, una divisin real y otra divisin entera.
Ejemplo:
5/2 = 2.5 , esta es una divisin real
5 div 2 = 2 , esta es una divisin entera (ya que solo nos da como resultado el cociente de la
divisin entera)

Existe adems una operacin que nos permite obtener el residuo o resto de la divisin entera,
para eso utilizamos el operador denotado por la palabra mod .
Ejemplo:
5 mod 2 = 1

OBS:
Algunos utilizan otros smbolos para el resto de la divisin entera, por ejemplo otros
usan % en vez de mod. Nosotros usaremos nicamente mod.
Los operadores div y mod son exclusivamente para datos enteros, por tal motivo la
operacin 5.6 mod

no tendran sentido, pues 5.6 es considerado dato real.

Curso de Algoritmos y Estructura de Datos

OPERADORES LGICOS
Negacin: o sino ~
Conjuncin: (se lee:

Disyuncin: (se lee:

OBS:
Con mucha ms frecuencia usaremos el smbolo de negacin en ves de ~
es un operador unario, ya que nicamente afecta a una expresin.

expresin_lgica

y son operadores binarios pues involucran dos expresiones.


Opcin1 opcin2
OPERADORES DE COMPARACIN O RELACIN

Sern usados para establecer comparaciones entre 2 valores del mismo tipo de datos.
Mayor que

>

Menor que

<

Mayor o igual que

>= o sino

Menor o igual que

<= o sino

Igual

Diferente

o sino <>

OBS:
Con mucha ms frecuencia usaremos el smbolo de no igualdad
De acuerdo a los tipos de datos que se comparan se tienen los siguiente tipos de
comparaciones:
o Comparaciones de datos de tipo caracter: Se comparan sus cdigos. Por tanto tenemos:
<

<

o Comparaciones de datos numrico: Ejemplo: 5<6


o Comparaciones de datos lgicos: falso < verdadero
No es recomendable hacer comparaciones entre datos reales (datos numricos de tipo
real) Ejemplo: (1/3)*3 = 1 ; tericamente es verdadero pero cuando se programe en la
computadora se obtendra (1/3)*3= 0.9999 lo cual es diferente a 1.

Curso de Algoritmos y Estructura de Datos

IDENTIFICADORES
Un identificador es solo el nombre de algo. Pero de manera ms formal es un conjunto de
caracteres que permite identificar a los elementos de un algoritmo. Los identificadores son
llamados vlidos cuando poseen las siguientes caractersticas:
1. Deben empezar con una letra (no pueden empezar con un nmero o con otro smbolo) y no
deben contener el caracter espacio en blanco
Ejemplo:
Son identificadores vlidos:
A1

X1

A123 ,

A2B3C

Son identificadores invlidos:


1AA

X 1

(Son invlidos porque el primer identificador por comienza con un nmero, y la segunda por
contener al caracter espacio en blanco.)
2. Solo pueden contener a los caracteres alfabticos (letras maysculas o minsculas),
caracteres numricos (dgitos) y al nico caracter especial Subguin o Guin bajo
Ejemplo:
Son identificadores vlidos:
X_1

The_Oliztik

Estructura_de_datos

Estructura-de-datos

Son identificadores invlidos:


X-1

The-Oliztik

(Pues contienen un caracter especial llamado guin

el cual no puede ser usado porque

llevara a la confusin con la operacin de Diferencia)


3. Deben de ser diferentes de las palabras reservadas para los algoritmos (esto se entender
mejor ms adelante)
Ejemplo: No podemos identificar a algn elemento como: inicio, fin, si, entonces, mientras,
desde, repetir, etc, pues estos nombres los usaremos ms adelante para otros fines.

10

Curso de Algoritmos y Estructura de Datos

CONSTANTES Y VARIABLES
CONSTANTES: Son aquellos DATOS que van a tener un valor fijo. Las constantes al ser DATOS,
se clasifican en: Constantes numricas (constantes enteras y constantes reales), constantes
caracter (constantes alfabticas, numricas, especiales) y constantes lgicas: verdadero y falso.
Las constantes tienen un nombre o identificador. Generalmente el identificador para la
constante debe contener caracteres alfabticos en mayscula (aunque esto no es obligatorio en
este curso pero sera mucho ms esttico).
Ejemplo:
PI = 3.14

(Constante real)

N = 10

(Constante entera)

LETRA =

(Constante caracter)

VARIABLES: Son aquellos DATOS que no van a tener un valor fijo, sino que van a ser
modificados. De forma anloga a las constantes, las variables al ser DATOS, se clasifican en:
Variables numricas (variables enteras y variables reales), variables caracter (variables
alfabticas, numricas, especiales); variables lgicas: verdadero y falso.
Las variables tambin tienen un nombre o identificador vlido. Generalmente el identificador
para la variable debe contener caracteres alfabticos en minscula (aunque esto tampoco es
obligatorio)
Ejemplo:
Sueldo ,

edad

fecha ,

Ganancia,

suma1 ,

suma_2

i ,n

OBS:
No hay que confundir el identificador o nombre de un dato (ya sea este una constante o una
variable) con su valor o contenido.
En los dos ltimos ejemplos, se tienen tres constantes de diferente tipo, el identificador de la
primera constante es PI y tiene como valor al nmero real 3.14. El identificador de la
segunda constante es N y tiene como valor al nmero entero 10, el identificador de la tercera
constante es LETRA y tiene como valor al caracter

11

Curso de Algoritmos y Estructura de Datos

En el otro ejemplo, se tiene las variables cuyos identificadores son: sueldo, edad, fecha,
ganancia, suma1, suma_2, i, n. Debido a que el contenido de las variables puede cambiar,
todava no les hemos asignado algn valor determinado. Despus se ver como funciona el
uso de las variables.
Depender de cada persona en la forma cmo quiera identificar a una variable o constante,
pero se sugiere que el nombre o identificador que se use deba tener relacin con el objeto
que representa. Ejemplo: Si una variable almacenar edad o edad(es) es obvio que su
identificador sera edad.

12

Curso de Algoritmos y Estructura de Datos

LA OPERACIN DE ASIGNACIN
La operacin de asignacin es aquella que permite almacenar valores a una variable. Para
realizar la operacin de asignacin se utiliza el operador (flechita hacia la izquierda). Para
realizar la operacin de asignacin se tiene el siguiente formato:
Formato:
Nomb_var valor
Donde:
Nomb_var: viene a ser el identificador vlido o nombre de la variable
Valor: es el valor que se le quiera asignar o almacenar
Ejemplos:
L 25

: Significa que a la variable llamada L (o sino, cuyo identificador es L) se le ha


asignado el nmero entero 25. Por tal motivo el valor que almacena la variable L
es 25.

Si es que seguidamente hacemos L 40 , la variable L tendr ahora como valor al nmero


entero 40, mientras que el valor anterior (25) se perdi o desapareci. Es por esto que la
operacin de asignacin se la conoce como destructiva.
Si es que hacemos:
L 50
L 900
L0
El valor ltimo que toma la variable L sera el nmero entero 0, los valores 50 y 900
desaparecieron.
Para realizar la operacin de asignacin tambin se tiene el siguiente formato:
Nomb_var expresin
L 5 + 10

, Significa que el valor que toma la variable L sera el resultado de sumar 5 + 10,

es decir, el nmero entero 15

13

Curso de Algoritmos y Estructura de Datos

Las computadoras realizan la asignacin en dos pasos. Primero, calculan el resultado de la


expresin del lado derecho. Segundo, almacenan el valor calculado a la variable que se
encuentra a la izquierda.
As, si es que tenemos lo siguiente:
A 10

, a la variable con nombre A se le asigna el nmero entero 10

B 20

, a la variable con nombre B se le asigna el nmero entero 20

C A +B

, a la variable con nombre C se le asigna el resultado de sumar los valores de las


variables A y B, el cual sera 10 + 20 = 30.

Tambin es posible utilizar el mismo nombre o identificador en ambos lados del operador de
asignacin. Por ejemplo:
D 35
D D+10

, Aunque no lo parezca, esta asignacin tiene sentido, el proceso de asignacin

sera: Primero, se calcula el resultado de la derecha, es decir la suma de la variable D (la cual vale
35) con 10. Segundo, el resultado (que sale 45) se le asigna a la variable D, por lo que D se queda
con ese valor. Desde el punto de vista matemtico esto no tendra sentido, pero s en este curso.
NOTA: De ahora en adelante para ya no estar indicando: la variable de nombre x o la variable
cuyo identificador es x ; expresar: la variable x , solo por comodidad.

14

Curso de Algoritmos y Estructura de Datos

VARIABLES IMPORTANTES: ACUMULADOR Y CONTADOR


ACUMULADOR O SUMADOR: Es una variable que permite sumar. Los acumuladores
generalmente se incrementan o decrementan en una cantidad variable. Los acumuladores son
variables enteras o variables reales.
Usaremos la siguiente asignacin:
acumulador acumulador + exp_num
Ejemplo: Consideremos S y num variables enteras, donde el acumulador sera S
Asignmosle un primer valor a la variable S
S0
(Cuando se le asigna un valor a un acumulador por primera vez, entonces se dice que se est
inicializando al acumulador)
num 20
S S + num , (el acumulador S contendr ahora el resultado de sumar 0 + 20 , es decir, 20)
num 18

(la variable num ahora tendr como valor al nmero 18)

S S + num

(el acumulador S contendr ahora el resultado de sumar 20 + 18, es decir, 38)

CONTADOR: Son variables numricas de tipo entero solamente. Son tiles al momento de
contar eventos o sucesos, su valor se incrementa o decrementa en un valor constante.
Usaremos la siguiente asignacin:
contador contador + 1
El nombre que generalmente se le da a esta variable es cont, pero cada quien tiene la libertad de
decidir identificador vlido ponerle.
Ejemplo: Consideremos la variable cont entera
cont 0
(Cuando se le asigna un valor a un contador por primera vez, se dice entonces que se est
inicializando al contador)
15

Curso de Algoritmos y Estructura de Datos

cont cont + 1,

(Ahora el contador tendr como valor el resultado de sumar 0 + 1, es

decir, 1)
cont cont + 1,

(Ahora el contador tendr como valor el resultado de sumar 1 + 1, es

decir, 2)

16

Curso de Algoritmos y Estructura de Datos

ALGORITMOS
Un algoritmo es un conjunto de pasos lgicos que permiten resolver un problema.
CARACTERSTICAS
1. Debe ser finito, es decir, en algn momento debe terminar.
2. Debe estar ordenado (debe tener una secuencia lgica)
3. Debe de estar bien definido, de tal forma que si se sigue dos veces, se obtendra el mismo
resultado cada vez.
Ejemplo: Escriba un algoritmo para prender el televisor
1. Ponerse de pie
2. Caminar y dirigirse hacia el televisor
3. Levantar la mano e introducir el dedo en el botn de encendido
4. Regresar a su lugar
Como ven, esto es un algoritmo, as como la una receta de cocina, los procedimientos para ir a
votar, para amarrarse los zapatos, para calcular el mximo comn divisor, etc. La palabra
algoritmo es muy general, por eso, es necesario precisar que en este curso lo que nos va a
interesar es desarrollar algoritmos que permitan solucionar problemas a travs de una
computadora.
Para la creacin de algoritmos debemos tener presente:
1. Con qu informacin contamos? que es lo mismo a Cules son los datos de entrada?
2. Qu nos piden como resultado? que es lo mismo a Cules son los datos de salida?
3. Cules son los procesos que transforman los datos de entrada en la informacin requerida?
DATOS
DE
ENTRADA

PROCESO

DATOS
DE
SALIDA

Ejemplo: Desarrolle un algoritmo para calcular el promedio de tres notas.


DATOS DE ENTRADA: las tres notas
DATOS DE SALIDA: el promedio
PROCESO: sumar las tres notas y dividir el resultado entre tres
ALGORITMO:
1. Proporcionar las notas
2. Sumar las tres notas
3. Dividir el resultado entre 3

17

Curso de Algoritmos y Estructura de Datos

4. Mostrar el promedio resultante


Lo cual podramos escribir de una forma mucho ms esttica usando la instruccin de
asignacin ya aprendida.
1. Inicio
2. Leer las notas: n1, n2, n3
3. promedio (n1+n2+n3)/3
4. presentar el promedio
5. Fin
Despus presentar el formato que se utilizar para escribir un algoritmo.
REPRESENTACIN DE UN ALGORITMO
Los algoritmos se pueden representar de muchas formas:
1. En palabras, as como hemos hecho en los ejemplos.
2. En forma grfica mediante: Diagramas de Flujo y Diagramas Nassi Schneiderman
3. En forma de cdigos llamado Pseudocdigo.
DIAGRAMA DE FLUJO
(FLOWCHART)
Es la representacin simblica o grfica de un algoritmo. Los smbolos usados son:
Entrada / Salida
Proceso
Decisin
Lnea de Flujo
Conector de diagramas
Inicio / Fin
Los diagramas de flujo son una de las tcnicas ms antiguas para representar un algoritmo. Los
smbolos usados en los diagramas de flujo han sido normalizados por ANSI (American Nacional
Estndar Institute). Instituto Norteamericano de Normalizacin.
Durante todo el curso vamos a utilizar el PSEUDOCDIGO para representar a los algoritmos.

18

Curso de Algoritmos y Estructura de Datos

PSEUDOCDIGO
Es la representacin escrita en un lenguaje parecido al habla humano (espaol/ingls).
PARTES DE UN PSEUDOCDIGO
Vamos a distinguir 2 partes.
1. El encabezado o cabecera: Aqu va a ir la palabra reservada Pseudocdigo seguida de un
identificador vlido para el algoritmo, es decir el nombre del algoritmo. (o nombre del
programa), el cual, se sugiere que sea un nombre que describa al programa.
Formato:

Pseudocdigo Identificador_Algoritmo

Ejemplo:
Pseudocdigo Promedio
Pseudocdigo Prom_2
Algunos profesores, en vez de utilizar la palabra Pseudocdigo prefieren usar la palabra
Algoritmo, como es el caso de la profesora Grimanesa.
2. El bloque algortmico: Se podra dividir en tres partes.
2.1 Seccin de declaracin de constantes y variables: En esta parte se van a definir o
declarar todos los datos a utilizar (constantes y variables) tanto simples como compuestos.
Para este curso, definir o declarar un dato (variable o constante) se puede entender como
crear un dato para que pueda ser utilizado.
En realidad, ms adelante, aparte de declarar Variables Y Constantes, tendremos que
recurrir a la creacin de Tipos, pero por ahora solo vamos a interesarnos en las variables y
constantes. Lo relacionado a los Tipos se ver en la Unidad III.
Formato:
Const

const1 = valor1
const2 = valor2
...
constN = valorN

Var

var1 : tipo_dato1
var2 : tipo_dato2
...
varN : tipo_datoN

19

Curso de Algoritmos y Estructura de Datos

Ejemplo: Si queremos utilizar a las constantes PI (nmero irracional) e IGV (impuesto


general a las ventas) y a las variables edad, sueldo, sexo, tendremos que declararlas de la
siguiente forma:
Const

PI = 3.1416
IGV = 0.19

Var

edad: entero
sueldo: real
sexo: caracter

La edad se declara generalmente como variable entera pues se considera cantidades enteras
de aos. El sueldo se declara como variable real pues presentar punto decimal y el sexo al
ser masculino o femenino, deber ser caracter para asumir dos posibles valores: o

Algunos profesores utilizan el siguiente formato:


Def. Variables:
edad: entero
sueldo: real
sexo: caracter
CONST
PI = 3.1416
Otros profesores cambian el orden en la declaracin de variables
Variables:
entero: edad
real: sueldo
caracter: sexo
Durante todo este libro usaremos el primer formato presentado.
2.2 Seccin para los subprogramas: Por ahora no ser necesario.

20

Curso de Algoritmos y Estructura de Datos

2.3 Acciones ejecutables: Aqu se va a realizar todo el proceso de resolucin de algn


problema mediante un conjunto de acciones o instrucciones que se ver luego.
Siempre debern ir las palabras Inicio y Fin.
En conclusin, la estructura general de todo pseudocdigo ser el siguiente:

Pseudocdigo Identificador_Algoritmo
Tipo
Const
Var
SUBPROGRAMAS

Inicio

Fin

Ejemplo: Realice un algoritmo que permita hallar el promedio de 3 notas y luego represntelo
mediante pseudocdigo.
Pseudocdigo Ejemplo
Var

n1, n2, n3: entero


prom: real

Inicio
Leer (n1, n2, n3)
prom (n1+n2+n3)/3
Escribir (prom)
Fin

21

Curso de Algoritmos y Estructura de Datos

INSTRUCCIONES DE ENTRADA Y SALIDA


INTRUCCIN DE ENTRADA (LECTURA DE DATOS)
La instruccin de entrada permite leer determinados valores que luego le son asignados a
determinadas variables. A esta instruccin tambin se le conoce como instruccin de lectura. Los
datos se introducen a la computadora mediante algunos dispositivos de entrada, siendo el ms
importante el teclado.
El formato para realizar esta instruccin es el siguiente:
Leer (variable)
Para el caso en el que se tengan muchas variables se realiza:
Leer (variable1, variable2,..., variableN)
Ejemplo: En el ejemplo realizado para calcular el promedio de tres notas, la instruccin de
lectura que se realiz fue:
Leer (n1, n2, n3)
Esta instruccin funciona de esta forma. Primero espera que alguien escriba por el teclado tres
valores, luego estos tres valores le son asignados a las tres variables n1, n2, n3 que aparecen
dentro del parntesis. Por ejemplo: Si es que ingreso por el teclado los nmeros 5, 8 Y 9, las
variables almacenarn a estos tres nmeros en ese orden.
Y si aun hago lo siguiente:

C n1+n2+n3, entonces el valor que estara almacenando en la

variable C sera la suma de los valores que estn almacenados en las tres variables n1, n2 y n3.
Por tal motivo el valor de la variable C sera 5 + 8 + 9 = 22
INTRUCCIN DE SALIDA (ESCRITURA DE DATOS)
La instruccin de salida permite mostrar los valores que han sido almacenados en determinadas
variables. A esta instruccin tambin se le conoce como instruccin de escritura. El valor que
est almacenado en una variable se puede visualizar a travs de dispositivos de salida como el
monitor y la impresora.
El formato para realizar esta instruccin es el siguiente:
Escribir (variable)
Para el caso en el que se tengan muchas variables se realiza:
Escribir (variable1, variable2,..., variableN)

22

Curso de Algoritmos y Estructura de Datos

Ejemplo: En el ejemplo realizado para calcular el promedio de tres notas, la instruccin de salida
que se realiz fue:
Escribir (prom)
Lo cual, significa que por el monitor se pudo visualizar el valor que almacenada la variable prom.
C n1+n2+n3

Continuando el ejemplo, en donde tenamos:


Si luego hacemos:
Escribir (C)

Significara que en la pantalla del monitor se puede visualizar el valor de la variable C, o sea 22.

22

OBSERVACIN:
Cuando queramos escribir un mensaje que aparezca en la pantalla de la computadora,
haremos uso de la palabra Escribir seguida de un parntesis y comillas. El mensaje ir
dentro de las comillas.
Escribir (aqu va el mensaje )
Ejemplo:
Escribir Voy a aprobar el curso de Algoritmos )

Voy a aprobar el
curso de
Algoritmos

23

Curso de Algoritmos y Estructura de Datos

Lo ms razonable sera que antes de una instruccin de lectura realizramos una


instruccin de escritura en la que se enve un mensaje indicando qu es lo que se va a
introducir.
Ejemplo:
Escribir Ingrese su edad )
Leer (edad)
Para este curso, generalmente solo realizaremos la lectura de datos. As que, consideraremos
como opcional el uso de los mensajes, ha menos que el profesor indique lo contrario.
Cuando queremos presentar el valor de una variable, podemos presentarla sola o
acompaada de un mensaje.
Ejemplo: Supongamos que tenemos la variable entera max_edad que almacena la edad
mxima de un conjunto de personas, la cual es 28. Para presentar el valor de esta
variable haremos:
Escribir (max_edad)

28

Pero tambin podemos hacerlo de la siguiente forma:


Escribir La mxima edad es: , max_edad)

La mxima
edad es 28

24

Curso de Algoritmos y Estructura de Datos

OBSERVACIONES:
En ocasiones podemos hacer uso de comentarios. Estos permiten explicar a los que
vayan a revisar nuestro algoritmo el porqu se realizan ciertas acciones. Ejemplo:
Pseudocdigo Ejemplo
Var

n1, n2, n3: entero


prom: real

Inicio
Leer (n1, n2, n3)
prom (n1+n2+n3)/3 ( * Media aritmtica de las 3 notas * )
Escribir (prom)
Fin
Los comentarios que hagamos debern ir entre parntesis y asteriscos. ( *

* ).

El uso de los comentarios es opcional, aunque a veces sirven para que nuestro
algoritmo sea ms entendible.
Los comentarios no van a aparecer en la pantalla ni tampoco van a interferir con las
instrucciones, solo son ayudas visuales.

25

Curso de Algoritmos y Estructura de Datos

UNIDAD II
ESTRUCTURAS DE CONTROL
En mayo de 1966 Botin y Jacopeni demostraron de que cualquier algoritmo, sin importar su
complejidad, poda ser construido utilizando combinaciones de tres estructuras de control de
flujo estandarizados (secuencial, selectivas o de seleccin y repetitivas o iterativas). El flujo de
control se refiere al orden en que se ejecutan las sentencias del programa.
Sinnimos: control de flujo, secuenciacin

I. ESTRUCTURAS SECUENCIALES: Son aquellas en las que una accin sigue a


otra en secuencia. La salida de una accin es la entrada de la siguiente y as sucesivamente, hasta
el final del proceso.
Pseudocdigo Nomb_Alg
Accin 1

Const
Var
Inicio

Accin 2

Accin 1
Accin 2
Accin 3

Accin 3
Fin

26

Curso de Algoritmos y Estructura de Datos

Ejemplo1: Disear un algoritmo que obtenga el valor de

a partir de la ecuacin

y=3x2+7x-15 solicitando como dato de entrada el valor de x. Solucin:


Datos de entrada?

Datos de salida?

Proceso:

y 3 * x * x + 7 * x 15

Pseudocdigo Ejemplo_1
Var

x, y: real

Inicio
Leer (x)
y 3 * x * x + 7 * x 15
Escribir (y)

Antes de la instruccin de lectura:


Leer (x)
, pudimos haber enviado un mensaje de la
siguiente manera:
Escribir ( Ingrese el valor de x ).
En el curso de algoritmos, el uso de estos
mensajes ser opcional, ha no ser que el
profesor indique lo contrario.

Fin
Presentamos
el valor de la
variable

Ejemplo 2: Disee un algoritmo para calcular el salario neto de un trabajador si se conoce


el nmero de horas trabajadas, precio de la hora de trabajo y considerando unos
descuentos fijos, el sueldo bruto en concepto de impuestos (20%). Solucin:
Pseudocdigo Salario
Var

horas_trab, precio_hora, sue_bru, sue_ne: real

Inicio
Leer (horas_trab, precio_hora)
sue_bru horas_trab * precio_hora
sue_net 0.8 * sue_bru
Escribir (sue_ne)
Fin

27

Curso de Algoritmos y Estructura de Datos

Ejemplo 3: Disear un algoritmo para calcular el monto que debe pagar un cliente que
desea comprar los productos A, B y C. Los precios de venta se dan como dato. Existe un
descuento del 10% para los productos A y B antes del I.G.V. Solucin:
Pseudocdigo Ejemplo_3
Var

PA, PB, PC, CA, CB, CC, PTA, PTB, PTC, IGV, PP: real

Inicio
Escribir ( Ingrese los precios de los productos A, B y C )
Leer (PA, PB, PC)
PTA 0.9 * (PA * CA)
PTB 0.9 * (PB * CB)

Este mensaje ser opcional

PTC PC * CC
IGV 0.19 * (PTA+PTB+PTC)
PP PTA+PTB+PTC+IGV
Escribir ( Total a pagar: , PP)
Fin

28

Curso de Algoritmos y Estructura de Datos

UTILIDAD DE LOS OPERADORES div Y mod


Los operadores div y mod son importantes en muchos problemas relacionados a la inversin de
nmeros, clculo del mcd, verificacin de numerales capicas, cambios de sistema de
numeracin, cantidad de divisores de un nmero, saber si un nmero es primo, . . , etc.
Ejemplos:
Sea

N = 123

Si queremos invertirlo seguimos los siguientes pasos:


1. Debemos tomar la primera cifra que se encuentra a la derecha de 123 que es 3, por eso
dividimos 123 entre 10 y nos quedamos con el residuo el cual lo almacenamos en una variable
llamada R1. (Utilizamos el operador mod)

R1 N mod 10

(R1 = 3)

2. Ahora debemos quedarnos con el nmero que queda a la izquierda del 3, es decir, con 12. Para
eso dividimos 123 entre 10 y nos quedamos con el cociente el cual lo almacenamos en una
variable llamada N1. (Utilizamos el operador div)

N1

N div 10

(N=12)

As, tenemos:

29

Curso de Algoritmos y Estructura de Datos

3. Volvemos a repetir los pasos anteriores, tomaremos la primera cifra de la derecha de 12 el cual
es 2, por eso dividimos 12 entre 10 y nos quedamos con el residuo el cual lo almacenamos en
una variable llamada R2. (Utilizamos el operador mod)

R2 N1 mod 10

(R2 = 2)

4. Ahora debemos quedarnos con el nmero que queda a la izquierda de 2, es decir, con 1. Para eso
dividimos 12 entre 10 y nos quedamos con el cociente el cual lo almacenamos en una variable
llamada N2. (Utilizamos el operador div)

N2

N1 div 10

(N2=1)

As tenemos:

30

Curso de Algoritmos y Estructura de Datos

Ahora que ya tenemos los dgitos del nmero inicial N = 123 almacenados en distintas variables,
ya podremos formar el nmero invertido.

Sea la variable NI la que almacene al nmero invertido. Se tiene:


NI R1 * 100 + R2 * 10 + N2
Ejemplo 4: Disear un algoritmo para invertir un nmero entero de 4 cifras.
Nota: Pondremos en prctica la utilizacin de los operadores div y mod. Solucin:
Datos de entrada? Nmero de 4 dgitos: N
Datos de salida? Nmero invertido: NI
Proceso? Divisiones sucesivas entre 10
Pseudocdigo Inversin
Var

N, N1, NI, R1, R2, R3, R4: entero

Inicio
Leer (N)
R1 N mod 10
N1 N div 10
R2 N1 mod 10
N2 N1 div 10
R3 N2 mod 10
N3 N2 div 10
NI R1 * 1000 + R2 * 100 + R3 * 10 + N3
Escribir El nmero invertido es: NI)
Fin

31

Curso de Algoritmos y Estructura de Datos

II. ESTRUCTURAS SELECTIVAS


Son tambin llamadas ESTRUCTURAS CONDICIONALES, ESTRUCTURAS DE DECISIN o
ESTRUCTURAS ALTERNATIVAS. Son usadas para tomar decisiones. En estas estructuras se
evala una condicin (una condicin es una expresin lgica que da como resultado o verdadero o
falso) y segn el resultado se realiza una u otra accin. La representacin de las estructuras
selectivas se hace:
EN PSEUDOCDIGO: Se usan las palabras reservadas: Si

entonces, Sino (If

then, else)

EN DIAGRAMA DE FLUJOS: Se usa una figura geomtrica con forma de rombo llamada DECISIN.
CLASIFICACIN:
A. ESTRUCTURA SELECTIVA SIMPLE: (Si

entonces / If

then ) , tambin conocida como

alternativa simple.
Se evala una condicin y:
- Si es verdadera

Se ejecutan ciertas acciones

- Si es falsa

No se ejecuta ninguna accin, contina

Condicin
V

Si (condicin) entonces
Accin 1
Accin 2
Accin 3

Accin 2
fin_si

32

Curso de Algoritmos y Estructura de Datos

Ejemplo 5: Disear un algoritmo que halle el nuevo sueldo de un empleado si conocido su


sueldo actual se le aplique un aumento del 15% en el caso que dicho sueldo actual sea
superior a S/. 1000. Solucin:
Pseudocdigo Sueldo
Var

sueldo: entero

Inicio
Escribir ( Ingrese su sueldo actual )
Leer (sueldo)
Si (sueldo > 1000) entonces
sueldo 1.15 * sueldo
fin_si
Escribir (sueldo)
Fin
Ejemplo 6: Disear un algoritmo para calcular el promedio de 4 notas de prcticas
calificadas eliminando la menor nota.
Solucin:
Datos de entrada? Las 4 notas de las prcticas
Datos de salida? El promedio de las 3 notas ms altas.
Proceso? Encontrar la menor nota mediante comparaciones.
Pseudocdigo Promedio_prctica
Var

pc1, pc2, pc3, pc4, mn: entero


prom: real

Inicio
Escribir ( Ingrese las notas de prcticas )
Leer (pc1, pc2, pc3, pc4)
mn pc1
Inicializamos la
Si (pc2 < mn) entonces
variable mn con el
mn pc2
valor de cualquiera
fin_si
de las prcticas: pc1,
Si (pc3 < mn) entonces
pc2, pc3, pc4, en este
mn pc3
caso con pc1
fin_si
Si (pc4 < mn) entonces
mn pc4
fin_si
prom (pc1+pc2+pc3+pc4-mn) / 3
Escribir El promedio de prcticas es: , prom)
Fin

33

Curso de Algoritmos y Estructura de Datos

Ejemplo 7: Se desea leer 3 nmeros enteros y luego:


a) Identifique y presente el nmero medio del conjunto de los 3 nmeros.
b) Organice los 3 nmeros en forma ascendente.
Solucin:
Pseudocdigo Ejemplo7
Var

n1, n2, n3, mx, mn, me: entero

Inicio
Leer (n1, n2, n3)
mx n1
mn n1
Si (n2 > mx) entonces
mx n2
fin_si

Inicializamos las
variables max y mn
con el valor de
cualquiera de las
notas: n1, n2, n3; en
este caso con n1

Si (n3 > mx) entonces


mx n3
fin_si
Si (n2 < mn) entonces
mn n2
fin_si
Si (n3 < mn) entonces
mn n3
fin_si
(*Calculando el nmero medio del conjunto*)
me n1 + n2 + n3 (mx + mn)
Escribir (me)
(*Mostrando los nmeros en forma ascendente*)
Escribir (mn, me, mx)
Fin

34

Curso de Algoritmos y Estructura de Datos

B. ESTRUCTURA SELECTIVA DOBLE: (Si

entonces; Sino / If

then; Else ) , tambin conocida

como alternativa doble.


Se utiliza cuando se evala una condicin y se presentan dos alternativas, luego:
- Si la condicin es verdadera _

Se ejecutan ciertas acciones

- Si es la condicin es falsa

Se ejecutan otras acciones

Si (condicin) entonces
V

Condicin

Acciones1
Sino

Accin 1

Accin 2

Acciones2
fin_si

Ejemplo 8: Una universidad aplica dos exmenes E1 y E2 a sus postulantes. Los postulantes
son admitidos si tienen una calificacin mayor que 80 en al menos uno de los exmenes, en
caso contrario, ser rechazado. Disee un algoritmo que soluciones el problema y diga si un
alumno est aprobado o desaprobado.
Solucin:
Pseudocdigo Examen_Admisin
Var

E1, E2: entero

Inicio
Leer (E1, E2)
Si (E1 > 80 E1 > 80) entonces
Escribir admitido )
sino
Escribir rechazado )
fin_si
Fin

35

Curso de Algoritmos y Estructura de Datos

Ejemplo 9: Algoritmo para resolver una ecuacin paramtrica.


Nota: Recordar que una ecuacin paramtrica tiene la forma: ax=b. Si a 0 entonces la solucin
es nica y sera x=b/a; Si a = 0 y b = 0 entonces habran infinitas soluciones; Si a = 0 y b 0
entonces no existira solucin. Solucin:
Pseudocdigo Ecuacin_Paramtrica
Var

a, b, x: real

Inicio
Leer (a, b)
Si (a 0) entonces
x b/a
Escribir solucin nica: , x)
sino
Si (b=0) entonces
Escribir ( Ecuacin consistente indeterminada, infinitas soluciones )
Sino
fin_si

Escribir Ecuacin inconsistente, no hay solucin )

fin_si
Fin

Ejemplo 10: Dado un ao, indicar si es bisiesto o no.


Nota: Un ao es bisiesto si es mltiplo de 4 y no de 100 o es mltiplo de 400.
Solucin:
Pseudocdigo Ao_Bisiesto
Var

ao: entero

Inicio
Leer (ao)

Sabemos que un nmero es mltiplo de otro cuando


la divisin es exacta, por eso utilizamos el operador
mod para calcular el residuo. Si este es cero
sabremos que es mltiplo.

Si ((ao mod 4 = 0 ao mod 100 0) ao mod 400 = 0) entonces


Escribir ( Es Bisiesto )
sino
Escribir ( No es bisiesto )
fin_si
Fin

36

Curso de Algoritmos y Estructura de Datos

Ejemplo 11: Hallar el mayor de tres nmeros reales. Solucin:


Pseudocdigo Mayor
Var

a, b, c, mx: entero

Inicio
Leer (a, b, c)
Si (a > b) entonces
mx a
sino
mx b
fin_si
Si (c > mx) entonces
mx c
fin_si
Escribir (mx)
Fin
Ejemplo 12: Disee un algoritmo que calcule el nuevo sueldo de un empleado conociendo su
sueldo actual bajo el siguiente criterio. Aumente en 12% su sueldo si este es superior a
s/.100 y un 20% en caso contrario. Solucin
Pseudocdigo Sueldo
Var

sueldo, nsueldo: real

Inicio
Leer (sueldo)
Si (sueldo > 100) entonces
nsueldo 1.12 * sueldo
sino
nsueldo 1.2 * sueldo
fin_si
Escribir (nsueldo)
Fin

37

Curso de Algoritmos y Estructura de Datos

Ejemplo 13: Dado 3 nmeros, determinar si la suma de cualquier pareja de ellas es igual al
tercero. Si se cumple la condicin, escribir iguales y en caso contrario distintos .
Solucin: Vamos a resolverlo de dos formas:
Primera Forma:
Pseudocdigo Ejemplo_13
Var

a, b, c: entero

Inicio
Leer (a, b, c)
Si (a+b=c) entonces
Escribir ( Iguales )
sino
Si (b+c=a) entonces
Escribir Iguales )
sino
Si (a+c=b) entonces
Escribir Iguales )
sino
Escribir Distintos )
fin_si
fin_si
fin_si
Fin
Segunda Forma: Observen cmo el uso del operador lgico disminuye considerablemente el
nmero de instrucciones selectivas dobles.
Pseudocdigo Ejemplo_13
Var

a, b, c: entero

Inicio
Leer (a, b, c)
Si (a+b=c a+c=b b+c=a) entonces
Escribir ( Iguales )
sino
Escribir Distintos )
fin_si
Fin

38

Curso de Algoritmos y Estructura de Datos

Ejemplo 14: Una empresa qumica paga a sus vendedores un sueldo bsico quincenal de s/.
250 ms un % del total de las ventas efectuadas segn la siguiente tabla.
Monto total de ventas

% de pago

MV S/. 2000

15%

S/. 1500 MV S/. 2000

12%

S/. 0 MV S/. 1500

10%

Por otro lado si el sueldo del vendedor supera los S/. 800, ste se somete a un impuesto del
10% sobre su sueldo total. Desarrolle un algoritmo que permita conocer el monto del
descuento por impuesto, el sueldo neto y el sueldo total.
Solucin
Voy a utilizar las siguientes variables: sb: sueldo bsico, mtv: monto total de las ventas, desc:
descuento, sn: sueldo neto.
Pseudocdigo Sueldo
Var

sb, mtv, desc, sn: real

Inicio
sb 250.0
Leer (mtv)
Si (mtv 2000) entonces
st sb + 0.15 * mtv
sino
Si (mtv 1500) entonces
st sb + 0.12 * mtv
sino
st sb + 0.1 * mtv
fin_si
fin_si
Si (st > 8000) entonces
desc 0.1 * st
sn st - desc
sino
desc 0
sn st
fin_si
Escribir (st, desc, sn)
Fin

39

Curso de Algoritmos y Estructura de Datos

Este problema puede ser resuelto cambiando la ltima parte de la siguiente forma:
Pseudocdigo Sueldo
Var

sb, mtv, desc, sn: real

Inicio
sb 250.0
Leer (mtv)
Si (mtv 2000) entonces
st sb + 0.15 * mtv
sino
Si (mtv 1500) entonces
st sb + 0.12 * mtv
sino
st sb + 0.1 * mtv
fin_si
fin_si
Si (st > 8000) entonces
desc 0.1 * st
sino
desc 0
fin_si
sn st - desc
Escribir (st, desc, sn)
Fin

40

Curso de Algoritmos y Estructura de Datos

Ejemplo 15: Dado 3 nmeros, presentarlos en forma decreciente. Solucin


Pseudocdigo Ejemplo_15
Var

a, b, c: entero

Inicio
Leer (a, b, c)
Si (a > b) entonces
Si (b>c) entonces
Escribir (a, b, c)
sino

(* c

b *)

Si (a>c) entonces
Escribir (a, c, b)
sino

(* c

a *)

Escribir (c, a, b)
fin_si
fin_si
Sino

(* b

a *)

Si (a>c) entonces
Escribir (b, a, c)
sino

(* c

a *)

Si (b>c) entonces
Escribir (b, c, a)
sino

(* c

b *)

Escribir (c, b, a)
fin_si
fin_si
fin_si
Fin

41

Curso de Algoritmos y Estructura de Datos

Ejemplo 16: Dado 4 nmeros enteros diferentes, presentar el segundo mayor. Solucin
Para resolver este problema, vamos a tratar de ordenar los nmeros de mayor a menor, y para
eso realizaremos comparaciones de la siguiente forma:

max1

a
b
c

max3
max2

min3

max5

min2

max4

min5

min1

min4

Los nmeros que van a ser ingresados, van a ser almacenados en las variables a, b, c y d. Luego
comparamos

almacenamos en

y tratamos de almacenar en

el mayor de entre estos dos, y

el menor de entre estos dos. Para eso usamos la siguiente instruccin:

Si (a < d) entonces
aux a
ad
d aux
fin_si
Lo mismo haremos con b y c.
Si (b < c) entonces
aux b
bc
c aux
fin_si
Entonces obtendremos dos mximos y dos mnimos parciales: max1, max2, min2, min1, los
cuales estarn almacenados en ese orden en las variables a, b, c, d.
Luego compararemos los dos mximos parciales (max1 y max2 que estn almacenados en a y b)
de tal forma que tratemos de almacenar el mayor de entre estos dos en
estos dos en

y el menor de entre

. De manera anloga se comparar los dos mnimos parciales (min2 y min1 que

estn almacenados en c y d) de tal forma que tratemos de almacenar el menor de entre estos dos
en

y el mayor de entre estos dos en

. De esta forma estamos asegurando que el mximo de

los 4 nmeros iniciales se encuentre almacenado en

y que el mnimo de los 4 nmeros se

encuentre almacenado en

. Por ltimo queda comparar

que de tal forma que

tratemos de almacenar en

el mayor de entre estos dos y en

el menor de entre estos dos.

En conclusin, la finalidad de este mtodo fue el de ordenar los nmeros ingresados de mayor a

42

Curso de Algoritmos y Estructura de Datos

menor pues de esta forma se sabe quin es el segundo mayor, tercero mayor, segundo menor,
etc. (a > b > c > d)
Pseudocdigo Segundo_Mayor
Var

a, b, c, d, aux: entero

Inicio
Leer (a, b, c, d)
Si (a < d) entonces
aux a
ad
d aux
fin_si
Si (b < c) entonces
aux b
b c
c aux
fin_si
Si (a < b) entonces
aux a
ab
b aux
fin_si
Si (c < d) entonces
aux c
cd
d aux
fin_si
Si (b < c) entonces
aux b
b c
c aux
fin_si
Escribir ( El segundo mayor es: b)
Fin

43

Curso de Algoritmos y Estructura de Datos

C. ESTRUCTURA SELECTIVA MLTIPLE: (En_caso, sino, fin_caso), Se utiliza cuando existan ms


de dos alternativas o elecciones posibles. Se evala un Selector que podr tener n valores
distintos: 1, 2, 3,

,n y de acuerdo al valor que se obtenga se realizar o ejecutar alguna accin

o acciones.
SELECTOR

Caso

Caso 2

Sentencia1

Sentencia2

Caso n
Sentencian

En_caso (SELECTOR)
Caso1: Sentencia 1
Caso2: Sentencia 2
.
.
.
CasoN: Sentencia N
Sino
Sentencia X
fin_caso
Donde:
SELECTOR: Es una variable del tipo ordinal, es decir, puede ser:
Variable del tipo caracter (excepto los especiales)
Variable del tipo numrico entero
Variable del tipo lgico
No puede ser numrico real ni cadena de caracteres
CASO: Los casos son constantes del tipo ordinal (no pueden haber expresiones), vendran a
representar las alternativas y podran tener las siguientes formas:
5
5, 6, 7
,

V (constante lgica verdadera)


F (constante lgica Falso)

44

Curso de Algoritmos y Estructura de Datos

1. . 5 (es equivalente a 1, 2 , 3, 4, 5)
..

(es equivalente a B, C, D, E, F)

OBSERVACIONES:
Como se puede apreciar, los casos o alternativas pueden estar conformados por un valor o
por una lista de valores.
Los valores que toman los casos no tienen porqu ser necesariamente consecutivos.
Ejemplo:
1, 3, 7, 12
Adems se puede apreciar que los casos pueden ser rangos de constantes numricas o de
caracteres. En general, para indicar un rango de constantes del tipo ordinal (caracteres,
nmeros enteros,) se tiene el siguiente formato:
Dos puntos
Lm_inf . . Lm_sup

El uso del Sino es opcional.


Funcionamiento de la instruccin:
El SELECTOR se compara con cada uno de los casos, si hay coincidencia, realiza o se ejecuta la
sentencia correspondiente y luego contina con el resto del algoritmo. Si es que no hay
coincidencia con ninguno de los casos y si:
Tenemos el SINO: Entonces se realiza la sentencia que se encuentra dentro de este
bloque.
No tenemos el SINO: Entonces no realiza ninguna accin y la sentencia termina.

45

Curso de Algoritmos y Estructura de Datos

Ejemplo 17: Se desea determinar el salario mensual de un obrero conociendo el nmero


total de horas trabajadas al mes y el turno en que labora. De acuerdo al turno en que
labora, se tiene las siguientes tarifas.
Turno

Pago x Hora

30.5

27.9

36.5

Solucin:
Pseudocdigo Salario
Var

horas_trab: entero
turno: caracter
salario: real

Inicio
Leer (horas_trab, turno)
En_caso (turno)
M:

salario horas_trab * 30.5

T:

salario horas_trab * 27.9

N:

salario horas_trab * 36.5

fin_caso
Escribir (salario)
Fin
Como se observa, no se utiliz el SINO.

46

Curso de Algoritmos y Estructura de Datos

Ejemplo 18: Disee un algoritmo que escriba los nombres de los das de la semana en
funcin del valor de una variable da introducida por el teclado. Solucin:
Pseudocdigo Das
Var

da: entero

Inicio
Leer (da)
En_caso (da)
1:
2:
3:
4:
5:
6:
7:

Escribir
Escribir
Escribir
Escribir
Escribir
Escribir
Escribir

Lunes )
Martes )
Mircoles )
Jueves )
Viernes )
Sbado )
Domingo )

fin_caso
Fin
Ejemplo 19: Solo empleando la instruccin selectiva mltiple, halle el mayor de 3 nmeros
reales. Solucin:
Pseudocdigo Mayor
Var

a, b, c, mx: entero

Inicio
Leer (a, b, c)
En_caso (a > b)
V:
F:

mx a
mx b

fin_caso
En_caso (c > mx)
V: mx c
fin_caso
Fin

47

Curso de Algoritmos y Estructura de Datos

Ejemplo 20: Disear un algoritmo para determinar el costo del servicio de una ca
fumigadora de terrenos hacia un agricultor que tiene una determinada extensin de
terreno. La tarifa depende del tipo de fumigacin:
Tipo
1

Fumigacin contra malas hierbas

S/. 10 Ha

Fumigacin contra langostas

S/ 20 Ha

Fumigacin contra gusanos

S/. 30 Ha

Fumigacin contra todo lo anterior

S/. 50 Ha

Si el rea a fumigar es mayor a 500 Ha, tiene un descuento del 5%; adems, si el total a
pagar por el servicio es mayor a S/. 1500 , tiene un descuento del 10% sobre el exceso.
Solucin:
Pseudocdigo Fumigacin
Var

costo, Ha: real


tipo: entero

Inicio
Leer (tipo, Ha)
En_caso (tipo)
1:
2:
3:
4:

costo
costo
costo
costo

Ha * 10
Ha * 20
Ha * 30
Ha * 50

fin_caso
Si (Ha >500) entonces
costo 0.95 * costo
fin_si
Si (costo >1500) entonces
costo 0.9 * costo
fin_si
Escribir (costo)
Fin

48

Curso de Algoritmos y Estructura de Datos

Ejemplo 21: En una olimpiada de tiro al blanco se llega a un acuerdo para que el puntaje
final obtenido sea calculado en base al puntaje original alcanzado en el tiro (del 1 al 10)
multiplicado por un factor, segn la siguiente tabla:
Puntaje Original

Factor

1 3

4 6

7 - 10

10

Se pide disear un algoritmo que calcule el puntaje final de un determinado jugador


Solucin:
Pseudocdigo Juego
Var

punt, punt_final: entero

Inicio
Leer (punt)
En_caso (punt)
0:
1 . . 3:
4 . . 6:
7 . . 10:

punt_final
punt_final
punt_final
punt_final

punt * 0
punt * 3
punt * 8
punt * 10

fin_caso
Escribir (punt_final)
Fin
Ejemplo 22: Se desea leer por teclado un nmero comprendido desde 1 al 10 y se desea visualizar
un mensaje en la pantalla indicando su el nmero ingresado es par o impar (Use la instruccin
selectiva mltiple) Solucin:
Pseudocdigo Nmero
Var

num: entero

Inicio
Leer (num)
En_caso (num)
1, 3 , 5, 7, 9: Escribir ( impar )
2, 4, 6, 8, 10: Escribir ( par )
fin_caso
Escribir (punt_final)
Fin

49

Curso de Algoritmos y Estructura de Datos

III. ESTRUCTURAS REPETITIVAS:


Las estructuras repetitivas son aquellas en las cuales se utilizan a las instrucciones de control
repetitivas, los cuales son tambin llamados bucles de repeticin.
Existen tres estructuras repetitivas:
Estructura Repetitiva Desde (Bucle con nmero de repeticiones preestablecido)
Estructura Repetitiva Mientras (Bucle con entrada Controlada)
Estructura Repetitiva Repetir (Bucle con salida controlada)
A. EL BUCLE CON NMERO DE REPETICIONES PREESTABLECIDO: Es utilizado cuando el
nmero de repeticiones o iteraciones se conoce, es decir, cuando ya sabemos el nmero de veces
que vamos a repetir una misma accin. Por ejemplo: Para calcular el factorial de un nmero,
sabemos el nmero de veces que se va a multiplicar el nmero por sus menores consecutivos
hasta el 1.
Desde cont Vi hasta Vf
cont Vi hasta Vf

Sentencia
fin_desde

Sentencia

cont
Donde:
Vi: Valor inicial (no necesariamente empieza en uno)
Vf: Valor final
Vi, Vf, cont: son del tipo ORDINAL
Funcionamiento: La sentencia se repite desde que cont toma el valor inicial Vi hasta que
alcanza en forma secuencial el valor final Vf.
Por ejemplo:
desde i 1 hasta 4

1
2
3
4

Escribir ( i )
fin_desde

50

Curso de Algoritmos y Estructura de Datos

X
Y
Z

desde car X hasta Z


Escribir ( car )
fin_desde
En este curso, generalmente, solo se va a considerar avanzar de 1 en 1. Adems depender del
profesor con el que estn llevando el curso.
Ejemplo 23: Disear un algoritmo para calcular el factorial de un nmero entero positivo.
Solucin: Vamos a utilizar el contador

Pseudocdigo Factorial
Var

i, num, fac: entero

Inicio
Leer (num)
fac 1
desde i 1 hasta num
fac fac * i
fin_desde
Escribir (fac)
Fin
Ejemplo 24: Se pide sumar los n primeros nmeros naturales.
Solucin: Vamos a utilizar un acumulador

y un contador

. Recuerde que para el uso de un

acumulador, en primer lugar hay que inicializarlo, es decir, asignarle un valor inicial.
Generalmente los acumuladores se inicializan en cero.
Pseudocdigo Suma
Var

i, S, n: entero

Inicio
Leer (n)
S 0
desde i 1 hasta n
S S + i
fin_desde
Escribir (S)
Fin

51

Curso de Algoritmos y Estructura de Datos

FACTORIAL, DIVISORES, NMEROS PRIMOS


Ejemplo 25: Disear un algoritmo para calcular el factorial de n nmeros naturales ledos.
Solucin: Vamos a utilizar dos instrucciones repetitivas, una para calcular el factorial de un
nmero (tal y como lo hicimos en el ejercicio 23, y otra instruccin en que permite la lectura
(ingreso) de los

nmeros. Adems, debemos usar dos contadores diferentes:

, uno

para cada instruccin repetitiva.


Pseudocdigo Factorial
Var

i, j, num, n, fac: entero

Inicio
Leer (n)

(* n es la cantidad de nmeros que se va a ingresar *)

desde i 1 hasta n
Leer (num)
fac 1
desde j 1 hasta num
fac fac * j
fin_desde
Escribir (fac)
fin_desde
Fin

Ejemplo 26: Disee un algoritmo tal que, dado un nmero entero positivo, presente la
cantidad de divisores.
Solucin: Aqu vamos a usar el operador mod, debido a que si un nmero es divisible por otro,
entonces la divisin de ambos debe ser exacto y el residuo debe ser cero. Usaremos una
instruccin repetitiva dentro de la que se encontrar una instruccin selectiva, en donde la
condicin ser: si la divisin de un nmero entre otro arroja como residuo cero, es decir, num1
mod num2 = 0 entonces se contabiliza, lo cual se realiza a partir de un contador que representa
la cantidad de divisores, cont cont+1 (sin olvidar de inicializar el contador con el valor de
cero).

52

Curso de Algoritmos y Estructura de Datos

Pseudocdigo Cantidad_Divisores
Var

cont, i, num: entero

Inicio
cont 0
Leer (num)
desde i 1 hasta num
Si (num mod i = 0) entonces
cont cont +1
fin_si
fin_desde
Escribir (cont)
Fin
Ejemplo 27: Disee un algoritmo tal que, dado un nmero entero positivo, presente todos
sus divisores y la cantidad de estos.
Solucin: Similar al ejercicio anterior.
Pseudocdigo Divisores
Var

cont, i, num: entero

Inicio
cont 0
Leer (num)
desde i 1 hasta num
Si (num mod i = 0) entonces
Escribir ( i )
cont cont +1
fin_si
fin_desde
Escribir (cont)
Fin

53

Curso de Algoritmos y Estructura de Datos

Ejemplo 28: Disee un algoritmo tal que, para un grupo de n nmeros enteros positivos,
presente todos sus divisores y la cantidad de estos.
Solucin: Al ejercicio anterior se le agrega una instruccin repetitiva.
Pseudocdigo Divisores
Var

cont, i, j, num, n: entero

Inicio
Leer (n)
desde i 1 hasta n
cont 0
Leer (num)
desde j 1 hasta num
Si (num mod j = 0) entonces
Escribir ( j )
cont cont +1
fin_si
fin_desde
Escribir (cont)
fin_desde
Fin

54

Curso de Algoritmos y Estructura de Datos

Ejemplo 29: Disee un algoritmo tal que dado un nmero entero positivo, identifique si es
primo.
Solucin: Un nmero es primo cuando tiene como divisores nicamente a s mismo y a la
unidad. Para identificar si un nmero es primo, lo que se hace es contar todos sus divisores, y
solo cuando el nmero de divisores es dos, ser primo.
Pseudocdigo Primo
Var

i, num, cont: entero

Inicio
cont 0
Leer (num)
desde i 1 hasta num
Si (num mod i = 0) entonces
cont cont +1
fin_si
fin_desde
Si (cont=2) entonces
Escribir ( Es primo )
sino
Escribir No es primo )
fin_si
Fin
Ejemplo 30: Para un conjunto de

nmeros enteros positivos, identifique cuando es

primo, o compuesto mediante un mensaje en la pantalla: es primo o es compuesto . Si es


compuesto, presente sus divisores y la cantidad de divisores que posee. Adems, al final
presente cuantos de los n nmeros ingresados resultaron ser primos y cuntos resultaron
ser compuestos.
Solucin: Este ejercicio es una combinacin de los ejemplos anteriores, pero, aqu a parte de
utilizar un contador para la cantidad de divisores (cont_d) de cada nmero ingresado, vamos a
utilizar dos contadores adicionales para contabilizar la cantidad de primos (cont_p) y la cantidad
de compuestos (cont_c).

55

Curso de Algoritmos y Estructura de Datos

Pseudocdigo Ejemplo_30
Var

n, num, i, j, cont_d, cont_p, cont_c: entero

Inicio
cont_p 0
cont_c 0
Leer (n)
desde i 1 hasta n
Leer (num)
Si (num = 1) entonces
Escribir no es primo ni compuesto, es un nmero simple )
sino
cont_d 0
desde j 1 hasta num
Si (num mod j = 0) entonces
Escribir ( j )
cont_d cont_d + 1
fin_si
fin_desde
Si (cont = 2 ) entonces
Escribir es primo )
cont_p cont_p + 1
sino
Escribir Es compuesto )
Escribir Nmero de divisores: , cont_d)
cont_c cont_c + 1
fin_si
fin_si
fin_desde
Escribir Cantidad de nmeros primos: , cont_p)
Escribir Cantidad de nmeros compuestos: , cont_c)
Fin

56

Curso de Algoritmos y Estructura de Datos

Ejemplo 31: La ASJ est interesada en promover la natacin y para ello desea conocer
jvenes con las siguientes condiciones: edad (menor de 18 aos), estatura (mnimo 1.70
cm.) y peso (mximo 70 Kg.). Disear un algoritmo en el cual se lean la edad, estatura, peso
de un grupo de n deportistas y verifique cuantos de ellos cumplen las condiciones
impuestos. Presentar la edad, peso, estatura el nmero de jvenes que cumplen y el peso
promedio de estos.
Solucin:
Pseudocdigo ASJ
Var

edad, i, n, cont: entero


talla, peso, peso_prom, suma_p: real

Inicio
cont 0
suma_p 0
Leer (n)
desde i 1 hasta n
Leer (edad, talla, peso)
Si (edad < 18 talla 1.7 peso

70) entonces

cont cont + 1
suma_p suma_p + peso
Escribir (edad, talla, peso)
fin_si
fin_desde
Si (cont 0 ) entonces
peso_prom suma_p / cont
Escribir (peso_prom)
sino
Escribir Ninguno cumple las condiciones )
fin_si
Fin

57

Curso de Algoritmos y Estructura de Datos

MXIMOS Y MNIMOS
Ejemplo 32: Para n estudiantes se desea leer las notas (desde 0 hasta 20) y se pide
averiguar la mayor nota.
Solucin: Cuando se conoce el rango de valores que puede asumir una variable que represente a
un valor mximo, debemos inicializarlo con el menor de los valores del rango. Por ejemplo,
para este problema se van a leer notas los cuales se encuentran en el rango de 0 a 20, luego
mediante una serie de instrucciones vamos tratar de hallar cual fue la mayor de todas las notas
ingresadas la cual deber ser almacenada en una variable que llamaremos maxnota, pero antes
de todo, debemos inicializar a nuestra variable maxnota con el valor cero (que es el menor del
rango 0 20).
Pseudocdigo Ejemplo30
Var

n, nota, maxnota, i: entero

Inicio
Leer (n)
maxnota 0

Estamos inicializando la variable entera maxnota con el


valor 0 (cero), que es el menor de los valores del rango (0 a
20)

desde i 1 hasta n
Leer (nota)
Si (maxnota < nota) entonces
maxnota nota
fin_si
fin_desde
Escribir (maxnota)
Fin

58

Curso de Algoritmos y Estructura de Datos

Ejemplo 33: Para n estudiantes se desea leer las notas (Desde 0 hasta 20 y se pide
averiguar la menor nota.
Solucin: De forma anloga al ejercicio anterior. Cuando se conoce el rango de valores que
puede asumir una variable que represente a un valor mnimo, debemos inicializarlo con el
mayor de los valores del rango. Por ejemplo, para este problema se van a leer notas los cuales se
encuentran en el rango de 0 a 20, luego mediante una serie de instrucciones vamos tratar de
hallar cual fue la menor de todas las notas ingresadas la cual deber ser almacenada en una
variable que llamaremos minnota, pero antes de todo, debemos inicializar a nuestra variable
minnota con el valor 20 (que es el mayor del rango 0 20).

Pseudocdigo Ejemplo33
Var

n, nota, minnota, i: entero

Inicio
Leer (n)
minnota 20

Estamos inicializando la variable entera minnota con el


valor 20 (veinte), que es el mayor de los valores del rango
(0 a 20)

desde i 1 hasta n
Leer (nota)
Si (minnota > nota) entonces
minnota nota
fin_si
fin_desde
Escribir (minnota)
Fin

59

Curso de Algoritmos y Estructura de Datos

Ejemplo 34: Para n estudiantes se desea leer los cdigos y se pide averiguar el mayor
cdigo ingresado.
Solucin: Cuando no se conoce el rango de valores que puede asumir una variable que
represente a un valor mximo, debemos inicializarlo con el primero de los datos ingresados.
Por ejemplo, para este problema se van leer (ingresar) cdigos de los que no sabemos en que
rango se encuentran, y mediante una serie de instrucciones vamos tratar de hallar cual fue el
mayor de todos los cdigos ingresados el cual deber ser almacenado en una variable que
llamaremos maxcod, pero antes de todo, debemos inicializar a nuestra variable maxcod con el
primero de los datos ingresados. (En el supuesto caso en el que nos hubieran dicho que los
cdigos se encuentran en el rango 100

999 , entonces hubiramos inicializado a la variable

maxcod con 100)


Se puede resolver de dos formas que no difieren mucho.
Pseudocdigo Ejemplo34
Var

n, cod, maxcod, i: entero

Inicio
Leer (n)
desde i 1 hasta n
Leer (cod)
Si (i = 1) entonces
maxcod cod

Estamos inicializando la variable entera maxcod con el


primero de los datos ingresados (cuando i = 1, es decir, a la
primera vez que se ejecuta la instruccin desde)

sino
Si (maxcod < cod) entonces
maxcod cod
fin_si
fin_si

Cuando i = 2 , se lee el segundo cdigo, y se compara el cdigo


ledo anteriormente (que fue almacenado en maxcod) con el
cdigo ledo ahora (que a sido almacenado en cod), de tal
forma que maxcod se quede con el mayor valor de entre estos
dos. As se va repitiendo la instruccin y nos aseguramos que
maxcod almacene el mayor de todos los cdigos ledos.

fin_desde
Escribir (maxcod)
Fin

60

Curso de Algoritmos y Estructura de Datos

Pseudocdigo Ejemplo34
Var

n, cod, maxcod, i: entero

Inicio
Leer (n)
Leer (cod)
maxcod cod
desde i 2 hasta n
Leer (cod)
Si (maxcod < cod) entonces
maxcod cod

Estamos inicializando la variable entera maxcod con el


primero de los datos ingresados
Debido a que inicializamos la variable maxcod fuera de la
instruccin repetitiva desde y el total de datos ingresados
debe de ser n, entonces, la instruccin repetitiva solo se
repetir n-1 veces (desde i = 2 hasta n)

fin_si
fin_desde
Escribir (maxcod)
Fin

61

Curso de Algoritmos y Estructura de Datos

Ejemplo 35: Para n estudiantes se desea leer las notas (desde 0 hasta 20) y se pide
averiguar la mayor nota y cuntos lo obtuvieron. Solucin:
Pseudocdigo Ejemplo35
Var

n, nota, maxnota, i, cont: entero

Inicio
Leer (n)
cont 0

Como vamos a utilizar un contador, no olvidar inicializarlo en cero

maxnota 0
desde i 1 hasta n

Debido a que se conoce el rango, inicializamos la


variable entera maxnota con el valor de cero

Leer (nota)
Si (maxnota < nota) entonces
maxnota nota
cont 1
Sino
Si (maxnota = nota) entonces
cont cont + 1
fin_si
fin_si

En esta parte se va a encontrar la mayor nota


ingresada, adems de actualizar el contador a 1.
Actualizar el contador a 1 quiere decir, regresar el
valor de este a 1, porque puede darse el caso en
donde se haya estado contabilizando una nota que
pareca que era la mayor de todas, y luego cuando
se ingrese una nota mayor, el contador debe volver
a 1.
En esta parte del algoritmo, se va a contabilizar el
nmero de coincidencias con la mayor nota.

fin_desde
Escribir (maxnota, cont)
Fin
Para probar si funciona este algoritmo, supongamos que las notas que se debieron ingresar fueron:
05, 10, 15, 15, 12, 17, 17, 05. El proceso sera el siguiente:
Debemos ingresar la cantidad de notas que vamos a almacenar, en este caso n debe ser 8.
Leer (n)
n=8
Inicializamos el contador con el valor de cero y a la variable maxnota tambin con cero.
cont 0
maxnota 0
Comenzamos con la instruccin repetitiva DESDE
desde i 1 hasta n

62

Curso de Algoritmos y Estructura de Datos

* CUANDO i = 1 :
Ingresamos la primera nota (la cual ser leda por la computadora)
Leer (nota)
nota = 05
Comparamos la variable maxnota que almacena el valor de 0 con la nota ahora ingresada que
almacena el valor de 05
Si (maxnota < nota) entonces
Debido a que s se cumple la condicin (00 < 05) almacenamos en la variable maxnota, el valor
de nota (05)
maxnota nota
maxnota = 05
Y el contador lo inicializamos en 1 para indicar que encontramos una mayor nota.
cont 1
* CUANDO i = 2 :
Ingresamos la segunda nota
Leer (nota)
nota = 10
Comparamos la variable maxnota que almacena el valor de 05 con la nota ahora ingresada que
almacena el valor de 10
Si (maxnota < nota) entonces
Debido a que s se cumple la condicin (05 < 10) almacenamos en la variable maxnota, el valor
de nota (10)
maxnota nota
maxnota = 10
Y el contador lo inicializamos en 1 (lo actualizamos a 1) para indicar que encontramos una
mayor nota (mayor que la anterior)
cont 1
* CUANDO i = 3:
Ingresamos la tercera nota
Leer (nota)
nota = 15
Comparamos la variable maxnota que almacena el valor de 10 con la nota ahora ingresada que
almacena el valor de 15
Si (maxnota < nota) entonces
63

Curso de Algoritmos y Estructura de Datos

Debido a que s se cumple la condicin (10 < 15) almacenamos en la variable maxnota, el valor
de nota (15)
maxnota nota
maxnota = 15
Y el contador lo inicializamos en 1 (lo actualizamos a 1) para indicar que encontramos una
mayor nota (mayor que la anterior)
cont 1
* CUANDO i = 4:
Ingresamos la cuarta nota
Leer (nota)
nota = 15
Comparamos la variable maxnota que almacena el valor de 10 con la nota ahora ingresada que
almacena el valor de 15
Si (maxnota < nota) entonces
Debido a que no se cumple la condicin (15 < 15), nos vamos hacia el Sino
Sino
Evaluamos la condicin que se encuentra dentro del Sino
Si (maxnota = nota) entonces
Debido a que s se cumple esta condicin (15 = 15), ejecutamos lo que sigue a continuacin
cont cont + 1
Contabilizamos las coincidencias con esta supuesta mayor nota (por lo menos hasta ahora)
cont = 1 + 1 = 2
* CUANDO i = 5:
Ingresamos la quinta nota
Leer (nota)
nota = 12
Comparamos la variable maxnota que almacena el valor de 15 con la nota ahora ingresada que
almacena el valor de 12
Si (maxnota < nota) entonces
Debido a que no se cumple la condicin (15< 12), nos vamos hacia el Sino
Sino
Evaluamos la condicin que se encuentra dentro del Sino
Si (maxnota = nota) entonces
64

Curso de Algoritmos y Estructura de Datos

Debido a que tampoco se cumple esta condicin (15 = 12), nos salimos de la instruccin
condicional y pasamos a la siguiente repeticin.
* CUANDO i = 6:
Ingresamos la sexta nota
Leer (nota)
nota = 17
Comparamos la variable maxnota que almacena el valor de 15 con la nota ahora ingresada que
almacena el valor de 17
Si (maxnota < nota) entonces
Debido a que s se cumple la condicin (15 < 17) almacenamos en la variable maxnota, el valor
de nota (17)
maxnota nota
maxnota = 17
Y el contador lo inicializamos en 1 (lo actualizamos a 1) para indicar que encontramos una
mayor nota (mayor que la anterior)
cont 1
cont = 1
* CUANDO i = 7:
Ingresamos la sptima nota
Leer (nota)
nota = 17
Comparamos la variable maxnota que almacena el valor de 17 con la nota ahora ingresada que
almacena el valor de 17
Si (maxnota < nota) entonces
Debido a que no se cumple la condicin (17 < 15), nos vamos hacia el Sino
Sino
Evaluamos la condicin que se encuentra dentro del Sino
Si (maxnota = nota) entonces
Debido a que s se cumple esta condicin (17 = 17), ejecutamos lo que sigue a continuacin
cont cont + 1
Contabilizamos las coincidencias con esta supuesta mayor nota (por lo menos hasta ahora)
cont = 1 + 1 = 2
65

Curso de Algoritmos y Estructura de Datos

* CUANDO i = 8:
Ingresamos la octava nota
Leer (nota)
nota = 05
Comparamos la variable maxnota que almacena el valor de 17 con la nota ahora ingresada que
almacena el valor de 05
Si (maxnota < nota) entonces
Debido a que no se cumple la condicin (17< 05), nos vamos hacia el Sino
Sino
Evaluamos la condicin que se encuentra dentro del Sino
Si (maxnota = nota) entonces
Debido a que tampoco se cumple esta condicin (17 = 05), nos salimos de la instruccin
condicional.
Ahora que ya se termin nmero de notas a ingresar, maxnota almacena la mayor de todas las
notas ingresadas que fue 17. Solo nos queda mostrarlo por la pantalla y la cantidad de veces que
se ingres
Escribir (maxnota, cont)
En la pantalla deber mostrarse 17 y

66

Curso de Algoritmos y Estructura de Datos

Ejemplo 36: Para n estudiantes se desea leer las notas (desde 0 hasta 20) y se pide
averiguar la menor nota y cuntos lo obtuvieron. Solucin:
Pseudocdigo Ejemplo36
Var

n, nota, minnota, i, cont: entero

Inicio
Leer (n)

Como vamos a utilizar un contador, no olvidar inicializarlo en cero

cont 0
minnota 20
desde i 1 hasta n

Debido a que se conoce el rango, inicializamos la variable


entera minota con el valor de veinte

Leer (nota)
Si (minnota > nota) entonces
minnota nota
cont 1
Sino
Si (minnota = nota) entonces
cont cont + 1
fin_si
fin_si
fin_desde
Escribir (minnota, cont)
Fin
Este algoritmo se puede comprobar de la misma forma que en el ejercicio anterior.

67

Curso de Algoritmos y Estructura de Datos

Ejemplo 37: Para un grupo de n alumnos se desea leer el cdigo (entero de 3 dgitos), nota
(de 0 a 20) y sexo (M o F), luego se pide lo siguiente:
a) Presentar la menor nota en los hombres y el mayor de los cdigos que la tiene.
b) Presentar el nmero de alumnos hombres que tiene la menor nota.
Solucin:
Pseudocdigo Ejemplo37
Var

cod, n, maxcod, i, cont: entero


sexo: caracter
nota, minnota: real

Inicio
Leer (n)
maxcod 100
minnota 20
cont 0
desde i 1 hasta n
Leer (cod, nota, sexo)
Si (sexo =

) entonces

Si (minnota > nota) entonces


minnota nota
maxcod cod
cont 1
Sino
Si (minnota = nota) entonces
cont cont + 1
Si (maxcod < cod ) entonces
maxcod cod
fin_si
fin_si
fin_si
fin_si
fin_desde
Escribir (minnota, maxcod, cont)
Fin

68

Curso de Algoritmos y Estructura de Datos

Ejemplo 38: Para un conjunto de n personas se desea averiguar la edad promedio por sexo
y cul es la edad mayor en cada caso (la mxima edad en cada sexo). Desarrolla un
algoritmos que reciba las edades de las n personas y entregue la informacin pedida.
Pseudocdigo Ejemplo_38
Var

edad, n, i , contM, contF, maxM, maxF, sumaM, sumaF: entero


sexo: caracter

Inicio
Leer (n)
contM 0
contF 0
sumaM 0
sumaF 0
maxM 0
maxF 0
desde i 1 hasta n
Leer (edad, sexo)
En_caso (sexo)
M, m:

sumaM sumaM + edad


contM contM + 1
Si (edad > maxM) entonces
maxM edad
fin_si

F, f:

sumaF sumaF + edad


contF contF + 1
Si (edad > maxF) entonces
maxF edad
fin_si

fin_caso
fin_desde
Escribir (maxM, maxF)
Si (contM = 0) entonces
Escribir no hay promedio )
Sino
Escribir (sumaM div contM)

(* Para mostrar un promedio entero *)

fin_si

69

Curso de Algoritmos y Estructura de Datos

Si (contF = 0) entonces
Escribir no hay promedio )
sino
Escribir (sumaM div contF)

(* Para mostrar un promedio entero *)

fin_si
Fin

70

Curso de Algoritmos y Estructura de Datos

Ejemplo 39: SEGUNDA MAYOR EDAD. Para un conjunto de n personas, se desea leer sus
edades y luego se desea presentar la segunda mayor edad. Solucin;
Pseudocdigo Segunda_mayor_edad
Var

edad, i, edad, max1, max2: entero

Inicio
Leer (n)
max1 0
max2 0
desde i 1 hasta n
Leer (edad)
Si (i = 1) entonces
Si (max1 < edad) entonces
max1 edad
fin_si
Sino

( * cuando i = 2, 3, 4, , n * )

Si (max1 < edad) entonces


max2 max1
max1 edad
sino

( * no considero la igualdad edad = max1 * )

Si (max1 > edad) entonces


Si (max2 < edad) entonces
max2 edad
fin_si
fin_si
fin_si
fin_si
fin_desde
Si (max = 0) entonces (*max2 ser cero si es que todos los datos ingresados son iguales*)
Escribir No hay segunda mayor )
sino
Escribir (max2)
fin_si
Fin

71

Curso de Algoritmos y Estructura de Datos

Ejemplo 40: SEGUNDA MENOR EDAD. Para un conjunto de n personas, se desea leer sus
edades y luego se desea presentar la segunda menor edad.
Solucin: A diferencia del ejercicio anterior, no vamos a inicializar las variables min1 y min2 en
cero, sino con la primera edad leda.
Pseudocdigo Segunda_menor_edad
Var

edad, i, edad, min1, min2: entero

Inicio
Leer (n)
desde i 1 hasta n
Leer (edad)
Si (i = 1) entonces
min1 edad
min2 edad
Sino

( * i = 2, 3, 4, , n * )

Si (min1 > edad) entonces


min2 min1
min1 edad
sino
Si (min1 < edad) entonces
Si (min2 > edad) entonces
min2 edad
fin_si
fin_si
fin_si
fin_si
fin_desde
Si (min1 min2) entonces
Escribir Segunda menor edad: , min2)
sino
Escribir ( No existe segunda menor edad )
fin_si
Fin

72

Curso de Algoritmos y Estructura de Datos

Ejemplo 41: Para un conjunto de n datos reales se desea determinar el mayor de los datos
negativos y cuntas veces aparece. Por ejemplo: para n=7, datos: 4, -7, 6, -3, 5, -3, 1
Solucin
Pseudocdigo Mayor_negativo
Var

n, i, cont: entero
num: real
encont: lgico

Inicio
encont F

Vamos a inicializar al switch con el valor falso

Leer (n)
desde i 1 hasta n
Leer (num)
Si (num < 0) entonces
Si ( encont) entonces

Vamos a descartar los datos no negativos que


sean ingresados

maxneg num
cont 1
encont V
sino
Si (maxneg < num) entonces
maxneg num
cont 1
sino
Si (maxneg = num) entonces
cont cont + 1
fin_si
fin_si
fin_si
fin_si
fin_desde
Escribir (maxneg, cont)
Fin

73

Curso de Algoritmos y Estructura de Datos

Explicacin del ejemplo 41: Vamos a crear una variable llamada maxneg y esta la tenemos que
inicializar con el primer dato negativo ingresado. Pero puede darse el caso que el primer dato
ingresado no sea negativo, sino cero o positivo, cmo sabremos en qu momento vamos a tener
un dato negativo con el cual debemos inicializar nuestra variable maxneg? Para esto, vamos a
utilizar una variable adicional, algunos lo conocen como switch, el identificador para este switch
ser encont, ser de tipo lgico y servir para poder saber en qu momento se ingresar un dato
negativo, de esta forma podremos inicializar la variable maxneg y podremos compararlo con los
datos negativos siguientes (Si es que se ingresa algn dato no negativo, no se les tomar en
cuenta)

74

Curso de Algoritmos y Estructura de Datos

B. BUCLE CON ENTRADA CONTROLADA (ESTRUCTURA REPETITIVA MIENTRAS). Es


utilizado cuando el nmero de repeticiones o iteraciones no se conoce, aunque tambin sirve
cuando s se conoce el nmero de repeticiones. En esta estructura, el cuerpo del bucle se repite
mientras se cumpla una determinada condicin.
Funcionamiento: Cuando se ejecuta la instruccin mientras, lo primero que sucede es que se
evala una condicin. Si la condicin resulta ser verdadera, se ejecuta el cuerpo del bucle,
despus se evala de nuevo la condicin. Este proceso se repite una y otra vez mientras la
condicin sea verdadera. Cuando la condicin resulte ser falsa, no se realiza ninguna accin que
se encuentra dentro del cuerpo del bucle, sino que el algoritmo sigue con las dems
instrucciones.

condicin

Mientras (condicin) hacer

Sentencia

fin_mientras

Sentencia
Cuerpo del bucle
Cuerpo del bucle

OBS:
Esta instruccin tiene desde cero hasta ms repeticiones
La condicin debe modificarse dentro del bucle para evitar que se genere un bucle infinito.
Ejemplo: Un bucle finito.
x2
Mientras (x > 0) hacer
Escribir (x)
x x-1
fin_mientras

En la pantalla se ver
nicamente los valores
positivos de x: 2 y 1(segn
la condicin), pues cuando
x a toma un valor no
positivo, la instruccin
repetitiva Mientras
termina

2
1

75

Curso de Algoritmos y Estructura de Datos

Ejemplo: Un bucle infinito

En la pantalla se vern
los valores de x: 2, 3, 4,
., etc. Y esto
continuar hasta que la
computadora se
cuelgue , ya que la
instruccin Mientras
no terminar mientras
x no tome un valor
negativo lo cual nunca
pasar pues x va en
aumento

x2
Mientras (x > 0) hacer
Escribir (x)
x x+1
fin_mientras

2,3,4,5,6,7,8,9
10,11,12,13,14,1
5,16,17,18

Ejemplo 42: Imprimir todos los nmeros primos entre 2 y 100 (incluye a 2 y a 100), usando
la instruccin mientras.
Solucin. Ya sabemos el algoritmo para identificar a un nmero primo. Ahora le agregaremos
algo ms.
Pseudocdigo Primos
Var

num, cont_div, i: entero

Inicio
num 2
Mientras (num

100) hacer

desde i 1 hasta num


Si (num mod i = 0) entonces
cont_div cont_div+1
fin_si
fin_desde
Si (cont_div = 2) entonces
Escribir (num)
fin_si
num num+1
fin_mientras

La variable num debe ir aumentando de uno


en uno

Fin

76

Curso de Algoritmos y Estructura de Datos

El ejemplo tambin pudo haberse resuelto con el uso de dos estructuras repetitivas desde de la
siguiente forma:
Pseudocdigo Primos
Var

num, cont_div, i: entero

Inicio
desde num 2 hasta 100
desde i 1 hasta num
Si (num mod i = 0) entonces
cont_div cont_div+1
fin_si
fin_desde
Si (cont_div = 2) entonces
Escribir (num)
fin_si
fin_desde
Fin

Usando la instruccin desde no hubo la necesidad de ir


aumentando la variable num, porque esta aumenta una unidad
automticamente durante cada repeticin

77

Curso de Algoritmos y Estructura de Datos

Ejemplo 43: Dado un nmero entero positivo, indicar cuantos dgitos tiene.
Solucin: Vamos a realizar divisiones sucesivas entre 10 y al nmero se le va ir asignando su
cociente. Ejemplo: Si tuviramos el nmero num = 4512 hacemos:
cont 0
num num div 10 , es decir
num 4512 div 10 lo cual quedara
num 451 ; num = 451 y seguidamente contabilizamos cont cont+1; cont = 1
num num div 10 , es decir
num 451 div 10 lo cual quedara
num 45 ; num = 45 y seguidamente contabilizamos cont cont+1; cont = 1+1=2
num num div 10 , es decir
num 45 div 10 lo cual quedara
num 4 ; num = 4 y seguidamente contabilizamos cont cont+1; cont = 2+1=3
num num div 10 , es decir
num 4 div 10 lo cual quedara
num 0 ; num = 0 y seguidamente contabilizamos cont cont+1; cont = 3+1=4
Aqu debemos parar, pues el contador ya contabiliz la cantidad de cifras que tena el nmero
inicial, por tanto, la condicin debera ser: Mientras (num 0) hacer

Pseudocdigo Ejemplo_43
Var

num, cont: entero

Inicio
Leer (num)
cont 0
Mientras (num

0) hacer

num num div 10


cont cont+1

Al ir asignando al nmero el cociente de su


divisin entre 10, iremos disminuyendo la
cantidad de cifras del nmero y a la vez
aprovecharemos para contabilizar sus
cifras.

fin_mientras
Escribir (cont)
Fin

78

Curso de Algoritmos y Estructura de Datos

Ejemplo 44: Disee un algoritmo para invertir un nmero entero (de cualquier cantidad de
cifras). Una vez invertido, presentarlo.
Solucin: Ya se hizo el algoritmo para invertir un nmero, pero se deba conocer la cantidad de
cifras que tena el nmero. Ahora nos piden invertir un nmero, no importando la cantidad de
cifras que tenga. Este ejercicio se resuelve con el uso de una estructura mientras.
Pseudocdigo Invertir
Var

inv, num, r : entero

Inicio
Leer (num)
inv 0

No olviden inicializar con cero a la variable inv, que almacenar al


nmero invertido.

Mientras (num 0) hacer


r num mod 10
num num div 10
inv inv *10 + r
fin_mientras
Escribir (num, inv)
Fin
IMPORTANTE: Fjense que la variable num va perdiendo su valor inicial (disminuye la cantidad
de cifras) hasta ser igual a cero.

79

Curso de Algoritmos y Estructura de Datos

Ejemplo 45: Disee un algoritmo para invertir un conjunto de nmeros enteros. (de
cualquier cantidad de cifras). Una vez invertidos, presentarlos. Solucin:
Pseudocdigo Invertir_varios_nmeros
Var

i, inv, num, n, r : entero

Inicio
Leer (n)
desde i 1 hasta n
Leer (num)
inv 0
Mientras (num 0) hacer
r num mod 10
num num div 10
inv inv *10 + r
fin_mientras
Escribir (num, inv)
fin_desde
Fin

80

Curso de Algoritmos y Estructura de Datos

Ejemplo 46: Disear un algoritmo para identificar si un nmero entero positivo es capica.
Solucin: Un numeral es capica si es igual a su forma invertida. Lo que haremos ser invertir al
nmero y compararlo con su forma inicial. Pero, recuerde que el valor de num se pierde y llega
ser igual a cero. Debido a que necesitamos el valor de num intacto, utilizaremos una variable
auxiliar, y va a ser a esta variable a la cual la vamos a invertir.
Pseudocdigo Capica
Var

aux, inv, num: entero

Inicio
Leer (num)
aux num
inv 0

Almacenamos el valor de num en aux, y


empezamos a trabajar con aux, para que
num mantenga su valor y no lo pierda.

Mientras (aux 0) hacer


r aux mod 10
aux aux div 10
inv inv *10 + r
fin_mientras
Si (inv = num) entonces
Escribir es capica )

Comparamos el nmero inicial con su forma


invertida

sino
Escribir No es capica )
fin_si
Fin

81

Curso de Algoritmos y Estructura de Datos

Ejemplo 47: Disear un algoritmo para identificar de un conjunto de n nmeros enteros


positivos aquellos que son capicas.
Solucin:
Pseudocdigo Capica
Var

n, i, aux, inv, num: entero

Inicio
Leer (n)
desde i 1 hasta n
Leer (num)
aux num
inv 0

Almacenamos el valor de num en aux, y


empezamos a trabajar con aux, para que
num mantenga su valor y no lo pierda.

Mientras (aux 0) hacer


r aux mod 10
aux aux div 10
inv inv *10 + r
fin_mientras
Si (inv = num) entonces
Escribir es capica )

Comparamos el nmero inicial con su forma


invertida

sino
Escribir No es capica )
fin_si
fin_desde
Fin

82

Curso de Algoritmos y Estructura de Datos

Ejemplo 48: Disear un algoritmo que reciba n nmeros enteros positivos, y

que

identifique a aquellos que son capicas, mostrando un mensaje: s es capica . Al final, que
muestre cuntos de los nmeros ingresados fueron capicas.
Solucin:
Pseudocdigo Capicas
Var

n, i, aux, inv, num, cont: entero

Inicio
Leer (n)
cont 0

No olvidar inicializar el contador de


capicas

desde i 1 hasta n
Leer (num)
aux num
inv 0

Almacenamos el valor de num en aux, y


empezamos a trabajar con aux, para que
num mantenga su valor y no lo pierda.

Mientras (aux 0) hacer


r aux mod 10
aux aux div 10
inv inv *10 + r
fin_mientras
Si (inv = num) entonces
Escribir es capica )

Comparamos el nmero inicial con su forma


invertida

cont cont +1
sino
Escribir No es capica )
fin_si
fin_desde
Escribir cantidad total de capicas: , cont)
Fin

83

Curso de Algoritmos y Estructura de Datos

Ejemplo 49: Para un conjunto de n nmeros enteros positivos, se desea saber Cuntos de
ellos son capicas con el nmero de cifras impares?
Solucin:
Pseudocdigo Ejemplo49
Var

i, n, r, cf, inv, num, aux: entero

Inicio
Leer (n)
cont 0
desde i 1 hasta n
cf 0
Leer (num)
inv 0
aux num
Mientras (aux 0) hacer
r aux mod 10
aux aux div 10
inv inv *10 + r
cf cf + 1
fin_mientras
Si (inv = num cf mod 2 0) entonces
cont cont + 1
fin_si
fin_desde
Escribir (cont)
Fin

84

Curso de Algoritmos y Estructura de Datos

Ejemplo 50: Para un nmero entero positivo, determinar si es primo o no.


Solucin: Este mtodo es del profesor Acosta. Recordar que N es primo si no es divisible entre 2,
3,

N . Lo que se va a realizar es: Vamos a elevar al cuadrada a 2, 3, ,

32 ,

, N.

N , para obtener 2 2 ,

Pseudocdigo Ejemplo_50
Var

num, d: entero
primo: lgico

Inicio
Leer (num)
d2
primo V
Mientras (d*d < num primo) hacer
Si(num mod d = 0) entonces
primo F
sino
dd + 1
fin_si
fin_mientras
Si (primo) entonces
Escribir ( El nmero es primo )
sino
Escribir El nmero no es primo )
fin_si
Fin

85

Curso de Algoritmos y Estructura de Datos

Ejemplo 51: A un conjunto de 100 alumnos se le asigna un cdigo que oscila entre 500 y
600, luego de rendir un examen se obtiene la nota (0 a 20). Se desea averiguar la mayor
nota, cuantas veces aparece y los cdigos de los alumnos que lo obtuvieron.
Solucin:
Pseudocdigo Ejemplo51
Var cod, nota, max, i, cont, lista: entero
Inicio
desde i 1 hasta n
Leer (cod, nota)
Si (i = 1) entonces
cont 1
max nota
lista cod
sino
Si (max < nota ) entonces
max nota
cont 1
lista cod
sino
Si (nota = max) entonces
cont cont + 1
lista lista*1000 + cod
fin_si
fin_si
fin_si
fin_desde
Escribir (max, cont)
Mientras (lista 0) hacer
cod lista mod 1000
Escribir (cod)
lista lista div 1000
fin_mientras
Fin
86

Curso de Algoritmos y Estructura de Datos

Ejemplo 52: Disear un algoritmo que reciba n nmeros enteros positivos , y

que

identifique a aquellos que son capicas, mostrando un mensaje: s es capica . En el caso


que no sea capica que muestre un mensaje: No es capica y que adems aparezca la
cantidad de cifras de este nmero, que muestre todos sus divisores y la cantidad de
divisores de este nmero mostrando un mensaje si fue o no fue primo. Al final, que muestre
cuntos de los nmeros ingresados fueron capicas, cuntos no fueron capicas y cuantos
fueron primos.
Solucin:
Pseudocdigo Ejemplo52
Var

num, n, cont_cif, i, cont_div, cont_cap, cont_prim, inv, aux: entero

Inicio
Repetir
Leer (n)
Hasta_que (n > 0)
cont_prim 0
cont_cap 0
desde i 1 hasta n
Repetir
Leer (num)
Hasta_que (num > 0)
cont_cif 0
inv 0
aux num
Repetir
r aux mod 10
aux aux div 10
cont_cif cont_cif + 1
inv inv * 10 + r
Hasta_que (aux = 0)
Si (num = inv) entonces
Escribir ( Es capica )
cont_cap cont_cap+1
87

Curso de Algoritmos y Estructura de Datos

sino
Escribir ( No es capica )
fin_si
Escribir ( Cantidad de cifras: , cont_cif)
cont_div 0
desde i 1 hasta num
Si (num mod i = 0) entonces
Escribir (i, es divisor de , num)
cont_div cont_div + 1
fin_si
fin_desde
Escribir ( Cantidad de divisores , cont_div)
Si (cont = 2) entonces
Escribir (num, es primo )
cont_prim cont_prim + 1
Sino
Escribir (num, no es primo )
fin_si
fin_desde
Escribir ( Cantidad de capicas: , cont_cap)
Escribir ( Cantidad de no capicas , n cont_cap)
Escribir ( Cantidad de primos , cant_prim)
Fin

88

Curso de Algoritmos y Estructura de Datos

C. BUCLE CON SALIDA CONTROLADA (ESTRUCTURA REPETITIVA REPETIR). Como habrn


notado, en las estructuras repetitivas mientras, si la condicin es inicialmente falso, el cuerpo
del bucle no se ejecutar ni una sola vez; pero existen muchas situaciones en las que se desea
que un bucle se ejecute al menos una vez antes de comprobar la condicin de repeticin. Son en
estas situaciones cuando se utiliza las estructuras repetitivas repetir, las cuales se ejecutarn s
o s por lo menos una vez.
Funcionamiento: Con una estructura repetir, el cuerpo del bucle se ejecuta siempre al menos
una vez. Cuando una instruccin repetir se ejecuta, lo primero que sucede es la ejecucin del
cuerpo del bucle, y a continuacin, se evala la condicin. Si se evala como falsa, el cuerpo del
bucle se repite y la condicin se evala otra vez. Solo cuando la condicin resulte ser verdadera,
all el bucle termina.

Repetir

Sentencia

Sentencia

Hasta_que (condicin)
condicin

Cuerpo del bucle

Cuerpo del bucle

OBS:
Debemos modificar la condicin en el cuerpo del bucle para evitar que sea infinito.
USOS DE LA ESTRUCTURA REPETIR
a) Validacin de la entrada de datos:
Ejemplos:
Validar que un dato sea positivo:
Repetir
Leer (dato)
Hasta_que (dato > 0)

89

Curso de Algoritmos y Estructura de Datos

Validar una nota de 0 a 20


Repetir
Leer (nota)
Hasta_que (0 nota nota 20)
Validar un cdigo de tres cifras
Repetir
Leer (cod)
Hasta_que (100 cod cod 999)
En cada uno de las estructuras anteriores, el programa se va a repetir indefinidamente y solo
dejar de repetirse hasta que sta resulte ser verdadera.
b) Para el uso de mens (opciones)
Ejemplo:
Mostrar una lista de opciones y terminar o salir si y solo s se elija la opcin correspondiente para
tal accin.

Sea: n1 = 3 y n2 = 5

Leer (n1, n2)


Repetir
Escribir Men de Opciones )
Escribir

1. Sumar )

Escribir

2. Multiplicar )

Escribir

3. Salir )

Men de opciones
1. Sumar
2. Multiplicar
3. Salir
Opcin:

Repetir
Escribir opcin: )
Leer (opc)
Hasta_que (opc = 1 opc = 2 opc = 3)
En_caso (opc)
1: Escribir (n1+n2)
2: Escribir (n1 * n2)

opcin 1:

opcin 2:

15

fin_caso
Hasta_que (opc = 3)

90

Curso de Algoritmos y Estructura de Datos

MXIMO COMN DIVISOR Y MNIMO COMN MLTIPLO


Ejemplo 53: Dados nos nmeros enteros positivos, determine el mximo comn divisor de
dichos nmeros.
Solucin:
Vamos a utilizar el algoritmo de Euclides para calcular el mximo comn divisor (MCD) de dos
nmeros a y b.
Por ejemplo: Si los nmeros fueran a = 24 y b = 18. Los pasos son los siguientes:
-

Realizo la divisin entera de 24 entre 18.

El divisor (18) pasa a convertirse en el dividendo.

El resto de la divisin entera (6) pasa a convertirse en el divisor.

Este proceso se repite hasta que se obtiene resto = 0. Luego el MCD ser el ltimo divisor.
OBS: El algoritmo de euclides permite calcular el MCD de dos nmeros sin importar quin es
mayor o quin es menor. Funciona en cualquier orden.
Pseudocdigo MCD
Var

a, b, r: entero

Inicio
Leer (a, b)
Repetir
r a mod b
a b
b r
Hasta_que (r = 0)
Escribir (a)

La variable
nmeros

almacena el mcd de los

Fin

91

Curso de Algoritmos y Estructura de Datos

Ejemplo 54: Dados nos nmeros enteros positivos, determine el mnimo comn mltiplo de
dichos nmeros.
Solucin: No vamos a calcular directamente el mnimo comn mltiplo (MCM) de los nmeros,
sino que usaremos la siguiente propiedad. A partir del clculo del MCD se podr calcular el MCM.
MCD (a, b) x MCM (a, b) = a x b

Pseudocdigo MCM
Var

a, b, prod, mcm, r: entero

Inicio
Leer (a, b)
prod a * b
Repetir
r a mod b
a b
b r
Hasta_que (r = 0)
mcm prod div a
Escribir (mcm)
Fin

92

Curso de Algoritmos y Estructura de Datos

Ejemplo 55: Para n (n 2) nmeros enteros positivos determine el MCD.


Solucin: Hallaremos el mcd tomando a los nmeros de dos en dos, ejemplo:
12

10

mcd = 4
mcd = 2
mcd = 2
El procedimiento general ser:

n1

n2

n3

..

mcd1
Pseudocdigo MCD
Var

n, mcd, num, r, i: entero

Inicio

mcd2
mcd3

Repetir
Leer (n)
Hasta_que (n 2)
desde i 1 hasta n
Repetir
Leer (num)
Hasta_que (num > 0)
Si (i = 1) entonces
mcd num
sino
Repetir
r mcd mod num
mcd num
num r
Hasta_que (r = 0)
fin_si
fin_desde
Escribir (mcd)
Fin

93

Curso de Algoritmos y Estructura de Datos

Ejemplo 56: Para n (n 2) nmeros enteros positivos determine el MCM.


Solucin: Hallaremos el mcm tomando a los nmeros de dos en dos, ejemplo:
15
18
24
mcd = 3
mcm = 90

mcd = 6
mcm = 360

El procedimiento general ser:


mcm
Pseudocdigo MCM
Var

mcm, n, mcd, num, r, i: entero

n1

n2

n3

..

mcm1

Inicio
mcm2

Repetir
Leer (n)
Hasta_que (n 2)

mcm3

desde i 1 hasta n
Repetir
Leer (num)
Hasta_que (num > 0)
Si (i = 1) entonces
mcd num
mcm num
sino
mcm mcm * num
Repetir
r mcd mod num
mcd num
num r
Hasta_que (r = 0)
mcm mcm div mcd
fin_si
fin_desde
Escribir (mcm)
Fin
94

Curso de Algoritmos y Estructura de Datos

Ejemplo 57: Determine la siguiente suma para x y n dados:

S=

x2 x4 x6
x 2n
+
+
+ ... + (1) n+1
2! 4! 6!
(2n)!

Pseudocdigo Suma
Var

x, S, term: real
n, i: entero

Inicio
Leer ( x )
Repetir
Leer (n)
Hasta_que (n>0)
S0
term -1
desde i 1 hasta n
term -1 * term * x * x / ((2 * i 1) * (2 * i))
S S + term
fin_desde
Escribir (S)
Fin

95

Curso de Algoritmos y Estructura de Datos

Ejemplo 58: (Primera prctica califica, ciclo 97-I, 26-04-97) Dado las ubicaciones (puntos
no colineales en el plano) de tres clientes A, B, y C; se requiere determinar la ubicacin de un
centro comercial que equidiste de estas tres ciudades.
Solucin: Solo vamos a dejar planteado la solucin. La ubicacin del centro comercial viene a ser
el circuncentro del tringulo de vrtices A, B, y C. Para determinar las coordenadas del
circuncentro vamos a recurrir a la geometra analtica. Unimos mediante 3 segmentos a los 3
puntos no colineales (A, B y C) formando de esta manera un tringulo. (de cualquier tipo:
rectngulo u oblicungulo.

Trazamos las dos mediatrices relativas a los lados AC y BC.


B
N

El punto de interseccin de estas dos rectas mediatrices vendra a ser el Circuncentro del
tringulo, y es adems el punto que equidita de los tres vrtices.
Sean las coordenadas de los vrtices:
A = (Xa, Ya)
B = (Xb, Yc)
C = (Xc, Yc)

96

Curso de Algoritmos y Estructura de Datos

(Xb, Yb)

C (Xc, Yc)

(Xa, Ya)

Hallamos las coordenadas de los puntos M y N:

M=

A+C
Xa + Xc Ya + Yc
=(
;
)
2
2
2

N=

B+C
Xb + Xc Yb + Yc
=(
;
)
2
2
2

Adems podemos conocer los vectores

y sus ortogonales

Sean LN y LM dos rectas cuyas ecuaciones vectoriales son las siguientes:


LN:

P=N + t

LM:

P=M + r

(recta que pasa por N y con vector direccional


(recta que pasa por M y con vector direccional

)
)
LN

(Xb, Yb)
B
N
P

A
(Xa, Ya)

C (Xc, Yc)
LM

97

Curso de Algoritmos y Estructura de Datos

98

Curso de Algoritmos y Estructura de Datos

Ejemplo 59: Se desde leer un conjunto de n (n

30) cdigos enteros (cada cdigo

10000).

Se desea averiguar cuntos de dichos cdigos tiene la secuencia 2, 3, 7 no necesariamente


adyacentes.
Solucin: Ejemplo: 213746 (s), 327541 (no), 2372374 (s)
Pseudocdigo Ejemplo_59
Var

cont, num, i, n, r, d, j: entero


sec: lgica

Inicio
Repetir
Leer (n)
Hasta_que (n 30)
cont 0
desde i 1 hasta n
Repetir
Leer (cod)
Hasta_que (cod 10000)
j1
sec V
Mientras (j 3 sec) hacer
En_caso (j)
1: d 7
2: d 3
3: d 2
fin_caso
Repetir
r cod mod 10
cod cod div 10
Hasta_que (cod = 0 r = d)
Si (cod = 0) entonces
sec F
fin_si
jj + 1
fin_mientras
99

Curso de Algoritmos y Estructura de Datos

Si (sec) entonces
cont cont + 1
fin_si
fin_desde
Escribir (cont)
Fin
Ejemplo 60: Algoritmo para pasar un numeral de una base 2 a base 10. Solucin:
Pseudocdigo Binario_Decimal
Var

C, d, S, num: entero

Inicio
Repetir
Leer (num )
Hasta_que (num > 0)
S 0
C 1
Repetir
d num mod 10
num num div 10
S d *C + S
C C * 2
Hasta_que (num = 0)
Escribir (num, S)
Fin

100

Curso de Algoritmos y Estructura de Datos

Ejemplo 61: Algoritmo para transformar un numeral de una base n menor que 10 a la base
10.
Solucin:
Pseudocdigo Numeracin
Var

C, d, S, num, n: entero

Inicio
Repetir
Leer (n, num)
Hasta_que (2

(* Base del numeral *)


n n 9 num > 0)

S 0
C 1
Repetir
d num mod 10
num num div 10
S d * C + S
C C * n
Hasta_que (num = 0)
Escribir (num, S)
Fin

101

Curso de Algoritmos y Estructura de Datos

PRIMERA PRCTICA CALIFICADA - UNI CICLO 2010 II


Lima 13 de setiembre del 2010.
PROBLEMA 1
Disee un algoritmo que permita recibir 5 nmeros enteros diferentes y luego nos presente
el tercero mayor. Ejemplo:
Entrada: 5, 13, 10, 6, 7
Salida: el tercero mayor es 7

Solucin:

Pseudocdigo Tercero_Mayor
Var

a, b, c, d, e, aux: entero

Inicio
Leer (a, b, c, d, e)
Si (a < e) entonces
aux a
ae
e aux
fin_si
Si (b < d) entonces
aux b
bd
d aux
fin_si
Si (a < b) entonces
aux a
ab
b aux
fin_si
Si (d < e) entonces
aux d
de
e aux
fin_si
Si (b < d) entonces
aux b
bd
d aux
fin_si
102

Curso de Algoritmos y Estructura de Datos

Si ( c > a) entonces
Escribir (b, es el tercero mayor )
sino

(*c

a *)

Si ( c > b) entonces
Escribir ( b, es el tercero mayor )
sino

(*c b *)

Si (c > d) entonces
Escribir (c, es el tercero mayor )
sino

(*c

d *)

Si (c > e c < e) entonces


Escribir (d, es el tercero mayor )
fin_si
fin_si
fin_si
fin_si
Fin

103

Curso de Algoritmos y Estructura de Datos

PROBLEMA 2
Disee un algoritmo que reciba una cantidad no determinada de nmeros enteros positivos
de 4 a ms cifras (el ingreso de datos termina cuando se ingresa el nmero -1), luego
muestre:
a) La cantidad de nmeros capicas ingresados (NOTA: un nmero es capica si se lee igual
de izquierda a derecha como de derecha a izquierda. Ejemplo: 131 es capica)
b) Los nmeros primos ingresados y el promedio de los mismos.
Pseudocdigo Problema_2
Var

num, aux, NI, r, cont_cap, i, r1, d, cont_p, suma_p: entero


prom_o: real

Inicio
cont_cap 0
cont_p 0
suma_p 0
Repetir
Repetir
Leer (num)
Hasta_que (num
Si (num

1000 num = -1)

-1) entonces

aux num
NI 0
Mientras (aux 0) hacer
r aux mod 10
aux aux div 10
NI NI * 10 + r
fin_mientras
Si (NI = num) entonces
cont_cap cont_cap + 1
fin_si
d 0
r1 0

104

Curso de Algoritmos y Estructura de Datos

desde i 1 hasta num


r1 num mod i
Si (r1 = 0) entonces
d d+1
fin_si
fin_desde
Si (d = 2) entonces
Escribir (num, es primo )
cont_p cont_p + 1
suma_p suma_p + num
fin_si
fin_si
Hasta_que (num = -1)
Escribir ( La cantidad de capicas ingresados fue: , cont_cap)
Si (cont_p = 0) entonces
Escribir ( no se ingres ningn primo, el promedio es cero )
sino
prom_p suma_p / cont_p
Escribir ( el promedio es: , prom_p, de : , cont_p, primos ingresados )
fin_si
Fin

105

Curso de Algoritmos y Estructura de Datos

PROBLEMA 3
En el mundial Sudfrica 2010 participaron 32 equipos por diferentes pases. Cada equipo
tiene un cuadro de 40 jugadores. Por cada jugador se tienen los siguientes datos: cdigo
(entero de 4 cifras), edad y el nmero de goles anotados en este mundial.
Se pide disear un algoritmo que lea los datos de los jugadores y muestre:
a) Edad promedio de los jugadores por cada equipo y la edad promedio de todos los
jugadores.
b) El nmero de jugadores con la mayor cantidad de goles anotados en el mundial.
Solucin:
Datos de entrada: Nmero de equipos (32). Nmero de jugadores (40). Por cada jugador: cdigo
(de 4 cifras), edad, nmero de goles anotados.
Datos de salida: Edad promedio por equipo, edad promedio de todos los jugadores; nmero de
jugadores con la mayor cantidad de goles anotados en el mundial.
Proceso:
- Leer el cdigo, edad, nmero de goles
- Sumar las edades de los jugadores en un equipo y dividir el resultado entre 40, luego mostrar
dicho resultado que sera el promedio.
- Sumar las sumas de edades de los jugadores de cada equipo, as tendra la suma de todos, luego
muestro el resultado de haberlo dividido entre 32x40
- Contabilizar la cantidad de jugadores con el mayor nmero de goles en el mundial, primero en
cada equipo y luego entre todos los equipos.

106

Curso de Algoritmos y Estructura de Datos

Pseudocdigo Mundial
Var

edad, cdigo, num_gol, suma_edad, max_num_gol, cont1, edad_pe, i, j, suma_edad_total,


edad_pt, cont2, max_num_gol_mund: entero

Inicio
suma_edad_total 0
cont2 0
desde i 1 hasta 32
cont1 0
suma_edad 0
desde i 1 hasta 40
Repetir
Leer (edad, cdigo, num_gol)
Hasta_que (edad > 0 edad < 100 num_gol 0 cdigo 1000 cdigo 9999)
sumad_edad suma_edad + edad
Si (j = 1) entonces
max_num_gol num_gol
cont1 1
sino
Si (max_num_gol < num_gol) entonces
max_num_gol num_gol
cont1 1
sino
Si (max_num_gol = num_gol) entonces
cont1 cont1 + 1
fin_si
fin_si
fin_si
fin_desde
edad_pe suma_edad mod 40
Escribir ( la edad promedio del equipo nmero , i, es , edad_pe)
suma_edad_total suma_edad_total + suma_edad
Si (i = 1) entonces
max_num_gol_mund max_num_gol
cont2 cont1
sino
Si (max_num_gol_mund < max_num_gol) entonces
max_num_gol_mund max_num_gol
cont2 cont1

107

Curso de Algoritmos y Estructura de Datos

sino
si (max_num_gol_mund = max_num_gol) entonces
max_num_gol_mund max_num_gol
cont2 cont2 + 1
fin_si
fin_si
fin_si
fin_desde
edad_pt suma_edad_total div 1280
Escribir ( el promedio de las edades de los 1280 jugadores es: , edad_pt)
Escribir ( el nmero de jugadores con la mayor cantidad de goles anotados en el mundial es: ,
cont2, y el nmero mximo de goles fue , max_num_gol_mund)
Fin

108

Curso de Algoritmos y Estructura de Datos

PROBLEMAS ADICIONALES
Ejercicio1: Dado un nmero natural positivo, indique si es un nmero perfecto. (NOTA: un
nmero es perfecto si la suma de sus divisores (sin incluir al mismo nmero) resulta igual a
s mismo. Ejemplo: 6 es perfecto pues 6 = 1+2+3. Solucin:
Pseudocdigo Perfecto
Var

n, S, i: entero

Inicio
Repetir
Leer (n)
Hasta_que (n > 0)
S 0
desde i 1 hasta n-1
Si (n mod i = 0) entonces
S S+ i
fin_si
fin_desde
Si (S = n) entonces
Escribir ( S es perfecto )
sino
Escribir ( No es perfecto )
fin_si
Fin

109

Curso de Algoritmos y Estructura de Datos

Ejercicio 2: Disee un algoritmo que entregue el trmino ensimo de la serie de Fibonacci.


(Tomando a n a partir de cero.)
1 , 1 , 2 , 3 , 5 , 8 , 13 , . . .
F0 F1 F2 F3
Solucin: F0 y F1 van a ser fijos: F0 = 1 ; F1 = 1 ; Fn = Fn-1 + Fn-2 para n 2
Pseudocdigo Fibonacci
Var

F, F0, F1: entero

Inicio
F0 1
F1 1
Repetir
Leer (n)
Hasta_que (n

0)

Si (n = 0 n = 1) entonces
F 1
sino
desde i 2 hasta n
F F1+F0
F0 F1
F1 F
fin_desde
fin_si
Escribir (F)
Fin

110

Curso de Algoritmos y Estructura de Datos

Ejercicio 3: Dado un conjunto de n alumnos (hombres y mujeres) se desea leer el cdigo


(entero de 3 dgitos), nota (de 0 a 20) y sexo (M o F). Luego averiguar:
a) El alumno (varn) con la mayor nota y menor cdigo (respecto a esa mayor nota). El nmero de
alumnos que tienen esa mayor nota.
b) La alumna con la menor nota y mayor cdigo (respecto a esa menor nota). El nmero de
alumnas que tienen la misma menor nota.
Pseudocdigo Ejercicio3
Var

n, i, cod, nota, maxnotH, minnotM, mincodH, maxcodM, contH, contM: entero


sexo: caracter

Inicio
Repetir
Leer (n)
Hasta_que (n > 0)
maxnotH 0
minnotaM 20
mincodH 999
maxcodM 100
contH 0
contM 0
desde i 1 hasta n
Repetir
Leer (cod)
Hasta_que (100 cod cod 999)
Repetir
Leer (nota)
Hasta_que (0 nota nota 20)
Leer (sexo)
Si (sexo =

) entonces

Si (maxnotH < nota) entonces


maxnotH nota
contH 1
mincodH cod
sino
Si (maxnotH = nota) entonces
contH contH + 1
Si (mincodH > cod) entonces
mincodH cod
111

Curso de Algoritmos y Estructura de Datos

fin_si
fin_si
fin_si
sino
Si (sexo =

) entonces

Si (minnotM > nota) entonces


minnotM nota
contM 1
maxcodM cod
sino
Si (minnotM = nota) entonces
contM contM + 1
Si (maxcodM < cod) entonces
maxcodM cod
fin_si
fin_si
fin_si
fin_si
fin_si
fin_desde
Escribir (maxnotH, mincodH, contH)
Escribir (minnotM, maxcodM, contM)
Fin

112

Curso de Algoritmos y Estructura de Datos

113

Vous aimerez peut-être aussi