martes, 31 de agosto de 2010

Serie fibo y factorial recursivamente

este es mi codigo recursivo de la serie fibo y factorial de la clase.
#include <stdio.h>

int recur(int x) {
  if(x==1){
    return 1; 
  }else{
    return (x * recur(x-1));
  }
}

int fibona(int x){
  if(x==1) {
    return 1;
  }
  if(x==0) {
    return 0;
  }
  return fibona(x-1)+fibona(x-2);
}

int main(void) {
  int x;
  printf("dame un numero\n");
  scanf("%d", &x); 
  printf("%d fibo %d\n", x, fibona(x));
  printf("%d! %d\n",x, recur(x));

  return 0;
}


Descarga Aqui

miércoles, 25 de agosto de 2010

Algunos scripts

Hola!, esta entrada es para laboratorio de lenguajes de progra.

Python
Lenguaje scriping  con sintaxis comoda para el programador multiparadigma, es de codigo abierto.

Calcular el factorial de forma recursiva.

#!/usr/bin/python

def factorial(N):
    if N == 1: 
        return 1
    else: 
        return N * factorial(N-1)

Numero = int(input("Ingresa el numero:"))
x = factorial(Numero)
print "la respuesta es :", x 


Lo puedes descargar de aquí
Hay que tener en cuenta que si leen el manual, en python es muy importante los espacios, para esto emacs con simplemente teclar el tab te los pone.
Manual de Python


Javascript
Se utiliza en html, por lo que a diferencia de los demás, no utilizamos el terminal para interpretarlo lo que hice es mediante este blog inclustrarlo en la opción agregar un gadget en la pestaña diseño, incluso pueden encontrar el primer ejemplo en la entrada del blog.



Crea botones en tu pagina con hipervinculos.










Puedes descargar el codigo aqui.

otro javascript
Te pide usuario y contraseña




Usuario:

Contraseña:





Usuario:

Contraseña:





Pueden descargar el codigo aqui.


Espero que mi explicación les sirva, si tienen algún comentario acerca de esta entrada, espero me digan ya que estoy abierto a cualquier error.

Lenguajes de scripting

Hola! para la tarea de lenguajes de progra les pongo los ejercicios que realizé.

AWK
Lenguaje de scrpting para procesamiento de texto, en donde lo divide por columnas.

Para realizar el siguiente ejemplo, utilizé este lenguaje de programación ya que está diseñado para procesar datos basados en ficheros, entonces, de un archivo .dat de captura de encuesta, ordenarlo según el porcentaje obtenido.

Aqui tenemos un fichero con una lista de datos.

Escribimos en el terminal.
awk '{ print $1, $2 | "sort -r > resultados.dat" }' resultados.dat
Lo que hace es ordenarlo y guardarlo en el mismo resultados.dat, para visualizar el archivo ponemos
awk '{print $1, $2}' resultados.dat

Manual de AWK 
¿Que es AWK?


Sh
Lenguaje de scripting que tenemos comunicación en la terminal optimizando las tareas de esta, seleccione este lenguaje de programación para realizar tareas, como el ejemplo siguiente en el que se determina el numero mayor de dos números tecleados.
#!/bin/sh

echo "Determina el mayor de los numeros enteros"
echo "Digita el primer numero" 
read var1
echo "Digita el segundo numero" 
read var2

if [ $var1 -gt $var2 ]
then
echo "El mayor es $var1"
fi

if [ $var2 -gt $var1 ]
then
echo "El mayor es $var2"
fi

if [ $var1 -eq $var2 ]
then
echo "Son iguales"
fi

NOTA que no se utiliza el == al comparar en el if y que se termina con fi.
recuerda que para poder correrlo  necesitamos primero darle los permisos
con
chmod u+x ejemplo1.sh

Descargalo Aqui
Manual de SH


Perl
Lenguaje de scripting popular en que está influido por C, algunas veces se presentan dificultades al leerlo por el programador en el ejemplo siguiente hice un programa que cambia la moneda mexicana en dolares, euros o libras.
#!/usr/bin/perl

my $cambio;
my $pesos;
my $op;
  
