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.

sábado, 19 de julio de 2014

Un vistazo a ... Julia

En está ocasión vamos hacer algunos ejemplos con Julia un lenguaje que a primera vista parece tomar inspiración de Python.

¿Cómo guardo un programa en Julia?
Con la extensión *.jl

¿Cómo ejecutó el programa?
julia miPrograma.jl

Este lenguaje posee un REPL.

Teclea una operación, por ejemplo una suma.



1. Mostrar una cadena
#esto es un comentario
cadena="Hola esta es una simple cadena"
println("contenido de la cadena: ",cadena)



2. Comparar dos cadenas
cadena="cL4v3S3cR3t4"

if cadena == "claveSecreta"
   println("Correcto");
else
   println
("Verifica");

end


3. Aqui obtenemos el consumo de combustible, teniendo en cuenta que la velocidad es de 120

begin
velocidad=120
consumo=0.0

if velocidad>80
  consumo=10.0;
elseif velocidad>100
  consumo=12.0;
elseif velocidad>120
  consumo=15.0;
else
  consumo=0.0;
end

println("consumo: ",float(consumo),"\n");

end


4. Obtener salario bruto y neto (hacemos uso del manejo de excepciones con try-catch)
#variables de entrada
horas=240
extras=0
tasa=0.34
#lo que queremos obtener
salarioBruto=0.0
salarioNeto=0.0

try
 
  if horas<=38
    extras=0
  else
    extras=horas-38
    horas=38
  end

  salarioBruto=horas*tasa+extras*tasa*1.5
  if salarioBruto<=300
    salarioNeto=salarioBruto
  else
    salarioNeto=salarioBruto*0.9
  end

  if salarioBruto == salarioNeto
    println("salario bruto y neto: ",salarioBruto)
  else
    println("salario bruto: ",salarioBruto)
    println("salario neto: ",salarioNeto)
  end

catch e
 println("error: ",e)
end


viernes, 11 de julio de 2014

Nuevos lenguajes de programación: Nimrod, Dylan, y Julia


Julia
Parecido a R, es un lenguaje enfocado al cálculo, estadística y la matemática en general.

http://julialang.org/

Nimrod
Un lenguaje que a primera vista nos recuerda a Scala o Python. Y no, no tiene nada que ver con Nimrod de los X Men.

https://github.com/Araq/Nimrod/wiki
http://steved-imaginaryreal.blogspot.mx/2013/09/nimrod-return-of-pascal.html
http://stackoverflow.com/questions/tagged/nimrod
http://nimrod-lang.org/download.html


Dylan
Una mezcla entre Ruby y Python, al menos a mi parecer.Y si, el nombre esta basado en Bob Dylan.

http://opendylan.org/books/dpg/
https://github.com/dylan-lang

viernes, 4 de julio de 2014

Una herramienta para aprender a programar: PSeInt

PSeInt
Se trata de una herramienta enfocada a la enseñanza y aprendizaje de programación, se emplea un lenguaje algorítmico muy sencillo de utilizar.  Lo puedes instalar en Linux, Windows, y Mac.

 Al inicio te pedirá que lenguaje algorítmico usarás (te muestra una lista). A mi parecer es bastante sencillo e intuitivo.  Ideal para quienes están o quieren aprender a programar.

Link
http://pseint.sourceforge.net/slide/pseint.html
http://pseint.sourceforge.net/