sábado, 26 de mayo de 2012

dfd


SIMBOLOGÍA DE LOS DIAGRAMAS DE FLUJO
Las diversas organizaciones usan distintos símbolos, pero el comité sobre
computadoras y procesadores de información de la Asociación Norteamericana de
Normas ha hecho un gran esfuerzo para normalizar los símbolos de los diagramas
de flujo. Esa normalización permite comprender cualquier diagrama de flujo que
use los símbolos recomendados.
Cada símbolo normal de diagrama de flujo tiene un significado especial


Expresa Inicio o Fin de un Programa.



Expresa operación algebraica o de

asignación.



jueves, 17 de mayo de 2012

QUE ES UN ALGORITMO


Algoritmo


Contenido

  • 1 Definición formal
  • 2 Medios de expresión de un algoritmo

 



Los diagramas de flujo sirven para representar algoritmos de manera gráfica.

En matemáticas, ciencias de la computación y disciplinas relacionadas, un algoritmo (del griego y latín, dixit algorithmus y este a su vez del matemático persa Al-Juarismi) es un conjunto preescrito de instrucciones o reglas bien definidas, ordenadas y finitas que permite realizar una actividad mediante pasos sucesivos que no generen dudas a quien deba realizar dicha actividad.Dados un estado inicial y una entrada, siguiendo los pasos sucesivos se llega a un estado final y se obtiene una solución. Los algoritmos son el objeto de estudio de la algoritmia.

En la vida cotidiana, se emplean algoritmos frecuentemente para resolver problemas. Algunos ejemplos son los manuales de usuario, que muestran algoritmos para usar un aparato, o las instrucciones que recibe un trabajador por parte de su patrón. Algunos ejemplos en matemática son el algoritmo de la división para calcular el cociente de dos números, el algoritmo de Euclides para obtener el máximo común divisor de dos enteros positivos, o el método de Gauss para resolver un sistema lineal de ecuaciones.
POR EJEMPLO:



Definición formal


En general, no existe ningún consenso definitivo en cuanto a la definición formal de algoritmo. Muchos autores los señalan como listas de instrucciones para resolver un problema abstracto, es decir, que un número finito de pasos convierten los datos de un problema (entrada) en una solución (salida).Sin embargo cabe notar que algunos algoritmos no necesariamente tienen que terminar o resolver un problema en particular. Por ejemplo, una versión modificada de la criba de Eratóstenes que nunca termine de calcular números primos no deja de ser un algoritmo.

A lo largo de la historia varios autores han tratado de definir formalmente a los algoritmos utilizando modelos matemáticos como máquinas de Turing entre otros. Sin embargo, estos modelos están sujetos a un tipo particular de datos como son números, símbolos o gráficas mientras que, en general, los algoritmos funcionan sobre una vasta cantidad de estructuras de datosEn general, la parte común en todas las definiciones se puede resumir en las siguientes tres propiedades siempre y cuando no consideremos algoritmos paralelos:

Tiempo secuencial. Un algoritmo funciona en tiempo discretizado –paso a paso–, definiendo así una secuencia de estados "computacionales" por cada entrada válida (la entrada son los datos que se le suministran al algoritmo antes de comenzar).

Estado abstracto. Cada estado computacional puede ser descrito formalmente utilizando una estructura de primer orden y cada algoritmo es independiente de su implementación (los algoritmos son objetos abstractos) de manera que en un algoritmo las estructuras de primer orden son invariantes bajo isomorfismo.

Exploración acotada. La transición de un estado al siguiente queda completamente determinada por una descripción fija y finita; es decir, entre cada estado y el siguiente solamente se puede tomar en cuenta una cantidad fija y limitada de términos del estado actual.