use Switch;

print "Hola! dime que quieres cambiar!\n";
print "1.-Dolares\n";
print "2.-Euro\n";
print "3.-Libra\n";
chomp($op = <>);

switch($op) {
  case "1" {
    print "Ingrese los pesos ";
    chomp($cambio = <>);
    $cambio = $cambio * 12.95;
    print  $cambio;
    print " Dolares\n";
     }

  case "2" {
    print "Ingrese los pesos ";
    chomp($cambio = <>);
    $cambio = $cambio * 16.44;
    print $cambio; 
    print " Euros\n"; 
     }

  case "3" {
    print "Ingrese los pesos ";
    chomp($cambio = <>);
    $cambio = $cambio * 20.36;
    print $cambio;
    print " Libras\n";
     }
  
NOTA este script no me funcionaba hasta que utilizé gracias a la profe la función chomp para poder obtener el resultado, ya que si no obtenía el enter al teclear en vez del numero.
lo que hace esta funcion es eliminar cualquier caracter del final de una cadena, en este caso el enter, si quieres saber mas sobre esta función has clic aqui.



Descargalo Aqui
Manual de PERL

Python
Lenguaje scriping  con sintaxis comoda para el programador multiparadigma, es de codigo abierto, es un ejemplo en el que se calcula la resistencia de un dispositivo.
#!/usr/bin/python

print "Obtener la resistencia\n"
volt = float(input("Teclea el voltaje del dispisitivo :"))
inten = float(input("Teclea la intensidad del dispositivo :"))

resi = volt / inten

print "La resistencia es"
print resi
print "unidad OHMS"


Descargalo Aqui!
Puedes ver mi blog de Programación web, en donde actualizaré utilizando este lenguaje script
Manual de Python

Espero que mi explicación les sirva, si tienen algún comentario acerca de esta entrada, espero me digan ya que estoy abierto a cualquier error.

domingo, 22 de agosto de 2010

Preprocesadores

Hola nuevamente, en esta entrada adjunto la clase de preprocesadores de esta semana. 








Si quieres descargar esta presentación haz clic aqui

Pueden observar las presentaciones de mi compañero Roberto Crispin quien hablará también acerca de este tema.


Espero que mi explicación les sirva, si tienen algún comentario acerca de esta entrada, espero me digan ya que estoy abierto a cualquier error.

miércoles, 18 de agosto de 2010

Comandos terminal

Hola nuevamente, en esta entrada escribiré sobre algunos comandos de la terminal que son útiles para nuestra clase de laboratorio de lenguajes de programación, voy a escribir los que creo son los mas básicos y nos ayudaran a lo largo de el curso.

En linux es muy importante saber el uso de los comandos en el terminal ya que así podemos llegar a cosas que no podemos acceder desde un entorno grafico aparte de hacer las cosas con mas rapidez.

Para empezar cuando nosotros inciamos en el terminal aparece algo como
roberto@laptop: ~$ esto se le llama prompt del sistema.

El comando pwd nos dice la ruta en donde nos estamos moviendo.
Para cambiar de carpetas utilizamos cd en donde por ejemplo si queremos ir a un lugar en especifico podemos decir cd /uno/otro, si queremos ir a el directorio actual cd. , un directorio anterior cd .., cd solo te lleva a home y cd - , te lleva a el ultimo directorio donde estuviste.

Para crear un directorio nuevo, utilizamos mkdir, para borrarlos rm "carpeta", puedes poner rm -r "carpeta" y borras cualquier subcarpeta.

Para copiar archivos utilizamos el comando cp unacarpeta/archivo_origen otracarpeta/archivo_destino,
para mover archivos utilzas, mv archivo_mover unacarpeta/otracarpeta.

Ahora bien, para ver un listado de archivos utilizas el comando ls, si lo pones solo te pone la lista del directorio donde estas localizado, podemos combinarlo utilizando -a para ver todos los archivos, incluyendo los ocultos, -R nos da un listado recursivo, -l muestra los permisos de ficheros y ultimo acceso, -s para ver el tamaño de cada fichero.

Bueno estos son los comandos que considero mas importantes, claro que hay mas asi que les dejo una liga a un diccionario de comandos de linux.


Enlace.

y tambien les dejo un enlace de una guia de refencia en español

Enlace.

Espero que mi explicación les sirva, si tienen algún comentario acerca de esta entrada, espero me digan ya que estoy abierto a cualquier error.

Codigo java Casino

Hola!, en esta entrada publicaré un codigo en java de un juego de casino.
 

import java.util.*; 

public class Casino {
    
    public static final Random RNG = new Random();

    public static void main(String[] args){
    Scanner sc = new Scanner(System.in);
    Scanner op = new Scanner(System.in);
    int juego, puntos;
    int tabla[][] = new int[3][3];
    int opcion = 1;
    int i, j;

    System.out.println("Hola!, Bienvenido a al juego Ruina\n");
    System.out.println("\t\tIngrese los puntos que desea apostar\n");
    System.out.println("\t\tCada juego apostara 10 puntos de los que ingreso\n");
    System.out.println("\t\tSi gana horizontal, vertical o diagonal usted\n");
    System.out.println("\t\tva ganar 5 puntos, de lo contrario\n");
    System.out.println("\t\tperdera 10 puntos\n");
    System.out.println("\t\tSuerte!!!\n");
    puntos = sc.nextInt();//lee los puntos o creditos
    
    while(opcion != 0 && puntos > 9) { //si se quiere salir o ya no tiene suficientes puntos
        puntos = puntos - 10;
        for(i=0; i<3;i++) { //añade los valores random
        for(j=0;j<3;j++) {
            tabla[i][j]= 1 + Casino.RNG.nextInt(3);
    }
        }


        for(i=0;i<3;i++){ //imprime en terminal la tabla
        System.out.print("\t\t\t\t|---|---|---|\n");
        System.out.print("\t\t\t\t");
           for(j=0;j<3;j++){
           System.out.print("|  " + tabla[i][j]);
           }
           System.out.print("|\n");
        }
        System.out.print("\t\t\t\t|---|---|---|\n\n\n");    

    if(tabla[0][0]==tabla[1][0]&&tabla[1][0]==tabla[2][0]){ //verifica si gana o no
          System.out.println("\t\tHaz ganado 5 puntos!\n");
          puntos = puntos + 5;
        } 
        if(tabla[0][1]==tabla[1][1]&&tabla[1][1]==tabla[2][1]){
           System.out.println("\t\tHaz ganado 5 puntos!\n");
           puntos = puntos + 5;
        } 
        if(tabla[0][2]==tabla[1][2]&&tabla[1][2]==tabla[2][2]){
           System.out.println("\t\tHaz ganado 5 puntos!\n");
           puntos = puntos + 5;
        } 
        if(tabla[0][0]==tabla[0][1]&&tabla[0][1]==tabla[0][2]){
           System.out.println("\t\tHaz ganado 5 puntos!\n");
           puntos = puntos + 5;
        } 
        if(tabla[1][0]==tabla[1][1]&&tabla[1][1]==tabla[1][2]){
           System.out.println("\t\tHaz ganado 5 puntos!\n");
           puntos = puntos + 5;
        } 
        if(tabla[2][0]==tabla[2][1]&&tabla[2][1]==tabla[2][2]){
           System.out.println("\t\tHaz ganado 5 puntos!\n");
           puntos = puntos + 5;
        }
        if(tabla[0][0]==tabla[1][1]&&tabla[1][1]==tabla[2][2]){
           System.out.println("\t\tHaz ganado 5 puntos!\n");
           puntos = puntos + 5;
        }
        if(tabla[2][0]==tabla[1][1]&&tabla[1][1]==tabla[0][2]){
           System.out.println("\t\tHaz ganado 5 puntos!\n");
           puntos = puntos + 5;
        }
            
        if(puntos<=0){
           System.out.println("Lo siento, ya no hay credito, Hasta luego!\n");
           System.out.println("Teclea cero para salir\n");
        }else {
              System.out.println("\n\n\tLos puntos que llevas son ->" + puntos);                           
              System.out.println("\n\n\nSi no deseas seguir jugando teclea 0 (cero), sino teclea 1(uno)");
              opcion = op.nextInt();        
         }
       }
    }                 
 } 

Aqui les dejo el enlace para descargarlo

Les dejo una captura de imagen para que vean como funciona..

Espero que mi explicación les sirva, si tienen algún comentario acerca de esta entrada, espero me digan ya que estoy abierto a cualquier error.

Roberto:)

