Entrada destacada

lunes, 27 de abril de 2020

Calcular día del año dada una fecha | Programa en C y C++

Esto es ayuda a la comunidad, creí que sería sencillo de programar y así lo fue, sin embargo quería expresar una buena lógica a la hora de desarrollar este programita.

Es bien sabido que los días del año son 365 normalmente, pero existe un inconveniente llamado año bisiesto, seguramente has escuchado de él al menos una vez en tu vida, y quizá tengas amigos que apenas tienen como 3 o 4 años solamente por la sencilla razón de que su cumpleaños solo se puede festejar cada 4 años aproximadamente, y digo aproximada porque el año 200 aunque no lo crean no es año bisiesto, pero esa es otra historia.

Ok, me salí del tema un poco, el año tiene 365 días y 366 si es bisiesto. Y los programadores nos festejamos el día 256 del año, es decir el 13 de Septiembre (el 12 si el año es bisiesto), para que vayan pidiendo regalo para ese día. El motivo por el que el día 256 del año nos representa es porque ese día nacieron todas las flores... Mentira, es porque es la cantidad máxima que puede expresarse en 8 bits en el sistema binario 11111111 (255 y el 0 que se representa con 8 ceros).



Bien, ya tienes motivos para que este programa te interese.

Puntos a destacar para hacer el programa:

  1. Los meses tienen 30 y 31 días, a excepción de febrero que tiene 28 días naturalmente y 29 en año bisiesto.
  2. 365 o 366 días del año que deben obtenerse sumando todos los días de cada mes que conforman el año.
  3. No importa realmente el mes en curso para considerar el conteo de los días, es decir, si te dan una fecha de mayo (05 05 2000), debes sumar todos los días de los meses anteriores y luego sumar los 5 días de mayo, de la siguiente manera: enero + febrero + marzo + abril + [días de mayo].
  4. Considerar siempre sumarle un día a febrero en caso de que sea año bisiesto para no fallar.
  5. El año bisiesto se obtiene con la siguiente condición: (si año es divisible entre 4 y no divisible entre 100) O (si año es divisible entre 400)
    Que podemos representar así:

    if((año % 4 == 0 && año % 100 != 0) || (año % 400 == 0))El símbolo "%" representa el residuo de una división entera, es decir, lo que sobra al dividir un número entre otro, así que si el residuo es cero significa que el número es divisible entre el otro número, por ejemplo 4 es divisible entre 2.
Ya, suficiente teoría, esto fue sencillo, ¿no?, ahora sí lo que todo estaban esperando, EL CÓDIGO.

¡DESCARGA FAST!

Todo el código que quieras, ¡GRATIS!, programación totalmente gratuita.
Comenta, opina, exprésate y déjame saber si quieres algo específico, si algo está mal o si no te gusta algo, para hacer que te guste.

Clic a la imagen para descargar el código en C o C++:

viernes, 24 de abril de 2020

Tic Tac Toe | Gato | Programación

Hola, hace un buen rato que no he podido subir nada a pesar de que había dicho que sería un poco más constante por eso de la página de facebook, pero bueno, lo mejor es la noticia que trae consigo esta entrada.

Gato, Tic Tac Toe, como lo conozcan en tu país, ciudad o comunidad. Así como lo ves, y como lo imaginaste, ¿recuerdas cuando te aburrías en tu salón de clases y te ponías a jugar esto con tu amigo o amiga?, es bonito recordar eso pero los tiempos cambian, ahora se la pasan en el teléfono haciendo tik toks o algo similar en cualquier red social. Cómo pasan los años.

Bien, la lógica de esto o más bien las reglas son las siguientes:

  1. Solo se puede de 2 jugadores, así que si hay más tendrán que esperar a que les toque, por eso siempre es bueno que solo tengas un mejor amigo, para que el otro no se ponga celoso.
  2. Cada jugador tiene un símbolo, los cuales normalmente son una bolita ( O ) y una equis ( X ). Conocí una persona muy extraña que utilizaba otros símbolos, actualmente le llamaría única y detergente, pero en ese tiempo significaba ser cool y hacerse notar.
  3. El tablero del juego es de 3 x 3 cuadrados, y en cada uno se colocan los símbolos de cada jugador.
  4. Cada jugador solo puede llenar un cuadrado por turno con su símbolo, y el juego se gana cuando alguien logró conectar 3 figuras de manera horizontal, vertical o diagonal.

