lunes, 20 de abril de 2009

ARREGLOS

ARREGLOS

Supongamos que nos enfrentamos a un problema como este: Una empresa que cuenta con 150 empleados, desea establecer una estadística sobre los salarios de sus empleados, y quiere saber cual es el salario promedio, y también cuantos de sus empleados gana entre $1250.00 y $2500.00.

Si tomamos la decisión de tratar este tipo de problemas con datos simples, pronto nos percataríamos del enorme desperdicio de tiempo, almacenamiento y velocidad. Es por eso que para situaciones de este tipo la mejor solución son los datos estructurados.

Un arreglo puede definirse como un grupo o una colección finita, homogénea y ordenada de elementos. Los arreglos pueden ser de los siguientes tipos:

· De una dimensión.
· De dos dimensiones.
· De tres o más dimensiones.


Arreglos Unidimensionales

Un arreglo unidimensional es un tipo de datos estructurado que está formado de una colección finita y ordenada de datos del mismo tipo. Es la estructura natural para modelar listas de elementos iguales.

El tipo de acceso a los arreglos unidimensionales es el acceso directo, es decir, podemos acceder a cualquier elemento del arreglo sin tener que consultar a elementos anteriores o posteriores, esto mediante el uso de un índice para cada elemento del arreglo que nos da su posición relativa.

Para implementar arreglos unidimensionales se debe reservar espacio en memoria, y se debe proporcionar la dirección base del arreglo, la cota superior y la inferior.

REPRESENTACION EN MEMORIA

Los arreglos se representan en memoria de la forma siguiente:

x : array[1..5] of integer



Para establecer el rango del arreglo (número total de elementos) que componen el arreglo se utiliza la siguiente formula:

RANGO = Ls - (Li+1)

donde:

ls = Límite superior del arreglo
li = Límite inferior del arreglo


Para calcular la dirección de memoria de un elemento dentro de un arreglo se usa la siguiente formula:

A[i] = base(A) + [(i-li) * w]

donde:

A = Identificador único del arreglo
i = Indice del elemento
li = Límite inferior
w = Número de bytes tipo componente

Si el arreglo en el cual estamos trabajando tiene un índice numerativo utilizaremos las siguientes fórmulas:

RANGO = ord (ls) - (ord (li)+1)
A[i] = base (A) + [ord (i) - ord (li) * w]


Arreglos Bidimensionales

Este tipo de arreglos al igual que los anteriores es un tipo de dato estructurado, finito ordenado y homogéneo. El acceso a ellos también es en forma directa por medio de un par de índices.

Los arreglos bidimensionales se usan para representar datos que pueden verse como una tabla con filas y columnas. La primera dimensión del arreglo representa las columnas, cada elemento contiene un valor y cada dimensión representa una relación.

La representación en memoria se realiza de dos formas: almacenamiento por columnas o por renglones.

Para determinar el número total de elementos en un arreglo bidimensional usaremos las siguientes fórmulas:

RANGO DE RENGLONES (R1) = Ls1 - (Li1+1)
RANGO DE COLUMNAS (R2) = Ls2 - (Li2+1)
No. TOTAL DE COMPONENTES = R1 * R2
REPRESENTACION EN MEMORIA POR COLUMNAS


x : array [1..5,1..7] of integer

Para calcular la dirección de memoria de un elemento se usan la siguiente formula:
A[i,j] = base (A) + [((j - li2) R1 + (i + li1))*w]

REPRESENTACION EN MEMORIA POR RENGLONES


x : array [1..5,1..7] of integer

Para calcular la dirección de memoria de un elemento se usan la siguiente formula:

A[i,j] = base (A) + [((i - li1) R2 + (j + li2))*w]

donde:

i = Índice del renglón a calcular
j = Índice de la columna a calcular
li1 = Límite inferior de renglones
li2 = Límite inferior de columnas
w = Número de bytes tipo componente

Arreglos Multidimensionales

Este también es un tipo de dato estructurado, que está compuesto por n dimensiones. Para hacer referencia a cada componente del arreglo es necesario utilizar n índice, uno para cada dimensión

Para determinar el número de elementos en este tipo de arreglos se usan las siguientes fórmulas:

RANGO (Ri) = lsi - (lii + 1)
No. TOTAL DE ELEMENTOS = R1 * R2* R3 * ...* Rn

donde:

i = 1 ... n
n = No. total de dimensiones

Para determinar la dirección de memoria se usa la siguiente formula:

LOC A[i1,i2,i3,...,in] = base(A) + [(i1-li1)*R3*R4*Rn + (i2-li2)*R3*R2*... (in - lin)*Rn]*w


Operaciones Con Arreglos

Las operaciones en arreglos pueden clasificarse de la siguiente forma:

a) Lectura
b) Escritura
c) Asignación
d) Actualización
e) Ordenación
f) Búsqueda

a) LECTURA

Este proceso consiste en leer un dato de un arreglo y asignar un valor a cada uno de sus componentes.

La lectura se realiza de la siguiente manera:

para i desde 1 hasta N haz
x<--arreglo[i]

b) ESCRITURA

Consiste en asignarle un valor a cada elemento del arreglo.
La escritura se realiza de la siguiente manera:

para i desde 1 hasta N haz
arreglo[i]<--x

c) ASIGNACION

No es posible asignar directamente un valor a todo el arreglo, por lo que se realiza de la manera siguiente:

para i desde 1 hasta N haz
arreglo[i]<--algún_valor

d) ACTUALIZACION

Dentro de esta operación se encuentran las operaciones de eliminar, insertar y modificar datos. Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo está o no ordenado.

Para arreglos ordenados los algoritmos de inserción, borrado y modificación son los siguientes:

1.- Insertar.

Si i<>

2.- Borrar.

Si N>=1 entonces
inicio
i<--1
encontrado<--falso
mientras i<=n y encontrado=falso
inicio
si arreglo[i]=valor_a_borrar entonces
inicio
encontrado<--verdadero
N<--N-1
para k desde i hasta N haz
arreglo[k]<--arreglo[k-1]
fin
en caso contrario
i<--i+1
fin
fin
Si encontrado=falso entonces
mensaje (valor no encontrado)

3.- Modificar.

Si N>=1 entonces
inicio
i<--1
encontrado<--falso
mientras i<=N y encontrado=false haz
inicio
Si arreglo[i]=valor entonces
arreglo[i]<--valor_nuevo
encontrado<--verdadero
En caso contrario
i<--i+1
fin
fin

Matriz Poco Densa Regular

Una matriz poco densa es aquella que está formada por elementos que en su mayoría son ceros. Este tipo de matrices son matrices cuadradas que se dividen en los siguientes tipos:

Matriz triangular superior
Matriz triangular inferior
Matriz tridiagonal

MATRIZ TRIANGULAR SUPERIOR

En este tipo de matriz los elementos iguales a cero se encuentran debajo de la diagonal principal. Ejemplo:


Para evitar el desperdicio de memoria que se ocasionaría al almacenar una matriz en donde la mayoría de los elementos son ceros, es conveniente traspasar a un arreglo unidimensional todos los elementos diferentes de cero.
El arreglo con los elementos distintos de cero de la matriz anterior es el siguiente:


Una vez que hayamos vaciado la matriz, es indispensable conocer el lugar dentro del arreglo unidimensional en el cual quedaron situados los elementos, y esto se logra con la siguiente formula:

LOC(A[i,j])=base(A) + (n*(i-1)) - ((i-2)*(i-1))/2 + (j-1)

donde:

A=Matriz triangular superior
n=No. total de elementos
j= renglones
i=columnas

MATRIZ TRIANGULAR INFERIOR

En este tipo de matrices los elementos iguales a cero se encuentran por encima de la diagonal principal. Ejemplo:


Una vez que vaciamos la matriz en un arreglo unidimensional, la formula para obtener las posiciones de los elementos es la siguiente:


LOC(A[i,j])=base(A) + ((i-1)*i)/2 + (j-1)

