Como usar correctamente as funções booleanas?
actualmente, o que tenho é:
int Divisible()
{
int firstNum;
int secondNum;
int result;
cout << "Please enter any integer: ";
cin >> firstNum;
cout << "Please enter another integer: ";
cin >> secondNum;
result == firstNum%secondNum;
}
Não sei o que fazer para além disso. Eu pensei que poderia atribuir bool = 0 como verdadeiro, mas isso não parece ser caso. Ainda sou muito novo em C++, por isso qualquer ajuda seria apreciada.
7 answers
A pergunta pede-lhe para escrever um método que tome os números como parâmetros, NÃO vamos introduzi-los a partir da entrada padrão.
O booleano é um tipo próprio em C++, por isso quer que o método devolva o bool e não o int. Uma solução fácil de ler:
bool Divisible(int a, int b) {
int remainder = a % b; // Calculate the remainder of a and b.
if(remainder == 0) {
return true; //If the remainder is 0, the numbers are divisible.
} else {
return false; // Otherwise, they aren't.
}
}
Ou mais conciso:
bool Divisible(int a, int b) {
return (a % b) == 0;
}
Ainda mais conciso:
bool Divisible(int a, int b) {
return !(a % b);
}
Nos métodos que devolvem o booleano, você quer primeiro determinar qual será o valor do resultado quando o método retornar verdadeiro, e então usar o operador ==
para avaliar qualquer resultado que você obtém contra o resultado aceitável.
Então, no teu caso, estás a tentar determinar se deves devolver verdadeiro ou falso, dependendo se o primeiro número é divisível uniformemente pelo segundo.
A primeira coisa a fazer é pegar num caso que deve funcionar., ex:4, 2
4
é divisível por 2
? Bem, isto significa que se eu dividir 4 por 2, então o resto deve ser zero. Isto é o que o operador %
devolve. Se o fizer 4 % 2
o valor é zero.
Ok então agora você tem o Resultado Correto então o que você simplesmente faz agora é avaliar qualquer resultado que você obtém contra o resultado aceito assim:
int isDivisible(int a, int b)
{
const int acceptedAnswer = 4 % 2;
if ( a % b == acceptedAnswer )
return 1;
return 0;
}
E aí tens, qualquer valor que tenhas que não iguale a tua resposta aceite. voltará 0
ou not equal (!=)
e qualquer outra resposta voltará 1
ou equal (==)
Ao criar funções ou usá-las, lembre-se sempre de começar com a assinatura.
Pense com o que esta função precisa de trabalhar, e com o que irá voltar. Você precisa retornar se algo é verdadeiro ou falso, que são valores do tipo de dados bool
. Assim como em uma declaração condicional tal if você pode usar operadores booleanos como ==
, !=
e etc.
Então você precisa retornar um bool e verificar se dois números são divisíveis. Portanto:
bool Divisible(int a, int b){
// == boolean operator that will return true if a%b evaluates to 0
// false if not
return (a % b) == 0
}
Uma vez que você comece a pensar em funções desta forma, cada programa se torna um grande quebra-cabeça!
Você não retorna, ou atribui um resultado...
result = firstNum%secondNum;
return (result == 0); // Assuming you want 0 as true.
Em geral, o valor 0
é falso e qualquer valor que não é (!0
) é verdadeiro. Por convenção, isto é 1
.
O que fez está correcto, mas na última linha está a comparar um inteiro não inicializado com o resultado (resto da divisão).
Conjunto int result=0;
e depois fazer isto:
return result==firstNum%secondNum; // checks if remainder is zero (true if zero)
Você também poderia simplesmente fazer return (firstNum%secondNum)==0
Além disso, a sua atribuição pede uma função que assume dois números como parâmetros (argumentos de entrada). Então o seu protótipo de função deve ser algo como:
bool Divisible(int a, int b);
E você deve usar a e b na função em vez de receber dados do stdin como estás a fazer agora.
bool
é um tipo que pode conter apenas dois valores: true
e false
. Você o usa para expressar valores de verdade, como se um número divide outro ou não.
No seu caso, a função poderia ter sido implementada do seguinte modo:
bool is_divisible(int a, int b)
{
return a % b == 0;
}
Na atribuição está escrito claramente que a função deve ter dois parâmetros. Assim, a função poderia ser vista da seguinte forma (C++)
inline bool Divisible( int n, int m ) { return ( n % m == 0 ); }
Ou (C)
inline _Bool Divisible( int n, int m ) { return ( n % m == 0 ); }
No último caso pode substituir o tipo de devolução _Bool por int. No primeiro caso que é quando C++ é usado, é melhor usar o tipo de retorno bool. O pedido de inscrição de dois números deve estar fora da função. A função apenas permite determinar se um número é divisível por outro número.