21 enero 2023

Condiciones en C: el Gato 2.0

Hace años publiqué una explicación sobre condiciones en C. En aquel tiempo lo hice todo en audio porque tenía un alumno con debilidad visual (casi ciego). Pero el servidor donde subí el audio cerró sin decir agua va y el artículo no sirve de mucho: puedes ver parte de la explicación y el código, pero se pierde mucho. Asi que, como sigo hablando de C con mis alumnos (y seguiré haciéndolo), es hora de volver a explicarlo.

Uno de los pilares de la programación es hacer que el programa tome decisiones.  En otro ámbito, eso es lo que los papás esperamos de nuestros hijos: de que algún día puedan tomar las decisiones correctas.  Pero al tratar con la computadora es más fácil: nunca va a renegar ni a ignorar lo que le diga (como lo suelen hacer mis hijas) porque siempre va a hacer lo que le indique y siempre lo hará igual.  Claro que mis niñas pueden hacer millones de cosas que mi computadora no, y las amo millones de veces más que mi compu, pero esa es harina de otro costal.

Volviendo al mundo de la programación, casi todos los lenguajes tienen la instrucción IF que nos permite definir las instrucciones que se van a ejecutar en caso que se cumpla alguna condición.  C no es la excepción y en el siguiente video te voy a explicar un programa que usa condiciones IF en C (o C++ que para este caso, da lo mismo).

En el video explico un programa ya hecho, un ejemplo que usa IFs. Si no tienes idea de qué es el IF, te sugiero revisar esta página de Nacho Cabanes que lo explica. Luego regresas a este video.

Aquí está el video:

Y aquí está el código del programa:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
/* ***
 * gato.c - programa que juega al gato. Ejemplo del uso de if
 * ***/
 
#include <stdio.h>

int main() {
	// Declaro variables
	char a1,a2,a3,b1,b2,b3,c1,c2,c3;		// Estos son los "huecos" donde se puede jugar
	char jugador;							// Éste es la letra del jugador (X o O)
	int fila,col;							// La fila y columna donde desea jugar
	int gana,jugadas;						// Indica si ganó (1 si sí, 0 si no) y cuantas jugadas se han hecho
	
	// Inicializo el gato
	a1 = a2 = a3 = b1 = b2 = b3 = c1 = c2 = c3 = '#';	// Las posiciones pueden tener # (aún no se ocupa), X u O
	gana = jugadas = 0;						// Todavía no ganan (en 0) y no se han hecho jugadas
	jugador = 'X';							// El primer jugador es el X
	
	// Ciclo que se repite mientras no gana
	while (gana == 0) {
		// Imprimo el gato
		printf("%c | %c | %c\n",a1,b1,c1);
		printf("--+---+--\n");
		printf("%c | %c | %c\n",a2,b2,c2);
		printf("--+---+--\n");
		printf("%c | %c | %c\n",a3,b3,c3);
		
		// Pido coordenadas
		printf("\n\nJugador %c\nFila (1, 2 o 3): ",jugador);
		scanf("%d",&fila);
		fflush(stdin);			// Elimina las teclas que no leyó el scanf anterior (el ENTER)
		printf("Columna (A, B o C): ");
		scanf("%c",&col);
		
		// Guardo la "tirada"
		if (fila == 1) {
			if (col == 'A') {
				a1 = jugador;
			} else if (col == 'B') {
				b1 = jugador;
			} else if (col == 'C') {
				c1 = jugador;
			} else {
				printf("\nError de columna\n");
			}
		} else if (fila == 2) {
			if (col == 'A') {
				a2 = jugador;
			} else if (col == 'B') {
				b2 = jugador;
			} else if (col == 'C') {
				c2 = jugador;
			} else {
				printf("\nError de columna\n");
			}
		} else if (fila == 3) {
			if (col == 'A') {
				a3 = jugador;
			} else if (col == 'B') {
				b3 = jugador;
			} else if (col == 'C') {
				c3 = jugador;
			} else {
				printf("\nError de columna\n");
			}
		} else {
			printf("\nError de fila\n");
		}
		
		// Veo si ya ganaron
		if ((a1 == jugador && b1 == jugador && c1 == jugador) ||
			(a2 == jugador && b2 == jugador && c2 == jugador) ||
			(a3 == jugador && b3 == jugador && c3 == jugador) ||
			(a1 == jugador && a2 == jugador && a3 == jugador) ||
			(b1 == jugador && b2 == jugador && b3 == jugador) ||
			(c1 == jugador && c2 == jugador && c3 == jugador) ||
			(a1 == jugador && b2 == jugador && c3 == jugador) ||
			(a3 == jugador && b2 == jugador && c1 == jugador)) {
				gana = 1;
				printf("Gana el jugador %c\n",jugador);
		} else {
			// Aumento el número de jugadas
			jugadas++;
			// Reviso empate (si llegan a 9 jugadas y nadie ha ganado, es empate)
			if (jugadas == 9) {
				printf("Hubo empate\n");
				gana = 1;		// No ganó, pero quiero que se salga del ciclo
			} else {
				// Si no ganó ni empató, cambio de jugador
				if (jugador == 'X') {
					jugador = 'O';
				} else {
					jugador = 'X';
				}
			}
		}
	}
}

No hay comentarios.:

El Tony y sus ondas...

Related Posts Plugin for WordPress, Blogger...