¿Quien soy?

Soy Daniel Alejandro Bulnes Reyna, mi número de matricula es 1441186 y estoy inscrito en la materia de Lenguajes de programación en el horario de Martes M1 y Lab. Lenguajes de programación los Jueves a V1, las dos con la Dra. Elisa Schaeffer.



Espero que mi blog les agrade y puedan comentar en el, ya sea positiva o negativamente, y que cada dia mejoren mas los posts.



domingo, 21 de noviembre de 2010

SUPER ENTRADA 1/24 :D- LABORATORIO LENGUAJES DE PROGRAMACIÓN

Bueno como necesito un buen de puntos, espero que esto sirva para subir un poquito más eso, en este caso no se si recuerdan una imagen donde aparecían los diferentes lenguajes de programación según una linea del tiempo.




Aquí esta la imagen:


Me dedicare a hablarles un poco de cada uno y pues así sabremos quien influyo a quien para que se fueran creando más y más lenguajes, hasta completar los 24 lenguajes que vemos en esta linea.

En los años 50’s hubo grandes lenguajes que comenzaron el mundo de la programación a través de ellos, entre ellos estuvo FORTRAN, ALGOL, LISP, COBOL




Empezare con FORTRAN, este es un lenguaje de alto nivel de propósito general, procedimental e imperativo, que esta adaptado especialmente para el calculo numéricos y la computación científica.
Fue desarrollado en 1957 aunque la tabla diga que en 1954 sabemos que estuvo entre esos años, aunque ya es un lenguaje antiguo ha dominado estos campos descritos y ha estado vigente durante mas de 50 años, que como ya sabemos es uno de los mas populares en los programas que evalúan el desempeño y el ranking de las supercomputadoras
más rápidas de todo el mundo.
A Pesar de que ya tiene muchos años, este no se ha quedado con una sola versión, sino que años mas tarde vinieron las versiones actualizadas como FORTRAN 77 que ha servido de soporte para el procesamiento de datos basados en caracteres, FORTRAN 90-95 que añadió programación de arreglos, programación modular y programación orientada a objetos y el FORTRAN 2003 que nos dio base a la programación genérica. A pesar de que su sintaxis no es muy explicita, ya que es difícil escribir varias cosas, como un bucle for, y errores de escritura de solo un carácter pueden llevar a errores durante el tiempo de ejecución no de compilación. se debe de tener en cuenta que la sintaxis de este lenguaje fue más afinada para el uso en trabajos numéricos y científicos.



Aquí un manual para su programación:

http://manuales.astalaweb.com/Manuales/Fortran.asp

jueves, 18 de noviembre de 2010

Funciones Inline - Lenguajes de Programación (Puntos Extra)

Este post lo dedico a una investigación sobre las funciones INLINE que me llamo mucho la atención en un post que puso la Dra. sobre una entrada de mi compañera Anais.

De lo poco que investigue, vi que estas funciones van dedicadas mas sobre la programación orientada a objetos, y de lo que tratan es de que como estas son pequeñas nos ayudan a ahorrar mas tiempo a la hora de la compilación ya que estas declaradas como inline, se inserta en un punto del codigo donde se invoca a la función, en lugar de hacerlo en otro lugar y hacer una llamada.
Esto nos da una gran ventaja, el código de estas funciones se ejecuta más rápidamente, ya que se evita usar la pila para pasar parámetros y se evitan las instrucciones de salto y retorno. También tiene un inconveniente: se generará el código de la función tantas veces como ésta se use, con lo que el programa ejecutable final puede ser mucho más grande.

Es por esos dos motivos por los que sólo se usan funciones inline cuando las funciones son pequeñas. Hay que elegir con cuidado qué funciones declararemos inline y cuales no, ya que el resultado puede ser muy diferente dependiendo de nuestras decisiones.

Hay dos maneras de declarar una función como inline:

La primera:
Las funciones que se definen dentro de la declaración de la clase son inline implícitamente. Por ejemplo:

class Ejemplo {
public:
Ejemplo(int a = 0) : A(a) {}
private:
int A;
};

En el ejemplo hemos definido el constructor de la clase Ejemplo dentro de la propia declaración, esto hace que se considere como inline. Cada vez que declaremos un objeto de la clase Ejemplo se insertará el código correspondiente a su constructor.

