lunes, 23 de noviembre de 2009

CONCEPTOS DE ALGORITMO

Siguiendo al concepto de informática, hoy afrontamos el concepto de algoritmo. La historia de la informática señala a Abu Abdullah Muhammad bin Musa al-Khwarizmi, una de las grandes figuras de la matemática árabe medieval como descubridor del concepto de algoritmo. En su obra "aljabar wa-al-muqabala" sienta las bases del algebra, cuyo nombre procede del comienzo del título, así como "algoritmo" procede del nombre del autor, al-Khwarizmi.
Podemos definir algoritmo como un conjunto de pasos o instrucciones finito que se deben seguir para realizar una determinada tarea. Para que dicho conjunto de instrucciones sea considerado un algorirmo, ha de cumplir algunas características:
- Un mismo conjunto de datos de partida se debe llegar siempre a un mismo conjunto de resultados.
- Las instrucciones han de ser precisas, sin ambiguedad alguna.
- El conjunto ha de ser finito.
http://www.error500.net/garbagecollector/archives/categorias/apuntes/concepto_de_algoritmo.php


Algoritmo: es un método para resolver un problema mediante una serie de pasos definidos, precisos y finitos.
Debe ser preciso, definido y finito.

Preciso: implica el orden de realización de cada uno de los pasos

Definido: si se sigue dos veces, se obtiene el mismo resultado.

Finito: Tiene un numero determinado de pasos, implica que tiene un fin.
http://www.monografias.com/trabajos15/algoritmos/algoritmos.shtml


Un algoritmo, en informática, particularmente en programación, es un conjunto de pasos para lograr un resultado, por lo general, un algoritmo tiene datos de entrada, proceso de datos, y datos de salida, por ejemplo, el siguiente es un algoritmo muy sensillo que suma dos números que ingresas por el teclado:Solicita num1 //Datos de entradaSolicita num2res = num2 + num2 // proceso de datosregresa res //datos de salidaComo puedes ver, ese algoritmo está de risa, sin embargo, existen algoritmos más complejos, por ejemplo, el que ordena una serie de números, el que obtiene una raiz cuadrada, hasta simuladores de complejos procesos químicos o físicos.
http://es.answers.yahoo.com/question/index?qid=20070427090255AATPtVL


CONCEPTO PERSONAL
un algoritmo es una orden o una serie de pasos que son relacionados entre si y que nos ayudan a solucionar problemas o tareas.

TIPOS DE ALGORITMOS

Un algoritmo es un método para resolver un problema. Aunque la popularización del término ha llegado con el advenimiento de la era informática, algoritmo proviene de Mohammed al-Khowarizmi, matemático persa que vivió durante el siglo IX y alcanzo gran reputación por el enunciado de las reglas para sumar, restar, multiplicar y dividir números decimales; la traducción al latín del apellido de la palabra algorismus derivo posteriormente en algoritmo. Euclides, el gran matemático griego (del siglo IV antes de Cristo) que invento un método para encontrar el máximo común divisor de dos números, se considera con Al-Khowarizmi el otro gran padre de la algoritmia (ciencia que trata de los algoritmos).Los pasos para la resolución de un problema son:Diseño de algoritmo, que describe la secuencia ordenada de pasos que conducen a la solución de un problema dado. (Análisis del problema y desarrollo del algoritmo). Expresar el algoritmo como un programa de lenguaje de programación adecuado. (Fase de codificación.) Ejecución y validación del programa por la computadora.Para llegar a la realización de un programa es necesario el diseño previo de algoritmo, de modo que sin algoritmo no puede existir un programa.Los algoritmos son independientes tanto del lenguaje de programación en que se expresan como de la computadora que lo ejecuta. En cada problema el algoritmo se puede expresar en un lenguaje diferente de programación y ejecutarse en una computadora distinta; sin embargo, el algoritmo será siempre el mismo. Así, por ejemplo, en una analogía con la vida diaria, una receta de un plato de cocina se puede expresar en español, ingles o francés, pero cualquiera que sea el lenguaje, los pasos para la elaboración del plato se realizaran sin importar el idioma del cocinero. En la ciencia de la computación y en la programación, los algoritmos son más importantes que los lenguajes de programación o las computadoras. Un lenguaje de programación es tan solo un medio para expresar un algoritmo y una computadora es solo un procesador para ejecutarlo. Tanto el lenguaje de programación como la computadora son los medios para obtener un fin: conseguir que el algoritmo se ejecute y se efectúe el proceso correspondiente.Dada la importancia del algoritmo en la ciencia de la computación, un aspecto muy importante será el diseño de algoritmos. El diseño de la mayoría de los algoritmos requiere creatividad y conocimientos profundos de la técnica de la programación. En esencia, la solución de un problema se puede expresar mediante un algoritmo.Características de los Algoritmos:Las características fundamentales que debe cumplir todo algoritmo son:
Un algoritmo debe ser preciso e indicar el orden de realización de cada paso. Un algoritmo debe estar definido. Si se sigue un algoritmo dos veces, se debe obtener el mismo resultado cada vez. Un algoritmo debe ser finito. Si se sigue un algoritmo se debe terminar en algún momento; o sea, debe tener un numero finito de pasos.http://boards4.melodysoft.com/app?ID=2004BFDP0403&msg=13&DOC=141


