Está en la página 1de 62

FUNDACIN

UNIVERSITARIA DEL REA


ANDINA
LGICA DE PROGRAMACIN
JC

TCNICO PROFESIONAL EN SISTEMAS

FUNDACIN UNIVERSITARIA DEL REA ANDINA


CENTRO EDUCACIN A DISTANCIA
TCNICO PROFESIONAL EN SISTEMAS

LGICA DE PROGRAMACIN
CAPITULO UNO
CONCEPTOS BSICOS
QU ES UN ALGORITMO?
La palabra algoritmo se deriva de la traduccin al latn de la palabra rabe
alkhowarizmi, nombre de un matemtico y astrnomo rabe que escribi un tratado
sobre manipulacin de nmeros y ecuaciones en el siglo IX.
Un algoritmo es una serie de pasos organizados que describe el proceso que se debe
seguir, para dar solucin a un problema especfico.
TIPOS DE ALGORITMOS?
Existen dos tipos y son llamados as por su naturaleza:
Cualitativos: Son aquellos en los que se describen los pasos utilizando palabras.
Cuantitativos: Son aquellos en los que se utilizan clculos numricos para
definir los pasos del proceso.
Lenguajes Algortmicos
Un Lenguaje algortmico es una serie de smbolos y reglas que se utilizan para describir
de manera explcita un proceso.
Tipos de Lenguajes Algortmicos
Grficos: Es la representacin grfica de las operaciones que realiza un
algoritmo (diagrama de flujo).

No Grficos: Representa en forma descriptiva las operaciones que debe realizar un


algoritmo (pseudocodigo).

INICIO
Edad: Entero
ESCRIBA cual es tu edad?
Lea Edad
SI Edad >=18 entonces
ESCRIBA Eres mayor de Edad
FINSI
ESCRIBA fin del algoritmo
FIN
Metodologa para la solucin de un problema mediante un computador. Creacin
de un algoritmo.
El computador es una mquina que por s sola no puede hacer nada, necesita ser
programada, es decir, introducirle instrucciones u ordenes que le digan lo que tiene que
hacer. Un programa es la solucin a un problema inicial, as que todo comienza all: en
el Problema. El proceso de programacin es el siguiente: Dado un determinado
problema el programador debe idear una solucin y expresarla usando un algoritmo
(aqu es donde entra a jugar); luego de esto, debe codificarlo en un determinado
lenguaje de programacin y por ltimo ejecutar el programa en el computador el cual
refleja una solucin al problema inicial. Esto es a grandes rasgos lo que hace el
programador de computadores.
La parte que corresponde a este manual es la de: Dado un determinado problema
debemos idear una solucin y expresarla usando un ALGORITMO!.
Metodologa para la solucin de problemas por medio de la computadora
DEFINICIN DEL PROBLEMA
Esta fase est dada por el enunciado del problema, el cual requiere una definicin
clara y precisa. Es importante que se conozca lo que se desea que realice la
computadora; mientras esto no se conozca del todo no tiene mucho caso continuar
con la siguiente etapa.
ANLISIS DEL PROBLEMA
Una vez que se ha comprendido lo que se desea de la computadora, es necesario
definir:
o

Los datos de entrada.

Cual es la informacin que se desea producir (salida)

Los mtodos y frmulas que se necesitan para procesar los datos.

Una recomendacin muy prctica es el de colocarse en el lugar de la


computadora y analizar qu es lo que se necesita que se ordene y en qu
secuencia para producir los resultados esperados.
DISEO DEL ALGORITMO
Las caractersticas de un buen algoritmo son:

Debe tener un punto particular de inicio.

Debe ser definido, no debe permitir dobles interpretaciones.

Debe ser general, es decir, soportar la mayora de las variantes que se


puedan presentar en la definicin del problema.

Debe ser finito en tamao y tiempo de ejecucin.

Diseo del Algoritmo

Prueba de escritorio o Depuracin

Se denomina prueba de escritorio a la comprobacin que se hace de un algoritmo para


saber si est bien hecho. Esta prueba consiste en tomar datos especficos como entrada y
seguir la secuencia indicada en el algoritmo hasta obtener un resultado, el anlisis de
estos resultados indicar si el algoritmo est correcto o si por el contrario hay necesidad
de corregirlo o hacerle ajustes.
Para el proceso de Algoritmos es necesario aprender a desarrollar un conjunto de
elementos.
Todos estos elementos con los cuales se construyen dichos algoritmos se basan en una
disciplina llamada: Programacin Estructurada.
Empecemos por conocer las reglas para cambiar frmulas matemticas a expresiones
vlidas para la computadora, adems de diferenciar constantes e identificadores y tipos
de datos simples.
Tipos De Datos
Todos los datos tienen un tipo asociado con ellos. Un dato puede ser un simple carcter,
tal como b, un valor entero tal como 35. El tipo de dato determina la naturaleza del
conjunto de valores que puede tomar una variable.

Tipos de Datos Simples


Datos Numricos:
Permiten representar valores escalares de forma numrica, esto incluye a los nmeros
enteros y los reales. Este tipo de datos permiten realizar operaciones aritmticas
comunes.
Datos lgicos:
Son aquellos que solo pueden tener dos valores (cierto o falso) ya que representan el
resultado de una comparacin entre otros datos (numricos o alfanumricos).

Datos alfanumricos (string):


Es una secuencia de caracteres alfanumricos que permiten representar valores
identificables de forma descriptiva, esto incluye nombres de personas, direcciones, etc.
Es posible representar nmeros como alfanumricos, pero estos pierden su propiedad
matemtica, es decir no es posible hacer operaciones con ellos. Este tipo de datos se
representan encerrados entre comillas.
Identificadores
Los identificadores representan los datos de un programa (constantes, variables, tipos de
datos). Un identificador es una secuencia de caracteres que sirve para identificar una
posicin en la memoria de la computadora, que permite acceder a su contenido.
Ejemplo:
Nombre
Num_hrs
Calif2
Reglas para formar un identificador
Debe comenzar con una letra (A a Z, maysculas o minsculas) y no deben
contener espacios en blanco.
Letras, dgitos y caracteres como la subraya ( _ ) estn permitidos despus del
primer carcter.
La longitud de identificadores puede ser de varios caracteres. Pero es
recomendable una longitud promedio de 8 caracteres.
El nombre del identificador debe dar una idea del valor que contiene.
Qu son las constantes, las variables y las expresiones en la programacin as como
su clasificacin.
Constantes
Una constante es un dato numrico o alfanumrico que no cambia durante la ejecucin
del programa.
Ejemplo:
pi = 3.1416
Variable
Es un espacio en la memoria de la computadora que permite almacenar temporalmente
un dato durante la ejecucin de un proceso, su contenido puede cambiar durante la
ejecucin del programa.
Para poder reconocer una variable en la memoria de la computadora, es necesario darle
un nombre con el cual podamos identificarla dentro de un algoritmo.
Ejemplo:
area = pi * radio ^ 2
Las variables son : el radio, el area y la constate es pi

Clasificacin de las Variables

Por su contenido
Variables Numricas: Son aquellas en las cuales se almacenan valores
numricos, positivos o negativos, es decir almacenan nmeros del 0 al 9, signos
(+ y -) y el punto decimal.
Ejemplo:
iva = 0.15 pi = 3.1416 costo = 2500
Variables Lgicas: Son aquellas que solo pueden tener dos valores (cierto o
falso) estos representan el resultado de una comparacin entre otros datos.
Variables Alfanumricas: Esta formada por caracteres alfanumricos (letras,
nmeros y caracteres especiales).
Ejemplo:
letra = a apellido = lopez direccion = Av. Libertad #190
Por su uso
Variables de Trabajo: Variables que reciben el resultado de una operacin
matemtica completa y que se usan normalmente dentro de un programa.
Ejemplo:
Suma = a + b /c
Contadores: Se utilizan para llevar el control del numero de ocasiones en que se
realiza una operacin o se cumple una condicin. Con los incrementos
generalmente de uno en uno.
Acumuladores: Forma que toma una variable y que sirve para llevar la suma
acumulativa de una serie de valores que se van leyendo o calculando
progresivamente.
Expresiones
Las expresiones son combinaciones de constantes, variables, smbolos de operacin,
parntesis y nombres de funciones especiales.
Por ejemplo:
a + (b + 3) / c
Cada expresin toma un valor que se determina tomando los valores de las variables y
constantes implicadas y la ejecucin de las operaciones indicadas.
Una expresin consta de operadores y operandos. Segn sea el tipo de datos que
manipulan, se clasifican las expresiones en:

Aritmticas
Relacionales
Lgicas
Qu son los operadores y los operando, sus tipos y las prioridades de ejecucin de
los mismos.
Operadores
Son elementos que relacionan de forma diferente, los valores de una o mas variables y/o
constantes. Es decir, los operadores nos permiten manipular valores.

Operadores Aritmticos
Los operadores aritmticos permiten la realizacin de operaciones matemticas con los
valores (variables y constantes).
Los operadores aritmticos pueden ser utilizados con tipos de datos enteros o reales. Si
ambos son enteros, el resultado es entero; si alguno de ellos es real, el resultado es real.

Operadores Aritmticos
+ Suma
- Resta
* Multiplicacin
/ Divisin
mod Modulo (residuo de la divisin entera)
Ejemplos:
Expresin
7/2
12 mod 7
4+2*5

Resultado
3.5
5
14

Prioridad de los Operadores Aritmticos


Todas las expresiones entre parntesis se evalan primero. Las expresiones con
parntesis anidados se evalan de dentro a fuera, el parntesis ms interno se evala
primero.
Dentro de una misma expresin los operadores se evalan en el siguiente orden:
1. ^ Exponenciacin

2. *, /, mod Multiplicacin, divisin, modulo.


3. +, - Suma y resta.
Los operadores en una misma expresin con igual nivel de prioridad se evalan de
izquierda a derecha.
Ejemplos:
4 + 2 * 5 = 14
3 + 5 * (10 - (2 + 4)) = 23

23 * 2 / 5 = 9.2
2.1 * (1.5 + 12.3) = 2.1 * 13.8 = 28.98