MATRIZ TRIDIAGONAL

En ésta, los elementos diferentes de cero se encuentran en la diagonal principal ó en las diagonales por debajo ó encima de ésta. Ejemplo:


Y el arreglo con los elementos diferentes de cero correspondiente a esta matríz es el siguiente:


La localización de los elementos distintos de cero en el arreglo unidimensional se realiza aplicando la siguiente formula:

LOC(A[i,j])=base(A) + 2*i + (j-3)


Ordenaciones en Arreglos

La importancia de mantener nuestros arreglos ordenados radica en que es mucho más rápido tener acceso a un dato en un arreglo ordenado que en uno desordenado.

Existen muchos algoritmos para la ordenación de elementos en arreglos, enseguida veremos algunos de ellos.

a) Selección Directa

Este método consiste en seleccionar el elemento más pequeño de nuestra lista para colocarlo al inicio y así excluirlo de la lista.
Para ahorrar espacio, siempre que vayamos a colocar un elemento en su posición correcta lo intercambiaremos por aquel que la esté ocupando en ese momento.

El algoritmo de selección directa es el siguiente:

i <- 1
mientras i<= N haz
min <-i
j <- i + 1
mientras j <= N haz
si arreglo[j] < [min] entonces
min <-j
j <- j + 1
intercambia(arreglo[min],arreglo[i])
i <- i +1

b) Ordenación por Burbuja

Es el método de ordenación más utilizado por su fácil comprensión y programación, pero es importante señalar que es el más ineficiente de todos los métodos.

Este método consiste en llevar los elementos menores a la izquierda del arreglo ó los mayores a la derecha del mismo. La idea básica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre sí hasta que todos se encuentren ordenados.

i <- 1
mientras i < N haz
j <- N
mientras j > i haz
si arreglo[j] < arreglo[j-1] entonces
intercambia(arreglo[j],arreglo[j-1])
j < j - 1
i <- i +1

c) Ordenación por Mezcla

Este algoritmo consiste en partir el arreglo por la mitad, ordenar la mitad izquierda, ordenar la mitad derecha y mezclar las dos mitades ordenadas en un array ordenado. Este último paso consiste en ir comparando pares sucesivos de elementos (uno de cada mitad) y poniendo el valor más pequeño en el siguiente hueco.
procedimiento mezclar(dat,izqp,izqu,derp,deru)
inicio
izqa <- izqp
dera <- derp
ind <- izqp
mientras (izqa <= izqu) y (dera <= deru) haz
si arreglo[izqa] < dat[dera] entonces
temporal[ind] <- arreglo[izqa]
izqa <- izqa + 1
en caso contrario
temporal[ind] <- arreglo[dera]
dera <- dera + 1
ind <- ind +1
mientras izqa <= izqu haz
temporal[ind] <- arreglo[izqa]
izqa <- izqa + 1
ind <- ind +1
mientras dera <= deru haz
temporal[ind] <=dat[dera]
dera <- dera + 1
ind <- ind + 1
para ind <- izqp hasta deru haz
arreglo[ind] <- temporal[ind]
fin

Búsquedas en Arreglos

Una búsqueda es el proceso mediante el cual podemos localizar un elemento con un valor específico dentro de un conjunto de datos. Terminamos con éxito la búsqueda cuando el elemento es encontrado.
A continuación veremos algunos de los algoritmos de búsqueda que existen.

a) Búsqueda Secuencial

A este método también se le conoce como búsqueda lineal y consiste en empezar al inicio del conjunto de elementos, e ir a través de ellos hasta encontrar el elemento indicado ó hasta llegar al final de arreglo.
Este es el método de búsqueda más lento, pero si nuestro arreglo se encuentra completamente desordenado es el único que nos podrá ayudar a encontrar el dato que buscamos.


ind <- 1
encontrado <- falso
mientras no encontrado y ind < N haz
si arreglo[ind] = valor_buscado entonces
encontrado <- verdadero
en caso contrario
ind <- ind +1

b) Búsqueda Binaria

Las condiciones que debe cumplir el arreglo para poder usar búsqueda binaria son que el arreglo este ordenado y que se conozca el numero de elementos.
Este método consiste en lo siguiente: comparar el elemento buscado con el elemento situado en la mitad del arreglo, si tenemos suerte y los dos valores coinciden, en ese momento la búsqueda termina. Pero como existe un alto porcentaje de que esto no ocurra, repetiremos los pasos anteriores en la mitad inferior del arreglo si el elemento que buscamos resulto menor que el de la mitad del arreglo, o en la mitad superior si el elemento buscado fue mayor.
La búsqueda termina cuando encontramos el elemento o cuando el tamaño del arreglo a examinar sea cero.

encontrado <- falso
primero <- 1
ultimo <- N
mientras primero <= ultimo y no encontrado haz
mitad <- (primero + ultimo)/2
si arreglo[mitad] = valor_buscado entonces
encntrado <- verdadero
en caso contrario
si arreglo[mitad] > valor_buscado entonces
ultimo <- mitad - 1
en caso contrario
primero <- mitad + 1

c) Búsqueda por Hash

La idea principal de este método consiste en aplicar una función que traduce el valor del elemento buscado en un rango de direcciones relativas. Una desventaja importante de este método es que puede ocasionar colisiones.

funcion hash (valor_buscado)

inicio
hash <- valor_buscado mod numero_primo
fin

inicio <- hash (valor)

il <- inicio
encontrado <- falso
repite
si arreglo[il] = valor entonces
encontrado <- verdadero
en caso contrario
il <- (il +1) mod N
hasta encontrado o il = inicio



















EJERCICIOS PROPUESTOS

Escribir un programa que lea un número, que indica cuántos números enteros serán guardados en un arreglo, crear el arreglo para almacenar el tamaño exacto de los datos y entonces leer los enteros que serán guardados en el arreglo.

Ingresar 30 valores cualesquiera y determinar cuantos de estos valores son iguales al promedio de los 30 valores ingresados anteriormente.

Diseñar un algoritmo que ingrese 15 números cualesquiera.

Utilizando arreglos, ingresar 15 números y calcular cual es el número menor.

Almacenar en un arreglo los 5 primeros números primos positivos.

Ingresar 2 números y mostrar cual es el mayor de ellos.

Ingresar 5 números negativos y calcular su media aritmética.

Ingresar 5 números en un arreglo.

Ingresar 5 números positivos. No utilizar la estructura repetir desde.

Escribir un algoritmo que determine si una cadena de caracteres es un palíndromo (una palabra que al revés dice lo mismo ejm: RADAR)
Ingresar una cadena y mostrar cuantos vocales existen en la cadena.
Escribir un algoritmo que permita ingresar una frase y luego la descomponga en sus palabras imprimiéndolas en líneas diferentes ejm : Estructura De Datos Estructura De Datos

MANEJO DE MODULOS

MANEJO DE MODULOS

Concepto y características

Módulo: Es aquél que está constituido por una o varias instrucciones físicamente contiguas y lógicamente encadenadas, las cuales se pueden referenciar mediante un nombre y pueden ser llamadas desde diferentes puntos de un programa.

Un módulo puede ser:

Ø Un programa
Ø Una función
Ø Una subrutina (o procedimiento)

Características de un Módulo

Los módulos deben tener la máxima cohesión y el mínimo acoplamiento. Es decir, deben tener la máxima independencia entre ellos.

La salida del módulo debe ser función de la entrada, pero no de ningún estado interno. En la creación de los módulos deben cumplirse tres aspectos básicos: descripción, rendimiento y diseño.

En la descripción se definen las funciones y objetivos del programa. Para obtener el máximo rendimiento se ha de comprobar que el programa realice el proceso aprovechando al máximo todos los recursos de los que dispone. En cuanto al diseño, se debe comprobar la estructura que sigue el módulo, así como la estructura de los datos y la forma de comunicaciones entre los diversos y diferentes módulos.

Conforme se extiende el tamaño de los algoritmos, se hace más difícil su revisión, actualización y/o corrección.

