You are on page 1of 79

FIavIo de Jess CastIIIo SIIva

InstItuto TecnoIgIco AgropecuarIo de Oaxaca














Algoritmia






FIavIo de Jess CastIIIo SIIva


















M1oo








AIgorItmIa










Insiiiuio Tccnologico Agroccuario dc Oaaca, Mcico
Dicicnlrc dcl 2004



ISDN.




Flavio dc Jcsus Casiillo Silva


Derecbos reservados

La rcscniacion y disosicion cn conjunio dc Algoriinia son roicdad dcl auior. Ninguna
aric dc csia olra ucdc scr rcroducida o iransniiida, ncdianic ningun sisicna o nciodo,
clccironico o nccanico (cnirc cllos cl foiocoiado, la gralacion, la digiializacion, la gralacion
o cualquicr sisicna dc rccucracion y alnaccnanicnio dc infornacion}, sin conscniinicnio
or cscriio dcl auior.








CONTENIDO


Dcdicaioria/ 1

Iniroduccion/ J

Caiulo 1. Conccios Ccncralcs dc Progranacion/ S
1.1 Daios c infornacion/ S
1.2 Ocradorcs/ 4
1.3 Consianics y variallcs/ 4
1.4 Ercsioncs/ S
1.4.1 Ercsioncs Maicnaiicas/ S
1.4.2 Ercsioncs Fclacionalcs/ ?
1.4.3 Ercsioncs/ ?

Caiulo 2. Dcsarrollo dc Algoriinos/ 9
2.1 Pasos a scguir/ 9
2.2 Diagranas dc flujo/ JD
2.3 Diagranas Nassi-ScIncirdcnan/ JJ
2.4 Pscudocodigos/ JJ

Caiulo 3. Algoriinos lincalcs/ JS
3.1 Ejcrcicios rcsuclios/ Jt
3.2 Ejcrcicios roucsios/ JS

Caiulo 4. Difurcacioncs/ J9
4.1 Sinlologa/ J9
4.1.1 Difurcacion sinlc/ J9
4.1.2 Difurcacion dollc/ 22
4.1.3 Difurcacion nuliilc/ 2S
4.2 Ejcrcicios rcsuclios/ 2?
4.3 Ejcrcicios roucsios/ 2S




Caiulo 5. Ciclos/ SD
5.1 Coniador/ SJ
5.2 Acunulador/ S2
5.3 Esiruciura FEPETIF/ S2
5.4 Esiruciura MIENTFAS/ S4
5.5 Ejcrcicios rcsuclios/ SS
5.6 Esiruciura DESDE (For-Nci}/ 4D
5.7 Ejcrcicios roucsios/ 4J

Caiulo 6. Arrcglos/ 4S
6.1 Vcciorcs/ 4S
6.1.1 Asignacion/ 44
6.1.2 Lcciura/Escriiura y Fccorrido/ 4S
6.1.3 Dusqucda/ 4t
6.1.4 Aciualizacion/ 4?
6.1.5 Ejcrcicios rcsuclios dc vcciorcs/ SD
6.1.6 Ejcrcicios roucsios dc vcciorcs/ tS

6.2 Tallas/ t4
6.2.1 Ejcrcicios rcsuclios dc iallas/ tS
6.2.2 Ejcrcicios roucsios dc iallas/ t?

Anco 1/ tS

Anco 2/ ?D

Dilliografa Ccncral/ ?J







DEDICATORIA






A Dios quc sicnrc nc Ia aconanado cn nis royccios.



A nis scouis favoriios. ni csosa (Vcronica} y nis cuairo csircllas (Mariana,
CyniIia, Flaviio y Mclissa} , quicncs nc insiran a csiar Sicnrc lisio ara
scrvir!.


A los jovcncs csiudianics dc cualquicr arca dc la Infornaiica quc quicran
iniroducirsc cn cl nundo dc la rogranacion dc conuiadoras.





INTRODUCCIN


Mientras me quede algo por hacer,
no habr hecho nada
Cayo Julio Csar


Quiz de los retos ms grandes que he tenido como profesor ha sido justamente el
que mis alumnos al trmino del curso de Diseo Estructurado de Algoritmos
obtengan las habilidades para abstraer problemticas de la realidad y plasmarlas en
algoritmos. Por ello, este libro tiene como finalidad compartir con aquellos
estudiantes que inician en el mbito de la programacin una alternativa para
aprender a realizar algortmicamente soluciones a diversas situaciones que pueden
ser resueltas con las computadoras.

Los temas de este libro estn abordados exclusivamente en formas algortmicas sin
inclinacin alguna hacia un lenguaje en particular, se asume, de acuerdo a la
concepcin original de los algoritmos, es que si una persona realiza un algoritmo,
ste puede ser codificado en el lenguaje de su predileccin.

Es importante resaltar que en el estudio de los algoritmos, el xito - o los buenos
resultados - depende en la mayor parte de tu participacin como estudiante, ya que
al realizar los ejercicios de forma disciplinada irs progresivamente aprendiendo las
diferentes estructuras que se emplean en la programacin, en donde en cada nivel
que vayas conociendo apliques lo visto en los niveles anteriores, o sea, de forma
heurstica
1
.

Por eso, este libro est diseado pedaggicamente siguiendo un orden adecuado de
conocimientos para que a pesar de que tus antecedentes de programacin sean
nulos o mnimos puedas estudiar los temas sin ningn conflicto de requerimientos
anticipados, logrando con esto que puedas comprender los ejercicios resueltos y
logres resolver los propuestos, preparndote as para el tema posterior, pero
recuerda que el que vayas al siguiente tema sin el manejo adecuado de los
anteriores te podr provocar incluso hasta frustracin, de ah la disciplina que se te
pide para tu estudio.

Cada ejercicio explicado lo encontrars representado en tres de las representaciones
ms comunes internacionalmente: diagrama de flujo, diagrama N-S y en
pseudocdigo, indicando que ste ltimo es una propuesta que realizo para

1
De forma heurstica significa que para obtener un nuevo conocimiento, haga uso de los conocimientos que ya
posee.
Flavio de Jess Castillo Silva 2
estudiantes y docentes de esta materia para que puedan ser ejecutados en la
computadora sin llegar a codificar en algn lenguaje en especfico totalmente en
espaol.

El libro est dividido en seis captulos, donde el primero est hecho para que
precises algunos trminos empleados en la programacin, adems hallars
instrucciones iniciales sobre la formulacin de expresiones matemticas a
expresiones algortmicas mismas que te sirven para las operaciones a realizarse
dentro de un algoritmo, asimismo, encontrars la jerarquizacin de operaciones a
emplearse y el manejo de la tabla de verdad.

El captulo dos y tres tienen que ver con los primeros algoritmos a estudiar dentro de
un curso, se denominan como lineales o top-down
2
, as como la presentacin de los
smbolos y reglas para diagramar y las instrucciones a emplearse en los
pseudocdigos, a pesar que ya tengas previo manejo de algoritmos, procura no dejar
de estudiar este captulo por que es la base de los siguientes temas.

El captulo cuatro te explica el manejo de las bifurcaciones y sus modalidades,
asimismo el cinco trata sobre los ciclos, incluyendo los contadores y acumuladores.
Por ltimo para esta edicin, el captulo seis se refiere a los arreglos, tanto
unidimensionales (vectores) como bidimensionales (tablas o matrices) y un apndice
con las instrucciones para crear un archivo de cabecera para el lenguaje de
Programacin CA-CLIPPER ver. 5.2 superior, para poder ejecutar los
pseudocdigos.

Ojal desde donde ests, puedas hacer tus comentarios y/o aportaciones para hacer
mejor esta obra, por que al final de cuentas, slo t amigo lector puedes comprobar o
no el beneficio de este libro.


Flavio de Jess Castillo Silva
Junio 2004

Apartado Postal No. 86, centro
Oaxaca, 68000, Oax. Mxico
flaviocastillo@mexico.com

2
De arriba-abajo.
Algoritmia 3




1. CONCEPTOS GENERALES DE PROGRAMACIN


El cielo nunca ayuda a las personas que no actan
Sfocles


La programacin es una funcin en la Informtica que consiste en escribir un
conjunto de instrucciones codificadas y ordenadas lgicamente en algn lenguaje de
cmputo, que al ejecutarse en la computadora apoya a la realizacin de una tarea
administrativa o que da respuesta a una solucin especfica de la realidad.

La programacin es en realidad un fascinante mundo abstracto en donde a travs de
diversas simbologas puedes lograr que una computadora realice lo que t hayas
preparado para tal fin, un lenguaje similar a la utilizada en programacin puede ser e
de las matemticas, de hecho, quien habla en lenguas matemticas podr
fcilmente programar, por que las habilidades que se requieren para una y para otra
cosa son similares: razonamiento, deduccin, pensamiento lgico, umbral amplio a la
frustracin, etc.

La Informacin que fluye a travs de los programas de cmputo es realmente lo
valioso en s de cualquier proceso automatizado, por lo que se empezar por aclarar
algunos trminos mnimos y necesarios que cualquier programador deber tener
presente.


1.1 DATOS E INFORMACIN


En un proceso en donde se ejecuta un programa de cmputo, los datos son la
materia prima que al ser procesadas dan lugar a la informacin, o sea, que la
informacin es el resultado obtenido a travs de un proceso computarizado. Para que
entiendas mejor la diferencia entre uno y otro, lee detenidamente el siguiente
ejemplo: en un restaurante, los datos son los platillos que solicita un comensal y el
precio de cada uno de ellos. La informacin ser el importe a pagar por el consumo
de esta persona.

Los datos a procesar por una computadora pueden clasificarse en simples y
estructurados, estos ltimos son trabajados en el captulo correspondiente al tema de
Arreglos.

Flavio de Jess Castillo Silva 4
Los tipos de datos a utilizarse en este curso sern: a) N = Numricos; b) C = Cadena
y c) L = booleanos o lgicos


1.2 OPERADORES


El operador es un smbolo que identifica una operacin bsica, los ms comunes
son:

Matemticos: Suma ( + ), resta ( - ), multiplicacin ( * ), divisin ( / ),
exponenciacin ( ), DIV (divisin entera) y MOD (residuo)

Relacionales: Mayor que ( > ), menor que ( < ), mayor o igual que ( >= ), menor
o igual que ( <= ), diferente ( <> ), igual ( = ).

Lgicos: AND, OR, NOT
3




1.3 CONSTANTES Y VARIABLES


Las constantes son los datos que no cambian a travs de la ejecucin de un
programa. En algunos lenguajes de programacin, las constantes pueden ser:

Enteras De tipo numrico y sin punto decimal

Ejemplos: +3489, -1, +670
Reales Son datos de tipo numrico con punto decimal o con
exponente en notacin cientfica

Ejemplos: +3.141592, - 3.31E11, 1.5
Alfanumricas Son datos tipo carcter y que pueden contener hasta un
mximo de 255 caracteres (dependiendo del lenguaje).

Ejemplos: MEXICO, ITAO, NICK12


Y las variables se definen como una localidad de memoria a la cual se hace
referencia con un nombre cuyo contenido puede cambiar durante un proceso. Para el
caso de nominar a una variable, se sugiere que ste sea mnemotcnico
4
y por

3
El NOT se indica en los operadores, pero no se tratar durante este material
4
Al leer el nombre se identifica cul es su contenido, si se usara como nombre de una variable: alumno, fecha de
nacimiento, domicilio. Estos indican claramente sus contenidos
Algoritmia 5
cuestin de fomentar un buen hbito informtico, se recomienda el uso de la notacin
hngara
5
, cuya estructura es:


cNombre








As, si se quiere almacenar el sueldo de un trabajador en una variable simple, se
podr hacer de esta manera: nSueldo o si fuese para el domicilio de alguien podra
ser: cDomicilio.


1.4 EXPRESIONES


Una expresin se define como la combinacin de constantes y variables del mismo
tipo con un operador.


1.4.1. MATEMTICAS

Son las operaciones que realizamos en trminos aritmticos o algebraicos, por
ejemplo: 5 + 6, 3c * 2

Para su representacin, debemos de considerar que se resuelven de izquierda a
derecha y sobre todo, la jerarquizacin de operaciones que existe en las
operaciones:

a) Parntesis
b) Exponenciaciones
c) Multiplicaciones y divisiones
d) Sumas y Restas, DIV y MOD.

Las expresiones se representan de dos maneras: algebraicamente y
algortmicamente, te preguntars cul es la diferencia entre una y otra?, a
continuacin observa las diferencias:


5
La notacin hngara es la forma estructurada de denominar a las variables y fue creada por un hngaro del
equipo de programacin de Microsoft, actualmente, se usa en diferentes lenguajes de programacin

Tio dc daio
El 2do carcter es en
maysculas
El resto del nombre
en minsculas
Flavio de Jess Castillo Silva 6
Modo algebraico Modo algortmico
2ab
4
2*a*b^4
(3+5)
2
+9 (3+5)**2+9
6a+3c
6a
2
-c
2


(6*a+3*c) / (6*a^2 c^2)


Para efectuar las operaciones de este tema, se hacen bajo la siguiente metodologa:
a) convertir la expresin de algebraica a algortmica; b) realizar las operaciones de
izquierda a derecha respetando la jerarquizacin de operaciones.


Ejemplo 1
Modo algebraico Modo algortmico
(3+5)
2
+9 (3+5)**2+9

1. Parntesis: 8**2+9
2. Exponenciaciones: 64+9
3. Sumas y restas: 73

Ejemplo 2
Modo algebraico Modo algortmico
9+5*2-2 DIV 2
3
9/3+5*2-2 DIV 2

1. Parntesis: (3+10-2) DIV 2 11 DIV 2
2. Multiplicaciones y divisiones: 5










Expresin Resultado
(3+5)
2
+9 73
6-2+3*6 22
9/3+5*2-2 DIV 2 5
9/3+5*2-2 MOD 2 1
3^3+(2*10-1)+21 67
Algoritmia 7
1.4.2 EXPRESIONES RELACIONALES


