jueves, 25 de julio de 2019

Estructuras en programación, ejemplo de Metodo burbuja con Python

Como hemos visto en post anteriores la programación es una abstracción de algo o la simulación o semejanza al comportamiento de un proceso en esta ocasión vamos a ver como es que podemos guardar datos y procesarlos en programación.
Los tipos de estructuras más comunes son:

  • Pila
  • Cola
  • Arboles
  • Arreglos o Matrices unidimensional y N-dimensional
  • Grafos 


Una pila y Cola son como un torre de cubos lo que las diferencia es la forma en que se leen los datos de una Cola se toma el que está hasta arriba y se dice que es el primero en entrar es el primero en salir o un FIFO.


Una Pila es el último en entrar es el primero en salir o LIFO


Para fines prácticos la Cola es como una fila en el supermercado y la pila es como cuando guardan su ropa limpia y se ponen siempre lo último que lavaron.

Estas estructuras nos sirven porque por ejemplo en un banco, supermercado si quisiéramos implementar un sistema de turnos tendríamos que abstraer esto y lo veríamos como una Cola. Para una pila un ejemplo es un sistema de inventarios consumir el material más cercano.

Puede ser más complejo y poner pesos a valor a cada espacio en nuestras estructuras para que no sólo considere la ubicación sino también la que tenga el valor más alto por ejemplo si hiciéramos un sistema de turnos en un hospital hay que tomar en cuenta la gravedad del paciente. 

Los arreglos o las matrices son como una fila en Excel es decir tiene coordenadas que son una letra y un numero y una matriz es cuando hacemos una tabla en Excel es decir n número de filas por m número de columnas. Este es la estructura que mas he utilizado a lo largo de mi vida profesional, en sin número de programas.

Los árboles son semejantes a un árbol con sus ramas y hojas, identificando cuando una tarea es dependiente de otra y como llenar al punto final por ejemplo, nos sirve para Inteligencia artificial.
Para los grafos , son una maravilla nos ayudan a representar rutas por ejemplo cual es la mejor ruta para llegar a un destino, cual es la ruta critica en un Proyecto 

Así vemos a un grafo en la imagen un problema a resolver es como llegar del punto al punto de la manera más fácil. 

Hay grafos no dirigidos y dirigidos, el de la imagen es no dirigido es decir no tiene dirección o no hay flechas en el diagrama.

Hay grafos regulares e irregulares, cuando es regular es que tiene el mismo número de conexiones o valencias en todos los nodos, en el caso de la imagen es un grafo irregular. 

Vamos hacer un ejemplo una cola, recuerdo que en la universidad lo vi con Java, pero eso será en un post más adelante cuando veamos ese lenguaje.

De momento les voy a compartir un ejemplo en Python del algoritmo de ordenamiento donde utilizaremos la estructura de una matriz unidimensional (que es la más sencilla), este ordenamiento se llama Burbuja o Bubble Sort 

Este algoritmo lo que hace es ir recorriendo la matriz y compara el arreglo o matriz en la primera posición vs la segunda y si es menor lo mueve al inicio si no lo deja igual, despues en la segunda iteración compara la primera, segunda y tercera posición para colocar al inicio la mas pequeña, veamos un ejemplo 
Nuestro arreglo es 72,8,86,79,46,10,37,40,19:


La corrida a mano es la siguiente 




El programa en Python es:

def ordburbuja(lista):
    for dato in range(len(lista)-1,0,-1):
        for i in range(dato):
            if lista[i]>lista[i+1]:
                temp = lista[i]
                lista[i] = lista[i+1]
                lista[i+1] = temp

lista = [72,8,86,79,46,10,37,40,19]
ordburbuja(lista)
print(lista)

Ejecución del Programa






Hace algunos años cuando comenzaba mis entrevistas de trabajo, recuerdo que en algún examen me pidieron escribir el seudocodigo de un ordenamiento de burbuja, no es que tengan que memorizar el programa pero si entender la lógica del algoritmo, pueden perder sus programas pero no lo que saben. 

Todos estas estructuras que vimos en el post son ejemplos de paradigmas en la programación o la representación en la programación que simula algo de la vida real, o algún comportamiento,o alguna forma eso quiere decir abstracción, darle una representación a lo "real" por lo menos de esta dimensión. 

Espero les haya sido de utilidad este post, nos dejen sus comentarios o dudas y nos comportan, buena semana programadores.

Leer Base de datos en Excel con Macros


Hola:

Bienvenidos a otro post de mi blog, esta semana quiero compartirles un ejemplo de una Macro en Excel para poder leer datos de una base de datos es decir vamos a unir 2 temas que ya vimos:

Como decía al inicio del blog para ser un buen programador en mi experiencia creo que deben aprenderse 5 tipos de lenguajes entre ellos uno que te permita obtener datos de un motor de Base de datos y en este post un lenguaje que nos permita ver esos datos o ingresar filtros.



Una base de datos es un conjunto de tablas que representan un concepto de la vida real, para entender una base de datos primero iniciamos definiendo que información necesitamos almacenar y tratamos de agruparla de manera conceptual por ejemplo: si quisiéramos almacenar una lista de música necesitaríamos saber los datos de la canción, los datos del artista, los datos de nuestra lista en este momento hemos definido por lo menos 3 tablas en la base de datos : Artista, Canción, Lista. 

Ahora debemos definir que información que queremos guardar de cada concepto, entonces de un Artista nos interesa su nombre, un ID que es el identificador del artista en nuestra base de datos, ya que por nombre se podrían repetir,  Este es el concepto de Unicidad es decir debemos lograr que cada registro sea único. 

Para las canciones nos interesa el titulo de la canción, el ID de la canción, el Id del artista que la canta, la fecha de lanzamiento.

Para las listas necesitamos un ID, el titulo de la lista , el ID de las canciones.

Ahora debemos pensar como queremos relacionarlas, un artista puede tener una o varias canciones, una lista de precios puede tener una o mas canciones.

En el área de sistemas existen diferentes tipos de diagramas para las bases de datos existe el diagrama entidad relación que es el que nos ayudara a entender como esta formada nuestra base de datos, como podemos extraer información y si alguien nuevo la conoce sepa como interpretarla. 
ER


Para poder practicar pueden crear sus bases de datos en: MySql, SQLite or SQL Server Express que son motores de base de datos gratuitos, ojala nos compartán como les fue realizando esta actividad, les dejo un ejemplo de como pueden crear sus tablas.

CREATE TABLE Artist (
    id  INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
    name    TEXT UNIQUE
);

CREATE TABLE Genre (
    id  INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
    name    TEXT UNIQUE
);

CREATE TABLE Album (
    id  INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
    artist_id  INTEGER,
    title   TEXT UNIQUE
);

CREATE TABLE Track (
    id  INTEGER NOT NULL PRIMARY KEY
        AUTOINCREMENT UNIQUE,
    title TEXT  UNIQUE,
    album_id  INTEGER,
    genre_id  INTEGER,
    len INTEGER, rating INTEGER, count INTEGER
);


Ahora quiero enseñarles una macro que nos permite obtener de QAD la cantidad de inventario por ubicación, la descripción y su costo estándar  a una plantilla de Excel, tomando una columna como código del item la columna B4



Los campos en amarillo son los datos que llena la macro y el verde es el código del item 

El archivo con el código completo lo pueden ver en la siguiente Liga_Macro, mientras les explicó la imagen



Primero realizamos el nombrado de variables

Dim cn400 As ADODB.Connection
Dim rg400 As ADODB.Recordset
Dim cmdString As ADODB.Command
Dim strcon As String
Dim parte As String
Dim Row As Integer
Dim exrate As Double
Dim abc_type As String
Dim vc_oid_pt_mstr As Double
ActiveSheet.Unprotect Password:="testpass"

Validamos que el campo de B4, tenga un item para poder hacer la consulta de datos 

If Range("B4") = "" Then
MsgBox "No Item found in Cell B4."
Exit Sub
End If

Se hace la cadena de conexión a una base de datos

strcon = "Provider=SQLOLEDB; Data Source = base_datos; User id=base_datos_user; Password=pass_word"

Abrimos la conexión  a la base de datos y le indicamos donde queremos que guarde el resultado y donde leea la cadena del query

    Set cn400 = New ADODB.Connection
    Set rg400 = New ADODB.Recordset

    Set cmdString = New ADODB.Command


Limpiamos los datos

Sheet5.Range("A8:C22") = ""


Escribimos el query ingresando 
Select pt_desc1, pt_desc2, pt_abc, oid_pt_mstr from pt_mstr where (pt_domain = 'domain' AND pt_part ='" + parte + "')"

El resultado lo vamos a escribir del arregle de resultado, donde el inice inicia en cero, es decir

pt_desct1 = rg400.Fields(0).Value

pt_desc2 = rg400.Fields(1).Value