En resumen, un algoritmo es cualquier cosa que funcione paso a paso, donde cada paso se pueda describir sin ambigüedad y sin hacer referencia a una computadora en particular, y además tiene un límite fijo en cuanto a la cantidad de datos que se pueden leer/escribir en un solo paso. Esta amplia definición abarca tanto a algoritmos prácticos como aquellos que solo funcionan en teoría, por ejemplo el método de Newton y la eliminación de Gauss-Jordan funcionan, al menos en principio, con números de precisión infinita; sin embargo no es posible programar la precisión infinita en una computadora, y no por ello dejan de ser algoritmos. En particular es posible considerar una cuarta propiedad que puede ser usada para validar la tesis de Church-Turing de que toda función calculable se puede programar en una máquina de Turing (o equivalentemente, en un lenguaje de programación suficientemente general):

Aritmetizabilidad. Solamente operaciones innegablemente calculables están disponibles en el paso inicial.

Medios de expresión de un algoritmo


Los algoritmos pueden ser expresados de muchas maneras, incluyendo al lenguaje natural, pseudocódigo, diagramas de flujo y lenguajes de programación entre otros. Las descripciones en lenguaje natural tienden a ser ambiguas y extensas. El usar pseudocódigo y diagramas de flujo evita muchas ambigüedades del lenguaje natural. Dichas expresiones son formas más estructuradas para representar algoritmos; no obstante, se mantienen independientes de un lenguaje de programación específico.

La descripción de un algoritmo usualmente se hace en tres niveles:

  1. Descripción de alto nivel. Se establece el problema, se selecciona un modelo matemático y se explica el algoritmo de manera verbal, posiblemente con ilustraciones y omitiendo detalles.
  2. Descripción formal. Se usa pseudocódigo para describir la secuencia de pasos que encuentran la solución.
  3. Implementación. Se muestra el algoritmo expresado en un lenguaje de programación específico o algún objeto capaz de llevar a cabo instrucciones.

También es posible incluir un teorema que demuestre que el algoritmo es correcto, un análisis de complejidad o ambos.

Diagrama de flujo

 




Diagrama de flujo que expresa un algoritmo para calcular la raíz cuadrada de un número

Artículo principal: Diagrama de flujo.

Los diagramas de flujo son descripciones gráficas de algoritmos; usan símbolos conectados con flechas para indicar la secuencia de instrucciones y están regidos por ISO.

Los diagramas de flujo son usados para representar algoritmos pequeños, ya que abarcan mucho espacio y su construcción es laboriosa. Por su facilidad de lectura son usados como introducción a los algoritmos, descripción de un lenguaje y descripción de procesos a personas ajenas a la computación.

Los algoritmos pueden ser expresados de muchas maneras, incluyendo al lenguaje natural, pseudocódigo, diagramas de flujo y lenguajes de programación entre otros. Las descripciones en lenguaje natural tienden a ser ambiguas y extensas. El usar pseudocódigo y diagramas de flujo evita muchas ambigüedades del lenguaje natural. Dichas expresiones son formas más estructuradas para representar algoritmos; no obstante, se mantienen independientes de un lenguaje de programación específico.

 




MAPA CONCEPTUAL SOBRE PROGRAMACION


LA PROGRAMACION NEUROLINGÜISTICA 'PNL'


¿Qué es la programación neurolingüística o PNL?