De manera general son:*Algoritmos voraces*Algoritmos de programación dinámica*Algoritmos divide y vencerás*Algoritmos de exploración de grafos*Algoritmos probabilistasLos algoritmos "heurísticos" entran dentro de los "voraces", los de tipo "ramas y cortes" y "vuelta atrás" entran en "exploración de grafos", los de manipulación de números y criptografía algunos entran en voraces y otros en divide y vencerás; los de aprendizaje y demás también caen alguna de estas categorías. Por ejemplo, los populares algoritmos genéticos también son de exploración de grafos. En fin.http://es.answers.yahoo.com/question/index?qid=20070427090255AATPtVL



En computación y matematicas un algoritmo de ordenamiento es un algoritmo que pone elementos de una lista o un vector en una secuencia dada por una relacion de ordenes, es decir, el resultado de salida ha de ser una permutación de la entrada que satisfaga la relación de orden dada. Las relaciones de orden más usadas son el orden numérico y el orden lexicográfico. Ordenamientos eficientes son importantes para optimizar el uso de otros algoritmos (como los de búsqueda y fusión) que requieren listas ordenadas para una ejecución rápida. También es útil para poner datos en forma canónica y para generar resultados legibles por humanos. Un algoritmo de búsqueda es aquel que está diseñado para localizar un elemento concreto dentro de una estructura de datos. Consiste en solucionar un problema de existencia o no de un elemento determinado en un conjunto finito de elementos, es decir, si el elemento en cuestión pertenece o no a dicho conjunto, además de su localización dentro de éste. http://es.wikipedia.org/wiki/Algoritmo_de_búsqueda


CONCEPTO PERSONAL
existen cualitativos, cuantitativos, directo, indirecto, adaptativo y estatico.

CONSTANTES Y VARIABLES

En los programas existirán conceptos que poseerán valores, estos conceptos reciben el nombre de variables. Las variables poseen en un momento de la ejecución del algoritmo un único valor, pero este valor puede ir cambiando a medida que se van ejecutando instrucciones, de allí el nombre de variable. Las constantes son conceptos que resultan invariables a lo largo de un algoritmo. En algunos lenguajes existe la posibilidad de que el programador definan sus propias variables.
En el ejemplo anterior las constantes que aparecen son 5, 100, Verdadero y Falso.
http://www.mailxmail.com/curso-informatica-ordenador-cientifico-desarrollo/constantes-variables


