En este artículo quiero mostrarte un operador básico y la resolución de un ejemplo en c++ usando este operador. Si eres capaz de comprender su funcionamiento y de comprender al 100% el ejemplo, conseguirás abrir tu abanico de visión para la resolución de problemas.
El operador módulo, % en lenguaje C++, es un operador binario y tiene sentido solo para números enteros. Se utiliza de la siguiente manera; sean A y B dos números enteros, si realizamos la operación A%B el resultado que obtenemos será el resto de la división entre A y B.
A primera vista parece que este operador no va a ser muy utilizado en programación, pero resuelve infinidad de problemas. Un ejemplo de un problema que resuelve este operador es, la devolución del cambio en una máquina expendedora de latas de refresco o de tabaco. Piensa en cómo podríamos calcular el cambio con este operador. Antes de eso vamos a usarlo en un ejemplo más sencillo:
Realiza un programa que te diga si un número es par o impar. Vamos a analizar este problema. Vamos a imaginar un número cualquiera, imaginemos que es un par, ¿que características tienen los números pares?. Los números pares si los dividimos entre 2 siempre son exactos, por tanto, el resto es cero. Con este análisis y con el uso del operador %. Hemos resuelto el problema. El programa pedirá un número al usuario por la salida estándar y comprobará si el módulo de ese número es cero, si es esi, devolverá por pantalla PAR, en caso de ser falso devolverá IMPAR. La implementación es la siguiente:
Espero que hayas comprendido este problema. Voy a plantearte otro problema y quiero que intentes solucionarlo siguiendo las pautas de análisis, diseño e implementación.
Imagina que tenemos una máquina de refrescos que admite monedas de 1 euro, 50 centimos de euro, 10 centimos de euro y 1 centimo de euro, crea un programa que muestre un producto y un precio, por ejemplo, fnata————–2,2o €, y que permita al usuario teclear un importe exacto o superior. El programa deberá calcular el cambio en el menor número de monedas posibles.
Intenta la solución del problema propuesto, me gustaría que me comentaras si lo has conseguido implementar. También me gustaría que si te surge alguna duda me la expusieses en la zona de comentarios. YO personalmente contestare a las mismas.
Un saludo,
Javi Pizarro
como se haria el programa de la maquina de refrescos?? no se como hacerlo
socio hola yo no se nada pero creo que deverias de empezar por un voceto de tu codigo ;declara las librerias declara las variables y luego intenta buscar una solucion al problema(ahi es donde no te puedo ayudar por que tampoco tengo la respuesta a mi no me a salido)pero no se por que me da que la solucion es mas facil de lo que parece
ADEW
wenas Javi
mira e conseguido hacer un programa que hace la mitad de lo que tu pides: me pide el dinero,reconoce si falta,si esta justo,si hay que dar cambio y te cal el cambio bien, pero sigo sin ver donde utilixar el operador% ni como puedo utilizarlo, aver si me pudieras dar algun cosejillo.
Gracias.
ok, tu tienes el cambio que hay que devolver. Piensa en las monedas que tienes. Te voy hablar en € por que estoy en Europa. En euros tenemos monedas de 1€ de 0,50€ de 0,20€ de 0,10€ y de 0,01€. Entonces piensa, imagínate que tienes que devolver 0,30 €.
Yo divido 0,30 / 1 y el cociente me da 0, por tanto no tengo que devolver nada de 1€
si divido 0,30/0,50 también el cociente es cero por tanto no tengo que devolver ninguna moneda de 0,50€
si divido 0,30 / 0,20 el cociente es 1—-> por tanto tengo que devolver una de 0,20 € ¿Cual es el nuevo cambio ahora? el nuevo cambio será el resto de la última división, o sea, el resto de 0,30/0,20 y el resto de una división se optiene con el operador %.
Piensa esto que te he dicho e intenta realizar el programa. Coméntame todas tus dudas.
Un saludo.
otra cosilla perdona en el codigo aqui expuesto declaras tres librerias las dos primeras se mas o menos lo que son pero la string no.Bueno mas o menos si para las cadenas ¿no?
¿string es para el operador %?
La librería es para el tipo de dato string, por ello la pongo. Aunque no use ese tipo de dato siempre la pongo, es una costumbre. El operador % esta predefinido en el código c++ y no es necesario introducir ninguna librería para su uso.
Un saludo.
javi wenas
no e conseguido implementar el codigo de la maquina de refresco
creo que todavia no domino lo que hemos ido aprendiendo en capitulos anteriores lo estoi repasando a ver que me e dejado atras de todo lo que nos as enseñado
no te comento esto esperando la solucion,te lo comento por que estoi frustraillo con el operador%,lo unico que voi a hacer es dejarlo pendiente y todos los dias le dedicare un rato asta que vea la solucion al problema, cuando tenga un poco mas de conocimiento del lenguaje ,ahora eso si cuando lo consiga te lo pondre en los comentarios para que veas que lo e conseguido,y que quiero aprender y terminar lo que he empezado.
GRACIAS javi.
Piensa lo siguiente. Vas a tener el Cambio y las monedas que utilizas. Entonces debes de jugar con el cociente de la división (este es el numero de monedas de ese tipo a devolver) y el nuevo valor del cambio que es el resto de esa división. Os doy una pista
Cambio / MONEDA = numero de MONEDA a devolver;
Cambio/ MONEDA= nuevo cambio; // Este es el nuevo cambio que surgirá, ten en cuenta que no necesitas una variable distinta si no que puedes ir actualizando laq variable cambio
wenas otra vez
con cuantas variables tendriamos que hacer el programa??
yo he calculado una variable pora cada moneda, otra para el cambio , otra con el precio y otra para guardar el dinero con «cin>>»
crees que me sobran o me faltan variables solo eso por que cuantas mas vueltas le doi creo que me arian falta cuatro mas por lo menos para los resutados
puede ser?? toi to verde
GRACIAS
correcto, necesitas una con el precio inicial del tabaco, ese precio lo marcas tu por ejemplo 2,5€
otra con el precio que introduce el usuario (puedes comprobar si el usuario a introducido un precio menor o igual) si el precio del usuario es mayor pues entonces hay que calcular el cambio (otra variable) entonces cambio=preciousuario-precioproducto
y luego tienes que tener una por cada moneda que utilices. puedes elegir el cambio en la moneda que quieras siempre que uses la mas pequeña que en € sería 1 centimo. Ánimo que ya casi lo tienes.
wenas
muchas GRACIAS lo he conseguido
aqui te dejo el codigo por si no te importa echarle un vistazo
asi era mas o menos no??
#include
#include
#include
using namespace std;
int main()
{
int lata=220, dinero=0, cambio=0;
int euro1=0, euro2=0, euro3=0, euro4=0, euro5=0, euro6=0;
cout<<" precio 220 "<>dinero;
cambio=dinero-lata;
if(lata>dinero){
cout<<" falta dinero "<<endl;
}
else
if(lata==dinero){
cout<<" su lata gracias "<lata)
cout<<"total ha devolver "<<cambio<<endl;
if(cambio/400==1){
cambio=cambio%400;
euro1=4+euro1;}
if(cambio/300==1){
cambio=cambio%300;
euro1=3+euro1;}
if(cambio/200==1){
cambio=cambio%200;
euro1=2+euro1;}
if(cambio/100==1){
cambio=cambio%100;
++euro1;}
if(cambio/50==1){
cambio=cambio%50;
++euro2;}
if(cambio/20==1){
cambio=cambio%20;
++euro3;}
if(cambio/10==1){
cambio=cambio%10;
++euro4;}
if(cambio/5==1){
cambio=cambio%5;
++euro5;}
if(cambio/4==1){
cambio=cambio%4;
euro6=4+euro6;}
if(cambio/3==1){
cambio=cambio%3;
euro6=3+euro6;}
if(cambio/2==1){
cambio=cambio%2;
euro6=2+euro6;}
if(cambio%2==1){
cambio=1-cambio;
++euro6;}
cout<<"monedas de 1 Euro "<<euro1<<endl;
cout<<"monedas de 50 cnts "<<euro2<<endl;
cout<<"monedas de 20 cnts "<<euro3<<endl;
cout<<"monedas de 10 cnts "<<euro4<<endl;
cout<<"monedas de 5 cnts "<<euro5<<endl;
cout<<"monedas de 1 cnts "<<euro6<<endl;
cout<<"comprobacion de resto del cambio "<<cambio<<endl;
getch();
return 0;
}
Muy bien!!! Raúl te felicito, el programa se puede hacer de una forma más simple, pero das una solución al problema. Felicidades!!
ese programa esta lleno de errores, en la linea 20 y la linea 70 tiene errores y mas
muchas gracias javi
estoi ansioso de aprender y poderlo hacer mas simple y mejor
gracias
Bueno ya despues de 2 dias me salio mas o menos jejeje, mi maquina de refrescos da muy bien el cambio, pero el problema es que si deposito el doble o mas del doble, se cobra 2 refrescos, o bien los que se puedan comprar con el deposito.
Use 3 variables: el deposito, el precio y el cambio.
Para obtener el cambio fue asi:
Ejemplo:
1) El refresco cuesta 5.20 euros (cabe aclarar que en el programa tuve que multiplicarlo por 10 al igual que el deposito que hiciera el comprador, ya que INT no acepta decimales)
2) El comprador deposita 9 Euros
3) se obtiene el residuo con 90%52=38 (el deposito de 9 euros lo multiplique por 10, ya que el precio 5.20 tambien estaba multiplicado por 10)
4) De esos 38 hay que ver cuantas monedas de 10 se pueden devolver ( osea monedas de 1 euro (porque todo esta multiplicado por 10)), entonces:
38/10=3 monedas
5)Ahora con el residuo de la operacion anterior se obtienen las de 5 (0.5 euros), entonces: (38%10)/5 = 1 moneda
6)Y asi con el residuo de la operacion anterior se obtienen las demas monedas de 0.20 y 0.10:
((38%10)%5)/2 =1 moneda
(((38%10)%5)%2)/1 =1 moneda
7)fin
Por momentos me desesperé por no saber la solucion, pero hoy en la mañana me desperte pensando que mejor pensaria y pensaria el problema antes de prender el PC.
Y lo logré.
Ahora el programita:
#include <iostream>
#include <conio.h>
#include <string.h>
using namespace std;
int main(){
int numero, precio=52, cambio;
cout<<«Quieres un refresco? El precio es de 5.20 Euros. Deposita tu moneda: «;
cin>>numero;
cambio=((numero*10)%precio);
if((numero*10)<52)
cout<<«Oops! Te falta dinero»;
else {
cout<<(cambio/10)<<» monedas de 1 Euros.\n»;
cout<<((cambio%10)/5)<<» monedas de .50 Euros.\n»;
cout<<(((cambio%10)%5)/2)<<» monedas de .20 Euros.\n»;
cout<<((((cambio%10)%5)%2)/1)<<» monedas de .10 Euros.\n»;
cout<<«\nGracias por comprar en C++, ahora imprima su refresco»;
}
getch();
}
El problema es que si deposito 52 euros, se cobra 10 refresco y no da cambio jajaja
Tu fallo es que el cambio lo calculas con el % por lo que cuando hay multiplo del precio te cobra muchas latas…. el cambio calculalo como el numero-precio, prueba a ver si asi te sale. Muy bien por la costancia, ese espiritu te hará llegar lejos.
Un saludo
ya le entendi al ejemplo que el puso, pero hay algo que aun no me cuadra y es que no puedo mostrar el cambio
Muchas gracias Javi, solucioné el problema de mi maquina de refrescos.
En vez sacar el residuo con el operador modulo %
cambio=((numero*10)%precio);
use ahora una resta
cambio=((numero*10)-precio);
y ahora con un deposito de 52 euros me da un refreco mas mi cambio (46.80 euros) y no 10 refrescos y nada de cambio jejeje
Me gusto mucho este ejercicio, me hizo pensar mucho y me dio una vista en general para usar los operadores tanto basicos y relacionales como logicos.
y ahora lo que sigue…..
Saludos
Eres grande segui tu ejempl y pues yo soy de Mexico, y lo maneje asi para mostrar el cambio:
#include
#include
#include
using namespace std;
int main ()
{
int producto=52;
int dinero;
int cambio;
cout<<"Chocolate: 5.20"<<endl;
cout<<" Introduce el dinero"<>dinero;
if((dinero*10)==producto)
cout<<"Gracias por tu compra.."<<endl;
if((dinero*10)<52)
cout<<"Te falta dinero"<52)
cambio=((dinero*10)-producto);
cout<<"Tu cambio es: "<<(cambio*10)<<" Centavos"<<endl;
cout<<(cambio/10)<<" Monedas de 1 peso"<<endl;
cout<<((cambio%10)/5)<<" monedas de 50 centavos"<<endl;
cout<<(((cambio%10)%5)/2)<<" Monedas de 20 centavos"<<endl;
cout<<((((cambio%10)%5)%2)/1)<<" Monedas de 10 centavos"<<endl;
getch ();
}
migo that code has an error in line cout << " chococolate : 5.20 " << endl ; the complidador shows me 9 errors,
if you want to talk and discuss the program I just have my doubts that it is so then I write to your email
vientos!que bueno que te haya servido de ayuda mi codigo, yo tambien soy de Mexico. Te recomiendo que uses el codigo sourcecode para mostrar correctamente tus codigos fuente.
Es el siguiente , solo remplaza la X con un ]
Oops! no salio como lo esperaba jeje, va la buena:
[sourcecode language=»cpp»]
tu codigo fuente
tu codigo fuente
tu codigo fuente
[/sourcecode]
saludos
usando un metodo parecido como comprobar que un numero ingresado por el usuario es binario o no ? gracias
Como reconozco si un programa en c++ tiene 4 modulos
oye como se haria para conjunto ejemplo hacer una lista de alumnos q por numero de lista q te diga si son par o son impar con la funcion mod y con for
si m podrias ayduar
oye la verdad que no logre terminar este ejercicio. a mi punto de vista… nos explicas un modulo que funciona solo con numeros enteros pero nos pides encontrar un resultado con monedas que estan denominadas en numeros reales. es algo contradictorio. de resto todo excelente. me has ayudado mas que mi profesor de programacion de la uni
ME podrian ayudar debo hacer un programa donde ingrese letras y me imprima solo vocales.
hola aqui les dejo mi codigo espero lo comenten soy de mexico y tengo tan solo 1.5 mes programando y mis monedas son pesos mexicanos de 1 , 2, 5 ,10 pesos, si me pudieran indicar correcciones en mis comentario se los agradeceria mucho, y quiero estudiar programacion de videojuegos ojala y me puedan dar algun consejo bonito fin.
//Aldo Sanchez Garcia 20/05/14
//Implementacion del operador «%» modulo
//maquina expendidora de refrescos monedas (10 , 5 , 2 , 1 )
#include
using namespace std;
int mdc ( int sdm , int refresco ); //funcion mdc
int main(){
int refresco(6); //valor del refresoco
int moneda1; //valor de la moneda ingresada por el usuario
int sdm; //suma de las monedas ingresadas por el usuario
char letra;
int letra1;
cout< $6.00 pesos. \n acepto monedas de 10 , 5 , 2 , 1 Quieres? si Y no N \n \n \n \n»;
cin>>letra;
letra1=(int)letra; // cambio de variable de char a int.
for (sdm = 0 ; sdm < refresco;){
if (letra == 89 || letra == 121){
if (sdm < refresco){
for ( moneda1 = 0 ; moneda1 != 1 , moneda1 != 2 , moneda1 != 5 , moneda1 != 10;){ // siempre que moneda1 no sea == a 1 , 2 , 5 , 10 se repetira
cout<>moneda1;
cin.ignore();
if (moneda1 != 1 && moneda1 != 2 && moneda1 != 5 && moneda1 != 10) {
cout<< " denominacion invalida bro, unicamente manejo monedas de \n \n \n 1 , 2 , 5 , 10 \a " <<endl; // cuando moneda1 no sea == 1 , 2 , 5 ,10 me mostrara este cout
}
else {break;} // cuando moneda es == 1 o 2 o 5 o 10 se rompe con el ciclo for linea 36 y se pasa a la suma.
}
sdm=sdm+moneda1; //el valor ingresado por el usuario se guarda en moneda 1 y se suma con sdm el valor se guarda en sdm y se acumula con las demas monedas que ingrese el usuario.
}
}
else{
cout<:p «;
cin.get();
return 0;
}
if (sdm > refresco){ // se ejecuta el if cuando sdm es mayor que el valor de refresco
cout<< "toma tu PiPicola y ";
cin.get();
sdm % refresco; // se realiza y se guarda la diferencia entre sdm y refreso gracias al operador modulo %
mdc ( sdm , refresco ); // se llama la funcion mdc
cin.get();
}
else if ( sdm == refresco){
cout<< "deposito exacto, toma tu PiPiCola bro! ";
cin.ignore();
}
}
return 0;
}
int mdc ( int sdm , int refresco ){ // con la operacion declarada de modulo "%" se ejecuta switch
switch(sdm % refresco){
case 1:
cout<< "tu cambio es $1.00 pesos en una moneda de un peso.";
break;
case 2:
cout<< "tu cambio es de $2.00 pesos en una moneda de dos pesos ";
break;
case 3:
cout<< "tu cambio es de $3.00 pesos en una moneda de un peso y una moneda de dos pesos ";
break;
case 4:
cout<< "tu cambio es de $4.00 pesos en dos monedas de dos pesos ";
break;
}
}
«El operador módulo, % en lenguaje C++, es un operador binario y tiene sentido solo para números enteros. »
EL operador módulo o residuo (%) NO es binario. La razón misma está en la afirmación anterior: tiene dominio y rango en los enteros. Por lo tanto, no puede ser binaria.
Hola Ivan, gracias por tu comentario. Con binario me refiero a que el operador se utiliza entre dos valores o argumentos, así es como se considera a este tipo de operadores en c++. Saludos.
Hola, acabo de entrar y acabo de ver tu publicación, voy a tratar hacerlo, deseame suerte
Muy buena explicacion, al comienzo estaba un poco confundido, pero al hacer los ejercicios entendi perfectamente el funcionamiento del operador modulo.
Relacione mucho su funcionamiento a cuando queremos pasar un numero decimal a numero binario que dividimos y dividimos por %2, tanto que me puse a la tarea de hacer un programa para ello.
Gracias por la explicacion.
hola amigo, tengo una pregunta, bueno es mas un problema con un codigo y me preguntaba si me podias ayudar. La idea es que al ingresar dos numero, A y B el programa calcule y me muestre el maximo comun divisor y el minimo comun multiplo. el codigo es este
#include
using namespace std;
int main() {
float a;
float b;
float mcd;
float mcm;
float n;
float q;
float r;
cout << "ingrese los valores enteros a calcular" <> a;
cin >> b;
if (b==0) {
mcd = a;
} else {
n = b;
r = a%n;
if (r==0) {
mcd = b;
} else {
do {
q = n%r;
if (q==0) {
mcd = r;
} else {
n = r;
r = q;
}
} while (r!=mcd);
}
}
mcm = (a*b)/mcd;
cout << "Valores ingresados a= " << a << " b= " << b << endl;
cout << "Maximo comun multiplo " << mcm << endl;
cout << "Minimo comun divisor " << mcd << endl;
return 0;
}
pero al compilarlo me salta el siguiente error: [Error] invalid operands of types 'float' and 'float' to binary 'operator%' me gustaria que me ayudaras a arreglar el codigo y que me dijeras porque salta este error. Gracias
P.D. la version del Dev c++ que tengo es la 5.1.1
Tienes que declararlo como int
Yo hice uno mas sencilo, claro que es mas bien como una parte del programa pero vere como hacer lo demas. La publicacion ya es de hace mucho haber si revisas de vez en cuando jaja :v
#include
#define REF 10
int main(){
/*Declaracion de variables*/
int din, cam, dif;
float mod;
/*Entrada de datos*/
printf(«\n Deposite $%i pesos \n\n»,REF);
scanf(«%i»,&din);
/*Relacion para dar cambio*/
mod=din /REF;
dif=REF-din;
cam=din-REF;
/*Condiciones*/
if(mod0){ printf(«Su cambio seria. $%i pesos», cam);
printf(«\n\n Gracias por su compra. ¡DEBERIA TOMAR MAS AGUA!\n «);
}
getch();
return 0;
}
Tengo una duda, por qué es que si es un operador binario, a veces me entrega como resultado un 2?
Hola saben, tengo un problemita, en la hora de prograr cuando es (par y impar,) sigo el ejemplo y de igual forma no me funcion el modulo, no se que hacer, ya probe de muchas forma y ninguna me funciona, me ayudan,,,? Saludos
Hacéte un curso de diseño gráfico. Nuna se pone fondo oacuro y letra oscura, siempre debe ser en contraste, sino no se lee nada.