miércoles, 4 de noviembre de 2009

Probando el teorema empirico de Goldbach

Aunque no lo probaré matemáticamente, trataré de probarlo con un código en lenguaje C.

Agradezco al libro "Historias de matemáticos" en dónde leí esto, y de allí que haya decidido hacer el código, el autor del libro es Mariano Mataix.

Teorema empirico de Goldbach.

Esta proposición de Goldbach tiene hoy en día un puesto al lado del "último teorema de Fermat". Es decir, que se trata de una proposición que tiene todas las trazas de ser cierta, pero que nadie ha podido probarlo ni tampoco hallar un caso que la contradiga.

Fue enunciada por Euler, en respuesta a una simple conjetura que le había sometido Goldbach; de ahí que lleve este nombre. Dice así: "Todo número par es la suma de los dos números primos".

Aquí está el código en C, dicho código hace uso de una función "primo" que determina si un número es primo, no es el algoritmo más eficiente, pero sirve bien para el cometido. También se hace uso de una función "esImpar", que como su nombre lo indica, checa si un número es par o impar.

Aquí el código:



Las comprobaciones para algunos casos:

sábado, 31 de octubre de 2009

Construcción del número PI

Esta construcción del número Pi está hecha por la sucesión de Madhava, James Gregory, Gottfried Wilhelm Leibnitz.

Para la sucesión se necesita de una función "potencia", para ir variando el signo.

Aquí está el código en C, su compilación y su testeo:



A continuación se muestra el diagrama de flujo, con las respectiva función potencia, que servirá para variar el signo + - :



Aquí está la función potencia antes mencionada:

miércoles, 28 de octubre de 2009

3 números perfectos pares y 3 números perfectos impares

Obtener los 3 primeros números perfectos pares y los tres primeros números perfectos impares.

El diagrama es algo grande, por lo que se ha resumido con 2 funciones, una llamada "perfecto", que determina si un número es perfecto o no, y la otra se llama "par", que determina si un número es par o impar.

A continuación se muestra el diagrama del programa principal, este hace las respectivas llamadas a las funciones:


Como no cabe en una página, se usa un conector 1 y se continua con esto:



Aquí están las funciones perfecto y par:





Aquí está el código en lenguaje C :

Obtener el promedio de N notas

Obtener el promedio de N notas.

Diagrama de flujo:



Aquí ilustro el código, compilación y ejecución del mismo programa:

Años bisiestos del siglo XXII

Mostrar todos los años que sean bisiestos dentro del rango del siglo XXII

Diagrama de flujo:



A continuación el código en lenguaje C, compilación y ejecución:

El n-esimo término de la sucesión de Fibonacci

Para resolver este problema, se plantea una función factorial iterativa que devuelve el n-esimo término de la sucesión de Fibonacci.

El programa principal que hace la llamada a la función:



Aquí está la función fibonacci iterativa:



Un ejemplo en C de este ejercicio, usando una función recursiva:



A continuación el código en C, recursivo, compilación y ejecución:

lunes, 26 de octubre de 2009

Mejore el problema calculando el número de meses necesarios para producir un número dado de parejas de conejos.

La misma solución iterativa, ahora implementamos un contador "k" que sirve como conteo de meses.



¿Cuántas parejas habrá después de un año? (Fibonacci)

Aquí está el diagrama de flujo, con solución iterativa:



Los primeros n numeros primos:

Hola, como tarea de la materia de fundamentos de programación, se nos encargó resolver una serie de ejercicios con diagramas de flujos, para esto me basaré en el software Dfd, que es bastante ilustrativo y sencillo para esto.

Se hace uso de funciones, si bien Dfd no posee de una sentencia "return", nos permite guardar el resultado en una variable que será visible y accesible en el programa principal.

Además, me reforzaré con código hecho en C y probado con su respectiva salida en pantalla, también se pondrá a la vista el pseudocódigo.

Aquí está el diagrama de flujo del programa principal:



Aquí está el diagrama de flujo de la función primo, usada por el programa principal:





sábado, 17 de octubre de 2009

Factorial de un número, código en Batch Scripting

Como ejercicio sobre algoritmos, me propuse crear el factorial de un número, en Batch Scripting.

Por si algunos no saben, Batch es un pseudolenguaje nativo de Windows, en donde por medio de archivos por lotes, podemos manejar el sistema.

Aquí ilustro el código del factorial de un número, el código es sencillo, casi como pseudocódigo:

Aquí la captura de la ejecución:
C:\>code.bat Numero! : 5 1 x 2 x 3 x 4 x 5 x 5! = 120 C:\>code.bat Numero! : 10 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 x 10! = 3628800 C:\>code.bat Numero! : 4 1 x 2 x 3 x 4 x 4! = 24 C:\>

Como se puede observar, se una básicamente un ciclo o bucle FOR y una sola variable, por supuesto, inicializada a 1.

Y el código en Bash Scripting es:
#!/usr/bin/bash
read -p "Numero : " numero;
let acumulador="1";
for i in $(seq 1 $numero);
do
let acumulador*="$i";
done
echo -e "$numero! : $acumulador";
read
exit 0;

jueves, 1 de octubre de 2009

Sistema de gasolinería


Análisis




Viéndolo desde la perspectiva del comprador de gasolina y no del operador, se presentan a la vista las acciones del proceso:

El auto llega, se posa frente a la gasolinera, el operador cuestiona cuánto será el depósito de gasolina, abre la tapa del tanque de la gasolina, pone la maneguera en el tanque, marca en la gasolinera el monto, abre el conducto de la manguera, la gasolina se deposita en el tanque, al terminar, el operador cierra el conducto de la gasolina, cierra el tanque de la gasolina, deja la manguera, y cobra el monto.

A simple vista, resaltan como objetos y clases lo siguiente:

Gasolina
Auto
Gasolinera
Operador
Manguera

A continuación se presenta el diagrama de casos de uso:

Clic en la imágen para ver en tamaño completo.





El diagrama de clases:
Ojo, es una gasolinería mexicana, no se dispone de una caja, solo se indica el monto a poner y se carga, no hay que indicar la caja.

Resulta sencillo el esquema, pero ahí se indican todas las funciones involucradas.


miércoles, 30 de septiembre de 2009

Sistema de elevador

El funcionamiento de un elevador, modelado mediante UML.

Análisis



El elevador funciona conforme a n número de pisos, es decir, no hay restricción respecto a los pisos.

Un controlador especial mueve y manda señales para que se dé el mecanismo de movimiento.
El movimiento y la señal se da através de un botón, dicho botón, manda la señal para que elevador
se mueva al determinado piso.

Para saber si el elevador va subiendo o bajando, se indica mediante leds, por supuesto, también
se indicará el número de piso por el que el elevador va pasando, al llegar al piso soliciado, el
elevador deberá abrir sus respectivas puertas.

Al abrirse las puertas, los usuarios disponen de un determinado tiempo para abordar el elevador (x segundos).
El elevador dispondrá de un sistema de detección para saber si al cerrarse las puertas alguien desea abordar cuando
este se esté cerrando.

Para este problema, se tendrá en cuenta la c
apacidad del elevador y su respectivo espacio.

Destacan como clases:

Edificio

Piso
Elevador
Controlador de elevador

Presentaré el bosquejo del diagrama de clases, lue
go procederé a explicarlo detalladamente.

Clic en la imágen para verla en tamaño completo.



Como se puede apreciar en este sencillo diagrama de clases, se han definido 4 clases, "Edificio", "Piso", "Elevador", y controlador.

Se han especificado todas con dependencia, ya que todas depende de las otras para funcionar.

En la clase "Edificio", se han dado atributos Pisos de tipo "pisos", y he especificado 3 métodos o funciones, las 3 devuelven un valor entero(int).

En la clase Piso, se ha especificado un método llamado "get_piso()", que devuelve el número de pisos en el edificio, por supuesto, el valor devuelto es un entero.

En la clase Elevador se especifican como atributos "capacidad_kilos" que se da en enteros, y espacio que es la cantidad de metros cuadrados del elevador.
Dicha clase, tiene 4 métodos o funciones, get_piso() que devuelve el número de piso en el que está el elevador. moviendose() determina si el elevador está moviéndose, retorna un valor booleano. estado_puerta() determina si la puerta se encuentra cerrada o abierta, retorna un booleano. lleno(), determina si el elevador está lleno o no, retorna un booleano.

A continuación, el diagrama de casos de uso:

Clic en la imágen para ver en tamaño completo.




martes, 29 de septiembre de 2009

Diagramas de clases y usos


Como parte de mi materia "Fundamentos de programación", nos han encargado algunos casos de algunas situaciones, como este que pondré a continuación.

¿Qué es un diagrama de clases?

Un diagrama de clases es la representación de:
-Requerimientos en entidades y actuaciones.
-Soluciones de diseño de una arquitectura.
-Componentes de software orientado a objetos.

Control-Carro

Visión general:



-Activar y desactivar la alarma de un automóvil.
-Poner y quitar seguros.
-Abrir cajuela.
-Botón de pánico.
Detalles:

Activar y desactivar la alarma.
Activación.

El conductor presiona el botón del control.

Al presionar sólo una vez : Se ponen todos los seguros.
Al presionar dos veces : Pone la alarma en espera activa.

Clic en la imágen para verla a mayor calidad.








sábado, 26 de septiembre de 2009

UML - Unified Modeling Language

La primera pregunta que me surgió al oír este término fue:

¿Qué es UML?



Primeramente, UML significa "Unified modeling language" por lo que previamente se podría inferir lo que quiere decir, UML está hecho como un lenguaje común para modelar software orientado a objetos, UML provee de herramientas especializadas para dar un analisis profundo del problema(programa) que se esté atacando.

UML provee de las siguientes herramientas:

  • Diagramas de casos de uso
  • Diagrama de clases
  • Diagrama de estados
  • Diagrama de secuencias
  • Diagrama de actividades
  • Diagrama de colaboraciones
  • Diagrama de componentes
  • Diagrama de distribución

La notación usada en UML es vasta, y basta para exponer objetos, atributos, clases y sus respectivas relaciones.

Diagrama de clases


Este tipo de diagramas representan las clases dentro de un modelo conceptualizado.

En lenguajes de programación orientado a objetos, las clases poseen atributos, variables miembro y operaciones(operaciones miembro).

Los diagramas de clase pueden representar las relaciones entre clases fácilmente.



La clase anterior llamada "Ing Sistemas", en donde se define los atributos como enteros de tipo "int", y se define una función de tipo "void" llamada "get_age()".

Relaciones de composición


Este tipo de relaciones se utilizan cuando en la clase existe una instancia de tip
o Point, este tipo de relación entre clases se llama "composición", y es representada de esta manera:


La punta de fecla en el otro lado de la relación, denota que la relación solo es permitida solo en esa dirección, es decir "clase2" no sabe nada acerca de "clase1".

Herencia

La herencia en UML es representada con una flecha con punta de pizza, esta flecha apunta hacia la clase base, que es de donde se derivan las demás clases (hijas).

Agregación/Asociación

La forma de agregación es mostrada con un diamante abierto, está relación denota que la clase agregada es en alguna manera el "entero" y la ota clase en la relación es como parte de ese entero, de ahí que se le llame "agregación".

martes, 22 de septiembre de 2009

Reconocimiento de clases y objetos y sus relaciones en el mundo real


Se trata básicamente reconocer en el mundo físico, es decir, alejado de lo virtual, todo aquello que pudiera reconocerse como un objeto y una clase.

Pero, ¿qué es un objeto?


Un objeto se define como una estructura que encapsula atributos (características) y comportamientos (procedimientos) de una entidad con un papel bien definido en una aplicación.


Dicho objeto puede tener como propiedades:


- Estado: Conjunto de valores de los atributos en un instante de tiempo dado. El comportamiento de un objeto puede modificar el estado de este.

- Comportamiento: Relacionado con su funcionalidad y determina las operaciones que este puede realizar o a las que puede responder ante mensajes enviados por otros objetos.

- Identidad: Es la propiedad que permite a un objeto diferenciarse de otros. Generalmente esta propiedad es tal, que da nombre al objeto.

Los obje

tos pueden ser reconocidos a nuestro alrededor, basta con poner algo de atención.








Los objetos no sólo tienen atributos, también tienen comportamientos, es decir acciones que desempeñan, es decir, métodos o funciones, ejemplo afín con los objetos presentados anteriormente:

Profesor: Enseña, evalúa.

Mesa: Ordenada, desordenada.

Silla: Ocupada, desocupada.

Pizarrón: Pintado, borrado


¿Qué es una cla

se?

Es la definición de un objeto. Cuando se programa un objeto y se definen sus características y funcionalidades, realmente se programa una clase.

Pondré un ejemplo para que quede entendido.

Supongamos que poseemos un plano de Infonavit:

Podremos considerar los planos de Infonavit como una clase, ya que, contiene especificaciones e instrucciones que sirven para construir un objeto, que en este caso serían las casas.

