Autor |
Mensaje |
Uciel
Nivel 6
Edad: 34
Registrado: 16 Ago 2010
Mensajes: 288
Carrera: Informática
|
|
El asunto es que estoy practicando procedimientos y para empezar con uno basico escribi uno que tome 2 numeros los multiplique y ademas me informe si el resultado es positivo o negativo. Aca esta el codigo
#include <iostream>
using namespace std;
void productoDeDosEnteros(int a,int b, int &resultado, bool &positivo);
int main(){
int c, d, resultado;
bool positivo;
cout<<"ingrese 2 valores positivos a multiplicar"<<endl>> c;
cin >> d;
productoDeDosEnteros (c, d, resultado, positivo);
if ((positivo=true)){
cout << resultado << " el resultado es positivo";}
if ((positivo=false)){
cout << resultado << " el resultado es negativo";
}
return 0;
}
void productoDeDosEnteros(int a, int b,int &resultado, bool &positivo){
resultado=a*b;
if (resultado>0){
positivo=true;}
if (resultado<=0){
positivo=false;
}
}
El problema esta en que cuando pongo un numero posivito y el otro negativo para que el resultado sea negativo me imprime:
"el resultado es positivo"
Bueno si alguien me puede corregir donde esta el error en el codigo se lo agradeceria eternamente.
Saludos. Uciel
|
|
|
|
|
|
|
|
|
Bistek
Nivel 8
Registrado: 07 May 2010
Mensajes: 691
Carrera: Informática
|
|
en el main en la linea "if ((positivo=true)){ " estas asignandole true al booleano en vez de preguntar por el valor del mismo.
El operador de comparación es == y el de asignación = si mal no recuerdo
Btw, es tiempo ya que en vez de preguntar if (positivo==true) o if (positivo==false) directamente escribas if (positivo) o if (!positivo)
Y a los booleanos escribiles nombres mas claros que expresen claramente que sucede cuando el valor es true/false, por ejemplo "esPositivo", de esa forma se facilita la lectura del código
|
|
|
|
|
|
|
|
|
koreano
Nivel 9
Registrado: 15 Jul 2010
Mensajes: 1796
Carrera: No especificada
|
|
Podés configurar el compilador para que te tire un warning por usar asignación en el if en vez de comparación, no me acuerdo cual es el flag exacto. Si estás usando un IDE te recomiendo poner al compilador en modo mas estricto (aka hinchahuevos), que te va a salvar de varios errores pelotudos.
|
|
|
|
|
|
|
|
|
Sebastian Santisi
Administrador Técnico
Edad: 42
Registrado: 23 Ago 2005
Mensajes: 17451
|
|
-Wall
Te va a decir algo así como "asignación en un branch, ¿estás seguro de que no querés comparar?, te recomiendo usar paréntesis para dejarlo en claro".
|
|
|
|
_________________
|
|
|
|
|
Stoma
Nivel 8
Edad: 36
Registrado: 06 Jul 2006
Mensajes: 510
Carrera: Informática
|
|
ademas de eso me gusta la convención de poner constantes a la izquierda cuando se compara:
Código:
|
15 == numero && 16 != numero
|
en vez de
Código:
|
numero == 15 && numero != 16
|
Si te acostumbras a hacer siempre eso, el dia que le pifies y pongas
salta error de compilación.
Obviamente te va a servir solo cuando se trate de constantes, si comparas 2 variables el warning es el que te ayuda.
|
|
|
|
_________________
Si yo te digo carnaval...
|
|
|
|
|
Sebastian Santisi
Administrador Técnico
Edad: 42
Registrado: 23 Ago 2005
Mensajes: 17451
|
|
Y la convención va más allá; a izquierda ponés lo que vos estás comparando y a derecha el con qué lo estás comparando.
Quiero decir, si tuvieras:
Código:
|
var valor_maximo = 50;
...
x = input();
if(x < valor_maximo) ...
|
Se usa "x <valor_maximo" y no "valor_maximo > x".
Sintácticamente es lo mismo, semánticamente no.
|
|
|
|
_________________
|
|
|
|
|
Uciel
Nivel 6
Edad: 34
Registrado: 16 Ago 2010
Mensajes: 288
Carrera: Informática
|
|
Ahhhhhhh.....siiiii....pero que error mas boludo!!!
Tenes razon Bistek, me confundi el "=" de asingnación, con el "==" de comparación.
Con respecto a lo que dijo "koreano"
Cita:
|
Podés configurar el compilador para que te tire un warning por usar asignación en el if en vez de comparación, no me acuerdo cual es el flag exacto. Si estás usando un IDE te recomiendo poner al compilador en modo mas estricto (aka hinchahuevos), que te va a salvar de varios errores pelotudos.
|
¿Como es que lo configuro para no tener esos errores boludos?
Estoy usando el Eclipse C++ (Windows 7 64bits)
Desde ya gracias a todos por la manito que me estan dando
|
|
|
|
|
|
|
|
|
|