Una política común para solventar este problema consiste en la modularización. Esto significa que el algoritmo se fragmenta en partes llamadas módulos. En realidad, es un método de diseño que tiende a dividir el problema, de forma lógica, en partes perfectamente diferenciadas que pueden ser analizadas, programadas y puestas a punto independiente.

Realmente la programación modular es un intento para diseñar programas, de forma tal que cualquier función lógica pueda ser intercambiada sin afectar a otras partes del programa.

Algunas ventajas de utilizar módulos son:

Ø Un programa modular es fácil de mantener y modificar.
Ø Un programa modular es más fácil de escribir y depurar (ejecutar, probar y poner a punto).
Ø Un programa modular es más fácil de controlar. El desglose de un problema en módulos permite encomendar los módulos más complejos a los programadores más experimentados y los más sencillos a los programadores jóvenes.
Ø Posibilita el uso repetitivo de las rutinas en el mismo o en diferentes programas

Desventajas del uso de módulos:

Ø No se dispone de algoritmos formales de modularidad, por lo que a veces los programadores no tienen claras las ideas de los módulos.
Ø La programación modular requiere más memoria y tiempo de ejecución.

Objetivos de la programación modular:

Ø Disminuir la complejidad.
Ø Aumentar la claridad y fiabilidad.
Ø Disminuir el coste.
Ø Aumentar el control del proyecto.
Ø Facilitar la ampliación del programa mediante nuevos módulos.
Ø Facilitar las modificaciones y correcciones al quedar automáticamente localizadas en un módulo.

CLASIFICACIÓN DE LOS MÓDULOS

Pueden ser de dos tipos:

Ø Funciones
Ø Procedimientos

Estas funciones y procedimientos se escriben solamente una vez, pero pueden ser referenciados (invocadas) en diferentes puntos de un programa, tantas veces como se requiera de modo que se puede evitar la duplicación innecesaria del código.

Funciones

Las funciones son bloques de instrucciones que tienen por objeto el alcanzar un resultado que sustituirá a la función en el punto de invocación (las funciones devuelven un resultado).

Cada función se evoca utilizando su nombre en una expresión con los argumentos actuales o reales encerrados entre paréntesis.

Para hacer una referencia a una función se invoca mediante un nombre y en caso de existir, una lista de parámetros actuales necesarios (argumentos). Los argumentos deben coincidir en cantidad, tipo y orden con los de la función que fue definida. La función devuelve un valor único.

Las funciones a que se hace referencia, se conocen como funciones de usuario puesto que son definidas por él mismo y permiten su uso en forma idéntica a las funciones estándares. Para coordinar e iniciar el procesamiento, se utiliza un módulo principal que es colocado al final del algoritmo.

Declaración de funciones

función nombre_función (par1, par2,par3,...) : tipo_del_resultado

Inicio
acción1
acción2
:
nombre_función Resultado_Obtenido
Fin


Donde:

par1,par2 ...Lista de parámetros formales o argumentos.
nombre_función Nombre asociado de la función, que será un nombre de identificador válido.
acción1, acción2,.. Instrucciones que constituyen la definición de las función, y que debe contener una acción sola de asignación que asigne un valor al nombre de la función.

Ejemplo:

Obtener el sexto carácter de un nombre y si dicho carácter no existe, se asumirá un asterisco como tal.

Función SEXTO(n:string):carácter
Inicio
si longitud(n) >= 6 entonces
SEXTO Subcadena(n,6,1)
en caso contrario
SEXTO ‘*’
Fin

Invocación a las funciones

Una función puede ser llamada sólo mediante referencia de la forma siguiente:

nombre_función (lista de parámetros actuales)

Donde:

nombre_función Función que llama.
Lista de param. actuales Constantes, variables, expresiones, valores de
funciones, nombres de funciones o procedimientos.

Una llamada a la función implica los siguientes pasos:

Ø A cada parámetro formal se le asigna el valor real de su correspondiente parámetro actual (esta correspondencia se verá más tarde y se denomina llamada por valor).
Ø Se ejecuta el cuerpo de acciones de la función.
Ø Se devuelve el valor de la función y se retorna al punto de llamada.

Ejercicio:

Calcular la potencia de un número.

funcion POTENCIA(x,n :entero): entero
Inicio
y 1
Desde i 1 hasta abs(n) hacer
y y*x
fin Desde
si n < 0 entonces
y 1/y
Fin si
POTENCIA y
Fin

OPERACIÓN DE MÓDULOS Y SUS PARÁMETROS

PASO DE PARAMETROS

Existen diferentes métodos para el paso de parámetros a subprogramas, un mismo programa puede producir diferentes resultados bajo diferentes sistemas de paso de parámetros.

Los parámetros se clasifican de la siguiente manera:

1. Entradas: Las entradas proporcionan valores desde el programa que llama y que se utilizan dentro de un procedimiento. En los subprogramas función las entradas son los argumentos en el sentido tradicional.

2. Salidas: Las salidas producen los resultados del subprograma; de nuevo si se utiliza el caso una función, mientras que con procedimientos pueden calcularse cero, una o varias salidas.

3. Entradas/Salidas: Un solo parámetro se utiliza para mandar argumentos a un programa y para devolver resultados.




Los métodos más empleados para realizar el paso de parámetros son:

Ø Paso por valor (parámetro valor).
Ø Paso por referencia o dirección (parámetro variable).

PASO POR VALOR

Se utiliza en muchos lenguajes de programación (pascal, basic, modula-2, algol, etc), debido a su analogía con los argumentos de una función, donde los valores se proporcionan en el orden de cálculo de resultados. Los parámetros se tratan como variables locales y los valores iniciales se proporcionan copiando los valores de los correspondientes argumentos.

Los parámetros formales (locales a la función), reciben como valores iniciales los valores de los parámetros actuales y con ello se ejecutan las acciones descritas en el subprograma.

La llamada por valor no devuelve información al programa que llama.

PASO POR REFERENCIA

Se utiliza cuando se requiere que ciertos parámetros sirvan como parámetros de salida, es decir, devuelvan los resultados a la unidad o programas que llama. La unidad que llama pasa a la unidad llamada la dirección del parámetro actual (que está en el ámbito de la unidad llamante). Una referencia al correspondiente parámetro formal se tratra como una referncia a la posición de memoria, cuya dirección se ha pasado. Entonces una variable pasada como parámetro real es compartida, es decir, se puede modificar directamente por el subprograma. Si el parámetro actual es una expresión, el subprograma recibe la dirección de la posición temporal que contiene el valor de la expresión.

CRITERIOS DE MODULARIZACIÓN

Criterios de la programación modular

Con independencia de las técnicas, los requisitos que debe cumplir la programación modular son:

1. Establecimiento de un organigrama modular: Se realiza mediante bloques, en el que cada bloque corresponde a un módulo y muestra gráficamente la comunicación entre el módulo principal y los secundarios

2. Descripción del módulo principal: Debe ser claro y conciso, reflejando el punto fundamental del programa.

3. Descripción de los módulos básicos o secundarios: Los módulos básicos deben resolver partes bien definidas del problema. Solo pueden tener un punto de entrada y un punto de salida. Si un módulo es complejo de resolver, conviene se subdivida en submódulos. Ningún módulo puede ser llamado desde distintos puntos del módulo principal.

4. Normas de la programación: Dependerán del análisis de cada problema y de las normas generales o particulares que haya recibido el programador.


Problemas Propuestos

1) Diseñe un algoritmo que llene una matriz de 10 * 10 y determine:
A) El numero mayor almacenado en la matriz
B) El numero mayor almacenado en cada renglón
C) La columna que tuvo la máxima suma
D) El renglón que tuvo la máxima suma
Diseña una función para cada inciso.

2) Diseñe un algoritmo que lea un numero y mediante una función regrese el valor de 1 si el numero es positivo y -1 si es negativo).



MANEJOS DE CADENAS DE CARACTERES


