miércoles, 17 de noviembre de 2010

Reporte #8

Lenguajes Multiparadigmas

En este reporte hablare sobre los lenguajes multiparadigmas pues en si con mis palabras son aquellos lenguajes que tienen mas de un paradigma como el nombre lo dice por ejemplo pues aquellos lenguajes que son funcionales pero a la ves pueden ser logicos u orientados a objetos esos serian ejemplos de lenguajes multiparadigmas

Acontinuacion les dejare una pequeña introduccion a estos lenguajes:

Un lenguaje de programación multiparadigma es el cual soporta más de un paradigma de programación. Según lo describe Bjarne Stroustrup, permiten crear “programas usando más de un estilo de programación”.

El objetivo en el diseño de estos lenguajes es permitir a los programadores utilizar el mejor paradigma para cada trabajo, admitiendo que ninguno resuelve todos los problemas de la forma más fácil y eficiente posible.

Por ejemplo, lenguajes de programación como C++, Genie, Delphi, Visual Basic o PHP, combinan el paradigma imperativo con la orientación a objetos. Incluso existen lenguajes multiparadigma que permiten la mezcla de forma natural, como en el caso de Oz, que tiene subconjuntos (particularidad de los lenguages lógicos), y otras características propias de lenguages de programación funcional y de orientación a objetos. Otro ejemplo son los lenguajes como Scheme (paradigma funcional) o Prolog (paradigma lógico), que cuentan con estructuras repetitivas, propias del paradigma imperativo.

A lenguaje de programación del multiparadigm es a lenguaje de programación ese apoya más de uno paradigma de programación. Como Leda asimientos de Tim Budd del diseñador él: La idea de una lengua del multiparadigm es proporcionar un marco en el cual los programadores puedan trabajar en una variedad de estilos, entremezclándose libremente construye de diversos paradigmas. La meta del diseño de tales idiomas es permitir que los programadores utilicen la mejor herramienta para un trabajo, admitiendo que nadie paradigma soluciona todos los problemas de la manera más fácil o más eficiente.

Un ejemplo es Onza, que tiene subconjuntos que sean a lengua de la lógica (La onza desciende de la lógica que programa), a lengua funcional, lengua orientada al objeto, a lengua del concurrente del flujo de datos, y más. La onza fue diseñada sobre un período de diez años para combinar en los conceptos armoniosos de una manera que se asocian tradicionalmente a diversos paradigmas de programación.

En esta clase hablamos sobre 4 paradigmas que fueron funcionales, logicos. imperativos y orientados a objetos aunque no son los unicos que ahi existen mas que les pondre algunos y un pequeño descripcion de ellos.

Flujo de datos - recálculo forzado de fórmulas cuando los valores de los datos cambian (e.g. Hojas de balance)

Lenguaje de programación visual - elementos de programa de manipulación gráficamente más bien que especificándolos textual (e.g. Simulink)

Programación declarativa - describe acciones (e.g. HTML describa una página pero no cómo exhibirla realmente)

Programación imprescindible - declaraciones explícitas que cambian un estado del programa

Programación funcional - la evaluación de las aplicaciones de funciones matemáticas y evita el estado y datos mutable

Programación orientada al objeto - clases y casos, herencia, encapsulación de las aplicaciones y polimorfismo

programación Prototipo-basada - programación orientada al objeto que evita clases y pone herencia en ejecución vía la reproducción de casos

El computar paralelo - ejecución simultánea con la comunicación necesaria y sincronización entre los procesos/los hilos de rosca

Modelo del agente - cómputo concurrente con los “agentes” esos decisiones locales de las marcas en respuesta al ambiente (capaz de comportamiento egoísta o competitivo)

programación de la tubería - ningunas llamadas de función jerarquizadas, pero las estructuras simples de un flujo con fácil visualizar/entienden que los datos atraviesan el programa

programación de constreñimiento - las relaciones entre las variables se expresan como los apremios (o redes del constreñimiento), dirigiendo soluciones permisibles (satisfacción del constreñimiento de las aplicaciones o algoritmo a una cara)

