miércoles, 28 de diciembre de 2011

Python, ejemplos prácticos no. 2


1. Programa que acepte un año escrito en cifras arábigas y visualice el año en números romanos, dentro del rango 1000-1999
'''
autor: yo
fecha: 24 de diciembre de 2011
'''

anyo,anyo_desglosado,aux=0,0,0
romano=""

while anyo<=0 and anyo<=1999:
    anyo=int(raw_input('Introduce año:'))
    print "Año en arábigo [",anyo,"]"
    print "\nAño desglosado: "

if (anyo>=1000):
    anyo_desglosado=anyo%1000
    romano=romano+"M"
    aux=1000
    print "arábigo:",aux
   
if (anyo_desglosado>=900):
    anyo_desglosado=anyo_desglosado%900
    romano=romano+"CM"
    aux=900
    print "arábigo:",aux

if (anyo_desglosado>=800):
    anyo_desglosado=anyo_desglosado%800
    romano=romano+"DCCC"     
    aux=800
    print "arábigo:",aux

if (anyo_desglosado>=700):
    anyo_desglosado=anyo_desglosado%700
    romano=romano+"DCC"         
    aux=700
    print "arábigo:",aux

if (anyo_desglosado>=600):
    anyo_desglosado=anyo_desglosado%600
    romano=romano+"DC"            
    aux=600
    print "arábigo:",aux

if (anyo_desglosado>=500):
    anyo_desglosado=anyo_desglosado%500
    romano=romano+"D"               
    aux=500
    print "arábigo:",aux


if (anyo_desglosado>=400):
    anyo_desglosado=anyo_desglosado%400
    romano=romano+"CD"                 
    aux=400
    print "arábigo:",aux

if (anyo_desglosado>=300):
    anyo_desglosado=anyo_desglosado%300
    romano=romano+"CCC"                          
    aux=300
    print "arábigo:",aux

if (anyo_desglosado>=200):
    anyo_desglosado=anyo_desglosado%200
    romano=romano+"CC"                               
    aux=200
    print "arábigo:",aux

if (anyo_desglosado>=100):
    anyo_desglosado=anyo_desglosado%100
    romano=romano+"C"                                 
    aux=100
    print "arábigo:",aux


if (anyo_desglosado>=90):
    anyo_desglosado=anyo_desglosado%90
    romano=romano+"XC"                                 
    aux=90
    print "arábigo:",aux

if (anyo_desglosado>=80):
    anyo_desglosado=anyo_desglosado%80
    romano=romano+"LXXX"                                          
    aux=80
    print "arábigo:",aux

if (anyo_desglosado>=70):
    anyo_desglosado=anyo_desglosado%70
    romano=romano+"LXX"                                              
    aux=70
    print "arábigo:",aux

if (anyo_desglosado>=60):
    anyo_desglosado=anyo_desglosado%60
    romano=romano+"LX"                                                    
    aux=60
    print "arábigo:",aux


if (anyo_desglosado>=50):
    anyo_desglosado=anyo_desglosado%50
    romano=romano+"L"                                                       
    aux=50
    print "arábigo:",aux

if (anyo_desglosado>=40):
    anyo_desglosado=anyo_desglosado%40
    romano=romano+"XL"                                                            
    aux=40
    print "arábigo:",aux

if (anyo_desglosado>=30):
    anyo_desglosado=anyo_desglosado%30
    romano=romano+"XXX"                                                                
    aux=30
    print "arábigo:",aux

if (anyo_desglosado>=20):
    anyo_desglosado=anyo_desglosado%20
    romano=romano+"XX"                                                                
    aux=20
    print "arábigo:",aux

if (anyo_desglosado>=10):
    anyo_desglosado=anyo_desglosado%10
    romano=romano+"X"                                                                       
    aux=10
    print "arábigo:",aux

if (anyo_desglosado==9):
    anyo_desglosado=anyo_desglosado%9
    romano=romano+"IX"                                                                           
    aux=9
    print "arábigo:",aux

if (anyo_desglosado==8):
    anyo_desglosado=anyo_desglosado%8
    romano=romano+"VIII"                                                                                
    aux=8
    print "arábigo:",aux