Clase 12 de ago

Hola!, en esta entrada publicaré unos links el primero es del código de piedra papel o tijera en java que lo hicimos entre Cecilia Urbina y yo la clase pasada.

Piedra papel o tijera 

Y Este otro link, es un programa que imprime simplemente la serie fibo.

Serie fibo

Esperamos que les sirva

Roberto:)

lunes, 16 de agosto de 2010

Semana 3: Lenguaje de programacion GO

Hola de nuevo, en esta entrada escribiré acerca del lenguaje de programación GO de la compañia google.

Mascota de lenguaje GO

Resumí sobre los aspectos que considero importantes sobre este lenguaje.
  • GO es un lenguaje de programación relativamente nuevo, apareció el año pasado.
  • Está inspirado el lenguaje C, aunque también incluye algunos elementos de Python, así como de Pascal entre otros.
  • Sus diseñadores mas importantes son Robert Griesemer, Rob Pike y Ken Thompson.
  • El paradigma de programación es imperativo y concurrente.
  • Está diseñado para resolver problemas para aprovechar al máximo los procesadores de múltiples núcleos, así como para navegadores Web y para la programación orientada a objetos.
  • Actualmente solo se puede compilar en los SO de Linux y Mac.
  • La compañía Google, crea este lenguaje pretendiendo ser eficiente para nosotros como futuros programadores.