programación basada en las reglas - una red de las reglas del pulgar que abarcan una base de conocimiento y se pueden utilizar para los sistemas expertos y deducción y resolución del problema

programación de la lógica - hechos lógicos de las aplicaciones para crear un modelo que puede probar consistencia, deducir otras verdades o contestar a preguntas sobre el modelo (e.g. ¡Los perros son animales! ¡Los perros son rojos! Son algunos animales rojos?)

programación reflexiva - caso especial de metaprogramming (la modificación de programas como datos por otro programa o la capacidad de hacer la parte del trabajo adentro compila tiempo en vez de tiempo en marcha) en el cual el programa modifica o se amplía

o tambien pueden visitar esta pagina que les dira tambien que lenguajes tienen de 2 paradigmas hasta 8 paradigmas.
http://www.worldlingo.com/ma/enwiki/es/Multi-paradigm_programming_language

Algunos de los lenguajes que podemos hacer mas comunes o vistos son :
Go
Oz
Leda

Existen mas pero esos son como que los mas recomendados.

Lenguaje GO
Un pequeño codigo como de intruduccion es el factorial.


package main //esta se utiliza esencialmente en el go siempre al iniciar cualquier codigo que valla ser en go//

import "fmt" //aqui va importar este fmt que lo utilizaremos mas adelante para poder imprimir algo//

func main() { //aqui es la funcion main es donde empieza todo el cuerpo del programa//

fmt.printf ("Buenas Tardes compañeros") // es lo que habiamos importado mas agregandole .printf que es para imprimir algo //

fmt.printf("Este es un pequeño programa es como a introduccion a go\n")

} //se cierra el programa//

bueno en conclusion de este lenguaje pues yo le saco que tiene caracteristicas similirares a c por lo que se puede hacer un poco familiar y pues los paradigmas que tiene este lenguaje pues yo digo que es el funcional, y podria ser estructurado.

Encontre este codigo de factorial que no le entendi mucho les dejo el link acontinuacion :
http://code.google.com/p/bcannon/source/browse/languages/Go/factorial.go?r=a4d535beb3382de730c326570e5d7ee69a387c3a


Algunas REFERENCIAS:
http://www.vertutoriales.com/index.php/iniciacion-como-empezar-con-go-el-nuevo-lenguaje-de-google/

http://translate.google.com.mx/translate?hl=es&langpair=en%7Ces&u=http://citeseerx.ist.psu.edu/viewdoc/download%3Fdoi%3D10.1.1.133.1069%26rep%3Drep1%26type%3Dpdf


Reporte # 7

Lenguajes Orientados a Objetos

Una pequeña introduccion a este tipo de lenguajes

Se le llama así a cualquier lenguaje de programación que implemente los conceptos definidos por la programación orientada a objetos.

Cabe notar que los conceptos definidos en la programación orientada a objetos no son una condición sino que son para definir que un lenguaje es orientado a objetos. Existen conceptos que pueden estar ausentes en un lenguaje dado y sin embargo, no invalidar su definición como lenguaje orientado a objetos.

Algunos ejemplos de lenguajes orientados a objetos:
C++
Java
Smalltalk
Eiffel
Ruby
Python
COBOL
Perl
PHP
Delphi


Lenguaje C++

Aqui un pequeño ejemplo explicado de el lenguaje orientado a objetos de C++.






#include (iostream) //esta primera linea es mas que nada la libreria que necesitamos para compilar nuestro programa//

using namespace std; //es mas que nada una biblioteca estandar que se declaran dentro de la misma casi siemre la utilizamos//

class rectangulo { // aqui estamos declarando la clase que es llamada rectangulo//

int ancho, altura; //aqui son los miembros lo que conforma la clase que es el ancho y la altura//

public : // el public no quiere decir que nuestras variables seran publicas//

void set_values ( int , int ); //aqui pues es como que esta declarando valores que van a ser enteros//

int area () { //declara area es la que se va obtener//
return
(ancho*altura);} // aqui estamos poniendo la formula para sacar el area del triangulo//
};
void rectangulo::set_values ( int a, int b) //los :: los usamos para especificar que estamos definiendo una funcion que es miembro de la clase rectangulo y no una global//