Actualmente la tendencia es la contraria: los datos tienen mayor o igual importancia que el programa, llegandose al extremo de estructurar el programa de acuerdo con la estructura de los datos.
Un dato refleja normalmente una mediad del mundo fisico que debemos introducir en nuestro programa que a su vez esta almacenado en el ordenador.
El ordenador acutual a pesar de su enorme avance tecnologico, aun tiene su periferia algo limitada. Actualmente los datos accesibles o legibles por un ordenador pueden ser:
datos magneticos (cintas, discos, …)
marcas sensibles
teclados
caracteres opticos
Antes de entrar en detalle sobre constantes y variables, hay un concepto que habria que dejar claro, y este es el concepto de identificador.
Un identificador se define como una secuencia de caracteres comenzando con una letra y seguida por cero o mas letras, o numeros.Las constantes como indica su nombre, son datos que varian durante la ejecucion o vida del programa.
PI=3.1415
Esto es un claro ejemplo de una constante.
Por analogia, una variable, es un identificador que durante la ejecucion de un programa o su vida, puede ir cambiando los valores que almacena.
En delphi, pascal o lazarus (a parti de aqui, siempre dire lazarus), una constante se utiliza de la siguiente forma:
const pi=3.1415;
Como se puede ver, se utiliza la palabra reservada const.
Para la declaracion de variables se utiliza la palabra reservada var.
Ejemplo:
var
dia: integer;
area: real;
http://www.kriptus.com/pascal-tipos-de-datos-constantes-y-variables/


Toda variable debe tener un tipo de dato y un nombre
El nombre de una variable se sujeta a las reglas que existen en el lenguaje para formar un identificador
Algunos identificadores están reservados como son los nombres de comandos del lenguaje, e.g. RETURN
Un identificador debe iniciar con una letra A-Z, seguida cero ó más letras A-Z, _ (guión bajo) y dígitos 0-9
Nota-1: No se aceptan letras que no sean del alfabeto inglés, e.g. á, ü

¿Qué son las constantes?
Son aquellos valores que, una vez compilado el programa, no pueden ser cambiados.
Al definir las constantes, debemos tomar en cuenta las siguientes REGLAS DE CONVERSIÓN DE TIPOS DE DATOS:

Reglas de conversión de tipos de datos I
Una constante entera (sin parte decimal) es tomada como tal, a menos que se la añadan las letras F ó L (mayúsculas ó minúsculas) ejemplos : 1 : tomada como entera (int) 12f : tomada como flotante (float) 456L : tomada como doble larga (long double)
Una variable con parte decimal es tomada siempre como DOUBLE, salvo que se la siga de la letra F ó L 2.0 : tomada como doble (double) 3.56F : tomada como flotante (float) 1.007L : tomada como flotante larga (long float)

CONCEPTO PERSONAL
Una variable es una espacio en la memoria que permite almacenar temporalmente un dato durante la ejecución de un proceso, su contenido puede variar durante la ejecución de un programa.
Una constante es un dato numérico o alfabético, cuyo valor no puede cambiar durante la ejecución de un programa.

CONTADORES Y ACOMULADORES

