C – Validación de números

En este post sobre programación en C te mostraré cómo saber si un número ingresado por el usuario es un número válido, es decir, validar un número en C.

Lo que haremos será un poco complejo, pues la validación de números en C no es una tarea sencilla, pero lo vamos a lograr.

Vamos a hacer una función que comprueba números enteros o int, y otra función que se encarga de la validación números flotantes (con punto decimal y signo de negativo).

(más…)

Conecta 4 en C – Programación de juego

Conecta 4 – Juego programado en C sobre Linux Ubuntu

En este post te mostraré el juego Conecta 4 programado en C por consola. Se trata del juego que lleva el mismo nombre en donde se deben conectar cuatro fichas del mismo color de manera que formen una línea, ya sea horizontal, vertical o diagonal.

Las características del mismo son:

  • Al iniciar se elige un color aleatorio que inicia el juego, es decir, no siempre comienza el mismo jugador
  • Modo humano contra humano
  • Modo humano contra CPU (computadora); se ha programado una pequeña IA para jugar contra el humano
  • Modo computadora contra computadora (divertido de observar)
  • Opción para cambiar la longitud del tablero de juego
  • Se puede cambiar la cantidad de fichas que se conectan. Es decir, se puede jugar a conecta 3, conecta 5, conecta 6, etcétera.
  • Escrito totalmente en C y compilable para C++. Compila en Windows con gcc, en Linux Ubuntu con gcc e igualmente en Android con Termux (de nuevo, usando gcc).

A lo largo del post te mostraré cómo es que programé el juego, dónde se puede probar, descargar, etcétera.

(más…)

Clonar arreglo o matriz en C

Resumen: mostrar cómo crear una copia de una matriz en C, para así poder afectar a una matriz sin afectar a la otra, incluso si pasamos el arreglo a una función.

Esto es debido a que en C, cuando pasamos una matriz o array a una función, se pasa por referencia, así que si se modifica en otra función, el original también se ve afectado.

Vamos a usar memcpy que viene dentro del encabezado string.h.

(más…)

Triángulo de asteriscos con C – Ejercicio resuelto

En este post te mostraré un ejercicio de programación muy sencillo para principiantes. Se trata de imprimir un triángulo de asteriscos en el lenguaje de programación C.

Si bien está escrito en C, este código compila como un encanto para C++. Es decir, puedes compilarlo con, por ejemplo, g++ y no habrá problema.

Te mostraré dos ejemplos del triángulo de asteriscos, uno en donde va en aumento y otro en decremento.

(más…)

Buscaminas en C – Juego

Hoy vamos a ver cómo implementar el juego buscaminas en C. Pasa que por diversión quise hacerlo y quedó muy bien a mi parecer.

Se trata del juego buscaminas en donde el usuario elige una casilla para descubrir lo que hay bajo la misma. Si hay una mina, el usuario pierde. En caso de que no, se le muestra al usuario el número de minas que hay cerca a esa casilla.

Lo que haremos será mostrar el tablero de juego, solicitar al usuario la casilla, ocultar las minas de manera aleatoria y saber si el usuario gana o pierde. Todo esto será modificable dentro del código fuente.

(más…)

C: sumar primer y último elemento de arreglo

En este post te voy a explicar cómo es el código para solucionar un algoritmo en C que dice algo así:

Escribir el código necesario que a partir de dos arreglos sume el primer elemento del primer arreglo con el último elemento del segundo; el segundo elemento del primero con el penúltimo elemento del arreglo y así sucesivamente hasta sumar el último elemento del primer arreglo con el primer elemento del segundo arreglo.

Almacenar la suma de cada elemento en un tercer arreglo y al finalizar, imprimir los 3 arreglos.

Lo que haremos será recorrer los arreglos, acceder a los índices por un contador y finalmente sumar. Realmente será sencillo realizar la suma de elementos de arreglos en C.

(más…)

C: Cálculo de pi usando serie de Leibniz

En este post te mostraré cómo obtener pi o calcular pi usando la serie de Leibniz en el lenguaje de programación C. Si bien esto es para C, también puede funcionar para C++.

La serie de Leibniz dice que pi se puede obtener a partir de la siguiente sucesión: 4/1 – 4/3 + 4/5 – 4/7 + 4/9…

Si te fijas, el 4 (numerador) es fijo, y el denominador se aumenta en 2. Además, en cada paso se intercambia el signo.

Nota: este cálculo es, digamos, lento, además de que su precisión depende del número de iteraciones que se hagan. Solo sirve para estudiar cómo es su algoritmo y ponerlo como ejercicio de programación.

Tal vez tú solo quieras obtener y usar el valor de pi en C, para lo cual existen ya otros métodos.

(más…)

Evaluar expresiones matemáticas en C y C++

En este post te mostraré cómo evaluar expresiones matemáticas a partir de una cadena. Es decir, hacer que se evalúe una ecuación, fórmula, etcétera.

De este modo podemos hacer que, por ejemplo, un usuario introduzca una fórmula, introduzca sus valores y se resuelva.

Además de evaluar expresiones aritméticas también podremos proporcionar valores a las variables dentro de la misma.

Vamos a usar tinyexpr, un pequeño analizador para expresiones matemáticas. Si bien el código aquí está destinado a ser usado con C, puede compilar, con ciertos ajustes, para C++.

(más…)

Embellecer código de C++ y C con clang-format

En este post te mostraré cómo formatear (agregar estilo legible) a tu código de C y C++, es decir, embellecerlo.

Aunque este formateador funciona para otros lenguajes (C#, JavaScript, Objective-C) solo te mostraré el ejemplo con los dos lenguajes que mencioné.

Vamos a usar clang, y específicamente el binario de clang-format.

Nota: recomiendo usar clang solo para embellecer el código; pero si quieres un compilador de C o C++ dale un vistazo a mingw que tiene g++ y gcc.

(más…)

C: insertar cadena en otra cadena

Hoy veremos un ejercicio de trabajo con cadenas o strings en C. Se trata de ver una función para insertar una cadena dentro de otra cadena, en cualquier posición.

Es decir, colocar una substring en una string de C. Como sabemos, las cadenas en C son un dolor de cabeza.

Durante la madrugada estuve trabajando en una función que hace exactamente eso y la vengo a compartir.

(más…)