26 mar. 2017

Desactivar luz mouse/teclado encendidas al apagar PC

Hola a todos, en esta ocasión les presento como desactivar el Inicio Rápido para Windows 10, lo cual hará que nuestros periféricos no tengan sus luces encendidas con la PC apagada.

Hace unas semanas decidí formatear mi PC e instalar Windows 10, todo marchaba bien hasta que apague la pc y vi que mi mouse gamer Razer conservaba las luces encendidas.


Luego de la sorpresa me decidí buscar la solución, descubriendo que Windows 10 incluye una funcionalidad de Inicio Rápido. Este viene activado por defecto al instalar el sistema operativo, siendo su finalidad acelerar el inicio de la PC al ser encendida, dejando la misma en un estado de hibernación y no complemente apagada.

Este estado de hibernación que se produce por esta funcionalidad deja los puertos USB activos, por lo tanto, nuestros periféricos reciben energía, y en los casos que tengamos uno de estos dispositivos luminosos, nos lleva a desactivarlo.

Aclaración: En varios lugares encontré que la solución a esto era la configuración de la BIOS de los puertos USB, si este post no les aplica deberían buscar por algo similar a esto.


Pasos para desactivar el Inicio Rápido en Windows 10:

Ir a Panel de Control – Opciones de Energía y hacer click en “Elegir el comportamiento de los botones encendidos”


Click en “Cambiar la configuración actualmente no disponible”


Desactivar la opción de inicio rápido y Guardar Cambios


Esto es todo por hoy, cualquier duda/pregunta en los comentarios :)

Saludos!

-----
Argies_Dario


Fuentes:
Ninguna

13 jul. 2015

Programación en C – Recursividad – Torres de Hanói

Hola a todos, en esta ocasión les presento las Torres de Hanói con Recursividad en el lenguaje de Programación C estructurado.

Comencemos por explicar que es la Recursividad en un lenguaje de programación.

La Recursividad consiste en una función la cual se llama a sí misma, con una validación para salir del bucle recursivo. Esto suena muy confuso, veamos un ejemplo para verlo más claro.


Esta función resuelve el factorial de un número, recordemos, el factorial es la multiplicación de todos los enteros del 1 al número elegido. Por ejemplo, el factorial de 5 es 1*2*3*4*5 = 120.

Esta función recibe por parámetro un entero y valida, si el numero es 1 o menor que 1 devuelve un 1, ahora, si es mayor a 1 va a devolver el valor pasado por parámetro multiplicando factorial(numero-1). En esta línea de código se encuentra la verdadera magia de la recursividad que pasaremos a explicar.

Supongamos como el ejemplo anterior que le pasamos a la función el valor 5, este valor es mayor que 1, por lo que la función va a devolver 5 * factorial (4), esto realiza una nueva llamada a la función, esta vez con el valor 4, la función factorial (4) va a devolver 4 * factorial (3), nuevamente, otra llamada a la función. Siguiendo con el análisis, la función factorial (3) devolverá 3 * factorial (2), factorial (2) devolverá 2 * factorial (1). Y finalmente, factorial (1) es un valor igual o menor a 1, por eso devolverá 1. Hasta acá explicamos cómo se llama a sí misma la función y los valores que ira devolviendo cada llamada.

Ahora, el programa lo que hará es resolver la última función que fue llamada, esta es factorial (1), como dijimos antes, esta función devuelve el valor 1. Ahora el programa va a resolver la función llamada antes, factorial (2), cuyo resultado es 2 * factorial (1), pero como factorial (1) ya nos devolvió valor, factorial (2) devolverá 2 * 1, nuevamente, la función anterior a estas fue factorial (3), la cual devuelve 3 * factorial (2), es decir, 3 * 2,
Luego factorial (4) devolverá 4 * factorial (3), es decir, 4 * 6. Terminando este proceso llegamos a factorial (5), la primer función llamada, y al ser recursiva, la ultima en resolverse, la cual devolverá 5 * factorial (4), 5 * 24 = 120, siendo 120 el factorial de 5. De esta forma funciona la recursividad.


Ahora que sabemos básicamente que es y cómo funcionan los algoritmos recursivos, pasaremos a un ejemplo más complejo e interesante, las Torres de Hanói.

Las Torres de Hanói son un rompecabezas o juego matemático. Este juego de mesa se trata de N discos de radio creciente que se apilan insertándose en una de las tres estacas de un tablero. El objetivo del juego es crear la pila en otra de las estacas siguiendo ciertas reglas.

Las reglas de las Torres de Hanói son las siguientes:
- Sólo se puede mover un disco cada vez.
- Un disco de mayor tamaño no puede descansar sobre uno más pequeño que él mismo.
- Sólo puedes desplazar el disco que se encuentre arriba en cada varilla.


