jueves, 18 de febrero de 2010

Otro ejemplo de Bash (Case)

Ahora otro ejemplo de Bash Scripting en Linux usando CASE.


#/bin/bash
#-----------------------------------------------------------#
# -Un programa que lea el sueldo del empleado y la categoría#
# a la que pertenece. Mandar imprimir el nuevo sueldo y la  #
# categoría.                                                #
# -----------------------------------------------------------
# Francisco Javier     #
# fjgm@aol.com.mx      #
# Bash Scripting Linux #
# ---------------------#

#Borrar pantalla
clear;

#Solicitar información al usuario.
echo -n "Escribe el sueldo del empleado: ";
read sueldo;
echo -n "Escribe la categoría del empleado. ";
read categoria;

#Menú de selección con case.

case $categoria in
 1)
   echo "Categoria: ${categoria}";
   echo "Sueldo del empleado: "
   echo "scale =4; ${sueldo}*1.15" | bc
   ;;
 2)
   echo "Categoria: ${categoria}";
   echo "Sueldo del empleado: ";
   echo "scale =4; ${sueldo}*1.10" | bc
   ;;
 3)
   echo "Categoría: ${categoria}";
   echo "Sueldo del empleado: ";
   echo "scale =4; ${sueldo}*1.08" | bc
  ;;
 4)
   echo "Categoría: ${categoria}";
   echo "Sueldo del empleado: ";
   echo "scale =4; ${sueldo}*1.07" | bc
  ;;
esac
#Termina la sección de cases#


Pantalla

lunes, 15 de febrero de 2010

Programa Bash - Aumentar el sueldo trabajador.

El potencial que ofrece el interprete de Comandos de los sistemas Unix, es similar a como si estubiesemos programando pequeñas aplicaciones funcionales para una tarea en especifica del sistema.

A continuación, una adaptación de un problema designado para programarse en C++ de la materia Taller de Programación I, de la UMSA.

#!/bin/bash
# Prog. 28. Escribir un programa tal que dado como dato el sueldo de
#un trabajador, le aplique un aumento del 15% si su sueldo es inferior a
#$ 1000.00 y 12% en caso contrario. Imprima el sueldo del trabajador.

clear
echo -n "Escriba el sueldo del empleado: ";
read sueldo;

if [ "$sueldo" -lt "1000" ]; then  # -lt indica <
  
    echo -n "El nuevo sueldo es : $ ";
    echo "scale = 4 ;  ${sueldo}+ ${sueldo}*0.15" |  bc
fi

if [ $sueldo  -ge "1000" ]; then  #-ge indica >= que

  echo -n "El nuevo sueldo con 12% es : $";
   echo "scale = 4; ${sueldo} + ${sueldo}*0.12" | bc
fi


Sencillo y funcional. 

martes, 2 de febrero de 2010

Integral definida como área de una región.

 

Si f es continua y no negativa en el intervalo cerrado [a,b], el área de la región limitada por la gráfica de f, l eje x y las rectas verticales x = a y x = b viene dada por:

Untitled-1_1

Para realizar el cálculo o mejor dicho la representación del área con el Software Mathematica debemos de declarar la integral para conocer su área, por ejemplo:

Sea Untitled-1_5 una región acotada por los puntos [0,4], el área de la región se presenta con la integral definidaUntitled-1_1

Integramos.

Untitled-1_5

El resultado de la integración viene dado por:

Untitled-1_5

Ahora sustituimos los máximos y mínimos en este caso el Máximo es = 4 y el mínimo es = 0

Untitled-1_5

El área bajo la curva de la parábola limitada en el intervalo [0,4] es 32/3, para graficar la función, utilizaremos el siguiente comando: Plot[ función,{variable, limite inferior, limite superior}]

De modo que obtendremos el siguiente gráfico.

Untitled-1_3

Untitled-1_4

Si queremos sombrear el área bajo la curva agregamos el parámetro Filling –> Bottom

de modo que la función queda