Demasiadas reglas para un juego tan sencillo que se puede visualizar de la siguiente manera:


Si escribes "Tic Tac Toe" en Google te da el escenario de arribita para que juegues Gato contra su bot, está bonito y las animaciones son una chulada, pero nada como programarlo tú mismo, por ello te voy a dejar el código genérico aquí abajo.


Sí, es obvio que los ingenieros de Google nos dejarán en ridículo de una manera maquiavélica, pero al menos se hace el esfuerzo para obtener algo así. El juego está programado en Javascript (obvio usando también etiquetas HTML), sin embargo el código es muy genérico que si ya tienes algo de experiencia programando vas a poder traducir a cualquier otro lenguaje que te propongas.


Prueba el juego aquí:

¡Gato!







Turno: O


¡DESCARGA FAST!

Todo el código que quieras, ¡GRATIS!, programación totalmente gratuita.
Comenta, opina, exprésate y déjame saber si quieres algo específico, si algo está mal o si no te gusta algo, para hacer que te guste.

Clic en la imagen para descargar:



martes, 7 de abril de 2020

Pirámide de Asteriscos C# (Izquierda | Centrado | Derecha)


Seguramente te has encontrado en una situación donde te dicen que practiques problemas de lógica y todo eso, así que tu primer reto es imprimir en pantalla una pirámide de caracteres (normalmente asteriscos), ¿muy fácil, no?


Puedes utilizar un ciclo, ya sea for, while o do-while, el que sea de tu agrado, pero piensa la manera en que lo vas a ordenar para que cumpla su función principal, que es imprimir una pirámide únicamente solicitándole al usuario que te diga cuántos pisos quiere que tenga dicha pirámide.

Código de Dev - C++ - Piramide con asteriscos

Ok, ok, no tan rápido, cerebrito, ¿así de sencillo es imprimir una pirámide?, claro que sí, lo difícil es cuando el reto te dice que lo hagas a la inversa, es decir, de arriba hacia abajo o de izquierda a derecha, todo eso va cambiando conforme el reto va avanzando, así que tu mente debe estar serena y lista para idear una solución.

Frase perrona de amigos programadores y obvio mía: "Si hace lo que debe no importa la cantidad de código que usaste o la manera en que lo programaste".

Sí, señor, cada programador tiene su manera de programar y nadie la debe cambiar, excepto él mismo puede decidir si le gusta la manera en que lo está haciendo. Aunque de igual manera conforme vas avanzando vas descubriendo mejores formas de programar, más limpio, más ordenado y sobre todo más eficiente para su tiempo de ejecución.

Primera prueba: Imprimir una pirámide de asteriscos.

*
**
***
****

Yo tengo una solución a esto, que implica recorrer dos ciclos uno para los renglones y otro para las columnas, si imaginamos una cuadrícula será todavía mejor.


*
**
***
****

Ya con esto podemos notar que debemos formar un cuadrado pero solamente llenar los espacios según su número de iteración, es decir, un asterisco en el primer renglón, dos en el segundo, etcétera.

Respuesta:

Nótese que el primer ciclo va de 1 hasta a, esto representa el número de renglones, mientras que el segundo ciclo representa va de 1 hasta y, esto representa el número de columnas que recorrerá en cada renglón.

Segunda prueba: Imprimir la misma pirámide, pero ahora en lugar de imprimirla sin complejidades, la invertiremos de la siguiente manera.


*


**

***
****
¿Algún problema?, en esta situación claro que hay un problema, ahora hay espacios vacíos antes del primer caracter, pero justo esa es la respuesta, antes de imprimir comenzar a imprimir asteriscos debemos imprimir espacios.