Es la confrontacin de una combinacin de constantes y/o variables con un operador
relacional, el resultado a obtener podr ser: VERDADERO
6
(V) o FALSO
7
(F).




Ejemplo 1
Modo algebraico Modo algortmico
9+5*2-2 MOD 2 = 0
3
9/3+5*2-2 MOD 2 = 0

1. Multiplicaciones y divisiones: 3+10-2 MOD 2 = 0
2. Sumas y restas: 13-2 MOD 2 = 0
11 MOD 2 = 0
5 = 0 (falso)

Ejemplo 2
Modo algebraico Modo algortmico
(3+5)
2
+9 > 20 (3+5)**2+9 > 20
1. Parntesis: 8**2+9 > 20
2. Exponenciaciones: 64+9 > 20
3. Sumas y restas: 73 > 20 (verdadero)


1.4.3. EXPRESIONES LGICAS

Permiten realizar la evaluacin de expresiones relacionales ms complejas y
encontrar al final de todas las evaluaciones de estas expresiones un resultado
VERDADERO (T) o FALSO (F), con estas expresiones hay que considerar para ello,
la tabla de verdad:



6
True ( T ) en ingls
7
False ( F ) en ingls
Expresin Resultado
(3+5)
2
+9>20 VERDADERO
6-2+3*6 <= 15 FALSO
9/3+5*2-2 DIV 2 > (3*2) FALSO
9/3+5*2-2 MOD 2 = 0 FALSO
3^3+(2*10-1)+21 >= 48 VERDADERO
Flavio de Jess Castillo Silva 8


Analiza detenidamente las siguientes expresiones lgicas:

Expresin Resultado
(3+5)
2
+9>20 AND (8*3)^2<100 F
6-2+3*6 <= 35 OR 15> 2^4 V
18/3+5*2-2 DIV 2 > (3*2) AND 45>(3*6-2) V
18/3+5*2-2 DIV 2 > (3*2) OR 45>(3*6-2) V
18/3+5*2-2 DIV 2 > (4*2) OR 45>(3*6-2) V

Para el primer caso, la expresin algebraica (3+5)
2
+9>20 AND (8*3)
2
<100, se
convierte algortmicamente en: (3+5)^2+9>20 AND (8*3)^2<100 y se procede a
resolverse por partes:

1. Primero se obtuvo el valor de (3+5)^2, cuyo resultado es de 73
2. Posteriormente se compar con respecto a 20, quedando as 73 > 20 y al
evaluarse se determin que es VERDADERO.
3. Asimismo, se procedi con la otra parte de la expresin: (8*3)^2<100, arroja como
resultado el valor de 576, al confrontarla con 100 a travs de la expresin: 576
<100 se determin que es FALSO.
4. Por ltimo, VERDADERO AND FALSO (P AND Q), segn la tabla de verdad da
FALSO.
P Q OR AND
V V V V
V F V F
F V V F
F F F F
Algoritmia 9




2. DESARROLLO DE ALGORITMOS


Aprendemos a hacer algo hacindolo.
No existe otra manera
John Holt


Un algoritmo, es un conjunto de acciones que determinan la secuencia de los pasos
a seguir para resolver un problema especificado y tiene dos condiciones: debe ser
finito y no debe ser ambiguo; significa que debe estar bien estructurado, adems,
generalmente se compone de tres partes: a) entrada; b) proceso y c) salida.


2.1 PASOS A SEGUIR


Para poder desarrollar un algoritmo no existe una ley, pero si se sugieren los
siguientes puntos:

1. Buscar la forma de entender claramente el problema para no equivocar la
respuesta.
2. Determinar qu salida o qu tipo de resultados se espera para identificar los
datos de entrada.
3. Consiste en encontrar pensando ordenada y lgicamente en una posible solucin,
es conveniente apoyarse en libros buscando un proceso (frmula) que nos ayude
a resolver nuestro requerimiento, si no existe se construye.
4. Se hace la representacin del algoritmo.

Para una mejor solucin o estructuracin de nuestro algoritmo, tambin se debe de
considerar:

Ya teniendo identificados los datos de entrada, determinar los lmites de
coherencia en ellos, ejemplo: para los meses del ao slo es posible o vlido del
uno al doce; para las calificaciones de un alumno, slo hay datos vlidos desde
cero hasta diez.
Con respecto al proceso, si es posible, hay que ubicarlo en alguna situacin de la
vida real para su mejor comprensin, recrearlo manualmente, para deshacerlo y
reconstruirlo algortmicamente. Si se tiene la referencia de un giro comercial en
particular y en caso de no tener alguna experiencia al respecto, se recomienda
visitar algn establecimiento correspondiente y a travs de la observacin o de
Flavio de Jess Castillo Silva 10
algunas preguntas a empleados de dicho lugar, se podr comprender los
requerimientos del ejercicio.
Otra manera de ver un problema, es analizarlo por partes y que esto permita
llegar a la meta propuesta, verlo como un todo da la impresin de que es algo
muy complejo y quiz por partes sea ms fcil de conseguirlo.
Lo que mejor ha funcionado es el hecho de no negarse la oportunidad de
resolverlo, las barreras mentales que se anteponen algunos estudiantes limita su
creatividad e ingenio para afrontar problemas de carcter abstracto.

Los algoritmos pueden ser representados en forma grfica a travs de los diagramas
de flujo o diagramas N-S (Nassi-Schneiderman o diagramas de Chapin) y de forma
escrita con el uso de pseudocdigos.


2.2 DIAGRAMAS DE FLUJO


Los diagramas de flujo son los ms comunes para representar algoritmos, aunque
no necesariamente es la mejor opcin, se hace la representacin grfica de un
algoritmo mediante un conjunto de figuras o smbolos ya establecidos.


Inicio o Fin. Este smbolo sirve para indicar el
principio de una rutina y su terminacin.

Entrada. Sirve para indicar la introduccin estndar
de datos.



Salida a impresora. En este curso la utilizaremos
para indicar la salida de datos.


Proceso. Indica alguna operacin a realizarse
dentro del algoritmo.

Decisin. Implica la evaluacin de una expresin
relacional.


Conector de secuencia. Especificar alguna
transferencia a realizarse.

Conector de pgina. Seala la continuidad de un
proceso en otra pgina.

Algoritmia 11
Subrutina. En este curso, se utilizar para indicar
una decisin mltiple.


Segn Cair (1995), las reglas que rigen los diagramas de flujo son:

1. Todo diagrama de flujo debe tener un inicio y un fin
2. Las lneas utilizadas para indicar la direccin del flujo del diagrama deben ser
rectas, verticales y horizontales, no en diagonal, ni se deben de cruzar.
3. Todas las lneas utilizadas para indicar la direccin del flujo del diagrama deben
estar conectadas.
4. El diagrama de flujo debe ser construido de arriba hacia abajo y de izquierda a
derecha.
5. La notacin utilizada en el diagrama de flujo debe ser independiente del lenguaje
de programacin.
6. Si el diagrama de flujo requiere ms de una hoja para su construccin, se debe
utilizar los conectores adecuados y enumerar las pginas adecuadamente.
7. No puede llegar ms de una lnea de flujo a un smbolo.


2.3 DIAGRAMAS NASSI-SCHNEIDERMAN


Estos diagramas tambin se conocen como N-S (este es el nombre ms comn),
para representarlos se utilizan como smbolo bsico al rectngulo, esto quiere decir
que no tienen explcitamente un inicio y un fin como los diagramas de flujo, ya que
todo lo que est plasmado en ellos est sujeto al marco exterior del diagrama.

Para un algoritmo lineal este ser un conjunto de rectngulos apilados:

Accin 1
:
:
Accin n


En el caso de bifurcaciones (ver captulo 4) o ciclos (ver captulo 5) stos se
mostrarn en su momento para no crear confusiones.


2.4 PSEUDOCDIGOS


Los pseudocdigos son expresiones escritas de los algoritmos, para eso, se utilizan
los verbos en definitivo y cumple con la regla que el lenguaje algortmico de
No hay un inicio y final
explcito por que la misma
figura lo establece
Flavio de Jess Castillo Silva 12
pseudocdigo es independiente de cualquier lenguaje de programacin, mismo que
podr ayudar a la codificacin en cualquier lenguaje.


INICIO Al igual que los diagramas de flujo, se requiere
indicar donde comienza el algoritmo
INTRODUCIR Esta instruccin sirve para poderle dar datos al
algoritmo
ESCRIBIR Este verbo se usa para indicar la salida de datos
HACER < << <variable> >> > = < << <exp> >> > En esta instruccin se declararn las frmulas
expresadas algortmicamente de acuerdo a la
jerarqua de operaciones, donde la palabra
variable es el lugar donde se almacenar el
resultado que surja de la expresin exp.
SI < << <expL> >> > ENTONCES
:
[SINO]
:
FIN_SI

Esta sintaxis permite representar las
bifurcaciones dentro de un algoritmo
FIN Determina la finalizacin del algoritmo

De igual forma que en los diagramas N-S se indica que la cuestin de bifurcaciones y
ciclos se indicarn en sus respectivos captulos.


Algoritmia 13




3. ALGORITMOS LINEALES


Como cualquier habilidad o msculo,
la capacidad de escuchar tu sabidura
interior se fortalece con el ejercicio
Robbie Gass


Estos algoritmos se conocen como algoritmos top-down (de arriba abajo) y son los
ms simples, las instrucciones son netamente secuenciales, esto quiere decir, que se
realizarn verticalmente una a una las instrucciones.

Para comprender mejor stos, se iniciar con analizar de menor a mayor
complejidad, considerando que los ejemplos estarn resueltos en los tres estilos
(diagrama de flujo, N-S y pseudocdigo) y se ensear lo que es la prueba de
escritorio
8
.

Ejemplo 1: Hacer un algoritmo para calcular el rea de un rectngulo (A = b h).

INICIO
nAr ea
FIN
nB, nH
nAr ea = nB * nH


El mismo algoritmo se representa en diagrama N-S y en pseudocdigo
paralelamente:


8
Se entiende por prueba de escritorio, al proceso de estar ejecutando de manera manual cada
instruccin plasmada en el algoritmo siguiendo el orden lgico establecido, dando valores a las
variables de entrada y haciendo los clculos para determinar los valores finales, asegurndose que
dicho algoritmo cumple con los requisitos para los cuales fue construido.
Se solicitan los datos de la base y de la altura
del rectngulo
Se aplica la frmula del rea del rectngulo
(base por altura) y el resultado se almacena en
nArea
Se presenta el resultado
DIAGRAMA DE FLUJO
Flavio de Jess Castillo Silva 14
INTRODUCIR nP, nPi
nPref = nP * (1+nPi/100)
ESCRIBIR nPref

PSEUDOCDIGO
INICIO
INTRODUCIR Precio, nP
INTRODUCIR % Imp, nPi
HACER nPref = nP *
(1+nPi/100)
ESCRIBIR nPref
FIN

INTRODUCIR nH, nB
nArea = nH * nB
ESCRIBIR nArea

INICIO
INTRODUCIR Base, nB
INTRODUCIR Altura, Nh
HACER nArea = nH * nB
ESCRIBIR nArea
FIN

Para hacer la prueba de escritorio se har una pequea lista de variables que
intervienen en el algoritmo:

No. nB nH nArea
1 3 4 12
2 7 9 63
3 28 12 336


Ejemplo 2: Se requiere de un algoritmo que determine el precio de un artculo en
funcin a su precio antes de impuesto y el porcentaje de impuesto.


nPref
FIN
nP, nPi
nPref = nP * (1+nPi/100)i
INICIO



Prueba de escritorio:


No. nP nPi nPref
1 100 15 115.00
2 75 12 84.00
3 63 18 74.34
DIAGRAMA N-S
Algoritmia 15
La frmula nPref = nP * (1 + nPi/100) es una forma abreviada de clculo, por que se
pudo haber representado de varias maneras, sin embargo, para su mayor
comprensin se desglosar y se comparar a la vez con el procedimiento ms largo
o comn:



nPref = 100 * (1 + 15/100)

o sea

nPref = 100 * 1.15

nPref = 115
nPor = 15 / 100

nPref = 100 + (100 * nPor)

nPref = 100 + 15

nPref = 115


Ejemplo 3: La compaa explotadora de aceite El resbaloso, SA, desea tener un
algoritmo para determinar semanalmente el salario de sus empleados. Teniendo en
cuenta las horas y el costo por horas trabajadas y un 6% de su sueldo como
impuestos, obteniendo el sueldo bruto, descuento y sueldo neto por empleado.


nSalf
FIN
nH, nC
nSalb =nH * nC
INICIO
nSalf = nSalb - nSalb*.06







DIAGRAMA N-S

INTRODUCIR nH, nC
nSalb = nH * nC
nSalf = nSalb nSalb * 0.06
ESCRIBIR nSalf

PSEUDOCDIGO

INICIO
INTRODUCIR No. De Horas, nH
INTRODUCIR Costo x hora, nC
HACER nSalb = nH * nC
HACER nSalf = nSalb nSalb * 0.06
ESCRIBIR nSalf

Flavio de Jess Castillo Silva 16
Prueba de escritorio:

No. nH nC nSalb nSalf
1 40 80 3200 3008
2 20 50 1000 940
3 30 70 2100 1974

La solucin del ejercicio anterior se pudo haber planteado en una sola frmula:
nSalf = nH * nC nH * nC * 0.06

sustituyendo:
nSalf = 40 * 80 40 * 80 * 0.06
nSalf = 3200 192
nSalf = 3008

Considerando que en la jerarquizacin de operaciones primero se resuelven las
multiplicaciones y en el siguiente nivel las sumas y restas, son innecesarios los
parntesis.

A continuacin se resolvern algunos ejemplos slo en pseudocdigo, esperando los
complementes con: diagramas de flujo, diagramas N-S y sus respectivas pruebas de
escritorio


3.1 EJERCICIOS RESUELTOS


