Entrada destacada

miércoles, 23 de diciembre de 2020

Vector dominante | OmegaUp 1

Problema de OmegaUp


Clic en el enlace o la imagen :)

Descripción
Escribe un programa que lea dos secuencias de n enteros cada una y determine si cada elemento de la primera secuencia es mayor que el elemento respectivo de la otra secuencia.

Entrada
Un entero n seguido de los n enteros de la primera secuencia y los n enteros de la segunda secuencia. Puedes suponer que todos los enteros están en el rango de 1 a 100.

Salida
El valor 1 si se cumple la propiedad descrita o el valor 0 en otro caso.


LO QUE YO ENTIENDO:

El problema te plantea utilizar arreglos, para ser exacto 2 arreglos de la misma longitud, tú defines esa longitud y después los llenas con valores numéricos en un rango de valores de 1 a 100. Si todos los números del primer arreglo son mayores que los del segundo, tu salida debe ser 1, de lo contrario debes regresar un 0 en tu salida.

¿Sencillo, no?

¡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.


miércoles, 5 de agosto de 2020

Expresiones regulares [1] General

¿Alguna vez has escuchado expresión regular o regex?, si no has escuchado ninguna de las dos, este es tu día de suerte, en realidad no tanto, pero sí lo escucharás un poco por aquí.
Resulta que en mi trabajo necesitaba validar que un número de serie tuviera ciertas características mamalonas para pudiera dejar pasar al siguiente proceso, así que estuve considerando todos los puntos:
  1. Todas las letras de la serie deben ser mayúsculas.
  2. No puede haber espacios ni caracteres especiales, únicamente números hexadecimales (Es decir del 0 al 9 y de la A a la F).
  3. Todos los números de serie contienen 10 dígitos y ninguno puede comenzar con la letra F o el 0, yo no puse las reglas.
Bueno, al final no son tantas reglas como pensé, pero bueno, así fue mi pequeña situación en el trabajo, comencé a hacer las validaciones poniendo condiciones y lo primero que hice fue, tomar el dato que entraba (obviamente se debe enviar un número de serie), y puse un ToUpper() y listo, ya con eso solucioné la primera regla, ¡PERFECTO!

Pero la cosa no acabó ahí, ahora debía validar la segunda, pero como se me hizo ligeramente más complicada me salté a la tercera y puse unas condiciones if que me ayudaran a validar que el primer caracter, es decir, la primera posición (valor[0]) en la cadena leída; no fuera un CERO o una EFE, facilito también, pero a la hora de la verdad, estuve pensando muy tonta y estúpidamente que debía hacer un ciclo que comprobara cada uno de los 10 caracteres, no había problema, lo hacía y ya, pero luego de recordar mis días de universidad me di cuenta de que había una manera más sencilla y nada tardada de hacer eso.
An introduction to regular expressions – O'Reilly

Las Regex

O expresiones regulares, como les quieran llamar, son lo mismo, pero en programación así se les conoce más comúnmente, perfecto, ahora que recordé que con eso puedo hacer más sencillo el proceso, ¿ahora cómo carajo la implemento?, nada que StackOverflow no tenga.

Utilicé esta página: https://regex101.com
En ella puedes validar si tu expresión regular está correcta y las cadenas que permite, ahora solo falta el programita perrón que les mostrará lo que hice. Por cierto, la expresión regular que "diseñé" fue esta:

^([1-9A-E])([0-9A-F]{9})$

Pueden ignorar el primero y el último signo (^ y $), el símbolo de potencia (gorrito) representa el inicio de una expresión regular y el símbolo de dinero representa el final, no es necesario, simplemente es para marcar límites en caso de cualquier cosa.

martes, 21 de julio de 2020

Substring en programación

Si alguna vez pensaste en recortar una palabra, obtener las primeras letras o las últimas de ella, te voy a confesar que existe una manera y no es tan complicada, ni siquiera debes realizar un ciclo o algo similar, simplemente debes invocar la función en cualquier lenguaje y listo.

C# Substring

Un substring o subcadena es una minicadena dentro de la cadena de caracteres completa, es decir, un fragmento de ella, voy a poner un ejemplo muy común en el recorte de palabras, y no, no es la barbaridad que estás pensando, es algo más sencillo, ¡los meses del año!