Untitled-1_3

y el gráfico queda. 

Untitled-1_4

En Derive6 esto se puede hacer con el siguiente parámetro AreaUnderCurve(función, variable, limite inferior, limite superior)

En un ejemplo práctico:

AreaUnderCurve(2x^2 - 3x + 2, x, 0, 4)

Luego se elige la ventana Grafico 2D en la barra de herramientas, graficamos y obtenemos

image

domingo, 31 de enero de 2010

Trabajo (Vectores)

El trabajo W realizado por una fuerza constante F cuando su punto de aplicación se desplaza a lo largo del vector PQ viene dada por una de estas expresiones:

1. W = ||proy pq F|| ||PQ||
2. W = F * PQ.

Realizar a continuación los siguientes ejercicios:

Se arrastra 10 pies por el suelo un objeto aplicando una fuerza de 85 libras. Calcular el trabajo realizado si la dirección de la fuerza forma un ángulo de 60° con la horizontal.

Datos:
Fuerza = 85 libras
ángulo = 60°
Desplazamiento: –> : 10 Pies

Usando la formula 1 se tiene:

W=cos(60) *||F|| ||PQ||
W=cos(60)*||85|| ||10||

W= 425 libras-pies


Un vagón de juguete es arrastrado por un niño que tira con una fuerza de 15 libras de una varilla que forma 30° con la horizontal. Calcular el trabajo realizado al arrastrarlo 50 pies.

Datos:
Fuerza = 15 libras
ángulo = 30°
Desplazamiento: 50 pies.

Usando 1

W = cos (30) * ||F|| ||PQ||
W = cos(30)*(15)(50)

W=649.5191 libras-pies

Escribir un Script dinámico en Mathematica que permita calcular esta formula conociendo los datos Fuerza, Ángulo, Desplazamiento.

Panel[DynamicModule[{v = ((fuerza)*(desplazamiento))* Cos [angulo],
   fuerza = 1, desplazamiento = 1, angulo = 0},
  Panel[Grid[{{Style["Calculadora de Fuerza", Bold],
      SpanFromLeft}, {"Escribe la Fuerza:",
      InputField[Dynamic[fuerza], FieldSize -> 10],
      "Escribe Desplazamiento:",
      InputField[Dynamic[desplazamiento],
       FieldSize -> 10]}, {"Escribe Ángulo:",
      InputField[Dynamic[angulo],
       FieldSize -> 5]}, {"Trabajo Realizado:",
      InputField[Dynamic[v], Enabled -> False]}}]]]]


miércoles, 20 de enero de 2010

Creando mapas con Bing Maps y Silverlight

Recientemente he tenido la necesidad de aprender a manejar un poco más el uso de los mapas que ofrece Google, Microsoft o Yahoo!.

Uno de los principales objetivos que estoy buscando es el diseñar una aplicación sencilla para la búsqueda de productos en una determinada zona del usuario.

Por ejemplo yo vivo en las coordenadas: 20.958705,-89.632247 y me gustaría saber que servicios (entiéndase tiendas, escuelas, etc) hay cerca de donde yo vivo y el tiempo estimado que puedo hacer caminando o viajando en coche para llegar a ese servicio.

En este post realizaremos un mapa básico (Mostrar un mapa en una página web) utilizando silverlight.

Lo que necesitamos:

  1. Microsoft Visual Studio 2008 con Service Pack 1 (También funciona la versión Express).
  2. Las herramientas de desarrollo de Silverlight para C#.
  3. El SDK de Bing Maps que podemos descargar de aquí.
  4. Una cuenta .NET (Windows Live o Hotmail)
  5. Una Key para poder utilizar los mapas en nuestras aplicaciones Silverlight la cual podemos crear aquí.

Creando una cuenta Maps Account para Bing.

Primero hay que ir a: https://www.bingmapsportal.com/

Seguidamente si disponemos de una cuenta @live. @msn, @hotmail.com, si no es nuestro caso, tendremos que crear una.

websiteBuscamos en la parte superior derecha la opción que dice Log On, aparecerá la opción de logueo con la cuenta Live / hotmail.

web2

Si es la primera vez que no damos de alta en el servicio, tendremos que llenar una serie de información, como dato adicional no es necesario colocar el nombre de la compañía o un número de teléfono si vamos a utilizar las id con fines educativos.

keyCuando vayamos a crear una Key tendremos que rellenar dos campos. El primero define el nombre de la aplicación y el segundo la URL, como yo trabajare en localhost (utilizando Apache) colocare http://localhost como URL.

Una vez que hayamos colocado los datos que se nos pide, se nos generara una KEY que necesitaremos para la ejecución del API de BING MAPS. 

CREANDO NUESTRO PRIMER MAPA BÁSICO.

Ejecutamos Visual Studio 2008

Creamos un nuevo proyecto Visual C# Silverlight de tipo Silverlight Application.

s1El tipo de Selección para el proyecto lo pondré como Automatically, ya que tenemos la aplicación cargada, agregaremos una nueva referencia dándole clic con el botón derecho del mouse al Folder References y a la opción del menú contextual “Add Reference”.  

En el cuadro de diálogo que nos aparece, seleccionamos la pantalla Browse (Explorar), buscamos la dll. Microsoft.Maps.MapControl que esta instalada en C:\Archivos de Programas\Bing Maps Silverlight Control\V1\Libraries\  Esta ruta es opcional ya que depende donde la hayas instalado tu.

Cuando la librería este cargada deberá de aparecer en el árbol de referencias.

treeAhora nos dirigimos a nuestra aplicación silverlight agregando el siguiente código en la parte xmlns:

xmlns:mapa="clr-namespace:Microsoft.Maps.MapControl;assembly=Microsoft.Maps.MapControl"

Donde mapa es una variable

A continuación agregamos la siguiente línea de código dentro del Grid

<mapa:Map CredentialsProvider="TU KEY"/>

Recuerda que “mapa” es el nombre de mi variable. y TU KEY es el número generado en la página de BING MAPS.

Al compilar la aplicación y colocarla en el directorio httdocs de Apache podemos genera el resultado:

funcion

 

Si quieres agregar más zoom puedes utilizar la función ZoomLevel =”valor” dentro de la etiqueta del mapa que colocamos en el GRID y si quieres que el mapa tenga una determinada coordenada o este centrado en un punto utilizamos la función center =”puntoX,PuntoY”

De forma que quedaría así:

<mapa:Map CredentialsProvider="TU KEY" ZoomLevel="17" Center="20.958705,-89.632247"/>

casaY así por ejemplo se genera una nueva vista, en la imagen superior se muestran las calles o manzanas de la colonia en la que vivo en Mérida, Yucatán México. xD. 

domingo, 17 de enero de 2010

Experimentando con HP 9G

 

Pues como trae el modo de programación, he empezado a usarlo, aunque es muy rustico aparte de que los programas no los puedo salvar en un disco o memoria xD, de más al menos servirá para algunas cosas rutinarias que se ocupe hacer un determinado número de veces.

Este modelo de programación me recuerda a las primeras computadoras, bueno en mi ociosidad como siempre haremos el mismo programa del post anterior.

Hacer un programa que calcule una distancia dado el tiempo en minutos y la rapidez en Km/h.

Bien, lo primero que hay que hacer es lógico, encender la calculadora si esta no se encuentra encendida.

Después seleccionar el modo programación, posteriormente el tipo de programa en modo MAIN, luego seleccionar el área de programación, yo trabajare en la 0.

INPUT R;
INPUT T;
D = ((R/60)*T);
PRINT “Distancia: “, D;
END;

Y esto es un programa xD.

jueves, 14 de enero de 2010

Minizando el MSN en la barra de Notificación del Sistema.

:

Ya era un tiempo de encontrar una manera de poner el Icono del MSN en la barra de notificaciones del sistema  al costado del reloj, ya me estaba enfadando de tenerlo diario ocupando un espacio más.

1. Ir al icono del MSN y darle click con el boton derecho del mouse seleccionar propiedades.
msn1
En el cuadro de propiedades buscar la pestaña Compatibilidad, y seleccionar "Ejecutar el programa con compatibilidad para": Windows XP (Service Pack 3)

msn2

Luego damos clic en aplicar y posteriormente en aceptar.


Ahora cuando ejecutemos el msn y le demos clic al botón cerrar, este se colocará en el área de notificaciones del Sistema junto al Reloj.

msn3


Si tienes un sueño haslo realidad ¡Qué nada te detenga!.

lunes, 11 de enero de 2010

Programación, Lógica y Adaptación.

 

Mucho se habla de programar, de que somos buenos en X, Y o Z lenguaje, sin embargo ¿Realmente sabemos programar?

Para mí el programar no es nada más sentarme frente al ordenador y empezar a escribir código en un lenguaje de programación en concreto, la programación va más haya de un simple lenguaje en concreto en el que nos especializamos: Java, C#, F#, Perl, Python,  entre otros, tiende a ser un vinculo entre el pensamiento del programador y el lenguaje.

La lógica, es algo que desarrollas con la práctica, es la motivación que tienes para resolver los problemas.

La adaptación viene después, adaptar nuestras ideas a diferentes lenguajes nos abre un camino de oportunidades en un campo tan competitivo, explorar y aprender, el ver hasta donde somos capaces de llegar con nuestra creatividad puede conducirnos por senderos inexplorados abriéndonos nuevas puertas y un nuevo conocimiento que nos enriquece como personas y profesionales.

La adaptación es algo a lo que tenemos que estar acostumbrados en este campo, en las corporaciones se tienden a desarrollar proyectos no solo en un lenguaje en concreto, siempre se busca el mejor lenguaje para solventar el proyecto, un buen programador se caracteriza por poder resolver un problema sin gastar tantos recursos de la corporación, si es que trabajamos en una.

La adaptación es algo que va acompañada de los cambios, si no eres capaz de asumir un rápido cambio y adaptarte a las exigencias, seras por el resto de tu vida un retrasado informático.

Cuando llegues a una empresa nunca le digas a tu superior “Eso no lo aprendí en la escuela”, si tienes suerte tal vez te enseñen, si no te darán calle. Recuerda que a veces de nada sirve un 100 y no saber hacer las cosas (no practicar) a un 75 pero sabes como adaptar lo que aprendisteis al mundo real.

Para finalizar.

El mejor lenguaje de programación será aquel que te permita resolver un problema en concreto en menos tiempo y que se adapte al proyecto que este llevando acabo ;)

 

Un ejemplo de todo este artículo:

Hacer un programa que calcule una distancia dado el tiempo en minutos y la rapidez en Km/h.

El programa usando Mathematica 7.

Pane[DynamicModule[{d = ((tiempo/60)*distancia), distancia = 0,
   tiempo = 0},
  Panel[Grid[{{"Distancia:",
      InputField[Dynamic[tiempo], FieldSize -> 5]}, {"Tiempo:",
      InputField[Dynamic[distancia],
       FieldSize -> 5]}, {"Distancia Recorrida:" InputField[
        Dynamic[d], FieldSize -> 5]}}]]]]image 

 

El programa usando lenguaje D:

import std.conv;
import std.cstream;
import std.stdio;

void main ()
{
    double distancia, tiempo, rapidez;
    string n;
    writef("Escriba la Rapidez en Km/h: ");
    n = din.readLine();
    rapidez = toFloat(n);
    writef("Escribe el tiempo en Minutos: ");
    n = din.readLine();
    tiempo = toFloat(n);
    //Formula
    distancia=((tiempo/60)*rapidez);
    writef("La distancia recorrida es: ",distancia," Km");
}

image

lunes, 4 de enero de 2010

Hasta donde te puede llevar tu imaginación

 

No conforme con los lenguajes de programación, me he dado un brinco al uso del Software Mathematica (aunque la verdad llevo algo más de 2 meses usándolo), a nivel programador.

Mathematica para los que no sepan, se trata de un software de Cálculo matemático utilizado a nivel ingeniería, economía y en los sectores donde se pueda aplicar el cálculo y la matemática. Potente software utilizando en el campo de la investigación de nuevas tecnologías, este software me ha dejado maravillado con el potencial de cálculo que ofrece y con la variedad de Scripts que se pueden programar en él.

Fanático de Ragnarok OnLine y de cualquier juego en línea que utilice matemática (aplicación del cálculo al juego xD), adapte la Formula de la popular skill Acid Demostration de manera básica y primitiva, esto debido a que le hacen falta cierto modificadores ^^, pero para mí es un pequeño logro en lo que a programación de Scripts utilizando el Software Mathematica refiere

imageFigura del Script Funcionando.

No es la gran cosa comparado con algunas calculadoras que circulan por la red, aunque si es más preciso, y espero con más tiempo poder hacer más mejoras que las calculadoras actuales ofrecen. Para hacer funcionar este Script lógico, se requiere el software Mathematica

Descargar Script – Alpha -

sábado, 26 de diciembre de 2009

Programa: Determinar número perfecto.

 

Adaptado de C++, desarrollado en lenguaje D, este programa nos permite determinar si un número introducido por el teclado es perfecto o no. Los números perfectos son aquellos en el que la suma de sus divisores es el mismo número sin incluirse a si mismo, para más detalles sobre el algoritmo/definición visite: http://es.wikipedia.org/wiki/Número_perfecto

Problema: Construir un programa que dado un número x por el usuario determine si es perfecto o no.

Bien partiendo del problema, se quiere saber si un número introducido desde el teclado es perfecto o no.

Declaración del Programa usando Lenguaje D:

Librerías a utilizar:

import std.conv;
import std.cstream;
import std.stdio;

Al igual que C o C++, un programa en D suele comenzar con el método principal main.

void main()
{

 

Declaración de las variables que vamos a utilizar.

int i, sum=0,num, op=1;
string n;

Bucle While, con OP!=0 entrara al programa mientras OP sea diferente de 0

while (op!=0)
    {

 

Pedimos la información al usuario con writef y la procesamos con din.readLine(); en una cadena .

writef("Digite un numero entero: ");
n = din.readLine();

Se realiza la conversión necesaria de la variable recibida usando toTipo_Dato().

num = toInt(n);

Finalmente entramos al ciclo que nos permitirá determinar si el número introducido es perfecto o no.

for (i=1; i<num; i++)
{
  if((num%i)==0)
  {
    sum+=i;
  }
}

Dado la suma y el residuo de debe ser 0 hacemos las comparaciones necesarias y determina si el número es perfecto o no.

if(sum==num)
{
writefln("El numero es perfecto");
}
else
{
writefln("El numero no es perfecto");
}

Finalizamos con un mensaje al usuario si quiere seguir calculando más números o no.

writefln ("Desea continuar: [0] No | [1|] Si");
n=din.readLine();
op=toInt(n);

}

Fin del programa (cerramos con llave).

}

El código fuente es como sigue:

import std.conv;
import std.cstream;
import std.stdio;

void main()
{
    int i, sum=0,num, op=1;
    string n;
    while (op!=0)
    {
    writef("Digite un numero entero: ");
    n = din.readLine();
    num = toInt(n);
    for (i=1; i<num; i++)
    {
      if((num%i)==0)
      {
        sum+=i;
      }
    }
    if(sum==num)
    {
     writefln("El numero es perfecto");
    }
    else
    {
     writefln("El numero no es perfecto");
    }
    writefln ("Desea continuar: [0] No | [1|] Si");
    n=din.readLine();
    op=toInt(n);
    }
}

Programa Funcionando.

image