1. La compaa financiera Agiotista, AC, da oportunidad de pagar los impuestos de
un prstamo a razn del 2% mensual, hacer un algoritmo que calcule de cunto
seran los pagos mensuales que debern hacer sus clientes.


Pagos Mensuales =

donde:
L = importe del prstamo
I = Tasa de inters mensual y
M = Nmero de meses a pagar

INICIO
INTRODUCIR Importe del prstamo, nPres
INTRODUCIR Tasa de inters, nInt
INTRODUCIR Meses?, nMes
HACER nPago = (nPres * nInt / 100) / ( 1 (1+ nInt / 100 ) ^ -nMes )
ESCRIBIR nPago
FIN

(L) (I)
1 - (1 + I )
-m


Algoritmia 17
2. Hacer un algoritmo que al proporcionar dos nmeros, nos de el resultado de las
operaciones bsicas entre ellos.

INICIO
INTRODUCIR 1er nmero, nPnum
INTRODUCIR 2do nmero,nSnum
HACER nMas = nPnum + nSnum
HACER nMen = nPnum nSnum
HACER nPor = nPnum * nSnum
HACER nDiv = nPnum / nSnum
ESCRIBIR Suma, nMas
ESCRIBIR Menos, nMen
ESCRIBIR Multiplicacin, nPor
ESCRIBIR Divisin,nDiv
FIN

3. Teniendo en cuenta que en un da se duermen ocho horas, realice un algoritmo
en donde calcule el nmero de das, horas, minutos y segundos vividos y el total
de horas dormidas en nuestra existencia. Use 30 das por mes y 365 das por
ao.

INICIO
INTRODUCIR Da de Nacimiento, nDdian
INTRODUCIR Mes de Nacimiento, nMesn
INTRODUCIR Ao de Nacimiento, nAnion
INTRODUCIR Da actual, nDiaa
INTRODUCIR Mes actual, nMesa
INTRODUCIR Ao actual, nAnioa
HACER nDiav = ( nDiaa + nMesa * 30 + nanita * 365)
(nDdian + nMesn * 30 + nAnion * 365)
ESCRIBIR Das vividos = , nDiav
ESCRIBIR Horas dormidas = , nDiav * 8
ESCRIBIR Horas vividas = , nDiav * 24
ESCRIBIR Minutos vividos = , nDiav * 1440
ESCRIBIR Segundos vividos = , nDiav * 86400
FIN

4. Realice un algoritmo para convertir una hora marcada por un reloj de 24 horas y
proporcionada en horas, minutos y segundos, a un sistema decimal de tiempo, en
el cual, por ejemplo 21:30:00 hrs. equivale a 21.50 horas.

INICIO
INTRODUCIR Hora, nH
INTRODUCIR Minuto, nMin
INTRODUCIR Segundo, nSeg
HACER nDec = nH + nMin / 60 + nSeg / 3600
ESCRIBIR Horas decimales = , nDec
FIN



Flavio de Jess Castillo Silva 18
5. En una Casa de Cambio necesitan construir un programa tal que dado como dato
una cantidad expresada en dlares, convierta esa cantidad a pesos. Construya el
diagrama de flujo correspondiente.

INICIO
INTRODUCIR No. De dlares, nDol
INTRODUCIR Paridad, nPar
ESCRIBIR Pesos = , nDol * nPar
FIN


3.2 EJERCICIOS PROPUESTOS


1. Hacer un pseudocdigo que calcule la distancia recorrida por un vehculo y
determinar el combustible aproximado usado, considerando un rendimiento de 12
km por litro.

2. En una empresa de gas, se requiere de un algoritmo para la venta de sus
productos, considerando lo siguiente:











Nota: El consumidor puede comprar ms de un tipo de producto

3. Realizar un algoritmo para que se intercambien valores entre tres variables
cualquiera.

4. En una tienda de materiales, el precio del m
2
de azulejo para baos cuesta
$125.00 y la mano de obra es de $40.00 por m
2
. Hacer un algoritmo que permita
presentar cotizaciones a los clientes interesados.

5. En un negocio de renta de computadoras, se desea tener un algoritmo que
calcule el importe a cobrar de acuerdo al tiempo de consumo, considerando que
una hora tiene un precio de $7.50

Tanque (Kg) Precio ($)
45 160.00
30 118.00
20 95.00
10 70.00
nforas 35.00
A Granel 8.00 (Kg.)
Algoritmia 19



4. BIFURCACIONES


El hombre debe elegir, no aceptar su destino.
Paulo Cohelo


Es comn que encontrar problemas que estn sujetos a ciertas condiciones para
obtener su resultado, es aqu donde la computadora podr determinar el camino que
debe seguir y su toma de decisin puede ser solamente un si o un no y se le
conoce como afirmaciones, ya que la mquina verifica si se cumple la condicin o no.

La bifurcacin se entiende como el cambio que sufre una secuencia y para el caso
de programacin, sta puede ser: simple, doble, anidada y mltiple.

Las bifurcaciones se clasifican en: a) Condicional. Qu es el que depende del
resultado de una prueba y b) Incondicional. Siempre desviar la secuencia a la lnea
donde se le especifique


4.1 SIMBOLOGA

En el captulo dos se mencion que para cada tipo de algoritmo se iba a describir su
respectiva simbologa, por lo que a continuacin se indicar con ejemplos de
estructuras la forma de representarse en diagrama de flujo, diagrama N-S y en
pseudocdigo una bifurcacin.


4.1.1 BIFURCACIN SIMPLE

A = B
Accin A
SI


Figura 4.1 Estructura de bifurcacin simple
SI A = B ENTONCES
Accin A
FIN_SI
Flavio de Jess Castillo Silva 20
Si observas con detenimiento los componentes de la figura 4.1, podrs comprender
la manera correcta de expresar una bifurcacin simple, sin embargo, si no has tenido
experiencia en algn curso de programacin, entonces quiz an est un tanto
ambiguo el concepto, por lo que se ilustrar mejor con el siguiente ejemplo:

Ejemplo 1: Dado como dato el sueldo de un trabajador, aplquesele un aumento del
15% si su sueldo es inferior a $1,000.00, imprimir al final el nuevo sueldo del
trabajador.

Razonamiento: Se requiere que slo aquellos empleados cuyo sueldos sean
menores a $1,000.00 reciban un aumento del 15%, ejemplificndolo, supongamos
que un empleado gana $1,500.00 por la condicin prevista en el enunciado este
trabajador no recibe aumento (ya que 1500 es mayor que 1000), ahora, si un
trabajador gana $850.00 su nuevo sueldo ser $977.50, cmo se obtuvo dicho
sueldo?, se aplic el mismo principio utilizado en el ejemplo 2 (pp. 20-21) de los
algoritmos lineales, por lo que la frmula sera para aquellos trabajadores que
cumplan la condicin: Nuevo = sueldo * 1.15


nS
FIN
INICIO
nN = nS * 1.15
nN
nS < 1000
SI
NO


PSEUDOCDIGO

INICIO
INTFODUCIF Sucldo",nS
SI nS < 1000 ENTONCES
HACEF nN nS 1.15
ESCFIDIF nN
FIN_SI
FIN
DIAGRAMA N-S

INTRODUCIR nS



nN = nS * 1.15

ESCRIBIR nN


nS < 1000
SI
Algoritmia 21
Ejemplo 2: Construye un algoritmo que al proporcionar la calificacin de un alumno,
escriba si aprob, considerando a la calificacin de 7 como la mnima aprobatoria.



nCalif
FIN
INICIO
nCalif >= 7
"Aprobado"



La representacin en el diagrama N-S y en pseudocdigo de este mismo ejemplo es:







Se solicita la calificacin del alumno
Se revisa si la calificacin es mayor
o igual a siete
SI
Si es verdadera la condicin,
mandar el mensaje de APROBADO
INICIO
INTRODUCIR Calificacin, nCalif
SI nCalif >= 7 ENTONCES
ESCRIBIR Aprobado
FIN_SI
FIN

NO
Flavio de Jess Castillo Silva 22
4.1.2 BIFURCACIN DOBLE


A=B
Accin B Accin A
NO
SI


Figura 4.2 Estructura de bifurcacin doble



Ejemplo 3: Dado como dato el sueldo de un trabajador, aplquesele un aumento del
15% si su sueldo es inferior a $1,000.00 y si es mayor o igual el aumento ser de
8%, imprimir al final el nuevo sueldo del trabajador.



Razonamiento: Basndose en el ejemplo anterior, la consideracin ser que el
porcentaje de aumento ser diferente para los que ganan menos de $1,000.00 con
respecto a los otros que no cumplen dicha condicin. La frmula ser similar, la
diferencia es que el porcentaje de acuerdo a la condicin se guarde en una variable y
hacer un solo proceso de clculo.
.
SI A D ENTONCES
Accion A
SINO
Accion D
FIN_SI
.
Algoritmia 23
nS
FIN
INICIO
nN = nS * 1.15
nN
nS < 1000
SI NO
nN = nS * 1.08


En pseudocdigo este algoritmo sera as:

INICIO
INTRODUCIR Sueldo?, nS
SI nS < 1000 ENTONCES
HACER nP = 1.15
SINO
HACER nP = 1.08
FIN_SI
HACER nN = nS * nP
ESCRIBIR Nuevo sueldo = , nN
FIN
COMO BIFURCACIN SIMPLE

INICIO
INTRODUCIR Sueldo?, Ns
HACER nP = 1.08
SI nS < 1000 ENTONCES
HACER nP = 1.15
FIN_SI
HACER nN = nS * nP
ESCRIBIR Nuevo sueldo = , nN
FIN





Ejemplo 4: A un mecnico se le paga por la cantidad de horas trabajadas. Si trabaja
hasta 40 horas a la semana, se le paga a razn de $50.00 por hora, sin embargo, si
trabaja ms de 40 horas, entonces la cuota por hora es de $65.00


Flavio de Jess Castillo Silva 24
nHt
FIN
INICIO
nS = nHt * 65
nS
nHt > 40
SI
NO
nS = nHt * 50







INICIO
INTRODUCIR Horas,nHt
SI nHt > 40 ENTONCES
HACER nS = nHt * 65
SINO
HACER nS = nHt * 50
FIN_SI
ESCRIBIR Pago = , nS
FIN
Algoritmia 25
4.1.3 BIFURCACIN MLTIPLE











TRADICIONAL

Casos Variable
Op1: Accin(es)
Op2: Accin(es)
.
.
OpN: accin
Fin-casos


ESTE LIBRO

EVALUAR
CASO A = 1
(Accin / Acciones)
CASO A = 2
(Accin / Acciones)
CASO A = N
(Accin / Acciones)
OTRO
(Accin / Acciones)
FIN_EVALUAR
:



Ejemplo 5: En una empresa, los trabajadores estn clasificados por categoras, por
lo que para el aumento salarial se aplicarn los siguientes porcentajes de aumento:

CATEGORIA AUMENTO
11 13%
22 12%
33 6%
44 7%


1
2
3
4
5
N
Flavio de Jess Castillo Silva 26
nS, nC
nP = 1.12 nP = 1.07 nP = 1.13
nN
FIN
INICIO
nC
11
22 33
44
nP = 1.06
nN = nS * nP

INICIO
INTRODUCIR Sueldo = ,nS
INTRODUCIR Categora = ,nC
EVALUAR
CASO nC = 11
HACER nP = 1.13
CASO nC = 22
HACER nP = 1.12
CASO nC = 33
HACER nP = 1.06
CASO nC = 44
HACER nP = 1.07
FIN_EVALUAR
HACER nN = nS * nP
ESCRIBIR Sueldo Nuevo = ,nN
FIN




Algoritmia 27
4.2 EJERCICIOS RESUELTOS


En los siguientes ejercicios, realiza el diagrama de flujo y diagrama N-S
correspondiente, asimismo, haz tres pruebas de escritorio para cada uno.


1. Dados los datos A, B y C, que representan nmeros enteros diferentes, construye
un algoritmo para escribir cul de ellos es mayor.


INICIO
INTRODUCIR A = ,nA
INTRODUCIR B = ,nB
INTRODUCIR C = ,nC
HACER nMay = nA
HACER cMay = A
SI nB > nMay ENTONCES
HACER nMay = nB
HACER cMay = B
FIN_SI
SI nC > nMay ENTONCES
HACER nMay = nC
HACER cMay = C
FIN_SI
ESCRIBIR El nmero mayor es , nMay
ESCRIBIR Correspondiente a la variable , cMay
FIN

2. Construye un algoritmo tal, que dados como datos los valores enteros P y Q,
determine si los mismos satisfacen la siguiente expresin:

P
3
+ Q
4
2 * P
2
< 680


INICIO
INTRODUCIR P =,nP
INTRODUCIR Q =,nQ
HACER nNum = nP^3 + nQ^4 2*nP^2
SI nNum < 680 ENTONCES
ESCRIBIR Satisface la expresin
SINO
ESCRIBIR No satisface la expresin
FIN_SI
FIN

Flavio de Jess Castillo Silva 28
3. Construye un algoritmo tal, que dado como dato un nmero entero, determine e
imprima si el mismo es positivo, negativo o nulo.

INICIO
INTRODUCIR Nmero,nNum
SI nNum = 0 ENTONCES
ESCRIBIR Nulo
SINO
SI nNum > 0 ENTONCES
ESCRIBIR Positivo
SINO
ESCRIBIR Negativo
FIN_SI
FIN_SI
FIN


4. Dado un nmero entero cualquiera, realiza un algoritmo para determinar si el
mismo es par, impar o nulo.

INICIO
INTRODUCIR Nmero,nNum
SI nNum = 0 ENTONCES
ESCRIBIR Nulo
SINO
SI nNum MOD 2 = 0 ENTONCES
ESCRIBIR Par
SINO
ESCRIBIR Impar
FIN_SI
FIN_SI
FIN





4.3 EJERCICIOS PROPUESTOS


1. Desarrollar el primer algoritmo del prrafo anterior (ver pgina 27) con
condiciones anidadas.

