Ausgabe von Ergebnissen im Unterprogramm



  • Nabend zusammen,

    ich bekomme mein Programm nicht ans laufen so wie ich es möchte.
    Es gibt die Funktion „ausgabe“, wie der Name schon sagt möchte ich dort alle errechneten Werte (ggt und kgv) ausgeben lassen.

    Es wäre super, wenn mir einer helfen könnte. 🙂

    Vielen Dank im Voraus.

    int main()
    {
    	int ggt(int p, int q, int r);	// kgv berechnen:
    
    	x = ggt(p, q, r);
    
    
    	int kgv(int c, int d, int x);	// kgv berechnen:
    
    	z = kgv(c, d, x);
    
    	void ausgabe(int x, int z);		// Ausgabe der Ergebnisse  
    
    	system("pause");
    
    	return (0);
    }
    
    
    int ggt(int p, int q, int r)
    {
    	return p;
    }
    
    int kgv(int c, int d, int x)
    {
    	return  c * d / x;
    }
    
    void ausgabe(int x, int z)
    {
    	cout << "Der kgv ist: " << z << endl;
    	cout << "Der Ggt ist " << x << endl;
    }
    


  • @bato Der Compiler hat bestimmt eine sehr genaue Meinung dazu.



  • ich bekomme leider keine Fehlermeldung

    1>------ Erstellen gestartet: Projekt: Project4, Konfiguration: Debug Win32 ------
    1>Quelle.cpp
    ========== Erstellen: 1 erfolgreich, 0 fehlerhaft, 0 aktuell, 0 übersprungen ==========



  • @bato Das ist aber merkwürdig. Du solltest sowas wie

    forum.cpp: In function ‘int main()’:
    forum.cpp:5:2: error: ‘x’ was not declared in this scope
      x = ggt(p, q, r);
      ^
    forum.cpp:5:10: error: ‘p’ was not declared in this scope
      x = ggt(p, q, r);
              ^
    forum.cpp:5:13: error: ‘q’ was not declared in this scope
      x = ggt(p, q, r);
                 ^
    forum.cpp:5:16: error: ‘r’ was not declared in this scope
      x = ggt(p, q, r);
                    ^
    forum.cpp:10:2: error: ‘z’ was not declared in this scope
      z = kgv(c, d, x);
      ^
    forum.cpp:10:10: error: ‘c’ was not declared in this scope
      z = kgv(c, d, x);
              ^
    forum.cpp:10:13: error: ‘d’ was not declared in this scope
      z = kgv(c, d, x);
                 ^
    

    bekommen. Ist deine "Quelle.cpp" die richtige Datei?

    Und was machen die Vorwärts-Funktionsdeklarationen mitten im Quelltext?



  • hallo wob,

    okay ich bin jetzt kein Profi was c++ angeht 🙄
    Ich habe mich heute mal an Unterprogramme beschäftigt aber ich bekomme jetzt leider nicht die Ergebnisse vom ggt und kgv in der Funktion "ausgabe" ausgegeben.

    #include <iostream>
    using namespace std;
    
    int main()
    {
    	int p, q, r = 0;	// Variablen für ggt
    	int c, d;		// Variablen für kgv
    	int z, x;		// Variablen für ausgabe
    
    	cout << "Geben Sie eine Zahl ein:";				//Eingabe der ersten Zahl "p"
    	cin >> p;
    
    	cout << "Geben Sie eine zweite Zahl ein:";		//Eingabe der zweiten Zahl "q"
    	cin >> q;
    
    	c = p;
    	d = q;
    
    	int ggt(int p, int q, int r);	// kgv berechnen:
    
    	x = ggt(p, q, r);
    
    
    	int kgv(int c, int d, int x);	// kgv berechnen:
    
    	z = kgv(c, d, x);
    
    	void ausgabe(int x, int z);		// Ausgabe der Ergebnisse  
    
    	system("pause");
    
    	return (0);
    }
    
    
    int ggt(int p, int q, int r)
    {
    	int a, b;		// Variablen für Zahalentauschen
    
    	if (q == 0)		// Wenn "q"= 0 ,dann ist der ggt = "p"
    	{
    		return p;
    	}
    
    	else
    	{
    		// Zahlentauschen: (Die Größte Zahl muss "p" sein!)
    
    		while (p < q)	// While-Schleife wird ausgeführt, wenn die erste Zahl "p" kleiner ist als die zweite Zahl "q"
    		{				// Zahlen tauschen von "p" und "q"
    			a = p;		// "a" bekommt den Wert von "p" 
    			b = q;		// "b" bekommt den Wert von "q" 
    
    			q = a;		// Zahlen werden Vertauscht => "p" = "b" und "q" = "a"
    			p = b;		//"p" bekommt den Wert von "b"
    		}
    
    		// ggt berechnen:
    
    		while (q != 0)  // While-Schleife wird ausgeführt, wenn "a" ungleich 0!
    		{
    			r = p % q;  // "%" (Modulo) gibt den Rest einer Division als Rückgabewert. "r" bekommt diesen Rest als Wert übertragen. 
    			p = q;	    //"p" bekommt den Wert von "q"
    			q = r;	    //"q" bekommt den Wert von "r" 
    		}
    	}
    
    	return p;
    }
    
    int kgv(int c, int d, int x)
    {
    	return  c * d / x;
    }
    
    void ausgabe(int x, int z)
    {
    	cout << "Der kgv ist: " << z << endl;
    	cout << "Der Ggt ist " << x << endl;
    }
    


  • Mit

    	int ggt(int p, int q, int r);	// kgv berechnen:
    

    berechnest du keinen KGV, sondern teilst deinem Compiler mit, dass es an anderer Stelle eine Funktion namens ggt mit 3 int-Parametern gibt!

    Analog bei kgv und ausgabe. ggt und kgv rufst du danach noch auf, ausgabe jedoch nicht.

    Du musst die Funktion aufrufen:
    ausgabe(x, z);

    Generell solltest du die Deklarationen

    int ggt(int p, int q, int r);
    int kgv(int c, int d, int x);
    void ausgabe(int x, int z);
    

    nicht mitten im Programm stehen haben. Entweder du lässt sie ganz weg und schiebst die Funktionen vor das main oder du schiebst diese 3 Zeilen komplett vor das main.

    Danach solltest du zumindest mal eine Ausgabe bekommen.

    Dann frag dich aber mal, warum ggt 3 Argumente hat. Berechnest du nicht den ggt von nur 2 Werten?



  • super, es klappt!
    Ja, stimmt hast recht.
    Ich habe jetzt die Variable "r" lokal bei der Funktion ggt.
    "r" brauche ich nur als "zwischenspeicher" für den Restwert vom Modulo.

    Danke euch!