if (anyo_desglosado==7):
    anyo_desglosado=anyo_desglosado%7
    romano=romano+"VII"                                                                                    
    aux=7
    print "arábigo:",aux

if (anyo_desglosado==6):
    anyo_desglosado=anyo_desglosado%6
    romano=romano+"VI"                                                                                        
    aux=6
    print "arábigo:",aux

if (anyo_desglosado==5):
    anyo_desglosado=anyo_desglosado%5
    romano=romano+"V"                                                                                            
    aux=5
    print "arábigo:",aux

if (anyo_desglosado==4):
    anyo_desglosado=anyo_desglosado%4
    romano=romano+"IV"                                                                                                
    aux=4
    print "arábigo:",aux

if (anyo_desglosado==3):
    anyo_desglosado=anyo_desglosado%3
    romano=romano+"III"                                                                                                   
    aux=3
    print "arábigo:",aux

if (anyo_desglosado==2):
    anyo_desglosado=anyo_desglosado%2
    romano=romano+"II"                                                                                                        
    aux=2
    print "arábigo:",aux

if (anyo_desglosado==1):
    anyo_desglosado=anyo_desglosado%1
    romano=romano+"I"                                                                                                            
    aux=1
    print "arábigo:",aux


print "\nAño en romano: ",romano


2. Obtener salario nuevo
#código Python
'''

autor: yo
fecha : viernes 9 de diciembre del 2011

'''
#función que calcula el nuevo salario --> ganancia
def obtenerGanancia(m,p):
    return m+(m*(p/100))

#función que calcula el nuevo salario --> perdida
def obtenerPerdida(m,p):
    return m-(p*(p/100))

#variables
salir="s"
monto,porcentaje=0,0
opc=0

while salir == "s":
   
    print "***************************************"
    print "[Programa que calcula el salario nuevo]"
    print "***************************************"
    print ""

    #menú
    print "1. Obtener ganancia"
    print "2. Obtener pérdida"
   
    opc=int(raw_input('Introduce opción: '))

    #obtener ganancia
    if opc==1:
        print "[Obtener ganancia]"
        monto=float(raw_input('Monto: '))
        print "$",monto,"\n"
        porcentaje=float(raw_input('Porcentaje:'))
        print porcentaje,"% \n"
        print "Ganancia: $",obtenerGanancia(monto,porcentaje)
        print ""

    #obtener pérdida
    if opc==2:
        print "[Obtener pérdida]"
        monto=float(raw_input('Monto: '))
        print "$",monto,"\n"
        porcentaje=float(raw_input('Porcentaje:'))
        print porcentaje,"% \n"
        print "Ganancia: $",obtenerPerdida(monto,porcentaje)
        print ""

    else:
        print "opción inválida"

   
    salir=raw_input('Desea hacer otra operación? (s/n):')
    print ""

    if salir=="n":
        print "adios"

lunes, 26 de diciembre de 2011

Tarot básico en Python

 Aqui el código escrito en Python para calcular tu carta del tarot.

def obtenerArcano(arc):
    if arc==1:
        return "El Mago"
    if arc==2:
        return "La Papisa"
    if arc==3:
        return "La Emperatriz"
    if arc==4:
        return "El Emperador"
    if arc==5:
        return "El Papa"
    if arc==6:
        return "El Enamorado"
    if arc==7:
        return "El Carro"
    if arc==8:
        return "La Justicia"
    if arc==9:
        return "El Ermitaño"
    if arc==10:
        return "La Rueda"
    if arc==11:
        return "La Fuerza"
    if arc==12:
        return "El Colgado"
    if arc==13:
        return "La Muerte"
    if arc==14:
        return "La Templanza"
    if arc==15:
        return "El Diablo"
    if arc==16:
        return "La Torre"
    if arc==17:
        return "La Estrella"
    if arc==18:
        return "La Luna"
    if arc==19:
        return "El Sol"
    if arc==20:
        return "El Juicio"
    if arc==21:
        return "El Mundo"
    if arc==22:
        return "El Loco"