Aqui les dejo el link del manual "Learning GO!"



El Compilador. 
Bueno pues yo batalle un poco en instalar el compilador y al final lo he logrado, aqui les pongo los pasos que yo hice para instalarlo en ubuntu.

Primero tienes que poner en el terminal.

gedit ~/.bashrc

Se te abre un archivo al cual le tienes que poner estas lineas.


export GOROOT=$HOME/go
export GOOS=linux
export GOARCH=386
export GOBIN=$HOME/bin
export PATH=$PATH:$GOBIN

Nota que en la tercera linea, puede ser cambiado según la arquitectura de tu procesador,  si es amd64 o arm, para mi computadora era el 386.

Guardas el archivo y pones esto en el terminal

source ~/.bashrc 

Ahora creamos un directorio

mkdir $GOBIN

Ahora vas  instalar Mercurial que es el cliente para controlar las versiones.

 sudo apt-get install mercurial

Instalas estos paquetes.

sudo aptitude install bison gcc libc6-dev ed

Descargas  

hg clone -r release https://go.googlecode.com/hg/ $GOROOT

luego compilas lo descargado

cd $GOROOT/src
./all.bash

Al finalizar deberá decir

— cd ../test
0 known bugs; 0 unexpected bugs

Pero a mi computadora, me aparecía 1 known bugs, según investigué ese numero varia por la versión.

Ahora ya haz instalado el compilador, para probarlo puedes hacer un pequeño programa como el conocido hola mundo!

package main

import “fmt”

func main() {
fmt.Printf(“Hola mundo!!\n”);
}

Para compilar lo unico que tienes que hacer es abrir la terminal y poner

8g hola.go

luego

8l hola.8

después para ejecutar

./8.out

nota que el numero 8 puede cambiar segun la arquitectura de computadora.

amd64 = 6.
386 = 8.
arm = 5.

y tendras la salida en el terminal con el texto "Hola mundo!".

Ejemplo en lenguaje GO

Cuenta longitud de una cadena y la serie fibo en GO
package main

import "fmt"

func main() {
        cadena := "Esta..es..una..prueba..GO!"
        fmt.Printf("La cadena: \n%s\nTiene una longitud: %d\n", cadena, len([]byte(cadena)))

    var a int
    var b int
    var c int
   
    b = 0
    c = 1   

    fmt.Printf("Ahora va la serie fibo :)...\n")   

    for n := 0; n < 20; n++ {
        a = b + c
        c = b
        b = a
        fmt.Printf("%d ,", a)
    }
}

