Usar el Operador de Módulos en C++

Jinku Hu 12 octubre 2023
  1. Usar el operador % para calcular el resto en la división
  2. Use el operador % para generar números enteros aleatorios menores que un número máximo dado en C++
  3. Utilice los objetos de función definidos en la biblioteca para sustituir el operador % en C++
Usar el Operador de Módulos en C++

Este artículo presentará cómo utilizar el operador de módulo en C++.

Usar el operador % para calcular el resto en la división

La característica estándar del operador de módulo (%) es calcular el resto de una división. El valor de retorno de la sentencia - x % y representa el resto que queda después de x se divide por y. El operador modulo se define de forma que ambos operandos deben ser enteros y un divisor no es cero. El siguiente ejemplo demuestra el operador de módulo usado con diferentes pares de enteros con signo. Fíjate que, para imprimir el carácter % en la consola usando la función printf, debemos usar %%.

#include <iostream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::vector;

int main() {
  vector<int> ivec1{24, 24, -24, -24, 24};
  vector<int> ivec2{7, 8, -8, -7, -6};

  for (size_t i = 0; i < ivec1.size(); ++i) {
    printf("% -d %% % -d = % -d\n", ivec1[i], ivec2[i], ivec1[i] % ivec2[i]);
  }
  cout << endl;

  return EXIT_SUCCESS;
}

Resultado:

 24 %  7 =  3
 24 %  8 =  0
-24 % -8 =  0
-24 % -7 = -3
 24 % -6 =  0

Use el operador % para generar números enteros aleatorios menores que un número máximo dado en C++

El uso alternativo del operador de módulo es controlar el generador de números aleatorios para proporcionar sólo números menores que un entero específico. Un programador es responsable de elegir el conjunto de herramientas de generación de números aleatorios dependiendo de la necesidad de calidad de la aleatoriedad, pero ambos métodos pueden combinarse con el % para especificar el límite superior de los números generados. En este caso, utilizamos la función rand, cuyo valor de retorno se empareja con el valor máximo deseado utilizando el operador de módulo.

#include <ctime>
#include <iostream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::vector;

constexpr int MAX = 1000;
constexpr int NUMS_TO_GENERATE = 10;

int main() {
  vector<int> ivec1{24, 24, -24, -24, 24};
  vector<int> ivec2{7, 8, -8, -7, -6};

  std::srand(std::time(nullptr));
  for (int i = 0; i < NUMS_TO_GENERATE; i++) {
    cout << rand() % MAX << "; ";
  }
  cout << endl;
  cout << endl;

  return EXIT_SUCCESS;
}

Resultado:

98; 194; 398; 190; 782; 550; 404; 557; 509; 945;

Utilice los objetos de función definidos en la biblioteca para sustituir el operador % en C++

La biblioteca estándar de C++ define múltiples clases que representan operadores aritméticos, relacionales y lógicos tradicionales. Estos se llaman objetos de función y tienen nombres como std::plus<Type>, std::modulus<Type> y etc. Type especifica el tipo de parámetro del operador de llamada. El siguiente ejemplo de código muestra el objeto de función std::modulus utilizado en vectores de enteros.

#include <ctime>
#include <iostream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::vector;

int main() {
  vector<int> ivec1{24, 24, -24, -24, 24};
  vector<int> ivec2{7, 8, -8, -7, -6};

  std::modulus<> intMod;
  int mod_of_nums = intMod(ivec1[1], ivec2[1]);
  printf("%d %% %d = %d\n", ivec1[1], ivec2[1], mod_of_nums);

  return EXIT_SUCCESS;
}

Resultado:

24 % 8 = 0
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Artículo relacionado - C++ Modulo