{
ancho = a; altura = b; //aqui declaramos a y b de la linea anterior con respecto al ancho y la altura//
}
int main () { //esta linea es mas que nada donde se inicia el programa en si donde va a pedir, imprimirte los resultados//

rectangulo rectanguloA, rectanguloB; //aqui definimos que en la clase rectangulo vamos a tener 2 a los que sacaremos el area//

rectanguloA.set_values (3,4); //aqui ya le declararemos valores del ancho y altura del rectangulo//

rectanguloB.set_values (5,6);

cout << "rectanguloA area: " << color="#ff0000">// aqui ya imprimira lo que es el resultado de su area//
cout << "rectanguloB area: " <<>// esta linea se usa si utilizas windows //
return 0; // se termina el codigo//
}

Aqui la impresion de lo que pedimos en el codigo:



Les mostrare otro ejemplo similar al anterior pero con un detalle diferente porque en este use un constructor.

#include (iostream)
using namespace std;
class cuadrado { int ladoA, ladoB;
public :
cuadrado ( int , int );
int area () {
return (ladoA*ladoB);}
};
cuadrado::cuadrado ( int a, int b) // aqui esta la diferencia cuando usamos un constructor eliminamos el set_value y lo cambiamos por el nombre de la misma clase y como notan en ninguna linea aparece el set_value y de ahi realiza el mismo procedimiento.//
{
ladoA = a; ladoB = b;
}
int main () {
cuadrado cuadradoA (5,5);
cuadrado cuadradoB(10,10);
cout << "cuadradoA area: " <<>

cout << "cuadradoB area: " <<>

system ("PAUSE");

return 0; }

Aqui la impresion de este programa:





Lenguaje Java




Bueno les mostrare un programa que pues de lo que se trata es muy conocido que es la serie de Fibonacci:

import javax.swing.*; //es ua libreria de java al igual que C, java tambien cuenta con algunas librerias//

public class fibo { // aqui estamos declarando la clase que es fibo que por cierto el nombre del archivo debe ser igual a ella//

public static void main (String[]args){ //aqui es donde abrimos el main que viene con el void que nos dice que no retorna ningun valor, el public static pues es una variable publica, strings[]args) quiere decir que tenemos un argumento el cual va ser un arreglo de tipo de elementos strings.//

int fibon; //aqui declaramos fibon//

int pri = 0; // estamos declarando el pri que va ir igual a cero//

int seg = 1; // aqui el seg que es igual a uno//

int sig; //y aqui el sig que no lo igualamos a nada//

String numero; //tambien declaramos numero con string para mas adelante poder pedir el numero poniendo algo entre comillas//

numero = JOptionPane.showInputDialog("Cuantos numeros quiere"); //aqui gracias al string podemos pedir el numero y el codigo que nos aparece es la pantalla que se nos va abir para poder ingresar el numero y poder escojer si aceptas o cancelas//

fibon = Integer.parseInt(numero);

System.out.println("SerieFibonacci"); //el codigo que ingresamos como System.out.println nos sirve para poder imprimir algo que en este caso seria SerieFibonacci.//

System.out.println(pri); //imprimira el valor de pri declarado mas arriba//

for (int i = 3; i //iniciamos con la sentencia for //

sig=seg+pri; //aqui declaramos la formula de como nos va a ir imprimiendo los numeros//

System.out.println(sig); //imprime el sig que declaramos arriba//

seg = pri; //el valor que quede como seg que va pasar a ser pri//

pri = sig; // el valor que paso a ser pri pasara a ser sig//

} } }


Corriendolo con el simbolo del sistema en windows que seria con el jdk primero al momento de compilarlo nos abre la ventana que nos dice cuantos numeros quiere.


