Boolian aus einer Headerdatei zurückgeben?



  • Ich hatte vor einen Primzahltester zu programmieren, die Rechenoperation um die Primzahl zu erkennen befindet sich in einer Headerdatei und funktioniert auch, doch das Ergebnis als Boolian wird nicht richtig zurückgegeben.
    Ich bin Anfänger in der Sprche C++, ich wäre euch also dankbar wenn ihr versucht mir meinen Fehler so gut wie möglich zu erklären. Hier der Quelltext:

    #include <iostream>
    #include "indikator.h"
    
    int main(){
    	int x;
    	std::cout << "+ + + + PRIMZAHLENTESTER + + + +" << std::endl;
    	std::cout << "" << std::endl;
    	std::cout << "Gib die Zahl ein, die getestet werden soll" << std::endl;
    	std::cin >> x;
    	indikator(x);
    	if (bool indikator = true){
    		std::cout << x << " ist eine Primzahl" << std::endl;
    	}
    	else{
    		std::cout << x << " ist keine Primzahl" << std::endl;
    	}
    	system("pause");
    	return 0;
    }
    
    #include <iostream>
    bool indikator(int x){
    		int d;
    		for (d = 2; x > d; d++){
    //Diese Schleife erkennt die Primzahl
    			if (x % d == 0){
    				bool indikator = false;
    				break;
    			}
    		}
    		return indikator;
    //Das zurückgeben des Boolian "Indikator" funktioniert nicht
    }
    
    bool indikator(int);
    

    Danke im Voraus!



  • Dieser Thread wurde von Moderator/in Martin Richter aus dem Forum MFC (Visual C++) in das Forum C++ (alle ISO-Standards) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Die Variable indikataor lebt nur innerhalb der if-Anweisung. (Scope)

    Sie ist beim return nicht mehr gültig.
    Du musst sie an der richtigen Stelle definieren.

    Normale Funktionen werden nicht in einem Header definiert.



  • Das Ergebnis der Funktion wird keiner Variablen zugewiesen oder sonst irgendwie verwertet. Stattdessen erzeugst du in der if Anweisung erneut eine bool Variable und weist ihr einen Wert zu.

    Du solltest verschiedene Namen für Variablen und Funktionen verwenden.



  • indikator(x);
    	if (bool indikator = true) // hier erzeugst du eine neue variable "indikator" mit dem Wert "true"
    
     // gemeint ist wohl:
        if (indikator(x)) { // deine Funktion gibt ein bool zurück!
    }
    
    if (x % d == 0){
    	    bool indikator = false; // hier auch
    		break;
    	} // ab hier gibt es den "indikator" von zwei Zeilen obehalb nicht mehr
    
    	return indikator; // dieser hat noch den Startwert
    //Das zurückgeben des Boolian "Indikator" funktioniert nicht
    }
    

    Ein guter Name für die Funktion wäre z.B. bool isPrime(int x). Der Name sollte eine gewisse Aussagekraft entwickeln um das Programm später gut lesen zu können.

    Gruß,
    temi



  • Da es noch niemand angemerkt hat, hier noch ein Hinweis zu bool.

    Vergiss: Boolian

    Wiederhole stattdessen 100x an der Tafel: Boolean!

    Der Namensgeber ist George Boole, nicht George Booli.


  • Mod

    Aber das Datentyp heißt doch "bool", nicht "boole"! 😃



  • temi schrieb:

    indikator(x);
    	if (bool indikator = true) // hier erzeugst du eine neue variable "indikator" mit dem Wert "true"
    
     // gemeint ist wohl:
        if (indikator(x)) { // deine Funktion gibt ein bool zurück!
    }
    
    if (x % d == 0){
    	    bool indikator = false; // hier auch
    		break;
    	} // ab hier gibt es den "indikator" von zwei Zeilen obehalb nicht mehr
    
    	return indikator; // dieser hat noch den Startwert
    //Das zurückgeben des Boolian "Indikator" funktioniert nicht
    }
    

    Ein guter Name für die Funktion wäre z.B. bool isPrime(int x). Der Name sollte eine gewisse Aussagekraft entwickeln um das Programm später gut lesen zu können.

    Gruß,
    temi

    Danke temi,
    aber wie soll ich

    if(indikator(x){
    }
    

    verwenden, wenn

    if(indikator(x) == true{
    }
    

    nicht Funktioniert?



  • aber wie soll ich

    indem du die Klammer nicht vergisst...

    if(indikator(x)){...}



  • Gast3 schrieb:

    aber wie soll ich

    indem du die Klammer nicht vergisst...

    if(indikator(x)){...}

    War nur ein Schreibfehler, klappt trotzdem nicht



  • E_S2908 schrieb:

    War nur ein Schreibfehler, klappt trotzdem nicht

    Schlechte Fehlerbeschreibung. Evtl. solltest du deinen aktuellen Code nochmal posten und genau beschreiben, was nicht klappt. Nur so als kleiner Tip.



  • E_S2908 schrieb:

    Ich hatte vor einen Primzahltester zu programmieren, die Rechenoperation um die Primzahl zu erkennen befindet sich in einer Headerdatei und funktioniert auch, doch das Ergebnis als Boolian wird nicht richtig zurückgegeben.
    Ich bin Anfänger in der Sprche C++, ich wäre euch also dankbar wenn ihr versucht mir meinen Fehler so gut wie möglich zu erklären. Hier der Quelltext:

    #include <iostream>
    #include "indikator.h"
    
    int main(){
    	int x;
    	std::cout << "+ + + + PRIMZAHLENTESTER + + + +" << std::endl;
    	std::cout << "" << std::endl;
    	std::cout << "Gib die Zahl ein, die getestet werden soll" << std::endl;
    	std::cin >> x;
    	indikator(x);
    	if (bool indikator = true){
    		std::cout << x << " ist eine Primzahl" << std::endl;
    	}
    	else{
    		std::cout << x << " ist keine Primzahl" << std::endl;
    	}
    	system("pause");
    	return 0;
    }
    
    #include <iostream>
    bool indikator(int x){
    		int d;
    		for (d = 2; x > d; d++){
    //Diese Schleife erkennt die Primzahl
    			if (x % d == 0){
    				bool indikator = false;
    				break;
    			}
    		}
    		return indikator;
    //Das zurückgeben des Boolian "Indikator" funktioniert nicht
    }
    
    bool indikator(int);
    

    Danke im Voraus!

    Das Problem ist genau das gleiche wie vorher, du schreibst ja ich solle if(indikator(X)) verwenden, erklär mir doch bitte noch einmal genau wie das gemeint war



  • Liest du überhaupt die Kommentare, die gemacht wurden?

    [quote="E_S2908"]

    E_S2908 schrieb:

    indikator(x);
    	if (bool indikator = true){
    

    Die erste Zeile ruft indikator auf und VERWIRFT das Resultat.
    Die zweite Zeile SETZT die NEUE Variable indikator auf "true" und überprüft danach, ob indikator auf true gesetzt wurde (was immer der Fall ist).

    Lies ansonsten ALLE Kommentare durch und ändere dein Programm entsprechend!



  • E_S2908 schrieb:

    Das Problem ist genau das gleiche wie vorher, du schreibst ja ich solle if(indikator(X)) verwenden, erklär mir doch bitte noch einmal genau wie das gemeint war

    wob hat ja eigentlich schon alles geschrieben, was wichtig ist, aber trotzdem:

    Hiermit definierst du eine Funktion. Der Rückgabetyp der Funktion ist ein Boolean, der Name der Funktion lautet "indikator" und der Aufrufparameter der Funktion ist ein Integer.

    bool indikator(int i)
    {
        // code
    }
    

    Irgendwo in deinem Programm rufst du diese Funktion auf und erwartest ein Ergebnis daraus:

    bool ergebnis; //Variable, um das Ergenbnis aufzunehmen
    ergebnis = indikator(10); // Funktion aufrufen und Ergebnis zuweisen
    
    if (ergebnis == true){ // Ergebnis auswerten
        //irgendwas tun
    }
    
    // Alternativ geht auch (Zwei unabhängige Alternativen im Beispiel)
    
    bool ergebnis = indikator(10); // 1. Funktion aufrufen und Ergebnis (Deklaration und Zuweisung in einer Zeile) zuweisen
    if (ergebnis){ // 2. etwas kürzer und besser lesbar
        //irgendwas tun
    } 
    
    // beste Lösung für diesen Fall
    
    if (indikator(10)){ // Rückgabe von indikator() direkt verwenden
        //irgendwas tun
    }
    
    // oder mit ordentlich benannter Funktion um die Lesbarkeit noch zu erhöhen
    
    if (istPrimzahl(10)){ // Rückgabe von istPrimzahl() direkt verwenden
        //irgendwas tun
    }
    


  • Vielen vielen Dank an alle die mir hier geholfen haben, ich habe es jetzt endlich kapiert 😃 !


Anmelden zum Antworten