MANEJOS DE CADENAS DE CARACTERES

Definición

Una cadena (string) de caracteres es un conjunto de caracteres (incluido el blanco), que se almacenan en un área contigua de la memoria. Pueden ser entradas o salidas a/desde una computadora.

La longitud de una cadena es el número de caracteres que contiene. La cadena que no contiene ningún carácter se le denomina cadena vacía o nula. y su longitud es cero; no se debe confundir con una cadena compuesta de solo espacios en blanco.

La representación de las cadenas suele ser con comillas simples o dobles, las comillas actúan como separadores, algunos ejemplos:

’12 de Octubre de 1492’
‘Hola, como estás?’
‘ ’
‘ANTIOQUIA ES GRANDE’

La cadena puede contener entre sus separadores, cualquier carácter válido del código aceptado por el lenguaje y la computadora; el blanco es uno de los caracteres más utilizado.

Una Subcadena es una cadena de caracteres que ha sido extraída de otra de mayor longitud.

’12 de’ es una subcadena de ’12 de Octubre de 1492’
‘como estás’ es una subcadena de ‘Hola, como estás?’
‘XI´ es una subcadena de ‘ANTIOQUIA ES GRANDE’

Ø Datos Tipo Carácter

Anteriormente se analizaron los diferentes tipos de datos y entre ellos existían el dato tipo carácter (char) que se incorpora en diferentes lenguajes de programación, bien con este nombre, o bien como datos tipo cadena.

Constantes

Una constante tipo carácter es un conjunto de caracteres válidos encerrados entre comillas, para evitar confundirlos con nombres de variables, operadores, enteros, etc

Variables

Una variable de cadena o tipo carácter es una variable cuyo valor es una cadena de caracteres. Las variables de tipo carácter se deben declarar en el algoritmo y según el lenguaje tendrán una notación u otra.

var NOMBRE, DIRECCION, PAIS: carácter

Ø Cadenas de Longitud Fija

Se consideran vectores de la longitud declarada, con blancos a izquierda o derecha si la cadena no tiene la longitud declarada. Así el ejemplo siguiente:

E
S
T
A

C
A
S
A

E
S

U
N
A

R
U
I
N
A
///
///
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

Se declaró con una dimensión de 24 caracteres y los dos último se rellenan con blancos.

Ø Cadenas de Longitud Variable con un Máximo

Se considera un puntero, con dos campos que contienen la longitud máxima y la longitud actual.


20
17

E
S
T
A

C
A
S
A

E
S

G
U
A
Y
///
///
///

Donde:

20 = Longitud máxima
17 = Longitud actual


Ø Instrucciones Básicas con Cadenas

Las instrucciones básicas: asignar y entrada/salida (leer/escribir) se realizan de un modo similar al tratamiento de dichas instrucciones con datos numéricos.

Asignación

Si la variable NOMBRE ha sido declarada como carácter

var NOMBRE : carácter

La instrucción de asignación debe contener en el lado derecho de la asignación una constante tipo carácter (una cadena) o bien otra variable tipo carácter. Así:

NOMBRE ß ‘Juan González’

Significa que la variable NOMBRE toma por valor la cadena ‘Juan González’


Ø Entrada/Salida

La entrada/salida desde una computadora se puede realizar en modo carácter, para ello se asignará una cadena de caracteres a una variable tipo cadena.

var A,B,C,D: carácter

las instrucciones:
leer A,B
escribir C,D

Asignarán a A y B las cadenas introducidas por el teclado y visualizará o imprimirán en el dispositivo de salida las cadenas que representan las variables C y D.

FUNCIÓN DE CADENAS DE CARACTERES

El tratamiento de cadenas es un tema importante, debido esencialmente a la gran cantidad de información que se almacena en ellas. Según el tipo de lenguaje de programación elegido se tendrá mayor o menor facilidad para la realización de operaciones.

Las operaciones con cadenas más usuales son:

1. Cálculo de la longitud
2. Comparación
3. Concatenación
4. Extracción de subcadenas
5. Búsqueda de información

1.- CALCULO DE LA LONGITUD DE UNA CADENA

La longitud de una cadena, como ya se ha comentado, es el número de caracteres de la cadena. Así:

'Hola' Tiene 4 caracteres

La operación de determinación de la longitud de una cadena se representará por la función Longitud, cuyo formato es:
Longitud (cadena)
La función longitud tiene como argumento una cadena, pero su resultado es un valor numérico entero.

Ejemplo:
longitud('Como estás?') Proporciona 11.
longitud(' ') Cadena de un blanco, proporciona 1.
longitud(' Hola') Cadena 'Hola' relleanda de un blanco a la izquierda para tener longitud de 5.

2.- COMPARACION

Es una operación muy importante sobre todo en la clasificación de datos tipo carácter, que se utiliza con mucha frecuencia en aplicaciones de proceso de datos (clasificaciones de listas, tratamiento de textos, etc).

Los criterios de comparación se basan en el orden numérico del código o juego de caracteres que admite la computadora o el propio lenguaje de programación. En nuestro lenguaje algorítmico utilizaremos el código ASCII como código numérico de referencia.
En la comparación de cadenas se pueden considerar dos operaciones más elementales: igualdad y desigualdad.

Ejemplos:

'LUIS' < 'LUISITO' verdadera
'ANA' < 'MARTA' verdadera
'BARTOLO' >= 'BARTOLOME' falsa

3.- CONCATENACION

La concatenación es la operación de reunir varias cadenas de caracteres en una sola, pero conservando el orden de los caracteres en cada una de ellas. El símbolo que representa la concatenación varía de unos lenguajes a otros.

Los más utilizados son: + // & o

Las cadenas para concatenarse pueden ser constantes o variables.

Ejemplos:

'Mayo ' + 'de 1999' = 'Mayo de 1999'
x 'Lenguaje'
y'Ensamblador'
zx+' '+y z = 'Lenguaje Ensamblador'

4.- SUBCADENAS

Esta operación permite la extracción de una parte específica de una cadena: subcadena.

Subcadena (cadena, inicio, longitud)

Cadena: Es la cadena de la que debe extraerse una subcadena.
Inicio: Es un número o expresión numérica entera que corresponde a la posición inicial de la subcadena.
Longitud: Es la longitud de la subcadena.

Ejemplos:

subcadena ('abcdefgh',3,6) Equivale a 'cdef'
subcadena ('Tecnológico',1,3) Equivale a 'Tec'
subcadena ('Antioquia',5,2) Equivale a 'oq'

5.- BUSQUEDA

Esta operación localiza si una determinada cadena forma parte de otra cadena más grande o buscar la posición en que aparece un determinado carácter o secuencia de caracteres en un texto.

El resultado de la función es un valor entero

Posición (cadena, subcadena)

subcadena: Es el texto que se trata de localizar.

Ejemplo:
nombre'Marielena'
Posición (nombre,'elena') Produce 5.

La función Posición, al tomar también un valor numérico entero se puede utilizar en expresiones aritméticas o en instrucciones de asignación a variables numéricas.

Otras funciones de cadenas

a) Insertar Cadenas

Si se desea insertar una cadena C dentro de un texto o cadena más grande, se debe indicar la posición. El formato es:

Insertar (t, p, s)

t Texto o cadena donde se va a insertar.
p Posición a partir de la cual se va a insertar.
s Subcadena que se va a insertar.

Ejemplo:
Insertar ('Tecnológico',4,'XXX') = 'TecXXXnológico'
Insertar ('Juan O',5,'de la')= 'Juan de la O'

b) Borrar

Elimina una subcadena que comienza en la posición p y tiene una longitud l.

Borrar (t, p ,l)

t Texto o cadena de donde se va a eliminar una subcadena.
p Posición a partir del cual se va a insertar.
l Longitud de la subcadena a eliminar.

Ejemplo:
Borrar ('Tecnológico',4,2) = 'Teclógico'

c) Conversión Cadenas/Números