Call cn400.Open(strcon)
parte = Sheet5.Range("B4")
cmdString.CommandType = adCmdText
Set cmdString.ActiveConnection = cn400
'PT description
cmdString.CommandText = "Select pt_desc1, pt_desc2, pt_abc, oid_pt_mstr from pt_mstr where (pt_domain = 'domain' AND pt_part ='" + parte + "')"
 Set rg400 = cmdString.Execute(RecordsAffected, ExecuteOptionEnum.adAsyncFetch)
Row = 4
    Do While Not rg400.EOF
        Cells(Row, 4).Value = rg400.Fields(0).Value + rg400.Fields(1).Value
        abc_type = rg400.Fields(2).Value
        vc_oid_pt_mstr = rg400.Fields(3).Value
        Row = Row + 1
        rg400.MoveNext
    Loop

rg400.Close

Repetimos el mismo código, solo con diferente query para obtener los demás datos

Esto puede aplicar a cualquier otra base de datos, solo puede que cambie el tipo de conexión

strcon = "Provider=SQLOLEDB; Data Source = base_datos; User id=base_datos_user; Password=pass_word"

En todos los lenguajes de programación nos va a pedir siempre por mínimo 4 datos para conectarnos a una base de datos:


  1. El nombre de la Base de datos
  2. Usuario
  3. Password
  4. La dirección de la base de datos


Para mas información del conector  Microsoft no da información OLE DB Provider




A mi me paso que tuve que instalar algunas librerias, en la macro si les pasa igual, entre el Menu Tools- Reference  y seleccionan OLE Automation 


Ustedes pueden adecuar la macro a sus necesidades, puede ser otra base de datos un otro formato.
Este programa en una Macro es de las tareas que más van hacer como programadores quizá en otro lenguaje quizá de otra de base de datos. Pongan sus ejemplos que realicen de una base de datos, sus comentarios son bien recibidos. 

jueves, 18 de julio de 2019

Como Programar en C++ con Arduino Medidor de Temperatura y Húmedad

Hola amigos lectores


Les quiero compartir como pueden programar en lenguaje C++, este lenguaje es muy famoso y conocido, su padre es Bjarne Stroustrup quien lo desarrollo en 1979, es un lenguaje de medio nivel, con esto no me refiero a que sea malo, si no que al contrario hay bases de programación hay lenguajes que sirven para programar incluso otros lenguajes y lenguajes directo al hardware de la computadora, los lenguajes se llaman de alto nivel entre mas parecido son sus instrucciones al lenguaje humano, (se acuerdan de algo de 4gl que les platique) y el lenguaje bajo es entre mas se acerca a como nos habla la computadora.



Después  de esta introducción, vamos a utilizar una plataforma que se llama Arduino, que es una placa y es una microcomputadora, le comparto una foto del Modelo UNO que es el que yo tengo:



Con esta plaquita vamos hacer la interfaz entre datos del mundo exterior y nuestra computadora por medio de sensores.

Vamos a ver un ejemplo, el objetivo es hacer un programa que lee la temperatura,  y la humedad del huerto (La liga otro blog que escribo) que tenemos en la casa y nos muestre estos datos en pantalla. Estos programas he de decir que ya venían en el kit de sensores que compre y también La plataforma de Arduino es open free

Programa es de los ejemplos de  www.elegoo.com en el CD que contiene y  GeekFactory 



Vídeo de la ejecución



El vídeo en mi jardín


Los sensores los compre en Amazon les comparto la liga ELEGOO

Espero les haya gustado este ejemplo y que se animen hacer sus propios programas con esta plataforma que a mi gusto tiene muchas aplicaciones, tantas como su imaginación les diga, el kit que compre tiene 37 sensores.

Hay algo que se llama IoT intenet de las cosas, eso es más avanzado pero si pueden unir los sensores con internet o una APP, ya estarán entrando a ese mundo aun muy grande, podrían automatizar su casa, su jardín, su cocina...


PD: si quieren conocer un poco mas de como nos sirven estos datos en un huerto visiten la liga https://www.huertoencasayjardin.com/2019/06/huerto-en-casa-arduino.html

jueves, 11 de julio de 2019

Ciclos en la programación, Scraping WEB con Python

Que tal espero se encuentren muy bien y esta semana se encuentren listos para aprender más de programación, decimos que en la vida hay ciclos, bueno pues en la programación también y cada ciclo se detiene hasta cumplir una condición igual que en la vida, si no haces las cosas diferentes seguirás en un  mismo ciclo.

¿que es un ciclo definido en programación?

En programación hay varias instrucciones en cada lenguaje para crear ciclos, bucles o iteraciones por ejemplo:

  • FOR
  • WHILE
  • DO
  • REPEAT
  • UNTIL