2. En una tienda se necesita de un algoritmo que le permita a la cajera realizar el
cobro a los clientes de acuerdo a lo siguiente:
a) Si paga en efectivo se le descuenta el 20%
Algoritmia 29
b) Si paga con tarjeta de crdito AMERICAN EXPRESS no hay descuento
c) Si paga con tarjeta de crdito VISA se le descuenta el 5%
d) Si paga con cheque de la federacin se le otorga un 10% de descuento

3. En la Tienda El Surtido SA, requiere de un algoritmo (N-S o Pseudocdigo) para
el cobro de las compras de sus clientes, que le permita a travs de claves
determinar los descuentos a realizar: al teclear 1 significara el 10%, 2 significara
el 12%, 12 significara el 16.5%, 23 significara el 20% y 88 el 0%. Asimismo, el
pago en efectivo se registrara como 201, el pago con tarjeta de crdito sera el
203 y se le hara un cargo adicional del 6% por operacin en tarjeta, el pago con
cheque de la federacin o gobierno estatal sera el 284 y la condicin de aceptar
este tipo de pago ser que la compra realizada sea mnimo un 30% del importe
del cheque y el resto sera el 299. Las situaciones que no estn contempladas en
estas polticas, se asumen que son cobradas al importe real de su compra.

4. La Universidad del Trpico requiere de un algoritmo en N-S que les ayude a
imprimir los recibos de pago del importe de la inscripcin de sus alumnos. Para
esto, hay que considerar que la cuota base es de $450.00 y que pueden existir
las siguiente situaciones:
a. Cuando un alumno obtuvo 10 de promedio en el curso pasado, quedar
exento de pago.
b. Si el alumno obtuvo de 8.1 hasta 9.9 de promedio, se le har un descuento
del 15% estipulado en su recibo.
c. Si obtuvo de 6 y hasta 6.4 se le har un cargo en su recibo de $100.00 por
donativo para libros.
d. Si el alumno tuvo una calificacin reprobatoria, no se podr inscribir, pero
deber pagar $75.00 por concepto de 10 horas de asesora.

5. Se requiere de un diagrama N-S, por que un obrero necesita calcular su salario
semanal, el cual se obtiene de la siguiente manera:
a. Si trabaja 40 horas o menos, se le paga cada hora a razn de $15.00
b. Si trabaja ms de 40 horas, las primeras 40 se le paga a $16.00 y las
extras a $20.00

6. Elaborar un algoritmo (diagrama de flujo o pseudocdigo) para calcular el importe
a cobrar en una gasolinera, donde manejan los siguientes productos: gasolina
magna ($5.05 x litro), gasolina premium ($ 5.30 x litro), diessel ($ 4.00 x litro),
aceite 40 ($ 18.00 lata de a litro), aceite multigrado ($ 28.00 lata de a litro) y
lquido para frenos ($ 16.00 x bote). Los precios incluyen IVA y se necesitan
efectuar obligatoriamente 3 pruebas de escritorio del mismo.

7. Hacer un diagrama de flujo que simule una calculadora con las operaciones
bsicas (suma, resta, multiplicacin, divisin, porcentaje), considerando sus
respectivas restricciones (en caso que hayan).

Flavio de Jess Castillo Silva 30



5. CICLOS


Usa el mtodo cientfico: probando varias veces,
llegars a la verdad.
Cicern, Marco Tulio


Existen eventos que son reproducidos en ms de una ocasin en diferentes
actividades cotidianas, por ejemplo, en los negocios, una tienda desde que abre
(inicio de su jornada de trabajo) hasta que cierra (fin de su jornada de trabajo) realiza
ventas que a pesar que no se saben cuntas irn a hacer, se necesita conocer datos
como el monto de la venta del da, o cosas similares, por otra parte, existen eventos
que tendrn de manera predeterminada una cantidad que pondr lmite a su
realizacin, por ejemplo, si en una escuela se irn a repartir cien fichas para su
proceso de inscripcin, esto significar que no podrn otorgar ms de esa cantidad
de fichas. Casos como estos y en diferentes mbitos suceden da con da, el
programador podr sistematizar la mayora de estos eventos, por ello, el tema que
corresponde a este captulo se denomina ciclos (bucles), que son procesos que se
repiten cuando se cumplen las condiciones establecidas.

Existen ciclos finitos e infinitos. En el caso de los infinitos, estos no sern
considerados, debido a que el inters pedaggico del tema es que el estudiante
controle las repeticiones (ciclos finitos) de los eventos de acuerdo a su naturaleza. A
continuacin se puede apreciar un ciclo infinito, el cual mostrar la palabra ITAO por
siempre. En el caso de una computadora, este se puede interrumpir con el
administrador de tareas o re-inicializando el equipo.



'I T A O'
INICIO

Figura 5.1 Ciclo infinito

Algoritmia 31
Durante la propuesta planteada en este libro, las estructuras cclicas que se
estudiarn sern: REPETIR, MIENTRAS y DESDE (FOR-NEXT). Por ello, se
empezar por describir dos artificios de programacin: Contadores y Acumuladores.


5.1 CONTADOR


Es una variable que registra el nmero de interacciones en un ciclo, una de sus
caractersticas es que sus incrementos
9
o decrementos son constantes. Se puede
considerar que el proceso de conteo tiene tres partes esenciales:

1. Empezar el conteo inicializando la variable, con el valor numrico
necesario, es comn hacerlo con el cero.
2. Incrementar o decrementar (segn sea el caso) la unidad considerada en
el ciclo.
3. Finalizar el proceso de conteo.

Para realizar un conteo dentro de un programa se har con la ayuda del siguiente
proceso:

C = C + 1







Figura 5.2 Contador


Esta instruccin har que el algoritmo cada vez que pase por este proceso,
incrementar en uno el valor almacenado en la variable utilizada. Para entender un
poco ms dicha instruccin se puede entender leyndola de derecha a izquierda:
agrega uno al valor contenido en la posicin de memoria C y guarda el resultado en
la misma variable, as el valor original contenido en C es sustituido por el valor
actual.






9
Se menciona que se puede incrementar o decrementar la variable utilizada como contador, debido a
que se pueden hacer por ejemplo, de uno a diez, o de cien a 0 y el incremento puede ser de uno en
uno o de la unidad que se necesite, por ejemplo de tres en tres.
Valor
nuevo
Valor
anterior
Incremento
Flavio de Jess Castillo Silva 32
5.2 ACUMULADOR


El otro artificio de programacin es el uso de variables acumuladoras. El objetivo de
las mismas es el tener en ellas el total de los datos o valores obtenidos en la
ejecucin de un programa. Para ilustrar mejor el uso del acumulador, es conveniente
sealar que a diferencia de los contadores, los acumuladores tienen incrementos o
decrementos variables y su frmula tiene semejanza al contador:


Total nuevo = total anterior + valor actual





Figura 5.3 Acumulador



Para el uso del acumulador, al igual que el contador, es obligatoria la inicializacin de
la variable (con un valor numrico) que se usar para tal fin, ya que de no hacerlo, en
el caso de varios lenguajes de programacin mandara un mensaje variable
inexistente (type mismatch). Si se quisiese saber la suma de un conjunto de
nmeros (17, 22, 9, 11 y 4), esto sucedera as en el algoritmo:


Total
nuevo
Total
anterior
Valor
actual
0
17 0 17
39 17 22
48 39 9
59 48 11
63 59 4



5.3 ESTRUCTURA REPETIR


Esta estructura le sirve al programador para ejecutar n veces un proceso, como
caracterstica principal de esta estructura es que mnimo una vez se ejecutar el
ciclo, adems, la condicin es interna ya que est pre-establecida desde el inicio de
su ejecucin, para el caso de la condicin que rige a este tipo de ciclos, es que sta
se ubica al final del ciclo y para que el ciclo siga ejecutndose la condicin no ser
Valor a acumular
Algoritmia 33
cumplida, por que cuando se cumpla la condicin har que el ciclo deje de
ejecutarse.

INICIO
nC= 0
nC = nC + 1
FIN
'ITAO'
nC = 10
SI
NO


5.3 Estructura REPETIR en sus tres expresiones


Para comprender la ejemplificacin de una estructura REPETIR (ver figura 5.3), se
realizar la respectiva prueba de escritorio:

Ciclo nC
Visualizacin
(salida)
Condicin
Estatus del
ciclo
0
1 1 ITAO Falso Continua
2 2 ITAO Falso Continua
3 3 ITAO Falso Continua
4 4 ITAO Falso Continua
5 5 ITAO Falso Continua
6 6 ITAO Falso Continua
7 7 ITAO Falso Continua
8 8 ITAO Falso Continua
9 9 ITAO Falso Continua
10 10 ITAO Verdadero Sale
nC = 0
nC = nC + 1
ESCRIBIR ITAO
REPETIR HASTA nC = 10

INICIO
HACER nC = 0
REPETIR
HACER nC = nC + 1
ESCRIBIR ITAO
HASTA nC = 10
FIN
Diagrama N-S
Pseudocdigo
Diagrama de
flujo
Flavio de Jess Castillo Silva 34
5.4 ESTRUCTURA MIENTRAS


Esta estructura permite al programador ejecutar un proceso las veces que sean
necesarias hasta que ya no se cumpla la condicin, misma que est controlada
externamente por el usuario. Otra diferencia es que la condicin se ubica al inicio del
ciclo y que ste se ejecutar si la condicin se cumple, al ya no cumplirse se
posiciona en la instruccin inmediata al ciclo y puede ser la muestra de los datos
obtenidos o la finalizacin del algoritmo.

INICIO
nGasto = 0
nGasto = nGasto +
nMonto
FIN
'ITAO'
nMonto> 0
nMonto
NO
SI




Inicializacin del
acumulador
C
i
c
l
o

M
I
E
N
T
R
A
S

Condicin que sujeta
al ciclo, mientras se
cumpla el ciclo
contina
Acumulador
Algoritmia 35
El mismo ciclo para ser representado en diagrama N-S y/o en pseudocdigo tiene
una pequea gran diferencia, la introduccin de datos se hace antes de iniciar el
ciclo y se vuelve a especificar antes que se cierre el ciclo. Observa con detenimiento
las diferencias entre la representacin del diagrama de flujo y estas dos ms:
















Qu sucede con el ciclo durante su ejecucin?, a continuacin se muestra una
pequea prueba de escritorio para su mayor comprensin.

Ciclo nGasto nMonto Condicin
0 0 5 V
1 5 8 V
3 13 10 V
4 23 0 F







5.5 EJERCICIOS RESUELTOS


Por la complejidad del tema, se realizarn varios ejercicios haciendo uso de las tres
modalidades para su mayor comprensin e ilustracin, intentando cumplir con el
objetivo pedaggico de hacer comprender al estudiante en cada una de las
estructuras antes mencionadas.




nGasto = 0
INTRODUCIR nMonto
MIENTRAS nMonto>0
nGasto = nGasto + nMonto

INTRODUCIR nMonto
ESCRIBIR nGasto

INICIO
HACER nGasto = 0
INTRODUCIR Monto?,nMonto
MIENTRAS nMonto>0
HACER nGasto = nGasto +
nMonto
INTRODUCIR Monto?,nMonto
FIN_MIENTRAS
ESCRIBIR Gasto = ,nGasto
FIN
Este es el resultado que se mostrar al
finalizarse el ciclo
Flavio de Jess Castillo Silva 36
1. Se requiere de un algoritmo que permita representar la tabla de multiplicar de
cualquier nmero que ser multiplicado por el rango del 1 al 10.

Consideraciones: como se van a representar tablas de multiplicacin de cualquier
nmero y ste ser multiplicado en el rango del 1 al 10: nNum * 1, nNum * 2, .,
nNum * 10. Significa entonces que se ejecutar diez veces, por lo que se har uso de
una estructura REPETIR (por estar pre-establecido el nmero de veces que se
ejecutar el ciclo).


INICIO
nC = 0
nNum
nC = nC + 1
nR = nC * nNum
nNum,' * '.nC,' = ',nR
nC = 10
FIN
NO
SI



Como sugerencia, se solicita que se inicialice la variable de conteo al inicio del
algoritmo, en el caso de diagramas de flujo, esto se har despus del smbolo de
inicio.
nC = 0
INTRODUCIR nNum
nC = nC + 1
nR = nC * nNum

ESCRIBIR nNum, * ,nC, = ,nR
REPETIR HASTA nC = 10
INICIO
HACER nC = 0
INTRODUCIR #? ,nNum
REPETIR
HACER nC = nC + 1
HACER nR = nC * nNum
ESCRIBIR nNum, * ,nC,=,nR
HASTA nC = 10
FIN
Algoritmia 37
2. En el proceso electoral para presidentes municipales, el instituto de elecciones,
requiere de un algoritmo para llevar a cabo el conteo de los cuatro candidatos,
considerando que cada uno de ellos ha sido identificado con un nmero
progresivo de acuerdo a la importancia de los partidos polticos, el proceso de
conteo se acabar al introducir un cero.

Consideraciones: se entiende entonces, que los candidatos sern identificados por:
1, 2, 3 y 4. Este algoritmo se representar en N-S y en pseudocdigo, por lo que se
te recomienda realices el diagrama de flujo. De lo que se va a utilizar para realizar
este algoritmo es una estructura MIENTRAS, por que no se sabe cuantos votos se
van a procesar (sino es hasta que introduzcan cero), por otra parte, como hay cuatro
candidatos y estos estn identificados del 1 al 4, entonces se har uso de una
condicin mltiple. Este ejercicio se har en dos versiones, la primera de acuerdo a
lo visto hasta el momento y la siguiente versin se har para tener mayor precisin,
por que de acuerdo al planteamiento que se har en la primer versin, qu pasara
si alguien introduce un cinco o un ocho o cualquier nmero mayor?.


En Diagrama N-S




























nC1 = nC2 = nC2 = nC3 = nC4 = 0
INTRODUCIR nPdte
MIENTRAS nPdte>0

nPdte


n
C
1

=

n
C
1

+

1

n
C
2

=

n
C
2

+

1

n
C
3

=

