miércoles, 31 de diciembre de 2014

Python: jugando con PyZenity


A continuación una serie de ejemplos muy básicos usando la librería PyZenity, ya antes había escrito algo sobre esta.  La documentación se encuentra en: http://brianramos.com/software/PyZenity/docs/

nota: Para realizar estos ejemplo se uso  Sublime Text y la terminal de comandos de Linux.

1. Un ejemplo sencillo para obtener la fecha del sistema:
try:
    import PyZenity
    fecha=PyZenity.GetDate('Por favor selecciona una fecha',selected=False)
    PyZenity.InfoMessage('Fecha seleccionada '+str(fecha))
except ImportError:
    print "necesitas instalar la librería PyZenity"




2. Supongamos quiero mostrar un mensaje de error del tipo 'alert' entonces escribiría algo así:

from PyZenity import ErrorMessage
try:
    import imaginario #no existe esta librería, provocará un error
except ImportError:
    ErrorMessage('No existe la librería: imaginario')




3. Si queremos seleccionar una carpeta de nuestro sistema ocuparemos GetDirectory:

from PyZenity import GetDirectory
from PyZenity import InfoMessage

dir=GetDirectory(multiple=False,selected=None,sep=None)
InfoMessage("seleccion: "+str(dir))




4. Ahora usamos GetFilename para obtener el nombre de un archivo:

from PyZenity import GetFilename
from PyZenity import InfoMessage

arch=GetFilename(multiple=True,sep='|')
InfoMessage("seleccion: "+str(arch))





5. Uso de Question e InfoMessage:
from PyZenity import Question
from PyZenity import InfoMessage

if Question('Tienes instalado Linux?'): #nos devolverá un booleano
    InfoMessage('Bienvenido')
else:
    InfoMessage('Deberias instalar Linux')



6. Uso de Notification, puede servirnos para crear mensajes de notificación.

from PyZenity import Notification

try:
    import imaginario
except ImportError:
    Notification(text='Ha ocurrido un error')



Son solo algunas cosas que se pueden hacer con PyZenity.

domingo, 14 de diciembre de 2014

¿Por qué programamos?

Es una pregunta que deberíamos hacernos antes de empezar a estudiar y/o aprender programación. La pregunta parece tan sencilla y compleja a la vez.

¿Por qué programamos? Algunos dirán que programamos porque nos pagan, otros porque les parece muy divertido y otros más divagarán en sus respuestas.

Tal vez la respuesta más lógica (y adecuada) es porque necesitamos resolver problemas. Es obvio que estos problemas tienen que ver con las empresas o centros de trabajo donde estamos. Donde se nos paga por crear programas o depurar proyectos existentes.


También existen personas que programan porque les motiva a crear cosas y no necesariamente estudiaron computación (o algo relacionado con las computadoras).  Así como hay gente que programa aunque no les guste (sic). 

Con el tiempo "el gusto de programar" puede terminar; gente que es muy buena programando y resolviendo problemas relativos a la programación, pero que termina odiando su trabajo.

Los que nos dedicamos a la programación debemos entender que no todos sabemos de todo, algunas cosas nos parecerán muy sencillas y otras nos provocaran mucha frustración al no poder resolverlas lo más rápido posible.

