Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: luxna en 24 Septiembre 2010, 19:09 pm



Título: Ayuda con un programa en C++ (parece sencillo pero...) [RESUELTO!]
Publicado por: luxna en 24 Septiembre 2010, 19:09 pm
Buenas a todos/as!

Bueno, resulta que soy nuevo en esto del C++, y en la universidad nos han pedido que hagamos el siguiente programa:

Entrar un numero entero y uno natural (-32 y 6) y dividirlos entre si. El cociente de la división puede dar negativo o positivo, pero nos piden que el valor del resto sea positivo. Así pues, el resto tiene que ser un valor absoluto... Como ejemplos de los resultados que se deben obtener:

32 / 6 ---> Cociente 5, Resto 2
-32 / 6 ---> Cociente -6, resto 4

Con lo que realmente tengo problemas es con el segundo ejemplo... El primero no hay problema. No consigo que me den esos valores (-6 y 4) y me han prohibido usar la biblioteca <math.h>.

Mi intento lo he estructurado de la siguiente manera:

Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int main(){
  5.  
  6. int a,b,q,r;
  7. cin >> a >> b;
  8. q=a/b;
  9. r=a%b;
  10. if (r < 0) {
  11. cout << q << " " << -r << endl; // Aquí creo que esta el error
  12. }
  13. else {
  14. cout << q << " " << r << endl;
  15. }
  16. }

Alguno/a puede ayudarme a solucionar este problema que viene determinado por el signo del resto?

Muchas gracias!!!


Título: Re: Ayuda con un programa en C++ (parece sencillo pero...)
Publicado por: criskapunk en 24 Septiembre 2010, 19:27 pm
Buenas!

Si tenes que lograr que el resto de la division siempre sea positivo y no podes usar alguna funcion como Abs() (No se si C++ tendra la misma, no conozco el lenguaje), podrias tomar el valor devuelto y en caso de que fuese negativo, multiplicarlo por -1.

Un saludo ;)




Título: Re: Ayuda con un programa en C++ (parece sencillo pero...)
Publicado por: Akai en 24 Septiembre 2010, 19:50 pm
Prueba a usar un unsigned int para almacenar el resto. Eso debería solucionar tu problema ya que las variables de tipo unsigned no almacenan el signo.


Título: Re: Ayuda con un programa en C++ (parece sencillo pero...)
Publicado por: ace332 en 24 Septiembre 2010, 23:03 pm
Bueno amigo, para resolver el ejercicio que te dieron debes fijarte en la relación que hay entre Dividendo, Divisor, Cociente y Residuo:

Dividendo = Cociente*Divisor + Resto (Aqui siempre Resto < Cociente)

Ahora bien, si el resto nos da negativo debemos "positivisarlo"... pero el nuevo resto tambien debe cumplir con la relación anterior:

Dividendo = (Cociente -1)*Divisor + (Divisor + Resto)

Luego tenemos lo siguiente

Nuevo cociente: Cociente -1
Nuevo resto:    Divisor + Resto

El resto es solo cosa de programarlo  ;)

Saludos  :)


Título: Re: Ayuda con un programa en C++ (parece sencillo pero...) [RESUELTO!]
Publicado por: luxna en 24 Septiembre 2010, 23:48 pm
Bueno amigo, para resolver el ejercicio que te dieron debes fijarte en la relación que hay entre Dividendo, Divisor, Cociente y Residuo:

Dividendo = Cociente*Divisor + Resto (Aqui siempre Resto < Cociente)

Ahora bien, si el resto nos da negativo debemos "positivisarlo"... pero el nuevo resto tambien debe cumplir con la relación anterior:

Dividendo = (Cociente -1)*Divisor + (Divisor + Resto)

Luego tenemos lo siguiente

Nuevo cociente: Cociente -1
Nuevo resto:    Divisor + Resto

El resto es solo cosa de programarlo  ;)

Saludos  :)


Lo tengo, ya me ha salido!!! Muchísimas gracias por vuestra ayuda!!!