Xwork's Blog

The lord is waiting to take your hand.

Bienvenido el 2021

No hay comentarios.

 Hola de nuevo a todos, el dia de hoy solo escribo para desearles a todos un buen año 2021, es cierto que el 2020 fue un año complicado, pero si nos sirve de consuelo a todos, el 2021 podrá ser peor (o no). Cómo es costumbre, continua visitando el blog de XWork y disfrutemos del tiempo que tenemos porque en un instante se puede acabar.


Saludos y nos seguimos leyendo.

No hay comentarios. :

Publicar un comentario

Vamos a programar #92 - El triangulo de Pascal (ver. C)

No hay comentarios.

 Hola de nuevo a todos, el día de hoy vamos a ver cómo hacer un programa en C que calcule el triangulo de Pascal.


Cómo podrás recordar, hace unos día publiqué una version en Python; y tal cómo lo prometí justo antes de acabar el 2020, les traigo la versión en C. Cómo la explicación de que es el triangulo de Pascal se incluye en ese post (además de cómo hacer los cálculos a mano), simplemente pasaremos al código fuente. Al igual que el código en Python, vamos a calcular el triangulo de Pascal de manera recursiva y si surgen dudas las resolveremos en los próximos post

El código en C que sirve para calcular el triangulo de Pascal es el siguiente ():


// Prueba del triangulo de pascal en C

#include <stdio.h>
#include <stdlib.h>

int *CalculateLevel(int Level)
{
    int *Result;
    Result  = (int *)malloc(Level * sizeof(int));
        
    if (Level == 0)
         *Result = 1;
    if (Level == 1)
    {
        *Result = 1;
        *(Result + 1) = 1;
    }
    if (Level > 1)
    {
        int *ResultP = CalculateLevel(Level - 1);
        for (int i = 0; i < Level; i++)
        {
            if (i == 0 || i == Level - 1)
                *(Result + i) = 1;
            else
                *(Result + i) = *(ResultP + i) + *(ResultP + i - 1);
        }
    }
    return(Result);
    
}

void DrawPascalTriangle(int Number)
{

    if (Number > 20)
    {
        printf("Solo se admiten 20 niveles");
    }
    else
    {
        for (int i = 0; i < (Number + 1); i++)
        {
            int *Result = CalculateLevel(i);
            for (int j = 0; j < i; j++)
            {
                printf( " %5d ", *(Result + j));
            }
        printf("\n");
        }

    }
}


int main()
{
    int Levels;
    printf("Numero de niveles\n");
    scanf("%d", &Levels);
    DrawPascalTriangle(Levels);

    return 0;
}



Y bien, cómo podrás notar, resulta un poco sencillo portar programas de un lenguaje a otro, si tienes dudas de cómo funciona el programa puedes escribir aquí o en mi twitter. Cómo de costumbre puedes descargar el código fuente de mi Dropbox para que lo pruebes, pero ademas puedes verlo funcionar en linea gracias a los compiladores web.

Los leo luego.

No hay comentarios. :

Publicar un comentario

Vamos a programar #91 - EL triangulo de Pascal (ver. Python)

No hay comentarios.

 Hola de nuevo a todos, el día de hoy vamos a ver cómo hacer el triangulo de pascal usando Python.




Hace unos días mientras leía los comentarios, alguien sugirió que hiciera un programa que calculara el triangulo de pascal y ya que ando un poco corto de ideas, decidí hacerlo. Pero antes de continuar, veamos que es el triangulo de pascal.

En las matemáticas, el triángulo de Pascal es una representación de los coeficientes binomiales ordenados en forma de triángulo. Es llamado así en honor al filósofo y matemático francés Blaise Pascal, quien introdujo esta notación en 1654, en su Traité du triangle arithmétique.1​ Si bien las propiedades y aplicaciones del triángulo fueron conocidas con anterioridad al tratado de Pascal por matemáticos indios, chinos, persas, alemanes e italianos, fue Pascal quien desarrolló muchas de sus aplicaciones y el primero en organizar la información de manera conjunta.2​


El triángulo de Pascal se puede generalizar a dimensiones mayores. La versión de tres dimensiones se llama pirámide de Pascal o tetraedro de Pascal, mientras que las versiones más generales son llamadas simplex de Pascal.

