Lineares Gleichungssystem



  • @clementis:
    Von den "grossen Jungs" schreibt keiner "Fx" als Abkürzung für "Funktion" 😉



  • hustbaer schrieb:

    @clementis:
    Von den "grossen Jungs" schreibt keiner "Fx" als Abkürzung für "Funktion" 😉

    Danke, bin schon aufmerksam gemacht worden. Fx wird schon nicht mehr verwendet. 😉



  • Kann mir bitte jemand bei obigen Fehlern behilflich sein, da ich als Anfänger keine Ahnung habe was hier falsch ist.

    Bin dankbar für jeden Hinweis!

    Lg, Clemens



  • zu viele Argumente für function »int EingabeVar(int*)
    
    int fEingabeVar(int* iaVa){    //Einlesen der Variablen
    /*...*/
    }
    
    int iaVa1[3] = {};
    int ilenVa = 3;
    iaVa1 = fEingabeVar(iaVa1, ilenVa); //die Überladung der Fkt existiert nicht
    
    Zeile 7: no match für »operator>>
    

    ohne Code kann ich dir nicht sagen, woran das liegt... dafür aber was anderes:

    int fBerechnungTerm(int iaVa1[], int iaVa2[], int iaErg[]) {
    
        int ixErg = 0;
        int iyErg = 0;
        const int ilen = 100;
    
        for(int i=0; x < ilen; ++i){ //x? -> endlosschleife!
            for(int j=0; y < ilen; ++i){ //y? -> endlosschleife!
    /*...*/
    }
    
    ungültige Umwandlung von »int*« in »int«
    
    int fBerechnungTerm(int iaVa1[], int iaVa2[], int iaErg[]) {
    /*...*/
    return iaErg; //er soll einen integer und nicht ein feld davon zurückgeben...
    }
    

    bb



  • Danke für deine Tipps!

    Hier der gesamte Code. Einige Fehler habe ich bereits ausbessern können.

    Diese bleiben mir noch:

    Danke!

    Zeile 8: no match für »operator>>
    Zeiel 14, 30: ungültige Umwandlung von »int*« in »int«
    Zeile 33: zu wenige Argumente für function »void AusgabeTerm(int*, int*)«
    Zeile 56: zu wenige Argumente für function »void AusgabeErgebnis(int*)«
    Zeile 110: expected primary-expression before »=« token
    Unmängen dieser Anmerkungen:
    Anmerkung: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(void*&) [with _CharT = char, _Traits = std::char_traits<char>]

    #include <iostream>
    using namespace std;
    
    int EingabeVar(int iaVa[]){    //Einlesen der Variablen
    
    	cout << "Bitte geben Sie die Variablen des Terms bekannt.\n Gültig sind ganzzahlige Werte.\n\n";
    	cout << "Geben Sie bitte den x-Koeffizienten ein.\n";
    	cin >> iaVa[0] >> endl;
    	cout << "Geben Sie bitte den y-Koeffizienten ein.\n";
    	cin >> iaVa[1] >> endl;
    	cout << "Geben Sie bitte die Konstante des ersten Terms ein.\n";
    	cin >> iaVa[2]>> endl;
    
    	return iaVa;
    }
    
    int BerechnungTerm(int iaVa1[], int iaVa2[], int iaErg[]) {
    
    	const int ilen = 100;
    
    	for(int x=0; x < ilen; ++x){
    		for(int y=0; y < ilen; ++y){
    			if( iaVa1[0] * x + iaVa1[1] * y == iaVa1[2] && iaVa2[0] * x + iaVa2[1] * y == iaVa2[2]){
    				iaErg[0] = x;
    				iaErg[1] = y;
    			}
    		}
    	}
    
    	return iaErg;
    }
    
    void AusgabeTerm(int* iaVar1, int* iaVar2){
    
    	char cRechOp1 = '+';
    	char cRechOp2 = '+';
    
    	if( iaVar1 < 0 ) cRechOp1 = '-';
    	if( iaVar2 < 0 ) cRechOp2 = '-';
    
    	cout << "Term1:\t" << iaVar1[0] << "x" << cRechOp1 << iaVar1[1] << "y  =   " << iaVar1[2] << endl;
    	cout << "Term2:\t" << iaVar2[0] << "x" << cRechOp2 << iaVar2[1] << "y  =   " << iaVar2[2] << endl;
    	cout << endl;
    
    	return;
    }
    
    void AusgabeParameter(int* iaVar1, int* iaVar2){
    	cout << "Parameter Term1:\t" << iaVar1[0] << "x\t" << iaVar1[1] << "y" << endl;
    	cout << "Parameter Term2:\t" << iaVar2[0] << "x\t" << iaVar2[1] << "y" << endl;
    	cout << endl;
    
    }
    
    void AusgabeErgebnis(int iaErg[]) { cout << "Loesung: x = " << iaErg[0] << "   y = " << iaErg[1] << "\n\n"; }
    
    int main() {
    
    	const int ilenVa = 3;  
    	const int ilenErg = 2; //Anzahl der Variablen im Ergebnis
    	int iaVa1[ilenVa] = {};
    	int iaVa2[ilenVa] = {};
    	int iaErg[ilenErg] = {};
    	int iMenEing = -1;
    
    	while(iMenEing != 0) {
    		cout << endl;
    		cout << "*** Menue ***" << endl;
    		cout << "\tEingabe der Parameter......................<1>" << endl;
    		cout << "\tAnzeigen der gewählten Parameter...........<2>" << endl;
    		cout << "\tAnzeigen der Terme.........................<3>" << endl;
    		cout << "\tLösen der Gleichung........................<4>" << endl;
    		cout << "\tPrgramm beenden............................<0>" << endl;
    
    		switch(iMenEing){
    			case 0: cout << endl;
    					cout << "Prgramm beenden\n";
    					break;
    			case 1: cout << endl;
    					cout << "Eingabe der Parameter\n\n";
    					cout << "*** Term 1 ***\n";
    					iaVa1 = EingabeVar(iaVa1);
    					cout << "*** Term 2 ***n";
    					iaVa2 = EingabeVar(iaVa2);
    					break;
    			case 2: cout << endl;
    					cout << "Anzeigen der gewählten Parameter\n\n";
    					AusgabeParameter(iaVa1, iaVa2);					
    					break;
    			case 3: cout << endl;
    					cout << "Anzeigen der Terme\n\n";
    					AusgabeTerm(iaVa1, iaVa2);					
    					break;
    			case 4: cout << endl;
    					cout << "Lösen der Gleichung\n\n";
    					iaErg = BerechnungTerm(iaVa1, iaVa2, iaErg);
    					AusgabeTerm(iaVa1, iaVa2);
    					AusgabeErgebnis(iaErg);
    					break;
    			default: cout << endl; 
    					 cout << "Ungültige Eingabe\n\n";
    					 break;
    		}
    
    		//Prgramm anhalten und auf Zeicheneingabe warten
    		cout.flush();
    		getchar();
    	}
    
    	return = 0;	
    }
    


  • Hier ein paar mögliche Änderungen, damit du wenigstens mal deine ganzen Fehlermeldungen wegbekommst:

    void EingabeVar(int* iaVa){		// Rückgabetyp geändert, da du sowieso einen Zeiger übergibst 
    
        cout << "Bitte geben Sie die Variablen des Terms bekannt.\n Gueltig sind ganzzahlige Werte.\n\n"; 
        cout << "Geben Sie bitte den x-Koeffizienten ein.\n"; 
        cin >> iaVa[0];				// endl entfernt !!
        cout << "Geben Sie bitte den y-Koeffizienten ein.\n"; 
        cin >> iaVa[1];				// endl entfernt !!
        cout << "Geben Sie bitte die Konstante des ersten Terms ein.\n"; 
        cin >> iaVa[2];				// endl entfernt !!
    }                                  // return entfernt wegen Rückgabetyp void
    
    void BerechnungTerm(int* iaVa1, int* iaVa2, int* iaErg) { 		// Rückgabetyp geändert, da du sowieso Zeiger übergibst 
    
        const int ilen = 100; 
    
        for(int x=0; x < ilen; ++x){ 
            for(int y=0; y < ilen; ++y){ 
                if( iaVa1[0] * x + iaVa1[1] * y == iaVa1[2] && iaVa2[0] * x + iaVa2[1] * y == iaVa2[2]){ 
                    iaErg[0] = x; 
                    iaErg[1] = y; 
                } 
            } 
        } 
    }								// return entfernt wegen Rückgabetyp void
    
    while(iMenEing != 0) { 
            cout << endl; 
            cout << "*** Menue ***" << endl; 
            cout << "\tEingabe der Parameter......................<1>" << endl; 
            cout << "\tAnzeigen der gewaehlten Parameter..........<2>" << endl; 
            cout << "\tAnzeigen der Terme.........................<3>" << endl; 
            cout << "\tLoesen der Gleichung.......................<4>" << endl; 
            cout << "\tProgramm beenden...........................<0>" << endl; 
    		cin >> iMenEing;	// Benutzereingabe hinzugefügt, da sonst Endlosschleife
    
    case 1: cout << endl; 
                        cout << "Eingabe der Parameter\n\n"; 
                        cout << "*** Term 1 ***\n"; 
                        EingabeVar(iaVa1); // Zuweisung entfernt, da Rückgabetyp nun void
                        cout << "*** Term 2 ***n"; 
                        EingabeVar(iaVa2); // Zuweisung entfernt, da Rückgabetyp nun void
                        break;
    
    case 4: cout << endl; 
                        cout << "Loesen der Gleichung\n\n"; 
                        BerechnungTerm(iaVa1, iaVa2, iaErg); // Zuweisung entfernt, da Rückgabetyp nun void
                        AusgabeTerm(iaVa1, iaVa2); 
                        AusgabeErgebnis(iaErg); 
                        break;
    
    return 0;											// '=' entfernt
    }
    


  • Danke, danke, danke für deine Hilfe Mizar!!!
    Das Prgramm läuft!
    lg, clementis



  • Hallo,

    warum wird der Fehler
    »else« ohne vorheriges »if«
    in Zeile 11 ausgegeben?

    Da ist doch ein if??

    Danke für eure Tipps!

    lg, clementis

    void BerechnungTerm(int iaVa1[], int iaVa2[], int iaErg[]) {
    
    	const int ilen = 100;
    	int iFehler = 1;
    
    	for(int x=1; x <= ilen; ++x){
    		for(int y=1; y <= ilen; ++y){
    			if( iaVa1[0] * x + iaVa1[1] * y == iaVa1[2] && iaVa2[0] * x + iaVa2[1] * y == iaVa2[2])
    				iaErg[0] = x;
    				iaErg[1] = y;
    			else
    				iFehler = 0;
    		}
    	}
    
    	if( iFehler == 0 )  {cout << "Fehler im Wertebereich 1..100\n";}
    }
    


  • clementis schrieb:

    if( iaVa1[0] * x + iaVa1[1] * y == iaVa1[2] && iaVa2[0] * x + iaVa2[1] * y == iaVa2[2]) { // geschwungene Klammer
    				iaErg[0] = x;
    				iaErg[1] = y;
                } // geschwungene Klammer
    			else
    				iFehler = 0;
    


  • weil die klammern fehlen
    wenn du ein if ohne { - Klammern verwendest dann darf nur eine Zeile Code dahinter stehen, die zum If dazugehören soll

    void BerechnungTerm(int iaVa1[], int iaVa2[], int iaErg[]) {
    
        const int ilen = 100;
        int iFehler = 1;
    
        for(int x=1; x <= ilen; ++x){
            for(int y=1; y <= ilen; ++y){
                if( iaVa1[0] * x + iaVa1[1] * y == iaVa1[2] && iaVa2[0] * x + iaVa2[1] * y == iaVa2[2]) {
                    iaErg[0] = x;
                    iaErg[1] = y;
                } else { // diese erneute öffnende Klammer könnte man weglassen, da ja nur eine Zeile code folgt
                    iFehler = 0;
                }
            }
        }
    
        if( iFehler == 0 )  {cout << "Fehler im Wertebereich 1..100\n";}
    }
    

    [edit] uups, etwas zu langsam gewesen 😃 [/edit]



  • Danke für die rasche Antwort!!
    Ich muss noch super viel lernen!
    Danke!
    Clementis



  • blitzmaster schrieb:

    [edit] uups, etwas zu langsam gewesen 😃 [/edit]

    Dafür war deine Antwort ausführlicher :).


Anmelden zum Antworten