Existen funciones o procedimientos en los lenguajes de programación (val y str) que permiten convertir un número en una cadena y viceversa. En nuestros algoritmos los denotaremos por valor y cadena.

Valor (cadena) = Convierte la cadena en un número; siempre que la cadena fuese de dígitos numéricos.

Cadena (valor) = Convierte un valor numérico en una cadena.

Ejemplos:

Valor ('12345') = 12345
Cadena(12345)= '12345'

Funciones internas

Las operaciones que se requieren en los programas exigen en numerosas ocasiones, además de las operaciones aritméticas básicas, ya tratadas, un número determinado de operaciones especiales que se denominan funciones internas, incorporadas o estándar. Por ejemplo la función ln se puede utilizar para determinar logaritmo de un n se puede utilizar para determinar logaritmo de un número y la función sqrt calcula la raíz cuadrada de un número positivo. Existen otras funciones que se utilizan para determinar las funciones trigonométricas.

La siguiente tabla muestra las funciones internas más usuales, siendo x el argumento de la función.

Función
Descripción
Tipo_Argumento
Resultado
abs(x)
Valor absoluto de x
Entero o real
igual que argumento
arctan(x)
Arcotangente de x
Entero o real
real
cos(x)
Coseno de x
Entero o real
real
exp(x)
Exponencial de x
Entero o real
real
ln(x)
Logaritmo de x
Entero o real
real
log10(x)
Logaritmo decimal de x
Entero o real
real
round(x)
Redondeo de x
Real
entero
sin(x)
Seno de x
Entero o real
real
sqr(x)
Cuadrado de x
Entero o real
igual que argumento
sqrt(x)
Raíz cuadrada de x
Entero o real
real
trunc(x)
Truncamiento de x
real
entero

MANIPULACIÓN DE CADENAS

Ejercicio 1:

Contar el número de letras 'i' de una frase terminada en un punto. Se supone que las letras pueden leerse independientemente.

Algoritmo letras_i

var
N: entera
Letra: carácter
Inicio
N0
repetir
leer(Letra)
si Letra = 'i' entonces
NN+1
fin si
hasta que Letra = '.'
escribir('La frase tiene :', N,' letras i')
Fin


Ejercicio 2:

Aceptar un nombre y proporcionar la cantidad de caracteres que contiene.

Inicio
escribir('Cuál es el nombre : ')
Leer(nom)
escribir('Tu nombre tiene ', Longitud(nom),' letras')
Fin

Ejercicio 3:

Pedir una cadena que contenga una vez la letra F ('F'). Deberá informarse la posición donde fue encontrada, el carácter previo y el siguiente.

Inicio
escribir('Dame cadena que contenga [F] ')
leer(cad)
xPosición('F', cad)
escribir('La letra 'F' se encuentra en la posición : ',x)
escribir('El carácter anterior es : ' , Subcadena(cad, x-1,1))
escribir('El carácter siguiente es : ', Subcadena(cad, x+2€))
Fin

Ejercicio 4:

Leer dos caracteres y deducir si están en orden alfabético.

variables:
CAR1, CAR2 : carácter.
Algoritmo Comparación
Inicio
Leer CAR1, CAR2
Si CAR1 <= CAR2 entonces
escribir('Si se encuentran en orden')
sino
escribir('Desordenados')
Fin_si
Fin

Ejercicio 5:

Se desea eliminar los blancos de una frase dada terminada en un punto. Se supone que es posible leer los caracteres de la frase de uno a uno.

Análisis del problema

Para poder efecturar la lectura de la frase almacena ésta en un arreglo de caracteres (F), de modo que F(1) contiene el primer carácter i-ésimo del a frase dada. Construiremos una frase nueva sin blancos en otro arreglo G.

Algoritmo

Los pasos a dar para la realización del algoritmo son:

Inicializar contador de letras de la nueva frase G.
Leer el primer carácter.
Repetir
Si el primer carácter no es en blanco, entonces escribir en el lugar siguiente del arreglo F leer carácter siguiente de la frase dada.
Hasta que el último carácter se encuentre.
Escribir la nueva frase (G), ya sin blancos.

Variables:
F : array de caracteres de la frase dada.
G : array de caracteres de la nueva frase dada.
i : Constador del array F.
j : Constador del array G.

Algoritmo Blanco
Inicio
i1
j0
leer F(i)
Repetir
Si F(i) <> ' ' entonces
jj+1
G(j) F(i)
Fin si
ii+1
leer F(i)
Hasta que F(i) = '.'
{escritura de la nueva frase G}
Desde i1 a j hacer
escribir G(i)
Fin Desde
Fin

Ejercicio 6:

Encontrar un espacio en blanco en una cadena.
variables:
x: entero
nom,a,b : cadena
Inicio
leer(nom)
xPosición (' ',nom)
a Subcadena (nom,1,x-1)
b Subcadena (nom, x+1, x)
Fin

Ejercicio 7:

Solicitar un nombre y mostrarlo con la inicial en mayúscula.

variables:
nom,a,b: cadena
x,y : carácter
z : entero

Inicio
escribir('Introduce nombre : ')
leer(nom)
x Subcadena(nom,1,1)
y MAYUSCULA(x)
z Longitud (nom)
a Subcadena (nom, 2, z-1)
Concatenación y+a
Escribir('Te llamas : ' , concatenación)
Fin

Nota: MAYUSCULA es una función para convertir letras minúsculas a mayúsculas.





EJERCICIOS PROPUESTOS

Escribir un algoritmo para determinar si una cadena especificada ocurre en una cadena dada, y si es así, suprimir un asterisco (*) en la primera posición de cada ocurrencia.

Escribir un algoritmo para contar el número de ocurrencias de cada una de las palabras “a”, “an” y “and” en las diferentes lineas de texto.

Contar el número de ocurrencias de una cadena especificada en diferentes líneas de texto.

Escribir un algoritmo que permita la entrada de un nombre, consitente en un nombre, un primer apellido y un segundo apellido. En ese orden, y que imprima a continuación el ultimo apellido, seguido del primer apellido y el nombre. Por ejemplo: Luis García García producirá: García García Luis.

Escribir un algoritmo que convierta los números arábigos en romanos y viceversa (I = 1, V = 5, X = 10, L = 50, C = 100, D = 500 y M = 1000).



ARREGLOS

ARREGLOS

Las variables que hemos utilizado hasta ahora nos permiten el almacenamiento de un solo valor a la vez.

Para resolver cierto tipo de problemas con datos múltiples en forma eficiente, se requiere almacenamiento en conjunto. A esta organización de elementos se le conoce con el nombre de arreglo.

Otra definición de arreglo más completa (Luis Joyanes A.), es un conjunto finito y ordenado de elementos homogéneos. La propiedad "ordenado" significa que el elemento primero, segundo, tercero…n-ésimo de un arreglo puede ser identificado. Los elementos de una arreglo deberán ser homogéneos, es decir, del mismo tipo de datos. Por ejemplo un arreglo puede estar compuesto de todos sus elementos de tipo cadena, otro puede tener sus elementos de tipo entero, etc.

Al tratar el tema de arreglos es necesario conocer el término de dimensión.

Dimensión
Descripción
0
Un solo punto.
1
(vector o lista) Una recta. Contiene largo.
2
(matriz o tabla) Contiene largo y ancho.
3
(cubo) Tiene largo, ancho y fondo.

Declaración de un Arreglo

Nom_variable : Arreglo [dimensión] de Nom_tipo

Ø En donde dimensión especifica :



En el orden : Fila, Columna, Fondo.

Ø Ejemplo de una declaración :

0 Dimensión :

x 20 donde x, es de tipo Entero.

1 Dimensión:


5



1 2 3 4
x[2] 5
x : arreglo [1..4] de Enteros.

2 Dimensiones:

1 2 3 4







8









x[2,4] 8
x : arreglo [1..3, 1..4] de Enteros.

3 Dimensiones:

x[1,4,2] 3
x : arreglo[1..3, 1..4, 1..2] de Enteros.

