Upload
drax
View
20
Download
0
Embed Size (px)
DESCRIPTION
LABORATORIO 1. MEDICIÓNOBJETIVOS• Conocer las definiciones relativas al error experimental.• Determinar el error en el proceso experimental.EXPERIMENTO 1. MEDICIÓN Y ERROR EXPERIMENTAL (INCERTIDUMBRE) I. OBJETIVOS• Determinar la curva de distribución normal en un proceso de medición, correspondiente al número de frijoles que caben en un puñado normal. • Determinar la incertidumbre en este proceso experimental.
Citation preview
CCUURRSSOO DDEE AALLGGOORRIITTMMOOSS YY
EESSTTRRUUCCTTUURRAA DDEE DDAATTOOSS
PPrriimmeerraa PPaarrttee
Enero 2011
Curso de Algoritmos y Estructura de Datos
2
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
3
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 [email protected] y
tambin aquellos que quisieran aportar con problemas resueltos de prcticas y exmenes.
Su amigo: TThhee OOlliizzttiikk
Curso de Algoritmos y Estructura de Datos
4
UNIDAD IALGORITMOS 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
5
Por ahora nos centraremos en los datos simples, en la tercera unidad se ver con ms detalle los
datos estructurados.
DATOS
Simples o Primitivos Compuestos o Estructurados
ESTTICOS DINMICOS
Arreglos
Cadenas
Registros
Archivos
Punteros
Listas
rboles
Grafos
NUMRICO
LGICO
Entero
Real
CARACTER
Verdadero
Falso
Alfabtico
Numrico
Especial
Curso de Algoritmos y Estructura de Datos
6
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
7
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:
o 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 .
o CODIGO ASCII: Los caracteres tienen un cdigo que entre otras cosas, nos permite
ordenarlos. Por ejemplo: < < < .
o El caracter espacio en blanco tambin es de tipo especial
o 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
8
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
9
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 = o sino
Menor o igual que
Curso de Algoritmos y Estructura de Datos
10
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
Son identificadores invlidos:
X-1 , The-Oliztik , Estructura-de-datos
(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.
Curso de Algoritmos y Estructura de Datos
11
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 .
Curso de Algoritmos y Estructura de Datos
12
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.
Curso de Algoritmos y Estructura de Datos
13
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:
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
L 0
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:
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
Nomb_var valor
Nomb_var expresin
Curso de Algoritmos y Estructura de Datos
14
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.
Curso de Algoritmos y Estructura de Datos
15
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
S 0
(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)
Curso de Algoritmos y Estructura de Datos
16
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)
Curso de Algoritmos y Estructura de Datos
17
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?
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
DATOSDE
ENTRADA
DATOSDE
SALIDAPROCESO
Curso de Algoritmos y Estructura de Datos
18
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.
Curso de Algoritmos y Estructura de Datos
19
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:
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:
Pseudocdigo Identificador_Algoritmo
Const const1 = valor1 const2 = valor2 ...
constN = valorN
Var var1 : tipo_dato1 var2 : tipo_dato2 ...
varN : tipo_datoN
Curso de Algoritmos y Estructura de Datos
20
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 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.
Curso de Algoritmos y Estructura de Datos
21
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:
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
Pseudocdigo Identificador_Algoritmo
Tipo
Const
Var
Inicio
Fin
SUBPROGRAMAS
Curso de Algoritmos y Estructura de Datos
22
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:
Para el caso en el que se tengan muchas variables se realiza:
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:
Para el caso en el que se tengan muchas variables se realiza:
Escribir (variable)
Leer (variable)
Leer (variable1, variable2,..., variableN)
Escribir (variable1, variable2,..., variableN)
Curso de Algoritmos y Estructura de Datos
23
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.
Continuando el ejemplo, en donde tenamos: C n1+n2+n3
Si luego hacemos:
Escribir (C)
Significara que en la pantalla del monitor se puede visualizar el valor de la variable C, o sea 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 )
22
Voy a aprobar elcurso de
Algoritmos
Curso de Algoritmos y Estructura de Datos
24
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)
Pero tambin podemos hacerlo de la siguiente forma:
Escribir La mxima edad es: , max_edad)
28
La mximaedad es 28
Curso de Algoritmos y Estructura de Datos
25
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.
Curso de Algoritmos y Estructura de Datos
26
UNIDAD IIESTRUCTURAS 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 aotra en secuencia. La salida de una accin es la entrada de la siguiente y as sucesivamente, hasta
el final del proceso.
Accin 1
Accin 2
Accin 3
Pseudocdigo Nomb_Alg
Const
Var
Inicio
Accin 1
Accin 2
Accin 3
Fin
Curso de Algoritmos y Estructura de Datos
27
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? x
Datos de salida? y
Proceso: y 3 * x * x + 7 * x 15
Pseudocdigo Ejemplo_1
Var x, y: real
Inicio
Leer (x)y 3 * x * x + 7 * x 15Escribir (y)
Fin
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_horasue_net 0.8 * sue_bruEscribir (sue_ne)
Fin
Antes de la instruccin de lectura:Leer (x) , pudimos haber enviado un mensaje de lasiguiente manera:Escribir ( Ingrese el valor de x ).
En el curso de algoritmos, el uso de estosmensajes ser opcional, ha no ser que elprofesor indique lo contrario.
Presentamosel valor de lavariable
Curso de Algoritmos y Estructura de Datos
28
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)
PTC PC * CC
IGV 0.19 * (PTA+PTB+PTC)
PP PTA+PTB+PTC+IGV
Escribir ( Total a pagar: , PP)
Fin
Este mensaje ser opcional
Curso de Algoritmos y Estructura de Datos
29
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 = 123Si 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:
Curso de Algoritmos y Estructura de Datos
30
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:
Curso de Algoritmos y Estructura de Datos
31
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 10N1 N div 10R2 N1 mod 10N2 N1 div 10R3 N2 mod 10N3 N2 div 10NI R1 * 1000 + R2 * 100 + R3 * 10 + N3Escribir El nmero invertido es: NI)
Fin
Curso de Algoritmos y Estructura de Datos
32
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
Accin 2
Condicin
V
F Si (condicin) entonces
Accin 1
Accin 2
Accin 3
fin_si
Curso de Algoritmos y Estructura de Datos
33
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 * sueldofin_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 prcticasDatos 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 pc1Si (pc2 < mn) entonces
mn pc2fin_siSi (pc3 < mn) entonces
mn pc3fin_siSi (pc4 < mn) entonces
mn pc4fin_siprom (pc1+pc2+pc3+pc4-mn) / 3Escribir El promedio de prcticas es: , prom)
Fin
Inicializamos lavariable mn con elvalor de cualquierade las prcticas: pc1,pc2, pc3, pc4, en estecaso con pc1
Curso de Algoritmos y Estructura de Datos
34
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 n1mn n1
Si (n2 > mx) entonces
mx n2
fin_si
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
Inicializamos lasvariables max y mncon el valor decualquiera de lasnotas: n1, n2, n3; eneste caso con n1
Curso de Algoritmos y Estructura de Datos
35
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
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) entoncesEscribir admitido )
sinoEscribir rechazado )
fin_si
Fin
Si (condicin) entonces
Acciones1
Sino
Acciones2
fin_siAccin 2
CondicinV F
Accin 1
Curso de Algoritmos y Estructura de Datos
36
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/aEscribir solucin nica: , x)
sino Si (b=0) entonces
Escribir ( Ecuacin consistente indeterminada, infinitas soluciones )Sino
Escribir Ecuacin inconsistente, no hay solucin )fin_si
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)
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
Sabemos que un nmero es mltiplo de otro cuandola divisin es exacta, por eso utilizamos el operadormod para calcular el residuo. Si este es cerosabremos que es mltiplo.
Curso de Algoritmos y Estructura de Datos
37
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) entoncesmx a
sinomx 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
Curso de Algoritmos y Estructura de Datos
38
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) entoncesEscribir ( Iguales )
sino
Si (b+c=a) entoncesEscribir Iguales )
sino
Si (a+c=b) entoncesEscribir 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) entoncesEscribir ( Iguales )
sino
Escribir Distintos )fin_si
Fin
Curso de Algoritmos y Estructura de Datos
39
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) entoncesst sb + 0.15 * mtv
sino
Si (mtv 1500) entoncesst sb + 0.12 * mtv
sino
st sb + 0.1 * mtv fin_si
fin_si
Si (st > 8000) entoncesdesc 0.1 * stsn st - desc
sino
desc 0
sn st
fin_si
Escribir (st, desc, sn)
Fin
Curso de Algoritmos y Estructura de Datos
40
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 * mtvsino
Si (mtv 1500) entoncesst sb + 0.12 * mtv
sino
st sb + 0.1 * mtvfin_si
fin_si
Si (st > 8000) entoncesdesc 0.1 * st
sino
desc 0
fin_si
sn st - desc
Escribir (st, desc, sn)
Fin
Curso de Algoritmos y Estructura de Datos
41
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) entoncesSi (b>c) entonces
Escribir (a, b, c)sino (* c b *)
Si (a>c) entoncesEscribir (a, c, b)
sino (* c a *)
Escribir (c, a, b)fin_si
fin_si
Sino (* b a *)
Si (a>c) entoncesEscribir (b, a, c)
sino (* c a *)
Si (b>c) entoncesEscribir (b, c, a)
sino (* c b *)
Escribir (c, b, a)fin_si
fin_si
fin_si
Fin
Curso de Algoritmos y Estructura de Datos
42
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:
Los nmeros que van a ser ingresados, van a ser almacenados en las variables a, b, c y d. Luego
comparamos y y tratamos de almacenar en el mayor de entre estos dos, y
almacenamos en el menor de entre estos dos. Para eso usamos la siguiente instruccin:
Si (a < d) entoncesaux aa dd aux
fin_si
Lo mismo haremos con b y c.
Si (b < c) entoncesaux bb cc 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 y el menor de entre
estos dos en . 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 y 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
max1
min1
max2min2
max3min3max4min4
max5min5
a
b
c
d
Curso de Algoritmos y Estructura de Datos
43
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) entoncesaux aa dd aux
fin_si
Si (b < c) entoncesaux bb cc aux
fin_si
Si (a < b) entoncesaux aa bb aux
fin_si
Si (c < d) entoncesaux cc dd aux
fin_si
Si (b < c) entoncesaux bb cc aux
fin_si
Escribir ( El segundo mayor es: b)
Fin
Curso de Algoritmos y Estructura de Datos
44
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.
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)
Sentencia2
SELECTOR
Sentencia1 Sentencian
Caso Caso 2 Caso n
En_caso (SELECTOR)
Caso1: Sentencia 1Caso2: Sentencia 2.
. .
CasoN: Sentencia NSino
Sentencia X
fin_caso
Curso de Algoritmos y Estructura de Datos
45
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:
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.
Lm_inf . . Lm_sup
Dos puntos
Curso de Algoritmos y Estructura de Datos
46
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
M 30.5
T 27.9
N 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.
Curso de Algoritmos y Estructura de Datos
47
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: Escribir Lunes )2: Escribir Martes )3: Escribir Mircoles )4: Escribir Jueves )5: Escribir Viernes )6: Escribir Sbado )7: Escribir 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: mx aF: mx b
fin_caso
En_caso (c > mx)
V: mx c fin_caso
Fin
Curso de Algoritmos y Estructura de Datos
48
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
2 Fumigacin contra langostas S/ 20 Ha
3 Fumigacin contra gusanos S/. 30 Ha
4 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: costo Ha * 102: costo Ha * 203: costo Ha * 304: costo 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
Curso de Algoritmos y Estructura de Datos
49
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:
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: punt_final punt * 01 . . 3: punt_final punt * 34 . . 6: punt_final punt * 87 . . 10: punt_final 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
Puntaje Original Factor
0 0
1 3 3
4 6 8
7 - 10 10
Curso de Algoritmos y Estructura de Datos
50
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.
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 quealcanza en forma secuencial el valor final Vf.
Por ejemplo:
desde i 1 hasta 4
Escribir ( i )
fin_desde
cont Vi hasta Vf
Sentencia
cont
Desde cont Vi hasta Vf
Sentencia
fin_desde
1234
Curso de Algoritmos y Estructura de Datos
51
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
XYZ
Curso de Algoritmos y Estructura de Datos
52
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: y , 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).
Curso de Algoritmos y Estructura de Datos
53
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
Curso de Algoritmos y Estructura de Datos
54
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
Curso de Algoritmos y Estructura de Datos
55
Ejemplo 29: Disee un algoritmo tal que dado un nmero entero positivo, identifique si esprimo.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).
Curso de Algoritmos y Estructura de Datos
56
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
Curso de Algoritmos y Estructura de Datos
57
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
Curso de Algoritmos y Estructura de Datos
58
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
desde i 1 hasta n
Leer (nota)
Si (maxnota < nota) entonces
maxnota nota
fin_si
fin_desde
Escribir (maxnota)
Fin
Estamos inicializando la variable entera maxnota con elvalor 0 (cero), que es el menor de los valores del rango (0 a20)
Curso de Algoritmos y Estructura de Datos
59
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
desde i 1 hasta n
Leer (nota)
Si (minnota > nota) entonces
minnota nota
fin_si
fin_desde
Escribir (minnota)
Fin
Estamos inicializando la variable entera minnota con elvalor 20 (veinte), que es el mayor de los valores del rango(0 a 20)
Curso de Algoritmos y Estructura de Datos
60
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
sino
Si (maxcod < cod) entonces
maxcod cod
fin_si
fin_si
fin_desde
Escribir (maxcod)
Fin
Estamos inicializando la variable entera maxcod con elprimero de los datos ingresados (cuando i = 1, es decir, a laprimera vez que se ejecuta la instruccin desde)
Cuando i = 2 , se lee el segundo cdigo, y se compara el cdigoledo anteriormente (que fue almacenado en maxcod) con elcdigo ledo ahora (que a sido almacenado en cod), de talforma que maxcod se quede con el mayor valor de entre estosdos. As se va repitiendo la instruccin y nos aseguramos quemaxcod almacene el mayor de todos los cdigos ledos.
Curso de Algoritmos y Estructura de Datos
61
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
fin_si
fin_desde
Escribir (maxcod)
Fin
Estamos inicializando la variable entera maxcod con elprimero de los datos ingresados
Debido a que inicializamos la variable maxcod fuera de lainstruccin repetitiva desde y el total de datos ingresadosdebe de ser n, entonces, la instruccin repetitiva solo serepetir n-1 veces (desde i = 2 hasta n)
Curso de Algoritmos y Estructura de Datos
62
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
maxnota 0
desde i 1 hasta n
Leer (nota)
Si (maxnota < nota) entonces
maxnota nota
cont 1
Sino
Si (maxnota = nota) entonces
cont cont + 1
fin_si
fin_si
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
Como vamos a utilizar un contador, no olvidar inicializarlo en cero
Debido a que se conoce el rango, inicializamos lavariable entera maxnota con el valor de cero
En esta parte del algoritmo, se va a contabilizar elnmero de coincidencias con la mayor nota.
En esta parte se va a encontrar la mayor notaingresada, adems de actualizar el contador a 1.Actualizar el contador a 1 quiere decir, regresar elvalor de este a 1, porque puede darse el caso endonde se haya estado contabilizando una nota quepareca que era la mayor de todas, y luego cuandose ingrese una nota mayor, el contador debe volvera 1.
Curso de Algoritmos y Estructura de Datos
63
* 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
Curso de Algoritmos y Estructura de Datos
64
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
Curso de Algoritmos y Estructura de Datos
65
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
Curso de Algoritmos y Estructura de Datos
66
* 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
Curso de Algoritmos y Estructura de Datos
67
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)
cont 0
minnota 20
desde i 1 hasta n
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.
Como vamos a utilizar un contador, no olvidar inicializarlo en cero
Debido a que se conoce el rango, inicializamos la variableentera minota con el valor de veinte
Curso de Algoritmos y Estructura de Datos
68
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
Curso de Algoritmos y Estructura de Datos
69
Ejemplo 38: Para un conjunto de n personas se desea averiguar la edad promedio por sexoy cul es la edad mayor en cada caso (la mxima edad en cada sexo). Desarrolla unalgoritmos 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 0contF 0sumaM 0sumaF 0maxM 0maxF 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
Curso de Algoritmos y Estructura de Datos
70
Si (contF = 0) entonces
Escribir no hay promedio )
sino
Escribir (sumaM div contF) (* Para mostrar un promedio entero *)
fin_si
Fin
Curso de Algoritmos y Estructura de Datos
71
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
Curso de Algoritmos y Estructura de Datos
72
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
Curso de Algoritmos y Estructura de Datos
73
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
Leer (n)
desde i 1 hasta n
Leer (num)
Si (num < 0) entonces
Si ( encont) entonces
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
Vamos a inicializar al switch con el valor falso
Vamos a descartar los datos no negativos quesean ingresados
Curso de Algoritmos y Estructura de Datos
74
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)
Curso de Algoritmos y Estructura de Datos
75
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.
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.
x 2
Mientras (x > 0) hacer
Escribir (x)
x x-1
fin_mientras
Sentencia
condicin
V
F
Cuerpo del bucle
Mientras (condicin) hacer
Sentencia
fin_mientras
Cuerpo del bucle
En la pantalla se vernicamente los valorespositivos de x: 2 y 1(segnla condicin), pues cuandox a toma un valor nopositivo, la instruccinrepetitiva Mientrastermina
21
Curso de Algoritmos y Estructura de Datos
76
Ejemplo: Un bucle infinito
x 2
Mientras (x > 0) hacer
Escribir (x)
x x+1
fin_mientras
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
Fin
En la pantalla se vernlos valores de x: 2, 3, 4,
., etc. Y estocontinuar hasta que lacomputadora secuelgue , ya que la
instruccin Mientrasno terminar mientrasx no tome un valornegativo lo cual nuncapasar pues x va enaumento
2,3,4,5,6,7,8,910,11,12,13,14,15,16,17,18
La variable num debe ir aumentando de unoen uno
Curso de Algoritmos y Estructura de Datos
77
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 iraumentando la variable num, porque esta aumenta una unidadautomticamente durante cada repeticin
Curso de Algoritmos y Estructura de Datos
78
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 decirnum 4512 div 10 lo cual quedaranum 451 ; num = 451 y seguidamente contabilizamos cont cont+1; cont = 1
num num div 10 , es decirnum 451 div 10 lo cual quedaranum 45 ; num = 45 y seguidamente contabilizamos cont cont+1; cont = 1+1=2
num num div 10 , es decirnum 45 div 10 lo cual quedaranum 4 ; num = 4 y seguidamente contabilizamos cont cont+1; cont = 2+1=3
num num div 10 , es decirnum 4 div 10 lo cual quedaranum 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
fin_mientras
Escribir (cont)
Fin
Al ir asignando al nmero el cociente de sudivisin entre 10, iremos disminuyendo lacantidad de cifras del nmero y a la vezaprovecharemos para contabilizar suscifras.
Curso de Algoritmos y Estructura de Datos
79
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 n