Consulta sobre generador de operaciones matemáticas

Muy buenas.

Estoy trabajando en un código el cual debe generar operaciones matemáticas aleatorias cuyo resultados, comprendidos únicamente entre 1 y 4, deben ser mostrados en el monitor.
El problema lo tengo con la sección de las divisiones, ya que que no logro resolver cómo bloquear aquellas que arrojan resultados con decimales. En el monitor sólo deberían aparecer aquellas divisiones que poseen resultados sin decimales, por ejemplo: 3/1=3, 12/6=2, 4/4=1, 8/4=2, etc.

Dejo el código.
Saludos!

int numX;
int numY;
int pin1 = 1;

void setup (){
  Serial.begin (9600);
  randomSeed (analogRead (pin1));
}

void loop (){
  numX = random (1,100);
  numY = random (1,100);
  int resultado = numX / numY;
  
  if (resultado <= 4 && resultado >=1){
    Serial.print (numX);
    Serial.print (" / ");
    Serial.print (numY);
    Serial.print (" = ");
    Serial.println (resultado);
  } 
}

En principio ninguna de esas divisiones te va a dar resultados con decimales porque son divisiones enteras (con resultado tipo int).

Para que te de resultados con decimales, deberías usar variables de tipo float (al menos esa sería la solución que parece más lógica).

Entonces sería relativamente fácil aislar los resultados con decimales, por ej

if (resultado - (int) resultado == 0) { // resta la parte entera para ver si "quedan" decimales
// acciones con un resultado entero
} else {
// acciones con resultados con decimales
}

Pero, como los float en arduino no son muy precisos que digamos podrías llegar a obtener (caso hipotético)

4.0 / 2.0 = 1.9999999

Y ahí estás en un problema.

Tal vez el error no se de con ninguna combinación de dividendo y divisor pero para no llegar a padecerlo se me ocurre que podrías hacer algo así

// Deja todo como está
// pero antes de hacer la división

if (numX % numY == 0) {  
// hago la división y todo lo demás
}

% (módulo) te da el resto entero de una división entre enteros, por ej

4 % 2 = 0

3 % 2 = 1

7 % 4 = 3

19 % 10 = 9

20 % 10 = 0

Tomando solo algunos casos y haciendo la cuenta en la calculadora

0 / 2 = 0  (el resultado de 4 / 2 será 2 sin decimales)

1 / 2 = 0.5  (el resultado de 3 / 2 será 1.5)

9 / 10 = 0.9  (el resultado de  19 / 10  será 1.9)

Como vemos, si el resto es 0 el resultado no tendrá decimales, en cambio si es mayor va a tener decimales.

Entonces, si el módulo da un resto 0 haces la división porque sabes que no va a tener decimales pero si el resto es mayor a 0 no haces la división porque va a dar un resultado con decimales.

¿Se entiende?

Sí, la intención de utilizar variables del tipo "int" en este caso es por una cuestión gráfica y porque nunca utiliza resultados con decimales. Al final todas las operaciones serán mostradas en un display y utilizando del tipo float se mostraría, por ejemplo, "2.00 / 2.00 = 1.00" lo cual queda algo extraño a la vista.
Por lo demás, se entendió a la perfección, ya modifiqué el código y me arroja lo que necesitaba. Muchas gracias!!!

Eso sería lo de menos porque sería salvable con solo cambiar el tipo de los datos antes de imprimirlos pero lo que no podrías salvar es el tema de la precisión y el error que puede aparejar.

Me alegro que se entendiese la explicación (mis dotes de docente no son las mejores :grimacing: )