Lineares Gleichungssystem
-
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 nichtZeile 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 voidwhile(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 Endlosschleifecase 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 sollvoid 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 :).