Aqui les dejo el link de el código fuente
 
Aqui les dejo tambien el link del sitio web de GO, pueden encontrar mucha información.

También les dejo un vídeo de la presentación del lenguaje, incluso pueden ponerle subtítulos en español




Si tienen algún comentario acerca de mi publicación, espero me lo hagan saber ya que estoy abierto a cualquier error.

Roberto :)



miércoles, 11 de agosto de 2010

Emacs

Hola compañeros, esta entrada va dedicada al laboratorio de lenguajes de progra, tambien con la Dr. Elisa, en esta ocasion hablaré acerca de emacs, que fue lo que practicamos el laboratorio de la semana pasada, (jueves 5 de agosto 2010).

Para empezar, yo en lo particular no lo conocía, y me puse a investigar sobre el tema.

Existen muchos editores de texto en la plataforma linux, pero uno de los mejores que existe para programar, se encuentra emacs, ya que tiene muchisimas funciones que nosotros como futuros programadores, podemos sacar al maximo, este editor de texto fue creado por Richard Stallman, en el año de 1975, aqui mostrare lo que aprendido sobre esta aplicacion.

Para instalarlo es muy sencillo, simplemente abres tu terminal en tu sistema operativo ubuntu y escribes.


sudo aptitude install emacs 

te mostrará algo asi.

Despues de finalizar, escribes emacs en el terminal y aparece la pantalla de inicio.
Si deseas abrir un nuevo archivo escribe: emacs nuevo.txt
Si deseas editar uno existente escribe: emacs yaestaenc.txt
son ejemplos.

Para ser un programador eficaz en necesario utilizar lo menos posible el mouse o trackpad, asi que podemos utilizar comando como los que vimos en clase.

Hay infinidad de comandos, aca les dejo un link de una lista de comandos.
 Lista 

Les dejo un manual de emacs
manual

Tambien encontre el guide tour traducido al español
Visita guiada

Espero que mi entrada sea util para los compañeros que todavia no han instalado emacs, y aprender juntos sobre este poderoso editor.

Si tienen algún comentario acerca de mi publicación, espero me lo hagan saber ya que estoy abierto a cualquier error.

Modelo OSI

En esta entrada publicaré acerca del modelo OSI, del cual no lo conocia y decidi informarme sobre lo que se trata.

¿Que es un modelo OSI?
Es el modelo de referencia de interconexión de sistemas abiertos, por sus siglas en ingles Open System Interconection, es el que admite que las computadoras se conecten e operen, fue hecho por la ISO que es la que se encarga de los estándares internacionales, para poner un orden entre las computadoras, al momento de trasmitir los datos.

Este modelo cuenta con 7 niveles o capas:


Clic para agrandar


En esta entrada, resumiré a lo que interviene cada capa.

Capa de aplicación
Es la capa que esta mas próxima al usuario, la diferencia de esta capa es que, no da servicio a otro nivel, estas son aplicaciones de red que usamos para trasladar las aplicaciones del usuario, podemos decir algunos ejemplos como FTP, Mail o Telnet, entonces estos son los programas que nosotros vemos.

Capa de presentación
Esta capa es  la manera en que los datos se interpretan en una computadora, como sabemos es tratada de forma binaria, entonses en la capa presentación se hacen adaptaciones para que se presente de manera mas accesible y fácil, tenemos códigos como ASCII y EBCDIC, que procesa los datos, en esta capa también esta los OS como DOS y UNIX.

Capa de Sesión
Es la capa encargada de crear servicios de conexiones, o sea, esto es como iniciar sesión por medio de un login para obtener recursos, administra la sesión, y la cerramos con un logout, por ejemplo tenemos NetBIOS, como protocolo de esta capa, también el RPC.

Capa de Transporte
En esta capa es en donde se asegura que cuando se entable una comunicación, sea buena y proteger todos los datos enviados, da aviso a las demás capas que es de calidad, utilizando controles de flujo, números de secuencia y reconocimientos, los protocolos TCP y UDP se encuentran en esta capa.