Los meses del año en muchos sitios aparecen de la siguiente manera: DÍA / MES /AÑO, sin embargo, en muchos sitios el año y el varían, los días se representan siempre de la misma manera, días del 1 al 31.
Mientras que los meses pueden ser del 1 al 12, de Enero hasta Diciembre o de Ene hasta Dic, de esa manera se ahorran importante espacio y no dejan de comunicar lo que debe ser.

¿Es realmente sencillo, no?, sí, sí lo es, y aquí abajo te muestro el código, vamos a mostrar todos los meses del año previamente introducidos en una lista de tipo string o en un arreglo y observa la magia.

¡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.

domingo, 19 de julio de 2020

Estructura de datos y probabilidad | Rompecráneos 1

He decidido abrir una sección llamada Rompecráneos, que consistirá en resolución de problemas que la gente no encuentra en internet o que quizá está tan ocultos en la red que es imposible encontrarlos, en fin, el día de hoy les traigo este problema:



Define una función que reciba en una estructura de datos, un listado de tamaño variable de pares [nombre | string, importe | float].
Y que regrese de cada par [nombre, importe] la siguiente información:
  1. ¿Es posible que el elemento x sea un total o subtotal? (Calificar con una probabilidad arbitraria de 0% a 100%)


Analicé el problema y llegué la conclusión de que no sé qué debo hacer, es decir, en el código puedo plasmar lo que me está pidiendo, una colección de datos en pares que contenga nombre e importe, ambas variables persistentes en un objeto, pero luego de ahí no sé qué debo hacer exactamente.
Solo puedo imaginar que debo decidir si ese par de datos puede ser un total o un subtotal considerando una sola variable es o no es uno de esos dos valores, en caso de que pueda ser cualquiera de los dos debo decidir qué tan probable es que sí pudiera ser.

Se me ocurrió enlistar una serie de propiedades que un valor total/subtotal pueda tener, como las siguientes:

  1. El valor del importe en la posición x es la suma de todos los otros que no están en la posición x, por lo tanto ese es un total 100% seguro.
  2. El valor en la posición x es mayor que todos los otros valores, sin embargo es menor por poco de la suma del resto de los datos, tiene un 50% de probabilidad de ser un subtotal.
  3. El valor es el menor de toda la lista, 0% de probabilidad de que sea un total o subtotal.
De esa manera fui seleccionando los casos, en realidad no tengo idea de cuál podría ser la solución pero esto es lo único que se me ocurrió, así mismo, planteé el código para que tú me ayudes a resolverlo si te es posible o si lo ves de otra manera, siempre he tenido claro que la mente es grandiosa, mientras que tú piensas en alguna cosa, alguien más está pensando otra similar, igual, o muy diferente que tú, espero que puedan resolver ustedes el problema y si es así háganmelo saber en los comentarios.

Aquí les dejo mi código en C# para que vean cómo lo propuse:


miércoles, 15 de julio de 2020

Base de datos | Error fatal | SQL | Query sin WHERE...

Si no tienes conocimiento de base de datos no te preocupes, en esta entrada solamente me voy a desahogar un poco, en realidad no ocurrió algo tan malo pero cometí un error de estudiante, un error que cometerás cuando comiences a trabajar con bases de datos y es el siguiente:

DELETE [TABLE_NAME]

Seguramente has visto alguna sentencia así, ¿qué hay de raro en ella?, la sintaxis está correcta, aunque en algunos gestores he notado que también puedes ponerle un FROM como en la sentencia SELECT, pero bueno, ese no es el punto, ¿analizaste bien ahora sí?


UPDATE [TABLE_NAME] SET COLUMN1 = ''

¿Y ahora?, claro que no es difícil, basta con leer el título y notarás que falta la palabra WHERE, este error es demasiado cliché en el mundo de la programación, específicamente en el mundo de las bases de datos. En todas las instituciones donde utilizan bases de datos (actualmente TODAS), está prohibido que algún desarrollo pueda ejecutar una sentencia así, sin embargo, en el ambiente de pruebas o el servidor donde los programadores dan vida a sus Frankensteins esa debe ser una regla que se pueden saltar.