Vamos a explicar un poco más imaginen que van a su restaurante favorito y les dan unas tarjetas de lealtad y cada visita les van a dar un sello cuando cumplan 5 sellos les dan un 50% de descuento. Bueno es un ciclo vamos a verlo en instrucciones de seudocodigo

Mientras i < 5 entonces
  i = i + 1  /*aquí le decimos que i es la variable para ir contando las visitas*/
  Si i == 5 entonces /*validamos en que numero vamos*/
   "50% de descuento"
salida

Aquí se detiene el ciclo cuando i llega a 5 , cada vez que se entra al ciclo se llama iteración 

Hay veces que si hacemos mal nuestras condiciones o no entramos a los ciclos o se quedan siempre dentro del mismo ciclo a menos que tengas un propósito de prueba de algún sistema o que quieras medir la memoria o algo que lo justifique debe utilizarlos, por ejemplo un While(1) encontré un meme con más ejemplos シシ


while(1)
Tomado de Facebook I am programmer, I have no life

Otro ejemplo de un bucle es un número exponencial, porque le decimos multiplica un numero hasta el exponente x

x³   donde x sea 7 , entonces en seudocódigo es:

x= 7
i=1
exp = 1
Mientras i  <= 3 entonces
  exp = exp * x
  i = 1 + 1
muestra exp.

Corrida a mano (esto es cuando tu en un papel o en tu cabeza o un archivo sigues la lógica de tu programa) 


Iteraciónn       x         i           exp
1 7 1 7
2 7 2 49
3 7 3 343

Un ejemplo en la vida de un programador, cuando necesitas realizar cálculos para aseguradoras o estimaciones de Actuarios. Hay otro ejemplo en matemáticas que es la sumatoria su símbolo es Σ y se expresa así:
funciones matematicas


Sumatoria es cuando vamos almacenando un valor por ejemplo la suma total del valor de inventario, la venta en un software de punto de venta (en un restaurante).  

Tenemos otros tipos de ciclos que se llaman recursivos que consiste en que se ejecuta el mismo ciclo dentro de él mismo, suena super loco y lo és, un ejemplo en matemáticas es un factorial, en lo profesional lo he utilizado en tabla abs_mstr y ps_mstr del ERP de QAD .

Otro ejemplo son las series de Fibonacci, fractales que son más enfocados a investigaciones o cálculos de graficación.
Todos estos casos son Funciones matemáticas .



Hay una instrucción que sirve para salir del ciclo si se llega a cumplir una condición, recuerden que nuestros programas siempre cumplen condiciones y realizan acciones en base a ellas, las instrucciones son:



BREAK

QUIT
LEAVE



Esta es otra forma de romper un ciclo o cumpliendo la condición inicial del ciclo o romperla con otra condición, ojala fuera así de fácil en nuestras vidas (o quizás si es así pero no lo vemos) .



Veamos un ejemplo en Python que fue un ejercicio en mi curso de Python for everybody en Coursera , el programa debe ingresar a una pagina WEB leer en pantalla que línea de la página se va a buscar y como tercer parámetro cuantas veces se va a entrar a buscar la página, es decir vamos a ir adentrándonos a las ligas de una página, digamos es como ir al explorador de archivos en nuestra computadora 


# To run this, you can install BeautifulSoup
# https://pypi.python.org/pypi/beautifulsoup4

import re
import urllib
from bs4 import BeautifulSoup
import ssl
var = ""


def recorrer1(link,counta,contados):
    html = urllib.urlopen(link).read()
    soup = BeautifulSoup(html, "html.parser")
    tags = soup('a')
    c1 = 1
    c2 = 1
    for tag in tags:
        if c1 == counta:
           #print(tag.get('href', None))
            html2 = urllib.urlopen(tag.get('href', None)).read()
            soup2 = BeautifulSoup(html2, "html.parser")
            return tag.get('href', None) 
        c1 = c1 + 1

# Ignore SSL certificate errors
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
url = raw_input('Enter URL: ')
cont2 = int(raw_input('Enter count: '))
cont1 = int(raw_input('Enter position: '))
count3 = 1
# Retrieve all of the anchor tags
#url = 'http://py4e-data.dr-chuck.net/known_by_Fikret.html'
print "Retrieving: ",url
var = recorrer1(url,cont1,cont2)
print "Retrieving: ",var
while count3 < cont2 :
   print "Retrieving: ", recorrer1(var,cont1,cont2)
   var = recorrer1(var,cont1,cont2)
   count3 = count3 + 1


ejecución


BeautifulSoup

scraping web

La primera página, busca la línea 10 y así continua entrando a las páginas hasta que llega al contador 5