Operadores Relacionales
Se utilizan para establecer una relacin entre dos valores. Luego compara estos valores
entre si y esta comparacin produce un resultado de certeza o falsedad (verdadero o
falso).
Los operadores relacionales comparan valores del mismo tipo (numricos o cadenas).
Estos tienen el mismo nivel de prioridad en su evaluacin.
Los operadores relacinales tiene menor prioridad que los aritmticos.
Tipos de operadores Relacionales
> Mayor que
< Menor que
> = Mayor o igual que
< = Menor o igual que
< > Diferente
= Igual
Ejemplos:
Si a = 10, b = 20, c = 30
a+b>c
Falso
a-b<c
Verdadero
a-b=c
Falso
a*b<>c
Verdadero
Ejemplos no lgicos:
a<b<c
10 < 20 < 30
T > 5 < 30
(no es lgico porque tiene diferentes operandos)
Operadores Lgicos
Estos operadores se utilizan para establecer relaciones entre valores lgicos. Estos
valores pueden ser resultado de una expresin relacional.
Tipos de operadores Lgicos
And Y
Or O

Not Negacin
Ejemplo:
Para los siguientes ejemplos T significa verdadero y F falso.

Operador Not Operador Not


Operando
Resultado
T
F
F
T
Operador And Operador And
Operando1
Operador
Operando2
T
AND
T
T
F
F
T
F
F

Resultado
T
F
F
F

Operador Or Operador Or
Operando1
Operador
Operando2
T
Or
T
T
F
F
T
F
F

Resultado
T
T
T
F

Prioridad de los Operadores Lgicos


1. Not
2. And
3. Or
Prioridad de los Operadores en General
1. ( )
2. ^
3. *, /, Mod, Not
4. +, -, And
5. >, <, > =, < =, < >, =, Or
Ejemplos:
Sea: a = 10 b = 12 c = 13 d =10

Existen dos principales tecnicas de diseo de algoritmos de programacin, el Top


Down y el Bottom Up.
Top Down
Tambin conocida como de arriba-abajo y consiste en establecer una serie de niveles de
mayor a menor complejidad (arriba-abajo) que den solucin al problema. Consiste en
efectuar una relacin entre las etapas de la estructuracin de forma que una etapa
jerrquica y su inmediato inferior se relacionen mediante entradas y salidas de
informacin. Este diseo consiste en una serie de descomposiciones sucesivas del
problema inicial, que recibe el refinamiento progresivo del repertorio de instrucciones
que van a formar parte del programa.
La utilizacin de la tcnica de diseo Top-Down tiene los siguientes objetivos bsicos:
Simplificacin del problema y de los subprogramas de cada descomposicin.
Las diferentes partes del problema pueden ser programadas de modo
independiente e incluso por diferentes personas.
El programa final queda estructurado en forma de bloque o mdulos lo que hace
mas sencilla su lectura y mantenimiento.
Bottom Up
El diseo ascendente se refiere a la identificacin de aquellos procesos que necesitan
computarizarse con forme vayan apareciendo, su anlisis como sistema y su
codificacin, o bien, la adquisicin de paquetes de software para satisfacer el problema
inmediato.
Cuando la programacin se realiza internamente y haciendo un enfoque ascendente, es
difcil llegar a integrar los subsistemas al grado tal de que el desempeo global, sea
fluido. Los problemas de integracin entre los subsistemas son sumamente costosos y
muchos de ellos no se solucionan hasta que la programacin alcanza la fecha lmite para
la integracin total del sistema. En esta fecha, ya se cuenta con muy poco tiempo,
presupuesto o paciencia de los usuarios, como para corregir aquellas delicadas
interfaces, que en un principio, se ignoran. Aunque cada subsistema parece ofrecer lo
que se requiere, cuando se contempla al sistema como una entidad global, adolece de
ciertas limitaciones por haber tomado un enfoque ascendente.

Uno de ellos es la duplicacin de esfuerzos para acceder el software y mas an al


introducir los datos.
Otro es, que se introducen al sistema muchos datos carentes de valor.
Un tercero y tal vez el mas serio inconveniente del enfoque ascendente, es que los
objetivos globales de la organizacin no fueron considerados y en consecuencia no se
satisfacen.
Entonces
La diferencia entre estas dos tcnicas de programacin se fundamenta en el resultado
que presentan frente a un problema dado.
Imagine una empresa, la cual se compone de varios departamentos (contabilidad,
mercadeo, ), en cada uno de ellos se fueron presentando problemas a los cuales se le
dieron una solucin basados en un enfoque ascendente (Bottom Up): creando programas
que
satisfacan
slo
el
problema
que
se
presentaba.
Cuando la empresa decidi integrar un sistema global para suplir todas las necesidades
de todos los departamentos se dio cuenta que cada una de las soluciones presentadas no
era compatible la una con la otra, no representaba una globalidad, caracterstica
principal de los sistemas.
Como no hubo un previo anlisis, diseo de una solucin a nivel global en todos sus
departamentos, centralizacin de informacin, que son caractersticas propias de un
diseo Descendente (Top Down) y caractersticas fundamentales de los sistemas; la
empresa
no
pudo
satisfacer
su
necesidad
a
nivel
global.
La creacin de algoritmos es basado sobre la tcnica descendente, la cual brinda el
diseo ideal para la solucin de un problema.
Una de las dos herramientas ms comunes en el diseo de algoritmos es el
diagrama de flujo.
Diagrama de Flujo
Un diagrama de flujo es la representacin grfica de un algoritmo. Tambin se puede
decir que es la representacin detallada en forma grfica de como deben realizarse los
pasos en la computadora para producir resultados.
Esta representacin grfica se da cuando varios smbolos (que indican diferentes
procesos en la computadora), se relacionan entre si mediante lneas que indican el orden
en que se deben ejecutar los procesos. Los smbolos utilizados han sido normalizados
por el instituto norteamericano de normalizacin (ANSI):
Smbolo

Descripcin
Indica el inicio y el final de nuestro diagrama de flujo.
Indica la entrada y salida de datos.

Smbolo de proceso y nos indica la asignacin de un valor en la memoria


y/o la ejecucin de una operacin aritmtica.

Indica la salida de informacin por impresora.


Conector dentro de pgina. Representa la continuidad del diagrama dentro de la
misma pgina.

Conector fuera de pgina. Representa la continuidad del diagrama en otra pgina.

Indica la salida de informacin en la pantalla o monitor.

Smbolo de decisin. Indica la realizacin de una comparacin de


valores.

Smbolo del Mientras. Dada una expresin


al principio de la iteracin esta es evaluada; si la condicin es verdadera realizar el
ciclo, si es falsa la repeticin cesar.

Smbolo del Para. Esta estructura de control


repetitiva se usa generalmente cuando se conoce de antemano el nmero de iteraciones.

Smbolo Repita Hasta. Funciona igual que


la estructura Mientras, con la diferencia que al menos una vez har el grupo de
instrucciones y luego evaluar una condicin. Si la condicin evaluada es falsa continua
dentro del ciclo y si es verdadera termina la iteracin.

Lneas de flujo o direccin. Indican la secuencia en que se realizan las operaciones.


Recomendaciones para el diseo de Diagramas de Flujo
Se deben usar solamente lneas de flujos horizontales y/o verticales.
Se debe evitar el cruce de lneas utilizando los conectores.
Se deben usar conectores slo cuando sea necesario.
No deben quedar lneas de flujo sin conectar.
Se deben trazar los smbolos de manera que se puedan leer de arriba hacia abajo
y de izquierda a derecha.
Todo texto escrito dentro de un smbolo deber ser escrito claramente, evitando
el uso de muchas palabras.
Qu es el pseudocdigo y sus ventajas frente a los diagramas de flujos y las
definiciones de los diagramas estructurados y las estructuras algortmicas.
Pseudocdigo
Mezcla de lenguaje de programacin y espaol (o ingles o cualquier otro idioma) que se
emplea, dentro de la programacin estructurada, para realizar el diseo de un programa.
En esencial, el Pseudocdigo se puede definir como un lenguaje de especificaciones de
algoritmos.
En esencial, el Pseudocdigo se puede definir como un lenguaje de especificaciones de
algoritmos. Es la representacin narrativa de los pasos que debe seguir un algoritmo
para dar solucin a un problema determinado. El Pseudocdigo utiliza palabras que
indican el proceso a realizar.

Ventajas de utilizar un Pseudocdigo a un Diagrama de Flujo


Ocupa menos espacio en una hoja de papel
Permite representar en forma fcil operaciones repetitivas complejas
Es muy fcil pasar de Pseudocdigo a un programa en algn lenguaje de
programacin.
Si se siguen las reglas se puede observar claramente los niveles que tiene cada
operacin.
Diagramas estructurados (Nassi-Schneiderman)
El diagrama estructurado N-S tambin conocido como diagrama de chapin es como un
diagrama de flujo en el que se omiten las flechas de unin y las cajas son contiguas. Las
acciones sucesivas se pueden escribir en cajas sucesivas y como en los diagramas de
flujo, se pueden escribir diferentes acciones en una caja. Un algoritmo se represente en
la siguiente forma:

Estructuras Algortmicas
Las estructuras de operacin de programas son un grupo de formas de trabajo, que
permiten, mediante la manipulacin de variables, realizar ciertos procesos especficos
que nos lleven a la solucin de problemas. Estas estructuras se clasifican de acuerdo con
su complejidad en:

a) Descripcin Narrada
b) Pseudocdigo
c) Diagramas de Flujo
d) Diagramas N- S (Nassi-Schneiderman o de Chapin)
1 Descripcin Narrada
Este algoritmo es caracterizado porque sigue un proceso de ejecucin comn y
lgico, describiendo textualmente paso a paso cada una de las actividades a
realizar dentro de una actividad determinada.
Ejemplo 1 Algoritmo para asistir a clases:
1. Levantarse
2. Baarse
3. Vestirse
4. Desayunar
5. Cepillarse los dientes
6. Salir de casa
7. Tomar el autobs
8. Llegar a la Universidad
9. Buscar el aula
10. Ubicarse en un asiento
2. Descripcin en Pseudocdigo
Pseudo = falso. El pseudo cdigo no es realmente un cdigo sino una imitacin
y una versin abreviada de instrucciones reales para las computadoras. Es una
tcnica para diseo de programas que permite definir las estructuras de datos,
las operaciones que se aplicarn a los datos y la lgica que tendr el programa
de computadora para solucionar un determinado problema. Utiliza un
pseudolenguaje muy parecido a nuestro idioma, pero que respeta las
directrices y los elementos de los lenguajes de programacin. Se concibi para
superar las dos principales desventajas de los flujogramas: lento de crear y
difcil de modificar sin un nuevo dibujo.