Esto me ocurrió a mí hace unos pocos días, resulta que por error no seleccioné la consulta completa, sino una mitad, desde un gestor visual de base de datos te permite ejecutar sentencias únicamente marcándolas con el mouse y dando clic en ejecutar. Obviamente no fue grave, sin embargo sí me metí en problemas porque tuve que solicitar un respaldo, tuve que justificar por qué quería ese respaldo y también tuve que preguntar a otras personas si sus pruebas se habían visto afectadas por borrar toda la información.

En fin, espero que esto jamás te ocurra en tu trabajo y si ocurre ponte pilas y desactiva la función autocommit del gestor, creo que eso me habría ahorra mucho tiempo, estrés y amistades, pero no lo sabía. Desactivar esa opción te permitirá dar un rollback a la consulta SQL que acabas de ejecutar para que los cambios no se reflejen en tu base de datos, espero que te haya sido de ayuda esta mini entrada sin nada de código pero con mucho conocimiento. Saludos, descarga código, pon peticiones en los comentarios, dale muchos clics a la publicidad de la página o dóname por paypal, MUCHAS GRACIAS.


lizzydtspeak»: DeLeTe SiN WheRe
Imagen para que la entrada no quede solita.

martes, 14 de julio de 2020

Validar variables vacías o nulas en C# | Función definida

Hoy mientras me encontraba en el trabajo revisando al monstruo (el sistema que hace funcionar la empresa), me di cuenta de que las condiciones eran una barbaridad (como diría mi jefecita). En fin, las condiciones eran demasiadas pero en ocasiones eran repetitivas y prácticamente abarcaban el 80% del bloque de código, entonces decidí unificar todas las condiciones parecidas que iba encontrando y se me ocurrió poner en google lo siguiente:


Cuando se trata de programación las búsquedas en inglés o en ruso son lo mejor (Obviamente el ruso es menos común). Así que si quieres buscar algo de programación y pretendes encontrarlo pronto debes buscarlo en ese idioma, la cantidad de información que existe es grandísima, si en español encuentras 1GB de información quizá en inglés encuentres hasta 1000 veces esa cantidad.

En fin, las condiciones trataban de validar que una variable de tipo string no estuviera vacía y tampoco tuviera un valor nulo (null), para ello se hacía la siguiente condición:

if(varString != null && varString != "")

Y la secuencia de validaciones era un sin fin de condiciones similares, a lo que en mi búsqueda encontré una súper función de la librería string que permite hacer esa validación con un solo método enviando una única ocasión la variable a validar y de respuesta te regresa un true o un false.

String.IsNullOrEmpty(variable)

Tan bonita que es la función que les muestro, esta función permite validar si una variable de tipo string es nula, está vacía o si únicamente contiene espacios en blanco.

Espero que te haya servido esta función, quizá en algún otro lenguaje exista o quizá no, pero al menos sabemos que en C# es posible explotarla de todas las maneras que consideremos necesaria, nos vemos en la próxima entrada.

domingo, 12 de julio de 2020

Tiempos y cambios | Esta no es una entrada de programación

En mis estadísticas aparece la pequeña cantidad de gente que visita mi blog, es una suma considerable pensando en que a veces duro hasta meses sin publicar nada, esto se debe a mi falta de tiempo, y que a veces prefiero simplemente descansar a seguir programando porque en ocasiones en el trabajo un simple error me toma mucho tiempo, eso me provoca estrés y fastidio de seguir programando y siempre es necesario tomarse un respiro sobre esas situaciones, aunque he llegado a pensar que mis problemas de día a día podría "documentarlos" en entradas, es decir, si me topo con una situación que requiera investigación, tiempo e incluso aprender alguna tecnología nueva.

Para compartir todo con las personas que están atentas a alguna publicación o para quienes solo entran buscando resolver sus dudas existenciales, muchas personas me agradecen y otras solo tomar el código y se van, pero está bien, la visita me ayuda muchísimo y sé que a ellos también, por lo tanto no es indispensable que se quedan conmigo todo el tiempo, yo sé que cada persona investigará y buscará por su cuenta siempre, así como yo lo hice en mis tiempos de estudiante y que sigo haciéndolo ahora que ya tengo un trabajo en esta rama.