Capa de red.
En esta capa su principal función es hacer que lleguen los datos, utilizando dispositivos llamados routers, que se encuentran en esta capa, al igual que los firewalls, entonces podemos decir que se trata de que aquí se le da dirección por medio de IP la ruta que debe seguir.

Capa de Datos.
En esta capa de datos también llamada frame, o marco, es en donde se transfiere la información en grupos de bits, creando paquetes, preparándolos en forma binaria con su protocolo que utilizan, solo se trata con direcciones MAC para el uso de LAN y HDLC o SDLC para WAN.

Capa Físico
Este nivel es donde se regula las propiedades físicas, mecánicas y eléctricas, se encuentran los reglamentos como RS-232 o V.24, así como los tipos de conexiones como Coaxial, RJ-45, entre otros, también están todos los medios de transmisión para redes LAN, STP, fibra óptica entre otros, podemos decir que esta capa trasmite la información sobre un medio físico.

En esta imagen se resume en un ejemplo lo que es el modelo OSI.
Clic para agrandar


Y para finalizar les pongo un par de vídeos que nos puso la maestra Laura del Bosque, que explica de forma animada como funciona la red.






Son un poco viejos pero están interesantes ;)

Espero que mi explicación les sirva, si tienen algún comentario acerca de esta entrada, espero me digan ya que estoy abierto a cualquier error.

Roberto:)

lunes, 9 de agosto de 2010

Paradigmas de programación

En esta entrada, publicaré acerca de lo que son los paradigmas de programación, ya que vi que algunos de mis compañeros tenían dudas y decidí informarme sobre esto.




Para iniciar debemos de plantear la pregunta:
¿Que es un paradigma de programación?.
Podemos decir que es una clasificación de lenguajes de alto nivel dividida según el objetivo del problema que se necesite programar.

Se divide en cuatro que son:
  1. Imperativos.
  2. Lógicos.
  3. Funcionales.
  4. Orientado a objetos.

El mas conocido de estos paradigmas es el imperativo, un lenguaje de los mas representativos, como hemos visto en otras materias es el C, aunque también existe Pascal, FORTRAN, GO! entre otros.
Este paradigma se basa en procedimientos, o sea, dar instrucciones para que realice algo, su característica es el uso de comandos y variables, inició entre los años 50's.

El paradigma lógico o también llamado declarativo es el contrario del imperativo ya que describe como es el problema para encontrar la solución, dejando impreciso un conjunto de instrucciones que seria el algoritmo. el lenguaje mas popular de este paradigma es el PROLOG.

Por otra parte, tenemos el paradigma funcional, que su característica es usar expresiones y funciones, este lenguaje utiliza grupos de funciones hechas por otras mas simples y que cada una puedas ser “llamadas” unas entre otras para resolver cierto problema. Por ejemplo tenemos el lenguaje LISP y el ML.

El ultimo paradigma de esta clasificación es el orientado a objetos, utiliza clases, una agrupación de objetos que intervienen las mismas operaciones, en donde el objeto es una variable, es también muy popular entre los programadores, entre los lenguajes orientados a objetos, tenemos java y C++.

Espero que mi explicación les sirva, si tienen algún comentario acerca de esta entrada, espero me digan ya que puedo tener cualquier error.

Roberto :)

domingo, 8 de agosto de 2010

Semana 1: Mapa conceptual

Haz clic en la imagen para agrandar


Para elaborar este mapa conceptual, organicé las ideas vistas en clase y los relacioné entre si, pero antes de iniciar me informé en una página web, que citaré al final de esta entrada, que me parece fácil de entender.

Desde mi punto de vista, cada uno debe de crear una definición acerca de la programación, y de ahí desarrollar el mapa con los conceptos fundamentales de esta misma, incluyendo herramientas, desarrollo y los diferentes lenguajes y hacerlo de una manera sencilla de como yo entendí el tema de esta semana.

Si tienen algún comentario acerca de mi publicación, espero me lo hagan saber ya que estoy abierto a cualquier error.