Si queremos que la clase Ejemplo no tenga un constructor inline deberemos declararla y definirla así:

class Ejemplo {
public:
Ejemplo(int a = 0);
private:
int A;
};
Ejemplo::Ejemplo(int a) : A(a) {}

En este caso, cada vez que declaremos un objeto de la clase Ejemplo se hará una llamada al constructor y sólo existirá una copia del código del constructor en nuestro programa.

La otra forma de declarar funciones inline es hacerlo explícitamente, usando la palabra reservada inline. Con el mismo ejemplo que expusimos anteriormente seria asi:

class Ejemplo {
public:
Ejemplo(int a = 0);
private:
int A;
};
inline Ejemplo::Ejemplo(int a) : A(a) {}


Espero que con este ejemplo que presente en sus tres versiones de declarar este tipo de funciones haya quedado claro a lo que se refieren.


martes, 16 de noviembre de 2010

Gödel - LABORATORIO DE LENGUAJES DE PROGRAMACIÓN

En las diapositivas de la doctora nos venia hablando sobre Gödel, pero no muy a fondo, ya que era mas reelevante PROLOG.

En este caso hize una pequeñisima investigación para ver un poco de lo que es, sus caracteristicas y algun ejemplo pequeño.

Bueno pues Gödel es un lenguaje de programación más, este esta ubicado entre los declarativos, y pues tiene el proposito de adherirse al paradigma de la programación lógica.

Este lenguaje posee un sistema de modulos, nos permite enteros y racionales de precisión arbitraria y números de punto flotante.

Tiene facilidades meta-logicas que dan espacio a meta-programas que realizan analisis, transformación, compilación, verificacion y puesta a punto, entre muchas cosas más.

Bueno y un pequeño ejemplo que me permitirá explicar mejor esto es:

MODULE MCD.

IMPORT Integers.

PREDICATE                    Mcd : Integer * Integer * Integer.
Mcd(i,j,d)                        <-
                                        DivisorComun(i,j,d) &
                                       ~ SOME [e] (DivisorComun(i,j,e) & e > d).

PREDICATE                    DivisorComun : Integer * Integer * Integer.
DivisorComun              (i,j,d) <-
                                       IF (i = 0 \/ j = 0)
                                      THEN
                                          d = Max(Abs(i),Abs(j))
                                      ELSE
                                          1 =< d =< Min(Abs(i),Abs(j)) &
                                          i Mod d = 0 &
                                          j Mod d = 0.

Bueno en este ejemplo vemos en un principio que maneja el modulo que es MCD, despues importa un tipo de variable, en el predicado nos muestra como es que esta compuesto el MCD por el Integer que ya la habia importado antes, Luego nos dice que d es el MCD de i y j si es un divisor  comun de i y j y no existe e que sea tambien divisor comun de estos y sea mas grande que d. Y en la ultima parte vemos como es que lo saca, como ya comunmente lo hemos practicado antes en programas.

PROLOG - LABORATORIO DE LENGUAJES DE PROGRAMACIÓN

El Prolog (o PROLOG), proveniente del francés PROgrammation en LOGique, es un lenguaje de programación lógico e interpretado, bastante conocido en el medio de investigación en Inteligencia Artificial.


Un poco de su historia nos cuenta que fueron Alain Colmerauer y Philippe Roussel los creadores, ademas de que su primera version fue programada en ALGOL W. y este estaba diseñado para el procesamiento de lenguajes naturales.

Las primeras versiones del lenguaje diferían, en sus diferentes implementaciones, en muchos aspectos de sus sintaxis, empleándose mayormente como forma normalizada el dialecto propuesto por la Universidad de Edimburgo[6] , hasta que en 1995 se estableció un estándar ISO (ISO/IEC 13211-1), llamado ISO-Prolog.
Prolog se enmarca en el paradigma de los lenguajes lógicos y declarativos, lo que lo diferencia enormemente de otros lenguajes más populares tales como Fortran, Pascal, C o Java.

Ahora les hablare un poco sobre su programación:

Hay dos tipos de clausulas que son los HECHOS Y LAS REGLAS.

LAS REGLAS son del tipo  ALGO :- ALGO.

Esto quiere decir que la primer cosa que pongamos va a ser cierta siempre y cuando la segunda cosa exista o sea verdad.