Imagen para que tenga miniatura la entrada :)


Les agradezco muchísimo el apoyo, la página de "Links de descarga directos" habla por sí solo cuando observo la cantidad de visitas que tiene, y si tuviera una estadística de las veces que la gente ha descargado los programas que les regalo estoy totalmente seguro que me llevaría la sorpresa de que han sido descargados más de 1000 veces (en conjunto).

Seré un poco más activo en cuanto a estas situaciones y trataré de revivir mi página de Facebook que fue borrada por cuestiones de políticas mal implementadas, ni compartía spam, ni siquiera hice alusión a ganar dinero a que se suscribieran forzosamente al canal ni nada relacionado a ello, sin embargo el monopolio de esa red social reprime a mucha gente que como yo trata de que su trabajo crezca como debe de ser, pero como genero más para mí que para ellos no soy digno de usar la plataforma como publicidad para mi blog.



lunes, 6 de julio de 2020

Listas en programación [3] | Listas simples

En la entrada anterior mencioné las listas simples, y también que de simples solo tienen el nombre, y efectivamente tienen un nivel de complejidad un poco más elevado a lo que ya conoces, es decir, "los arreglos".
Es posible manejar las listas como un simple arreglo, le agregamos datos y le quitamos. Pero en esta ocasión utilizaremos espacios de memoria que se comuniquen entre sí utilizando algo que se llama puntero, en C es un poco más complejo hacer el manejo de estos, pero en los lenguajes orientados a objetos es sencillo llevar a cabo este proceso, ya que el manejo de clases y objetos es muy eficaz.

En realidad las listas simples están enlazadas para que cumplan con su función, este enlace apunta a una dirección de memoria, por ello es que si se asigna ese valor a cualquier otra variable, este afectará de forma global.

Podemos tenerlo en cuenta como los changuitos que aparecen en la película de Toy Story, que uno se unía a otro y así, cada chango representa un valor y sus brazos representan ese enlace apuntando a la dirección de memoria.

La siguiente imagen muestra la representación correcta de una lista simple enlazada, el enlace final determinará su límite al tener un valor nulo, es decir, que no hay otra dirección de memoria más, simplemente hasta ahí llega.

Estructuras de datos: listas enlazadas, pilas y colas.

Es posible realizar 3 operaciones básicas en este tipo de listas, bueno, en realidad en todas las listas, pero con pequeñas variaciones.

Agregar: Es posible agregar un dato "siguiente" a la lista, o crear un nuevo nodo que apunte al anterior, es decir, agregar un dato al final o al inicio.

Borrar: Es posible borrar un dato ya sea el primero, el último o buscándolo por su valor, pero siempre de uno en uno, si se llegaran a repetir valores, eliminará el primero que encuentre.

Buscar: Es necesario poder hacer consultas de datos, para verificar si existe el valor, ya sea solo para mostrarlo o también como apoyo para borrar.

En el siguiente código te muestro esas operaciones utilizando ECMA Script 6, es una variación de Javascript más bonita y orientada a objetos, para más información puedes consultar en algún sitio web las diferencias de cada variación.


Prueba la magia:


Y descarga el código si quieres ver cuál es la magia detrás de esto.

¡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 Javascript:

miércoles, 3 de junio de 2020

Listas en programación [2] | Pilas y colas

En la entrada pasada te mostré las maravillosas listas, sin embargo solo fue un concepto muy general y te mostré una manera en la que puedes manejarlas sencillamente. Pero hay listas con propósitos realmente marcados, como lo son las que te voy a mostrar a continuación.

¿Has pensado en alguna ocasión que en realidad los datos pueden ser objetos?, es decir, en la vida real una lista podría representarse como texto en papel, como tu lista de útiles escolares y/o la de la despensa, pero ¿qué tal si pudieran ser personas en su totalidad o animales u objetos tangibles en general?, bien, hay maneras de representar esas situaciones con programación, es necesario saber un poco más sobre programación orientada a objetos (POO), pero eso será para otras entradas más, aunque quizá te hable un poco sobre ella cuando veamos las listas simples, que de simple solo tienen el nombre.


Las mejores webs para crear listas y compartirlas con otros