dia_nac=0
mes_nac=""
anyo_nuevo=0
aux=0
suma,i=0,0
cadena=""
sumaTotal=0


dia_nac=int(raw_input('Dia de nacimiento:'))
mes_nac=raw_input('Mes de nacimiento:')
anyo_nuevo=int(raw_input('Año nuevo:'))

print "Datos leidos:\n"
print "\tDía de nacimiento ||  Mes de nacimiento  || Año nuevo que empieza"
print "\t",dia_nac,"             || ",mes_nac,"            || ",anyo_nuevo
print ""

if mes_nac=="diciembre":
    aux=12
    suma=dia_nac+aux+anyo_nuevo
    print "Suma [",suma,"]"
    cadena=str(suma)
    print "Cadena: [",cadena,"]"
    print list(cadena)
  
    for i in range(len(cadena)):
        sumaTotal=sumaTotal+int(cadena[i])
      
    print "Número: ",sumaTotal
    print "Te corresponde el signo del ",obtenerArcano(sumaTotal)
  
  
  

if mes_nac=="noviembre":
    aux=11
    suma=dia_nac+aux+anyo_nuevo
    print "Suma [",suma,"]"
    cadena=str(suma)
    print "Cadena: [",cadena,"]"
    print list(cadena)
    for i in range(len(cadena)):
        sumaTotal=sumaTotal+int(cadena[i])
      
    print "Número: ",sumaTotal
    print "Te corresponde el signo del ",obtenerArcano(sumaTotal)

if mes_nac=="octubre":
    aux=10
    suma=dia_nac+aux+anyo_nuevo
    print "Suma [",suma,"]"
    cadena=str(suma)
    print "Cadena: [",cadena,"]"
    print list(cadena)
    for i in range(len(cadena)):
        sumaTotal=sumaTotal+int(cadena[i])
      
    print "Número: ",sumaTotal
    print "Te corresponde el signo del ",obtenerArcano(sumaTotal)

if mes_nac=="septiembre":
    aux=9
    suma=dia_nac+aux+anyo_nuevo
    print "Suma [",suma,"]"
    cadena=str(suma)
    print "Cadena: [",cadena,"]"
    print list(cadena)
    for i in range(len(cadena)):
        sumaTotal=sumaTotal+int(cadena[i])

  
    print "Número: ",sumaTotal
    print "Te corresponde el signo del ",obtenerArcano(sumaTotal)

if mes_nac=="agosto":
    aux=8
    suma=dia_nac+aux+anyo_nuevo
    print "Suma [",suma,"]"
    cadena=str(suma)
    print "Cadena: [",cadena,"]"
    print list(cadena)
    for i in range(len(cadena)):
        sumaTotal=sumaTotal+int(cadena[i])

    print "Número: ",sumaTotal
    print "Te corresponde el signo del ",obtenerArcano(sumaTotal)

if mes_nac=="julio":
    aux=7
    suma=dia_nac+aux+anyo_nuevo
    print "Suma [",suma,"]"
    cadena=str(suma)
    print "Cadena: [",cadena,"]"
    print list(cadena)
    for i in range(len(cadena)):
        sumaTotal=sumaTotal+int(cadena[i])

  
    print "Número: ",sumaTotal
    print "Te corresponde el signo del ",obtenerArcano(sumaTotal)

if mes_nac=="junio":
    aux=6
    suma=dia_nac+aux+anyo_nuevo
    print "Suma [",suma,"]"
    cadena=str(suma)
    print "Cadena: [",cadena,"]"
    print list(cadena)
    for i in range(len(cadena)):
        sumaTotal=sumaTotal+int(cadena[i])
      
    print "Número: ",sumaTotal
    print "Te corresponde el signo del ",obtenerArcano(sumaTotal)

if mes_nac=="mayo":
    aux=5
    suma=dia_nac+aux+anyo_nuevo
    print "Suma [",suma,"]"
    cadena=str(suma)
    print "Cadena: [",cadena,"]"
    print list(cadena)
    for i in range(len(cadena)):
        sumaTotal=sumaTotal+int(cadena[i])

    print "Número: ",sumaTotal
    print "Te corresponde el signo del ",obtenerArcano(sumaTotal)