Si lo comparan con el primero, todo quedó igual, solamente se le agregó ese ciclo for que imprime espacios antes de imprimir los asteriscos, estoy seguro de que hay una forma más sencilla o con menos código para hacerlo, pero esta fue la que se me ocurrió para que se note el cambio y sea muy ligero a la vista de un programador principiante.

Prueba final: Pirámide centrada.


*


***

*****
*******

Ahora que ya eres todo un experto imprimiendo pirámides y espacios, llegó el momento de la verdad. Aunque parezca broma, lo único que se debe hacer es lo mismo que los espacios, pero ahora en lugar de espacios es imprimir la otra mitad de la pirámide y de nuevo se modifica nada más el primer código y listo. Es sencillamente algo que puede romperte la cabeza si piensas más de la cuenta, DE NUEVA CUENTA REPITO, existe más y mejores maneras de desarrollar estos problemas, pero la más sencilla siempre es la que se nos ocurre a nosotros mismos.


Es increíble que unas cuantas líneas de código puedan hacer un cambio tan radical, pero es perfecto que las cosas salgan como se quieren.

¡DESCARGA FAST!

Todo el código que quieras, ¡GRATIS!, programación totalmente gratuita.
Comenta, opina, exprésate y déjame saber si quieres algo específico, si algo está mal o si no te gusta algo, para hacer que te guste.

lunes, 6 de abril de 2020

Ciclo for

Ya te he mostrado ciclos en algunos de mis programas en este blog, quizá los hayas notado o quizá no, casi estoy seguro que la gente solo se roba el código sin prestarle atención a lo que está escrito aquí.

En fin, en esta entrada te voy a orientar lo mejor posible acerca del ciclo for, el tan temido bucle que hace que algunos pierdan la cabeza tratando de entender por qué hace lo que hace. A veces lo hace bien, a veces lo hace mejor, y en ocasiones simplemente ni siquiera se itera nada.

Teoría: Los bucles o ciclos son utilizados en un sin fin de situaciones, te sorprenderías de saber que estás en un ciclo llamado "vida" y que cada uno de tus días es una iteración, pero no estoy para dudas existenciales.
La función de los ciclos en programación es repetir un bloque de código las veces que el programador lo requiera, por ejemplo, si quiere imprimir en pantalla una frase "n" veces él programará el ciclo para que así sea.
De los ciclos que existen, el for es el más sencillo, pues en su estructura contiene todas las propiedades de un ciclo.

Propiedades de un ciclo:

  • Variable(s) de "control": Yo mismo decidí llamarles variables de control, porque es casi en base a ellas que el ciclo funciona, lo controlan hasta que la condición se cumpla. Puse entre comillas la palabra control porque no siempre son responsables de esta función, sin embargo la mayoría de las veces son necesarias.
  • Condición(es): Las condiciones son totalmente necesarias en todos los ciclos, no hay manera de que un ciclo no tenga una condición, estas son responsables de hacer finito el ciclo, muchos programadores cometen el error de hacerlos infinitos y esto hace que los sistemas colapsen, o que el programita desarrollado tenga un error que pueda trabar la computadora.
  • Incremento(s): Igual que las variables, el incremento puede llegar a ser opcional en algunos casos, sin embargo también puede ser responsable de hacer finito el ciclo y ayuda a llevar un conteo de las iteraciones que han ocurrido, este incremento se le puede hacer a las variables de control o si se requiere a cualquier otra variable.


Estructura del ciclo for:

for (variables_control; condiciones; incrementos)
{
  //bloque_de_código;
}

No es nada difícil aprenderse de memoria esta estructura para realizar cualquier programa, sin embargo también hay que aprender la manera de implementarlo de manera correcta o de la mejor manera posible, pues en su estructura existe todo un mundo de posibilidades. Por ejemplo:

Se puede usar la siguiente estructura para contar del 1 al 10:

for (int i = 1; i <= 10; i++)
{
  //bloque_de_código;
}

Pero también es posible usarlo de la siguiente manera::
int i = 0;

for (i = 1; i <= 10; i++)
{
  //bloque_de_código;
}

La diferencia es que en la primera situación, la variable i se declara para usarse únicamente en el bloque de código del ciclo, y en la segunda situación la i se puede usar en el bloque de código completo.