Aqui podemos ver un ejemplo de como seria la resolución del juego con 3 discos:



Habiendo entendido las reglas de este juego y su funcionamiento nuestro desafío es resolverlo, y para eso utilizaremos lo aprendido de recursividad. A continuación el código que lo resuelve


Podemos observar el resultado de la ejecución con 3 Discos, el cual podemos seguir los pasos que nos indica y resolverlo con, por ejemplo, monedas que tengamos a nuestro alcance, las mismas deben tener 3 tamaños distintos, ser apiladas de mayor a menor, seguir los pasos y habremos resuelto las Torres de Hanói utilizando Recursividad


Esto es todo por hoy, cualquier duda/pregunta en los comentarios :)

Saludos!

-----
Argies_Dario


Compilado con: Dev-Cpp
Sistema Operativo: Windows 7

Fuentes:
Torres de Hanói

17 ene. 2014

Programación en C – Listas Enlazadas – Que son y cómo se usan

Hola a todos, en esta ocasión les presento las Listas Enlazadas, estaremos viendo que son, para que sirven y como se utilizan en el lenguaje de Programación C estructurado.

Antes de definir que es una Lista Enlazada, debemos definir que es una estructura en C. Una estructura es un conjunto de datos de diversos tipos agrupados bajo un mismo nombre. Para su creación utilizaremos typedef y struct de la siguiente manera


De esta forma habremos creado una estructura llamada Cliente, que contiene un ID, un Nombre y un Apellido. Para poder cargarle datos a nuestra estructura Cliente se puede hacer de la siguiente manera


Ahora que ya sabemos cómo funciona una estructura, pasemos a ver cómo funciona una Lista Enlazada

Cuando deseamos cargar en memoria un conjunto de valores utilizamos vectores, el problema de estos es que su tamaño se encuentra pre definido en el código del programa. Tomemos como ejemplo la estructura que definimos anteriormente para clientes (ID, Nombre y Apellido), si creamos un vector de esta estructura… ¿de que tamaño debería ser? Si por ejemplo creamos un vector de tamaño 1000, este podría ser muy grande ya que tal vez nuestro programa solamente necesite cargar algunos pocos clientes y un vector tan grande sería un desperdicio de memoria, o tal vez el vector sea muy chico, ya que nuestro programa debe cargar miles de clientes en memoria, por lo cual no funcionaria. Para solucionar esta problemática existen las Listas Enlazadas, una estructura dinámica que adapta su tamaño según se necesite en tiempo de ejecución.

La Lista Enlazada se forma por estructuras llamadas nodos, las cuales se enlazaran con otro nodo por a través del puntero a su misma estructura que posee el nodo. Esto puede resultar confuso, pero veamos cómo sería la estructura para nuestra Lista Enlazada


Como podemos ver, ahora dentro de la estructura tenemos un puntero llamado siguiente, el cual apuntara al siguiente nodo de la lista, así sucesivamente hasta formar la Lista Enlazada. En esta estructura podemos observar que sNodoCliente es el nombre de la estructura, por eso el puntero siguiente es sobre este mismo (utilizamos la S al comienzo del nombre para saber que es un struct o estructura). También observamos que tNodoCliente es un tipo de dato, con el cual podemos declarar este tipo de estructura como hicimos anteriormente con Cliente (utilizamos la T al comienzo del nombre para saber que es un typedef o tipo de dato).

Para poder mantener ubicado el último elemento agregado, utilizaremos un puntero que llamaremos cabeza, el cual ira cambiando a medida que se agreguen nodos indicando cual es la cabeza (el primer elemento) de la Lista Enlazada, y utilizando este nodo poder recorrer la lista.

Para crear una Lista Enlazada hay que enlazar ese puntero siguiente al último nodo existente en la lista. Veamos un ejemplo gráfico. Realizaremos 3 operaciones:
1) Dar de alta a: ID: 45, Nombre: Dario, Apellido: Argies
2) Dar de alta a: ID: 81, Nombre: Juan, Apellido: Pepe
3) Dar de alta a: ID: 90, Nombre: Laura, Apellido: Rosas


Como podemos ver, la lista se crea de atrás hacia adelante, moviendo la cabeza en cada inserción. Al acceder a la cabeza podremos acceder al primer nodo, y al ir avanzando a través del puntero siguiente podremos ir accediendo a otros nodos hasta llegar al final de la Lista Enlazada.

Bueno, suficiente explicación teórica, momento de pasar al código, en este ejemplo podemos cargar una lista enlazada de enteros, la cual luego podremos imprimir por pantalla.


De esta forma se vería la ejecución del programa


Esto es todo por hoy, cualquier duda/pregunta en los comentarios :)

Saludos!

-----
Argies_Dario


Compilado con: Dev-Cpp
Sistema Operativo: Windows 7

Fuentes:
Ninguna