if mes_nac=="abril":
    aux=4
    suma=dia_nac+aux+anyo_nuevo
    print "Suma [",suma,"]"
    cadena=str(suma)
    print "Cadena: [",cadena,"]"
    print list(cadena)
    for i in range(len(cadena)):
        sumaTotal=sumaTotal+int(cadena[i])
      
    print "Número: ",sumaTotal
    print "Te corresponde el signo del ",obtenerArcano(sumaTotal)

if mes_nac=="marzo":
    aux=3
    suma=dia_nac+aux+anyo_nuevo
    print "Suma [",suma,"]"
    cadena=str(suma)
    print "Cadena: [",cadena,"]"
    print list(cadena)
    for i in range(len(cadena)):
        sumaTotal=sumaTotal+int(cadena[i])

    print "Número: ",sumaTotal
    print "Te corresponde el signo del ",obtenerArcano(sumaTotal)

if
mes_nac=="febrero":
    aux=2
    suma=dia_nac+aux+anyo_nuevo
    print "Suma [",suma,"]"
    cadena=str(suma)
    print "Cadena: [",cadena,"]"
    print list(cadena)
    for i in range(len(cadena)):
        sumaTotal=sumaTotal+int(cadena[i])
    print "Número: ",sumaTotal
    print "Te corresponde el signo del ",obtenerArcano(sumaTotal)

if mes_nac=="enero":
    aux=1
    suma=dia_nac+aux+anyo_nuevo
    print "Suma [",suma,"]"
    cadena=str(suma)
    print "Cadena: [",cadena,"]"
    print list(cadena)
    for i in range(len(cadena)):
        sumaTotal=sumaTotal+int(cadena[i])
      
    print "Número: ",sumaTotal
    print "Te corresponde el signo del ",obtenerArcano(sumaTotal)

domingo, 18 de diciembre de 2011

JavaServer Faces: ejemplos básicos



JavaServer Faces

Es una framework (ya tiene varios años que apareció) que nos permite crear aplicaciones web muy parecidas a las de escritorio. JSF trabaja en base a eventos (algo parecido a Swing), mientras que JSP en base a petición(es)/respuesta(s).
Existen otras variantes como:
  1. RichFaces
  2. PrimeFaces
  3. OpenFaces
  4. IceFaces
  5. MyFaces

Enlaces

OpenFaces
http://openfaces.org/documentation/developersGuide/index.html
http://openfaces.org/demo/overview/homepage.jsf
RichFaces
http://docs.jboss.org/richfaces/latest_3_3_X/en/devguide/html_single/
http://livedemo.exadel.com/richfaces-demo/index.jsp
PrimeFaces
http://www.primefaces.org/documentation.html
http://www.primefaces.org/showcase/ui/home.jsf
IceFaces
http://www.icefaces.org/main/resources/
http://www.icefaces.org/main/demos/
MyFaces
http://myfaces.apache.org/docindex.html
Cada una de ellas con diversos componentes muy útiles. Hace algunos meses decidi dejar de usar JSP y probar JSF. No me arrepiento. Creo que ahora escribo código más limpio y legible.

EL: Expression Language

Es un lenguaje especial que nos permite acceder directamente a las propiedades o métodos de los beans desde el código de las páginas (jsp y/o xhtml).
Ejemplo
<h3>
#{"Este es un ejemplo"}</h3>
La salida seria:

Este es un ejemplo

Otro ejemplo
23+64= #{23+65}
La salida seria: 23+64=87
En fin, se pueden realizar todas las operaciones aritméticas y lógicas al igual que en JSP.

ManagedBean

Algo parecido a los Servlets, es una clase java que recibe peticiones y procesa resultados de las páginas web.

Faces config

Es un documento xml en el cual defines los beans de tu aplicación. También defines las "reglas de navegación"entre tus páginas . Es importante tenerlo para saber que página debe mostrarse de acuerdo al suceso/evento que la invoca.
Bueno, ahora un ejemplo sencillo.
1. Crear una aplicación que genere un número aleatorio, y que el usuario trate de adivinarlo.
Primero creo el Bean
 /*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.primefaces.ejemplos; import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import java.util.Random;
/**
 *
 *  */