LOS HECHOS nos explican cosas que siempre son ciertas por ejemplo :

animal (gato).  

que este nosotros sabemos que es cierto. Y este se lee el gato es un animal? a lo cual el sistema nos contestaria TRUE (verdad).

Cuando cambiamos el nombre de la variable, es decir, al preguntar ponemos animal (X).

esto se leeria que cosas son animales?

por lo cual el sistema nos daria gato.


Prolog cuenta con operadores para la unificación y comparación, sea con evaluación o sea simbólica, como los siguientes:


X is Y %unificación con evaluación.
X = Y %unificación simbólica
X=:=Y %comparación con evaluación
X == Y %comparación simbólica.

Que en el sistema lo veriamos algo asi:

?- X is 3+5.
X = 8

?- X = 3+5.
X = 3+5

?- 3+5 =:= 2+6.
yes

?- 3+5 == 2+6.
no

?- 3+5 == 3+5.
yes

LENGUAJE B - LABORATORIO DE LENGUAJES DE PROGRAMACIÓN

Bueno compañeros esta vez les redactare un poco sobre el Lenguaje B.

El lenguaje B como ya sabemos es un lenguaje de programación y pues nació en los BELL LABS, y fue un trabajo hecho en su mayor parte por Kenneth L. Thompson con contribuciones de Dennis M. Ritchie y publicado en 1969, además cabe destacar que es el anterior al Lenguaje C que la mayoria de nosotros hemos usado.

Pues B esta diseñado en el lenguaje BCPL (Basic Combined Programming Language ó Lenguaje de Programación Basica Combinado), que es un lenguaje de programación ordenado, potente y muy fácil de adaptar a diferentes arquitecturas, se popularizó en los programas de arranque de las computadoras (bootstraps en inglés) debido a sus compiladores simples y compactos, algunos con capacidad para correr en sólo 16 Kb.

En esta versión Thompson eliminó cualquier componente que el consideró prescindible de forma que cupiese en la memoria de las minicomputadoras de la época. El lenguaje también incluyó cambios de acuerdo con las preferencias de Thompson (Reducir el número de caracteres de un programa). Además solo manejaba un tipo de datos, que correspondía con una palabra de maquina.



Ejemplo:


El ejemplo siguiente es de Referencia de los usuarios a B por Ken Thompson:
/* que la función siguiente imprimirá un número no negativo, n,
a la base b, donde 2< el =b< =10, esta rutina utiliza el hecho que
en el juego de caracteres de ASCII, los dígitos 0 a 9 tienen valores
de código secuenciales. */

printn (n, b) {
extrn putchar;
automóvil a;

si (a=n/b) asignación de/*, no probar para la igualdad */
printn (a, b); /* recurrente */
putchar (n%b + “0”);
}
 
 
Referencia bibliografica.
El lenguaje de programación B, S. C. Johnson y B. W. Kernighan, CS técnico TR 8 del informe, Laboratorios de Bell (Enero de 1973). GCOS versión encendido Honeywell equipo.


lunes, 8 de noviembre de 2010

Reporte 5 - Lenguajes Lógicos - Lenguajes de Programación

Buen día compañeros, en esta entrada explicaré dos problemas, en primera instancia el problema lógico que habíamos escogido en clase, este nos planteaba:

COMIENDO EN EL RESTAURANTE. Armando, Basilio, Carlos y Dionisio fueron, con sus mujeres, a comer. En el restaurante, se sentaron en una mesa redonda, de forma que:


- Ninguna mujer se sentaba al lado de su marido.
- Enfrente de Basilio se sentaba Dionisio.
- A la derecha de la mujer de Basilio se sentaba Carlos.
- No había dos mujeres juntas.

¿Quién se sentaba entre Basilio y Armando?


Lo resolví de la siguiente manera:

1.- Primero puse la mesa como nos decia:
2.- Despues designe diferentes colores para los 4 hombres y para sus esposas...

3.- Luego senté a Basilio, y enfrente a Dionisio como decía una de las condiciones, otra de las condiciones nos decía que a la derecha de la mujer de Basilio se sentaba Carlos, pero ninguna mujer se sentaba al lado de su marido por lo cual la mujer de Basilio se sentó a la derecha de Dionisio y a la derecha de ella se sentó Carlos.


 
4.- Después como solo quedaba Armando lo senté frente a Carlos, ya que como nuevamente menciono dos mujeres no podían sentarse juntas. Después decidí sentar a la esposa de Armando y como la condición decía la mujer no se podía sentar al lado de su esposo, y como uno de los puestos de enfrente ya estaba ocupado por la esposa de basilio la sente en el otro lugar...