Un contador es una variable (casi siempre de tipo entero) cuyo valor se incrementa o decrementa en cada repetición de un bucle. Es habitual llamar a esta variable “cont” (de contador) o “i” (de índice).
El contador suele usarse de este modo:
Primero se inicializa antes de que comience el bucle. Es decir, se le da un valor inicial. Por ejemplo: cont = 5
Segundo, se modifica dentro del cuerpo del bucle. Lo más habitual es que se incremente su valor en una unidad. Por ejemplo: cont = cont + 1
Esto quiere decir que el valor de la variable “cont” se incrementa en una unidad y es asignado de nuevo a la variable contador. Es decir, si cont valía 5 antes de esta instrucción, cont valdrá 6 después.
Otra forma típica del contador es: cont = cont – 1
En este caso, la variable se decrementa en una unidad; si cont valía 5 antes de la instrucción, tendremos que cont valdrá 4 después de su ejecución.
El incremento o decremento no tiene por qué ser de una unidad. La cantidad que haya que incrementar o decrementar vendrá dada por la naturaleza del problema.
Tercero, se utiliza en la condición de salida del bucle. Normalmente, se compara con el valor máximo (o mínimo) que debe alcanzar el contador para dejar de repetir las instrucciones del bucle.
Ejemplo: Escribir un algoritmo que escriba la tabla de multiplicar hasta el 100 de un número N introducido por el usuario algoritmo tabla_multiplicar variables cont es entero N es entero inicio leer (N) cont = 1 mientras (cont <= 100) hacer inicio escribir (N * cont) cont = cont + 1 fin fin El uso de contadores es casi obligado en bucles “mientras” y “repetir” que deben ejecutarse un determinado número de veces. Recuerde que siempre hay que asignar al contador un valor inicial para la primera ejecución del bucle (cont = 1 en nuestro ejemplo) e ir incrementándolo (o decrementándolo, según el algoritmo) en cada repetición con una instrucción del tipo cont = cont + 1 en el cuerpo del bucle. De lo contrario habremos escrito un bucle infinito. Por último, hay que prestar atención a la condición de salida, que debe estar asociada al valor del contador en la última repetición del bucle (en nuestro caso, 100). Mucho cuidado con el operador relacional (<, >, <=, >=, etc) que usemos, porque el bucle se puede ejecutar más o menos veces de lo previsto


Acumuladores
Las variables acumuladoras tienen la misión de almacenar resultados sucesivos, es decir, de acumular resultados, de ahí su nombre.
Las variables acumuladores también debe ser inicializadas. Si llamamos “acum” a un acumulador, escribiremos antes de iniciar el bucle algo como esto: acum = 0
Por supuesto, el valor inicial puede cambiar, dependiendo de la naturaleza del problema. Más tarde, en el cuerpo del bucle, la forma en la que nos la solemos encontrar es: acum = acum + N
…siendo N otra variable. Si esta instrucción va seguida de otras: acum = acum + M acum = acum + P
… estaremos acumulando en la variable “acum” los valores de las variables M, N, P, etc, lo cual resulta a veces muy útil para resolver ciertos problemas repetitivos.
Ejemplo: Escribir un algoritmo que pida 10 números por el teclado y los sume, escribiendo el resultadoalgoritmo sumar10variables cont es entero suma es entero N es entero inicio suma = 0 para cont desde 1 hasta 10 hacer inicio leer (N) suma = suma + N fin escribir (suma) fin
En este algoritmo, cont es una variable contador típica de bucle. Se ha usado un bucle “para”, que es lo más sencillo cuando conocemos previamente el número de repeticiones (10 en este caso). La variable Nsuma es el acumulador, donde se van sumando los diferentes valores que toma N en cada repetición. se usa para cada uno de los números introducidos por el teclado, y la variable
http://profeblog.es/blog/alfredo/2008/03/12/contadores-acumuladores-conmutadores



Un contador es una variable cuyo valor se incrementa o decrementa en una cantidad constante cada vez que se produce un determinado suceso o acción. Los contadores se utilizan con la finalidad de contar sucesos o acciones internas de un bucle; deben realizar una operación de inicialización y posteriormente las sucesivas de incremento o decremento del mismo. La inicialización consiste en asignarle al contador un valor. Se situará antes y fuera del bucle.Representación: ¬ nombre del contador> + Si en vez de incremento es decremento se coloca un menos en lugar del más.Ejemplo: i = i + 1

Un acomulador 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.Representación: ¬ +
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.
http://www.mailxmail.com/curso-aprende-programar/estructuras-basicas