Ejemplo
1
Disear un algoritmo que lea cuatro variables y calcule e imprima su producto,
suma y media aritmtica.
inicio
leer (a, b, c, d)
producto <-- (a * b * c * d)
suma <-- (a + b + c + d)
media <-- (a + b + c + d) / 4
escribir (producto, suma, media)
fin
3. Diagramas N-S
Son una herramienta que favorece la programacin estructurada y rene
caractersticas grficas propias de diagramas de flujo y lingsticas propias de
pseudocdigos. Constan de una serie de cajas contiguas que se leern
siempre de arriba-abajo y sus estructuras lgicas son las siguientes:
Estructura Secuencial

4. Diagramas de Flujo.
Son la representacin grfica de la solucin algortmica de un problema. Para
disearlos se utilizan determinados smbolos o figuras que representan una
accin dentro del procedimiento. Utilizan unos smbolos normalizados, con los
pasos del algoritmo escritos en el smbolo adecuado y los smbolos unidos con
flechas, denominadas lneas de flujo, que indican el orden en que los pasos
deben ser ejecutados.
Para su elaboracin se siguen ciertas reglas:
Se escribe de arriba hacia abajo y de izquierda a derecha
Siempre se usan flechas verticales u horizontales, jams curvas
Evitar cruce de flujos.

En cada paso expresar una accin concreta


Secuencia de flujo normal en una solucin de problema
Tiene un inicio
Una lectura o entrada de datos
El proceso de datos
Una salida de informacin
Un final
Simbologa para disear flujogramas.

VENTAJAS DE USAR FLUJOGRAMAS


Rpida comprensin de las relaciones
Anlisis efectivo de las diferentes secciones del programa
Pueden usarse como modelos de trabajo en el diseo de nuevos programas o
sistemas
Comunicacin con el usuario
Documentacin adecuada de los programas
Codificacin eficaz de los programas
Depuracin y pruebas ordenadas de programas
DESVENTAJAS DE LOS FLUJOGRAMAS
Diagramas complejos y detallados suelen ser laboriosos en su planteamiento y
diseo
Acciones a seguir tras la salida de un smbolo de decisin, pueden ser difciles
de seguir si existen diferentes caminos
No existen normas fijas para la elaboracin de los diagramas de flujo que
permitan incluir todos los detalles que el usuario desee introducir.
Representando el ejemplo como flujograma tenemos:

Un problema se puede dividir en acciones elementales o instrucciones, usando


un nmero limitado de estructuras de control (bsicas) y sus combinaciones
que pueden servir para resolver dicho problema.
Las Estructuras Bsicas pueden ser:
Secuenciales: cuando una instruccin del programa sigue a otra.
Seleccin o decisin: acciones en las que la ejecucin de alguna depender de
que se cumplan una o varias condiciones. Repeticin, Iteracin: cuando un
proceso se repite en tanto cierta condicin sea establecida para finalizar ese
proceso.
ESTRUCTURAS BSICAS.

Estructura
Secuencial.
Se caracteriza porque una accin se ejecuta detrs de otra. El flujo del
programa coincide con el orden fsico en el que se han ido poniendo las
instrucciones. Dentro de este tipo podemos encontrar operaciones de inicio/fin,
inicializacin de variables, operaciones de asignacin, clculo, sumatoria, etc.
Este tipo de estructura se basa en las 5 fases de que consta todo algoritmo o
programa:
Definicin de variables (Declaracin) Inicializacin de variables.
Lectura de datos
Clculo
Salida
Ejemplo 1.
Se desea encontrar la longitud y el rea de un crculo de radio 5.
Solucin.
El objetivo del ejercicio es encontrar la longitud y el rea de un crculo con un
radio conocido y de valor 5. Las salidas sern entonces la longitud y el rea.
(Fase 5 del algoritmo) Sabemos que la longitud de un crculo viene dada por la
frmula 2 * pi * radio y que el rea viene dada por pi * radio al cuadrado. (Fase
4 del algoritmo) Si definimos las variables como: (fase 1 del algoritmo)
L = Longitud A = rea R = radio pi = 3.1416 hagamos el algoritmo:
Inicio
Pi 3.1416 (definicin de un valor constante)
R 5 (radio constante ya que es conocido su valor)
A pi * R ^ (asignacin del valor del rea)
L 2 * pi * R (asignacin del valor de la longitud)
Escribir (A, L) (salida del algoritmo)
Fin
Representacin en Diagrama de Flujo para el ejemplo:

Representacin en Diagrama Nassi Schneiderman:


Los problemas secuenciales en diagramas N-S se representan solamente por
cajas con lneas horizontales

En este ejercicio no existen datos de entrada ya que para calcular el rea y la


longitud necesitamos nicamente el radio y el valor de Pi los cuales ya son
dados en el problema Modificar el problema anterior para que sea capaz de
calcular el rea y la longitud de un crculo de cualquier radio requerido.
Solucin.
El problema es el mismo con la variante de que ahora ya existe un dato de
entrada, puesto que el radio puede ser cualquiera y ser necesario que el
usuario sea quien lo introduzca de teclado. Usando la misma definicin de
variables tenemos:
Algoritmo:
Inicio
Pi 3.1416 (fase de inicializacin)
Leer (R) (fase de lectura)
Area pi * R ^ (fase de clculos)

L 2 * pi * R
Escribir ( A, L ) (fase de salida)
Fin
Note que la instruccin de asignacin fue cambiada por la instruccin leer. En
el flujograma debern cambiarse tambin los smbolos que los representan:

Ejemplo 3.
Leer el sueldo de tres empleados y aplicarles un aumento del 10, 12 y 15%
respectivamente. Desplegar el resultado.
Salidas: Sueldos finales
Entradas: Salarios de los empleados
Datos adicionales: aumentos del 10, 12 y 15%
Clculos:
Sueldo final = sueldo inicial + aumento
Aumento = sueldo inicial * porcentaje/100
Definicin de variables:
Sf1, Sf2, Sf3 = los sueldos finales
S1, S2, S3 = salarios de los empleados
Aum1, aum2, aum3 = aumentos
ALGORITMO
Inicio
Leer (S1,S2,S3)
Aum1 S1 * 0.10
Aum2 S2 * 0.12
Aum3 S3 * 0.15
Sf1 S1 + Aum1
Sf2 S2 + Aum2
Sf3 S3 + Aum3
Escribir (SF1,SF2,SF3)
Fin
FLUJOGRAMA

La especificacin formal de algoritmos tiene realmente utilidad cuando el


algoritmo requiere una descripcin ms complicada que una lista sencilla de
instrucciones. Este es el caso cuando existen un nmero de posibles
alternativas resultantes de la evaluacin de una determinada condicin.
Estas estructuras se identifican porque en la fase de solucin del problema
existe algn punto en el cual es necesario establecer una pregunta, para
decidir si ciertas acciones deben realizarse o no.
Las condiciones se especifican usando expresiones lgicas. La representacin
de una estructura selectiva se hace con palabras en pseudocdigo (if - then else o en espaol si - entonces - sino) y en flujograma con una figura
geomtrica en forma de rombo.
Las estructuras selectivas o alternativas se clasifican en:
a) Simples
b) Dobles
c) Compuestas
d) Mltiples
ESTRUCTURAS SELECTIVAS SIMPLES.

Se identifican porque estn compuestos nicamente de una condicin. La


estructura si - entonces evala la condicin y en tal caso:
Si la condicin es verdadera, entonces ejecuta la accin Si (o acciones si son
varias).
Si la condicin es falsa, entonces no se hace nada.
Espaol
Si <condicin>
Entonces
<accin Si>
fin_si

Ingls
If <condicin>
then
<accin Si>
endif

Ejemplo
1.
Construir un algoritmo tal, que dado como dato la calificacin de un alumno en
un examen, escriba "Aprobado" en caso que esa calificacin fuese mayor que
8.
Salidas: mensaje de aprobado si se cumple la condicin.
Entradas: calificacin
Datos adicionales: un alumno aprueba si la calificacin es mayor que 8
Variables:
Cal = calificacin
Algoritmo:
Inicio
Leer (cal)
Si cal > 8 entonces
Escribir ("aprobado")
Fin_si
Fin

CAPITULO DOS
Estructuras selectivas compuestas.
Son estructuras lgicas que permiten controlar la ejecucin de varias acciones y se
utilizan cuando se tienen dos opciones de accin, por la naturaleza de estas se debe
ejecutar una o la otra, pero no ambas a la vez, es decir, son mutuamente excluyentes.
Representacin pseudocodificada.
Espaol
Ingls
Si <condicin> entonces
If <condicin> then
<accin S1>
<accin S1>
sino
else
<accin S2>
<accin S2>
Fin_Si
End_if
Entonces, si una condicin C es verdadera, se ejecuta la accin S1 y si es falsa, se
ejecuta la accin S2.

Ejemplo 1
Dado como dato la calificacin de un alumno en un examen, escriba
"aprobado" si su calificacin es mayor que 8 y "Reprobado" en caso contrario.

Algoritmo:
Inicio
Leer (cal)
Si cal > 8 entonces
Escribir ("aprobado")
Sino
Escribir ("reprobado")
Fin_si
Fin

Ejemplo 2.
Dado como dato el sueldo de un trabajador, aplicar un aumento del 15% si su
sueldo es inferior a $1000 y 12% en caso contrario, luego imprimir el nuevo
sueldo del trabajador.

EXPRESIONES LGICAS
Sirven para plantear condiciones o comparaciones y dan como resultado un
valor booleano verdadero o falso, es decir, se cumple o no se cumple la
condicin. Se pueden clasificar en simples y complejas. Las simples son las