n
C
3

+

1

n
C
4

=

n
C
4

+

1


INTRODUCIR nPdte
ESCRIBIR nC1, nC2, nC3, nC4

1
2
4
3
Flavio de Jess Castillo Silva 38
En Pseudocdigo
INICIO
HACER nC1 = 0
HACER nC2 = 0
HACER nC3 = 0
HACER nC4 = 0
INTRODUCIR nPdte
MIENTRAS nPdte>0
EVALUAR
CASO Pdte = 1
HACER nC1 = nC1 + 1
CASO Pdte = 2
HACER nC2 = nC2 + 1
CASO Pdte = 3
HACER nC3 = nC3 + 1
CASO Pdte = 4
HACER nC4 = nC4 + 1
FIN_EVALUAR
INTRODUCIR nPdte
FIN_MIENTRAS
ESCRIBIR Candidato 1 obtuvo ,nC1, votos
ESCRIBIR Candidato 2 obtuvo ,nC2, votos
ESCRIBIR Candidato 3 obtuvo ,nC3, votos
ESCRIBIR Candidato 4 obtuvo ,nC4, votos
FIN

Ahora, con base en lo indicado en las consideraciones de este ejemplo y para
asegurar la entrada efectiva de datos, se har uso de una validacin
10
:

INICIO
HACER nC1 = 0
HACER nC2 = 0
HACER nC3 = 0
HACER nC4 = 0
INTRODUCIR nPdte
MIENTRAS nPdte<0 OR nPdte>4
INTRODUCIR nPdte
FIN_MIENTRAS
MIENTRAS nPdte>0
EVALUAR
CASO Pdte = 1
HACER nC1 = nC1 + 1
CASO Pdte = 2
HACER nC2 = nC2 + 1
CASO Pdte = 3
HACER nC3 = nC3 + 1
CASO Pdte = 4
HACER nC4 = nC4 + 1
FIN_EVALUAR
INTRODUCIR nPdte
MIENTRAS nPdte<0 OR nPdte>4
INTRODUCIR nPdte
FIN_MIENTRAS
FIN_MIENTRAS
ESCRIBIR Candidato 1 obtuvo ,nC1, votos
ESCRIBIR Candidato 2 obtuvo ,nC2, votos
ESCRIBIR Candidato 3 obtuvo ,nC3, votos
ESCRIBIR Candidato 4 obtuvo ,nC4, votos
FIN


10
Se entiende por validacin a la revisin de los datos de entrada para que sean datos congruentes
de acuerdo a lo que se espera de ellos, por ejemplo, si solicitsemos el mes, a travs de la validacin
se asegura que no introduzcan un valor menor a uno o mayor a doce y as sucesivamente. Para el
caso de este ejercicio, no se puede introducir un nmero mayor a cuatro.
Algoritmia 39
Haciendo nfasis en la validacin, se explicar con ms detalle. Si se desea que al
recibir el nmero de un mes, ste sea correcto la instruccin sera:

INTRODUCIR nMes
MIENTRAS nMes<1 OR nMes>12
INTRODUCIR nMes
FIN_MIENTRAS



3. En el estadio de bisbol El batazo veloz, requieren de un algoritmo representado
en N-S para obtener al final del da el importe de las ventas, considerando que
existen tres tipos de boletos: palcos ($250.00), sol ($50.00) y sombra ($120.00),
ignorando las capacidades del estadio para cada tipo de boleto, evitando la
dispersin en la comprensin del ejercicio. Hay que considerar que un cliente slo
puede comprar varios boletos del mismo tipo.

Consideraciones: Cmo se puede controlar el ciclo, si solo menciona como dato
interesante que se quieren los datos al final del da?, quiz alguien considere que
se pida la hora de inicio y final, otros pueden dar aproximaciones como estas, sin
embargo, la forma ms sencilla puede ser similar al ejemplo de los candidatos a
presidentes municipales en donde para este caso sea esperar que tecleen cero en el
tipo de boleto y as saber que se termin el da y los boletos de palco sern
reconocidos como tipo 1, los de sol tipo 2 y sombra como tipo 3.























Como el rango del mes vlido es de 1 a 12,
entonces se confronta la variable contra sus
posibles errores, cules son los nmeros
para mes invlidos?, todos los nmeros
menores a uno o los nmeros mayores a
doce.
nBolsol = nBolpal = nBolsom = 0
INTRODUCIR nTipo,nBol
MIENTRAS nTipo>0

n
V

=

2
5
0

*

n
B
o
l

n
B
o
l
p
a
l

=

n
B
o
l
p
a
l

+

n
V

n
V

=

5
0

*

n
B
o
l

n
B
o
l
s
o
l

=

n
B
o
l
s
o
l

+

n
V


n
V

=

1
2
0

*

n
B
o
l

n
B
o
l
s
o
m

=

n
B
o
l
s
o
m

+

n
V

ESCRIBIR nV

INTRODUCIR nTIpo, nBoleto
ESCRIBIR nBolpal, nBolsol, nBolsom

1
2 3
nTipo
Flavio de Jess Castillo Silva 40
4. Se requiere de un algoritmo expresado en pseudocdigo para simular un reloj de
Veinticuatro horas.

Consideraciones: Este ejemplo es un ejercicio de ciclos anidados y para evitar la
incursin a ciclos infinitos, al llegar a su lmite se detendr.

INICIO
HACER nH = 0
HACER nM = 0
HACER nS = 0
REPETIR
HACER nM = 0
REPETIR
HACER nS = 0
REPETIR
ESCRIBIR nH, : ,nM, : ,nS
HACER nS = nS + 1
HASTA nS = 60
HACER nM = nM + 1
HASTA nM=60
HACER nH = nH + 1
HASTA nH=24
FIN


5.6 ESTRUCTURA DESDE (FOR NEXT)


Esta estructura es muy utilizada en diferentes lenguajes de programacin y sobre
todo cuando se manejan arreglos, por lo que se aborda en este captulo para que
sea ms fcil su comprensin en el tema posterior. Se puede decir al respecto que
es como el ciclo REPETIR, solo que de manera ms automatizada. A continuacin
se muestra las tres modalidades de su representacin.


Incremento o
decremento, en
caso de ser
incremento de uno
en uno, no se
especifica
Variable
usada como
contador
Limite del ciclo
Algoritmia 41









De igual forma como en el diagrama de flujo, el incremento si es de uno en uno no se
especifica, sin embargo, si fuese incrementos de dos en dos o decrementos de uno.
Se declarara de la siguiente forma:

En pseudocdigo

DESDE nJ = 2 HASTA 100 INCREMENTO 2

En N-S

nJ = 100 HASTA 1 INCREMENTO -1



5.7 EJERCICIOS PROPUESTOS


Representar los siguientes algoritmos en sus tres modalidades, haciendo adems la
prueba de escritorio correspondiente. Se te recomienda que primero determines el
tipo de estructura a utilizar, en caso que sea tipo MIENTRAS, encuentres la
condicin ms conveniente.

1. La empresa tecomunica requiere de un algoritmo para calcular el importe de los
servicios de telefona ofrecidos durante el da, considerando la siguiente tabla:



Llamada a Tarifa x min
Telfonos fijos $ 1.00
Celulares $ 3.50
Nacionales $ 7.00
EEUU y Canad $ 6.00
Resto de Amrica $ 8.00
Europa $ 9.50
Resto del Mundo $ 13.00

nJ = 1 HASTA 10

ESCRIBIR ITAO

INICIO
DESDE nJ=1 HASTA 10
ESCRIBIR ITAO
FIN_DESDE
FIN
Flavio de Jess Castillo Silva 42
2. En el departamento de calidad de la Ca. El figurn, se requiere de un algoritmo
para llevar el control de los trajes para caballeros defectuosos por cada talla
desde la 36 a la 42, para ello, se elabora una Orden de produccin, indicando las
cantidades a fabricar por cada talla, al final y en porcentajes se calcular la
cantidad de defectuosos con respecto a la Orden de Produccin.

3. Dado N nmero enteros como datos, hacer un algoritmo que:
a. Obtenga cuntos nmeros ledos fueron mayores a cero
b. Calcular el promedio de los nmeros positivos
c. Indicar cuntos fueron pares, cuntos impares y cuntos nulos
d. Obtener el promedio de todos los nmeros
e. Determinar qu nmero fue el mayor y cul fue el menor que se ingres

4. En un multicinema con cinco salas se requiere de un algoritmo que lleve el control
de los boletos vendidos para cada una de ellas en sus tres funciones al corte de
caja se necesita saber:
a. La suma de boletos global de cada sala
b. La funcin y sala que tuvo mayor demanda
c. El porcentaje de boletos de cada sala en cada funcin con respecto al
gran total.

5. Hacer un algoritmo para calcular el promedio de cada alumno (en sus siete
materias) del grupo primero de Informtica y determinar al final qu alumno lleva
el mejor promedio (considerando que todos tienen promedios diferentes) y el
promedio general del grupo.

6. En un laboratorio fotogrfico con dos minilabs (mquinas de revelado), se
requiere de un algoritmo considerando de que hay rollos de fotografas de 35mm
con 24 y 36 fotos; tambin de 110 con 12 y 24 fotografas, adems de las
transparencias de 35 mm con 24 y 36. Se requiere:
a. Cantidad de rollos revelados por tipo y tamao
b. El tipo de rollo ms revelado y el menos revelado (sin importar el
tamao)
c. Cul es el minilab ms utilizado?













Algoritmia 43




6. ARREGLOS


El hombre se descubre a s mismo,
al enfrentarse con el obstculo.
A. Saint Exupery


Los arreglos (arrays en ingls), son una coleccin de datos, finito y ordenado de
elementos homogneos (de un mismo tipo de dato: numrico, cadena, etc.), son
variables estructuradas (ver prrafo 1.1), por lo tanto almacenan datos en elementos
contiguos de memoria identificados por un ndice
11
. A su vez, los arreglos pueden ser
unidimensionales (vectores), bidimensionales, tridimensionales o multidimensionales,
denominados como matrices o tablas.

Para el caso de este libro, los arreglos a estudiarse sern los vectores, que debido a
su complejidad es necesario que se comprendan para poder acceder a los de
mayores dimensiones como son las tablas. Para qu sirven los arreglos?, la
respuesta ms simple es que permite manejar una gran cantidad de datos de manera
ordenada, evitando as el uso de demasiadas variables, por ejemplo, si se quisiesen
guardar los nombres de cada uno de los cincuenta estudiantes del primero de
informtica, se requeriran la misma cantidad de variables tipo cadena, sin embargo,
con el uso de vectores se define uno con un rango de 50 elementos. Para distinguir
las variables simples de las estructuradas y apegndose a la notacin hngara, se
podra definir as: cVnombre, la uve (segundo carcter) indica que es un vector de
tipo cadena, si fuese para almacenar calificaciones de alumnos, podra nombrarse
as: nVcalif.



6.1 VECTORES


Para hacer ms prctica la comprensin del manejo de los vectores se har uso del
pseudocdigo y con ejemplos sencillos a ms complejos. Pero, es necesario que se
ilustre la concepcin de un vector para su mayor comprensin, observa los
componentes del vector en la siguiente figura, tal vez la analoga ms cercana y
comn es que un arreglo es como un casillero, en donde se almacenar en cada
cuadro (elemento) un dato.


11
El ndice da el posicionamiento de los datos en la ordenacin del arreglo, en el caso de vectores, el
nmero de elementos se denomina como rango del vector.
Flavio de Jess Castillo Silva 44
Figura 6.1 Ejemplo de vector (arreglo unidimensional)





















Con los arreglos se pueden hacer las siguiente operaciones bsicas: a) asignacin;
b) leer/escribir; c) recorrido; d) bsqueda; e) actualizacin (aadir, borrar, insertar) y
f) ordenacin.

A continuacin se escribirn fragmentos de pseudocdigo para ilustrar las
operaciones antes mencionadas, excepto ordenacin y actualizacin, quienes se
analizarn en prrafos posteriores, cabe hacer mencin que el ndice que se utilice
para referenciar a un elemento, puede ser una constante o variable numrica.
nVcalif[3], si nP (el nombre de la variable t la designas) valiese 2, se puede
representar as: nVcalif[nP]


6.1.1 ASIGNACIN

Esta operacin permite almacenar de forma directa o a travs de una operacin un
valor a un elemento del arreglo, por ejemplo:

HACER nVcalif[2] = 9

HACER cValumno[15] = CARLOS LOPEZ

HACER nVprecios[4] = nPrecio * 1.18

HACER nVcalif[nX] = 1234.5 (suponiendo que nX valga 3 o cualquier
nmero dentro del rango del vector)
10 9 7 9 8

1

2

3

4

5
Rango. Es
la longitud
del vector.

Elementos
nVcalif
El ndice referencia al
elemento que se quiere
utilizar y se representa con
el nombre del vector y
entre corchetes el nmero
del elemento deseado:
nVcalif[3]
Algoritmia 45

6.1.2 LECTURA / ESCRITURA Y RECORRIDO


La lectura y escritura se realizan en los arreglos de igual forma que se ha realizado a
lo largo de los temas de algoritmos en este libro con los datos simples, la diferencia
estriba en que se hace la referencia al elemento correspondiente, por que si tengo un
vector de 10 de rango cuyo nombre es cVmaterias, para cualquier operacin si no
indico a qu elemento se est uno refiriendo se estara expresando
inadecuadamente:








Si se quisiese solicitar los nombres de los alumnos de un grupo de primer semestre
en el orden que estn sentados, partiendo de izquierda a derecha se podra
representar as:

:
HACER cValumno = ARREGLO(50)
12

:
DESDE nK=1 HASTA 50
INTRODUCIR Nombre del alumno?,cValumno[nK]
FIN_DESDE
:

Ahora bien, si se quisiese visualizar los contenidos que hay en los elementos de un
vector se hara uso de la operacin recorrido
13
nuevamente

DESDE nL=1 HASTA 50
ESCRIBIR cValumno[nL]
FIN_DESDE