Un objeto que es la instanciación de la clase, no puede existir si no existe la clase.



Abstracción

Es un método por el cual abstraemos valga la redundancia, una determinada entidad de la realidad de sus características y funciones que desempeñan, estos son represent

ados en clases por medio de atributos y métodos de dicha clase.

Ejemplo: La abstracción de un automóvil.

- Características: Color, año de fabricación, modelo, etc.

- Métodos o Funciones: Frenar, encender, etc.

A esto se le llama abstracción. En general un programa no es más que una descripción abstracta de un procedimiento o fenómeno que existe o sucede en el mundo real.

Resumiendo, la abstracción es una forma de elegir entre las caracteristicas más relevantes, es decir, caracteristicas y funcionalidades.


Incluiré un video que resulta bastante fácil de entender, está hecho por alumnos de la Facultad de Matemáticas de la Universidad Autonoma de Yucatán, así que todos los creditos hacia ellos.





En sí no es dificil de entender, pero hablando de código, ¿todos estos conceptos como se verían en un lenguaje de programación con el paradigma orientado a objetos?
// No sé si el código sea sintáticamente correcto.
class Empleado
{
private:
// miembros...
float Juan;
public:
float funcion();
void otrafuncion();
// Constructores
~Empleado
};


Así me resultó más fácil de entender, ya que esperaba con ansia un poco de código para entender.


Ahora, apartir de la susodicha clase se podría crear el objeto, es decir, la instanciación:


Empleado Juan;



Saludos.

sábado, 5 de septiembre de 2009

Leonardo Gutierrez Ramirez found a way to use numbers as variables in a FOR loop

Aparición en el sitio de RobVanDerWoude.com

robvanderwoude.com es un sitio especializado en lenguajes Scripting, se exponen técnicas avanzadas sobre diferentes lenguajes, como Batch, Perl, Visual Basic Script, y otros más.

Expuse una técnica de incrustación de comentarios en archivos por lotes o batch files.

La técnica trata del uso del comando "SET".

El articulo completo:
http://robvanderwoude.com/clevertricks.php

Buscar en Wikipedia [ PERL ]

Por medio de un módulo y con la ayuda del lenguaje Perl, podemos automatizar la búsqueda en Wikipedia.com.

Esto es con la finalidad de darle más funcionalidad a la terminal de comandos.

Ejemplo de búsqueda:

leo@lein:/usr/local/bin$ perl wiki.pl "lala"

Los 'lala' son un grupo de habla chibemba de unos 150000 individuos que viven en
Zambia central, al oeste del río Luangua.
leo@lein:/usr/local/bin$

Me devuelve el resultado de la búsqueda.

Aquí el código:
#!/usr/bin/perl
use strict;
use warnings;
if($#ARGV != 0)
{
print "$0 \"Busqueda\"\n";
exit(0);
}
$ARGV[0] =~ s/(\w+)/\u\L$1/g;
use WWW::Wikipedia;
my $wiki = WWW::Wikipedia->new();
$wiki = WWW::Wikipedia->new(language => 'es');
my $result = $wiki->search("$ARGV[0]");
if(!$result)
{
print "Error: ", $wiki->error(), "\n";
exit(1);
}
if($result->text())
{
print $result->text();
}
exit(0);

Acciones sobre archivo de texto.

Me resulta muy grato la aceptación que ha tenido ese artículo.

En general, se trata sobre diferentes acciones que podemos hacer sobre archivos de texto (texto plano) con archivos por lotes o batch files.

Aunque he resuelto la mayoría con Batch, recomiendo más Perl, Perl es el rey para la trata de archivos de texto.

Aquí el link hacia el articulo:

http://foro.elhacker.net/scripting/acciones_sobre_archivos_de_texto_batch-t242748.0.html

Bug en CMD.EXE, comando FOR, parametro /F

En las pasadas vacaciones, experimenté un poco con el interprete de Windows, CMD.EXE, para variar, descubrí algunas cosas nuevas, al parecer el "parser" de dicho interprete, es más flexible de lo que creía.

Por medio de estas andanzas, he descubierto un bug en cmd.exe, resulta demasiado evidente, aquí el link directo a "elhacker.net", ahí es donde lo posteé.

http://foro.elhacker.net/bugs_y_exploits/bug_en_cmdexe_comando_for_parametro_f-t259992.0.html