martes, 29 de abril de 2014

tecnicas de programacion recursivas

Técnicas de programación recursiva: 
Es la forma en la cual se especifica un proceso basado en su propia definición. Siendo un poco más precisos, y para evitar el aparente círculo sin fin en esta definición:
Un problema que pueda ser definido en función de su tamaño, sea este N, pueda ser dividido en instancias más pequeñas (< N) del mismo problema y se conozca la solución explícita a las instancias más simples.
La característica principal de la programación funcional es que los cálculos se ven como una función matemática que hacen corresponder entradas y salidas.
• No hay noción de posición de memoria y por tanto, necesidad de una instrucción de asignación.
• Los bucles se modelan a través de la recursividad ya que no hay manera de incrementar o disminuir el valor de una variable.
• Como aspecto práctico casi todos los lenguajes funcionales soportan el concepto de variable, asignación y bucle.
• Estos elementos no forman parte del modelo funcional “puro”.
No aguanta... deja sigo buscando mas
Definicion de funciones
Los lenguajes funcionales utilizan un modelo computacional simple similar al de
una calculadora.

Sistema de tipos

*Sistemas Físicos: Es todo aquel que logramos ver y/o tocar, así como maquinaria, equipos, objetos, etc. Un ejemplo claro es el Hardware.
*Sistemas Abstractos: Es aquel tipo de sistemas que no percibimos con la mirada y el tacto, compuesto por planes, ideas, etc. El ejemplo podría ser el Software.
*Sistemas Cerrados: Se entiende como aquellos sistemas cuyo comportamiento es determinista y programado y que opera con muy pequeño intercambio de energía y materia con el ambiente. Un ejemplo son las máquinas.
*Sistemas Abiertos: Tiene una relación con el medio ambiente, en el cual se intercambia energía y materia, a través de entradas y salidas. Como las plantas.

Caracteristicas de un Sistema
*Todo sistema tiene uno o algunos propósitos. Los elementos, como también las relaciones, definen una distribución que trata siempre de alcanzar un objetivo.
*Un cambio en una de las unidades del sistema, con probabilidad producirá cambios en las otras.
*Tienen una tendencia a adaptarse con el fin de alcanzar un equilibrio interno frente a los cambios externos del entorno.

Importancia de un Sistema
Para mí, un sistema tiene mucha importancia, ya que trabaja en torno a una conclusión y para ello necesita de otros elementos, sabiendo que estos trabajan en conjunto para lograr esa conclusión, que es el objetivo esperado.
Técnicas de programación recursiva:
La recursividad es una técnica de diseño de algoritmos
Que se base en solucionar versiones más pequeñas de
Un problema, para obtener la solución general del
Mismo
• Permiten realizar un número (posiblemente infinito) de
Cálculos sin especificar el número de repeticiones de
Forma explícita
• Algoritmos recursivos:
-- Recursión directa
- Recursión indirecta
Pueden conseguirse versiones iterativas de soluciones
Recursivas, como por ejemplo: búsqueda binaria
Vamos a ver en el tema siguiente técnicas de diseño de
Programas que utilizan recursión:
– Divide y vencerás,
– Retroceso o backtracking
Modelos de evaluación
Evaluación es el proceso sistemático de recolección y análisis de datos con la finalidad de determinar si es que, y hasta qué punto, unos objetivos han sido o están siendo logrados. La información resultante se pone al servicio de la toma de decisiones.
Clases de tipos
El sistema de tipos de Haskell posee una característica que lo distingue de otros lenguajes de programación. El tipo de polimorfismo del que hemos tratado hasta ahora es denominado polimorfismo paramétrico. Existe otro tipo de polimorfismo llamado ad hoc o sobrecarga. Estos son algunos ejemplos de polimorfismo ad hoc.Ves una descripción informal1 de alto nivel de un algoritmo informático de programación, compacto e informal, que utiliza las convenciones estructurales de un lenguaje de programación verdadero2 , pero que está diseñado para la lectura humana en lugar de la lectura mediante máquina, y con independencia de cualquier otro lenguaje de programación.
Aplicaciones en rutinas de pseudocódigos
Los objetos en C++ son abstraídos mediante una clase. Según el paradigma de la programación orientada a objetos un objeto consta de:
Identidad, que lo diferencia de otros objetos (Nombre que llevara la clase a la que pertenece dicho objeto).
Métodos o funciones miembro
Atributos o variables miembro

Un ejemplo de clase que podemos tomar es la clase perro. Cada perro comparte unas características (atributos). Su número de patas, el color de su pelaje o su tamaño son algunos de sus atributos. Las funciones que lo hagan ladrar, cambiar su comportamiento... esas son las funciones de la clase.


Este es otro ejemplo de una clase:
class Punto
{
//por omisión los miembros son 'prívate' para que sólo se puedan modificar desde la propia clase.
Prívate:
        // Variable miembro privada
        int id;
protected:
        // Variables miembro protegidas
        int x;
        int y;
public:
        // Constructor
        Punto();
        // Destructor
        ~Punto();
        // Funciones miembro o métodos
        int ObtenerX();
        int ObtenerY();
};




