Lineares Gleichungssystem
-
Danke für die Antworten. Mit Klassen kenne ich mich noch nicht so gut aus und Vektoren habe ich noch nicht gelernt. Folgendes habe ich probiert.
Ich hab nun die Funktion fBerechnungTerm und fEingabeVar geschrieben.
Beide Fkt werden in main() aufgerufen.
Bsp
int iaErg[2] = {};
iaErg = fBerechnungTerm(iaVa1, iaVa2, iaErg);oder
int iaVa1[3] = {};
int ilenVa = 3;
iaVa1 = fEingabeVar(iaVa1, ilenVa);Ich bekomme Unmengen von Fehlern. Hier ein paar davon!
Zeile 3: zu viele Argumente für function »int EingabeVar(int*)
Zeile 7: no match für »operator>>
Zeile 31: ungültige Umwandlung von »int*« in »int«Meine Idee dahinter.
1. der User soll die Parameter eingeben. Diese werden in einem array iaVa gespeichert und wieder an main zurück gegeben.2. Diese arrays werden an ander funktionen übergeben um zB eine Lösung in fBerechnungTerm zu erhalten. Das Ergebnis soll wieder an main mittels array übergeben werden.
Bitte um Hilfe!!
//Auszug aus dem Code int fEingabeVar(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 iaVar; } 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){ for(int j=0; y < ilen; ++i){ if( iaVa1[0] * x + iaVa1[1] * y == iaVal1[2] && iaVa2[0] * x + iaVa2[1] * y == iaVal2[2]){ iaErg[0] = x; iaErg[1] = y; } } } return iaErg; }
-
@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 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 :).