5.- Así fui llenando los lugares, ya que descubrí que cada mujer se sentaba enfrente y del lado izquierdo de su marido y llene los lugares hasta saber cual era la respuesta a la pregunta propuesta por el problema.

6.- Y la respuesta fue: LA ESPOSA DE DIONISIO.



Bueno y como segunda instancia hice algo en gprolog sobre una venta de computadoras en la cual solamente vamos haciendo preguntas sobre lo que es marca, precio, memoria ram, capacidad de disco duro y el porcentaje de popularidad en el mercado.

computadoras(X,Y,Z,A,B):-laptop(X,Y,Z,A,B);escritorio(X,Y,Z,A,B).


laptop(HP,8965,4,250,89).
laptop(ACER,6586,1,160,65).
laptop(DELL,7183,2,160,71).
laptop(VAIO,8521,2,250,84).
laptop(APPLE,9851,4,320,95).
escritorio(APPLE,7842,2,250,75).
escritorio (COMPAQ,6128,1,80,50).
escritorio(DELL,7542,2,250,73).
escritorio (GATEWAY,6893,2,320GB,78).
escritorio(HP,10251,4,500,98).

X=MARCA
Y=PRECIO
Z=MEMORIA RAM
A=DISCO DURO
B=POPULARIDAD EN EL MERCADO

Y luego lo ejecute en gprolog, y se vio de la siguiente manera:
 
1. Aqui fue la ejecución con el consult.
 
 2. Aquí le pregunte que si habia computadoras en la lista, y como respuesta arrojo si
 3.Aqui con sustituimos con x uno de los espacios para que nos diera las marcas de computadoras que habia:
 4. Aqui le puse que si habia computadoras hp
 5. Aqui cuales eran las opciones para las hp y cuales eran sus precios, sustituyendo la segunda variable por Y que era la del precio
 6. Aqui escogi un precio y luego le pregunte por la variable Z que era la memoria ram, y contesto 4 osea 4GB.
 7.Aqui le di los 4GB, y pregunte por la siguiente caracteristica, la respuesta fue 500 GB de disco duro
 8. Aqui le pregunte por la ultima que era 98% de popularidad, y luego pregunte por todas las caracteristicas aver si existia una, y la respuesta fue si.
 9.En esta pregunte por las 2 opciones de hp, pero poniendo las variables para que nos diera las caracteristicas de cada una.
 10. En esta le pregunte por las computadoras, como en la anterior pero en esta quitando la marca y que nos diera las 5 caracteristicas de cada una de las opciones.

 Espero y se haya visto claramente lo que se trato de hacer, recuerden que el (;) se utiliza para que te siga dando las opciones, el sistema siempre te confirma con un yes cuando haya terminado, ademas de que el archivo de texto lo hice en emacs y acuerdense que es con la extension .pro o .prolog y que al finalizar de cada pregunta que le hagan al sistema deben poner un punto para que este se los acepte.
 

jueves, 4 de noviembre de 2010

Reporte 3- Lenguajes Script

Bueno un poco atrasado pero aquí dejo los programas en lenguajes script que hice...

El primero lo hice en PERL y trata de determinar el promedio de un alumno mediante 3 calificaciones, estas tienen diferentes ponderaciones de 20%, 30% y 50% respectivamente, y después de crear el promedio se definirá su situación ya sea aprobado o reprobado.

Aquí dejo imágenes para que lo puedan ver mas explícitamente.


Bueno después hice un programa en PYTHON y su funcionalidad es darle 2 números los cuales hagan las 4 operaciones básicas (SUMA, RESTA, MULTIPLICACIÓN Y DIVISIÓN) y despues imprimir los cuatro resultados.

Esto queda así...


Y el tercer programa lo hice en SHELL  y este es un calculador de áreas de 3 diferentes polígonos (CUADRADO, RECTÁNGULO Y TRIÁNGULO) esto mediante un switch-case y escogiendo la opción es según el área que calculará nuestro programa.
Más explícitamente...