Las operaciones que se pueden realizar con arreglos durante el proceso de resolución de un problema son:

Ø Asignación
Ø Lectura/Escritura
Ø Recorrido (acceso secuencial)
Ø Actualizar (añadir, borrar, insertar)
Ø Ordenación
Ø Búsqueda

VECTORES

Son aquéllos de una sola dimensión, por lo que también son llamados arreglos Unidimensionales.

Ejemplo:

Un vector de una dimensión llamado CALIF, que consta de n elementos.

calif(1)
calif(2)

calif(n-2)
calif(n-1)
calif(n)

El subíndice o índice de un elemento (1, 2 …n) designa su posición en la ordenación del vector. Otras posibles notaciones del vector son:

a1, a2,…,an En matemáticas y algunos lenguajes(BASIC)

A(1), A(2),…A(n)

A[1], A[2],…A[n] En programación (Pascal)

Los vectores se almacenan en memoria central de la computadora en un orden adyacente. Así, un vector de 50 elementos denominado NUMEROS se representa gráficamente por 50 posiciones de memoria sucesivas.

Memoria

NUMEROS(1) Dirección x
NUMEROS(2) Dirección x+1
NUMEROS(3) Dirección x+2
:
:
NUMEROS(50) Dirección x+49

Cada elemento de un vector se puede procesar como si fuese una variable simple al ocupar una posición de memoria. Así:

NUMEROS(25) 75 (almacena el valor 75 en la posición 25a del vector
NUMEROS y la instrucción de salida : escribir
NUMEROS(25).

Declaración

nom _arreglo = arreglo[liminf..limsup] de tipo

donde:

nom_arreglo: nombre válido del arreglo.
liminf..limsup: límites inferior y superior del rango del arreglo.
tipo: tipo de datos de los elementos del arreglo : entero, real, carácter.

NOMBRES= arreglo [1..10] de carácter

Significa que NOMBRES es un arreglo (array) unidimensional de 10 elementos (1 a 10) de tipo carácter.

Asignación

NOMBRES(8) ‘Ana’

Asigna el valor ‘Ana’ al elemento 8 del vector NOMBRES

Lectura/Escritura de Datos

La Lectura/Escritura de datos en un arreglo u operaciones de entrada/salida normalmente se realizan con estructuras repetitivas, aunque puede también hacerse con estructuras selectivas. Las instrucciones simples de lectura/escritura se representarán como:
leer A Lectura del vector A
escribir A Escritura del vector A
leer V(5) Leer el elemento V(5) del vector V

Acceso Secuencial al Vector (recorrido)

Se puede acceder a los elementos de un vector para introducir datos (escribir) en el o bien para visualizar su contenido (leer). Estas operaciones se realizan utilizando estructuras repetitivas, cuyas variables de control (por ejemplo I) se utilizan como subíndices del vector (por ejemplo, X(I). El incremento del contador del bucle producirá el tratamiento sucesivo de los elementos del vector.

Ejemplo:

Lectura de 15 valores enteros de un vector denominado TOTAL.

TOTAL= array [1..15] de entero
desde i1 hasta 15 hacer
leer TOTAL(i)
fin _desde

Si se cambian el límite inferior y superior, por ejemplo, 5 y 12, el bucle de lectura sería:

desde i 5 hasta 12 hacer
leer TOTAL(i)
fin_desde

La salida o escritura de vectores se representa de un modo similar.

desde i1 hasta 15 hacer
escribir TOTAL(i)
fin_desde

Visualiza todo el vector completo (un elemento en cada línea independiente).

Actualización de un Vector

Puede constar de tres operaciones más elementales:

a) Añadir elementos (añade un nuevo elemento al final del vector)

Un arreglo A se ha dimensionado a 6 elementos, pero solo se han asignado 4 valores a los elementos A(1), A(2), A(3), A(4), se podrán añadir dos elementos más con una simple acción de asignación.

A(5) 15
A(6) 9

b) Insertar elementos (introduce un elemento en el interior de un vector)

Ejemplo: Se tiene un arreglo NOM de 6 elementos de nombres de personas, en orden alfabético y se desea insertar un nuevo nombre.

{Calcular la posición ocupada por el elemento a insertar} P
{Inicializar contador de inserciones} i n.
mientras i >= P hacer
{transferir el elemento actual hacia abajo, a la posición i+1}
NOM(i+1) NOM(i)
{decrementar contador}
i i-1
fin_mientras

{Insertar el elemento en la posición P}
NOM(P) ‘nuevo elemento’
{Actualizar el contador de elementos del vector}
n n+1
fin

c) Borrar elementos (Elimina elementos de un vector)

Algoritmo de Borrado

Inicio
{se utilizará una variable auxiliar AUX, que contendrá el valor del elemento que se desea borrar}
AUX NOM(i)
desde ij hasta N-1 hacer
{llevar elemento j+1 hacia arriba}
NOM(i) NOM(i+1)
fin_desde
{actualizar contador de elementos}
{ahora tendrá un elemento menos, N-1}
N N-1
Fin

Referencia a un elemento de Arreglo
variable de arreglo [subíndice]

Ejemplo:

x x[3]9
escribir (x[2])

?
9
1 2 3

Ejercicio:

Se desea la lectura y desplegado de 5 nombres. Resuelva el problema por cada uno de los siguientes criterios:

a) Lectura y desplegado alternados.
b) Todas las lecturas, todos los desplegados.

a) variables:

string : nom
entero : x

Inicio
Para x1 hasta 5 hacer
escribir(‘Nombre ? ‘)
leer(nom)
escribir( ‘La persona número’, x, ‘ se llama : ‘,nom)
Fin

Nota: No se utilizaron arreglos porque no se requería de almacenamiento múltiple.

b) variables :

nom : Arreglo[1..5] de string
x : Entero

Inicio
para x 1 hasta 5 hacer
escribir(‘Dame el nombre número’,x,’ ?’)
leer(nom[x])
para x 1 hasta 5 hacer
escribir(‘La persona número ‘, x,’ se llama : ‘,nom[x])
Fin

Ordenación de Arreglos

Existen diversos métodos para ordenar los elementos de un arreglo. El más conocido de ellos (no el mejor) es el Método de la Burbuja.

El método consiste en hacer un recorrido por el arreglo comparando parejas de elementos; si estos no están en el orden deseado, se procede a intercambiarlos.

Al finalizar el recorrido se verifica la cantidad de intercambios, si esta es 0 se asume que el arreglo está ordenado ; en caso contrario se inicia nuevamente el recorrido.

Las parejas de elementos que se comparan deben ser contiguos (elemento1 y elemento2, elemento2 y elemento3, etc). El número total de comparaciones es n-1 (donde n es la cantidad de elementos).

Ejemplo:

Se requiere la ordenación de una lista con 5 valores enteros previamente introducidos.

Variables:

LISTA : arreglo[1..5] de entero
x, aux : entero
cambio : boleano

Inicio
Para x 1 hasta 5 hacer
escribir(‘Dame el valor’,x,’ :’)
leer( LISTA[x])
repetir
cambio falso
para x 1 hasta 4 hacer
si LISTA[x] > LISTA[x+1] entonces
aux LISTA[x]
LISTA[x] LISTA[x+1]
LISTA[x+1] aux
cambio verdadero
fin_si_entonces
hasta cambio = falso
escribir(‘Lista ordenada’)
para x 1 hasta 5 hacer
escribir(‘Elemento número’,x,’ es’,LISTA[x])
Fin


Prueba de entrada

Prueba de entrada:

Señor alumno esta es una prueba no calificable para mirar los conceptos sobre algoritmos que usted tiene.

Responda las siguientes preguntas.

1. ¿Qué es una variable?
2. ¿Cuáles son los tipos de variables?
3. ¿Qué son los conectivos lógicos?
4. ¿Cuáles son los Operadores lógicos?
5. ¿Cuáles son los operadores matemáticos y la secuencia de ejecución?
6. ¿Cuáles son las Instrucciones básicas de programación: Asignación, entrada y salida de datos?
7. ¿Qué es una estructura de decisión?
8. ¿Cuáles son las estructuras iterativas?