En un CPU de computadora, el acumulador es un registroo en el que son almacenados temporalmente los resultados aritméticos y lógicos intermedios que serán tratados por la unidad aritmético-lógica (ALU).
Sin un registro como un acumulador, sería necesario escribir el resultado de cada cálculo (como adición, multiplicación, desplazamiento (shift), etc.) en la memoria principal, quizás justo para ser leída inmediatamente otra vez para su uso en la siguiente operación. El acceso a la memoria principal es significativamente más lento que el acceso a un registro como el acumulador porque la tecnología usada para la memoria principal es más lenta (pero más barata) que la usada para un registro interno del CPU.
El ejemplo canónico para el uso del acumulador es cuando se suma una lista de números. El acumulador es puesto inicialmente a cero, entonces cada número es sumado al valor en el acumulador. Solamente cuando se han sumado todos los números, el resultado mantenido en el acumulador es escrito a la memoria principal o a otro, registro no-acumulador del CPU.
Los CPUs modernos generalmente tienen muchos registros, todos o muchos de ellos pueden ser capaces de ser utilizados para los cálculos. En una arquitectura de computadora, la característica que distingue un registro acumulador de uno que no lo sea, es que el acumulador puede ser usado como operando implícito para las instrucciones aritméticas (si la arquitectura fuera a tener alguno).
Por ejemplo, una computadora pudede tener una instrucción como:
Add DireccionDeMemoria.
Un contador web es un programa informático que indica el número de visitantes que una determinada página web ha recibido. Una vez configurado, estos contadores se incrementarán uno a uno tras cada visita a la página web.
El número de visitas se muestra habitualmente mediante una imagen digital o en texto plano. Las imágenes de estos contadores pueden mostrarse con una amplia variedad de fuentes o estilos. Un ejemplo clásico sería mostrarlo como si se tratara de un cuentakilómetros. El contador se acompaña a menudo de la fecha en la que fue configurado o puesto a cero por última vez.
Los contadores web no son necesariamente confiables. Un webmaster podría configurarlo para comenzar en cualquier gran número, dando la impresión de que su sitio es más popular de lo que es en realidad.
Algunos sitios web se han dado a conocer por ofrecer premios al visitante que suponga un número de visitas determinado. Estos eventos son más populares en sitios japoneses y se conocen como kiriban.
http://es.wikipedia.org/


CONCEPTO PERSONAL
Los contadores son variables cuyo valor se incrementa en una cantidad constante cada vez que se introduce un determinado proceso.
Un acumulador es una variable que contiene información cuya misión es almacenar cantidades variables que son resultados de suma en una programación.

PSEUDOCODIGOS

Pseudocódigo es la descripción de un algoritmo que asemeja a un lenguaje de programación pero con algunas convenciones del lenguaje natural. Tiene varias ventajas con respecto a los diagramas de flujo, entre las que se destaca el poco espacio que se requiere para representar instrucciones complejas. El pseudocódigo no está regido por ningún estándar. pseudo viene de falso y por ende es un código al que aunque es entendible no se aplica al proceso que debe realizar la máquina.
http://es.wikipedia.org/


El pseudocódigo es una herramienta de programación en la que las instrucciones se escriben en palabras similares al ingles o al español, que facilitan tanto como la escritura como la lectura del programa. En esencia, el pseudocodigo se puede definir como un lenguaje de especificaciones de algoritmos.
http://www.logicapura.com.ar/lp/articulos/guia1cap2.php


El pseudocódigo es un lenguaje simplificado de descripción de algoritmos. El paso desde el pseudocódigo hasta el lenguaje de programación real (por ejemplo, C), es relativamente fácil. Además, la descripción de algoritmos en pseudocódigo ocupa mucho menos espacio que su equivalente con un diagrama de flujo, por lo que lo preferiremos a la hora de diseñar algoritmos complejos.

El pseudocódigo es bastante parecido a la mayoría de los lenguajes de programación reales, pero no tiene unas reglas tan estrictas, por lo que el programador puede trabajar en la estructura del algoritmo sin preocuparse de las limitaciones del lenguaje final que, como veremos al estudiar C, son muchas y variopintas.