Bien, las pilas y las colas son herramientas en programación que pueden ser utilizadas para representar acciones relacionadas con sus nombres, por definición tenemos que:

Pila: Lista cuyo valor insertado se agregará siempre al principio, y si se requiere remover un valor de ella se deberá eliminar primero el último que se agregó (First input, last output | El primero en entrar es el primero en salir). El ejemplo más común para esto es cuando apilas un montón de libros y luego debes quitar de uno por uno para acomodarlos.


Pila (informática) - Wikipedia, la enciclopedia libre


Cola: Lista cuyo valor insertado se agregará siempre al final, y si requiere remover un valor de ella se deberá eliminar primero el valor que se encuentra al inicio (First input, first output | El primero en entrar es el primero en salir). El ejemplo más común para esto es imaginar una fila en cualquier sitio, normalmente un banco, la primer persona que se forma es la primera que se va porque la atienden primero.

Cola (informática) - Wikipedia, la enciclopedia libre

En fin, estas listas son de mucha ayuda en varios ejercicios, sin embargo, solo ayudaré un poco a facilitarte código para que veas un súper ejemplo muy sencillo que puedes utilizar en donde tú quieras, recuerda que estos códigos son muy genéricos y aunque yo los haga en Javascript por comodidad, tú puedes pasarlos fácilmente a C#, C++, Python, Java, etc...


Mira este bonito ejemplo:


¡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 Javascript:

martes, 2 de junio de 2020

Listas en programación [1]

Ah, las listas, un clásico en el arte de la programación. Existen muchísimos elementos en programación que podemos utilizar para buenas prácticas, o simplemente por la necesidad de utilizarlos, en esta ocasión te voy a mostrar un concepto muy interesante en este arte.


Las mejores webs para crear listas y compartirlas con otros



¿Has alguna vez utilizado una lista para alguna cosa?, ya sea para ir al supermercado o cuando tu jefecita te mandaba a la tienda y se aseguraba de que le llevaras lo que te había pedido, te anotaba lo que quería, y aunque te hacía sentir estúpido, era agradable saber que esa lista haría que fuese imposible equivocarte, pero bueno, no hay motivo para proyectarme con esto.
Una lista es una colección de datos desordenada, ordenada o semiordenada, en este momento no nos interesa qué es cada una, pero por su nombre se sobreentiende el propósito de cada una. Al fin y al cabo el propósito de una lista es tener datos en un sitio donde podremos usarlos y/o al menos conocerlos.

En programación podemos utilizar listas de diferentes manera, y en C# y otros lenguajes existen clases o maneras de simular estos maravillosos objetos, por llamarlos de alguna manera.
La forma más sencilla de simular una lista es utilizando arreglos o arrays, o si eres muy vieja escuela puedes referirte a ellos como vectores, cualquier forma es válida y si el propósito es el mismo, llámala como mejor te guste.

Para este ejercicio utilizaremos una simulación con Javascript y HTML, sé que no es la manera en la que las personas aprenden programación, sin embargo es la más genérica a mi punto de vista, además de que considero que Javascript es hermoso.

Mira este bonito ejemplo:



¡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 Javascript:

jueves, 28 de mayo de 2020

Código del César | Caesars Code | Cifrado

Mientras revisaba unos programas el día de hoy me di cuenta de que tenía uno llamado "código del César", realmente no recordaba qué cosa era, pero al momento de ejecutarlo me llevé la sorpresa de que fue uno de los primeros programas de cifrado que hice.
Me llamó la atención que su funcionamiento, y no por la complejidad, sino lo contrario, se me hizo sencillo querer pasarlo a de C# a Javascript con HTML.


Caesar cipher - Wikipedia


Para no hacer el cuento largo comenzaré con un fundamento de este programa, lo hice durante un tema relacionado a la seguridad informática y eso de las contraseñas seguras. Actualmente existen muchísimos métodos de cifrado e inventar uno algoritmo eficiente que pueda hacer esto es muy bien remunerado, sin embargo es muy complejo, por ello si piensas inventar el tuyo, analizar los cifrados más complejos que existen y date cuenta por ti mismo en lo que te estás metiendo.