Realice los siguientes ejercicios prácticos.

1. ¿Realizar un algoritmo con instrucciones básicas?
2. ¿Realizar un algoritmo con instrucciones condicionales?
3. ¿Realizar un algoritmo con instrucciones iterativas?


Al finalizar el tema de algoritmos el alumno estará en capacidad de responder y realizar los ejercicios prácticos.

Observación: En la última clase del tema de algoritmos usted debe entregar este trabajo para ser evaluado por el docente. Para ese día este trabajo si será calificable.



Rediseño y Mejora de Procesos

Rediseño y Mejora de Procesos
Rediseñar un proceso es hacerlo más eficiente y eficaz. Es conseguir que rinda en un grado superior al que tenía anteriormente, y ello gracias a una acción sistemática sobre el proceso que hará posible que los cambios sean estables.
Se trata de conocer el proceso, sus causas asignables (imputables) de variación, de eliminar actividades sin valor añadido y de aumentar la satisfacción del cliente. El rediseño de procesos incluye una actividad de mejora permanente, ya que al rediseño en sí ha de seguir la aplicación del ciclo PHVA de mejora continua.
Un primer paso, esencial para acometer la mejora de procesos, es contar con el liderazgo de la alta dirección de la organización. Este liderazgo ha de ser asumido decididamente e ir acompañado de un intenso compromiso, mientras que es comunicado explícitamente de manera que se genere un estado de opinión y actitud favorables hacia las actividades de mejora y sus resultados. Igualmente, los líderes deben asegurar que los equipos de mejora tengan a su disposición todos los recursos necesarios y la capacitación precisa para emprender y ultimar su misión.
La mejora de un proceso implica una serie de actividades ordenadas, que constituyen en sí mismas un proceso, y cuyas fases principales están contenidas en la figura siguiente. En ella se puede observar la presencia de un subproceso (A) que no es otro que el correspondiente al de la mejora continua.

Teóricas acerca de la Gestión por Procesos

Teóricas acerca de la Gestión por Procesos

El mundo empresarial moderno exige que las organizaciones, independiente de su tamaño, esfera de actuación y tipo de propiedad desarrollen su actividad de manera eficiente y eficaz; como condiciones, no suficientes, pero sí necesarias para lograr mantenerse en el negocio en que participan las mismas. Sin embargo, para alcanzar esto en la actualidad se requiere, como nuevo paradigma, que las entidades sean gestionadas siguiendo el enfoque de proceso o más comúnmente conocido como gestión por proceso.

Pero: ¿Qué es la Gestión por Procesos?, ¿Cómo incide la misma en el análisis y resultados de la organización? A éstas y otras interrogantes da respuesta el presente trabajo, en el que se abordan los siguientes aspectos: definición de proceso; identificación de los procesos claves de la organización; técnicas para la representación o visualización de los procesos; metodología para el análisis y mejora de los procesos; y aplicación a un caso de estudio de la metodología para el análisis y mejora de los procesos.

Vale destaca que la Gestión por Procesos es la filosofía en que se basan los enfoques modernos de Gestión de la Calidad, es decir, la ISO 9000: 2000 y Calidad Total. Por ello se puede afirmar que la Gestión por Procesos más que una curiosidad cognoscitiva, es una necesidad imperativa para las organizaciones que buscan éxito y competitividad a través de la calidad.
Una idea clave y que vale la pena resaltar, desde un inicio, es la que señala que un proceso puede comenzar y terminar dentro de una misma área funcional, pero también, y es muy común, que un proceso se inicie en un área funcional y termine en otra, por tanto, un proceso puede utilizar recursos de diferentes subsistemas dentro de la entidad. Ello sin dudas constituye un elemento muy importante de la Gestión por Procesos.

Definición de Proceso.

De las definiciones de proceso, recogidas en la literatura especializada, una de las más lógicas, sencillas y actuales es la que lo conceptualiza como “una secuencia de actividades que tienen la finalidad de lograr algún resultado, generalmente crear un valor agregado para el cliente” (Evans y Lindsay, 2000: 341).

Otra definición interesante de proceso es la que refiere “un proceso implica el uso de los recursos de una organización, para obtener algo de valor. Así, ningún producto puede fabricarse y ningún servicio puede suministrarse sin un proceso, y ningún proceso puede existir sin un producto o servicio” (Krajewski y Ritzman, 2000: 89).

En general de las definiciones de proceso se pueden extraer como ideas básicas que constituyen un conjunto de actividades interrelacionadas, que persiguen la creación de valor y que su salida final es la conformación de un bien o servicio para un cliente que puede ser interno o externo a la organización.

Otras definiciones que conceptualizan un proceso son las siguientes:
Proceso: acción o sucesión de acciones continuas regulares, que ocurren o se llevan a cabo de una forma definida, y que llevan al cumplimiento de algún resultado; una operación continua o una serie de operaciones. (Diccionario de la Real Academia Española).
Proceso: Una serie de acciones sistemáticas dirigidas al logro de un objetivo previamente definido (Juran página 151).
Magáz (1999): Define los procesos como una cadena de valor, por medio de su contribución a la creación de un producto o la entrega de un servicio. Cada paso de un proceso añade valor al paso anterior y así hasta el último paso del mismo, en el que el cliente externo o interno recibe el producto o servicio solicitado.
Shaw (2000): Define que un proceso es una serie de actividades relacionadas y ejecutadas con lógica para alcanzar resultados específicos.
Galloway (1998): Define los procesos como una secuencia de pasos, tareas o actividades que convierten las entradas en salidas.
Josy (2003): Los procesos son grupos de actividades y tareas que juntas entregan valor al cliente, involucran muchas personas y departamentos y transforman entradas en salidas. Estos están enfocados al cliente y a los resultados.
La serie de Normas de Calidad ISO 9000:2000 en el apartado 3.4.1 define un “Proceso” como: “Conjunto de actividades mutuamente relacionadas o que interactúan, las cuales transforman elementos de entrada en resultados”.
El esquema de la cadena de valor ideado por el profesor Michael Porter de la Harvard Business School es uno de los modelos administrativos más conocidos, este se refiere a los procesos como cadenas.

CLASIFICACIÓN DE LOS PROCESOS.

Lo primero que vale apuntar es el hecho de que no existe una única manera de clasificar los procesos, no obstante los autores de este trabajo aceptan y comparten como válidas las que aquí señalamos.

Por el alcance en la organización:
Empresariales. Es todo aquel proceso que en su ejecución involucra a varias unidades organizativas de la entidad.
Funcionales. En si mismo o como descomposición de un proceso empresarial, se desarrolla o tiene su inicio y fin dentro de una sola área organizativa.
Unitarios: Es una actividad elemental realizada en un nivel de la organización inferior a la funcional.
Por el impacto sobre el cliente final:
Claves, básicos o fundamentales: Son los que expresan el objeto social y la razón de ser de la organización. Son los que identifican y distinguen a la entidad. Atañan a varias áreas de la empresa y tienen impacto directo en el cliente externo creando valor para este. Son aquellos que directamente contribuyen a realizar el producto o brindar el servicio. A partir de ellos el cliente percibe y valora la calidad de lo ofertado.
Soporte o apoyo: Son los encargados de proveer a la organización de todos los recursos (materiales, humanaos y financieros) y crear las condiciones para garantizar el exitoso desempeño de los procesos claves, básicos o fundaméntales de la entidad.
Procesos críticos: Son aquellos procesos que siendo relevantes para la organización, es decir, claves, muestran un pobre desempeño con relación a la calidad con que se brindan a los clientes.

Metodología para desarrollar el análisis y mejora de los procesos

La metodología aquí presentada constituye el resultado de la experiencia práctica de aplicación de la misma en un grupo de empresas seleccionadas.