que usan operadores relacionales y las complejas las que usan operadores
lgicos.
Ejemplos:
Un ejemplo en el cual usamos el operador lgico AND sera:
Una escuela aplica dos exmenes a sus aspirantes, por lo que cada uno de
ellos obtiene dos calificaciones denotadas como C1 y C2. El aspirante que
obtenga calificaciones mayores que 80 en ambos exmenes es aceptado; en
caso contrario es rechazado.
En este ejemplo se dan las condiciones siguientes:
Si (C1 >= 80) y (C2 >= 80) entonces
Escribir ("aceptado")
Sino
Escribir ("rechazado")
Fin_si
Note que tambin usa operadores relacionales. Por lo general cuando hay
operadores lgicos, stos van acompaados de operadores relacionales. Un
ejemplo usando el operador lgico OR sera:
Una escuela aplica dos exmenes a sus aspirantes, por lo que cada uno de
ellos obtiene dos calificaciones denotadas como C1 y C2. El aspirante que
obtenga una calificacin mayor que 90 en cualquiera de los exmenes es
aceptado; en caso contrario es rechazado.
En este caso se dan las condiciones siguientes:
Si (C1 >=90) or (C2 >=90) entonces
Escribir ("aceptado")
Sino
Escribir ("rechazado")
Fin_si
La instruccin equivale a OR ya que nos dice que puede ser en cualquiera de
los exmenes no necesariamente en los dos. En el ejemplo 1 la palabra ambos
equivala a seleccionar la instruccin AND. Si la instruccin nos dijera que
obtenga una nota en cualquiera de los exmenes pero no en ambos, nos
estara indicando una instruccin XOR que es un tipo de OR pero exclusivo. Es
decir, no puede considerarse el caso en que tenga la misma nota en los dos
exmenes, solo en uno de los dos.
En la solucin de problemas encontramos numerosos casos en los que luego
de tomar una decisin y marcar el camino correspondiente a seguir, es
necesario tomar otra decisin. Dicho proceso puede repetirse numerosas
veces. En aquellos problemas en donde un bloque condicional incluye otro
bloque condicional se dice que un bloque est anidado dentro del otro.
Ejemplo 1.
Determinar la cantidad de dinero que recibir un trabajador por concepto de las
horas extras trabajadas en una empresa, sabiendo que cuando las horas de
trabajo exceden de 40, el resto se consideran horas extras y que stas se
pagan al doble de una hora normal cuando no exceden de 8; si las horas extras
exceden de 8 se pagan las primeras 8 al doble de lo que se paga por una hora
normal y el resto al triple.
Solucin.

Lo primero que hay que determinar es si el trabajador trabaj horas extras o no.
Encontrar las horas extras de la siguiente forma:
Horas extras = horas trabajadas - 40
En caso que s trabaj horas extras:
Si horas extras > 8 entonces a horas extras excedentes de 8 = horas extras -8
y pago por horas extras = pago por hora normal * 2 * 8 + pago por hora normal
* 3 * horas extras excedentes de 8
De otra forma (solo horas al doble) pago por horas extras = pago por hora
normal * 2 * horas extras.
Finalmente, pago total que recibir el trabajador ser:
Pago = pago * hora normal * 40 + pago por horas extras.
Si no trabaj horas extras tendremos:
Pago = pago por hora normal * horas trabajadas.
Datos de salida: Pago.
Datos de entrada: nmero de horas trabajadas y pago por hora normal.
Definicin de variables:
ht = horas trabajadas
het = horas extras que exceden de 8
ph = pago por hora normal
phe = pago por horas extras
he = horas extras
pt = pago que recibe el trabajador
Algoritmo:
Inicio
Leer (ht, ph)
Si ht >40 entonces
He=ht - 40
Si he > 8 entonces
Het=he - 8
Phe=ph * 2 * 8 + ph * 3 * het
Sino
Phe=ph * 2 * he
Fin_si
Pt=ph * 40 + phe
Sino
Pt=ph * ht
Fin_si
Escribir (pt)
Fin
Ejemplo 2.
Dados los datos A, B y C que representan nmeros enteros diferentes,
construir un algoritmo para escribir estos nmeros en forma descendente. Este
es un ejemplo de los algoritmos conocidos como de Lgica Pura, ya que
poseen muchas decisiones y muchas bifurcaciones.
Salida: A, B y C ordenados descendentemente.
Entradas: A, B y C.
La dinmica del problema es comparar dos nmeros a la vez para conocer cul
es el mayor.

Con frecuencia es necesario que existan ms de dos elecciones posibles. Este


problema se podra resolver por estructuras selectivas simples o dobles,
anidadas o en cascada, pero si el nmero de alternativas es grande puede
plantear serios problemas de escritura y de legibilidad.
Usando la estructura de decisin mltiple se evaluar una expresin que podr
tomar n valores distintos, 1, 2 , 3, ....,n y segn que elija uno de estos valores
en la condicin, se realizar una de las n acciones o lo que es igual, el flujo del
algoritmo seguir slo un determinado camino entre los n posibles.
Esta estructura se representa por un selector el cual si toma el valor 1 ejecutar
la accin 1, si toma el valor 2 ejecutar la accin 2, si toma el valor N realizar
la accin N.

Ejemplo 1:
Disear un algoritmo tal que dados como datos dos variables de tipo entero,
obtenga el resultado de la siguiente funcin:

Ejemplo
2.
Dados como datos la categora y el sueldo de un trabajador, calcule el aumento
correspondiente teniendo en cuenta la siguiente tabla. Imprimir la categora del
trabajador y el nuevo sueldo.

Definicin de variables:
Cate = categora
Sue = sueldo
Nsue = nuevo sueldo
ALGORITMO
Inicio
Leer (cate, sue)
En caso que cate sea
1: hacer nsue = sue * 1.15
2: hacer nsue = sue * 1.10
3: hacer nsue = sue * 1.08
4: hacer nsue = sue * 1.07
Fin_caso_que
Escribir (cate, nsue)
Fin
Son operaciones que se deben ejecutar un nmero repetido de veces. El
conjunto de instrucciones que se ejecuta repetidamente cierto nmero de
veces,
se
llama
Ciclo,
Bucle
o
Lazo.
Iteracin es cada una de las diferentes pasadas o ejecuciones de todas las
instrucciones contenidas en el bucle.
Fases de un Programa Cclico:
1. Entrada de datos e instrucciones previas
2. Lazo o bucle
3. Instrucciones finales o resto del proceso
4. Salida de resultado
Ejemplo de bucle infinito:

En el flujograma anterior, observa que la flecha que se regresa hacia arriba nos
est indicando que hay que volver a evaluar la expresin. En ese caso como el
bucle es infinito, no se tiene una condicin para terminar y se estar haciendo
siempre. En el siguiente ejemplo, ya se agreg una condicin, la cual nos
permitir finalizar la ejecucin del bucle en el caso en que la condicin se
cumpla.
Ejemplo de bucle finito:

Bucles Repetitivos:
A continuacin, te muestro tres diseos de estructuras cclicas: las
independientes son cuando los bucles se realiza uno primero hasta que se
cumple la condicin y solo en ese caso se entra al bucle B.

En los ciclos anidados, al entrar a una estructura de repeticin, dentro de ella


se encuentra otra. La ms interna se termina de realizar y se contina con la
externa hasta que la condicin se cumple.
En los bucles cruzados, los cuales no son convenientes de utilizar, se tiene que
iniciamos un bucle y no se ha terminado cuando empezamos otro, luego
utilizamos estructuras goto (saltos) para pasar al bucle externo y se quedan
entrelazados.
Esto puede ocasionar que el programa pierda el control de cul proceso se
est ejecutando y podamos obtener resultados errneos. Veamos grficamente
el diseo de estas tres formas cclicas:

Durante las siguientes lecciones estaremos estudiando tres estructuras bsicas


que son:
Estructura Desde/Para
Estructura Mientras
Estructura Repetir
En esta leccin estudiaremos la forma general de la estructura Desde/Para, su
uso y ejemplos.
Estructura Desde/Para:
Se usa frecuentemente cuando se conoce de antemano el nmero de veces
que se ejecutarn las acciones de un bucle. Esta es una de sus caractersticas.

Representacin pseudocodificada:
Espaol

Ingls

Desde var = valor inicial hasta valor final hacer


valor final do
Acciones
Fin_desde

For var=valor inicial to


acciones
end_for

A la estructura Desde/Para se le conoce como Repetitiva. Para utilizar esta


estructura en algoritmos, debemos hacer uso de contadores y algunas veces
de acumuladores, cuyos conceptos se describen a continuacin:
CONTADOR:
Un contador es una variable cuyo valor se incrementa o decrementa en una
cantidad constante cada vez que se produce un determinado suceso o accin.
Los contadores se utilizan con la finalidad de contar sucesos o acciones
internas de un bucle; deben realizar una operacin de inicializacin y
posteriormente las sucesivas de incremento o decremento del mismo. La
inicializacin consiste en asignarle al contador un valor. Se situar antes y
fuera del bucle.
Representacin:
<nombre del contador> = nombre del contador> + <valor constante>
Si en vez de incremento es decremento se coloca un menos en lugar del ms.
Ejemplo: i = i + 1
ACUMULADOR O TOTALIZADOR:
Es una variable que suma sobre s misma un conjunto de valores para de esta
manera tener la suma de todos ellos en una sola variable. La diferencia entre
un contador y un acumulador es que mientras el primero va aumentando de
uno en uno, el acumulador va aumentando en una cantidad variable.
Representacin: <Nombre del acumulador> = <nombre del acumulador> +
<valor variable>
Ejemplo:
Calcular la suma de los cuadrados de los primeros 100 enteros y escribir el
resultado. Se desea resolver el problema usando estructura Desde, Mientras y
luego Repetir.

Ejemplo 2.
Elaborar un flujograma para encontrar la suma de los K primeros nmeros enteros.

En este ejemplo hemos utilizado un bucle repetir, el cual estudiaremos en otra


leccin. Lo que queremos hacer notar por el momento, es cmo funcionan el
contador y el acumulador. Nota que N es el contador, el cual se inicializa en
este caso, con cero, antes de entrar al bucle. Dentro del bucle podrs notar que
N se incrementa en 1.

Tambin observa la variable suma, la cual es un acumulador que lleva la suma


