Mein erstes Programm, was ist falsch ??



  • //edit entfernt



  • Nee Jungs verstehe das ja auch nicht alles was ihr so schreibt...
    also bitte nicht aufregen, habe das jetzt so geändert...

    #include <iostream>
    using namespace std;
    
    void nteil();
    void teil();
    int main()
    {
        int* a;
        a = new int;
    	int b = 2;
        cout << "Bitte geben Sie eine Zahl ein: ";
        cin >> *a;  // der Ausdruck *a dereferenziert a, d. h., greift darauf zu, worauf a zeigt
    
        if (*a % b == 1)
        {
            nteil();   
        }
        else
        {
            teil();
        }
        return 0;
    }
    
    void nteil()
    {
        cout << "\nDie von Ihnen eingegebene Zahl ist nicht durch 2 teilbar!\n";
    }
    
    void teil(int zeiga)
    {
        cout << "\nDas Ergebnis der Division lautet: " << zeiga / 2 << "\n";
    }
    

    (Wenn das vorbei ist änder ich meinen Namen...)



  • Nee Jungs verstehe das ja auch nicht alles was ihr so schreibt...
    also bitte nicht aufregen, habe das jetzt so geändert...

    #include <iostream>
    using namespace std;
    
    void nteil();
    void teil();
    int main()
    {
        int* a;
        a = new int;
    	int b = 2;
        cout << "Bitte geben Sie eine Zahl ein: ";
        cin >> *a;  // der Ausdruck *a dereferenziert a, d. h., greift darauf zu, worauf a zeigt
    
        if (*a % b == 1)
        {
            nteil();   
        }
        else
        {
            teil();
        }
        return 0;
    }
    
    void nteil()
    {
        cout << "\nDie von Ihnen eingegebene Zahl ist nicht durch 2 teilbar!\n";
    }
    
    void teil(int zeiga)
    {
        cout << "\nDas Ergebnis der Division lautet: " << zeiga / 2 << "\n";
    }
    

    (Wenn das vorbei ist änder ich meinen Namen...)



  • Na ist auch egal, hab eh kein Bock mehr,

    Gute N8



  • high_med schrieb:

    #include <iostream>
    using namespace std;
    
    void nteil();
    void teil(int);//<--- wichtig
    int main()
    {
        int* a;
        a = new int;
    	int b = 2;
        cout << "Bitte geben Sie eine Zahl ein: ";
        cin >> *a;  // der Ausdruck *a dereferenziert a, d. h., greift darauf zu, worauf a zeigt
    
        if (*a % b == 1)
        {
            nteil();   
        }
        else
        {
            teil(*a);
        }
        return 0;
    }
    
    void nteil()
    {
        cout << "\nDie von Ihnen eingegebene Zahl ist nicht durch 2 teilbar!\n";
    }
    
    void teil(int zeiga)
    {
        cout << "\nDas Ergebnis der Division lautet: " << zeiga / 2 << "\n";
    }
    


  • Ok, nun wurde oft was gepostet.
    Wollte das ganze nur zusammen fassen und kleine Verbesserungen einfügen

    #include <iostream> 
    using namespace std; 
    
    void nteil(); // das sind Prototypen, ausprogrammieren tust Du weiter unten
    void teil(int); 
    
    int main()
    {
        int* a = new int; // so könnte man es kürzer schreiben, durch das new wird a im Heap angelegt...
        int b = 2; // b wird im Stack angelegt, muss nicht freigegeben werden
        cout << "Bitte geben Sie eine Zahl ein: "; 
        cin >> *a;
    
        if (*a % b == 1) // weil a ein Zeiger ist, greifst Du mit *a auf den Inhalt zu (dereferenzieren)
        { 
            nteil();   
        } 
        else 
        { 
            teil(); 
        }
    
        delete a; //... und wenn Du Speicher im Heap anlegst, solltest Du ihn wieder freigeben
    
        return 0; 
    } 
    
    void nteil() 
    { 
        cout << "\nDie von Ihnen eingegebene Zahl ist nicht durch 2 teilbar!\n"; 
    } 
    
    //der Prototyp war void teil(int), also musst es hier genauso aussehen (1 int als Parameter)
    void teil(int zeiga) 
    { 
        cout << "\nDas Ergebnis der Division lautet: " << zeiga / 2 << "\n"; 
    }
    

    Wenn Du die Funktionen teil/nteil über der main ausprogrammierst, dann brauchst Du die Prototypen nicht.
    Beides geht!



  • ...und nun hab ich vergessen, dass in der main beim Aufruf der Funktion teil einen Parameter zu übergeben.
    Der Aufruf muss so sein

    ...
    else 
    { 
       teil( *a ); 
    }
    ...
    


  • enno-tyrant schrieb:

    ahhhhhhhhhh, wie oft den noch?

    die deklaration für diese funktion:

    void teil(int zeiga)
    

    muß auch dem entsprechend aussehen:

    void teil(int);
    

    frag soviel du willst, aber nicht immer das gleiche

    Vielleicht weiss er ja einfach nicht wie deklaration und definition zusammen hängen.

    Also mal grob zum aufbau eines programms.

    Ums einfach zu halten beschränke ich mich auf funktionen.

    Ok du hast in deinem program 3 funktionen.

    nteil,teil und main.

    main ist der programmeinstiegspunkt.

    In der main funktion verwendest du die funktionen nteil und teil.

    Stell dir vor du bist der compiler und liesst dir das durch. Du fängst also in der main an.

    int *a; //alles klar ich baue einen zeiger auf einen integer
    a=new int; //ok den zeiger den ich vorhin angelegt hab füll ich mal mit leben
    int b=2 //ok ich leg einen integer an und geb ihm den wert 2
    //... hier folgen die ganzen ausgaben und die abfrage
    //dann kommt
    nteil(); //ok ich soll eine funktion aufrufen (nteil) hmmm ich wusste garnicht dass es eine funktion nteil gibt, ich weiss garnicht wie die ausieht ich hat mir keiner gesagt .. ich geb mal nen fehler aus
    
    teil(*a); //hmm teil aufrufen mit dem wert von a als parameter ... mir sagte niemand dass ich so eine funktion brauche, hat mir keiner gesagt... ich geb mal nen fehler aus
    

    Der compiler hat also keine ahnung was teil oder nteil ist... er kann sich "denken" dass es funktionen sind und er kann sich auch "denken" dass die erste keine parameter und die zweite einen integer als parameter erwartet.

    Für solche fälle zeigt man dem compiler welche funktionen es gibt.

    //declaration
    void nteil(); //hmm ok ich merk mir mal dass die funktion nteil existiert und keine parameter erwartet, ich erwarte dass man mir später sagt was sie genau macht
    void teil(int); //das selbe wie oben nur dass ich weiss dass sie einen integer als parameter erwartet...
    
    int main(){
      //.... wieder wie in oben
      nteil(); //ok ich weiss dass es die funktion gibt weiss aber noch nich wie sie  aussieht .. ich guck mir mal den rest an ...(guck .. ah da unten steht ja auch was sie macht)
    }
    
    //definition
    //stimmt vom körper her mit der void nteil() überein
    //jetz steht hier bestimmt was die funktion macht .. mal gucken
    void nteil(){
     //ausgabe ... ah ich soll also was ausgeben
    }
    

    So macht das der compiler zwar nicht, aber so kannst du es dir vorstellen.

    Wichtig ist vielleicht noch dass du zunächst mal die zeiger weglässt wenn es nicht zur aufgabe gehört und einfach mit integern arbeitest.

    Ich hoffe ich hab nicht mehr verwirrt als geholfen.



  • wie wär's ganz einfach mit

    #include <iostream> 
    #include <
    using namespace std; 
    
    int main() 
    { 
        int a, b = 2; 
        void nteil(int *), teil(int *); 
        cout << "Bitte geben Sie eine Zahl ein: "; 
        cin >> a; 
    
        if (a % b == 1) 
        { 
            nteil();    
        } 
        else 
        { 
            teil(); 
        } 
        system("pause");
        return 0; 
    } 
    
    void nteil(int *a) 
    { 
        cout << "\nDie von Ihnen eingegebene Zahl " << *a << " ist nicht durch 2 teilbar!\n"; 
    } 
    
    void teil(int *a) 
    { 
        cout << "\nDas Ergebnis der Division lautet: " << (*a/2) << "\n"; 
    }
    


  • Olaf Albrecht schrieb:

    wie wär's ganz einfach mit

    ...
    
        void nteil(int *), teil(int *); 
    ...
            nteil();    // <--- was ist damit?
    ...
            teil();     // <--- was ist dami?
    ...void nteil(int *a) 
    ...
    

    das ist genau wieder so'n scheiß


Anmelden zum Antworten