Wikipedia/Triangulo De Pascal

 La composición del triangulo de pascal es realmente simple, en la cima del triangulo, siempre ubicaremos un uno, de hecho en todas las orillas pondremos un uno de modo que en cada nivel haya tantos número cómo el nivel en el que estamos. Para el nivel dos, ya que solo hay extremos en ambos se pondrá un uno.

Para calcular los números del tercer nivel, imaginemos que tenemos tres lugares, los extremos deben de llevar el número uno, por lo que solo nos hace falta determinar el que esta en el lugar dos. Para hacerlo de manera "sencilla" debemos de revisar el nivel anterior y debemos de sumar el numero que esta en la misma posición que el numero que queremos saber (DEL NIVEL ANTERIOR), y sumarlo con el que inmediatamente antes. Para darnos una idea, miremos la siguiente imagen.


Si revisamos bien, nos ubicamos en el nivel tres, pero el numero que queremos saber es el que esta en el segundo lugar del tercer nivel (marcado con una X), entonces tenemos que tomar el numero del nivel anterior que esta en las misma posición que nuestro numero, en la imagen podemos apreciar que el número que esta en la segunda posición del nivel dos es uno y el numero que esta antes en el nivel dos, también es uno, por lo que tendríamos que el segundo numero del tercer nivel es igual a uno mas uno, por lo tanto su valor es dos.


Ahora a manera de ejemplo calculemos el valor de los números en el nivel 4, para eso imaginemos que tenemos algo cómo la imagen que sigue.


Solo tendríamos que determinar X y Y. Para X ya que está en la posición dos del cuarto nivel, tomaríamos los números en la posición dos y uno del tercer nivel y tendríamos cómo resultado 3




Para calcular el numero Y, simplemente hacemos lo mismo. Tomamos el tercer y segundo número del nivel tres y simplemente lo sumamos obteniendo otro tres.


Así podemos calcular cualquier nivel.


Entonces en python podemos crear código cómo el que sigue:


# Prueba del triangulo de pascal en python
def CalculateLevel(Level):
    Result = {}
    if Level == 1:
        Result[0] = 1
    if Level == 2:
        Result[0] = 1
        Result[1] = 1
    if Level > 2:
        ResultP = CalculateLevel(Level - 1)
        for i in range(Level):
            if (i == 0) or (i == Level - 1):
                Result[i] = 1
            else:
                Result[i] = ResultP[i - 1] + ResultP[i]
    return Result
 
def DrawPascalTriangle(Number):
    if Number > 20:
        print("Solo se admiten 20 Niveles")
    else:
        for i in range(Number + 1):
            Result = CalculateLevel(i)
            for j in range(len(Result)):
                print(Result[j], end = '  ')
            print()
    


if __name__ == "__main__":
    import sys
    DrawPascalTriangle(int(sys.argv[1]));


El código consta de dos funciones, la primera de ellas es "CalculateLevel(Level)" y cómo su nombre lo sugiere, calcula los valores para el nivel actual, recibe un parámetro numérico que indica cual es el nivel que queremos calcular. En el algoritmo anterior, vimos que cuando el triangulo consta de un nivel, el valor es uno por lo que creamos una condición y si el nivel solicitado es uno, en un arreglo agregamos un valor de uno. Si la variable "Level" es dos, hacemos lo mismo, solo que agregamos otro valor de uno. Para cuando el valor es mayor que dos, lo primero que hacemos es llamar de forma recursiva a "CalculateLevel" pero usando cómo parámetro el valor de "Level" menos uno así obtenemos el nivel anterior, después hacemos un iterador para recorrer todos las posiciones del nivel y dentro de el primero hacemos una comparación y si el valor del iterador corresponde al primer o al ultimo elemento le asignamos el valor de uno, en caso contrario hacemos los calculo usando el valor del iterador para asignar el valor a la posición actual usando los valores del nivel anterior (cómo explicamos antes). Finalmente devolvemos el valor de la variable "Result" que es donde almacenamos los valores