y despues de que ingresemos y le pongamos aceptar nos regresa a la pantalla del simbolo del sistema y nos dice el resultado.



y con esto termino mi reporte 7 les dejare unos links que utilize para leer algunas cosas sobre lo orientado a objetos.


http://jlmarina.net/metodos2/

http://es.wikipedia.org/wiki/Lenguaje_orientado_a_objetos

http://dis.um.es/~bmoros/

jueves, 11 de noviembre de 2010

Reporte 6

Lenguajes imperativos

Un lenguaje imperativo es un tipo de lenguaje de programación. Es este tipo de lenguajes, las instrucciones se ejecutan unas tras otras, de manera secuencial, salvo cuando se encuentran estructuras de control condicionales o bucles. Hay declaración de variables, tipos y procedimientos, aunque esto varía notablemente en función del lenguaje utilizado, pues los hay que exigen las declaraciones mientras que otros permiten que esos elementos no sean declarados.

Algunos de los lenguajes son:
Pascal
Basic
Cobol
C
Fortran

Programa en Fortran

program areatriangulo; //aqui es primero donde indicamos el nombre del archivo que si notan es igual a Pascal//

real altura,base,area // en esta linea declaramos las variables y no ponemos el punto y coma al final//

write (*,*) 'Ingrese la altura: ' // en esta linea estamos pidiendo la altura y si notan el (*,*) es mas que nada parte de la sintaxis de fortran 77 para poder imprimir//

read (*,*) altura // esta guarda el valor que pedimos en la linea anterior//

write (*,*) 'Ingrese la base: '

read (*,*) base

area = base*altura/2 //aqui realiza la operacion necesaria para poder sacar el area del triangulo //

write (*,*) 'Area = ', Area // aqui va imprimir el area y si notamos a diferencia de los otros write este tiene un (,) y despues area que quiere decir que vamos a imprimir el valor de area //

stop // para el programa//

end //se cierra el programa con esta linea //

tutorial para fortran 77

Este es otro tutorial de fortan nomas que en este tutorial vienen unas cosas diferentes al programa que acabo de poner por ejemplo
al imprimir algo en ves de poner :
write (*,*) 'Hola' en este tutorial aparece que para imprimir algo es print *, 'Hola' esa es una de las diferencia que encontre puede ser por la version o asi aqui se los dejo para que lo chequen.

Introduccion a fortran tutorial







Programa en C


Aqui les dejo un pequeño programa en C.

#include (stdio.h)//En estas primeras 3 lineas declaramos las librerias que vamos a ocupar para poder desarrollar y compilar nuestro programa.//


#include (conio.h)


#include (math.h)

NOTA: lo pongo asi porque de la otra manera no me aparecen las librerias
main ()