@ManagedBean
@RequestScoped
public class RandomBean {
    private int numero;
 
 
     /** Creates a new instance of RandomBean */
    public RandomBean() {
    }
    /**
     * @return the numero
     */

    public int getNumero() {
        return numero;
    }
    /**
     * @param numero the numero to set
     */

    public void setNumero(int numero) {
        this.numero = numero;
    }
 
     public String ir_calculo(){
      return "calculo02";
    }
 
     public int obtenerNumero(){
      return (int)(Math.random()*100);
     }
 
 
 
}
Ahora el formulario entrada.xhtml
 <h2>Generar número aleatorio</h2>
<h:form>
    <h:panelGrid>
 
        <h:outputLabel value="#{msgs.titulo4}"></h:outputLabel>
        <h:inputText value="#{randomBean.numero}"></h:inputText>
       <h:commandButton action="#{randomBean.ir_calculo()}" value="adivinar" />
    </h:panelGrid>
 
 
</h:form>    
Aqui se muestran los valores datos.xhtml
 <h2>Datos obtenidos</h2>
<h:form>
    <h:panelGrid>
        <h:outputLabel value="#{msgs.titulo5}"></h:outputLabel>
        <h:outputLabel value="#{randomBean.numero}"></h:outputLabel>
        <h:outputLabel value="#{msgs.titulo6}"></h:outputLabel>
        <h:outputText value="#{randomBean.obtenerNumero()}"></h:outputText>
     
        <!-- aqui hago la comparación-->
   
      <h:outputLabel value="#{msgs.titulo7}"></h:outputLabel>
         <h:outputLabel value="#{randomBean.numero==randomBean.obtenerNumero() ?'Correcto':'Incorrecto'}">
              </h:outputLabel>
     
   
   
    </h:panelGrid>
</h:form>
     
     
    <h:outputLink value="http://localhost:8080/pruebaPrimeFaces/faces/index.xhtml"><h:outputText value="Regreso"/></h:outputLink>
El faces-config.xml
<?xml version='1.0' encoding='UTF-8'?> <!-- =========== FULL CONFIGURATION FILE ================================== -->
<faces-config version="2.0"
   xmlns="http://java.sun.com/xml/ns/javaee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee <a href="http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd">
<navigation-rule>
" title="http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd">
<navigation-rule>
">http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd">
<navigatio...</a>        <from-view-id>*</from-view-id>
        <navigation-case>
            <from-outcome>calculo02</from-outcome>
            <to-view-id>/datos.xhtml</to-view-id>
        </navigation-case>
        </navigation-rule>
<managed-bean>
        <managed-bean-name>RandomBean</managed-bean-name>
        <managed-bean-class>org.primefaces.ejemplos.RandomBean</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
    </managed-bean>
</faces-config>

martes, 13 de diciembre de 2011

Ejemplo de uso de MySQL: una pequeña bitácora




Tener una bitácora nos ayuda a tener un mejor control de nuestra información:

  • ver quien hace cambios por “error”
  • ver la fecha
  • tipo de operación (inserción, actualización y/o borrado)


Bueno he aquí los pasos para crear una pequeña bitácora


1. Crear la base de datos

create database prueba1;
show databases;
use prueba1;

2. Crear una tabla llamadas personas

create table personas (id_persona int auto_increment primary key, nombre varchar (50), apellido_p varchar (50), apellido_m varchar(50), edad int, peso double, talla double);

3. Crear un procedimiento almacenado para insertar registros


DELIMITER $$
DROP PROCEDURE IF EXISTS `prueba1`.`Insertar` $$
CREATE PROCEDURE `prueba1`.`Insertar`(in nombre varchar (50), apellido_p varchar (50), apellido_m varchar(50), edad int, peso double, talla double)

BEGIN
INSERT INTO personas (nombre,apellido_p, apellido_m , edad , peso , talla) VALUES (nombre,apellido_p, apellido_m , edad , peso , talla );

