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.

Instalación:

# Descargamos la última versión https://julialang.org/downloads/
# Desempaquetamos
tar -xvzf julia-1.8.2-linux-x86_64.tar.gz
# Movemos a la carpeta /opt
sudo mv julia-1.8.2/ /opt/
# Creamos un enlace
sudo ln -s /opt/julia-1.8.2/bin/julia /usr/local/bin/julia
# Verificamos la instalación
julia



¿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/

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