{ // aqui es donde empieza el cuerpo del programa//



float km, dias, pre, costo=4.25; //en esta linea declaramos las variables en este caso pusismos float que quiere decir que son flotantes que llevan punto decimal.//



printf("Los Kilometros recorridos son: "); // en esta linea es la primera impresion que vamos hacer donde le pediremos los kilometros.//


scanf(%f", &km); //en esta estamos escaneando el dato que pedimos osea guardandolo para utilizarlo mas adelante.//


printf("Los dias de estancia son: "); // es el mismo procedimiento que el de arriba solo que aqui pedimos los dias.//



scanf("%f", &dias);



{ //este corchete nos indica que vamos abrir una condicion que es el if. //


if (km>650&&dias<6)>//aqui declaramos nuestra condicion del if que dice si los kilometros son mayor a 650 y los dias menor a 6 pasa a la formula que tenemos en la siguiente linea.//



pre=((km*costo)*0.75); //si se cumple la condicion anterior se hace la formula que multiplica los kilometros dados por el costo y por cumplirse esa condicion se multiplica tambien por .75 que es un descuento del 25%.//



else // este nos sirve si no se cumple la condicion anterior nos pasamos a este que pasa a la siguiente formula.//



pre = (km*costo); // aqui nomas multiplica los kilometros por el costo sin ningun descuento.//



printf("\nEl precio del viaje es: %.2f", pre); //aqui imprime el resultado final el "\n" nos indica salto de linea y el %.2f reduce los numeros despues del punto en 2.//ç


} //cierre de la sentencia if.//



getche(); //nos indica que cerramos el programa.//



} //cierra el programa //




Ahora les mostrare la pantalla donde pido los datos y me da el resultado.




Bueno en esta imagen como podemos observar los kilometros que recorrio fueron 700 cumple con la primera parte de la condicion pero estuvo nomas 5 dias por lo que no se aplica el descuento.





Luego en esta otra imagen hice lo mismo meti el valor de 700 kilometros recorridos pero ahora con 7 dias de estancia por lo que se cumple toda la condicion y aplica el descuento por lo que el precio del viaje es menor.





Programa en Pascal



Este lenguaje es muy parecido al C pero pues tiene sus diferencias aunque la sintaxis es casi la misma.



Aqui les dejo un pequeño programa.

program areatriangulo; //esta linea es mas que nada es el inicio del programa donde lo que va con program es el nombre del archivo.//



var altura,base,area:real; //en esta linea definimos las variables que utilizaremos y aqui area:real quiere decir que la de area va tener valores con decimales.//



begin //aqui es donde comienza nuestro programa mejor dicho el cuerpo.//



writeln('Ingrese la altura: '); // aqui estamos imprimiendo el primer dato que vamos a pedir que es la altura.//



readln(altura); // en esta linea guarda el valor que pedimos para utilizarlo mas adelante.//



area:=base*altura / 2; // aqui ya es donde el programa realiza la formula necesaria para sacar el area del triangulo//



writeln('El area del triangulo es: '); //aqui nomas imprime lo que es la sentencia//



writeln(area:3:1); // aqui en esta linea es donde imprimimos el valor del area//



end. // por ultimo cerramos el programa con esta linea.//




Aqui les muestro el programa ya ejecutado en free pascal



Ahi esta la pantalla donde lo estoy corriendo lo primero que ago despues de terminar el codigo es ponerle en compile para verificar que no tenga errores despues me dice que esta bien y le pongo en run le doy clic y me despliega esta ventana al ponerle los datos de altura y base me devuelve a la pagina del codigo que es esta :







Despues para poder ver el resultado del area tengo que poner alt + f5 para que me aparesca de nuevo la ejecucion ya con el resultado.





Este es otro pequeño ejemplo que hice pero no lo pude compilar porque me marca un error pero nunca le alle donde es ese error pero ahi lo dejo para que lo chequen.








Si se dan cuenta tiene casi la misma gramatica que el c pero cambian los nombres por decir el printf por writeln, el scanf por readln entre otros por lo que se hace un lenguaje no tan complicado al saber compilar en C.

Programa con Basic

Un pequeño programa en Basic mas que nada es el mismo anterior pero ahora en basic.

print "Area de un triangulo"; // aqui mas que nada estamos imprimiendo el titulo o nombre del programa//

let altura // aqui estamos declarando las variables estamos utilizando el let aunque si no queremos no lo utilizamos y ponemos la variable y si tiene constante su constante//

let base

let area= base*altura/2 // tambien estamos declarando de igual forma la formula que vamos a utilizar //

input "Ingrese la altura: "; altura //aqui utilizamos el input para pedir un dato para poder ingresarlo el print solo nos imprime pero el input nos imprime y despues de las comillas ponemos el ; y la variable en la cual lo vamos a guardar el dato//

input "Ingrese la base: "; base

print "El area del triangulo es: "; area //aqui ya estamos imprimiendo el resultado y pues hacemos lo mismo en el print pero solo agregamos el ; y el nombre de la variable a la que se le asigno el valor de la operacion realizada//

end //con esta linea terminamos el programa//

Este es un link de un pequeño curso de Basic que encontre espero pueda servir:

Curso Basic


jueves, 21 de octubre de 2010

Reporte 5

Problema Lógico

Shirt Friends ( Camisa de los amigos)

En un restaurante del centro, el Sr. Rojo, Sr. Azul, el Sr. Blanco se reunieron durante el almuerzo. Bajo los abrigos
que están usando ya sea una camisa roja, azul o blanco.

Sr. Azul dice: "Oye, ¿te diste cuenta que estamos todos con camisas de colores diferentes de nuestros nombres?" El hombre
con la camiseta blanca, dice, "Wow, Sr. Azul, es cierto!"

¿Se puede saber quién está usando qué color de camisa?

RESPUESTA:
Sr. Azul - Camisa Roja
Sr. Roja - Camisa blanca
Sr. Blanco - Camisa Azul

Solución.
cuando el señor Azul nota que todos traian camisas diferentes a sus nombres, y por lo que el señor Blanco le contesta que era verdad lo que habia notado. Asi que usando la logica como nadie tiene la camisa del color de su nombre entonces el Sr. Azul no puede tener ni la azul ni la blanca porque porque azul asi se llama y blanca porque el que traia camisa blanca le contesto por lo que queda la roja que es la que trae puesta y el Sr. Rojo y Sr. Blanco ya los sacamos por logica como nos queda la camisa blanca y la azul entonces el Sr. Blanco no puede traer la camisa blanca asi que trae la azul y el Sr. Rojo trae la camisa blanca que es la que quedo.


Aqui les dejo un pequeño programa de prolog hecho en turbo prolog.
domains
marca,talla,color=symbol
precio=real
(esta primera parte del programa es en donde como conocemos en otros lenguajes declarar las variables con el domains, el symbol representa todo lo que sean como simbolos como las letras u objetos, y real significa algun valor numerico real que en este caso seria el de precio.)

predicates
ropa(marca,talla,color,precio)
tenis(marca,talla,color,precio)
playera(marca,talla,color,precio)
tachones(marca,talla,color,precio)
(en esta segunda parte indicamos mas que nada como las predicciones osea es donde nosotros declaramos como una regla de como vamos a querer que prolog nos lea el programa cuando quieramos hacer una consulta.)

clauses
ropa(M,T,C,P):-
tenis(M,T,C,P);
playera(M,T,C,P);
tachones(M,T,C,P).
(En la tercera parte de nuestro programa viene lo que son clauses que es la parte logica en la cual ropa(M,T,C,P):- nos indica que estamos utilizando un if el cual nos indica que hay mas de un tipo de ropa, depues las variables ya declaradas en esta parte las pusismos solo con su inicial pero en mayuscula para que para poder llamar a la variable sin la necesidad de escribirla toda. Despues tenis(M,T,C,P); y playera(M,T,C,P); serian los siguientes caminos pero el (;) es el que te manda al siguiente camino y tachones(M,T,C,P). que si notamos en este camino tenemos un punto que es el que despues de realizar la consulta nos indica el final del if.)

playera(nike,mediana,azul,600).
playera(adidas,chica,roja,750).
playera(nike,chica,naranja,550).
tenis(puma,medianos,verdes,900).
tenis(nike,grandes,rojos,1100).
tenis(adidas,medianos,negros,1000).
tachones(puma,chicos,rojos,400).
tachones(nike,medianos,negros,1250).
tachones(adidas,chicos,morados,980).
(esta es nuestra ultima parte del programa que despues de terminar la parte clauses que es la parte logica continuamos con esta que es donde llenamos los datos los cuales son (marca,talla,color,precio) que vamos a registrar para cuando quieramos hacer nuestra consulta, al final de cada sentencia debe llevar un punto que le indica a prolog que hasta ahi termina el dato.)

Ahora les mostrare una impresion de la pantalla donde pedi los datos para una consulta.


Como podemos observar en esta imagen yo pedi haber si habia ropa de que talla, que marca y que colores y me los desplego todos pero si observan un detalle es una rayita que quiere decir esa rayita es el espacio de precio que cuando nosotros no queramos saber el precio u otra opcion de las que nos dan tenemos que dejar el espacio con una rayita y no saltarnolo porque en este lenguaje es muy importante la sintaxis al hacer el programa y al correrlo también si no ponemos esa rayita nos marca error.


Esta es otra ves lo mismo de arriba pedimos lo mismo pero si se dan cuenta ahora pusismos toda la palabra de lo que queriamos consultar, pero aguas hay que tener cuidado con la sintaxis las palabras que van dentro del parentesis tienen que llevar la primera letra mayuscula si no de lo contrario nos marcaria error y no nos despliegaria lo que queriamos consultar y como ven es una cosa minima pero muy importante, que quiere decir el goal pues eso es mas que nada lo que nos indica donde empezamos a teclear nuestra peticion y al terminar nos vuelve aparecer para hacer de nuevo otra consulta.



En esta imagen es para mostrarles las consultas ya buscando, que playeras tienen, tenis y tachones es mas que nada un ejemplo.


Por ultimo en esta imagen lo que yo estoy consultando o preguntando a prolog es primero que si hay ropa nike y me dijo que si, despues le pregunte que si habia ropa mediana y tambien dijo que si, luego le pregunto que si tiene ropa rosa y me dijo que no por lo que no hay y de igual forma me dijo que no habia ropa de 1500, por ultimo le pregunte que si tenia ropa adidas negra y me dijo que si.

Bueno eso es todo espero les sirva de algo y puedan entenerle de lo contrario alguna duda pues diganme y hare lo posible por respondersela =)