END $$

DELIMITER ;



4. Crear un procedimiento almacenado para actualizar registros

DELIMITER $$
DROP PROCEDURE IF EXISTS `prueba1`.`Actualizar` $$
CREATE PROCEDURE `prueba1`.`Actualizar` (in id_personax int,edadx int,pesox double)
BEGIN
update personas set edad=edadx,peso=pesox where id_persona=id_personax;
END $$

DELIMITER ;



5. Crear un procedimiento almacenado para eliminar registros


DELIMITER $$

DROP PROCEDURE IF EXISTS `prueba1`.`Borrar` $$
CREATE PROCEDURE `prueba1`.`Borrar` (in id int)
BEGIN
delete from personas where id_persona=id;
END $$

DELIMITER ;


6. Invocar los procedimientos almacenados

Call Insertar (‘Horacio’,’Gomez’,’Carmona’,25,65,1.68);
Call Insertar (‘Hugo’,’Torres’,’Mendez’,32,67,1.70);
Call Actualizar (1, 26, 66);
Call Borrar (2)

Ver registros

Select * from personas;

7. Crear un procedimiento almacenado que muestre todos los registros

DELIMITER $$

DROP PROCEDURE IF EXISTS `sp_verPersonas` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_verPersonas`()
select *from personas $$

DELIMITER ;


Para invocarlo

Call sp_verPersonas();




8. Crear tabla que lleve un control de quien hace cambios en la base de datos prueba1

CREATE TABLE infobase (usuario varchar (50), descripcion varchar (50),
fecha TIMESTAMP default now());


9. Crear trigger para la inserción

delimiter $$

create trigger tr_insercion
befote insert on personas
for each row
begin
insert into infobase values(user(),’persona creada’,now());

end $$


10. Crear trigger para la actualización

delimiter $$

create trigger tr_actualizacion
befote update on personas
for each row
begin
insert into infobase(usuario,descripcion,fecha) values(user(),’persona modificada’,now());

end $$


11. Crear trigger para la eliminación

delimiter $$

create trigger tr_borrado
befote delete on personas
for each row
begin
insert into infobase values(user(),’persona eliminada’,now());

end $$


Ver cambios

Select *from infobase;


12. Crear procedimiento almacenado para ver un registro en particular

DELIMITER $$

DROP PROCEDURE IF EXISTS `sp_verPersona` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_verPersona`(in id_buscar int)
select *from personas where id_persona=id_buscar $$

DELIMITER ;

13. Ahora hacer una operación: calcular el I.M.C. (Índice de Masa Corporal) de las personas registradas

Fórmula: peso/(talla*talla)

DELIMITER $$

DROP PROCEDURE IF EXISTS `sp_verImc` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_verImc`()
select id_persona,nombre,edad,peso,talla,peso/(talla*talla) from personas $$

DELIMITER ;


14. Programa en Java para ver los registros
package control.pruebas;

import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;

public class Codemonkey {


public static void main(String[] args) {
try{
Class.forName("com.mysql.jdbc.Driver");
Connection conecta=(Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/prueba1","root","root");
System.out.println("Conexión exitosa\n");
Statement sentencia= conecta.createStatement();
ResultSet registro=sentencia.executeQuery("select id_persona,nombre,edad,peso,talla,peso/(talla*talla) from personas");
while(registro.next()){
System.out.println("\t\nId: "+registro.getInt("id_persona"));
System.out.println("Nombre: "+registro.getString("nombre"));
System.out.println("Edad:"+registro.getInt("edad"));
System.out.println("Peso:"+registro.getDouble("peso"));
System.out.println("Talla: "+registro.getDouble("talla"));
System.out.println("IMC: "+registro.getDouble("peso/(talla*talla)"));
}
conecta.close();
System.out.println("\nConexión cerrada");
}catch(Exception ex){
ex.printStackTrace();
}

}


}



Vibe Coding (la programación vía IA): ¿el futuro de la programación?

Vibe Coding es un nuevo paradigma de programación, una nueva forma de crear código. Es un enfoque emergente en el desarrollo de sof...

Etiquetas

Archivo del blog