de los nmeros generados. Tambin debe inicializarse con cero, ya que para
sumar valores debemos partir de cero, es decir, que al inicio no tenemos nada.
Dentro del bucle, suma se incrementa en un nmero N, pero la diferencia con
el contador N, es que a suma le sumamos N ms ella misma.
EJERCICIO:
Trata de elaborar un flujograma para encontrar el cuadrado de los primeros 25
nmeros naturales, usando la estructura Desde/Para.
Qu necesitas para resolver el problema contadores o acumuladores?
Modifica el flujograma del ejercicio anterior para que tambin te muestre la
suma
de
dichos
cuadrados.
Qu necesitas agregar ahora?
RESUMEN
En esta leccin aprendimos un poco del uso de contadores y acumuladores.
Tambin aprendimos a elaborar flujogramas o algoritmos usando la estructura
Desde. Hay un nmero importante de reglas que deben seguirse cuando se
utilizan instrucciones
Desde:
Los valores inicial y final de la variable de control se determinan antes de que
empiece la repeticin y no pueden cambiarse durante la ejecucin de la
instruccin Desde. Dentro del cuerpo del bucle Desde, los valores de las
variables que especifican los valores inicial y final pueden cambiar, pero esto
no va a afectar al nmero de repeticiones. La instruccin del cuerpo del bucle
de una instruccin Desde puede utilizar el valor de la variable de control, pero
no debe modificar este valor. Esta estructura se puede usar nicamente en
aquellos casos en que conocemos el nmero de veces que se va a realizar el
ciclo.
Esta estructura hace el incremento automticamente y se inicializa en la
instruccin desde.
Se llama Mientras a la estructura algortmica que se ejecuta mientras la
condicin evaluada resulte verdadera. Se evala la expresin booleana y, si es
cierta, se ejecuta la instruccin especificada, llamada el cuerpo del bucle.
Entonces se vuelve a evaluar la expresin booleana, y si todava es cierta se
ejecuta de nuevo el cuerpo. Este proceso de evaluacin de la expresin
booleana y ejecucin del cuerpo se repite mientras la expresin sea cierta.
Cuando se hace falsa, finaliza la repeticin. En la leccin anterior iniciamos con
las estructuras repetitivas. La estructura While y la estructura Repeat, se
conocen como Iterativas. Se usan cuando no se conoce con anticipacin el
nmero de veces que se ejecutar la accin.
La diferencia entre ambas es que la condicin se sita al principio (Mientras) o
al final (Repetir) de la secuencia de instrucciones. Entonces, en el primero, el
bucle contina mientras la condicin es verdadera (la cual se comprueba antes
de ejecutar la accin) y en el segundo, el bucle contina hasta que la condicin
se hace verdadera (la condicin se comprueba despus de ejecutar la accin,
es decir, se ejecutar al menos una vez).

La estructura Desde/Para suele utilizarse cuando se conoce con anterioridad el


nmero de veces que se ejecutar la accin y se le conoce como Estructura
Repetitiva en lugar de iterativa, para diferenciarla de las dos anteriores.
Las estructuras Mientras y Para/Desde suelen en ciertos casos, no realizar
ninguna iteracin en el bucle, mientras que Repetir ejecutar el bucle al menos
una vez.
Existe otro caso de estructura conocida como Salto (Goto), la cual no es muy
recomendable de usar ya que su uso dificulta la legibilidad de un programa y
tiende a confundir por el hecho de recurrir a numerosas etiquetas o nmeros de
lnea.

Observa en el flujograma, que se necesita una variable contadora (un ndice),


para llevar la cuenta de las veces que entramos al cuerpo del ciclo. Tambin es
importante notar que esta variable se inicializa antes de entrar al cuerpo del
ciclo y dentro del cuerpo se incrementa en una cantidad constante, por lo
general en uno.
Esta variable a la vez, nos sirve para compararla con el valor dado en la
condicin, cuando se cumple la condicin, se sale del ciclo.
Representacin pseudocodificada:
Espaol
Mientras <condicin>
Acciones
Fin_mientras

Ingls
While <condicin> do
Acciones
end_while

EJEMPLO:
Calcular la suma de los cuadrados de los primeros 100 nmeros enteros y
escribir el resultado.
Solucin.
Como recordars, resolvimos este ejercicio en la leccin anterior pero
utilizando la estructura Desde. Hoy lo haremos con la estructura Mientras. Que
tendremos de diferente?

CENTINELAS Y BANDERAS.
Cuando no se conoce a priori el nmero de iteraciones que se van a realizar, el
ciclo puede ser controlado por centinelas.
CENTINELAS.
En un ciclo While controlado por tarea, la condicin de While especifica que el
cuerpo del ciclo debe continuar ejecutndose mientras la tarea no haya sido
completada.
En un ciclo controlado por centinela el usuario puede suspender la introduccin
de datos cuando lo desee, introduciendo una seal adecuada llamada
centinela. Un ciclo Repetir controlado por centinela es cuando el usuario digita
una letra para salir como por ejemplo S o N para indicar si desea continuar o
no. El bucle debe repetirse hasta que la respuesta del usuario sea "n" o "N".
Cuando una decisin toma los valores de -1 o algn posible valor que no est
dentro del rango vlido en un momento determinado, se le denomina centinela
y su funcin primordial es detener el proceso de entrada de datos en una
corrida de programa.
Por ejemplo, si se tienen las calificaciones de un test (comprendida entre 0 y
100); un valor centinela en esta lista puede ser -999, ya que nunca ser una
calificacin vlida y cuando aparezca este valor se terminar de ejecutar el
bucle.

Si la lista de datos son nmeros positivos, un valor centinela puede ser un


nmero negativo. Los centinelas solamente pueden usarse con las estructuras
Mientras y Repetir, no con estructuras Desde/Para. PODRAS DECIR POR
QU?
Ejemplo:
Suponga que debemos obtener la suma de los gastos que hicimos en nuestro
ltimo viaje, pero no sabemos exactamente cuntos fueron.
Si definimos gasto1, gasto2, gasto3, ...., -1 donde gastoi: real es el gasto
nmero i y sumgas: real es el acumulador de gastos efectuados. -1 es el
centinela de fin de datos.
Algoritmo:
Inicio
Sumgas . 0
Leer (gasto)
Mientras gasto <> -1 hacer
Sumgas . sumgas + gasto
Leer (gasto)
Fin_mientras
Escribir (sumgas)
Fin
BANDERAS.
Conocidas tambin como interruptores, switch, flags o conmutadores, son
variables que pueden tomar solamente dos valores durante la ejecucin del
programa, los cuales pueden ser 0 1, o bien los valores booleanos True o
False. Se les suele llamar interruptores porque cuando toman los valores 0 1
estn simulando un interruptor abierto/cerrado o encendido/apagado.
Ejemplo 1:
Leer un nmero entero N y calcular el resultado de la siguiente serie: 1 - 1/2+
1/3 - 1/4
+.... +/- 1/N.
Algoritmo:
Inicio
Serie . 0
I.1
Leer (N)
Band . "T"
Mientras I <= N hacer
Si band = "T" entonces
Serie . serie + (1/I)
Band . "F"
Sino
Serie . serie - (1/I)
Band . "T"
Fin_si
II+1
Fin_mientras
Escribir (serie)
Fin

Ejemplo 2.
Obtener suma de los trminos de la serie: 2, 5, 7, 10, 12, 15, 17, .... 1800.
Sumser de tipo entero, es el acumulador de trminos de la serie
Band de tipo carcter, es variable auxiliar que indica si al siguiente trmino de
la serie hay que sumarle 3 2.
Algoritmo:
Inicio
I 2
Sumser 0
Band T"
Mientras (I <= 1800) hacer
Sumser sumser + I
Escribir (I)
Si band = "T" entonces
I I + 3
Band F"
Sino
I I + 2
Band T"
Fin_si
Fin_mientras
Escribir (sumser)
Fin
RESUMEN
Hemos estudiado en esta leccin que la estructura Mientras tiene una pequea
variante a la estructura Desde en cuanto a la representacin algortmica.
Recuerda que la estructura Desde, se inicializa automticamente en su sintaxis
y el incremento tambin es automtico. En cambio, la estructura Mientras usa
un contador que es inicializado antes de entrar al ciclo y dentro del ciclo es
incrementado. Tambin estudiamos que los centinelas son valores que le
damos a la condicin para forzar a que un ciclo pueda terminar. Tambin
decamos que los centinelas solamente los podemos usar en estructuras
Mientras y Repetir, ya que sirven para finalizar el ciclo cuando no sabemos las
veces que lo vamos a realizar, y la estructura Desde es usada cuando ya
conocemos a priori el nmero de veces que se va a realizar el ciclo.
Se llama Repetir a la estructura algortmica que se ejecuta un nmero definido de veces
hasta que la condicin se torna verdadera:

Representacin pseudocodificada :
Espaol
Repetir
Acciones
Hasta que <condicin>

Ingls
Repeat
Acciones
until <condicin>

EJEMPLO:
Calcular la suma de los cuadrados de los primeros 100 nmeros enteros y
escribir el resultado.
Solucin.
Nuevamente resolveremos el ejercicio de las dos lecciones anteriores, ahora
utilizando la estructura Repetir. Podrs decir cul ser ahora la diferencia?
Las reglas para construccin de esta estructura usando Repetir, nos dicen que
debemos declarar una variable contador que debe inicializarse antes del ciclo e
incrementarse dentro del ciclo. A diferencia de la estructura Mientras, la
condicin ahora estar colocada al final del bucle para que primero ejecutemos
la instruccin y luego preguntamos si la condicin se cumple. Esto quiere decir,
que en esta estructura el bucle se realizar por lo menos una vez. Tambin
podrs observar que la condicin est al revs, porque el bucle se repite hasta
que la condicin se cumpla. En el bucle Mientras, la condicin se evaluaba
mientras era cierta.

ACTIVIDAD PARA DESARROLLAR EN CLASE.


El ejercicio que resolvimos en la leccin anterior:
Obtener suma de los trminos de la serie: 2, 5, 7, 10, 12, 15, 17, .... 1800.
Resulvelo usando la estructura Repetir. Elabora una tabla de seguimiento para unos
cuantos datos. Escribe las caractersticas de cada una de las estructuras.

Escribe semejanzas y diferencias entre las estructuras:


