Hoe correct gebruik maken van Booleaanse functies?

Ik heb problemen met de volgende opdracht, vooral omdat ik niet begrijp hoe een Booleaanse functie werkt. “Schrijf een functie genaamd Deelbaar die twee getallen als parameters inneemt. Retourneer True als het eerste getal is
deelbaar (geen rest) door het tweede getal. Anders False retourneren. Hint: gebruik %”

Wat ik momenteel heb is:

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;
}

Ik weet niet zeker wat ik verder moet doen. Ik dacht dat ik bool = 0 als waar kon toewijzen, maar dat lijkt niet het geval te zijn. Ik ben nog erg nieuw in C++, dus alle hulp wordt op prijs gesteld.


Antwoord 1, autoriteit 100%

De vraag vraagt je om een methode te schrijven die de getallen als parameters gebruikt, niet laten we je ze invoeren via standaardinvoer.

Boolean is een eigen type in c++, dus u wilt dat de methode bool retourneert en niet int.
Een gemakkelijk leesbare oplossing:

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.
    }
}

Of beknopter:

bool Divisible(int a, int b) {
    return (a % b) == 0;
}

Nog beknopter:

bool Divisible(int a, int b) {
    return !(a % b);
}

Antwoord 2, autoriteit 30%

Als u functies maakt of gebruikt, denk er dan altijd aan om met de handtekening te beginnen.

Bedenk waar deze functie mee moet werken en wat het zal opleveren. U moet terugkeren als iets waar of onwaar is, dit zijn waarden van het gegevenstype bool. Net als in een conditioneel zoals een if-statement mag je Booleaanse operatoren gebruiken zoals ==, !=en etc.

Dus je moet een bool teruggeven en controleren of twee getallen deelbaar zijn. Daarom:

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 
}

Als je eenmaal op deze manier over functies begint na te denken, wordt elk programma één grote puzzel!


Antwoord 3, autoriteit 10%

Bij methoden die boolean retourneren, wilt u eerst bepalen wat de waarde van het resultaat zal zijn wanneer de methode true retourneert, en vervolgens de operator ==gebruiken om elk resultaat dat u krijgt te vergelijken met de acceptabel resultaat.

Dus in jouw geval probeer je te bepalen of je waar of onwaar moet retourneren, afhankelijk van of het eerste getal gelijkelijk deelbaar is door het tweede.

Het eerste dat u doet, is een zaak aannemen die zou moeten werken, bijvoorbeeld:

  • 4, 2

Hoe weet je dat 4deelbaar is door 2? Dit betekent dat als ik 4 door 2 deel, de rest nul moet zijn. Dit is wat de operator %retourneert. Als u 4 % 2doet, is de waarde nul.

Ok, dus nu heb je het juiste resultaat, dus wat je nu doet, is elk resultaat dat je krijgt, vergelijken met het geaccepteerde resultaat, zoals:

int isDivisible(int a, int b)
{
    const int acceptedAnswer = 4 % 2;
    if ( a % b == acceptedAnswer )
        return 1;
    return 0;
}

En daar heb je het, elke waarde die je krijgt dat niet gelijk is aan je geaccepteerde antwoord zal terugkeren 0of not equal (!=)en elk ander antwoord zal terugkeren 1of equal (==)


Antwoord 4

U keert niet terug; of wijs een resultaat toe …

result = firstNum%secondNum;
return (result == 0); // Assuming you want 0 as true.

In het algemeen is de waarde 0onjuist en elke waarde die niet (!0) is waar. Op conventie, dat is 1.


Antwoord 5

Wat u hebt gedaan is correct, maar in de laatste regel vergelijkt u een niet-geïnitialiseerd geheel getal met resultaat (rest van de divisie).

Instellen int result=0;
en doe dit dan:

return result==firstNum%secondNum; // checks if remainder is zero (true if zero)

U kunt gewoon eenvoudig doen return (firstNum%secondNum)==0

Bovendien vraagt ​​uw opdracht om een ​​functie die in twee nummers inhoudt als parameters (invoerargumenten).
Dus je functie prototype zou zoiets moeten zijn als:

bool Divisible(int a, int b);

En u moet A en B in de functie gebruiken in plaats van input van Stdin te nemen zoals u nu aan het doen bent.


Antwoord 6

boolis een type dat slechts twee waarden kan bevatten: trueEN false. U gebruikt het voor het uiten van waarheidswaarden, zoals een cijfer een ander verdeelt of niet.

In jouw geval had de functie als volgt kunnen worden geïmplementeerd:

bool is_divisible(int a, int b)
{
    return a % b == 0;
}

Antwoord 7

In de opdracht staat duidelijk geschreven dat de functie twee parameters moet hebben. Dus de functie zou er als volgt uit kunnen zien (C++)

inline bool Divisible( int n, int m ) { return ( n % m == 0 ); }

of (C)

inline _Bool Divisible( int n, int m ) { return ( n % m == 0 ); }

In het laatste geval kunt u het retourtype _Bool vervangen door int. In het eerste geval dat C++ wordt gebruikt, is het beter om bool van het retourtype te gebruiken.
Het verzoek om twee cijfers in te voeren zal buiten de functie vallen. De functie laat alleen toe om te bepalen of een getal deelbaar is door een ander getal.

Other episodes