Después creamos la función "DrawPascalTriangle(Number)" que sirve para "dibujar" el triangulo, ya que la consola suele ser pequeña, si el parámetro "Number" es mayor a 20 escribimos un mensaje diciendo que solo se admiten 20 niveles en caso contrario, hacemos dos iteradores, uno que va a recorrer de uno hasta el nivel dado y a su vez calculará cada nivel y el otro que imprimirá en pantalla todos los valores en cada nivel.

Cómo podrás ver el código es realmente sencillo, para usarlo, simplemente debes de ejecutarlo desde la consola pasando cómo parámetro el valor del nivel hasta el cual quieres calcular
pascaltri.py 20
Y bien por ahora es todo, cómo de costumbre puedes descargar el código de mi dropbox para que lo pruebes antes de que acabe el año voy a publicar las versiones en pascal, en c y probablemente en C# o Javascript.

Los leo luego.

No hay comentarios. :

Publicar un comentario

Vamos a programar #90 - La sucesión de Fibonacci y la función de Ackerman (ver. Python)

No hay comentarios.

 Hola de nuevo a toos, el dia de hoy vamos a ver un poco de Python. En días anteriores, mientras revisaba algunos comentarios en twitter, aalgunas personas me preguntaron sobre el estado del blog, pese al que el estado actual ha empeorado un poco debido a cierto bicho, el hecho fue que un par de "accidentes" me impidieron crear nuevos post. Pero dejando eso de lado, mucha gente pidio que si les podia ayudar con python (si hacemos memoria, casi no hay programas hechos en éste lenguaje), y la razon principal es debido a que simplemente lo olvide (conste que ya lo habia mencionado en algun post). Para probar que aun estoy al pendiente, decidi hacer un par de programas con (segun google) las busquedas mas gfrecuentes relacionadas a python que conducian a mi blog.



Los números de Fibonacci.

La version en C del los número de fibonacci la puedes encontrar en el siguiente post. Además incluye una pequeña anotación sobre que es. Ambas versiones son similares y sirven para hacer énfasis en cómo es posivble traducir de un lenguaje a otro cuando se trata de programas simples.
El programa en pyton que calcula la sucesión de Fibonacci es el siguiente.

def CalcFibonacci(Number):
    v1 = 0
    v2 = 1
    v3 = 0
    
    while v1 < Number:
        print(v1)
        v3 = v1 + v2
        v1 = v2
        v2 = v3


if __name__ == "__main__":
    import sys
    CalcFibonacci(int(sys.argv[1]))

Cómo podrás observar, el código es realmente sencillo y mucho mas practico que la versión que C ya que no hay que compilarlo cada vez. Para ejecutarlo, solamente deberás de ejecutarlo desde una consola escribiendo el nombre del script seguido del parámetro (que será el número hasta donde queremos llegar)

Fibonacci.py 200

La funcion de Ackerman.

La versión en C de la función de Ackerman la podemos encontrar en el siguiente post. Al igual que la sucesión, incluye una pequeña descripción. El programa en pyton que calcula la función de Ackerman es el siguiente
def AckermanFunction(Number1, Number2):
    if Number1 == 0:
        return Number2 + 1
    else:
        if Number2 == 0:
            return (AckermanFunction(Number1 - 1, 1))
        return (AckermanFunction(Number1 - 1, AckermanFunction(Number1, Number2 - 1)))

if __name__ == "__main__":
    import sys
    try:
        for i in range(4):
            for j in range(5):
                print(AckermanFunction(i, j),end='  ')
            print()
    except RecursionError:
        print("Error: Se alcanzo el maximo de recursion permitido")
Para la implementación en Python use de forma recursiva la función "AckermanFunction"  para demostrar que algunas veces es mas conveniente usar o no otro lenguaje, en este caso python ofrece protección para las llamadas recursivas, si por ejemplo en los ciclos "for" en cada rango usamos 10 y 5 por ejemplo, el programa nos dirá que se alcanzo el máximo de recursión permitida (cosa que en c no ocurre).

Y bien, por ahora es todo, en post siguientes continuaremos con mas de Python, pero al igual que todos los programas aquí hechos, no son con la intención de que la gente que sepa programar aprenda (excepto Pascal). El código fuente para la sucesión de fibonacci la puedes descargar de aqui y el código fuente de la funcion de Ackerman la puedes descargar de acá.

Los leo luego.

No hay comentarios. :

Publicar un comentario