Programación funcional
En ciencias de la computación, la programación funcional es un paradigma de programación declarativa basado en la utilización de funciones aritméticas que no maneja datos mutables o de estado. Enfatiza la aplicación de funciones, en contraste con el estilo de programación imperativa, que enfatiza los cambios de estado. La programación funcional tiene sus raíces en el cálculo lambda, un sistema formal desarrollado en los años 1930 para investigar la definición de función, la aplicación de las funciones y la recursión. Muchos lenguajes de programación funcionales pueden ser vistos como elaboraciones del cálculo lambda.
En la práctica, la diferencia entre una función matemática y la noción de una "función" utilizada en la programación imperativa es que las funciones imperativas pueden tener efectos secundarios, al cambiar el valor de cálculos realizados previamente. Por esta razón carecen de transparencia referencial, es decir, la misma expresión sintáctica puede resultar en valores diferentes en diferentes momentos dependiendo del estado del programa siendo ejecutado. Con código funcional, en contraste, el valor generado por una función depende exclusivamente de los argumentos alimentados a la función. Al eliminar los efectos secundarios se puede entender y predecir el comportamiento de un programa mucho más fácilmente, y esta es una de las principales motivaciones para utilizar la programación funcional.
Sistemas de tipos en lenguajes lógico-funcionales.
La programación lógico-funcional es un paradigma de programación declarativa muy expresivo, fruto de la combinación de la programación funcional y la programación lógica. Entre sus principales características destacan la posibilidad de de1nir funciones indeterministas, los patrones de orden superior y el uso de variables libres que se ligan a valores adecuados durante el cómputo. Desde el punto de vista de tipos, los sistemas lógico-funcionales han adoptado de manera directa el sistema de tipos de Damas-Milner, proveniente del ámbito funcional, debido a su sencillez y a la existencia de tipos principales y métodos efectivos para la inferencia de tipos. Sin embargo, esta adaptación directa no maneja adecuadamente algunas de las principales características de los lenguajes lógico-funcionales como los patrones de orden superior o las variables libres, dando lugar errores de tipos durante la evaluación. En esta tesis proponemos tres sistemas de tipos adecuados para la programación lógico-funcional cuyo objetivo es manejar correctamente estas características problemáticas desde el punto de vista de los tipos. Los sistemas de tipos propuestos, que tratan diferentes mecanismos de cómputos lógico funcionales (reescritura y estrechamiento), dan solución a los mencionados problemas, proporcionando resultados técnicos de corrección. Además, suponen un mejora sobre propuestas previas de sistemas de tipos para programación lógico-funcional, ya que salvan algunas de sus limitaciones. Aparte de los resultados teóricos, en esta tesis también se han desarrollado implementaciones de los sistemas de tipos, integrándolos como fase de comprobación de tipos en ramas del sistema lógico-funcional Toy.
Aplicación de Rutinas en Pseudocódigo en C++

Probablemente la mejor manera de comenzar a aprender un lenguaje de programación es escribir un programa.

// my first program in C++

#include <iostream>
using namespace std;

int main ()
{
  cout << "Hello World!";
  return 0;
}


// my first program in C++
Esta es una línea de comentario. Todas las líneas que comienzan con dos signos de barra (/ /) se consideran comentarios y no tienen ningún efecto en el comportamiento del programa. El programador puede utilizar para incluir breves explicaciones u observaciones dentro del propio código fuente.

# Include <iostream>
Las líneas que comienzan con una almohadilla (#) son directivas para el preprocesador. No son líneas de código con expresiones regulares, pero las indicaciones de preprocesador del compilador. En este caso, la directiva # include <iostream> dice al preprocesador para incluir el archivo iostream estándar. Este archivo específico (iostream) incluye las declaraciones de la biblioteca de sistema básico de entrada-salida estándar de C + +

using namespace std;
Todos los elementos del estándar de C + + biblioteca se declaran dentro de lo que se llama un espacio de nombres, el espacio de nombres con el nombre std. Así que con el fin de acceder a su funcionalidad, declaramos con esta expresión que vamos a utilizar estas entidades.

int main ()
Esta línea se corresponde con el principio de la definición de la función principal. La función principal es el punto por donde todos los programas en C + + comienzan su ejecución, independientemente de su ubicación dentro del código fuente.

cout << "Hello World!";
Esta línea es una declaración de C + +. Una declaración es una expresión simple o compuesto que en realidad puede producir algún efecto. De hecho, esta declaración lleva a cabo la única acción que genera un efecto visible en nuestro primer programa. ( cout es el nombre de la secuencia de salida estándar en C + +)
cout se declara en el archivo iostream estándar dentro del espacio de nombres std, así que por eso teníamos que incluir ese archivo específico y declarar que íbamos a utilizar este espacio de nombres específico a principios de nuestro código.
Tenga en cuenta que la declaración termina con un punto y coma (;). Este carácter se utiliza para marcar el final de la instrucción y de hecho debe ser incluida al final de todas las declaraciones de expresión en todos los programas en C + +

return 0;
La sentencia return hace que la función principal a fin. retorno puede ser seguido por un código de retorno (en nuestro ejemplo es seguido por el código de retorno con un valor de cero). Un código de retorno de 0 para la función principal es interpretado en general como el programa funcionó como se esperaba sin ningún error durante su ejecución. Esta es la forma más habitual de terminar un programa de consola C + +.