miércoles, 6 de mayo de 2015

MASTERY 22 When to use what type of repetition in a program

CUANDO UTILIZAR QUE TIPO DE REPETICIÓN USAR EN UN PROGRAMA

Ya hemos visto todos los tipos de repetición de un programa. Eso de cuando utilizarlos va depende del tipo del algoritmo que quieras utilizar. También es posible combinarlos para un código más grande. Pero OJO, no todos los tipos puedan funcionar. Hay que dejar claro los 3 tipos de repetición y con sus ejemplos debido a que ya se había explicado anteriormente en algunos WSQ y Masteries.

El uso de "while" se utiliza para que una operación se haga una y otra vez hasta que la condición se rompa. Un ejemplo sería el Método Babilónico. La variable "z" se rompe cuando este es igual a la variable "y".

El uso de "for" tiene muchos usos, pero lo principal es que establece ciertos límites y se hará la operación tantas veces hasta llegar a ese límite. Un ejemplo sería el de la Mastery 20 con el de las potencias. Se establece un límite en "b", es decir, se hará "b" la misma operación.

Y el uso de la recursión algorítmica  que se define la función a sí misma, es decir, se llama la función dentro de su misma función. El ejemplo sería el del Gran Común Divisor de la WSQ12. Dependiendo de los valores de "a" y "b", se restará esos argumentos dependiendo de la condición llamando la función en sí.

MASTERY 21 Use of recursion for repetitive algorithms

USO DE RECURSIÓN PARA ALGORITMOS REPETITIVOS

Ya hemos visto como funcionan los loops. Una cosa interesante de ellos es que pueden utilizarse a sí mismas. Para dejar más claro esto es que son algoritmos repetitivos y su función es definirse y utilizarse a sí misma. En Python se puede hacer esto. Un gran ejemplo de ello es la Factorial de la WSQ09.


   n! =
   1 \times 2 \times 3 \times 4 \times ... \times (n-1) \times n
.

   n! =
   \prod_{k=1}^n k
.

   n! =
   \begin{cases}
      1              & \text{si, } n = 0 \\
      (n-1)!\times n & \text{si, } n > 0
   \end{cases}
Vemos que dentro de la función de la Factorial, en la línea 7 se llama sí mismo. Esto sirve para definir "n!" luego de haber puesto las condiciones anteriores. Básicamente, es como un loop. También se llamó esa función dentro de otro loop y el output sería esto:
Otro gran ejemplo sería el de Gran Común Divisor en el WSQ12: 
Fórmula de Éuclides: 
GCD(a, a) = a
GCD(a, b) = gcd(a - b, b) si a > b
GCD(a, b) = gcd(a, b - a) si a < b

Se ve que en la línea 5 y en la línea 8 se llama la función GCD() con diferentes parámetros. Es otro loop y el output sería esto:
No en todos los casos se puede utilizar algoritmos recursivos, todo depende de qué tipo de problema estás enfrentando.

MASTERY 20 Use of loops with "for"

Uso de ciclos con "for"

Y hemos visto cómo funciona con "while", ahora hay que ver cómo funciona con "for". El "for", en mi opinión, tiene más usos que el "while". En una parte hay casos en donde se debe de utilizar "range" para poder determinar los límites y el número de veces que se contarán. Aquí un ejemplo:
Antes de irnos a los argumentos dentro del rango, "for" siempre utiliza una segunda variable que sería como cada valor dentro de un rango o una lista. También siempre se debe de utilizar "in" que se refiere a irse dentro del rango o lista determinada. En el "range" tiene 3 parámetros: el límite donde empezará, el otro límite donde terminará y la cantidad de valores que tomara. Si en el último parámetro se pone 1, se tomará cada valor en 1 en 1. Si es 2, se tomará los valores en 2 en 2 y así sucesivamente. Luego esta la operación que deseas poner y que se volverá a repetir hasta que llegue a cierto límite. Aquí saldría en el output:
Sin embargo, NO SIEMPRE SE UTILIZAN ESO 3 PARÁMERTROS. Aquí tengo un gran ejemplo de ello:
Hay que declarar una variable para el loop primero. Aquí vemos que solo se utilizó el "range" en solo en "b". Lo que quiere decir es que se tomará cada valor para poder multiplicar 2 variables hasta que llegué a la cantidad de "b", es decir, se hará la multiplicación "b" veces. Aquí en el output:

Otro uso del "for" sería en las listas. No es necesario poner un "range" para este tipo de cosas. Lo que hará "for" es tomar cada valor que está dentro de la lista para su operación hasta que ya no haya valores ahí. Aquí el código:
Aquí sería tomar tomar un valor, sumarlo, volver a la lista y volver a sumarlo con la respuesta anterior hasta llegar al límite. Aquí en el output:

WSQ16 CARS

CARROS

Para trabajar en este código se debe de usar un archivo con el sufijo que dice ".txt". Un archivo como estos podrías modificar los contenidos en estos, cerrar dlm archivo y a la hora de abrirlos, te muestran la última vez que modificaste. Aquí una imagen de un archivo .txt:
En Python, se debe utilizar el comando "open" para poder abrir el texto y utilizar los contenidos que tiene adentro. Aquí tuve que declarar una variable para usarlo en la función.
El objetivo de esto es sacar el promedio de 3 cifras relacionado con el uso de la gasolina con los autos utilizando el archivo .txt. Hay que poner la variable que abre el texto ("x" en este caso) dentro del parámetro de una función, declarar otras variables dentro de la función, tener que utilizar un loop para poder leer cada línea y considerar que cada línea es como una lista, es decir, cada caracter que hay están posisionados desde 0 (el primer carácter de la línea) hasta donde termine. Además, cada carácter es un "string", por lo que hay que convertirlos en integers o floats. También hay que buscar en qué posición quedan esas cifras. Aquí el código principal:
Para poder imprimir las variables con los resultados ya afuera de la función, se debe de poner esas variables separadas por comas dentro de un paréntesis, poner "=" con el nombre de la función y su argumento ( en este caso el texto). Aquí en el output:

Aquí el link con el código en GitHub: https://github.com/YeshuaAguilar02/PYTHON/blob/master/WSQ16

WS15 FINAL DASH

ÚLTIMO JALÓN

Ya faltan pocas horas para que se termine esto. No hay mucho que decir acerca de esto, por lo tanto seré breve. Cada WSQ está terminado, excepto la última y todavía me faltan completar Masteries. No sé si logro terminar debido a otras cosas que tenía que hacer. En cuanto a los conocimientos adquiridos, logré entender partes que no me cabían en la cabeza como el uso de loops. Sin embargo, todavía hay conceptos que necesito reforzar. Aunque recuerde cómo es el código, siempre necesito saber cómo funciona cada uno. Y ya falta poco para el examen final.

De ahí, ya no puedo decir mucho de esto. Solo es un último jalón para pasar.


jueves, 23 de abril de 2015

QUIZ 10

QUIZ 10

1) Hacer una lista que recibe cierta cantidad de números y que se sumen solo los que son divisibles entre 3. Aquí las fotografías del programa principal y el resultado en la terminal:


2) Utilizar el algoritmo del producto escalar. Hay un link para más información sobre este algoritmo en http://es.wikipedia.org/wiki/Producto_escalar. Hay 2 condiciones para esto: si ambos vectores(listas) no tienen la misma cantidad de números, el programa te responderá ERROR u otra advertencia y un -1. La otra es que si los vectores tienen la misma cantidad de números para seguir con el algoritmo. La cantidad de números que quieras poner en los vectores depende ti si es que quieres seguir. Aquí las fotografías del programa principal y los 2 resultados de acuerdo con la condición establecida: