domingo, 25 de abril de 2010

DISEÑO DE LOS ROBOTS

Como todo dispositivo funcional, los robots tienen una estructura formada por sistemas o subsistemas y componentes. Si observamos la forma y el funcionamiento de los diferentes tipos de robots podemos deducir que todos tienen algo en comun:

La estructura o chasis: es la encargada de darle forma al robot y sostener sus componentes. Puede estar constituída por numerosos materiales, como plásticos, metales, etc. y tener muchas formas diferentes.
Los robots pueden ser del tipo "endoesqueleto", donde la estructura es interna y los demás componentes externos, o "exoesqueleto", donde la estructura es externa y cubre los demás elementos.
Las formas de las estructuras son de lo más variadas, tanto hasta donde la imaginación y la aplicación que se le va a dar al robot lo permitan.


Las fuentes de movimiento: Las fuentes de movimiento son las que le otorgan movimiento al robot. Una de las más utilizadas es el motor eléctrico. Un motor es un dispositivo que convierte la energía eléctrica en energía mecánica rotacional que se utiliza para darle movimiento a ruedas y otros medios de locomoción.

En robótica se utilizan motores de CC (corriente continua), servomotores y motores paso a paso.

Una fuente de movimiento nueva que apareció recientemente en el mercado son los músculos eléctricos, basados en un metal especial llamado Nitinol.


Los medios de transmisión de movimiento: Cuando las fuentes de movimiento no manejan directamente los medios de locomoción del robot, se precisa una interface o medio de transmisión de movimiento entre estos dos sistemas, que se utiliza para aumentar la fuerza o para cambiar la naturaleza del movimiento, por ejemplo para convertir un movimiento circular en lineal, o para reducir la velocidad de giro.

Se suelen emplear conjuntos de engranajes para tal fin, aunque también se usan ruedas de fricción o poleas y correas.


Los medios de locomoción: Los medios de locomoción son sistemas que permiten al robot desplazarse de un sitio a otro si éste debe hacerlo. El más utilizado y simple es el de las ruedas y le siguen en importancia las piernas y las orugas.


Los medios de agarre: Algunos robots deben sostener o manipular algunos objetos y para ello emplean dispositivos denominados de manera general medios de agarre.

El más común es la mano mecánica, llamada en inglés "gripper" y derivada de la mano humana.

En los robots industriales se usan mecanismos especiales para sostener herramientas o piezas de formas determinadas.


La fuente de alimentación: La fuente de alimentación de los robots depende de la aplicación que se les dé a los mismos, así si el robot se tiene que desplazar autónomamente, se alimentará seguramente con baterías eléctricas recargables, mientras que si no requiere desplazarse o sólo lo debe hacer mínimamente, se puede alimentar mediante corriente alterna a través de u convertidor.

En los robots de juguete o didácticos se pueden emplear baterías comunes o pilas, y en los de muy bajo consumo celdas solares.


Los sensores: Los sensores le permiten al robot a manejarse con cierta inteligencia al interactuar con el medio. Son componentes que detectan o perciben ciertos fenómenos o situaciones.

Estos sensores pretenden en cierta forma imitar los sentidos que tienen los seres vivos.

Entre los diferentes sensores que podemos encontrar están las fotoceldas, los fotodiodos, los micrófonos, los sensores de toque, de presión, de temperatura, de ultrasonidos e incluso cámaras de video como parte importante de una "visión artificial" del robot.


Los circuitos de control: Los circuitos de control son el "cerebro" del robot y en la actualidad están formados por componentes electrónicos más o menos complejos dependiendo de las funciones del robot y de lo que tenga que manejar.

Actualmente los modernos microprocesadores y microcontroladores, así como otros circuitos específicos para el manejo de motores y relés, los conversores A/D y D/A, reguladores de voltaje, simuladores de voz, etc. permiten diseñar y construir tarjetas de control para robots muy eficientes y de costo no muy elevado.

El bajo costo actual de una computadora personal permite utilizarla para controlar robots de cualquier tipo utilizando las grandes ventajas que supone dicho dispositivo.

----------------------------------

Pasando al entorno industrial, podemos observar lo siguiente en los dispositivos que se encuentran instalados en muchísimas fábricas:

En los sistemas automáticos de manipulación de piezas u objetos podemos distinguir tres partes estructurales muy bien definidas.

