bin noob der abunzu mal nen paar fragen beantwortet hätte ^^
-
Kennst du schon Schleifen und Arrays? Wenn nicht, dann such mal danach. Damit kriegst du einen deutlich kürzeren Code.
-
schleifen kenn ich nur for while und do while schleifen und arrays hab ich auch schon mehrmals gelesen nur nie ganz gecheckt auch net wozu die überhaupt da sind ^^ naja und ich dreh glei am rad das systhem was ich da habe is zwar gut aber auch irgendwei un übersichtlich ich hab immer fehler drin und brauch immer ne viertelstunde um einen zu finden. (aber irgendwie macht es ja spass) nur soviele zahlen verursachen kopfschmerzen ^^
aber wenigstens hab ich meinen fehler selber gefunden und wenn das so bleibt kann ich sagen ich habs alleine gemacht
-
Es gibt keine anderen Schleifen als for, while und do while.
Noch mal mein Tipp: Mit Schleifen und Arrays sparst du Unmengen an Nerven und Zeit.
-
k danke für den tip aber ich weiß net wie ich die schleife einbauen sollte und arrays keine ahnug wei das ist hab jetzt auch ein system hinter den einzelnen gleichungen entdeckt jetzt schreib ich das prog soweit wie ich bin net in 3 stunden sondern 20 nin ^^
-
florian1x schrieb:
k danke für den tip aber ich weiß net wie ich die schleife einbauen sollte und arrays keine ahnug wei das ist hab jetzt auch ein system hinter den einzelnen gleichungen entdeckt jetzt schreib ich das prog soweit wie ich bin net in 3 stunden sondern 20 nin ^^
Schleifen und Arrays könntest du z.B. am Anfang einbauen. (Zum einlesen der Werte)
Statt:char a; double x11,x12,x13,x14,rs1; cout<<"geben sie die erste Reihe ein:"<<endl; cout<<"Bsp. a1 a2 a3 a4 rs"<<endl<<flush; cin>>x11>>x12>>x13>>x14>>rs1; double x21,x22,x23,x24,rs2; cout<<"geben sie die zweite Reihe ein:"<<endl; cin>>x21>>x22>>x23>>x24>>rs2; double x31,x32,x33,x34,rs3; cout<<"geben sie die dritte Reihe ein:"<<endl; cin>>x31>>x32>>x33>>x34>>rs3; double x41,x42,x43,x44,rs4; cout<<"geben sie die vierte Reihe ein:"<<endl; cin>>x41>>x42>>x43>>x44>>rs4; double s1,s2,s3,s4; s1=x11+x12+x13+x14+rs1; s2=x21+x22+x23+x24+rs2; s3=x31+x32+x33+x34+rs3; s4=x41+x42+x43+x44+rs4;
Z.B.: (geht wahrscheinlich noch viel besser und kürzer)
... double x[4][5]; for(unsigned int i = 0; i < 4; ++i) { cout << "\Bitte gib die " << i + 1 << ". Reihe ein: " << endl; cout << "Bsp. a1 a2 a3 a4 rs" << endl << flush; for(unsigned int j = 0; j < 5; ++j) cin >> x[i][j]; } double s[4]; for(unsigned int i = 0; i < 4; ++i) s[i] = x[5 * i] + x[5 * i + 1] + x[5 * i + 2] + x[5 * i + 3] + x[5 * i + 4]; ...
Und kriegst du Lust auf Arrays und Schleifen?
Siehe auch C++-FAQ! (Thread: Arrays und Pointer)
Caipi
-
also ich hab mal nen bisschen weiter geschreiben hab aber ein problem
erstmal der quelltext//--------Test Programm--------------------------------------------------------- #include <iostream> #include <cmath> using namespace std; //------------------------------------------------------------------------------ int main() { char a; double x11,x12,x13,x14,rs1; cout<<"geben sie die erste Reihe ein:"<<endl; cout<<"Bsp. a1 a2 a3 a4 rs"<<endl; cin>>x11>>x12>>x13>>x14>>rs1; double x21,x22,x23,x24,rs2; cout<<"geben sie die zweite Reihe ein:"<<endl; cin>>x21>>x22>>x23>>x24>>rs2; double x31,x32,x33,x34,rs3; cout<<"geben sie die dritte Reihe ein:"<<endl; cin>>x31>>x32>>x33>>x34>>rs3; double x41,x42,x43,x44,rs4; cout<<"geben sie die vierte Reihe ein:"<<endl; cin>>x41>>x42>>x43>>x44>>rs4; double s1,s2,s3,s4; s1=x11+x12+x13+x14+rs1; s2=x21+x22+x23+x24+rs2; s3=x31+x32+x33+x34+rs3; s4=x41+x42+x43+x44+rs4; cout<<endl<<"Lösung:"<<endl<<endl; cout << "a1 \ta2 \ta3 \ta4 \trs \tSumme" << endl << endl; cout << x11<< "\t" << x12<< "\t" << x13<< "\t" << x14<< "\t" << rs1<< "\t" << s1<< "\tX1" <<endl; cout << x21<< "\t" << x22<< "\t" << x23<< "\t" << x24<< "\t" << rs2<< "\t" << s2<< "\tX2" <<endl; cout << x31<< "\t" << x32<< "\t" << x33<< "\t" << x34<< "\t" << rs3<< "\t" << s3<< "\tX3" <<endl; cout << x41<< "\t" << x42<< "\t" << x43<< "\t" << x44<< "\t" << rs4<< "\t" << s4<< "\tX4" <<endl<<endl; //------------berechnen des zweiten blocks----------------------------------------------------------------------- { if(((x11>0)&&(x21>0))||((x11<0)&&(x21<0))) { x22=x21*x12-x11*x22; } else { x22=x21*x12+x11*x22; } if(((x11>0)&&(x21>0))||((x11<0)&&(x21<0))) { x23=x21*x13-x11*x23;; } else { x22=x21*x13+x11*x23; } if(((x11>0)&&(x21>0))||((x11<0)&&(x21<0))) { x24=x21*x14-x11*x24; } else { x24=x21*x14+x11*x24; } if(((x11>0)&&(x21>0))||((x11<0)&&(x21<0))) { rs2=x21*rs1-x11*rs2; } else { rs2=x21*rs1+x11*rs2; } } //---------------zweite reihe -------------------------------------------------------------- { if(((x11>0)&&(x31>0))||((x11<0)&&(x31<0))) { x32=x31*x12-x11*x32; } else { x32=x31*x12+x11*x32; } if(((x11>0)&&(x31>0))||((x11<0)&&(x31<0))) { x33=x31*x13-x11*x33; } else { x33=x31*x13+x11*x33; } if(((x11>0)&&(x31>0))||((x11<0)&&(x31<0))) { x34=x31*x14-x11*x34; } else { x32=x31*x14+x11*x34; } if(((x11>0)&&(x31>0))||((x11<0)&&(x31<0))) { rs3=x31*rs1-x11*rs3; } else { rs3=x31*rs1+x11*rs3; } } //---drite reihe------------------------------------------------------------------------ { if(((x11>0)&&(x31>0))||((x11<0)&&(x31<0))) { x42=x41*x12-x11*x42; } else { x42=x41*x12+x11*x42; } if(((x11>0)&&(x31>0))||((x11<0)&&(x31<0))) { x43=x41*x13-x11*x43; } else { x43=x41*x13+x11*x43; } if(((x11>0)&&(x31>0))||((x11<0)&&(x31<0))) { x44=x41*x14-x11*x44; } else { x44=x41*x14+x11*x44; } if(((x11>0)&&(x31>0))||((x11<0)&&(x31<0))) { rs4=x41*rs1-x11*rs4; } else { rs4=x41*rs1+x11*rs4; } } s1=x11+x12+x13+x14+rs1; s2=x22+x23+x24+rs2; s3=x32+x33+x34+rs3; s4=x42+x43+x44+rs4; cout << x11<< "\t" << x12<< "\t" << x13<< "\t" << x14<< "\t" << rs1<< "\t" << s1<< "\tX1" <<endl; cout << "0"<< "\t" << x22<< "\t" << x23<< "\t" << x24<< "\t" << rs2<< "\t" << s2<< "\tX2'"<<endl; cout << "0"<< "\t" << x32<< "\t" << x33<< "\t" << x34<< "\t" << rs3<< "\t" << s3<< "\tX3'" <<endl; cout << "0"<< "\t" << x42<< "\t" << x43<< "\t" << x44<< "\t" << rs4<< "\t" << s4<< "\tX4'" <<endl<<endl; //--- neuer block---------------------------------------------------------------- { if(((x22>0)&&(x32>0))||((x22<0)&&(x32<0))) { x34=x32*x24-x22*x34; } else { x34=x32*x24+x22*x34; } if(((x22>0)&&(x32>0))||((x22<0)&&(x32<0))) { x33=x32*x23-x22*x33; } else { x33=x32*x23+x22*x33; } if(((x22>0)&&(x32>0))||((x22<0)&&(x32<0))) { rs3=rs1*x23-x22*rs3; } else { x33=x32*x23+x22*x33; } } s1=x11+x12+x13+x14+rs1; s2=x22+x23+x24+rs2; s3=x33+x34+rs3; s4=x43+x44+rs4; cout << x11<< "\t" << x12<< "\t" << x13<< "\t" << x14<< "\t" << rs1<< "\t" << s1<< "\tX1" <<endl; cout << "-"<< "\t" << x22<< "\t" << x23<< "\t" << x24<< "\t" << rs2<< "\t" << s2<< "\tX2'" <<endl; cout << "-"<< "\t" << "0"<< "\t" << x33<< "\t" << x34<< "\t" << rs3<< "\t" << s3<< "\tX3''" <<endl; cout << "-"<< "\t" << "0"<< "\t" << x43<< "\t" << x44<< "\t" << rs4<< "\t" << s4<< "\tX4''" <<endl<<endl; //---neuer block----------------------------------------------------------------- { if(((x33>0)&&(x43>0))||((x33<0)&&(x43<0))) { x44=x43*x34-x33*x44; } else { x44=x43*x34+x33*x44; } if(((x33>0)&&(x43>0))||((x33<0)&&(x43<0))) { rs4=x43*rs3-x33*rs4; } else { rs4=x43*rs3+x33*rs4; } } s1=x11+x12+x13+x14+rs1; s2=x22+x23+x24+rs2; s3=x33+x34+rs3; s4=x44+rs4; cout << x11<< "\t" << x12<< "\t" << x13<< "\t" << x14<< "\t" << rs1<< "\t" << s1<< "\tX1" <<endl; cout << "-"<< "\t" << x22<< "\t" << x23<< "\t" << x24<< "\t" << rs2<< "\t" << s2<< "\tX2'" <<endl; cout << "-"<< "\t" << "-"<< "\t" << "0"<< "\t" << x34<< "\t" << rs3<< "\t" << s3<< "\tX3''" <<endl; cout << "-"<< "\t" << "-"<< "\t" << "0"<< "\t" << x44<< "\t" << rs4<< "\t" << s4<< "\tX4'''" <<endl<<endl; double X1,X2,X3,X4; X4=rs4/x44; X3=rs3/x33+X4; system("Pause"); return 0 ; }
so ich hab grad leider keine zeit das zu kürzen naja das prob is
da kommen falsche ergebnisse raus ^^. ich hab auch schon eine idee woran das legt. gerechnet wird ja
x44=x43*x34-x33*x44
wenn x43=2 und x33=3 also bede positiv sind kein prob aber wenn x33 negativ wäre käm falsches ergebnis raus da das andere vorzeichen ergibt wenn du die zwischen ergebnisse betrachtest welche man dann in der dividion benutzt also noch ein bsp mit x33*x44=-3*4 ergibt ja -12 naja aber rauskommen darf nur 12 damit man richtig eiterrechen kann und ich will nu wissen wie ich das richtig einbauealso dass der da net ins minus gerät
-
ich versuche das noch ein bisschen zu erläutern also die aufgabe des programms ist das per additionsverfahren sozusagen in jedem block jeweils eine variable verschwindet und man übernimmt jeden block eine reihe mehr bis man dann nur noch eine unbekannte und eine gleichung hat. Verstanden? naja
mit dem if hab ich gemacht, dass der wie beim additionsverfahren bei vorzeichen(+ und -) addiert und halt umgekerht
naja die einer include anweisung oben kann man weglassen ka warum die da steht hab ie bei mir scho weg und das flush kann au weg also falls ihr noch was wisswen wollt um mir zu helfen fragt
-
florian1x schrieb:
ich versuche das noch ein bisschen zu erläutern also die aufgabe des programms ist das per additionsverfahren sozusagen in jedem block jeweils eine variable verschwindet und man übernimmt jeden block eine reihe mehr bis man dann nur noch eine unbekannte und eine gleichung hat. Verstanden?
Aua! Zum letzten Mal: Schau dir Arrays und Schleifen an! Was machst du wenn du ein 5x5 LGS lösen willst? Schreibst du dann den ganzen Code neu (und doppelt so lang)? Gut, 5x5 kann man vielleicht noch runtertippen wenn man viel Zeit hat, aber mach das mal für ein 100x100 LGS. Da sitzt du ein Jahr dran. Programmieren lernen heißt auch erkennen welche Operationen sich wiederholen... Mit Schleifen und Arrays wäre der Code für ein beliebig großes LGS jedenfalls schon wesentlich kürzer als das, was du da fabriziert hast.
Nur mal als Anregung ein Code für eine Reduktion auf obere Dreiecksform (ungetestet):
for(int j = 0; j != (N - 1) && a[j][j] != 0; ++j) { for(int i = j + 1; i != N; ++i) { a[i][j] /= a[j][j]; for(int k = j + 1; k != N; ++k) a[i][k] -= a[i][j] * a[j][k]; } }
-
ja das ist möglich aber ich check das irgendwie net mit den arrays und verscuh mir das grad anzulernen und bei 5 müsste ich da net alles neu oder doppelt schreiben sondern nur da und da was ergänzen außerdem is der code ja so wie er da steht fehlerhaft und weil ich das noch net konnt hab ich das sogemacht
kann ich mit arrays denn au x11 - x14 machenm damit das glei bleibt iund ka ich muss erstmal wissen wie ich in der gleichung das vorzeichen wegkriege also weil sich das ergebnis sonst total verfälscht
edit: außerdem net böse sein aber ich check das alles net wie gesagt ich versuch es erst seit einer woche zu lernen und da ist bis jetzt noch net viel rausgekommen da ich auch noch andere sachen zu tun hab
-
Tu dir den Gefallen und arbeite ein Tutorial durch bevor du weiter machst.
-
mach ich doch schon naja aber ich check das alles net
-
lass ihn doch umständlich weitercoden
irgendwann wird er faul und sucht selber nach techniken dies leichter machen...
so wars jedenfalls bei mir
-
ich bin jetzt scho faul ^^ naja hab für den code da 5 1/2 stunden gebraucht aber ich weiß halt net wie ich arrays nutzen kann aber nu eine andere frage
wie bekomme ich die vorzeichen weg?
Gleichung
x=a*y-b*zalso a b y und z werden eingegeben tja nun darf a und b aber net negativ sein, da ich die variable jedoch noch für andere berechnungen brauch, kann ich das irgendwie schlecht einstellen das das positiv is und meine frage is nu wie kriege ich es hin das in der rechnung bei a und b das vorzeichen nicht beachtet wird bei y und z jedoch schon
-
florian1x schrieb:
ich bin jetzt scho faul ^^ naja hab für den code da 5 1/2 stunden gebraucht aber ich weiß halt net wie ich arrays nutzen kann aber nu eine andere frage
wie bekomme ich die vorzeichen weg?
Gleichung
x=a*y-b*zalso a b y und z werden eingegeben tja nun darf a und b aber net negativ sein, da ich die variable jedoch noch für andere berechnungen brauch, kann ich das irgendwie schlecht einstellen das das positiv is und meine frage is nu wie kriege ich es hin das in der rechnung bei a und b das vorzeichen nicht beachtet wird bei y und z jedoch schon
http://www.cplusplus.com/ref/cmath/abs.html
Schau dir so lange Arrays an, bis du sie verstehst. Wenn diese Zeit gegen unendlich geht => lass das programmieren.
-
mhh eigentlich check ich sowas immer sehr schnell ich verstehe es ja so auch scho naja ^^ danke für link versteh es nur net ganz
als beispiel und ohne angeben zu wollen
ich hatte das ja wegen der schule angefangen unser lehrer scheibt da was an und whärend der das angeschreieben hat hab ich scho losgeschreiben weil ich das gecheckt hab. ^^
naja und dann als ich fertig war hab ich etwas im buch geblättert und schonmal weiter gemacht naja dann war ich als erster fertig wo die andern grad bei include waren (nagut meine klasse is au grottig kommen fast alle von so schulen bei denen die nix gelernt habn)und ich kann es net aufgeben machen das in er schule auch wenn wir grad erst bei cout sind
-
Wenn du im Programmierunterricht Zeit übrig hast, dann nutz die doch dafür, ein wenig Deutsch zu "checken". Ganz im Ernst, ich glaube, das brauchst du dringender und das hilft dir im Leben weiter. Deine Rechtschreibung und Zeichensetzung sind unter aller Sau. Smilies sind IMHO kein Ersatz für Interpunktion. Sieh das bitte als gutgemeinten Tipp, nicht als Angriff.
Das Vorzeichen wirst du übrigens los, indem du mit -1 multiplizierst, falls der Wert negativ ist.
-
Wegen deinem Problem das a und b nicht negativ sein dürfen.
Mach doch einfach eine Abfrage ob sie negativ sind wenn ja, sagst du
mit cout z.B. Ungültige Eingabe, bitte neu eingeben:[cpp]
int Eingabe;
while(Eingabe < 0) // solange Eingabe kleiner als null, wiederhole
{
cin >> Eingabe;
if(Eingabe< 0) // prüft auch ob Eingabe negativ ist und gibt Meldung aus
{
cout << "Ungültige Eingabe, bitte neu eingeben: " << endl;
}
}
// weiterer Programmverlauf
-
ja aber das dürfte ich dann für 50 gleichungen machen wobei wir wieder beim cod#en wären
trotzdem danke da kam ich au shco drauf
-
ok das habe ich jetzt auch selebr hinbekommen und wieder mit viel schreiben ^^ hab einfach bevor ich eine neue reihe berechnen musst immer
if(x11<0)
{
a=0-x11;
}
else
{
a=0+x11;
}
if(x21<0)
{
b=0-x21;
}
else
{
b=0+x21;
}
reingebaut. naja jetzt rechbnet der schonmal richtig :)(bis auf die tatsache , dass falsch ergebniss rauskommen.hab aber ein anderes problem entdeckt ich rechne immer mit dem additionsevrfahren. doch dazu muss ich die faktoren erweitern ich bekomme es nur nicht eingestellt das der mit den kleinst möglichen zahlen erweiter.
also wenn ich
2x+2y=12
4x+2y=18dann rechnet mein programm um y zu vermindern mit 4 und 2 ich will abwer dass der mit 2 und 4 rechnet
und meine frage ist wie kriege ich von zwei zahlen den kleinsten gemeinsamen teiler raus??? denn dann könnte ich die zahlen durch den teiler teilen und bekomme die benötigten zahlen raus. naja ich hoffe ihr versreht wwas ich sagen will und könnt mir helfen
-