Ejemplos de PYTHON frente a C/C++

Dudas y comentarios sobre otros lenguajes de programación. Si algún lenguaje recibe suficientes preguntas le añadimos nueva categoría.
Responder
Mensaje
Autor
Avatar de Usuario
leosan
Mensajes: 730
Registrado: 19/04/2012 8:35 am
Ubicación: GRAN CANARIA

Ejemplos de PYTHON frente a C/C++

#1 Mensaje por leosan » 18/02/2013 3:16 pm

Nada mejor que un mismo código par testear las posibilidades, en este caso de cálculo, de ambos sistemas. Y la verdad es que no ha habido color, C va como un tiro.

Como ejemplo pongo la obtención del triángulo de Pascal , elegir 20 en Python para que la comparación sea más precisa, tanto en C como en Python.

Código en C: advierto que la ventana de C hay que elegir en el icono superior izquierdo propiedades, en diseño tamaño del búffer de pantalla y fijar ancho a 120 para ver el triangulo bien formado:

Código: Seleccionar todo

#include <stdio.h>
long comb(int n,int k);
int main()
{
    int i,j,k;
    const int m = 20;
    for (i = 0; i < m; i++)
        {
            for ( j = 1; j < m-i; j++)
            printf ("   ")  ;
            for (k = 0; k <= i; k++)
                printf ("%6d",comb(i,k));
            printf ("\n");
        }
}
long comb(int n,int k)
{
    int i;
    if (n < 0 || k < 0 || k > n) return 0;
    long c = 1;
    for ( i=1; i<=k; i++,n--)
    c = c*n/i;
    return c;
}
Código en Python v.3x el código sería:

Código: Seleccionar todo

def comb(n,k):
    if n < 0 | k < 0 | k > n:
        return 0
    c=1
    i=1
    for i in range ( 1, k+1):
        c = c*n/i
        n=n-1
    return c

numstr = input("Ingrese un número maximo 20: ")
num = int(numstr)
print (num)
for i in range(num):
    for j in range (  1, num-i):
            print ("", end='   ')  
    for j in range(i+1):
        d=int (comb(i,j))
        print ("%5d" % d, end=' ')
    print()
Observareis la diferencia de tiempo de uno a otro a favor de C.
Con esto no estoy poniendo a C por delante de Python, sólo estoy considerando el aspecto de potencia de cálculo que parece demostrar en este simple ejemplo.

Para propositos generales me estoy decantando por Python, más sabiendo que se puede "incrustar" código en C (si teneis información al respecto agradecería me la paseis).

Eso sí, Python permite obtener una cantidad ingente de cifras, cosa que C sin librerías adecuadas se queda corto. observar la cantidad de dígitos que obtengo para potencias de 2 sin librerías externas:

Código: Seleccionar todo

def poncoma( n ):
    "Regresa n como cadena con comas."
    s = str(n)
    pos = len(s)
    while pos > 3:
        pos = pos - 3
        s = s[:pos] +  ',' + s[pos:]
    return s

for n in range(200):
    print ('%3d %80s' % ( n, poncoma( 2**n ) ))
60 cifras sin despeinarse y lo dicho, con lo puesto, sin librerías adicionales.

Espero os animéis a colgar cosas sobre Python, a ver si se "anima" este foro, aunque sea de "otros lenguajes",

Saluditos!.

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados