Archivo

Posts Tagged ‘matemáticas’

Día 14 “Enteros largos y Operadores Binarios en Python”

julio 19, 2008 9 comentarios

Hola hoy voy a ser dos post en uno, ya que realmente son breves Python posee un rico conjunto de tipos de datos, en el post anterior hablamos de los números complejos, ahora vamos a ver brevemente los enteros largos. El rango de los números flotantes puede resultar insuficiente para ciertas aplicaciones. Python ofrece la posibilidad de trabajar con números de cifras arbitrariamente largos. Un entero largo siempre finaliza con la letra L.  Aquí un ejemplo Fíjate números enteros cambian automáticamente a enteros largos cuando es necesario.

Observa la “L” que aparece, aunque 2 y 31 son números enteros normales, el resultado de evaluar 2**31 es un entero largo. Esto es así porque los enteros normales se codifican en complemento a 2 de 32 bits, y 2**31 no puede representarse en complemento a 2 de 32 bits

Si bien los enteros largos resultan cómodos por no producir nunca errores de desbordamiento, debes tener presente que son muy ineficientes: ocupan mucha más memoria que los enteros normales y operar con ellos resulta mucho más lento.
Bueno también hablaremos de otros operadores, recuerdas que hemos visto los operadores suma, resta, multiplicación, división, modulo, elevación, etc, además de los operadores lógicos o booleanos, hoy te voy a presentar otros ya que en Python existe una variedad elevada, que en el transcurso de este blog se irán presentando.
Hay operadores que están dirigidos a manejar la secuencia de bits que codifican los números enteros.
El operador binario & calcula la operación “y” bit a bit.
El operador binario  |  calcula la operación “o” bit a bit
El operador binario  ^ calcula la operación “o exclusiva”, la diferencia con la anterior es que la “o exclusiva” devuelve True si y sólo si los dos operandos son falsos.
El operador unario ~ invierte los bits de su operando.
Tienes además, los operandos binarios <<, >> , que desplazan los bits a izquierda o derecha tantas posiciones como se las indiques. Aquí una serie de ejemplos que ayudaran a entender estos operadores
Aun no te queda claro porque esos resultados, aquí una breve explicación
Para el primer ejemplo 5&12, nos da 4, porque??
En binario tenemos la expresión 5 que equivale (00000101) y la expresión 4 que equivale (00001100) si tenemos 5&12 entonces tenemos 00000101 & 00001100, que nos da como resultado 00000100, que equivale a 4.
La expresión nosotros la damos en números naturales pero se ejecuta como si fueran números binarios, el resultado también se muestra como en numero natural.
Bien será entendiste el ejemplo, pero no sabes aun como se pasa un numero binario a decimal o viceversa.
Extraje un ejemplo del portal wikipedia en su sección números binarios, espero te quede claro.
Decimal a binario 
Se divide el número decimal entre 2 cuyo resultado entero se vuelve a dividir entre 2 y así sucesivamente. Una vez llegados al 1 indivisible se cuentan el último cociente, es decir el uno final (todo número binario excepto el 0 empieza por uno), seguido de los residuos de las divisiones subsiguientes. Del más reciente hasta el primero que resultó. Este número será el binario que buscamos. A continuación se puede ver un ejemplo con el número decimal 100 pasado a binario.
100 |_2
 0   50 |_2
      0  25 |_2         –> 100   1100100
          1  12 |_2
              0  6 |_2
                 0  3 |_2
                      1 1
Otra forma de conversión consiste en un método parecido a la factorización en números primos. Es relativamente fácil dividir cualquier número entre 2. Este método consiste también en divisiones sucesivas. Dependiendo de si el número es par o impar, colocaremos un cero o un uno en la columna de la derecha. Si es impar, le restaremos uno y seguiremos dividiendo por dos, hasta llegar a 1. Después sólo nos queda tomar el último resultado de la columna izquierda (que siempre será 1) y todos los de la columna de la derecha y ordenar los dígitos de abajo a arriba. Y luego se haría un cuadro con las potencias con el resultado.
Ejemplo:
100|0
 50|0
 25|1   –> 1, 25-1=24 y seguimos dividiendo por 2
 12|0
  6|0
  3|1
  1|1   –> 100   1100100
Existe un último método denominado de distribución. Consiste en distribuir los unos necesarios entre las potencias sucesivas de 2 de modo que su suma resulte ser el número decimal a convertir. Sea por ejemplo el número 151, para el que se necesitarán las 8 primeras potencias de 2, ya que la siguiente, 28=256, es superior al número a convertir. Se comienza poniendo un 1 en 128, por lo que aún faltarán 23, 151-128=23, para llegar al 151. Este valor se conseguirá distribuyendo unos entre las potencias cuya suma den el resultado buscado y poniendo ceros en el resto. En el ejemplo resultan ser las potencias 4, 2, 1 y 0, esto es, 16, 4, 2 y 1, respectivamente.
Ejemplo:
  20=   1|1
  21=   2|1
  22=   4|1
  23=   8|0
  24=  16|1
  25=  32|0
  26=  64|0
  27= 128|1           128+16+4+2+1=151   10010111
Espero halla quedado claro, cualquier duda en comentarios, lo que iba a ser un post breve se convirtió en un gran post, nos vemos, saludos y gracias por sus comentarios.
Nota: Extracto del libro Introducci 

Día 13 “Números Complejos en Python”

julio 16, 2008 8 comentarios

Python también ofrece la posibilidad de trabajar con números complejos.
Los números complejos son una extensión de los números reales, estos representan todas las raíces de los polinomios, a diferencia de los reales.

Entonces los números complejos son aquellos que tienen parte imaginaria.
Una de las características de Python es que podemos trabajar con números complejos, ya que la gran mayoría de los lenguajes de programación carecen de esta.

Un número complejo puro(número imaginario) finaliza siempre con la letra j, que representa el valor de la raíz cuadrada negativa.
Un número complejo con parte real se expresa sumando la parte real a un complejo puro.
Algunos ejemplos de números complejos
4j
1+2j
2.0+3j
Ahora en el interprete de Python

En Python los números complejos con una parte real distinta de cero se puede crear con la función complex(real, imag), como en el ejemplo.

Los números complejos siempre son representados como dos números de punto flotante, la parte real y la imaginaria, para extraer éstas partes de un número complejo z utilice z.real y z.imag

Las funciones de conversión a punto flotante y entero (flota, int, long) no funcionan para los números complejos, no hay una forma correcta para convertir un número complejo en un número real, podemos utilizar abs para obtener su magnitud (como flotante) o z.real para obtener su parte real.


Día 11″Tipos de datos, Entero y Flotante”

julio 7, 2008 8 comentarios

Hola como están? , en este post vamos a referirnos sobre los tipos de datos, para esto ve este ejemplo.

Viste bien el resultado, ¿qué paso?, Python se equivoco, pues anda a tu interprete de Python y has la prueba si no me crees?
El resultado de dividir 3/2 no debería ser 1, sino 1.5, entonces Python se equivoco, pues bien te cuento que Python no se ha equivocado.
Cada valor utilizado en Python es de un tipo determinado, hasta el momento sólo hemos utilizado datos de tipo “entero”, es decir sin decimales, cuando se efectúa una operación, Python tiene en cuenta el tipo de los operandos a la hora de producir el resultado.
Entonces si los operandos son de tipo entero, el resultado será entero, como en el ejemplo anterior.
Si deseamos obtener resultados de tipo “real”, debemos usar operando reales, entonces los operandos deben llevar una parte decimal aunque este sea nula.

Hay diferencias entre los enteros y reales en Python más allá de que los primeros no tengan decimales y los segundos si.
Por ejemplo el numero 3 y el 3.0 son iguales en matemáticas, pero son diferentes en Python, entonces estas diferencias son:
· Los enteros suelen ocupar menos memoria
· Las operaciones entre enteros son, generalmente más rápidas
He de precisar algo respecto a la denominación de numero real, o numero con decimales, este termino no es el adecuado, en el mundo de los lenguajes de programación, nosotros usamos el termino “flotante” o “numero flotante”.
Conoce más de los números flotantes en este enlace
Entonces llamaremos numero con coma flotante, flotante o numero flotante a los números con decimales que podemos representar en nuestras computadoras.
Aun no te ha quedado, entonces una breve explicación.
Un numero flotante debe especificarse siguiendo ciertas reglas, en principio constan de 2 partes mantisa y exponente. El exponente se separa de la mantisa con la letra E , por ejemplo el número flotante 2E3, significa que tiene mantisa 2 y exponente 3, y representa el número 2*10^3 , es decir 2000, este es el ejemplo más censillo.
Entonces para que nuestro ejemplo por fin salga con el resultado correcto debemos escribirlo con números flotantes como en el ultimo ejemplo, pero también podemos mezclar en una misma expresión datos de tipos distintos.

Python sigue una regla sencilla, si hay datos de tipos distintos, el resultado es del tipo más general. Los flotantes son de tipo más general que los enteros.

Pero cuidado y pon atención a este ejemplo.

Que ha pasado nuevamente, el resultado debería haber sido 2.5 y no 2.0
Recuerda que Python evalúa la expresión paso a paso.
La división es prioritaria frente a la suma, por lo que ésta se lleva a cabo en primer lugar. La división tiene dos operandos, ambos de tipo entero, así que produce un resultado de tipo entero, el valor 1. La suma recibe, pues, un operando flotante(el de la izquierda) de valor 1.0, y otro entero ( el que resulta de la división), de valor 1. El resultado es un flotante y su valor es 2.0.
Entonces la forma correcta de realizar este ejemplo seria de la forma.

Nota: Lección extraída del libro “Introducción a la programación con Python pagina 33 y 34.

Día 10 “Operadores aritméticos Parte 2″

julio 6, 2008 6 comentarios

Después de 2 días sin post, vamos a terminar lo que teníamos pendiente, la segunda parte de operadores aritméticos.
En el post anterior vimos los operadores suma, resta, multiplicación, división, unario (positivo y negativo), existen más operadores en Python.
El operador módulo, que se denota con el símbolo de porcentaje % , este devuelve el resto de la división entera entre dos operandos. (no tiene nada que ver con el calculo de porcentaje), este operador también es asociativo por la izquierda y su prioridad es la misma que la de la multiplicación o la división.
Aquí dos ejemplos.

También existe el operador de la exponenciación, que se denota con dos asteriscos juntos, no separados por ningún espacio en blanco **
Si quisiéramos calcular 2 elevado a tres se expresa en Python de la forma 2**3, este modulo es asociativa por la derecha, así que ojo!!, no te vallas a confundir, la expresión 2**3**2 equivale a 2 elevado a 3 y el 3 elevado a 2, ósea 2 elevado a 9, ojala! comprendas, este modulo de exponenciación presenta mayor prioridad que sus antecesores.
Aquí algunos ejemplos.


Ahora confeccione una tabla resumen, con las características de los operadores en Python

En la tabla, la prioridad 1 es la más alta.

Vamos a comentar los espacios en blanco que se pueden producir en Python, ve estos ejemplos

Las únicas contra indicación son:
No puedes poner espacios en blanco en medio de un numero.
No puedes poner espacios en blanco al principio de la expresión.

Nos vemos y comenten!!
Nota: Post hecho a base del libro “Introducción a la Programación con Python”, paginas 26,29, 30

Día 9 “Operadores aritméticos Parte 1″

julio 3, 2008 12 comentarios

Después de haber hecho nuestro primer programa “Hola Mundo”, deben haberte quedado ganas de aprender más, hoy vamos a usar el interprete (sesiones interactivas) y vamos a probar este interprete con operaciones aritméticas.
Vamos a dividir este post en 2 partes.
Las operaciones de sume y resta, por ejemplo, se denotan con los símbolos u operadores + y -, respectivamente y operan sobre dos valores numéricos, he aquí unos ejemplos.

En el ultimo ejemplo se puede observar varias operaciones en una misma línea.
El orden en que se efectúan las operaciones es en principio de izquierda a derecha. La expresión 1-2+3 por ejemplo equivale matemáticamente a ((1-2)+3) ; por ello decimos que la suma y la resta son operadores “asociativos” por la izquierda.
Ahora veamos este nuevo ejemplo.

Ahora este ultimo ejemplo nos da a conocer que Python necesita los paréntesis para indicar un orden de evaluación, semejante a las matemáticas.
Los operadores de suma y resta son binarios, es decir operan sobre dos operandos,
El mismo símbolo que se usa para la resta se usa también para un operador “unario”, es decir, un operador que actúa sobre un único operando, ejemplo el cambio de signo.
Existe otro operador unario que se representa con el símbolo +: el operador identidad, este operador no hace nada útil, solo sirve para poner énfasis en que un número es positivo, he aquí algunos ejemplos.

Los operadores de multiplicación y división son, respectivamente * y /
En el siguiente ejemplo vamos a ver ejemplos de multiplicación y división, también observa que vamos a combinar expresiones de suma y resta con multiplicación y división, fíjate en que la regla de aplicación de operadores de izquierda a derecha no siempre se observa.

Recuerda que la multiplicación y la división tienen mayor nivel de prioridad que la suma y resta.
Atención, el cambio de signo tiene mayor prioridad que la multiplicación y la división

Bueno en nuestro próximo post hablaremos de el operador modulo, el operador exponente y de los espacios en blanco, además realizare una tabla de características de los operadores en Python a modo de resumen.
Nos vemos y comenten !! Nota: Este post fue hecho gracias al libro “Introducción a la programación con Python, paginas de la 24 a la 28.

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.