Reporte 4

Lenguajes Funcionales









Scheme

Aqui les dejo un pequeño programa en scheme muy basico pero para que entiendan mas o menos de que se trata este lenguaje.

#lang scheme //en esta linea la tenemos que ingresar para poderlo compilar en el DrScheme.//

(define (fibonacci n) //aqui es donde mas que nada definimos la variable que vamos a buscar que es n.//

(if (or ((= n 0)0) ((= n 1)1)) //aqui abrimos la condicion principal que es if que nos sirve para validar al ingresar un numero si es 0 o 1 va tomar el valor de 1.//

1// es el valor que retornamos en caso de ser 0 o 1.//

(+(fibonacci (- n 1)) (fibonacci ( - n 2))))) // en cambio si los valores no son 0 ni 1 va hacer esta operacion que sumara los 2 valores que estan antes del numero que ingresamos.//



Lenguaje Funcional R
Este lenguaje es interpretado y solo tienes que meter el comando y ya te da el resultado sin tener que hacer el ejecutable y mas que nada es nombrado lenguaje funcional porque tiene muchas funcionalidades que les dare ejemplos de algunas de estas.

Les ire explicando algunas funciones de R

Primero tenemos que abrir R para despues empezarlo a usar.

un ejemplo muy sencillo y basico es el de suma y resta