La Programación Neurolingüística o P.N.L., es el estudio de la excelencia y modelo de cómo los individuos estructuran su experiencia, entendiendo por modelo la descripción práctica del proceso de funcionamiento de algo con la intención de ser útil.
La P.N.L. tiene un método para detectar los patrones mentales empleados por personas que en diferentes áreas obtienen resultados de excelencia. Este método se denomina modelar (en inglés modelling) y permite distinguir la secuencia de ideas y conductas que posibilitan a un individuo realizar una tarea.
En un sentido global, la P.N.L. es un conjunto de medios de estudio de la comunicación. Debe su origen a dos investigadores norteamericanos: el psicólogo y lingüista John Grinder y el informático Richard Bandler. Ambos se conocieron en 1972 en la Universidad de California, Santa Cruz, se dedicaron a la observación de tres especialistas de la comunicación terapéutica: el hipnoterapeuta Milton Erickson (hipnosis ericksoniana), el psicoterapeuta Fritz Peris (fundador de la terapia gestáltica) y la psiquiatra Virginia Satir (terapeuta sistémica de pareja y familia).
Bandler y Grinder, más interesados por el "cómo" que por el "porqué" de un comportamiento, estudiaron a estos "magos terapéuticos" para identificar la estructura de sus habilidades excepcionales y luego, sin recalar en teorías, elaborar modelos que se pudieran enseñar y funcionaran en la práctica. Su propósito consistió en que otras personas usaran sus propias capacidades de modos también excepcionales.
Así con la P.N.L. el aprendizaje se convierte en algo más productivo, donde lo importante es saber qué hacer y cómo hacerlo en el tiempo y lugar adecuado.
Ahora bien, ¿qué significa Programación Neurolingüística?
Aunque parezca un término complejo, en realidad, refiere a tres ideas sencillas:
La palabra Neuro implica que nuestro comportamiento proviene de procesos neurológicos ligados a percepciones sensoriales.
Es decir, contactamos con el mundo a través de los cinco sentidos, damos "significación" a la información v actuamos según ello.
La palabra Lingüística indica que utilizamos el lenguaje como medio de comunicación humana y para organizar nuestros pensamientos y conductas.
Y Programación se refiere a los programas (de comportamiento) que producimos, entendiendo programa como el modo elegido para ordenar una secuencia de ideas y acciones con el fin de producir resultados. En P.N.L. el concepto de programa (extraído de la Informática) se homologa al concepto de estrategia.
Esta disciplina es esencialmente un modelo de comunicación efectiva, y es por eso que sus técnicas tienen aplicación en todos aquellos campos en que las personas se relacionan con otras, por ejemplo: Educación, Asesoramiento Empresarial, Ventas, Salud, Desarrollo Personal, Negociación, etc.
Sus herramientas son puestas a disposición de quien quiera obtener las habilidades básicas de un buen comunicador. Estas son:
Claridad de Objetivo.
Agudeza Perceptiva.
Flexibilidad de Conducta.
La claridad de objetivo es la habilidad de saber cuál es el resultado específico que se desea obtener. Es importante aclarar que antes de una negociación es necesario definir el objetivo lo más claramente posible.
La agudeza perceptiva es el proceso por el que aprendemos a enfocar la atención y hacer más sutiles las distinciones respecto a la información que recibimos del mundo.
Es necesario adiestrar la agudeza sensorial para advertir si lo que se está haciendo conduce a la meta.
Y por último, la flexibilidad de conducta es la habilidad que complementa a las anteriores, dado que, el hecho de tener múltiples opciones nos otorga recursos para que la consecución del objetivo sea de modo más satisfactorio.
A manera de síntesis, cabe destacar que la genialidad de Bandler y Grinder consistió en encontrar los patrones o "programas" mentales que subyacen a todo resultado exitoso y determinar su aplicación sistemática a cualquier comunicación interpersonal.
"El hombre no es la suma de lo que tiene, sino la totalidad de lo que todavía no tiene y podría tener". Jean Paul Sartre
Presuposiciones de la P.N.L.
El ser humano capta sólo una parte de la realidad externa, no su totalidad.
Bandler y Grinder en su libro "La estructura de la magia", dicen: "A lo largo de la historia de la civilización, muchos han hecho hincapié‚ en este punto: existe una diferencia irreductible entre el mundo y nuestra experiencia de él".
Es decir, que cada individuo percibe el mundo a través de una serie de filtros. Estos están constituidos por: la historia personal, el lenguaje, la cultura, la pertenencia a cierto grupo social, las creencias, valores, intereses y suposiciones.
Así es posible afirmar que el mundo perceptible es siempre más rico que el modelo que se tiene de él.
Una anécdota de Picasso servirá para ilustrar dicha afirmación: Un extraño se acerca al maestro y pregunta por qué no pintaba las cosas tal y como eran en realidad.
Picasso, un poco confundido contesta:
No acabo de entender lo que quiere decir.
El hombre saca una fotografía de su esposa.
Mire - dijo -, como esto. Así es mi mujer de verdad.
Picasso parecía incrédulo.
Es muy pequeña, no? Y un poco plana, no?
La P.N.L. también propone una manera de pensar sobre nosotros mismos y el mundo. En ese sentido es un filtro en sí misma. Así ha extraído las creencias de las personas que lograban resultados de excelencia y las ha denominado Presuposiciones. Estas dan origen y fundamentan el Sistema de Creencias básico de la Programación Neurolingüística.
Dichas Presuposiciones son:
El mapa no es el territorio. Ningún mapa refleja al mundo en una forma completa y exacta.
Mente y cuerpo son parte de un mismo sistema cibernético y se influyen mutuamente.
En un sistema, el elemento de mayor flexibilidad es el que dominará dicho sistema.
Cada comportamiento tiene una intención adaptativa (o positiva) y es el producto del equilibrio que necesita el sistema.
Las personas, cuando toman decisiones lo hacen de acuerdo con el mapa que manejan (o el mapa que poseen). En ese sentido, son las mejores elecciones que pueden hacer.
No existe el fracaso, sino los resultados, los que tan sólo dan nueva información (retroalimentación o feed - back).
Las personas tienen los recursos que necesitan para producir cambios. Si no los tienen los pueden aprender.
Toda tarea puede ser cumplimentada (o aprendida) si se divide en pequeñas porciones.
Cada comportamiento puede servir en algún contexto.
El efecto de la comunicación depende de la flexibilidad del emisor. Si algo no funciona, se prueba hacer otra cosa.