Desde - Mientras y Repetir.
CAPITULO TRES
Matrices y cadenas de caracteres.
Introduccin
Todas las variables que se han considerado hasta ahora son de tipo simple. Una variable
de tipo simple consiste de una sola caja de memoria y slo puede contener un valor cada
vez. Una variable de tipo estructurado consiste en toda una coleccin de casillas de
memoria. Los tipos de datos estudiados: entero, real, alfabtico son considerados como
datos de tipo simple, puesto que una variable que se define con alguno de estos tipos
slo puede almacenar un valor a la vez, es decir, existe una relacin de uno a uno entre
la variable y el nmero de elementos (valores) que es capaz de almacenar. En cambio un
dato de tipo estructurado, como el arreglo, puede almacenar ms de un elemento (valor)
a la vez, con la condicin de que todos los elementos deben ser del mismo tipo, es decir,
que se puede tener un conjunto de datos enteros, reales, etc.
Datos estructurados:
Estructura de Datos es una coleccin de datos que se caracterizan por su organizacin y
las operaciones que se definen en ella. Los datos de tipo estndar pueden ser
organizados en diferentes estructuras de datos: estticas y dinmicas.
Estructura de Datos estticas:
Son aquellas en las que el espacio ocupado en memoria se define en tiempo de
compilacin y no puede ser modificado durante la ejecucin del programa.
Corresponden a este tipo los arrays y registros
Estructuras de Datos Dinmicas:
Son aquellas en las que el espacio ocupado en memoria puede ser modificado en tiempo
de ejecucin. Corresponden a este tipo las listas, rboles y grafos. Estas estructuras no
son soportadas en todos los lenguajes. La eleccin de la estructura de datos idnea
depender de la naturaleza del problema a resolver y, en menor medida, del lenguaje.
Las estructuras de datos tienen en comn que un identificador, nombre, puede
representar a mltiples datos individuales.
Arrays:
Un arreglo (array) es una coleccin de datos del mismo tipo, que se almacenan en
posiciones consecutivas de memoria y reciben un nombre comn. Para referirse a un
determinado elemento de un array se deber utilizar un ndice, que especifique su
posicin relativa en el array. Un arreglo es una coleccin finita, homognea y ordenada
de elementos. Finita: Todo arreglo tiene un lmite; es decir, debe determinarse cul ser
el nmero mximo de elementos que podrn formar parte del arreglo. Homognea:
Todos los elementos del arreglo deben ser del mismo tipo. Ordenada: Se puede
determinar cul es el primer elemento, el segundo, el tercero,.... y el n-simo elemento.
Los arreglos se clasifican de acuerdo con el nmero de dimensiones que tienen. As se
tienen los:
- Unidimensionales (vectores)
- Bidimensionales (tablas o matrices)
- Multidimensionales (tres o ms dimensiones)

PROBLEMA.
Suponga que se desea desarrollar un programa para:
1. Leer una lista de calificaciones de un examen
2.Encontrar su media
3.Escribir una lista de las calificaciones mayores que la media
4.Ordenar la lista de las calificaciones en orden ascendente.
Supongamos tambin que hay 100 calificaciones. Debemos utilizar 100
variables diferentes nota1, nota2, ...., nota100, de ese modo son 100
direcciones diferentes de memoria para almacenar las calificaciones del
examen. Se imagina declarar las 100 variables, cuntas instrucciones
involucra?
Var Nota1,nota2,nota3,.........nota100: entero
(En la declaracin real de un programa no pueden usarse puntos suspensivos,

por lo tanto sern 100 veces) . En la fase de lectura de datos, sern tambin
100 veces las instrucciones para ir leyendo cada valor. Leer (nota1,
nota2,nota3,........., nota100)
Para calcular la media:
Media (nota1+nota2+.......+nota100)/100
Para la lista de calificaciones mayores que la media, deber tambin irse
comparando una por una:
Si nota1 > media entonces
escribir (nota1)
Fin_si
Si nota2 > media entonces
escribir (nota2)
Fin_si
Si nota100 > media entonces
escribir (nota100)
Fin_si
Y despus de ms de 450 lneas de cdigo..... Falta ordenar la lista de
calificaciones en orden ascendente!
Despus que aprendas a usar arreglos vers cmo se ahorra instrucciones
porque es fcil recorrer toda la lista de notas con unas pocas instrucciones. En
el caso anterior, cuando el acceso a la informacin es secuencial, slo se
puede acceder a un elemento buscando desde el principio de la lista, y esto es
algo lento. Lo que se necesita es una estructura de acceso directo que permita
almacenar y recuperar los datos directamente especificando su posicin en la
estructura, de esa manera se requerir el mismo tiempo para acceder al
elemento de la posicin 100 que el de la posicin 5.
Tambin preferiremos que esta estructura se almacene en memoria principal
para que su almacenaje y recuperacin sea ms rpida. Es por ello que existen
los arreglos, que estn organizados en una secuencia de elementos, todos del
mismo tipo y se puede acceder a cada elemento directamente especificando su
posicin en esta secuencia.
Arreglos Unidimensionales:
Estn formados por un conjunto de elementos de un mismo tipo de datos que
se almacenan bajo un mismo nombre, y se diferencian por la posicin que tiene
cada elemento dentro del arreglo de datos. Al declarar un arreglo, se debe
inicializar sus elementos antes de utilizarlos. Para declarar un arreglo tiene que
indicar su tipo, un nombre nico y la cantidad de elementos que va a contener.
Por ejemplo, las siguientes instrucciones declaran tres arreglos distintos:
Float costo_partes[50];

Para acceder a valores especficos del arreglo, use un valor de ndice que
apunte al elemento deseado. Por ejemplo, para acceder al primer elemento del
arreglo calificaciones debe utilizar el valor de ndice 0 (calificaciones[0]). Los
programas en C++ siempre indexan el primer elemento de un arreglo con 0 y el
ltimo con un valor menor en una unidad al tamao del arreglo.
Inicializacin y asignacin de valores
Como se deca anteriormente, antes de utilizar un arreglo es necesario
inicializarlo:
Calificaciones[0];
Para inicializar todos los elementos de una vez, se colocan dentro de una
estructura for que va del primer elemento al ltimo que contiene el arreglo. Para
asignar un valor a un elemento del arreglo se hace por ejemplo:
Calificaciones[0] =100;
Cuando se usan arreglos, una operacin comn es usar una variable ndice
para acceder a los elementos de un arreglo. Suponiendo que la variable ndice
I contiene el valor 3, la siguiente instruccin asigna el valor 400 a valores[3]:
valores[I] 400;
Partes de un arreglo:
Los componentes. Hacen referencia a los elementos que forman el arreglo, es
decir, a los valores que se almacenan en cada una de las casillas del mismo.
Los ndices. Permiten hacer referencia a los componentes del arreglo en forma

individual, especifican cuntos elementos tendr el arreglo y adems, de qu


modo podrn accesarse esos componentes.

Definicin de Arreglos:
ident_arreglo = arreglo[liminf .. Limsup] de tipo Operaciones con Vectores:
Las operaciones que se pueden realizar con vectores durante el proceso de resolucin de
un problema son:
Lectura/ escritura
Asignacin
Actualizacin (insercin, eliminacin, modificacin)
Recorrido (acceso secuencial)
Ordenacin
Bsqueda
Ejemplos:
Sea arre un arreglo de 70 elementos enteros con ndices enteros. Su representacin nos

queda:
Ejemplos:
Sea bool un arreglo de 26 elementos booleanos con ndices de tipo carcter.
Su representacin nos queda:
Bool = arreglo["a".."z"] de booleanos

Nmero

total

de

elementos:
NTE= (ord("z")-ord("a")) + 1 = 122-97+1 = 26 elementos
Lectura
El proceso de lectura de un arreglo consiste en leer y asignar un valor a cada
uno de sus elementos. Normalmente se realizan con estructuras repetitivas,
aunque pueden usarse estructuras selectivas. Usamos los ndices para recorrer
los elementos del arreglo:

desde i = 1 hasta 70 hacer


leer ( arre[i])
fin_desde
Escritura:
Es similar al caso de lectura, slo que en vez de leer el componente del
arreglo, lo escribimos.
leer (N)
desde i = 1 hasta N hacer
escribir (arre[i])
fin_desde
Asignacin:
No es posible asignar directamente un valor a todo el arreglo; sino que se debe
asignar el valor deseado en cada componente. Con una estructura repetitiva se
puede asignar un valor a todos los elementos del vector.
Por ejemplo:
arre[1] =120 (asignacin de un valor constante nico a una casilla del
vector)
arre[3] = arre[1] / 4 (asignar una operacin)
Se puede asignar un valor constante a todos los elementos del vector:desde i =
1 hasta 5 hacer
arre[i] = 3
fin_desde
O bien
arre = 3 (con arre del tipo arreglo)
Inicializacin
Para inicializar con cero todos los elementos del arreglo:
desde i = 1 hasta 70 hacer
arre[i] = 0
fin_desde

Acceso Secuencial. (Recorrido)


El acceso a los elementos de un vector puede ser para leer en l o para escribir
(visualizar su contenido). Recorrido del vector es la accin de efectuar una
accin general sobre todos los elementos de ese vector.
Actualizacin.
Incluye aadir (insertar), borrar o modificar algunos de los ya existentes. Se
debe tener en cuenta si el arreglo est o no ordenado. Aadir datos a un vector
consiste en agregar un nuevo elemento al final del vector, siempre que haya
espacio
en
memoria.
Investigue cmo insertar o eliminar elementos en un arreglo:
a) Ordenado

b) No ordenado
Arreglo Bidimensional:
Es un conjunto de datos homogneo, finito y ordenado, donde se hace
referencia a cada elemento por medio de dos ndices. El primero se utiliza para
los renglones (filas) y el segundo para las columnas. Tambin puede definirse
como un arreglo de arreglos. Internamente en memoria se reservan MxN
posiciones consecutivas para almacenar todos los elementos del arreglo.
Declaracin de una matrz:

Pseudocdigo para el recorrido por filas:


Const
M=valor1
N= valor2
Tipo
Array[1..M,1..N] de real:matriz
Var
Matriz:A
Desde i = 1 hasta M hacer
Desde j = 1 hasta N hacer
Escribir (A[i,j])
Fin_desde
Fin_desde
El recorrido por columnas se hace de manera similar, invirtiendo el sentido de
los ndices.
Desde j = 1 hasta N hacer
Desde i = 1 hasta M hacer
Escribir (A[i,j])
Fin_desde
Fin_desde

