Function funktioniert nicht?



  • Hallo jungs.. ein kleines Problem meinerseits:

    Man möge bitte den unordentlichen/effizienten code entschuldigen 🤡

    /************************************************************************
    * Modulname  : Beispiel 5
    * Autor      : Simon Steyskal, HTL 16, 1HIB, 2003/2004
    * Gegenstand : APR
    * Zweck      : Noten_Berechnungen
    * Datum      : 17.10.2003
    * Beispiel   : 5
    ************************************************************************/
    
    // +++++++++++++++++++++++++ Include-Files ++++++++++++++++++++++++
    
    #include <iostream.h>
    #include <math.h>
    #include <stdlib.h>
    
    // +++++++++++++++++++++++++ Hauptprogramm ++++++++++++++++++++++++
    
    int main () {
    
    	int max_1,max_2,max_3,max_4,max_5;//__________________________________________ MAximale Punkte Anzahl pro bsp.
    
    	double punkte_1, punkte_2, punkte_3, punkte_4, punkte_5;// ___________________ Wirkliche Punkteanzahl 
    
    	double summe; //______________________________________________________________ Das Endergebnis
    
    	short nochmal; //______________________________________________________________ Ob man nochmal will..
    // ++++++++++++++++++++++++ Beginn Konversation =) ++++++++++++++++++++++++++
    
    	cout << endl;
        cout << " ---------------------------------------------------------------------------------------" << endl;
    	cout << " Willkommen bei Simons Notenberechnungs Programm :)" << endl;
    	cout << " Mit diesem Programm hast du die Moeglichkeit einen Test/Schularbeit dynamisch berechnen zu lassen." << endl;
        cout << " Also lass uns beginnen..." << endl;
        cout << " PS: Ich nehme einmal an das es 5 Bsp. sind. ( Bei Anfrage koennen es auch mehr werden^^ )" << endl;
    	cout << " ---------------------------------------------------------------------------------------" << endl;
    	cout << endl;
    
    // ++++++++++++++++++++++++++++++ Abfragen ++++++++++++++++++++++++++++++++++
    
    	cout << " Die Maximale Punkteanzahl für Bsp.1? :";
    	cin  >> max_1;
        cout << endl;
    
    	cout << " Die Maximale Punkteanzahl für Bsp.2? :";
    	cin  >> max_2;
    	cout << endl;
    
    	cout << " Die Maximale Punkteanzahl für Bsp.3? :";
    	cin  >> max_3;
    	cout << endl;
    
    	cout << " Die Maximale Punkteanzahl für Bsp.4? :";
    	cin  >> max_4;
    	cout << endl;
    
    	cout << " Die Maximale Punkteanzahl für Bsp.5? :";
    	cin  >> max_5;
    	cout << endl;
    
    // +++++++++++++++++++++++++++++++ Abfragen² ++++++++++++++++++++++++++++++++
    
    	cout << " So, Jetzt gehts ans Eingemachte :D " << endl;
    	cout << " Hier darfst du jetzt eingeben wieviele Punkte ein Schueler bei dem jeweiligen Bsp. erreicht hat!" << endl;
    	cout << endl;
    
    	cout << "Beispiel 1 --> Punkte? : ";
    	cin  >> punkte_1;
    	cout << endl;
    
    	cout << "Beispiel 2 --> Punkte? : ";
    	cin  >> punkte_2;
    	cout << endl;
    
    	cout << "Beispiel 3 --> Punkte? : ";
    	cin  >> punkte_3;
    	cout << endl;
    
    	cout << "Beispiel 4 --> Punkte? : ";
    	cin  >> punkte_4;
    	cout << endl;
    
    	cout << "Beispiel 5 --> Punkte? : ";
    	cin  >> punkte_5;
    	cout << endl;
    
    // +++++++++++++++ Falls jetzt ein Eierschädeln nen Scheiß eingibt -.- ++++++++++++++++++
    
    	if( punkte_1 <= max_1 && punkte_2 <= max_2 && punkte_3 <= max_3 && punkte_4 <= max_4 && punkte_5 <= max_5)
    	{
    
          summe = punkte_1 + punkte_2 + punkte_3 + punkte_4 + punkte_5;
    
    	  if( summe >= 0 && summe <= 50)
    	  {
    		  cout << " Das is ein Mordsdrum Fleck :'(" << endl;
    	  }
    
    	  else if( summe >= 51 && summe <= 62)
    	  {
    		  cout << " Grad noch die Kurve gekratzt^^" << endl << " Note: 4" << endl;
    	  }
    
    	  else if( summe >= 63 && summe <= 75)
    	  {
    		  cout << " Solide Leistung!" << endl << " Note: 3" << endl;
    	  }
    
    	  else if( summe >= 76 && summe <= 87)
    	  {
    		  cout << " Hohoho... Eine flotte 2 :)" << endl;
    	  }
    
    	  else if( summe >= 88 && summe <= 100)
    	  {
    		  cout << " Schui.. Ein Sehr gut!!! --> 1" << endl;
    	  }
    	}
    
    	else
    	{ 
          cout << " Das gibbts jetzt nich ganz ?_?" << endl;
    	}
    
        cout << " So das wars jetzt..." << endl;
    	cout << " Willst du nochmal?"   << endl << endl;
    	cout << " Gib 1 für ein nochmaliges Starten des Progamms ein!: ";
    	cin  >> nochmal;
    
    	if( nochmal==1 )
    	{
    		system("cls");
    		max_punkte();
    		reel_punkte();
    	}
    
    	system("pause");
    	return 0;
    
    	}
    
    int max_punkte()
    {	
    	// ++++++++++++++++++++++++++++++ Abfragen ++++++++++++++++++++++++++++++++++
    
    	cout << " Die Maximale Punkteanzahl für Bsp.1? :";
    	cin  >> max_1;
        cout << endl;
    
    	cout << " Die Maximale Punkteanzahl für Bsp.2? :";
    	cin  >> max_2;
    	cout << endl;
    
    	cout << " Die Maximale Punkteanzahl für Bsp.3? :";
    	cin  >> max_3;
    	cout << endl;
    
    	cout << " Die Maximale Punkteanzahl für Bsp.4? :";
    	cin  >> max_4;
    	cout << endl;
    
    	cout << " Die Maximale Punkteanzahl für Bsp.5? :";
    	cin  >> max_5;
    	cout << endl;
    
    return max_1,max_2,max_3,max_4,max_5;
    }
    
    int reel_punkte()
    {
    	// +++++++++++++++++++++++++++++++ Abfragen² ++++++++++++++++++++++++++++++++
    
    	cout << " So, Jetzt gehts ans Eingemachte :D " << endl;
    	cout << " Hier darfst du jetzt eingeben wieviele Punkte ein Schueler bei dem jeweiligen Bsp. erreicht hat!" << endl;
    	cout << endl;
    
    	cout << "Beispiel 1 --> Punkte? : ";
    	cin  >> punkte_1;
    	cout << endl;
    
    	cout << "Beispiel 2 --> Punkte? : ";
    	cin  >> punkte_2;
    	cout << endl;
    
    	cout << "Beispiel 3 --> Punkte? : ";
    	cin  >> punkte_3;
    	cout << endl;
    
    	cout << "Beispiel 4 --> Punkte? : ";
    	cin  >> punkte_4;
    	cout << endl;
    
    	cout << "Beispiel 5 --> Punkte? : ";
    	cin  >> punkte_5;
    	cout << endl;
    
      return punkte_1, punkte_2, punkte_3, punkte_4, punkte_5;
    }
    

    So jetzt functionieren aber die functionen nicht?!
    Alle variablen inclusiove functionen namen gelten für ihn undeklariert.. was tun?

    Vielleicht die variablen irgendwie global machen? aber wie 😕

    thx 4 helping



  • Du musst Vorwärtsdeklarationen schreiben:
    int max_punkte();
    Die Zeile muss noch vor int main() kommen, damit du die Funktion in main benutzen kannst. Das gleiche gilt für int reel_punkte()



  • Oder Du definierst die Funktionen vorher in einer Headerdatei.
    Dies ist aber nicht immer empfelenswert.



  • Für short nochmal;

    würde ich lieber bool verwenden.



  • Also danke mal für die antworten^^

    das mit bool funzt nicht wegen -->

    cin >> nochmal;
    

    und das mit den vordeklarieren funzt 🙂

    aber leider erkennt er alle variablen drinnen nicht...
    also alle die in den functionen verwendet werden ⚠

    thx



  • Variablen, die in einem Block definiert werden, verlieren ihre Gültigkeit beim verlassen des Blocks.

    ...
    int a;
    while...
    {
      int b=0;
      ...
    } //ab hier gibt es b nicht mehr
    ...
    


  • max_1 usw. ist in max_punkte() auch nicht definiert. Du solltest das anders lösen - aber nicht unbedingt mit globalen Variablen.

    Überhaupt hast du das Prinzip einer Funktion nicht so ganz verstanden. Es ist nicht so gedacht, dass du in einer Funktion die eine Eingabe machst, in einer andere Funktion die nächste, usw.
    Eine Funktion sollte eine in sich abgeschlossene Aufgabe erfüllen (z.B. den Notendurchschnitt berechnen) und dann EINEN Wert zurückliefern.



  • Ich würd jetzt auch mal spontan empfehlen, anstall einzelne Variablen, ein Array zu deklarieren. Damit kannst Du zumindest mal die Länge deines Codes um einen exorbitant 😃 hohes Maß verkürzen, und somit schneller programmieren, besser Fehler finden und bessere Programme schreiben.

    Bsp an Deinem Code:
    Du schreibst:

    int max_1,max_2,max_3,max_4,max_5;//__________________________________________ MAximale Punkte Anzahl pro bsp. 
    
    /*... hier steht andere Code von Dir, den wir jetzt mal kurz bis hier über springen ;) ...*/
    
    cout << " Die Maximale Punkteanzahl für Bsp.1? :"; 
        cin  >> max_1; 
        cout << endl; 
    
        cout << " Die Maximale Punkteanzahl für Bsp.2? :"; 
        cin  >> max_2; 
        cout << endl; 
    
        cout << " Die Maximale Punkteanzahl für Bsp.3? :"; 
        cin  >> max_3; 
        cout << endl; 
    
        cout << " Die Maximale Punkteanzahl für Bsp.4? :"; 
        cin  >> max_4; 
        cout << endl; 
    
        cout << " Die Maximale Punkteanzahl für Bsp.5? :"; 
        cin  >> max_5; 
        cout << endl;
    

    SCHRECKLICH ;), wie wärs hiermit. Das erfüllt den gleichen Zweck:

    int maxPunkte[5]; // hier deklarierst Du ein Array für 5 Werte,
                      // statt 5 verschiedene Variabelen (max_1 bis max_5), und Du kannst längere
                      // Kommentare einfügen :)
    
    /*....hier steht sonstiger Code ...*/
    
    //jetzt kannst du das obige Zitat durch folgende Schleife um Zeilen verkürzen
    
    for( int i = 0; i < 5; ++i) {
          cout << " Die Maximale Punkteanzahl für Bsp." << (i+1) << "? :"; // i fängt bei 0 an also im ersten Durchlauf i+1 =1 ; 
                                                                          //zweiter Durchlauf i= 1 also dann 2; usw...
          cin >> maxPunkte[i]; /*... i läuft von 0 bis 4 und maxPunkte speichert 
                                     5 verschiedene Werte...*/
    }
    

    mfg
    tom



  • Hoho thx^^

    hmm noch ne frage..
    wie krieg ich dann die if anweisung hin?
    also das -->

    if( punkte_1 <= max_1 && punkte_2 <= max_2 && punkte_3 <= max_3 && punkte_4 <= max_4 && punkte_5 <= max_5)
    

    und das-->

    summe = punkte_1 + punkte_2 + punkte_3 + punkte_4 + punkte_5;
    

    Büdde helft mir schnell 🙂



  • statt punkte_1 punkte[0] statt punkte_2 punkte[1] statt punkte_3 punkte[2] etc.



  • hust stimmt ja^^ 😃

    thx davie und an alle die mir geholfen haben..



  • so wieder ein problem^^

    hier mal der code:

    // +++++++++++++++++++++++++ Include-Files ++++++++++++++++++++++++
    
    #include <iostream.h>
    #include <math.h>
    #include <stdlib.h>
    
    //int max_punkte();
    
    int reel_punkte();
    
    // +++++++++++++++++++++++++ Hauptprogramm ++++++++++++++++++++++++
    
    int main () {
    
    // +++++++++++++++++++++++++++ Constante ++++++++++++++++++++++++++++
    
    	const max=100;
    	const maxpt=20;
    // +++++++++++++++++++++++++++ Variablen +++++++++++++++++++++++++++++
    
    	int Punkte[5];
    
    	double summe; //______________________________________________________________ Das Endergebnis
    
    	short nochmal; //______________________________________________________________ Ob man nochmal will..
    
    // ++++++++++++++++++++++++ Beginn Konversation =) ++++++++++++++++++++++++++
    
    	cout << endl;
        cout << " ---------------------------------------------------------------------------------------" << endl;
    	cout << " Willkommen bei Simons Notenberechnungs Programm :)" << endl;
    	cout << " Mit diesem Programm hast du die Moeglichkeit einen Test/Schularbeit dynamisch berechnen zu lassen." << endl;
        cout << " Also lass uns beginnen..." << endl;
        cout << " PS: Ich nehme einmal an das es 5 Bsp. sind. ( Bei Anfrage koennen es auch mehr werden^^ )" << endl;
    	cout << " ---------------------------------------------------------------------------------------" << endl;
    	cout << endl;
    
    // +++++++++++++++++++++++++++++++ Abfragen² ++++++++++++++++++++++++++++++++
    
    	cout << " So, Jetzt gehts ans Eingemachte :D " << endl;
    	cout << " Hier darfst du jetzt eingeben wieviele Punkte ein Schueler bei dem jeweiligen/n Bsp. erreicht hat!" << endl;
    	cout << endl;
    
    	reel_punkte();
    
    // +++++++++++++++ Falls jetzt ein Eierschädeln nen Scheiß eingibt -.- ++++++++++++++++++
    
          if( summe >= 0 && summe <= 50)
    	  {
    		  cout << " Das is ein Mordsdrum Fleck :'(" << endl;
    	  }
    
    	  else if( summe >= 51 && summe <= 62)
    	  {
    		  cout << " Grad noch die Kurve gekratzt^^" << endl << " Note: 4" << endl;
    	  }
    
    	  else if( summe >= 63 && summe <= 75)
    	  {
    		  cout << " Solide Leistung!" << endl << " Note: 3" << endl;
    	  }
    
    	  else if( summe >= 76 && summe <= 87)
    	  {
    		  cout << " Hohoho... Eine flotte 2 :)" << endl;
    	  }
    
    	  else if( summe >= 88 && summe <= 100)
    	  {
    		  cout << " Schui.. Ein Sehr gut!!! --> 1" << endl;
    	  }
    
        cout << " So das wars jetzt..." << endl;
    	cout << " Willst du nochmal?"   << endl << endl;
    	cout << " Gib 1 fuer ein nochmaliges Starten des Progamms ein!: ";
    	cin  >> nochmal;
    
    	if( nochmal==1 )
    	{
    		system("cls");
    		//max_punkte();
    		reel_punkte();
    	}
    
    	system("pause");
    	return 0;
    
    	}
    
    	// ++++++++++++++++++++++++++++++ Abfragen ++++++++++++++++++++++++++++++++++
    
    int reel_punkte()
    {
    	int Punkte[5];
    	double summe;
    	// +++++++++++++++++++++++++++++++ Abfragen² ++++++++++++++++++++++++++++++++
    
    	for( int i = 0; i < 5; ++i) {
    	  cout << "Beispiel " << (i+1) << " --> Punkte? : ";
    	  cin  >> Punkte[i];
    	  cout << endl;
        summe = Punkte[0] + Punkte[1] + Punkte[2] + Punkte[3] + Punkte[4];
    }
     return 0;
    }
    

    ich möchte das man pro abfrage nur 20 punkte maximal eingeben darf und somit das ergebniss auch nicht mehr als 100 betragen darf..
    Wie verwirkliche ich das?

    Noch ein problem --> er umgeht mir die ausgaben für die noten..--> if(..&&..) dann blabla

    An was liegt das?
    Bite um dringende hilfe 🙂
    thx mani



  • Büdde helft mir schnell 8[



  • bin zwar kein 'jungs', aber deine funktion kennt zwar die summe, dein main programm jedoch nicht.

    variablen sind in blöcken gültig, also die summe in der funktion eben nur in der funktion.

    möchtest du sie bleibend auch in der main verändern, dann nutze referenzen oder pointer (siehe dazu auch volkards kurs im tutorial teil)

    zum bleistift

    int reel_punkte(int Punkte[], int &summe)
    

    wäre eine möglichkeit.

    so long erstmal



  • werde ich probieren..

    thx 😃

    PS: jungs=>sollte sachlich gesehen werden.. also werde auch frauen angesprochen^^


Anmelden zum Antworten