LA PROGRAMACIÓN Y SU HISTORIA






la Programación

Contenido
  • 1 Historia
  • 2 Léxico y programación
  • 3 Programas y algoritmos
  • 4 Compilación
  • 5 Programación e ingeniería del software
  • 6 Referencias históricas
  • 7 Objetivos de la programación















La programación

es el proceso de diseñar, codificar, depurar y mantener el código fuente de programas computacionales. El código fuente es escrito en un lenguaje de programación. El propósito de la programación es crear programas que exhiban un comportamiento deseado. El proceso de escribir código requiere frecuentemente conocimientos en varias áreas distintas, además del dominio del lenguaje a utilizar, algoritmos especializados y lógica formal. Programar no involucra necesariamente otras tareas tales como el análisis y diseño de la aplicación (pero sí el diseño del código), aunque sí suelen estar fusionadas en el desarrollo de pequeñas aplicaciones.

Historia

Para crear un programa, y que la computadora interprete y ejecute las instrucciones escritas en él, debe usarse un Lenguaje de programación.

En sus inicios las computadoras interpretaban sólo instrucciones en un lenguaje específico, del más bajo nivel, conocido como código máquina, siendo éste excesivamente complicado para programar. De hecho sólo consiste en cadenas de números 1 y 0 (Sistema binario).

Para facilitar el trabajo de programación, los primeros científicos que trabajaban en el área decidieron reemplazar las instrucciones, secuencias de unos y ceros, por palabras o letras provenientes del inglés; codificándolas así y creando un lenguaje de mayor nivel, que se conoce como Assembly o lenguaje ensamblador. Por ejemplo, para sumar se usa la letra A de la palabra inglesa add (sumar). En realidad escribir en lenguaje ensamblador es básicamente lo mismo que hacerlo en lenguaje máquina, pero las letras y palabras son bastante más fáciles de recordar y entender que secuencias de números binarios.

A medida que la complejidad de las tareas que realizaban las computadoras aumentaba, se hizo necesario disponer de un método sencillo para programar. Entonces, se crearon los lenguajes de alto nivel. Mientras que una tarea tan trivial como multiplicar dos números puede necesitar un conjunto de instrucciones en lenguaje ensamblador, en un lenguaje de alto nivel bastará con solo una.