El nmero de elementos que contendr una fila viene dado por U1-L1+1 (Valor
mayor - valor menor +1). Igualmente, el nmero de elementos para la columna
es U2-L2+1. As, el nmero total de elementos de la tabla es (U2-L2+1)*(U1L1+1)
Ejemplos.
1) Rellenar una matrz identidad de 4 por 4 elementos.
Una matriz identidad es aquella en la que la diagonal principal est llena de
unos y el resto de los elementos son cero. Para llenar la matriz identidad se
debe verificar que cuando los ndices i y j sean iguales, la posicin vale 1, en
caso contrario se asigna cero al elemento i,j.

Algoritmo
Inicio
Desde i = 1 hasta 4 hacer
Desde j = 1 hasta 4 hacer
Si i=j entonces
Matriz[i,j] =1
Sino
Matriz[i,j] =0
Fin_si
Fin_desde
Fin_desde
Fin
Cadenas de Caracteres.
Una cadena es un conjunto de caracteres incluido el espacio en blanco, que se
almacena en un rea contigua de la memoria central. La longitud de una
cadena es el nmero de caracteres que contiene. Una cadena vaca es la que
no tiene ningn carcter. Una constante de tipo cadena es un conjunto de
caracteres vlidos encerrados entre comillas. Una variable de cadena es
aquella cuyo contenido es una cadena de caracteres. El ltimo carcter de la
cadena marca el fin de la cadena.
Las variables de cadena se dividen en:
Estticas. Su longitud se define antes de ejecutar el programa y no
puede cambiarse a lo largo de este.
Semi estticas. Su longitud puede variar durante la ejecucin del
programa, pero sin sobrepasar un lmite mximo declarado al principio.
Dinmicas. Su longitud puede variar sin limitacin dentro del programa.
Operaciones bsicas con cadenas:
Asignacin.
Nombre "Luis Humberto"
Entrada/ Salida
Leer(nombre, estado_civil)
Escribir(nombre, apellido)
Escribir(nombre, apellido)

Clculo de la longitud de una cadena. Es dar el nmero de caracteres


que hay en una cadena que est entre comillas, incluyendo los espacios en
blanco.
Comparacin de cadenas: es comparar caracteres o cadenas de caracteres
para ver si son iguales o no.
Segn el cdigo ASCII hay un orden de caracteres, as "A" es menor que "C".
El valor de A es 65 y el de C es 67 Concatenacin: es unir varias cadenas de
caracteres en una sola, conservando el orden de los caracteres de cada una de
ellas.
Cuando se combinan dos cadenas con el operador de concatenacin, la
segunda cadena se agregar directamente al final de la primera. En cdigos
postales y nmeros telefnicos se suele usar caracteres ya que no se necesita
operar los nmeros y as podemos usar el guin.
Strtelefono = "1-515-555-1212"
Extraccin de subcadenas. Subcadena es una porcin de una cadena. Para
extraer una subcadena se deben tener:
La cadena fuente de la cual se va a extraer la subcadena.
Pos que es un nmero que indica la posicin inicial de la subcadena Long que
indica el tamao que tendr la subcadena.
Bsqueda de informacin. Consiste en buscar una subcadena o cadena dentro
de otra mayor. Nos devuelve el nmero de la posicin donde inicia la cadena
buscada, cero si no la encuentra. Dicho nmero se puede asignar a una
variable entera (numrica).
Encontrar el punto medio
Truncar cadenas
Convertir cadenas a nmeros o viceversa
Insertar una cadena dentro de otra
Borrar cadenas
Sustituir una cadena por otra.
Invertir el orden de una cadena.
Ejemplo.
El siguiente algoritmo sustituye las e por *.
Inicio
Escribir ("escriba una palabra")
Leer (str)
Desde i=1 hasta len(str) hacer
Si str[i] = `e entonces
Str[i] = `*
Fin_si
Fin_desde
Escribir (str)
Fin
Habamos visto la programacin estructurada que permite la escritura de
programas fciles de leer y modificar. En esta programacin, el flujo lgico se
gobierna por las estructuras de control bsicas vista hasta hoy: secuenciales,
repetitivas y de seleccin. La programacin modular permite la descomposicin
de un problema en un conjunto de subproblemas independientes entre s, ms
sencillos de resolver y que pueden ser tratados separadamente unos de otros.
Gracias a la modularidad se pueden probar los subprogramas o mdulos de

manera independiente, depurndose sus errores antes de su inclusin en el


programa principal y almacenarse para su posterior utilizacin cuantas veces
se precise.
Mdulo
Uno de los elementos principales de programacin utilizados en la
representacin de cada mdulo es la subrutina. Una subrutina es un conjunto
de instrucciones de cmputo que realizan una tarea. Un programa principal
llama a estos mdulos a medida que se necesitan. Un mdulo es un segmento,
rutina, subrutina, subalgoritmo o procedimiento, que puede definirse dentro de
un algoritmo con el fin de ejecutar una tarea especfica y puede ser llamada o
invocada desde el algoritmo principal cuando sea necesario. Los mdulos son
independientes en el sentido de que ningn mdulo puede tener acceso directo
a cualquier otro mdulo, con excepcin del mdulo al que llama y sus propios
submdulos. Sin embargo, los resultados producidos por un mdulo pueden
ser utilizados por cualquier otro mdulo cuando se transfiera a ellos el control.
Los mdulos tienen una entrada y una salida. Se pueden tomar decisiones
dentro de un mdulo que tenga repercusin en todo el flujo, pero el salto debe
ser nicamente hacia el programa principal. Al descomponer un programa en
mdulos independientes ms simples se conoce tambin como el mtodo de
"Divide y vencers".
Cundo es til la modularizacin?
Este enfoque de segmentacin o modularizacin es til en dos casos:
1. Cuando existe un grupo de instrucciones o una tarea especfica que deba
ejecutarse en ms de una ocasin.
2. Cuando un problema es complejo o extenso, la solucin se divide o
segmenta en mdulos que ejecutan partes o tareas especficas.
Ventajas de la Programacin Modular:
Como los mdulos son independientes, el desarrollo de un programa se puede
efectuar con mayor facilidad, ya que cada mdulo se puede crear aisladamente
y varios programadores podrn trabajar simultneamente en la confeccin de
un algoritmo, repartindose las distintas partes del mismo. Se podr modificar
un mdulo sin afectar a los dems Las tareas, subalgoritmos, slo se escribirn
una vez, aunque se necesiten en distintas ocasiones a lo largo del algoritmo. El
uso de mdulos facilita la proyeccin y la comprensin de la lgica subyacente
para el programador y el usuario. Aumenta la facilidad de depuracin y
bsqueda de errores en un programa ya que stos se pueden aislar fcilmente.
El mantenimiento y la modificacin de la programacin se facilitan. Los
mdulos reciben diferentes nombres:
- Funciones en C, C++
- Subrutinas en Basic
- Procedimientos y funciones en Pascal
- Subrutinas en Fortran y
- Secciones en Cobol.
Desarrollar programas de forma modular:
Significa que pueden identificarse las principales tareas a realizar por el
programa y que se pueden disear y probar procedimientos individuales para
estas tareas. Por ejemplo: Qu transacciones se le hacen a una cuenta de
ahorros?
Transacciones:

- depsito (cheque y efectivo)


- intereses
- retiro
- estado de cuenta
- cambio de libreta
Tiempo de vida de los datos
Segn el lugar donde son declaradas puede haber dos tipos de variables.
Globales: las variables permanecen activas durante todo el programa. Se
crean al iniciarse ste y se destruyen de la memoria al finalizar. Pueden ser
utilizadas en cualquier procedimiento o funcin.
Locales: las variables son creadas cuando el programa llega a la funcin o
procedimiento en la que estn definidas. Al finalizar la funcin o el
procedimiento, desaparecen de la memoria. Si dos variables, una global y una
local, tienen el mismo nombre, la local prevalecer sobre la global dentro del
mdulo en que ha sido declarada. Dos variables locales pueden tener el mismo
nombre siempre que estn declaradas en funciones o procedimientos
diferentes.
Parmetros Formales
Es un tipo especial de variables en un procedimiento a los que se pueden
pasar valores desde el exterior del procedimiento. Se declaran en la cabecera
del procedimiento.
Ejemplos:
1. Uso de variables globales en procedimientos o funciones.
Algoritmo global var x:entero
Inicio
x=0
cambiar
escribir (x)
fin
Mdulo cambiar
inicio
x =1
fin
La variable X est definida como global, por lo tanto la salida ser 1.
2. Uso de variables locales.
Algoritmo local
var x:entero
Inicio
x =0
cambiar
escribir (x)
fin
Mdulo cambiar
var x:entero
inicio
x=1
fin
Como x es local, no tiene efecto en el programa, por lo tanto la salida ser 0.
3. Variables locales y globales.

Programa en Borland C++


/* Variables globales y locales. */
#include stdio.h
int num1=1;
main() /* Escribe dos cifras */
{
int num2=10;
printf("%d\n",num1);
printf("%d\n",num2);
}
Parmetros por Valor
Son los parmetros que pueden recibir valores pero que no pueden
devolverlos. Es una variable global que se conecta con una variable local
mediante el envo de su valor, despus de lo cual ya no hay relacin. Lo que le
sucede a la variable local no afectar a la global. Cuando un parmetro actual
se pasa por valor, el subprograma hace una copia del valor de ste en una
posicin de memoria idntica en tamao pero distinta en ubicacin a la del
parmetro actual y la asigna al parmetro formal correspondiente. Como el
subprograma trabaja a partir de sus parmetros formales, si durante la
ejecucin se modifica el valor de un parmetro formal correspondiente a un
paso por valor, el contenido de la posicin de memoria del parmetro actual no
se ver alterado.
Ejemplo:
Algoritmo parmetro valor
var x: entero
Inicio
x=0
cambiar(x)
escribir(X)
Fin
Mdulo cambiar (y:entero)
inicio
y =1
fin
Salida 0
Parmetros por Variable
Son los que pueden recibir y devolver valores. Son variables globales que se
conectan con una local a travs de su contenido; al establecerse dicha
conexin las variables se convierten en sinnimos, lo que afecte a la variable
local le suceder a la
variable global.
Ejemplo:
Algoritmo parmetro variable
var x:entero
Inicio
x =0
cambiar (x)
escribir (x)
Fin