El cifrado ha tenido lugar desde todos los tiempos, pues es una manera de comunicarse con seguridad sin que los intrusos se den cuenta de lo que estás transmitiendo y si lo hacen no puedan conocer la información que oculta el mensaje. El mismo idioma podríamos decir que es una manera de cifrado y el traductor o el conocimiento de ese idioma sería nuestro descifrador. Es complejo entenderlo de otra manera, pero uno de los ejemplos más claros es la clave morse, de la cual seguramente has oído muchísimo, sobre todo en las películas de guerra.

Para algo así el César inventó su código, él quería comunicarse pero sin que el mensaje pudiera leerlo cualquiera, sino solo las personas que conocían el código.
Por lo que recuerdo él únicamente escribió el abecedario y los números del 0 al 9, los colocó en una línea, y bajo ellos escribió lo mismo; luego de ello decidió que su llave, por llamarla de alguna manera, sería la palabra izquierda o derecha y un número, lo que significaba que hacia donde la palabra indicara, el abecedario se recorrería y así ocultaría el mensaje.

Ejemplo: Al aplicarle un izquierda 2

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9

C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 A B


Como puedes observar la A y la B estarían representando a los números 8 y 9 respectivamente, y bueno, todas las demás letras representan otras entre sí. Mentes brillantes desde todos los tiempos, pero con hambre de poder.



Explicación:

Bien, para esto únicamente debemos tener en cuenta 2 arreglos idénticos de tipo char que nos ayuden a guardar los datos que queremos, es decir los abecedarios. Además, también considerar la variable booleana que represente la izquierda o la derecha y por supuesto el entero que nos indicará hacia dónde debemos recorrer nuestro abecedario cifrado.

Sabiendo todos estos datos ya se puede programar algo excelente en cualquier lenguaje, usaré Javascript para no necesitar de un compilador para poder ver los resultados y dejarles el código ejecutándose en esta entrada. 

"Al César lo que es del César y a Dios... que te vaya bien."



Normal
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 Javascript y en C#:

sábado, 9 de mayo de 2020

Reloj analógico y digital con Javascript | Código genérico

Estuve paseándome por mis programas que solía desarrollar en proyectos de la escuela y me topé con que programé un reloj en C#, para ello utilicé GDI (librería Graphics), pues el reloj no solo mostraba la hora, sino que también ilustraba un reloj analógico.

Bueno, para ello debemos saber primero lo que es un reloj analógico, quizá para este tiempo tú seas alguien que creció viendo todo digital, y no conozcas los relojes de manecillas. Te explico, antes de que la era digital llegara todo era muy retro, había teléfonos muy grandes, las televisiones tenían una gran caja detrás que no era nada más y nada menos que el resto del televisor, exacto, ahora imagina un reloj antiguo ¿cómo podrías ver la hora sin números dinámicos en una pantalla?, la respuesta es con manecillas.
Reloj Analógico - Gráficos vectoriales gratis en Pixabay

Creo que estoy exagerando, tal vez no sea tan retro, mucha gente actualmente los usa y se ven cool, si lo haces no te sientas ofendido, yo también en algún momento de mi vida usé uno.
En fin, ahora ya sabemos qué es un reloj analógico, aunque creo que ya lo sabíamos desde siempre.

¿Qué se debe saber?
  1. Las manecillas giran formando una circunferencia.
  2. El giro de cada manecilla es hacia su izquierda, si vemos de frente un reloj es hacia nuestra derecha.
  3. Consta de 3 manecillas, horas, minutero y segundero (yo llegué a llamarle "horero" a la de las horas, no sé cómo se llame).
  4. Las horas son 12 puntos, los minutos y los segundos son 60, sin embargo cada que pasa un minuto el apuntador de horas avanza ligeramente, acercándose a la próxima hora, así que también son 60 disfrazados de 12.
  5. Debe reiniciar cada que llega a 360°, y debe actualizarse en cada momento para que se vea la hora en punto y sin interferencias o variaciones.
Creo que con todas estas especificaciones ya estamos listos para programar algo agradable.
La lógica viene impregnada en el código, tú solo debes verlo perfectamente y sacar tus conclusiones, espero que sea de tu agrado. El código está abajo como siempre.

Relojcito

Your browser does not support the HTML5 canvas tag.


¡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 Javascript:


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.