12
Esta instruccin se declara solamente si se estn convirtiendo a ejecutable el pseudocdigo a
travs del CA-CLIPPER y el archivo PSEUDO.CH, sino, se ignora
13
La operacin recorrido, consiste como su nombre lo indica, pasar por cada uno de los elementos de
un arreglo. En los ejemplos que estn en el prrafo 6.1.2, se hace uso de la estructura cclica DESDE,
para que el contador sirva a su vez como el ndice, as, cuando el contador valga uno estar
posicionndose en el elemento uno y de esa forma sucesivamente.
MODO INCORRECTO

INTRODUCIR cVmaterias
Recorrido
Recorrido
Flavio de Jess Castillo Silva 46
6.1.3 BSQUEDA


Es una operacin de tipo secuencial (va uno por uno) en donde se puede localizar un
dato dentro del contenido de algn elemento de un arreglo. El ejemplo que a
continuacin se escribe, se har de dos maneras para ilustrar la eficiencia que se
puede hacer dentro de un pseudocdigo.

Ejemplo: Suponiendo que en una miscelnea se desea contar con una lista de
precios para mantenerlos actualizados.

INICIO
HACER cVprod = ARREGLO(200)
HACER nVprec = ARREGLO(200)
// Se cargan
14
los vectores va recorrido
DESDE nZ=1 HASTA 200
INTRODUCIR Nombre del producto?,cVprod[nZ]
INTRODUCIR Precio?,nVprec[nZ]
FIN_DESDE

// Suponiendo que en otro momento, se desea cambiar el precio de algn producto
INTRODUCIR Indica el nombre del producto al que se le cambiar el precio,cProd
// Se iniciar la bsqueda
DESDE nL=1 HASTA 200
SI cVprod[nL]=cProd ENTONCES
ESCRIBIR El precio actual es,nVprec[nL]
INTRODUCIR El nuevo precio,nVprec[nL]
FIN_SI
FIN_DESDE

Ahora bien, qu pasara si el producto al que se le desea cambiar el precio est
almacenado en el elemento tres?, ser inevitable que tenga que dar 197 vueltas
ms en vano?. Quiz cuando se manejan pocos datos (mil, dos mil, etc.) no se
aprecia la lentitud del proceso, sin embargo, si fuesen cantidades mayores como
ochenta mil, entonces si se sentira lento el proceso. Por ello, para romper la
ejecucin de un DESDE se hara as:

DESDE nL=1 HASTA 200
SI cVprod[nL]=cProd ENTONCES
ESCRIBIR El precio actual es,nVprec[nL]
INTRODUCIR El nuevo precio,nVprec[nL]
HACER nL = 200 // Lee la nota correspondiente en el pie de pgina
15


14
El trmino cargar , en la jerga de programacin se utiliza para indicar que se almacenarn datos
en los elementos del arreglo
15
Como un DESDE termina cuando se llega al limite establecido en el HASTA ms uno, entonces,
aprovechando esta circunstancia, si ya se localiz el producto que se busca, no tiene caso que el
Algoritmia 47
FIN_SI
FIN_DESDE

Otra forma de hacer la bsqueda, intentando hacerla ms general se hara de la
siguiente as:

// Suponiendo que en otro momento, se desea cambiar el precio de algn producto
INTRODUCIR Indica el nombre del producto al que se le cambiar el precio,cProd
// Se iniciar la bsqueda
HACER nPos = 0
DESDE nL=1 HASTA 200
SI cVprod[nL]=cProd ENTONCES
HACER nPos = nL // Almaceno la posicin donde se encontr el producto
HACER nL = 200
FIN_SI
FIN_DESDE


6.1.4 ACTUALIZACIN

La actualizacin se puede realizar a travs de las operaciones aadir, borrar e
insertar. A continuacin para explicar cada una de ellas se partir del vector cVletras
de rango 8:

cVletras
A B C F H I J K
1 2 3 4 5 6 7 8


La operacin de aadir consiste en aumentar el rango del vector
16
, por lo que este
proceso se realizar con la definicin de un nuevo arreglo que se componga de los
elementos del vector original ms uno, en este caso, de un rango de nueve (ya que
cVletras es de rango 8).





cVletras
A B C F H I J K
1 2 3 4 5 6 7 8

DESDE siga dando ms vueltas, imagnate que el producto estaba almacenado en el tercer elemento,
qu caso tendra hacer 197 vueltas ms?
16
Algunos lenguajes de programacin permiten incrementar el rango del arreglo, para el caso de este
libro, la operacin aadir se har considerando el paso de un arreglo de n elementos a otro de n
elementos ms uno.
Vector original
(antes de la operacin aadir)
Flavio de Jess Castillo Silva 48



cVletras1
A B C F H I J K
M

1

2

3

4

5

6

7

8

9

La rutina que hace este proceso es la siguiente (suponiendo que ya estn definidos
ambos vectores):

:
DESDE nL=1 HASTA 8
HACER cVletras1[nL] = cVletras[nL]
FIN_DESDE
INTRODUCIR Introduce el valor para el nuevo elemento?,cVletras1[9] // M
:


La operacin borrar consiste en asignarle el valor nulo correspondiente
17
al elemento
correspondiente:




cVletras
A B C F H I J K
1 2 3 4 5 6 7 8

:
HACER cVletras[6] =
:


Si se quisiese hacer ms general este procedimiento, ste quedara as:

:
INTRODUCIR Elemento que se desea borrar?,nEle
MIENTRAS nEle<1 OR nEle>8
INTRODUCIR *ERROR* Elemento que se desea borrar?,nEle
FIN_MIENTRAS
HACER cVletras[nEle] =
:


17
En caso de los datos tipo cadena el valor nulo es una cadena vaca (nula): ; para los datos tipo
numrico el nulo correspondiente es el cero y para los lgicos es el valor de falso
Vector aadido
(despus de la operacin aadir)
En este ejemplo se borrar el
elemento 6
Algoritmia 49

El resultado sera el siguiente:

cVletras
A B C F H J K
1 2 3 4 5 6 7 8


Por ltimo, la operacin de insertar consiste en poner un nuevo valor en el elemento
indicado, recorriendo los dems valores, teniendo entonces la prdida del ltimo
valor.

Retomando el vector cVletras como est al inicio de este subtema, se desea insertar
la letra D en el elemento 4, por lo que el valor del elemento 8 (K) se perder, ya
que ahora el ltimo valor ser J. Observa con detenimiento la ejemplificacin
correspondiente:




cVletras
A B C F H I J K
1 2 3 4 5 6 7 8



A B C D F H I J
1 2 3 4 5 6 7 8




La siguiente rutina hace el proceso de la insercin

INTRODUCIR Dato a insertar?,cLetra
INTRODUCIR Elemento donde se insertar?,nEle
MIENTRAS nEle<1 OR nEle>8
INTRODUCIR *ERROR* Elemento que se desea borrar?,nEle
FIN_MIENTRAS
DESDE nH=8 HASTA nEle+1 INCREMENTO -1
HACER cVletras[nH] = cVletras[nH-1] // Revisa la nota al pie de pgina
18

FIN_DESDE
HACER cVeltras[nEle] = cLetra

18
Haciendo uso de un recorrido inverso (del ltimo al primer elemento), se van re-asignando los
valores correspondientes. En la asignacin se hace uso del ndice nH-1 para tomar el valor del
elemento anterior y as cumplir con la insercin
Nuevo valor insertado
Este es el dato que se
pierde por la insercin
Flavio de Jess Castillo Silva 50
Las diferentes operaciones se han descrito con la finalidad de contar con recursos de
programacin dentro de un algoritmo.


6.1.5 EJERCICIOS RESUELTOS DE VECTORES


A continuacin se ejemplificar con pseudocdigo algunos ejemplos con un grado
ascendente en su resolucin para su mejor comprensin.


1. Se tienen almacenadas las calificaciones (entre 5 y 10) de los veinte alumnos de
agronoma del primer semestre y se desea saber la frecuencia de calificaciones
(cuntos dieces, cuntos nueves y as sucesivamente hasta la calificacin
reprobatoria de cinco) y el promedio general del grupo.

Razonamiento: a) las calificaciones de los estudiantes de agronoma estn en un
arreglo unidimensional de rango 100 (cien elementos); b) se requiere de otro
arreglo (puede ser de rango 10 para que la calificacin sirva a su vez de ndice).

INICIO
// Declaracin de arreglos y variables
HACER nVcalif = ARREGLO(20) // para las calificaciones
HACER nVfrec = ARREGLO(10) // para la frecuencia
HACER nSuma = 0 // acumulador de calificaciones

// INTRODUCCIN DE DATOS
DESDE nK=1 HASTA 20
INTRODUCIR Calificacin?,nVcalif[nK]
MIENTRAS nVcalif[nK]<5 OR nVcalif[nK]>10
INTRODUCIR *ERROR* Calificacin?,nVcalif[nK]
FIN_MIENTRAS
FIN_DESDE

// PROCESAMIENTO
DESDE nM=1 HASTA 20
HACER nCal = nVcalif[nM] // para mayor comprensin guardo la calif. En una
// variable simple
HACER nSuma = nSuma + nCal
HACER nVfrec[nCal] = nVfrec[nCal] + 1
FIN_DESDE
// SALIDA
DESDE nK=10 HASTA 5 INCREMENTO -1
ESCRIBIR Calificacin de ,nK, Frecuencia = ,nVfrec[nK]
FIN_DESDE
ESCRIBIR Promedio del grupo = ,nSuma/20
FIN
Algoritmia 51

Explicacin:
Al momento de hacer la declaracin de arreglos, estos se forman as (se asume
que ya se almacenaron los datos):

nVcalif








nVfrec


Haciendo uso de nuestra imaginacin, consideremos que la variable nSuma tiene
esta imagen:



Despus de capturar las calificaciones, la variable nSuma contendr el valor de
dicha sumatoria.





Despus de hacer el proceso, el vector nVfrec quedara as:

3 4 3 4 4 2
1 2 3 4 5 6 7 8 9 10

En la rutina de salida, el contador comienza en diez y termina en cinco (por que
no se consideraron las calificaciones del 0 al 4), por lo que la salida de datos se
vera as:










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

1 2 3 4 5 6 7 8 9 10
estos elementos no se usarn por estar
fuera del rango de calificaciones
0
148
nSuma
nSuma
Calificacin de 10 Frecuencia = 2
Calificacin de 9 Frecuencia = 4
Calificacin de 8 Frecuencia = 4
Calificacin de 7 Frecuencia = 3
Calificacin de 6 Frecuencia =4
Calificacin de 5 Frecuencia = 3
Promedio del grupo = 7.4
Flavio de Jess Castillo Silva 52
2. Se tienen almacenadas las calificaciones (del 0 al 10) finales de los cien alumnos
de informtica, se desea saber:
a. El promedio del grupo
b. Cual fue la calificacin ms alta
c. Cual fue la calificacin ms baja

INICIO
HACER nVcalif = ARREGLO(100)

// cargar vector (captura de datos)
DESDE nG=1 HASTA 100
ESCRIBIR Introducir la calificacin del alumno,nG
INTRODUCIR nVCalif[nG]
MIENTRAS nVcalif[nG]<0 OR nVcalif[nG]>10
INTRODUCIR "**ERROR** Calificacin ?", nVcalif[nG]
FIN_MIENTRAS
FIN_DESDE

// Proceso
HACER nSuma = 0 // Acumulador
HACER nMay = 0 // Comparador del mayor
HACER nMen = 10 // Comparador del menor
DESDE nF=1 HASTA 100
HACER nSuma = nSuma + nVcalif[nF] // Acumulando calificaciones
SI nVcalif[nF] > nMay ENTONCES // Determinando al mayor
HACER nMay = nVcalif[nF]
FIN_SI
SI nVcalif[nF] < nMen ENTONCES // Determinando al menor
HACER nMen = nVcalif[nF]
FIN_SI
FIN_DESDE

// Salida
ESCRIBIR El promedio del grupo es,nSuma/100
ESCRIBIR La calificacin mayor fue ,nMay
ESCRIBIR La calificacin menor fue ,nMen
FIN










El promedio del grupo es 8.3
La calificacin mayor fue 10
La calificacin menor fue 5
Algoritmia 53
3. Hacer un algoritmo para determinar la frecuencia de n nmeros.

INICIO
INTRODUCIR Introduzca el rango de nmeros,nR
MIENTRAS nR<1
INTRODUCIR Introduzca el rango de nmeros,nR
FIN_MIENTRAS
HACER aNum = ARREGLO(nR) // declaro el arreglo de nmeros
HACER aCompa = ARREGLO(nR) // arreglo para nmeros no repetidos
HACER aCuenta = ARREGLO(nR) // arreglo para frecuencia
// se solicitan los datos
DESDE nJ=1 HASTA nR
INTRODUCIR 'INTRODUZCA EL NUMERO ',aNum[nJ]
FIN_DESDE
// Se toma el primer nmero del arreglo de nmeros y se guarda
HACER nP = 1 // contador de nmeros agregados sin repetir
HACER aCompa[1] = aNum[1] // nmero no repetido
HACER aCuenta[1] = 1 // conteo del nmero no repetido
DESDE nK=2 HASTA nR // empiezo en el dos por el uno ya lo almacen
HACER nPos = 0 // bandera e ndice de bsqueda
// Rutina de bsqueda del siguiente nmero para ver
// si ya esta o no agregado en el arreglo de nmeros no repetidos
DESDE nM=1 HASTA nP
SI aNum[nK] = aCompa[nM] ENTONCES
HACER nPos = nM ; HACER nM = nP + 1
FIN_SI
FIN_DESDE
SI nPos>0 ENTONCES // si es verdadero quiere decir que lo encontr
HACER aCuenta[nPos] = aCuenta[nPos] + 1
SINO // sino es mayor a cero, quiere decir que se va a agregar el nmero
HACER nP = nP + 1
HACER aCompa[nP] = aNum[nK]
HACER aCuenta[nP] = 1
FIN_SI
FIN_DESDE
ESCRIBIR ===========================================
ESCRIBIR # NUMERO VECES
DESDE nJ = 1 HASTA nP
ESCRIBIR nJ, aCompa[nJ], aCuenta[nJ]
FIN_DESDE
ESCRIBIR ===========================================
FIN

4. Considerando que se tiene un arreglo de rango 10, en el que se introducirn
letras de forma aleatoria, se requiere de un algoritmo que las ordene
alfabticamente (ordenacin burbuja).

Flavio de Jess Castillo Silva 54
INICIO
ESCRIBIR ORDENAMIENTO BURBUJA
HACER aNom = ARREGLO(10)
// Introduccin de letras en desorden
DESDE nJ = 1 HASTA 10
INTRODUCIR LETRA:,aNom[nJ]
FIN_DESDE
// Se toma desde uno hasta el rango menos uno
DESDE nK = 1 HASTA 9
DESDE nJ = 1 HASTA 10-nK
SI aNom[nJ+1] < aNom[nJ] ENTONCES
HACER cNom = aNom[nJ]
HACER aNom[nJ] = aNom[nJ+1]
HACER aNom[nJ+1] = cNom
FIN_SI
FIN_DESDE
FIN_DESDE
// Visualizacin de resultados
DESDE nL=1 HASTA 10
ESCRIBIR aNom[nL]
FIN_DESDE
FIN

Explicacin
Al declarar el arreglo aNom de rango diez sera similar a lo siguiente:

aNom

1 2 3 4 5 6 7 8 9 10

Despus de hacer el recorrido para solicitar letra por letra y hacer el
almacenamiento podra quedar as:

aNom
D X R A K O Z M U G
1 2 3 4 5 6 7 8 9 10

A partir de este momento se presentar el detalle de cada vuelta y lo que sucede
con el ciclo interno para el acomodo de las letras, se presenta primero la
condicin as como el resultado correspondiente, adems, se muestra al vector
de acuerdo a las posibilidades nicas: Verdadero (se intercambian los valores) y
Falso (se queda como est).

1 vuelta: nJ recorrer hasta el 9
nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado
1 1 2 X < D Falso (se queda as)

Algoritmia 55

aNom (nK = 1, nJ = 1)
D X R A K O Z M U G
1 2 3 4 5 6 7 8 9 10

nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado
1 2 3 R < X Verdadero (se cambian)

aNom (nK = 1, nJ = 2)
D R X A K O Z M U G
1 2 3 4 5 6 7 8 9 10

nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado
1 3 4 A < X Verdadero (se cambian)

aNom (nK = 1, nJ = 3)
D R A X K O Z M U G
1 2 3 4 5 6 7 8 9 10

nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado
1 4 5 K < X Verdadero (se cambian)

aNom (nK = 1, nJ = 4)
D R A K X O Z M U G
1 2 3 4 5 6 7 8 9 10

nK nJ nJ+1 ANom[nJ+1] < aNom[nJ] Resultado
1 5 6 O < X Verdadero (se cambian)

aNom (nK = 1, nJ = 5)
D R A K O X Z M U G
1 2 3 4 5 6 7 8 9 10

nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado
1 6 7 Z < X Falso (se queda as)

aNom (nK = 1, nJ = 6)
D R A K O X Z M U G
1 2 3 4 5 6 7 8 9 10

nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado
1 7 8 M < Z Verdadero (se cambian)

aNom (nK = 1, nJ = 7)
D R A K O X M Z U G
1 2 3 4 5 6 7 8 9 10

Flavio de Jess Castillo Silva 56

nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado
1 8 9 U < Z Verdadero (se cambian)


aNom (nK = 1, nJ = 8)
D R A K O X M U Z G
1 2 3 4 5 6 7 8 9 10

nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado
1 9 10 G < Z Verdadero (se cambian)

aNom (nK = 1, nJ = 9)
D R A K O X M U G Z
1 2 3 4 5 6 7 8 9 10


2 Vuelta: nJ recorrer hasta el 8
nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado
2 1 2 R < D Falso (no se cambian)

aNom (nK = 2, nJ = 1)
D R A K O X M U G Z
1 2 3 4 5 6 7 8 9 10

nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado
2 2 3 A < R Verdadero (se cambian)

aNom (nK = 2, nJ = 2)
D A R K O X M U G Z
1 2 3 4 5 6 7 8 9 10

nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado
2 3 4 K < R Verdadero (se cambian)

aNom (nK = 2, nJ = 3)
D A K R O X M U G Z
1 2 3 4 5 6 7 8 9 10

nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado
2 4 5 O < R Verdadero (se cambian)

aNom (nK = 2, nJ = 4)
D A K O R X M U G Z
1 2 3 4 5 6 7 8 9 10

Algoritmia 57

nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado
2 5 6 X < R Falso (no se cambian)

aNom (nK = 2, nJ = 5)
D A K O R X M U G Z
1 2 3 4 5 6 7 8 9 10

nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado
2 6 7 M < X Verdadero (se cambian)

aNom (nK = 2, nJ = 6)
D A K O R M X U G Z
1 2 3 4 5 6 7 8 9 10

nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado
2 7 8 U < X Verdadero (se cambian)

aNom (nK = 2, nJ = 7)
D A K O R M U X G Z
1 2 3 4 5 6 7 8 9 10

nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado
2 8 9 G < X Verdadero (se cambian)

aNom (nK = 2, nJ = 8)
D A K O R M U G X Z
1 2 3 4 5 6 7 8 9 10


3 vuelta: nJ recorrer hasta el 7
nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado
3 1 2 A < D Verdadero (se cambian)

aNom (nK = 3, nJ = 1)
A D K O R M U G X Z
1 2 3 4 5 6 7 8 9 10

nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado
3 2 3 K < D Falso (no se cambian)

aNom (nK = 3, nJ = 2)
A D K O R M U G X Z
1 2 3 4 5 6 7 8 9 10

nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado
3 3 4 O < K Falso (no se cambian)
Flavio de Jess Castillo Silva 58
aNom (nK = 3, nJ = 3)
A D K O R M U G X Z
1 2 3 4 5 6 7 8 9 10

nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado
3 4 5 R < O Falso (no se cambian)

aNom (nK = 3, nJ = 4)
A D K O R M U G X Z
1 2 3 4 5 6 7 8 9 10

nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado
3 5 6 M < R Verdadero (se cambian)

aNom (nK = 3, nJ = 5)
A D K O M R U G X Z
1 2 3 4 5 6 7 8 9 10

nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado
3 6 7 U < R Falso (no se cambian)

aNom (nK = 3, nJ = 6)
A D K O M R U G X Z
1 2 3 4 5 6 7 8 9 10

nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado
3 7 8 G < U Verdadero (se cambian)

aNom (nK = 3, nJ = 7)
A D K O M R G U X Z
1 2 3 4 5 6 7 8 9 10


4 vuelta: nJ recorrer hasta el 6
nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado
4 1 2 D < A Falso (no se cambian)

aNom (nK = 4, nJ = 1)
A D K O M R G U X Z
1 2 3 4 5 6 7 8 9 10

nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado
4 2 3 K < D Falso (no se cambian)

aNom (nK = 4, nJ = 2)
A D K O M R G U X Z
1 2 3 4 5 6 7 8 9 10
Algoritmia 59

nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado
4 3 4 O < K Falso (no se cambian)

aNom (nK = 4, nJ = 3)
A D K O M R G U X Z
1 2 3 4 5 6 7 8 9 10

nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado
4 4 5 M < O Verdadero (se cambian)

aNom (nK = 4, nJ = 4)
A D K M O R G U X Z
1 2 3 4 5 6 7 8 9 10

nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado
4 5 6 R < O Falso (no se cambian)

aNom (nK = 4, nJ = 5)
A D K M O R G U X Z
1 2 3 4 5 6 7 8 9 10

nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado
4 6 7 G < R Verdadero (se cambian)

aNom (nK = 4, nJ = 6)
A D K M O G R U X Z
1 2 3 4 5 6 7 8 9 10


5 vuelta: nJ recorrer hasta 5
nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado
5 1 2 D < A Falso (no se cambian)

aNom (nK = 5, nJ = 1)
A D K M O G R U X Z
1 2 3 4 5 6 7 8 9 10

nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado
5 2 3 K < D Falso (no se cambian)

aNom (nK = 5, nJ = 2)
A D K M O G R U X Z
1 2 3 4 5 6 7 8 9 10

nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado
5 3 4 M < K Falso (no se cambian)
Flavio de Jess Castillo Silva 60
aNom (nK = 5, nJ = 3)
A D K M O G R U X Z
1 2 3 4 5 6 7 8 9 10

nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado
5 4 5 O < M Falso (no se cambian)

aNom (nK = 5, nJ = 4)
A D K M O G R U X Z
1 2 3 4 5 6 7 8 9 10

nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado
5 5 6 G < O Verdadero (se cambian)

aNom (nK = 5, nJ = 5)
A D K M G O R U X Z
1 2 3 4 5 6 7 8 9 10


6 vuelta: nJ recorrer hasta el 4
nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado
6 1 2 D < A Falso (no se cambian)

aNom (nK = 6, nJ = 1)
A D K M G O R U X Z
1 2 3 4 5 6 7 8 9 10

nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado
6 2 3 K < D Falso (no se cambian)

aNom (nK = 6, nJ = 2)
A D K M G O R U X Z
1 2 3 4 5 6 7 8 9 10

nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado
6 3 4 M < K Falso (no se cambian)

aNom (nK = 6, nJ = 3)
A D K M G O R U X Z
1 2 3 4 5 6 7 8 9 10

nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado
6 4 5 G < M Verdadero (se cambian)

aNom (nK = 6, nJ = 4)
A D K G M O R U X Z
1 2 3 4 5 6 7 8 9 10
Algoritmia 61
7 vuelta: nJ recorrer hasta 3
nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado
7 1 2 D < A Falso (no se cambian)

aNom (nK = 7, nJ = 1)
A D K G M O R U X Z
1 2 3 4 5 6 7 8 9 10

nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado
7 2 3 K < D Falso (no se cambian)

aNom (nK = 7, nJ = 2)
A D K G M O R U X Z
1 2 3 4 5 6 7 8 9 10

nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado
7 3 4 G < K Verdadero (se cambian)

aNom (nK = 7, nJ = 3)
A D G K M O R U X Z
1 2 3 4 5 6 7 8 9 10

Nk nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado
7 4 5 M < K Falso (no se cambian)

aNom (nK = 7, nJ = 4)
A D G K M O R U X Z
1 2 3 4 5 6 7 8 9 10


8 vuelta: nJ recorrer hasta 2
Nk nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado
8 1 2 D < A Falso (no se cambian)

aNom (nK = 8, nJ = 1)
A D G K M O R U X Z
1 2 3 4 5 6 7 8 9 10

Nk nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado
8 2 3 G < D Falso (no se cambian)

aNom (nK = 8, nJ = 2)
A D G K M O R U X Z
1 2 3 4 5 6 7 8 9 10


Flavio de Jess Castillo Silva 62
9 vuelta: nJ recorrer una sola vez
Nk nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado
9 1 2 D < A Falso (no se cambian)

aNom (nK = 9, nJ = 1)
A D G K M O R U X Z
1 2 3 4 5 6 7 8 9 10

Comentarios finales del ejercicio: En cada vuelta se fue reduciendo el recorrido
debido a que el acomodo se hace hacia la derecha, de tal forma, que las letras
ltimas del abecedario quedarn en las ltimas celdas y as sucesivamente hacia
la izquierda.

5. Realizar un algoritmo para la conversin de nmeros arbigos enteros
comprendidos entre el 1 y el 3,999 a su equivalencia en romanos.

INICIO
HACER aMiles = ARREGLO(3) ; HACER aCen = ARREGLO(9)
HACER aDec = ARREGLO(9) ; HACER aUnid = ARREGLO(9)
HACER aMiles[1] = 'M' ; HACER aMiles[2] = 'MM'; HACER aMiles[3] = 'MMM
HACER aCen[9] = 'CM' ; HACER aCen[8] = 'DCCC'
HACER aCen[7] = 'DCC' ; HACER aCen[6] = 'DC'
HACER aCen[5] = 'D' ; HACER aCen[4] = 'CD'
HACER aCen[3] = 'CCC' ; HACER aCen[2] = 'CC'
HACER aCen[1] = 'C'
HACER aDec[9] = 'XC' ; HACER aDec[8] = 'LXXX'
HACER aDec[7] = 'LXX' ; HACER aDec[6] = 'LX'
HACER aDec[5] = 'L' ; HACER aDec[4] = 'XL'
HACER aDec[3] = 'XXX' ; HACER aDec[2] = 'XX'
HACER aDec[1] = 'X'
HACER aUnid[9] = 'IX' ; HACER aUnid[8] = 'VIII'
HACER aUnid[7] = 'VII' ; HACER aUnid[6] = 'VI'
HACER aUnid[5] = 'V' ; HACER aUnid[4] = 'IV'
HACER aUnid[3] = 'III' ; HACER aUnid[2] = 'II'
HACER aUnid[1] = 'I' ; HACER cRom = ' '
INTRODUCIR 'NUMERO ARABIGO (ENTRE 1-3999): ',nNum
MIENTRAS nNum<1 OR nNUm>3999
INTRODUCIR *ERROR* NUMERO ARABIGO (1-3999),nNum
FIN_MIENTRAS
HACER nMil = nNum DIV 1000
HACER nNum = nNum MOD 1000
HACER nCen = nNum DIV 100
HACER nNum = nNum MOD 100
HACER nDec = nNum DIV 10
HACER nNum = nNum MOD 10

Algoritmia 63
SI nMil>0 ENTONCES
HACER cRom = aMiles[nMil]
FIN_SI
SI nCen>0 ENTONCES
HACER cRom = cRom + aCen[nCen]
FIN_SI
SI nDec>0 ENTONCES
HACER cRom = cRom + aDec[nDec]
FIN_SI
SI nNum>0 ENTONCES
HACER cRom = cRom + aUnid[nNum]
FIN_SI
ESCRIBIR Nmero Romano -->,cRom
FIN