También es posible utilizar más variables en el ciclo, ya sea nada más para asignarles un valor o para declarar su uso, únicamente se coloca una coma después de cada asignación de valor.

for (int i = 1, y = 1; i <= 10; i++)
{
  //bloque_de_código;
}

int i = 0, y = 0;

for (i = 1, y = 1; i <= 10; i++)
{
  //bloque_de_código;
}

Pero ahí no acaba todo, las condiciones pueden ser muy grandes si se desean:


for (int i = 1, y = 1; (i <= 10 && i >= 1) || y < 10; i++)
{
  //bloque_de_código;
}

Y si aún quieren más, también los incrementos pueden ser a cualquier cantidad de variables que queramos.

for (int i = 1, y = 1; (i <= 10 && i >= 1) || y < 10; i++, y--)
{
  //bloque_de_código;
}

Podemos utilizar las "funciones" ++ o -- para aumentar o decrementar un valor de uno en uno, o se puede hacer una igualación completamente normal como la siguiente:

for (int i = 1, y = 1; (i <= 10 && i >= 1) || y < 10; i = i + 5)
{
  //bloque_de_código;
}

Bueno, esta es la magia del ciclo for, aunque la verdadera magia la notarás el día que medas un ciclo dentro de otro ciclo y hagas maravillas recorriendo arreglos bi y multidimensionales, ahí sí notarás la magia. Mientras te dejo unos programas básicos para que no pierdas la práctica.

¡DESCARGA FAST!

Todo el código que quieras, ¡GRATIS!, programación totalmente gratuita.
Comenta, opina, exprésate y déjame saber si quieres algo específico, si algo está mal o si no te gusta algo, para hacer que te guste.

Así de hermoso habría sido conocer los ciclos for en la primaria cuando la maestra te castigaba y te ponía a escribir algo como esto 100 veces.

sábado, 4 de abril de 2020

Mayor de 3 números

El problema dice lo siguiente: "Realizar un programa en [CUALQUIER LENGUAJE] que determine cuál es el mayor de 3 números".

Realmente no es un problema difícil de resolver, sin embargo es buen ejercicio para quienes van comenzando en este mundo de la programación. Con fundamentos se deben conocer las estructuras comparativas. Si no las recuerdan, son las siguientes:

Operadores lógicos y funciones lógicas en Excel | Blog

En la mayoría de los lenguajes de programación son exactamente iguales que en la tabla anterior, pero recuerden que si vamos a comparar algo igual a algo, se deben colocar dos signos IGUAL (==), bueno, sabiendo esto ya podemos proceder a la parte de la programación.

Lógica (según): 
Ok, se tienen 3 números, los cuales debemos comparar para saber cuál de los 3 es mayor, y efectivamente, lo único que se debe hacer es compara si el primer número mayor que el segundo, y así mismo comparar el mayor de esos dos con el tercero.
  • número1 es mayor que número2
    • Sí: número1 es mayor que número3
      • Sí: número1 es el mayor.
      • No: número3 es el mayor.
    • No: número2 es mayor que número3
      • Sí: número2 es el mayor.
      • No: número3 es el mayor.
De esta manera queda expresada la lógica que se debe tomar en cuenta para realizar este programa o se puede hacer de la siguiente manera.

variable mayor = -99999999
  • número1 es mayor que mayor
    • Sí: mayor = número1
  • número2 es mayor que mayor
    • Sí: mayor = número2
  • número3 es mayor que mayor
    • Sí: mayor = número3

Ambas formas son correctas, pero la segunda te obliga a realizar 3 condiciones obligatorias, sin embargo es notablemente más reducida que la primera forma, cada quien tiene su lógica, quizá haya personas que puedan hacerlo de otra manera, pero lo dejo a tu criterio y manera de pensar.

¡DESCARGA FAST!

Todo el código que quieras, ¡GRATIS!, programación totalmente gratuita.
Comenta, opina, exprésate y déjame saber si quieres algo específico, si algo está mal o si no te gusta algo, para hacer que te guste.