Etiquetas

domingo, 27 de febrero de 2011

FMcP (II) Facotrizar números enteros

Buenas, aqui les traigo la segunda entrega de la serie FMcP, que en realidad es la primera entrada útil.

Presupongo que, si no son conocimientos de Python, por lo menos tendréis conocimientos de programación en general. Aún así, intentaré no usar tecnicismos sin explicarlos o poner enlaces a otras páginas donde los expliquen.

En este fascículo presentaré una forma de sacar los factores de un número entero (15=3*5, por ejemplo). Es un algoritmo muy simple, pero es una buena base para proyectos más grandes relacionados con las matemáticas.

Sin más dilación, aquí está el algoritmo.

def FactorizarNum(numero):
    if numero == 0:return 0     #Controla los casos especiales 0, 1 y 2
    if numero == 1:return 1
    if numero == 2:return 2
    lista_fac = []
    for x in range(2, (numero/2)+1): #Comprueba cada NUMERO (no factor) entre '2' y '(numero/2)'
        while numero % x == 0: #Mira los factores posibles uno por uno
            numero /= x        #Modifica la variable numero para que el loop no se haga infinito
            lista_fac.append(x)#Anade el factor a la lista
    return lista_fac

martes, 8 de febrero de 2011

FMcP(I) Introducción

Bienvenidos a la serie 'FMcP', que es el acrónimo de 'Funciones Matemáticas con Python'.
Como bien se puede adivinar por el título, esta será una serie de posts en los que iré explicando distintas funciones desarrolladas en Python, mecanizando esas repetitivas tareas de matemáticas como sacar divisores.
Por supuesto, no podré tratar tooodas las funciones posibles, pero, si hay alguna que queráis que trate en especial, pedid y se os dará.

Ahora, un poco de chapa sobre cómo surgió. (Si lo que te interesa es la programación, puedes saltarte esto, yo lo haría, pero me sentiré halagado si muestras interés por conocer la historia).

En el insti estábamos dando las formas de factorizar polinomios, y a mí, una vez entendido, los ejercicios se me hacían cansinos y repetitivos. Además, al ser vacaciones de navidad, tenía tiempo libre, después de andar trasteando con Google App Engine unos días, decidí buscarme un proyecto serio. El resto es predecible. Hice una lista de las funciones necesarias para diseñar un programa que factorizara los polinomios (de una sola incógnita, ya que trabajo con coeficientes), y me puse manos a la obra. Tardé algo así como la mitad de vacaciones de navidad en montar  un motor decente, luego un mes para la interfaz y ahora estoy en pleno debugging, por si hay algún error matemático.

El caso es que me gustaría compartir con la gente las funciones que ha construido, en parte para enseñar, y en parte para...bueno, para enseñar también.

Espero ser de ayuda o interés.

Como siempre, libertad para cambiar y distribuir el código, siempre y cuando digáis de dónde viene.

sábado, 1 de enero de 2011

Algoritmo para elevar potencias

Buenas, hoy les traigo el algoritmo que prometí hace bastante tiempo, pero en Python en vez de en C# (es fácilmente extrapolable, solamente hay que cambiar las diferencias sintácticas), porque me parece que Python es más rápido y limpio para scripts pequeños, como este.

La función en cuestión sirve para, una vez dados el número y la potencia, imprimir el resultado.

#-------------------------------------------------------------------------------
# Name:        module2
# Purpose:
#
# Author:      Kerith
#
# Created:     01/01/2011
# Copyright:   (c) Kerith 2011
# Licence:     
#-------------------------------------------------------------------------------
#!/usr/bin/env python
import sys

def ElevarPotencia(numero, potencia):
    num_base = numero
    contador = 0
    if potencia != 0:
        while contador < potencia:
            numero *= num_base
            contador += 1
    else:
        numero = 1
    return numero

def main():
    numero = int(raw_input('Numero: '))
    potencia = int(raw_input('Potencia: '))
# A partir de aqui es prescindible
    resultado = ElevarPotencia(numero, potencia)
    print resultado
# Hasta aqui ^

if __name__ == '__main__':
main()

Vale, si, es posible hacerlo más corto con un bucle 'for' o una función recursiva, pero tampoco esta tan mal, no?

Básicamente la función ElevarPotencia() dice (línea por línea):
"crea una variable num_base, que tenga el mismo valor que numero."
"crea un contador, que empiece desde cero"
"si potencia es diferente a 0"
      "mientras contador sea menor que potencia"
           " numero = numero*num_base"
           " añade 1 al contador"
"sino, numero = 1"
"devuelve numero"

miércoles, 22 de diciembre de 2010

Enlaces PPT

No, no son presentaciones de PowerPoint, es el acrónimo de Piedra-Papel-Tijeras.

Aqui estan los dos enlaces a MeJaupload, listos para ser bajados (sin sorpresas y sin requisitos previos)

Versión en Castellano
Euskerazko bertsioa

Las críticas constructivas son bienvenidas, y siempre es agradable que comenten tu trabajo.

domingo, 19 de diciembre de 2010

POR FIN!!!!

Aqui esta, por fin, el juego  de Piedra-Papel-Tijera llevado al mundo de los ordenadores, hay un problema con la versión en español, que solucionaré la próxima vez que tenga vacaciones. Por ahora se puede bajar la versión en euskera.

El archivo es un portable .exe, solo bájalo, ejecútalo y... bueno, juega. No necesita parche de ningún tipo, corre con le versi'on 3.5 del framework .NET, pero viene integrada en el .exe.

Enjoy it!!!!

Euskerazko bertsioa

jueves, 2 de diciembre de 2010

Ya está

Ya está acabada la versión 1.0.0.5 (el x.x.x.5 es por unos pequeños retoques en loque a librerías se refiere) del Piedra-Papel-Tijera. Estará disponible a finales del puente en euskera y en castellano, por un módico precio de...0.00€!! Una ganga.

Subiré meJaupload tanto el instalador como el portable, y el código fuente se podrá obtener mediante un correo a mi dirección personal, mencionando los motivos por losque se quiere obtener el código.

Sin más, me despido.

sábado, 2 de octubre de 2010

Ya no falta nada

Si, lo sé, no he escrito en muuuucho tiempo (pero bueno, oye, por algo es mi blog).
Sólo falta que el ilustrador me pase las ilustraciones y podré acabarlo.
Cambio y corto.