6.1.6 EJERCICIOS PROPUESTOS DE VECTORES

1. Con ayuda de arreglos unidimensionales se desea almacenar informacin de las
calificaciones finales de los cuatro parciales de esta materia en un grupo de n
alumnos. Realiza un algoritmo que proporcione la siguiente informacin:
a. El promedio semestral por alumno
b. El promedio del grupo por parcial
c. Porcentaje por parcial de alumnos aprobados y reprobados
d. La frecuencia semestral de calificaciones

2. En una empresa de radiolocalizadotes, se desea contar con un algoritmo que les
ayude a llevar el control de los mensajes recibidos de cada usuario. Al final del
mes se requiere de cada usuario:
a. El importe a pagar considerando que los 100 primeros mensajes estn
incluidos en la renta de $90.00 y cada mensaje adicional cuesta $0.80
b. Para la empresa se requiere la suma del importe a cobrar de todos los
usuarios

3. En una plaza de toros se venden boletos para quince tipos de asientos, se
requiere de un algoritmo que lleve el control de los boletos vendidos para cada
uno de ellos. Al corte de caja se desea saber:
a. La suma de boletos global
b. El tipo de boleto con mayor demanda y el de menor demanda
c. El porcentaje por tipo de boletos con respecto al total de boletos vendidos

4. Se requiere de un vector para almacenar los primeros 50 nmeros perfectos.
Hacer un algoritmo para ello. Un nmero perfecto es aquel que sumando sus
dividendos excepto l mismo dan el mismo nmero, por ejemplo, el nmero seis
es perfecto por que es divisible entre 1, 2 y 3, al sumar estos dan seis.

Flavio de Jess Castillo Silva 64
5. Hacer un algoritmo para realizar las elecciones en China, donde existen 32
candidatos presidenciales y el nmero del candidato ser el identificador en el
voto, con el cero se determinar el final de las elecciones y se desea:
a. Versin 1: Saber quien es el ganador, suponiendo que todos obtuvieron
votos diferentes
b. Versin 2: Considerar que algunos candidatos pudieron haber obtenido la
mayora de votos, por lo que se desea saber quienes empataron en primer
lugar.



6.2 TABLAS


Los arreglos bidimensionales, conocidos como tablas o matrices, son conjuntos de
elementos en los cuales se hace uso de dos ndices (uno para cada dimensin),
estas tablas estn formadas por filas y columnas, as como se representa en la
siguiente figura:












Las filas son representadas de forma horizontal y las columnas verticalmente, los
elementos son conocidos como celdas (como en una hoja de clculo) y se pueden
referenciar como est representado en el siguiente cuadro, el primer nmero (antes
de la coma) se refiere a la fila y el segundo (despus de la coma) a la columna:












1,1 1,2 1,3 1,4
2,1
2,2 2,3 2,4
3,1 3,2 3,3 3,4
Fila
Columna
cTnom[2,3]



cTnom[nJ,nK]
Algoritmia 65
6.2.1 EJERCICIOS RESUELTOS DE TABLAS

Los ejercicios que a continuacin se describen son muy bsicos y tienen la finalidad
de ejemplificarlos sin tener la intencionalidad de pretender con ellos generar
conocimiento, son solo ilustrativos.

1. Se requiere de un algoritmo para manejar la lista de precios de los cincuenta
artculos ms vendidos de una Refaccionaria, cuyas partes estn identificados por
cdigos de cuatro dgitos. De tal forma, que el empleado tenga a su alcance la
consulta eficaz de los precios.

INICIO
HACER nTlista = ARREGLO(50,2) // 50 articulos con 2 columnas
// 1er columna cdigos,
// 2da columna precios
HACER cVart = ARREGLO(50) // arreglo para los nombres de los artculos

// Se cargan los arreglos
DESDE nK=1 HASTA 50

// Se captura el cdigo con un proceso de validacin
// Para evitar duplicacin de los mismos
HACER nPos = 1 // se pone la bandera como si existiera
MIENTRAS nPos = 1
HACER nPos = 0
INTRODUCIR Cdigo del Artculo,nTlista[nK,1]
DESDE nL=1 HASTA nK
SI nTlista[nK,1] = nTlista[nL,1] ENTONCES
HACER nPos = 1 ; HACER nL = nK
FIN_SI
FIN_DESDE
FIN_MIENTRAS

INTRODUCIR Nombre del Artculo,cVart[nK]
INTRODUCIR Precio,nTlista[nK,2]
MIENTRAS nTlista[nK,2] < 0
INTRODUCIR **ERROR**, Precio,nTlista[nK,2]
FIN_MIENTRAS
FIN_DESDE


// Rutina para la bsqueda de precios (aqu estar hasta que el
// Usuario lo decida, esto ser cuando introduzca cero en la clave)
INTRODUCIR Cdigo a localizar,nCve



Flavio de Jess Castillo Silva 66
MIENTRAS nCve>0
// Se busca en la Tabla
HACER nPos = 0
DESDE nA=1 HASTA 50
SI nCve = nTlista[nA,1] ENTONCES
ESCRIBIR Artculo = ,cVart[nA]
ESCRIBIR Precio = ,nTlista[nA,2]
HACER nA = 50 ; HACER nPos = 1
FIN_SI
FIN_DESDE
SI nPos=0 ENTONCES
ESCRIBIR Cdigo no localizado
FIN_SI
INTRODUCIR Cdigo a localizar,nCve
FIN_MIENTRAS
FIN

2. Tomando el ejercicio dos de la seccin 6.1.6, se resolver ahora con arreglos
bidimensionales.

INICIO
HACER nTpins = ARREGLO(1000,2)
HACER nSuma = 0 // Acumulador de importes
// Se considera que se har por cada da y de forma aleatoria durante un mes,
// como sucede aproximadamente en una empresa de este giro comercial
// Adems se asume para este ejemplo dos cosas: que los pines de los
// Radiolocalizadores estn ya almacenados en la primer columna de la tabla
// y la 2da. Columna se utilizar para llevar el conteo de mensajes por pin.

DESDE nJ=1 HASTA 30 // asumiendo 30 das por mes
INTRODUCIR Pin?,nPin
MIENTRAS nPin>0
HACER nPos = 0
DESDE nL=1 HASTA 1000
SI nPin = nTpins[nL,1] ENTONCES
HACER nPos = 1
HACER nTpins[nL,2] = nTpins[nL,2] + 1
HACER nL = 1000
FIN_SI
FIN_DESDE
SI nPos = 0 ENTONCES
ESCRIBIR El Pin no existe
FIN_SI
INTRODUCIR Pin?,nPin
FIN_MIENTRAS // Al poner el pin cero se cambia de da
FIN_DESDE

Algoritmia 67
// La siguiente parte del pseudocdigo consiste en hacer el clculo del cobro
// tanto individual como global (se asume que se hace al final del mes)
ESCRIBIR #Pin Renta Mensajes Extras Importe
DESDE nJ=1 HASTA 1000
HACER nMextra = 0
SI nTpins[nJ,2] > 100 ENTONCES
Hacer nMextra = 100 nTpins[nJ,2] * 0.80
FIN_SI
HACER nImpo = 90 + nMextra // Importe a pagar x el usuario
HACER nSuma = nSuma + nImpo // Acumulacin para la empresa
ESCRIBIR nTpins[nJ,1],90.00,nMextra,nImpo
FIN_DESDE
ESCRIBIR El importe total a cobrar del mes es =,nSuma
FIN



6.2.2 EJERCICIOS PROPUESTOS DE TABLAS


1. El Club deportivo El Atltico de Oaxaca tiene actualmente 350 socios, por lo que
se requiere de un algoritmo que le permita llevar el acumulado de los importes de
otros consumos de sus socios por membresa durante el mes (tales como:
masaje, cafetera, ropa, etc.), considerando que la renta mensual de
mantenimiento es de $850.00. Se desea saber al fin de mes el importe a cobrar
de cada socio.

2. El teatro lvaro Carrillo de la ciudad de Oaxaca, requiere de un algoritmo para la
venta de sus boletos, considerando que tiene 48 filas numeradas con 60 asientos
cada una, se debe considerar que el algoritmo le indique si el asiento que el
cliente desea adquirir para alguna funcin ya est o no vendido.

3. En el bosque El Tequio, desea reforestar un rea de su terreno, cuya posicin de
los rboles estn registrados en una tabla de 10 filas y 25 columnas. El dato
almacenado en cada celda tiene el siguiente significado:
a. Un cero significa que no se ha plantado un rbol
b. Un uno negativo que es un rbol muerto y debe talarse
c. Un nmero entre uno y cien, representa la edad calculada del rbol

Realice un algoritmo que permita manipular dicha tabla y de respuesta a las
siguientes interrogantes:

a. Cuntos rboles han sido plantados? (suma de rboles muertos y vacos)
b. En qu zona se requiere atender ms por tener la fila o columna con
espacios vacos?
c. Qu columna tiene ms rboles buenos? (edades entre 1 y 100)

Flavio de Jess Castillo Silva 68




ANEXO 1


El siguiente archivo se llama PSEUDO.CH y sirve para tomar las instrucciones
nativas de CA-CLIPPER 5.2.d superior y traducirlas para el manejo de
pseudocdigos, este archivo deber estar en la carpeta denominada como INCLUDE
en CA-CLIPPER.

#stdout *----- -----*
#stdout Pseudocdigo ver 1.5 ITAO 23
#stdout por Flavio de Jess Castillo Silva
#stdout Derechos reservados (2004)
#stdout *----- -----*

#command INICIO => SETCOLOR("gr+/b") ; CLS
#command FIN => SETCOLOR("w/n") ; RETURN
#command LIMPIA => CLS
#command PAUSA <exp> => INKEY(<exp>)

/*
Comandos para lectura / escritura
*/
#command LEER [<c>,]<var> => if ( !Empty(__Accept(<c>)) ) ;
; <var> := &( __AcceptStr() ) ;
; end
#command INTRODUCIR [<c>,]<var> => if ( !Empty(__Accept(<c>)) ) ;
; <var> := &( __AcceptStr() ) ;
; end
#command VISUALIZAR [ <list,...> ] => QOut( <list> )
#command IMPRIMIR [ <list,...> ] => QOut( <list> )
#command ESCRIBIR [ <list,...> ] => QOut( <list> )

/*
Comandos para asignacin
*/

#command ARREGLO(<var2>[, <varN> ]) => ARRAY(<var2>[, <varN> ])
#translate ARREGLO(<var2>[, <varN> ]) => ARRAY(<var2>[, <varN> ])

#command HACER <var1> = <var2> DIV <var3> => <var1> := INT(<var2>/<var3>)
#command HACER <var1> = <var2> MOD <var3> ;
=> <var1> := <var2> - (INT(<var2>/<var3>)*<var3>)
Algoritmia 69
#command HACER <var1> = [ <varN> = ] <value> => ;
<var1> := [ <varN> := ] <value>

/*
Comandos para las estructuras (ciclos)
*/
#command DESDE <var1> = <var2> HASTA <var3> [INCREMENTO <var4>] => ;
FOR <var1>:= <var2> TO <var3> [STEP <var4>]
#command FIN_DESDE => next
#command MIENTRAS <exp> => while <exp>
#command FIN_MIENTRAS => enddo
#command REPETIR => do while .t.
#command HASTA <exp1> => if (<exp1>); exit; end; end
#command SALIR CICLO => EXIT
#command INICIAR CICLO => LOOP

/*
Comandos para bifurcaciones
*/
#command SI <exp> ENTONCES => IF <exp>
#command SINO => ELSE
#command SINOSI <exp> ENTONCES => ELSEIF <exp>
#command SINO_SI <exp> ENTONCES => ELSEIF <exp>
#command FIN_SI => ENDIF
#command EVALUAR => DO CASE
#command CASO <var> = <exp> => CASE <var> == <exp>
#command OTRO => OTHERWISE
#command FIN_EVALUAR => ENDCASE

/*
Booleanos
*/
#define OR .or.
#define AND .and.
#define or . or.
#define and .and.
#define verdadero .t.
#define falso .f.
#define VERDADERO .T.
#define FALSO .F.
Flavio de Jess Castillo Silva 70




ANEXO 2


El archivo descrito a continuacin, corresponde al archivo por lotes denominado
PSEUDO.BAT y sirve para hacer la compilacin del archivo con CA-CLIPPER 5.2.d
superior y deber estar en la carpeta BIN de este lenguaje.

CLIPPER %1 /b
IF NOT ERRORLEVEL 1 RTLINK FILE %1
CLD %1


Cualquier pseudocdigo descrito en este libro podr ser compilado con solo incluirle
la instruccin dentro del archivo que tendr la extensin .PRG y que se someter a
las reglas de MS-DOS para nombrar archivos (longitud mxima en el nombre de
ocho caracteres):

#INCLUDE pseudo.ch

INICIO
DESDE nJ=1 HASTA 50
ESCRIBIR ITAO
FIN_DESDE


Y para ejecutar la compilacin, desde la lnea de comandos del smbolo de sistema
se hara:

PSEUDO programa < Enter >
Algoritmia 71




BIBLIOGRAFA GENERAL


Cair, O. (1995). Metodologa de la Programacin. Colombia: Computec. Tomo I
Cair, O. (1995). Metodologa de la Programacin. Colombia: Computec. Tomo II
Castillo, F. (1986). Curso Elemental de BASIC. Mxico: DGETA-Microsep
Hernndez, M. (1997). Algoritmos. Mxico: Instituto Tecnolgico de Tuxtepec
(paper)
Joyanes, L. (1989). Fundamentos de Programacin (Algoritmos y Estructura de
Datos). Mxico:Mc Graw Hill
Sawatzky, J. y Shu-Jen Chen (1985). Programacin BASIC-PLUS. Mxico:
Limusa