La primera es la máquina propiamente dicha, o sea todo el sistema mecánico y los motores o actuadores y el sistema de agarre o sujeción de los objetos.

Los sensores de fuerza, visión y sonido son detectores necesarios para que la máquina sepa exactamente el estado de todas las variables que precisa para una correcta actuación.

El sistema de control y el lenguaje de programación forman el sistema de toma automática de decisiones, que incluye la planificación, el control de los movimientos y la interpretación de los datos que aportan los sensores.

-----------------------------------

Detallando ahora estos elementos podemos ver la estructura de un robot de tipo industrial en la siguiente tabla, observemos que el brazo mecánico es sólo una parte de todo el mecanismo:

Manipulador, ejecutor o efector final
El controlador: puede ser: de posición, cinemático, dinámico o adaptativo
Los elementos motrices: pueden ser: Neumáticos, Hidráulicos o Eléctricos
El elemento terminal: Aprehensor, Herramienta
Los sensores
Los ordenadores




El manipulador, ejecutor o efector final: (dispositivos de manipulación: brazos, muñecas, manos, herramientas, dispositivos de succión y magnéticos.

El manipulador o brazo son los elementos mecánicos que propician el movimiento del elemento terminal. Los elementos rígidos del brazo están relacionados entre sí mediante articulaciones, las cuales pueden ser giratorias o prismáticas. El número de elementos del brazo y el de las articulaciones que los relacionan determinan los grados de libertad del manipulador, que en los robots industriales suele ser seis.

El controlador de posición : es el dispositivo que se encarga de regular el movimiento de los elementos del brazo, y de todo tipo de acciones, cálculos y procesos de información. La complejidad del control varía con los parámetros que se manejan, existiendo varias categorías de controlador:
El controlador de posición solo interviene en el control de posición del elemento terminal, pudiendo actuar punto a punto, o bien en modo continuo.
El controlador cinemático además de la posición controla la velocidad del brazo.
El controlador dinámico tiene en cuenta también las propiedades dinámicas del manipulador, motores y elementos asociados.
El control adaptativo, además de lo indicado en los anteriores, también considera la variación de las características del manipulador al variar la posición.

Desde otra óptica, el controlador puede ser de lazo abierto o de lazo cerrado.

En el primero se manda una señal de control, pero no se verifica si se ha reproducido con exactitud o se ha cometido un error al ejecutarse. En el segundo caso, existe una realimentación de la salida, cuya información se compara con la señal de mando, tratándose el error, si lo hubiera, de manera adecuada para lograr alcanzar lo que se pretendía con la señal de mando.


Los elementos motrices o Actuadores (motores neumáticos, mecánicos o eléctricos que suministran la fuerza de entrada para el movimiento de los ejecutores).

Se encargan de mover las articulaciones, a través de cables, poleas, cadenas, engranajes, etc.

Su clasificación se realiza de acuerdo al tipo de energía que utilizan:
Los actuadores neumáticos emplean el aire comprimido como fuente de energía y se utilizan para controlar movimientos rápidos pero de no mucha precisión.
Los actuadores hidráulicos se utilizan cuando se requiere una gran capacidad de carga, junto con una precisa regulación de velocidad.
Los actuadores eléctricos son los que más se utilizan, por su fácil y preciso control, y por las ventajas del funcionamiento mediante energía eléctrica.

El elemento terminal: Aprehensor, Herramienta

Sensores: detectan la luz, el sonido, las distancias, etc.


Ordenadores de tamaño grande o mediano: conectados a los actuadores y sensores por cable o radio, o microprocesadores internos (dentro del robot), o una combinación de ambos.



La tendencia actual es diseñar robots más y más versátiles, capaces de adaptarse a distintos trabajos. Cuanto más general es la aplicación más complejo es el diseño de la máquina y, por lo tanto, más se encarece el mismo.

Sería interesante que los robots fueran:
*-Autónomos, es decir, que pudieran desarollar su tarea de forma independiente.

*-Fiables, que siempre realizaran su tarea de la forma esperada.

*-Versátiles, que pudieran ser utilizados para variadas tareas sin necesidad de demasiadas modificaciones en su control.

En general hay cuatro tipos distintos de soluciones para los problemas a los que un robot se enfrenta. Dependiendo de las restricciones del problema, un tipo de solución será más apropiado que otro, pero raramente será un tipo aislado de soluciones quien proporcione el mejor resultado.

Ingeniería del entorno
Cambio de la forma física del robot
Cambio del tipo de acciones que el robot lleva a cabo
Software de control para dirigir el comportamiento del robot

Ingeniería del entorno
Los humanos utilizamos este método continuamente para hacernos la vida más fácil. Cuando estamos diseñando un robot hay ciertas características del entorno que podrían simplificar el diseño del mismo. Por ejemplo un robot de limpieza que en vez de trabajar de día trabajara de noche, evitando así el problema de la gente moviéndose por su entorno.

Cambio de la forma física del robot
La forma de un robot puede tener un gran impacto en sus prestaciones, un robot no cilíndrico corre mayor riesgo de quedar atrapado por una disposición desfavorable de obstáculos o de fallar en encontrar un camino en un espacio estrecho o intrincado.
Consideremos dos robots del mismo tamaño uno cilíndrico y el otro cuadrado, ambos encuentran un paso estrecho según se mueven. Un algoritmo sencillo permitirá al robot cilíndrico pasar, el robot choca, gira y lo intenta de nuevo hasta que pasa. Esto es así de simple porque el robot es capaz de girar estando en contacto con el obstáculo.
El robot cuadrado, por el contrario, tiene que retroceder y girar si quiere usar la misma táctica. Por tanto, siempre se requiere un algoritmo más complejo para la navegación de un robot cuadrado que para la de uno cilíndrico. Para entender la razón de esto, tenemos que apelar a un concepto avanzado en robótica conocido como espacio de configuraciones cuyo autor es Tomás Lozano-Pérez.

Software de control más sofisticado para dirigir el comportamiento del robot
Un diseño sencillo puede ser suficiente para realizar la tarea encomendada si el software de control es lo suficientemente completo como para resolver todos los problemas a los que se enfrente.

CARACTERISTICAS DE LOS ROBOTS

Los robots poseen tres características que le son propias: planificación, captación de la información sensorial y aprendizaje.
La captación de la información sensorial es fundamental sobre todo el reconocimiento de formas u objetos, lo que ha dado un gran auge a las investigaciones sobre visión artificial.
Muchas de las tareas que realizan conllevan un alto nivel de complejidad y toma de decisiones, actividades que no puede llevar a cabo un autómata, dado que suponen principios de acción considerados "inteligentes" por lo que este ámbito se ha constituido en uno de los más importantes de la IA (Inteligencia artificial).

Por otra parte, si comparamos a los robots con los humanos podemos distinguir las siguientes características:

*-Los robots pueden ser más fuertes, lo que les permite levantar pesos considerables y aplicar mayores fuerzas.
*-No se cansan y pueden trabajar fácilmente las 24 hs. del día y los 7 días de la semana. No necesitan descansos y rara vez se enferman.
*-Son consistentes. Una vez que se han instruido para realizar un trabajo pueden repetirlo, prácticamente de forma indefinida, con un alto grado de precisión. El desempeño humano tiende a deteriorarse con el paso del tiempo.
*-Son casi completamente inmunes a su ambiente. Pueden trabajar en entornos extremadamente fríos o calientes, o en áreas donde existe el peligro de gases tóxicos o radiación. Manipulan objetos con temperaturas muy elevadas. Son capaces de trabajar en la oscuridad.


Diversas investigaciones entre usuarios industriales muestran las razones de la industria para la incorporación de robots

La lista de prioridades de la industria japonesa es la siguiente:
-ahorro de mano de obra
-mejoramiento de las condiciones laborales
-mayor flexibilidad
-facilidad del control de la producción
-otros.


Un estudio en la industria alemana se tradujo en la siguiente lista de prioridades:
-aumento de la productividad
-reducción de los costos de mano de obra
-rendimiento de la inversión
-mejoramiento de la calidad
-condiciones de trabajo más humanas


Estos estudios, al igual que muchos otros, asignan un peso enorme a la reducción de los costos de mano de obra. Ésto es particularmente importante por dos razones: el costo de la mano de obra aumentó en un factor 2.5 a 4 durante de década de los '80, el costo por hora de robots, tomando en cuenta la depreciación, el pago de intereses, el mantenimiento, etc. se ha reducido aproximadamente un 15% durante el mismo período. El aumento en los costos de mano de obra ha sido causado en gran medida por aspiraciones de los trabajadores, mientras que la disminución en el costo de los robots se ha debido a una mejor tecnología, especialmente de los rápidos avances de la microelectrónica.

La importancia de estas tendencias resulta obvia si se considera que un robot puede trabajar dos o incluso tres turnos al día. Lo anterior, aunado a los aumentos potenciales en calidad y los ahorros en materiales, como el caso de la pintura por rocío, en donde puede usarse una menor cantidad de pintura, ha llevado a una mayor concientización respecto de los beneficios económicos que se derivan en la introducción de robots industriales.

TIPOS DE ROBOTS

La potencia del software en el controlador determina la utilidad y flexibilidad del robot dentro de las limitantes del diseño mecánico y la capacidad de los sensores.
Los robots han sido clasificados de acuerdo a su generación, a su nivel de inteligencia, a su nivel de control, y a su nivel de lenguaje de programación.
Éstas clasificaciones reflejan la potencia del software en el controlador, en particular, la sofisticada interacción de los sensores. La generación de un robot se determina por el orden histórico de desarrollos en la robótica. Cinco generaciones son normalmente asignadas a los robots industriales. La tercera generación es utilizada en la industria, la cuarta se desarrolla en los laboratorios de investigación, y la quinta generación es un gran sueño.

1.- Robots Play-back, los cuales regeneran una secuencia de instrucciones grabadas, como un robot utilizado en recubrimiento por spray o soldadura por arco. Estos robots comúnmente tienen un control de lazo abierto.

2.- Robots controlados por sensores, estos tienen un control en lazo cerrado de movimientos manipulados, y hacen decisiones basados en datos obtenidos por sensores.

3.- Robots controlados por visión, donde los robots pueden manipular un objeto al utilizar información desde un sistema de visión.

4.- Robots controlados adaptablemente, donde los robots pueden automáticamente reprogramar sus acciones sobre la base de los datos obtenidos por los sensores.

5.- Robots con inteligencia artificial, donde los robots utilizan las técnicas de inteligencia artificial para hacer sus propias decisiones y resolver problemas.

La Asociación de Robots Japonesa (JIRA) ha clasificado a los robots dentro de seis clases sobre la base de su nivel de inteligencia:
1.- Dispositivos de manejo manual, controlados por una persona.

2.- Robots de secuencia arreglada.

3.- Robots de secuencia variable, donde un operador puede modificar la secuencia fácilmente.

4.- Robots regeneradores, donde el operador humano conduce el robot a través de la tarea.

5.- Robots de control numérico, donde el operador alimenta la programación del movimiento, hasta que se enseñe manualmente la tarea.

6.- Robots inteligentes, los cuales pueden entender e interactuar con cambios en el medio ambiente.

Los programas en el controlador del robot pueden ser agrupados de acuerdo al nivel de control que realizan.

1.- Nivel de inteligencia artificial, donde el programa aceptará un comando como "levantar el producto" y descomponerlo dentro de una secuencia de comandos de bajo nivel basados en un modelo estratégico de las tareas.

2.- Nivel de modo de control, donde los movimientos del sistema son modelados, para lo que se incluye la interacción dinámica entre los diferentes mecanismos, trayectorias planeadas, y los puntos de asignación seleccionados.

3.- Niveles de servosistemas, donde los actuadores controlan los parámetros de los mecanismos con el uso de una retroalimentación interna de los datos obtenidos por los sensores, y la ruta es modificada sobre la base de los datos que se obtienen de sensores externos. Todas las detecciones de fallas y mecanismos de corrección son implementadas en este nivel.

En la clasificación final se considerara el nivel del lenguaje de programación. La clave para una aplicación efectiva de los robots para una amplia variedad de tareas, es el desarrollo de lenguajes de alto nivel. Existen muchos sistemas de programación de robots, aunque la mayoría del software más avanzado se encuentra en los laboratorios de investigación. Los sistemas de programación de robots caen dentro de tres clases :

1.- Sistemas guiados, en el cual el usuario conduce el robot a través de los movimientos a ser realizados.

2.- Sistemas de programación de nivel-robot, en los cuales el usuario escribe un programa de computadora al especificar el movimiento y el sensado.

3.- Sistemas de programación de nivel-tarea, en el cual el usuario especifica la operación por sus acciones sobre los objetos que el robot manipula.

lunes, 19 de abril de 2010

COPIAR - CORTAR Y PEGAR

COPIAR:

Private Sub mnuCopiar_Click ()
Clipboard.Clear
Clipboard.SetText Text1.SelText
End Sub


CORTAR:

Private Sub mnuCortar_Click ()
Clipboard.Clear
Clipboard.SetText Text1.SelText
Text1.SelText = ""
End Sub


PEGAR:

Private Sub mnuPegar_Click ()
Text1.SelText = Clipboard.GetText()
End Sub

CONTROLES LINE Y SHAPE

VB cuenta con dos controles que permiten diseñar figuras y líneas: estos son Shape y Line, que podemos encontrar en su caja de herramientas estándar.
Estos controles no responden a eventos, o sea no tienen procedimientos que posibiliten acciones.

Ejercicio :

Abrimos un nuevo proyecto, insertamos en el formulario: seis botones y una Shape. Cada botón modifica en su evento Click, las posibles formas del control Shape: Rectángulo, Cuadrado, Círculo, Óvalo, Rectángulo redondeado y Cuadrado redondeado. Para esto modificamos la propiedad Shape, del control Shape.
El formulario se ve así:
Y el código es el siguiente:

Private Sub Command1_Click()' botón rectángulo
Shape1.Shape = 0
End Sub

Asi continuas con cada boton, con la diferencia es que el nº 0 del Shape1.Shape lo varias desde el 0 al 5

El Valor 0 es un = rectángulo
Valor 1= cuadrado
Valor 2= ovalo
Valor 3= circulo
valor 4= rectángulo redondeado
valor 5 = cuadrado redondeado

FUENTE- OPCION COMPLETA

Ir a Proyecto – Componentes y seleccionar los controles solicitados.

Microsoft Common Dialog
Microsoft Rich Textbox
Agregarlos en la Barra de herramientas

En el Editor de Menú escribir en Name : nmufuenteY en la codificación :
Private Sub NMUfuente_Click()
CommonDialog1.CancelError = True
CommonDialog1.Flags = cdlCFEffects Or cdlCFBoth
CommonDialog1.ShowFont
RichTextBox1.SelFontName = CommonDialog1.FontName
RichTextBox1.SelFontSize = CommonDialog1.FontSize
RichTextBox1.SelBold = CommonDialog1.FontBold
RichTextBox1.SelItalic = CommonDialog1.FontItalic
RichTextBox1.SelUnderline = CommonDialog1.FontUnderline
RichTextBox1.Font.Strikethrough = CommonDialog1.FontStrikethru
RichTextBox1.SelColor = CommonDialog1.Color
Exit Sub

RANDOMIZE - RND

El programa juego Solitario, que acompaña Windows, baraja un mazo de cartas. En los juegos de cartas y en la mayoría de los juegos, el resultado es impredecible. Esto es lo que se conoce como juego de azar. Por otro lado, las computadoras son máquinas, y el comportamiento de las máquinas puede ser predecible. Para escribir programas en Visual Basic que le permitan, por ejemplo, simular la tirada de un dado, necesita una función que haga que el comportamiento de la computadora parezca aleatorio. Puede realizar esto mediante la función Rnd(aleatorio). Por ejemplo, ejecute en el procedimiento Form_Click(al pulsar el ratón) el código siguiente en un formulario en blanco.

Private Sub Form_Click()
Cls
Dim I As Integer
For I = 1 To 5
Print Rnd
Next I
End Sub


Y APARECEN IMPRESOS EN EL FORM


Como puede ver, se han generado cinco números entre 0 y 1, cada uno de ellos con seis o siete decimales(decimales es lo que está después del punto). Estos números parecen no seguir una serie: a esto se le suele denomilar aleatorio. Estos números tiene muchas, pero no todas, las propiedades estadísticas que los matemáticos esperarían de los números aleatorios.
Por ejemplo ejecute este código en el evento Form_Click...

Dim Numero
Numero = Rnd * 7
Print Numero

Esto hace que nunca Numero(la variable que contiene Rnd * 7) pueda llegar a 7. Como vio, se presentan muchos decimales, pero puede quitarlos con la sentencia Int. Ejemplo:
Dim Numero
Numero = Int(Rnd * 7) 'Sentencia Int...
Print Numero

Si ejecuta esto en el evento Click de algún formulario, verá que sólo se presentan numeros entre 0 y 6. Para que aparescan 7, hay que hacer esto:
Dim Numero
Numero = Int(Rnd * 7 + 1)
Print Numero

¿Vió el cambio? Sólo le sumé 1 al valor de Numero, ahora si se pueden presentar numeros entre 0 y 7 efectivamente
Cada vez que la computadora procesa una línea que contiene las sentencias Print Rnd aparece un número entre 0 y 1. En teoría, el número puede ser cero, pero nunca puede ser uno.
Es natural pensar que un número con siete cifras decimales es un buen número. Por ejemplo, suponga que desea escribir un programa que sumule el lanzamiento de una moneda. Hay tres posibilidades: puede salir cara, puede salir cruz, o la moneda puede caer de canto(no espere que esto ocurra). Un fragmento que simulará el lanzamiento de una moneda podría ser como el siguiente:

Private Sub Form_Click()
LanzarMoneda = Rnd
Select Case LanzarMoneda
Case Is < 0.5
Print "Cara"
Case 0.5
Print "La moneda esta de canto"
Case Else
Print "Cruz"
End Select
End Sub

Suponga que escribe éste código en un procedimiento Form_Click y lo ejecuta...
Private Sub Form_Load()
'Un simulador de lanzamiento de una moneda
Dim Tiradas As Integer, NumeroDeCaras As Integer
Dim NumeroDeCruces As Integer
Dim Increible As Integer
Dim I As Integer
Dim Resultado As Single
Show
Tiradas = Val(InputBox$("Introduzca el numero de tiradas"))
NumeroDeCaras = 0
NumeroDeCruces = 0
Increible = 0

For I = 1 To Tiradas
Resultado = Rnd
Select Case Resultado
Case Is < 0.5
NumeroDeCaras = NumeroDeCaras + 1
Case 0.5
Print "La moneda es de canto" 'Pueden pasar miles de años
Increible = Increible + 1
Case Else
NumeroDeCruces = NumeroDeCruces + 1
End Select
Next I
Cls

Print "El numero de caras ha sido: "; NumeroDeCaras
Print "el numero de cruces ha sido: "; NumeroDeCruces
If Increible > 0 Then
Print "La moneda ha salido de canto"
End If
End Sub

Ahora ejecute este programa con un número de tiradas diferentes.
Compruebe que el número de caras y el número de cruces es aproximadamente el mismo y que no aparecen monedas de canto. Ahora termine de ejecutar el programa y vuelva a ejecutarlo de nuevo, utilizando el mismo número de tiradas que antes. Si lo hace, observará que obtiene el mismo número de caras y de curces. Esto puede ser un poco extraño para una moneda honesta :) ¿Qué esta pasando?
De hecho, los números que obtiene con la función Rnd son sólo números pseudoaleatorios. Pseudo suele significar falso y acaba de ver uno de los problemas de los números pseudoaleatorios. Cada vez que inicie el programa utilizando números pseudoaleatorios, obtendrá la misma secuencia de números. El programa funciona como si la memoria de la computadora tuviese un libro con estos números, y cada vez que el programa termina, el libro volviese a la página 1.
Necesita una forma de seleccionar la página de inicio cada vez que inicie el programa. Puede realizar esto de varias formas, pero la más fácil es añadir : Randomize.
La sentencia Randomize también puede ser una potente herramienta para depurar. Esto es debido a que en las sentecias Randomize se puede utilizar cualquier expresión númerica. Después de una orden Randomize Número, el programa utilizará siempre la misma sencuecia de números aleatorios.
Para crear números aleatorios realmente(en su mayoría), se suele utilizar la sentencia Randomize junto a la sentencia Timer. Vamos con un ejemplo.
Cree un nuevo projecto. Ahora, añada un control ListBox y un CommandButton al formulario. Deje nos nombres por omisión. En el procedimiento de evento Click del CommandButton, esbribe esto:

Private Sub Command1_Click()
Dim Numero As Integer
Dim Resultado As Variant
Randomize Timer
Numero = (Rnd * 32000) + 1
List1.AddItem Numero
End Sub

Ahora, pulsa varias veces el CommandButton, y verá que los resultados son aleatorios. Termine de ejecutar el programa, y vuela a ejecutarlo de nuevo, verá que ahora los no son tan iguales como en las otras ocaciones.

lunes, 12 de abril de 2010