1. Identificación de los procesos claves de la organización.
2. Elaboración del Mapa de Proceso de la entidad.
3. Confección de las gráficas de proceso.
4. Análisis de los procesos.
5. Propuestas de mejora.
6. Elaboración de las gráficas de control.
7. Propuesta de indicadores para medir el desempeño del proceso mejorado.

Identificación de los procesos claves de la organización.

La identificación de los procesos claves de la organización tiene la finalidad de definir o precisar cuales son los procesos que determinan la razón de ser de la entidad, es decir, señalar aquellos procesos que soportan la Misión de la organización. Para dar cumplimiento a este primer paso se hace imprescindible la participación del consejo de dirección, de especialistas de la entidad y de algunos empleados que conozcan en profundidad la organización.

Estos procesos claves son los que se deben de reflejar en al Mapa de proceso de la organización.

Elaboración del Mapa de Proceso de la entidad.

La conformación del Mapa de proceso es una actividad compleja y que requiere la implicación del grupo de personas que se involucraron en el paso anterior. Una de las formas más prácticas para elaborar el mapa de proceso consiste en ir realizando el mismo sobre un rótulo o pizarra acrílica e ir pidiendo a los participantes que vayan observando lo que se hace y que manifiesten sus criterios de conformidad o no con relación a lo que se esta conformando.

Como se puede apreciar el Mapa comienza con los clientes, los que tienen expectativas con relación a la organización y termina con los clientes, pues estos esperan satisfacer sus necesidades una vez que reciban el producto o servicio que brinda la entidad.

La simbología utilizada en la confección del Mapa de proceso debe ser solo la de rectángulos y flechas direccionales, pues con ello se facilita comprender y entender, a simple vista, el contenido de este valioso documento.

El Mapa de proceso debe ser compartido por todos los miembros de la organización. Esto compromete a todos los integrantes de la entidad con el cumplimiento de la razón de ser de la misma.

Es muy importante que la entidad establezca las vías necesarias o diseñe los medios para obtener la información de retroalimentación que le permita conocer cuales son las expectativas que tienen los clientes con relación a la calidad con que se desarrollan los procesos claves; para ello podrá diseñar encuestas, entrevistas u otros medios que le permitan monitorear tal propósito.

Por todo lo señalado hasta aquí se debe comprender que la elaboración del Mapa de proceso, más que tarea de algunos, es responsabilidad de todos.


El paso culminante con relación a la elaboración del Mapa de proceso consiste en la presentación y aprobación del mismo por parte de las autoridades de la entidad.

Por último es importante destacar que el Mapa de proceso debe revisarse cada cierto período de tiempo con el propósito de mantenerlo actualizado.

Confección de las gráficas de proceso.

Una vez que se ha elaborado el Mapa de proceso corresponde o es recomendable elaborar las gráficas de proceso. Dos técnicas básicas para representar y analizar procesos son los diagramas de flujos y las gráficas de proceso.

Diagrama de flujo. “El diagrama de flujo describe o muestra el flujo de información, clientes, empleados, equipos o materiales a través de un proceso”. Tienen la ventaja de que son sencillos de elaborar y muestran secuencialmente todas las actividades que conforman un proceso, lo que facilita el detectar aquellas operaciones esenciales para lograr el éxito y aquellas en las que se producen los fallos mas frecuentes o en las que se consume tiempo innecesariamente.

Sin existir una regla fija sobre el particular, los diagramas suelen elaborarse simplemente con cuadros, líneas y flechas. Sobre esta técnica no se ofrecen más detalles por el hecho de que en la práctica los autores de este trabajo hemos utilizado más las gráficas de proceso, al considerar esta última más universal y fácil de aplicar.

Gráficas de proceso. Una gráfica de proceso es una forma organizada de registrar y representar todas las actividades que realiza una persona en una estación o área de trabajo, mientras elabora un producto o brinda un servicio a un cliente.

Las actividades en cuestión se suelen agrupar en seis categorías, a saber:
Operación: Representa una tarea o actividad que crea, modifica o agrega algo.
Transporte: Mueve, desplaza o traslada el objeto o cliente de un lugar a otro.
Inspección: Revisa o verifica algo, pero no realiza ningún cambio.
Retraso: Se presenta cuando el objeto se queda detenido en espera de una acción posterior.
Almacén: Ocurre cuando algo es apartado para usarse después.
La información que resulta de desarrollar las gráficas de proceso suele resumirse en una tabla cuyo formato típico es el que se muestra a continuación:


Actividad Número
Tiempo minutos
Distancia (Pies)
Operación
Transporte
Inspección
Demora
Almacén
Descripción del paso o actividad




































Totales











Al igual que en el caso de la elaboración del Mapa de proceso, las gráficas requieren del consenso y la participación de las personas que trabajan directamente en el proceso que sea objeto de estudio.


Análisis de los procesos.

Una vez que se han elaborado las gráficas de proceso de cada uno de los subprocesos que conforman los procesos claves de la organización, se procede al análisis de los mismos con el propósito de identificar las posibles áreas de mejora.

Metodología para el análisis y mejora de los procesos organizacionales
La metodología diseñada por la empresa debe plantear: “para desarrollar un análisis sobre cualquier proceso siguiendo la cadena de valor, es decir, la agregación de valor al producto, en la medida que pasa por las distintas fases o actividades que integran un proceso o un subproceso se recomienda emplear la metodología, cuya esencia consiste en dar respuesta a la siguiente lista de interrogantes”:

1. ¿Todos los pasos del proceso están organizados en una secuencia lógica?
2. ¿Todos los pasos agregan valor?
3. ¿Puede eliminarse algunos de los pasos a fin de mejorar la calidad?
4. ¿Deben añadirse algunos pasos a fin de mejorar la calidad?
5. ¿Algunos pasos deberían reordenarse?
6. ¿Existe proporcionalidad entre cada uno de los pasos que conforman el proceso?
7. ¿Qué habilidades, equipos y herramientas se requieren en cada uno de los pasos del proceso?
8. ¿Deberán mecanizarse o automatizarse algunos pasos del proceso?
9. ¿En que punto debe medirse o controlarse la calidad?
10. ¿En que punto del proceso pueden ocurrir los errores más frecuentes?
Como se puede apreciar las preguntas son claras, sencillas y muy lógicas. Para poder aplicar la metodología y obtener resultados efectivos se requiere, que una vez que se haya elaborado la gráfica del proceso que se vaya a analizar, se reúna a todos los trabajadores que estén involucrados en el desarrollo del mismo y que se proceda, de conjunto con estos, a realizar cada una de las preguntas que conforman la metodología. De aquí se infiere que este es y tiene que ser un trabajo de equipo donde el obrero directo o el empleado juegan un papel trascendental. La respuesta a cada interrogante debe obtenerse, sino por consenso sí por amplia mayoría.

Aplicación de la metodología

Siguiendo las pautas antes señaladas se procedió, de conjunto con los trabajadores del área de corte de la empresa de calzado, a aplicar y responder las preguntas de la metodología. Tales resultados se muestran a continuación:

Preguntas de la metodología
Respuestas
1. ¿Todos los pasos del proceso están organizados en una secuencia lógica?
SI
2. ¿Todos los pasos agregan valor?
NO
3. ¿Puede eliminarse algunos de los pasos a fin de mejorar la calidad?
SI
4. ¿Deben añadirse algunos pasos a fin de mejorar la calidad?
NO
5. ¿Algunos pasos deberían reordenarse?
NO
6. ¿Existe proporcionalidad entre cada uno de los pasos que conforman el proceso?
SI
7. ¿Qué habilidades, equipos y herramientas se requieren en cada uno de los pasos del proceso?
Conocidos
8. ¿Deberán mecanizarse o automatizarse algunos pasos del proceso?
SI
9. ¿En que punto debe medirse o controlarse la calidad?
Troquelado y Desglose
10. ¿En que punto del proceso pueden ocurrir los errores más frecuentes?
Troquelado y Desglose