También la frustración de usar un lenguaje o herramienta que no nos guste, por ejemplo, usar Visual Studio (con C#) en lugar de Java o Python con Eclipse o cualquier otro IDE; las fechas de entrega de proyectos, las desveladas, no tener vida social, soportar personas que no nos agradan, etc..

A veces tienes que trabajar con gente que no tiene idea de lo que es la programación e ignora cual es tu trabajo, o peor  que ni el mismo tiene idea de lo que él hace ahí.  Su jefe inmediato le pide que ponga a trabajar a los de sistemas. ¿En qué? Ni él mismo lo sabe, solo hace lo que le pidieron.

En los comics de Dilbert se puede ver cada situación que viven los programadores, lo manejan de una manera muy sarcástica, pero aunque parezca exagerado no dista mucho de la realidad.

Para concluir, programamos porque necesitamos resolver problemas de la gente, por ejemplo, diseñar un programa para los cajeros automáticos, hacer que la interfaz sea lo más sencilla para el usuario final (aunque esta comprobado que eso no ayuda mucho, ya que la gente muchas veces no sabe usarlos aunque solo consista en apretar unos cuantos botones).

domingo, 23 de noviembre de 2014

Programando en Java ... no. 9

Acaba de salir la nueva versión de la librería NiconNotify OSD , la cual provee clases para crear mensajes tipo "alert" de Java Swing.

Un ejemplo.

import javax.swing.UIManager;
import javax.swing.plaf.nimbus.NimbusLookAndFeel;

import nicon.notify.core.Notification;

public class TestNiconNotify {

    public static void main(String[] args) {
        try{
            UIManager.setLookAndFeel(new NimbusLookAndFeel());
            int respuesta=Notification.windowConfirmMessage(null, "Confirmacion", "Desea borrar Windows de sus sistema?");
            if(respuesta==1){
                Notification.windowMessage(null, "Respuesta", "Claro, quiero eliminar Windows de mi sistema");
            }else{
                Notification.windowMessage(null, "Respuesta", "No, todavia no.");
            }
           
        }catch(Exception ex){
            System.err.println("error: "+ex.getCause());
        }

    }

}

Ejecutando programa:





Programando en Java ... no. 8

Este ejercicio es muy sencillo, no es nada del otro mundo, crearemos una conexión a una base de datos MySQL, un método para insertar, actualizar, borrar y mostrar todos los datos de una tabla.

Herramientas:
  • Eclipse Luna
  • Librería  mysql-connector-java-5.1.34-bin.jar

Creamos la base de datos
create database test;

Creamos la tabla persona
create table persona(id int auto_increment primary key, nombre varchar(55),apellidoP varchar(55),apellidoM varchar(55),edad int, peso float,talla float);

Insertar valores a la tabla
insert into persona (nombre,apellidoP,apellidoM,edad,peso,talla) values ("Ernesto","Huerta","Flores",44,78.2,1.70), ("Mariana","Garcia",Torres",23,56.0,1.67);

Código de la conexión a la base de datos (Conexion.java)

La clase Persona.java tendrá las mismas propiedades de la tabla persona

public class Persona {
    private Integer id;
    private String nombre;
    private String apellidoP;
    private String apellidoM;
    private int edad;
    private Float peso;
    private Float talla;
   
    public Persona(){}

    //...demás métodos
}


Método para consultar los datos de la tabla



Método para crear persona

;


Método para actualizar persona
Método para eliminar persona

sábado, 25 de octubre de 2014

Julia en ejemplos no.2

En este ejemplo vamos veremos como introducir datos y crearemos una función para calcular el área de un triángulo equilátero.

  1. Función para leer datos
  2. Función para calcular área
  3. Cuerpo principal del programa

#función para leer datos
function entrada(prompt::String="")
   print(prompt)
   chomp(readline())
end

#función para calcular área
function area(b,h)
  return (b*h) / 2.0
end

#cuerpo  principal del programa
begin
  run(`clear`)
  base=float(entrada("Introduce base:"))
  altura=float(entrada("Introduce altura:"))
  println("area obtenida: ",area(base,altura))
end


¿Cómo ejecuto el script?
julia nombreDeTuprograma.jl


sábado, 11 de octubre de 2014

Programando en Ceylon ... no. 4

Continuamos con la programación en Ceylon. En esta ocasión veremos un ejemplo de interfaces y clases abstractas.


Ejemplo. Programa que calcule el área de un triángulo, un cuadrado, y un circulo. 

Áreas (fórmulas):

Triángulo => (base*altura)/2 
Cuadrado => lado^2
Circulo => 3.14159*(radio^2)


Crearemos:
  1. Una interface
  2. Una clase base abstracta
  3. Tres clases hijas
 ¿Cómo creo una interface en Ceylon?
 shared interface NombreInterface{ ... }

Llamaremos 'Operaciones' a nuestra interface, escribimos un método 'area', el cual nos servirá más adelante.

shared interface Operaciones{
   shared formal Float area();
}

Es muy similar a Java, aunque es obvio que las anotaciones y palabras reservadas van a cambiar.

La clase base abstracta quedará así:

abstract class Figura() of Triangulo|Cuadrado|Circulo satisfies Operaciones{ }

La parte  "of Triangulo|Cuadrado|Circulo"  nos indica las clases hijas, la parte "satisfies Operaciones" es similar al implements de Java.


Las clases hijas quedarán de la siguiente forma:
shared class Triangulo(base,altura) extends Figura(){
     shared Float base;
    shared Float altura;

    shared actual Float area(){
        return (base*altura)/2.0;
    }

    shared String description = "Triangulo(base: ``base``, altura: ``altura``)"

}
shared class Cuadrado(lado) extends Figura(){
shared Float lado;

    shared actual Float area(){
        return lado^2;
    }

    shared String description = "Cuadrado(lado: ``lado``)";


}
shared class Circulo(radio) extends Figura(){
  shared Float radio;

    shared actual Float area(){
        return 3.14159*(radio^2);
    }

    shared String description = "Circulo(radio:  ``radio``)"


}

Finalmente el método principal del programa.
shared void run(){

    Triangulo triangulo=Triangulo(12.9,20.0);
    Cuadrado cuadrado=Cuadrado(3.7);
    Circulo circulo=Circulo(2.9);
    print(" ``triangulo.description``");
    print(" ``cuadrado.description``");
    print(" ``circulo.description``");
    print(" area triangulo: ``triangulo.area()``");
    print(" area cuadrado: ``cuadrado.area()``");
    print(" area circulo: ``circulo.area()``");
}

Compilamos: ceylon compile source/elefante.ceylon
Ejecutamos: ceylon run default


sábado, 13 de septiembre de 2014

Programando en C# no. 3 ...

Ingenieria económica en C#

Una alternativa para enseñar a programar es mediante ejemplos.  Tal vez a muchos no les interese para nada las matemáticas, sin embargo son necesarias en varios aspectos de nuestra vida.  Por ejemplo, a muchos de nosotros se nos complica la administración del dinero. Creemos que solo es para gastar, pero no es así. 

Planeamos comprar un auto, pagar deudas, etc. Sin embargo no tenemos un plan para hacerlo, y llegan los problemas. 

Preguntas como: 

  • ¿Cuánto debo ahorrar para pagar mis estudios universitarios?
  • ¿Es necesario conseguir una tarjeta de crédito? 
  • Si pido un préstamo ¿Cuánto tendré que pagar después? 
  • Etc.

No es indispensable contar con grandes cantidades de dinero o ser dueño de una empresa para poder administrar nuestro dinero. Tampoco ser experto en matemáticas financieras.

¿Qué es la ingeniería económica?
Es una colección  de técnicas matemáticas que simplifican las comparaciones económicas. 


Básicamente nos ayudan a tomar decisiones respecto al uso del dinero. 


Pasos para resolver problemas
  1. Identificar el problema y entenderlo claramente
  2. Definir las variables necesarias
  3. Escribir los pasos necesarios para resolver el problema 
  4. Convertir esa solución a código
Supongamos que pido una cantidad en préstamo a una tasa de interés fija y en un determinado plazo de pago, ¿Cuánto tendré que pagar al final de ese plazo?. 
 
Valor futuro

vf=vp*(1+n)**n



Esta fórmula nos sirve para obtener el valor futuro (vf) de esa cantidad en préstamo (vp) dado una tasa de interés (i) y un plazo de pago (n). Es la suma o valor  del dinero en algún futuro.

Ejemplo. María Isabel pide un préstamo de $ 12,000.00 a una tasa de interés del 3% y un plazo de pago de 4 años. Determinar el valor futuro de esa cantidad.

Paso 1: Identificar el problema.

Lo que nos pide es obtener el valor o suma de esa cantidad.

Paso2: Definir las variables necesarias.

vf=¿?

vp= $12,000.00

i= 3%

n= 4 años


Paso 3: Escribir los pasos necesarios para resolver el problema.

Realizamos el algoritmo. 
Calcular_ValorFuturo

Entrada: vp, i, n

Salida: vf  
Inicio

Escribe "Introducir monto inicial"
Lee vp
Escribe "Introducir tasa de interés"
Lee i 

Escribe "Plazo a pagar" 
Lee n 
Si (n>0 && i>0 && vp>0) entonces

    vf= vp * (1+i/100)**n 

fin_si 
otro
     Escribe  "no debe haber valores menores a cero"

fin_otro 
Escribe "El valor futuro es  %.2f"%(vf) 
Fin

Paso 4:  Convertir a código

En este caso usaremos C#, es necesario tenerlo instalado. Creamos un nuevo proyecto de tipo Windows Forms.


Lo nombramos "IngenieriaEconomica".



Para hacer uso del componente InputBox es necesario dirigirse al Explorador de soluciones, dar clic derecho a References, dentro de la etiqueta .NET seleccionar Micrososft.VisualBasic y aceptar.


Comenzamos colocando dos botones y una etiqueta. En el código del botón Quitar colocamos:

Environment.Exit(0); 

Dentro del botón Calcular colocamos:

double vp=0.0,vf=0.0,i=0.0;

int n=0;

try{

    vp=double.Parse(Microsoft.VisualBasic.Interaction.InputBox("Introduce monto inicial"));

    i=double.Parse(Microsoft.VisualBasic.Interaction.InputBox("Introduce tasa de interés"));

    n= int.Parse(Microsoft.VisualBasic.Interaction.InputBox("Introduce plazo"));

   if(n>0 && i>0 && vp>0){

        vf=vp*Math.Pow(1+i/100,n);

}else{

MessageBox.Show("no debe haber valores menores a cero");

}

label1.Text= "el valor o suma total generada es de $ "+vf;

}catch(Exception ex){

MessageBox.Show("Error: "+ex.Message);

}




Resultado: 













Listo



sábado, 30 de agosto de 2014

Groovy ... en ejemplos no. 4

Herencia
Al definir clases esperamos que estas cumplan todos los  requisitos necesarios, ni más ni menos. Si creamos una clase llamada Imagen, esta debe tener atributos que la identifiquen: nombre, tamaño, y url.

class Imagen{
     String nombre
     String tamanyo
     String url
}

Ahora una clase llamada TestImage con método main.

class TestImage{
     static main(args){
      def imagen=new Imagen(nombre:"Groovy.jpg",tamanyo:"45kb",url:"http://misimagenes.com.mx")  
   }

  //también podría haber sido así
  def imagen=new Imagen()
   imagen.with{
nombre="Groovy.jpg" 
tamanyo="45kb" 
url="http://misimagenes.com.mx"
   }

}

Al parecer no existe problema alguno, esta clase cumple su objetivo. Ahora ¿qué pasaría si necesitaramos agregarle alguna 'funcionalidad' extra? para ello usaremos la herencia.

Vamos a crear:
  • Una clase base (o padre) llamada Heroe
  • Dos clases hijas llamadas Superman y Batman 
  • Dos interfaces llamadas Superpoderes y Habilidades
  • Una clase llamada TestHeroe

//clase base
class Heroe{}
//clase hija hereda de clase padre
class SuperHeroe extends Heroe{}

//hace uso de los métodos de la interface Superpoderes
class Superman extends SuperHeroe implements Superpoderes{
    @Override
    public void vuelo(){
        println "Superman vuela"
    }

    @Override
    public void velocidad(){
        println "Superman corre a gran velocidad"
    }

    @Override
    public void fuerza(){
        println "Superman posee gran fuerza"
    }
}


//hace uso de la interface Habilidades
class Batman extends SuperHeroe implements Habilidades{
    @Override
    public void karate(){
        println "Batman sabe karate"
    }
}


interface Superpoderes{
    public abstract void vuelo()
    public abstract void velocidad()
    public abstract void fuerza()
}

interface Habilidades{
    public abstract void karate()
}


class TestHeroe{
    static main(args) {
        Superman superman=new Superman()
        Batman batman=new Batman()

        superman.vuelo()
        superman.velocidad()
        superman.fuerza()

        batman.karate()
    }
}


Salida:
Superman vuela
Superman corre a gran velocidad
Superman posee gran fuerza
Batman sabe karate

 

Ejecutamos: groovy TestHeroe.groovy

Código:http://www.pasteall.org/53722/groovy

sábado, 23 de agosto de 2014

Julia en ejemplos no. 1

¿Qué es Julia?
Se trata de un lenguaje de programación parecido a R, diseñado para fines científicos (matemáticas, estadística,etc.).  Descarga: Julia Lang

Posee un REPL, basta teclear julia en la terminal y aparecerá.

Julia en ejemplos

Guardar un archivo con la extensión *.jl llamado ejemplos.jl

0.Ejecutar código
julia ejemplos.jl  

1. Imprimir un mensaje
print("La programación parece ser muy sencilla...")

2. Definir variables y constantes
variable_entera=36
const CONSTANTE=200
variable_cadena="La generación de los 80's era la que tenia la mejor música"

3.  Iniciar instrucciones
begin
   #instrucciones del programa
end

4. Definir una función
#esta no devuelve nada
function  imprimirMensaje(){
   print("Julia es un lenguaje similar a R")
}

function doble(n){
  return n*n
}

5. Definir y recorrer un vector
vect=[] #vector vacío
vect=[32,54,10,45] #posiciones 1: 32, 2:54, 3:10, 4:45

for v in vector
    println(v)
end

6. Condiciones
vect=["Juan","Paco","Maria","Ernesto","Rosa"]

#imprimira Paco
for v in vector
   if v == "Paco"
     println(v)
   end
end

7. Ejecutar un comando del sistema run(comando)
#en este caso un comando de Linux
run(`clear`) #limpiar pantalla

8. Try-Catch
try 
   funcion_noexistente()
catch e
   println("el error es: ",e)
end

9.  Introducir datos
 function entrada(prompt::String="")
    print(prompt)
    chomp(readline())
  end

begin
  run(`clear`)
  nombre=entrada("¿Como te llamas?:")
  edad=int(entrada("¿Cuantos años tienes?:"))
  println("Hola ",nombre," tienes ",edad, " años")
  print("tipos: nombre[",typeof(nombre),"] - edad[",typeof(edad),"]")
end


domingo, 10 de agosto de 2014

Scala ... ejemplos sencillos no. 6

Tipado dinámico de Scala
Scala es un lenguaje que combina la programación orientada a objetos y la funcional,además es de tipado estático, esto quiere decir que se debe tener cuidado a la hora de definir variables (su tipo).

Si defines una variable es necesario hacer uso de var y val.

var nombre:String="Alfonso"
val nombre_estatico:String="Mariana"

Si tratamos de reasignar valores obtendremos:

nombre="Alfonso Quaron" //es válido,por que usamos var
nombre_estatico="Mariana Alcantara" //no es válido, usamos val

Ahora creamos dos clases:
  • Base
  • Subclase

class Base(val nombre:String=null){}

class SubClase(override val nombre:String=null) extends Base(nombre){}

object Scalar{
    def main(args:Array[String]):Unit={
       val base=new Base() //se puede tomar como null
       val sub=new SubClase()
       //si trato de de reasignarl valor al miembro nombre ocurrirá un error
       base.nombre="Base"
      sub.nombre="SubClase"
   }


Entonces lo correcto sería:

val base=new Base("Base")
 val sub=new SubClase("SubClase")

Console.println(base.nombre)
Console.println(sub.nombre)

Resultado:
Base
SubClase

Lenguajes como Python Ruby Groovy permiten reasignar valores a las variables.

En Python:
dato="Las serpientes se arrastran por el piso"
print type(dato)

#ahora cambiamos su 'tipo' y valor
dato=12.90
print type(dato)

En Ruby:
dato="Un diamante en bruto"
print dato.class

#ahora cambiamos su 'tipo' y valor
dato=23.0
print dato.class

 En Groovy:
dato="Es un ambiente muy Groovy"
dato instanceof String  //nos da true

dato=123
dato instanceof Integer //nos da true

En conclusión tenemos:

Tipado dinámico
  • Se permite reasignar valores
  • El tipo de dato no es fijo 

Tipado estático
  • No se permite reasignar valores
  • El tipo de dato no debe cambiar

domingo, 3 de agosto de 2014

Programando en Perl ... no. 6

Ejercicios básicos
 La única forma para aprender programación es la practica continua. En esta ocasión se usará Perl para realizar estos ejercicios.

1.  Hacer un programa que determine si un número es par o impar. Un número par es un entero que puede ser dividido entre dos y su residuo nos da cero.

#ejecutar: perl   par.pl
use strict;
use warnings;

#declaramos la variable numero
my ($numero);

print "Introduce un número:";
$numero=<STDIN>;
chomp($numero);#quitamos los espacios
if($numero%2==0){
   print "El número ",$numero," es par\n";
}else{
   print "El número ",$numero," es impar\n";
}

2. Hacer un programa que determine si un número (A) es múltiplo de otro número (B). 

#ejecutar: perl multiplo.pl
use strict;
use warnings;

#declaramos los dos números
my ($a,$b);

print "Introduce número (A): ";
$a=<STDIN>;
chomp($a);

print "Introduce número (B):";
$b=<STDIN>;
chomp($b);

#determinamos si son o no múltiplos
if($a>$b){
  if($a%b==0){
      print "(A) ",$a," es multiplo de (B) ",$b,"\n";
  }else{
     print "(A) ",$b," no es multiplo de (B) ",$b, "\n";
   }
}else{
 if($b%$a==0){
    print "(A) ",$a," es multiplo de (B) ",$b,"\n";
  }else{
   print "(A) ",$a,"  no es multiplo de (B) ",$b,"\n";
  }
}

3.Hacer un programa que determine el mayor, el mediano y el menor de tres números.

#ejecutar: perl determinar.pl
use warnings;
use strict;

#creamos una constante 'booleana'
use constant VERDADERO => 1;

my($a,$b,$c,$continuar);

do{
    print "\n[Número mayor, mediano y menor de tres números]\n";

print "Introduce número (A):";
$a=<STDIN>;
chomp($a);
print "Introduce número (B):";
$b=<STDIN>;
chomp($b);
print "Introduce número (C):";
$c=<STDIN>;
chomp($c);

if($a>$b && $a>$c){
    print "el numero  A ",$a," es el mayor\n";
    if($b>$c){
        print "el numero  B ",$b," es el mediano\n";
        print "el numero  C ",$c," es el menor\n";
    }else{
        print "el numero  C ",$c," es el mediano\n";
        print "el numero  B ",$b," es el menor\n";
    }
}else{
    if($b>$a && $b>$c){
        print "el numero  B ",$b," es el mayor\n";
        if($a>$c){
            print "el numero  A ",$a," es el mediano\n";
            print "el numero  C ",$c," es el menor\n";
        }else{
            print "el numero  C ",$c," es el mediano\n";
            print "el numero  A ",$a," es el mediano\n";
        }

    }else{
        print "el numero  C ",$c," es el mayor\n";
        if($a>$b){
            print "el numero  A ",$a," es el mediano\n";
            print "el numero  B ",$b," es el menor\n";
        }else{
            print "el numero  B ",$b," es el mediano\n";
            print "el numero  A ",$a," es el menor\n";
        }
    }

}#fin else

print "Desea continuar? (Si->s , No->n):";
$continuar=<STDIN>;
chomp($continuar);
if($continuar eq 'n'){
 last;#alternativa a 'break'   
}
 

}while(VERDADERO);


4. Hacer un programa que determine el mayor de cinco números. En vez de definir cinco variables, definimos un vector de cinco elementos.

#ejecutar: perl mayor.pl
use strict;
use warnings;

use constant MAX => 5;

#definimos las variables necesarias
my(@numeros,$mayor,$tam);

#introducimos cinco números
for (my $i = 0; $i < MAX; $i++) {
    print "Introduce número[ ",($i+1),"]:";
    $numeros[$i]=<STDIN>;
    chomp($numeros[$i]);
}
$tam = scalar (@numeros);#obtenemos tamaño del vector
$mayor=0;
#determinamos el número mayor
for (my $j = 0; $j < $tam; $j++) {
    if($mayor<$numeros[$j]){
        $mayor=$numeros[$j];
    }
}
print "El número ",$mayor," es el mayor\n";



Eso es todo por hoy. 

miércoles, 30 de julio de 2014

Programando en C++ ... no. 4

"Siempre programo como si la persona que mantendrá mi código fuera un psicópata que sabe donde vivo."  
::Martin Golding::

 Ejercicios de programación
 1. En este ejemplo vamos a crear y usar un archivo de cabecera (se guardan con la extensión *.h). Ahí escribiremos las variables, constantes y funciones.
//archivo: funciones.h

#ifndef __CABECERA_H
#define __CABECERA_H

#define MAX 3   //podemos crear una variable constante con valor de 3
#define PULSACIONES (e) (220-e)/15  //una función para calcular las pulsaciones de una persona 
using std::cout;
using std::endl;

//también podemos escribir funciones de manea tradicional
void mensaje(){
    cout<<"Este es un simple mensaje"<<endl;
}

#endif /*__CABECERA_H*/

¿Cómo se puede usar?
Creamos un archivo llamado prueba.cpp y declaramos el archivo de cabecera funciones.h.
//archivo:prueba.cpp
#include "funciones.h"
#include "iostream"

using namespace std;

int main(){
    int numeros[MAX];
    numeros[0]=9;
    numeros[1]=21;
    numeros[2]=54; //al tratar de recorrer el vector provoca un bug
    mensaje(); 
   //obtener pulsaciones de una persona de 43 años de edad
    cout<<"Pulsaciones: "<<PULSACIONES(43)<<endl;
   return 0;
}
 
2. Al programar en C++ tenemos la ventaja de la programación funcional y la orientada a objetos, en este ejemplo escribiremos:
  •  Un archivo (funcional.cpp) que usa funciones para obtener el perímetro y área de un circulo
  • Un archivo de cabecera que contendrá las funciones: perimetro() y area()
  • Otro archivo (objeto.cpp) que instancia una clase que posee los métodos para obtener lo mismo
//archivo de cabecera: funciones.h
#ifndef __CABECERA_H
#define __CABECERA_H
#define PI 3.14159

double perimetro(double d){
    return PI*d;
}

double area(double r){
    return PI*(r*r);
}


#endif /*__CABECERA_H*/

//funcional.cpp
#include "iostream"
#include "funciones.h"

using namespace std;
 
int main(){
   double radio=0.0,diametro=0.0;
    cout<<"Introduce radio: ";
    cin>>radio;
    cout<<"Introduce diametro: ";
    cin>>diametro;
    cout<<"diametro: "<<perimetro(diametro)<<" , area: "<<area(radio)<<endl;
  return 0;
}

//objeto.cpp
#include "iostream"

using namespace std;


class Circulo{
private:
    double radio;
    double diametro;
public:
    static const double PI=3.1459;
    Circulo(){cout<<"objeto circulo creado"<<endl;}
    virtual ~Circulo(){cout<<"objeto circulo destruido"<<endl;}
    void setRadio(double r){this->radio=r;}
    double getRadio(){return this->radio;}
    void setDiametro(double d){this->diametro=d;}
    double getDiametro(){return this->diametro;}
    double calc_diametro(){return this->diametro*PI;}
    double calc_area(){return PI*(this->radio*this->radio);}
};


int main(){
    Circulo circulo=Circulo();
    double radio=0.0,diametro=0.0;
    cout<<"Introduce radio: "<<endl;
    cin>>radio;
    cout<<"Introduce diametro: "<<endl;
    cin>>diametro;
    circulo.setRadio(radio);
    circulo.setDiametro(diametro);
    cout<<"diametro: "<<circulo.calc_diametro()<<" , area: "<<circulo.calc_area()<<endl;
    return 0;
}


Esto esto por hoy.

Links
http://foro.elhacker.net/programacion_c/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html


miércoles, 23 de julio de 2014

Groovy ... en ejemplos no. 3

Vamos hacer un sencillo ejemplo, consiste en simular el lanzamiento de 3 monedas, con dos caras: ÁGUILA y SOL.

Tres jóvenes lanzan (cada uno) una moneda, si todas son iguales nadie ganará. El ganador es quien tenga la moneda que cae con un resultado distinto a las otras dos.

Ejemplo.
          Juan   |     Miguel     |      Omar       |  Ganador
ÁGUILA           SOL            ÁGUILA            Miguel

Juan   |     Miguel     |      Omar       |  Ganador
                                       SOL           SOL            SOL           Nadie gana, las monedas son iguales

Una vez entendido el problema se procede a definir las variables y funciones.

Necesito definir a la moneda con dos caras:
def moneda=["SOL","AGUILA"]# índice 0 :SOL  , índice 1: AGUILA

También necesito una forma de generar un resultado aleatorio (SOL o ÁGUILA), para ello nenecitola clase Random  de Java
import java.util.Random

También necesito tres variables para guardar los resultados:
def juan=""
def miguel=""
def omar=""

¿Cómo genero al guardo el  resultado ?
def juan=moneda[new Random()nextInt(2)] //para que sea de 0 a 1

Finalmente tenemos:  aleatorio.groovy

import java.util.Random
//para limpiar pantalla, solo plataformas Linux
println "clear".execute().text

def moneda=["SOL","AGUILA"]
def juan=""
def miguel=""
def omar=""

println "Turno de Juan"

juan=moneda[new Random().nextInt(2)]
println "$juan"

println "Turno de Miguel:"
miguel=moneda[new Random().nextInt(2)]
println "$miguel"

println "Turno de Omar:"

omar=moneda[new Random().nextInt(2)]
println "$omar"

def ganador=""

if(juan.equals(miguel) && juan.equals(omar)){
    ganador="Las tres monedas son iguales, No hay ganador"
}else if(!juan.equals(miguel) && !juan.equals(omar)){
    ganador="El ganador es Juan"
}else if(!miguel.equals(omar) && !miguel.equals(juab)){
    ganador="El ganador es Miguel"
}else{
    ganador="El ganador es Omar"
}

println "$ganador"


Listo.

domingo, 20 de julio de 2014

Programando en Ceylon ... no. 3

Existe una herramienta para aprender a programar llamada PSeInt, en esta ocasión vamos a realizar ejemplos de programación básica y comparando esos códigos en Ceylon.

 
1. Se requiere obtener la talla de una persona sabiendo que su peso es de 54.5 kg y su índice de masa corporal es de 22.1.

Fórmulas:
imc=peso/(talla*talla)
peso=(talla*talla)*imc
talla=sqrt(peso/imc)

 Usando PSeInt escribimos:

 Y obtenemos:

Ahora en Ceylon: 
obtenerTalla.ceylon

void run(){
variable Float peso=54.5;
variable Float talla=0.0;
variable Float imc=22.1;

function sqrt(Float x) => x^0.5; //para obtener la raíz

talla=sqrt(peso/imc);
print("talla: ``talla`` ");
}

Compilamos y ejecutamos:

2. Obtener un bono de ventas, teniendo en cuenta que el objetivo (de ventas) debe ser igual o mayor a 300.
Obtenemos:

En Ceylon:

obtenerBono.ceylon

void run(){
  variable Integer ventas=320;
  variable Integer objetivo=300;
  variable String mensaje="";
  variable Float bono=0.0;

  if(ventas>=objetivo){
    bono=0.045*(ventas-objetivo);
    mensaje="Exito";
  }else{
    bono=0.0;
    mensaje="Fracaso";
  }

  print(" ``mensaje``  , bono obtenido: ``bono`` ");

}

Compilamos y ejecutamos:


3.  Un menú para elegir una película. Si es mayor de edad permitirá mostrar el menú.
Código:

Proceso obtener_opcion
    Definir opc Como Entero;
    Definir edad Como Entero;
    Definir permiso Como Logico;
    Definir aviso Como Caracter;
    aviso="";
   
    Escribir "¿Cuantos años tienes?";
    Leer edad;
   
    Si edad>=18 Entonces
        permiso=Verdadero;
    Sino
        permiso=Falso;
    Fin Si
   
    Si permiso Entonces
        Escribir "Cartelera Cine de Terror";
        Escribir "1. Masacre en Texas";
        Escribir "2. La isla de la bruja";
        Escribir "3. El misterio del valle de las sombras";
        Escribir "Elije una: ";
        Leer opc;
       
        Segun opc Hacer
            1:
                aviso="Debes traer ropa interior de sobra ... no es broma";
            2:
                aviso="Aceptable, si no quieres dormir varios días";
            3:
                aviso="Una opción bastante recomendable... para ir al psiquiatra";
            De Otro Modo:
                aviso="Esa opcion es invalida";
            Fin Segun
   
    FinSi
    Escribir aviso;
   
   
FinProceso


Obtenemos:


En Ceylon:
obtenerOpcion.ceylon

void run(){
  variable String aviso="";
  variable Boolean permiso=false;

  print("Cuantos años tienes?");
  String edadStr=process.readLine();
  Integer? _edad=parseInteger(edadStr);
 
  if(exists _edad){
    Integer edad=_edad;
    if(edad>=18){
      permiso=true;
    }else{
      permiso=false;
    }
  }
 
  if(permiso){
    print("Cartelera Cine de Terror");
    print("1. Masacre en Texas");
    print("2. La isla de la bruja");
    print("3. El misterio del valle de las sombras");
    print("Elije una: ");
    String opcStr=process.readLine();
    Integer? _opc=parseInteger(opcStr);

    if(exists _opc){
    Integer opcion=_opc;
    switch(opcion)
    case (1){aviso="Debes traer ropa interior de sobra ... no es broma";}
    case (2){aviso="Aceptable, si no quieres dormir varios días";}
    case (3){aviso="Una opción bastante recomendable... para ir al psiquiatra";}
    else{aviso="Esa opcion es invalida";}
    }


  }
  print("``aviso``");
 
 }


Compilamos y ejecutamos:

Espero les sirva.