Suma
> 3+5
[1] 8

Resta
> 5-3
[1] 2

Multiplicacion
>2*2
[1] 4

Para elevar a algun numero es de la siguiente manera.
> 4^2
[1] 16

Raiz Cuadrada en este ya usamos como un comando que es llamado sqrt.
> sqrt (4)
[1] 2

Para sacar el exponencial de un numero en este usamos el comando que es exp.
> exp (2)

Tambien podemos sacar el logaritmo de un numero y su comando es el log.
> log (3)
[1] 0.47712

Pero tambien podemos juntar las operaciones que necesitemos y realizarla pero para esto necesitaremos de parentesis para que realize cada una de las operaciones y no se brinque ninguna.
por ejemplo:
>(3+3)*(log (2)) +4
[1] 5.80617

En R tiene muchas funcionalidades mas como tambien puede crear vectores y hacer cualquier operacion.
por ejemplo
> x <- c (2,3,4) // en este creamos el vector x de 3 valores.//
> x // nos esta pidiendo que ingresemos el nombre del vector.//
[1] 2 3 4 //ahora si nos imprime el vector //
> y <- c (1,2,3) // ahora creamos otro vector que es y de 3 valores.//
> y
[1] 1 2 3
> x + y // va sumar los 2 vectores que anteriormente habiamos declarado.//
[1] 3 5 7 // se suma el primer valor con el primero, el segundo con el segundo y el tercero con el tercero y asi susesivamente si tenemos mas valores.//