Mdulo cambiar (var y:entero)


inicio
y =1
fin
Salida: x =1
PROCEDIMIENTOS
Son subprogramas, es decir, mdulos que forman parte de un programa y
realizan una tarea especfica. Un procedimiento puede tener sus propias
variables que se declaran en la seccin var del propio procedimiento. Estas se
llaman variables locales. La casilla de memoria para estas variables se crea
cada vez que el procedimiento es llamado y se borran al salir del mismo. As
las variables locales para un procedimiento slo se pueden usar en el cuerpo
del procedimiento y no en el cuerpo principal del programa.
FUNCIONES
La funcin es una estructura autnoma similar a los mdulos. La diferencia
radica en que la funcin se usa para devolver un solo valor de un tipo de dato
simple a su punto de referencia. La funcin se relaciona especificando su
nombre en una expresin, como si fuera una variable ordinaria de tipo simple.
Las funciones se dividen en estndares y definidas por el usuario.
- Estndar: Son funciones proporcionadas por cualquier lenguaje de
programacin de alto nivel, y se dividen en aritmticas y alfabticas.
- Definidas por el usuario: son funciones que puede definirlas el programador
con el propsito de ejecutar alguna funcin especfica, y que por lo general se
usan cuando se trata de hacer algn clculo que ser requerido en varias
ocasiones en la parte principal del algoritmo.
Ejemplos:
Funcin factorial (n:entero):entero
var i,factorial:entero
inicio
si n <=1 entonces
factorial <-- 1
sino
factorial <-- 1
desde i = 1 hasta n hacer
factorial <-- factorial * 1
fin_desde
fin_si
fin
Evaluar la funcin f = x! / (y!(x-y)!)
Algoritmo hallarf
var x,y:entero
f:real
inicio
leer (x,y)
f <-- factorial (x)/(factorial (y)* factorial (x-y))
escribir ("El valor de f es:", f)
fin
Semejanzas entre Procedimientos y Funciones.
- La definicin de ambos aparece en la seccin de subprogramas de la parte de

declaraciones de un programa y en ambos casos consiste en una cabecera,


una parte de declaraciones una parte de instrucciones.
- Ambos son unidades de programa independientes. Los parmetros,
constantes y variables declarados en una funcin o procedimiento son locales a
la funcin o al procedimiento, solamente son accesibles dentro del
subprograma.
- Cuando se llama a una funcin o a un procedimiento, el nmero de los
parmetros reales debe ser el mismo que el nmero de los parmetros
formales y los tipos de los parmetros reales deben coincidir con los tipos de
los correspondientes parmetros formales, con una excepcin: se puede
asociar un parmetro real de tipo entero con un parmetro formal por valor de
tipo real.
Diferencias entre Procedimientos y Funciones.
- Mientras que a un procedimiento se le llama mediante una instruccin de
llamada a procedimiento, a una funcin se la llama usando su nombre en una
expresin.
- Puesto que se debe asociar un valor al nmero de una funcin, tambin se le
debe asociar un tipo. Por tanto, la cabecera de una funcin debe incluir un
identificador de tipo que especifique el tipo del resultado. Sin embargo, no se
asocia ningn valor con el nombre de un procedimiento y, por tanto, tampoco
ningn tipo.
- Las funciones normalmente devuelven un nico valor a la unidad de programa
que la llama. Los procedimientos suelen devolver ms de un valor, o pueden no
devolver ninguno si solamente realizan alguna tarea, como una operacin de
salida.
- En los procedimientos, los valores se devuelven a travs de parmetros por
variable, pero el valor de una funcin se devuelve mediante la asignacin al
nombre de la funcin de dicho valor en la parte de instrucciones de la definicin
de la funcin.
ORDENAMIENTO.
Uno de los procedimientos ms comunes y tiles en el procesamiento de datos,
es la clasificacin u ordenacin de los mismos. Se considera ordenar al
proceso de reorganizar un conjunto dado de objetos en una secuencia
determinada. Cuando se analiza un mtodo de ordenacin, hay que determinar
cuntas comparaciones e intercambios se realizan para el caso ms favorable,
para el caso medio y para el caso ms desfavorable.
La colocacin en orden de una lista de valores se llama Ordenacin. Por
ejemplo, se podra disponer una lista de valores numricos en orden
ascendente o descendente, o bien una lista de nombres en orden alfabtico. La
localizacin de un elemento de una lista se llama bsqueda.
Tal operacin se puede hacer de manera ms eficiente despus de que la lista
ha
sido
ordenada.
Existen varios mtodos para ordenamiento, clasificados en tres formas:
Intercambio
Seleccin
Insercin.
En cada familia se distinguen dos versiones: un mtodo simple y directo, fcil
de comprender pero de escasa eficiencia respecto al tiempo de ejecucin, y un
mtodo rpido, ms sofisticado en su ejecucin por la complejidad de las

operaciones a realizar, pero mucho ms eficiente en cuanto a tiempo de


ejecucin. En general, para arreglos con pocos elementos, los mtodos
directos son ms eficientes (menor tiempo de ejecucin) mientras que para
grandes cantidades de datos se deben emplear los llamados mtodos rpidos.
Intercambio
El mtodo de intercambio se basa en comparar los elementos del arreglo e
intercambiarlos si su posicin actual o inicial es contraria inversa a la deseada.
Pertenece a este mtodo el de la burbuja clasificado como intercambio directo.
Aunque no es muy eficiente para ordenar listas grandes, es fcil de entender y
muy adecuado para ordenar una pequea lista de unos 100 elementos o
menos.
Una pasada por la ordenacin de burbujeo consiste en un recorrido completo a
travs del arreglo, en el que se comparan los contenidos de las casillas
adyacentes, y se cambian si no estn en orden. La ordenacin por burbujeo
completa consiste en una serie de pasadas ("burbujeo") que termina con una
en la que ya no se hacen cambios porque todo est en orden.
Ejemplo:
Supngase que estn almacenados cuatro nmeros en un arreglo con casillas
de memoria de x[1] a x[4]. Se desea disponer esos nmeros en orden
creciente. La primera pasada de la ordenacin por burbujeo hara lo siguiente:
Comparar el contenido de x[1] con el de x[2]; si x[1] contiene el mayor de los
nmeros, se intercambian sus contenidos.
Comparar el contenido de x[2] con el de x[3]; e intercambiarlos si fuera
necesario.
Comparar el contenido de x[3] con el de x[4]; e intercambiarlos si fuera
necesario.
Al final de la primera pasada, el mayor de los nmeros estar en x[4].

Quicksort.
Si bien el mtodo de la burbuja era considerado como el peor mtodo de

ordenacin simple o menos eficiente, el mtodo Quicksort basa su estrategia


en la idea intuitiva de que es ms fcil ordenar una gran estructura de datos
subdividindolas en otras ms pequeas introduciendo un orden relativo entre
ellas. En otras palabras, si dividimos el array a ordenar en dos subarrays de
forma que los elementos del subarray inferior sean ms pequeos que los del
subarray superior, y aplicamos el mtodo reiteradamente, al final tendremos el
array inicial totalmente ordenado. Existen adems otros mtodos conocidos, el
de ordenacin por montculo y el de shell.
Seleccin.
Los mtodos de ordenacin por seleccin se basan en dos principios bsicos:
Seleccionar el elemento ms pequeo (o ms grande) del arreglo.
Colocarlo en la posicin ms baja (o ms alta) del arreglo.
A diferencia del mtodo de la burbuja, en este mtodo el elemento ms
pequeo (o ms grande) es el que se coloca en la posicin final que le
corresponde.
Insercin.
El fundamento de este mtodo consiste en insertar los elementos no ordenados
del arreglo en subarreglos del mismo que ya estn ordenados. Dependiendo
del mtodo elegido para encontrar la posicin de insercin tendremos distintas
versiones del mtodo de insercin.
BSQUEDA.
La bsqueda es una operacin que tiene por objeto la localizacin de un
elemento dentro de la estructura de datos. A menudo un programador estar
trabajando con grandes cantidades de datos almacenados en arreglos y
pudiera resultar necesario determinar si un arreglo contiene un valor que
coincide con algn valor clave o buscado.
Siendo el array de una dimensin o lista una estructura de acceso directo y a
su vez de acceso secuencial, encontramos dos tcnicas que utilizan estos dos
mtodos de acceso, para encontrar elementos dentro de un array: bsqueda
lineal y bsqueda binaria.
Bsqueda Secuencial:
La bsqueda secuencial es la tcnica ms simple para buscar un elemento en
un arreglo. Consiste en recorrer el arreglo elemento a elemento e ir
comparando con el valor buscado (clave). Se empieza con la primera casilla del
arreglo y se observa una casilla tras otra hasta que se encuentra el elemento
buscado o se han visto todas las casillas. El resultado de la bsqueda es un
solo valor, y ser la posicin del elemento buscado o cero. Dado que el arreglo
no est en ningn orden en particular, existe la misma probabilidad de que el
valor se encuentra ya sea en el primer elemento, como en el ltimo. Por lo
tanto, en promedio, el programa tendr que comparar el valor buscado con la
mitad de los elementos del arreglo.
El mtodo de bsqueda lineal funciona bien con arreglos pequeos o para
arreglos no ordenados. Si el arreglo est ordenado, se puede utilizar la tcnica
de alta velocidad de bsqueda binaria, donde se reduce sucesivamente la
operacin eliminando repetidas veces la mitad de la lista restante.
Bsqueda Binaria.
La bsqueda binaria es el mtodo ms eficiente para encontrar elementos en
un arreglo ordenado. El proceso comienza comparando el elemento central del

arreglo con el valor buscado. Si ambos coinciden finaliza la bsqueda. Si no


ocurre as, el elemento buscado ser mayor o menor en sentido estricto que el
central del arreglo. Si el elemento buscado es mayor se procede a hacer
bsqueda binaria en el subarray superior, si el elemento buscado es menor que
el contenido de la casilla central, se debe cambiar el segmento a considerar al
segmento que est a la izquierda de tal sitio central.

También podría gustarte