Este ejemplo que vimos o esta técnica se llama scraping web que normalmente es simular la navegación de un sitio por una persona, esta técnica es utilizada por los buscadores de páginas WEB.

Espero les haya gustado este post a mi en lo personal me gusto mucho, porque dicen que uno puede decir que sabe algo hasta que puede explicarlo. Gracias por leer el blog y compartirlo.

jueves, 4 de julio de 2019

Programación y Matemáticas Discretas,Macro validación de celdas

Hola lectores bienvenidos a otro post, esta semana quiero darle continuación al post anterior de matemáticas en la programación , en esta ocasión quiero platicarles de matemáticas discretas.

Las matemáticas discretas son el apartado donde podemos filosofar jajaja porque haces comparaciones o llegas a deducciones en base a la lógica proposicional, por ejemplo  la frase: ella  esta feliz o esta enojada, aquí tenemos una oración que que podemos primero convertir a lógica:

Proposiciones
p = esta feliz
q = esta enojada

como se simboliza
 q

Esta es una disyunción

Vean los datos de Wikipedia Disyunción lógica


Luego esto lo podemos ver en una tabla de verdad

p q V  q
V V V
V F V
F V V
F F F

Esta tabla lo que nos dice es que puede cumplir las 2 condiciones y es cierta la afirmación o con que sea verdad alguna de las proposiciones p, q  se cumplan la sentencia es verdadera

Esto en electrónica también tiene su propio símbolo que es



Después esto lo pasamos a código de programación en una macro de Excel 

Columna A1 es p
Columna B1 es q

Programar en excel

Es muy importante entender estas bases, porque en la programación siempre tendremos cálculos o transacciones que realizar siempre y cuando se cumplan ciertas condiciones por ejemplo un usuario o tu mismo,te planteas la automatización de un proceso

Objetivo
"Realizar macro en Excel que tome de una hoja La cantidad de inventario y la multiplique por el precio unitario, solo si el tipo de inventario es materia prima  (MA) que es la columna D y los códigos de los artículos son del proveedor ingresado en la Columna C es igual a Kato y el resultado lo debe mostrar en un mensaje"


  • Primero vamos a revisar la sentencia, dice que debo considerar 2 cosas antes de realizar el cálculo 
  1. que la columna C sea igual a MA
  2. que la columna D sea igual a Kato


Vamos a ver el código en nuestra macro


Código
Private Sub CommandButton1_Click()
Dim Fila,cont As Integer
Fila = 2
cont = 0
Do While Cells(Fila, "A") <> ""
  If Cells(Fila, "c") = "MA" And Cells(Fila, "D") = "KATO" _
  Then cont = cont + (Cells(Fila, "b") * Cells(Fila, "g"))
  Fila = Fila + 1
Loop

MsgBox "Total " & cont
End Sub


Primero definimos 2 variables una para ir avanzando en el archivo y otra para mostrar el total
Dim Fila,cont As Integer
Fila = 2
cont = 0

Después realizamos el ciclo, hasta que no encuentre items y hacemos la búsqueda de nuestra información 

Do While Cells(Fila, "A") <> ""
  If Cells(Fila, "c") = "MA" And Cells(Fila, "D") = "KATO" _
  Then cont = cont + (Cells(Fila, "b") * Cells(Fila, "g"))
  Fila = Fila + 1
Loop

Mostramos el resultado

MsgBox "Total " & cont



Corramos la macro con los siguientes datos


Resultado


Es un ejemplo muy sencillo de realizar validaciones en la información y mostrar un resultado.

También hay varios memes por ejemplo de la pagina de Facebook , I'm a programmer I not life , que hacen referencia a la inteligencia artificial (AI) donde se utilizan IF y ELSE para su uso.


Inteligencia Artificial Meme



Y no es que sea malo, pero es muy cierto la vida cotidiana son una serie de decisiones y de condiciones que hay que cumplir para seguir cierta lógica, incluso cuando nosotros mismos decidimos entre ir un evento u otro, si siempre fuéramos coherentes podríamos utilizar la lógica para todo, pero no somos así  somos espontaneamos, tenemos emociones, estados de humor diferente, pero una computadora no, así que enseñarle todo esto es un mar de información, leía hace tiempo que cada maquina para esto existen varios lenguajes de acuerdo a la pagina de Aditec el top son:

  • Python
  • R
  • Lisp (les recuerdo a Logo)
  • Prolog
  • Java
Ademas de la lógica matemática la inteligencia artificial tiene muchas otras técnicas y algoritmos, no solo son IF y ELSE.

Espero les haya gustado este post y el ejemplo les sea de utilidad, nos leemos la próxima semana.