>x*y // podemos multiplicar tambien //
[1] 2 6 12 // es la misma sucesion de la suma.//
asi podemos tambien restar dividir entre otras operaciones pero tambien podemos usar otros comandos para otras cosas como son los siguientes.

>suma (x) // va sumar todos los valores del vector x//
[1] 9 // es el resultado//

>max (y) // es para saber cual es el numero mayor en el vector de y.
[1] 3 // que claro es el tres//

>min (x) // es para saber cual es el valor minimo del vector x.
[1] 2 //resultado//


Tambien podemos hacer matrices en este lenguaje.
Vamos a utilizar los mismos 2 vectores de arriba y crearemos la matriz.
> x
[1] 2 3 4
>y
[1] 1 2 3
> m <- cbind (x,y); m // m va ser el nombre de la matriz y cbind es el comando para poder hacer la matriz con las 2 vectores que tenemos//
Nos quedaria de esta forma la matriz

x y
[1] 1 2
[2] 2 3
[3] 3 4

Esto fue mas que nada como un pequeño tutorial mas que nada para que vieran como sirve R en que lo podemos utilizar y tiene mas utilidades como tambien la suma de los vectores de una matriz, puede hacer graficas entre mas cosas pero lo que puse es mas que nada lo mas basico y para darles una idea de este lenguaje y que en teoria no es tan dificil porque ya como sabemos es interpretado, lo unico es aprender los comandos y como utilizarlos pero de ahi en adelante todo esta facil nomas es de hecharle un vistazo.

miércoles, 8 de septiembre de 2010

Presentacion 2

QUICK SORT

Definición:
El ordenamiento rápido (Quicksort en inglés) es un algoritmo basado en la técnica de divide y vencerás, no solo nos sirve para organizar una lista de datos desorganizados, si no también, para optimizar el tiempo que se ocupa en realizar esta labor, ya que permite ordenar "n" elementos en un tiempo proporcional de O(n log n), lo cual es muy eficiente.

Funcionamiento:
Primero tenemos que elegir un elemento al azar al que llamaremos pivote.
Después de elegir el pivote analizaremos y empezaremos acomodarlos de tal manera que los elementos menores al pivote van del lado izquierdo y los mayores del derecho :

elemento < pivote ="">
elemento > pivote = Derecha
De esta forma obtendremos la posición del pivote elegido y a partir de ahí ordenaremos los demás elementos que del pivote se dividen en 2 sublistas las cual de igual manera elegimos un pivote y lo ordenamos como la primera ves y así sucesivamente se irán dividiendo en 2 sublistas pero cada ves menores lo haremos siempre que tenga mas de un elemento y después ya nos queda ordenada.






Mejor y Peor Caso:
En el mejor caso, el pivote termina en el centro de la lista, dividiéndola en dos sublistas de igual tamaño. En este caso, el orden de complejidad del algoritmo es O(n·log n).
En el peor caso, el pivote termina en un extremo de la lista. El orden de complejidad del algoritmo es entonces de O(n²). El peor caso ocurre en listas que se encuentran ordenadas, o casi ordenadas. Pero principalmente depende del pivote, si por ejemplo el algoritmo implementado toma como pivote siempre el primer elemento del arreglo, y el arreglo que le pasamos está ordenado, siempre va a generar a su izquierda un arreglo vacío, lo que es ineficiente.
Pseudocódigo:

funcion quicksort(arreglo)

variables lista, menor, mayor, elemento

if longitud(arreglo) ≤ 1

return arreglo

else

//seleccionar un valor pivote en el arreglo

for each elemento en arreglo

if elemento < pivote entonces añadir “elemento” a menor

else añadir “elemento” a mayor

return concadenar_lista(quicksort(menor), pivot, quicksort(mayor))