Una vez que se termina de escribir un programa, sea en ensamblador o en un lenguaje de alto nivel, es necesario compilarlo, es decir, traducirlo a lenguaje máquina.[

Léxico y programación

La programación se rige por reglas y un conjunto más o menos reducido de órdenes, expresiones, instrucciones y comandos que tienden a asemejarse a una lengua natural acotada (en inglés); y que además tienen la particularidad de una reducida ambigüedad. Cuanto menos ambiguo es un lenguaje de programación, se dice, es más potente. Bajo esta premisa, y en el extremo, el lenguaje más potente existente es el binario, con ambigüedad nula (lo cual lleva a pensar así del lenguaje ensamblador).

En los lenguajes de programación de alto nivel se distinguen diversos elementos entre los que se incluyen el léxico propio del lenguaje y las reglas semánticas y sintácticas.

Programas y algoritmos

Un algoritmo es una secuencia no ambigua, finita y ordenada de instrucciones que han de seguirse para resolver un problema. Un programa normalmente implementa (traduce a un lenguaje de programación concreto) uno o más algoritmos. Un algoritmo puede expresarse de distintas maneras: en forma gráfica, como un diagrama de flujo, en forma de código como en pseudocódigo o un lenguaje de programación, en forma explicativa, etc.

Los programas suelen subdividirse en partes menores, llamadas módulos, de modo que la complejidad algorítmica de cada una de las partes sea menor que la del programa completo, lo cual ayuda al desarrollo del programa. Esta es una práctica muy utilizada y se conoce como "refino progresivo".

Según Niklaus Wirth, un programa está formado por los algoritmos y la estructura de datos.

Se han propuesto diversas técnicas de programación cuyo objetivo es mejorar tanto el proceso de creación de software como su mantenimiento. Entre ellas, se pueden mencionar las siguientes:

  • Programación estructurada
  • Programación modular
  • Programación orientada a objetos (POO)

Compilación

El programa escrito en un lenguaje de programación (fácilmente comprensible por el programador) es llamado programa fuente y no se puede ejecutar directamente en una computadora. La opción más común es compilar el programa obteniendo un módulo objeto, aunque también puede ejecutarse en forma más directa a través de un intérprete informático.

El código fuente del programa se debe someter a un proceso de traducción para convertirlo en lenguaje máquina, código éste directamente ejecutable por el procesador. A este proceso se le llama compilación.

Normalmente la creación de un programa ejecutable (un típico.exe para Microsoft Windows o DOS) conlleva dos pasos. El primer paso se llama compilación (propiamente dicho) y traduce el código fuente escrito en un lenguaje de programación almacenado en un archivo a código en bajo nivel (normalmente en código objeto, no directamente a lenguaje máquina). El segundo paso se llama enlazado en el cual se enlaza el código de bajo nivel generado de todos los ficheros y subprogramas que se han mandado compilar y se añade el código de las funciones que hay en las bibliotecas del compilador para que el ejecutable pueda comunicarse directamente con el sistema operativo, traduciendo así finalmente el código objeto a código máquina, y generando un módulo ejecutable.

Estos dos pasos se pueden hacer por separado, almacenando el resultado de la fase de compilación en archivos objetos (un típico.obj para Microsoft Windows, DOS o para Unix); para enlazarlos en fases posteriores, o crear directamente el ejecutable; con lo que la fase de compilación se almacena sólo temporalmente. Un programa podría tener partes escritas en varios lenguajes (por ejemplo C, C++ y ensamblador), que se podrían compilar de forma independiente y luego enlazar juntas para formar un único módulo ejecutable.

Programación e ingeniería del software

Existe una tendencia a identificar el proceso de creación de un programa informático con la programación, que es cierta cuando se trata de programas pequeños para uso personal, y que dista de la realidad cuando se trata de grandes proyectos.

El proceso de creación de software, desde el punto de vista de la ingeniería, incluye los siguientes pasos:

  1. Reconocer la necesidad de un programa para solucionar un problema o identificar la posibilidad de automatización de una tarea.
  2. Recoger los requisitos del programa. Debe quedar claro qué es lo que debe hacer el programa y para qué se necesita.
  3. Realizar el análisis de los requisitos del programa. Debe quedar claro cómo debe realizar el programa las cosas que debe hacer. Las pruebas que comprueben la validez del programa se pueden especificar en esta fase.
  4. Diseñar la arquitectura del programa. Se debe descomponer el programa en partes de complejidad abordable.
  5. Implementar el programa. Consiste en realizar un diseño detallado, especificando completamente todo el funcionamiento del programa, tras lo cual la codificación (programación propiamente dicha) debería resultar inmediata.
  6. Implantar (instalar) el programa. Consiste en poner el programa en funcionamiento junto con los componentes que pueda necesitar (bases de datos, redes de comunicaciones, etc.).

La ingeniería del software se centra en los pasos de planificación y diseño del programa, mientras que antiguamente (programación artesanal) la realización de un programa consistía casi únicamente en escribir el código, bajo sólo el conocimiento de los requisitos y con una modesta fase de análisis y diseño.
                                         
Referencias históricas

La primera programadora de computadora conocida fue Ada Lovelace, hija de Anabella Milbanke Byron y Lord Byron. Anabella introdujo en las matemáticas a Ada quien, después de conocer a Charles Babbage, tradujo y amplió una descripción de su máquina analítica. Incluso aunque Babbage nunca completó la construcción de cualquiera de sus máquinas, el trabajo que Ada realizó con éstas le hizo ganarse el título de primera programadora de computadoras del mundo. El nombre del lenguaje de programación Ada fue escogido como homenaje a esta programadora.

No olvidemos que este proceso está aplicado a todos los métodos científicos que

Objetivos de la programación

La programación debe perseguir la obtención de programas de calidad. Para ello se establece una serie de factores que determinan la calidad de un programa. Algunos de los factores de calidad más importantes son los siguientes:

  • Corrección. Un programa es correcto si hace lo que debe hacer tal y como se estableció en las fases previas a su desarrollo. Para determinar si un programa hace lo que debe, es muy importante especificar claramente qué debe hacer el programa antes de desarrollarlo y, una vez acabado, compararlo con lo que realmente hace.

  • Claridad. Es muy importante que el programa sea lo más claro y legible posible, para facilitar así su desarrollo y posterior mantenimiento. Al elaborar un programa se debe intentar que su estructura sea sencilla y coherente, así como cuidar el estilo en la edición; de esta forma se ve facilitado el trabajo del programador, tanto en la fase de creación como en las fases posteriores de corrección de errores, ampliaciones, modificaciones, etc. Fases que pueden ser realizadas incluso por otro programador, con lo cual la claridad es aún más necesaria para que otros programadores puedan continuar el trabajo fácilmente. Algunos programadores llegan incluso a utilizar Arte ASCII para delimitar secciones de código. Otros, por diversión o para impedir un análisis cómodo a otros programadores, recurren al uso de código ofuscado.

  • Eficiencia. Se trata de que el programa, además de realizar aquello para lo que fue creado (es decir, que sea correcto), lo haga gestionando de la mejor forma posible los recursos que utiliza. Normalmente, al hablar de eficiencia de un programa, se suele hacer referencia al tiempo que tarda en realizar la tarea para la que ha sido creado y a la cantidad de memoria que necesita, pero hay otros recursos que también pueden ser de consideración al obtener la eficiencia de un programa, dependiendo de su naturaleza (espacio en disco que utiliza, tráfico de red que genera, etc.).

  • Portabilidad. Un programa es portable cuando tiene la capacidad de poder ejecutarse en una plataforma, ya sea hardware o software, diferente a aquélla en la que se elaboró. La portabilidad es una característica muy deseable para un programa, ya que permite, por ejemplo, a un programa que se ha desarrollado para sistemas GNU/Linux ejecutarse también en la familia de sistemas operativos Windows. Esto permite que el programa pueda llegar a más usuarios más fácilmente.