El pseudocódigo utiliza ciertas palabras reservadas para representar las acciones del programa. Estas palabras originalmente están en inglés (y se parecen mucho a las que luego emplean los lenguajes de programación), pero por suerte para nosotros su traducción española está muy extendida entre la comunidad hispanohablante.
http://profeblog.es/blog/alfredo/2008/03/03/pero-¿que-es-exactamente-un-algoritmo/

CONCEPTO PERSONAL
El pseudocodigo es un falso lenguaje de programación se un algoritmo entre nuestro lenguaje natural y el de programación sin seguir un estándar.

jueves, 19 de noviembre de 2009

Diagramas de flujo

DIAGRAMA DE FLUJO:
Un diagrama de flujo es una representación gráfica de los pasos que seguimos para realizar un proceso; partiendo de una entrada, y después de realizar una serie de acciones, llegamos a una salida.
CARACTERISTCAS DE UN DIGRAMA DE FLUJO:

Presenta información clara, ordenada y concisa de un proceso Está formado por una serie de símbolos unidos por flechas Cada símbolo representa una acción específica Las flechas entre los símbolos representan el orden de realización de las acciones

CUANDO UTILIZAR UN DIAGRAMA DE FLUJO:
Se requiere conocer o mostrar de forma global un proceso Se necesita una guía que permita un análisis sistemático de un proceso. Se necesita tener un conocimiento básico, común a un grupo de personas.
Los diagramas de flujo nos indican: Dónde comienza el proceso. Todas las actividades que se realizan. Todas las tomas de decisiones que se hacen. Tiempos de espera. Cuáles son los resultados.
Donde termina el proceso. Símbolos del Diagrama de Flujo Es un rectángulo redondeado con las palabras inicio o fin dentro del símbolo. Indica cuando comienza y termina un proceso. Es un rectángulo dentro del cual se describe brevemente la actividad o proceso que indica. Es un rombo con una pregunta dentro. A partir de éste, el proceso se ramifica de acuerdo a las respuestas posibles (generalmente son sí y no). Cada camino se señala de acuerdo con la respuesta. SÍMBOLO ACTIVIDAD INICIO - FIN ACTIVIDAD DECISIÓN NO SI Líneas de flujo o fluido de dirección, son flechas que conectan pasos del proceso. La punta de la flecha indica la dirección del flujo del proceso. Se utiliza un círculo para indicar el fin o el principio de una página que conecta con otra. El número de la página que precede o procede se coloca dentro del círculo. FLECHA (FLUJO) CONECTOR
Desarrollo del Diagrama de Flujo Identificar el inicio y el final de un proceso. Definir etapas (actividades, decisiones, entradas, salidas). Los diagramas de flujo deben escribirse de arriba hacia abajo y/o de Izquierda a derecha Los símbolos se unen con líneas, Se debe evitar el cruce de líneas No deben quedar líneas de flujo sin conectar. Todo texto escrito dentro de un símbolo debe ser legible, preciso, evitando el uso de muchas palabras. Todos los símbolos pueden tener mas de una línea de entrada, a excepto del símbolo final. Solo los símbolos de decisión pueden y deben tener mas de una línea de flujo de salida.

VENTAJAS DE UN DIGRAMA DE FLUJO:
Ventajas de los Diagramas de Flujo Favorecen la comprensión del proceso a través de mostrarlo como un dibujo Permiten identificar los problemas y las oportunidades de mejora del proceso Muestran las interfaces cliente-proveedor y las transacciones que en ellas se realizan, facilitando a los empleados el análisis de las mismas Son una excelente herramienta para capacitar a los nuevos empleados y también a los que desarrollan la tarea, cuando se realizan mejoras en el proceso.

CONCLUSIÓN:
Conclusiones Los diagramas de flujo son herramientas que mejoran la explicación de los procesos. Son útiles en el desarrollo de documentación de sistemas de gestión. Describen los procesos de forma mas amigable que los instructivos.