bin noob der abunzu mal nen paar fragen beantwortet hätte ^^



  • 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 einbaue

    also 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*z

    also 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*z

    also 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=18

    dann 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





  • weil ich mir hier irgendwie keiner geantwortet hatte und ich das mal wissen wollte. Irgendwo weiter vorne hatte mir mal einer geasagt, ich sollte neue threads auf machen wenn ich fragen hab. Ok und dann hab ich mir geadacht mach ich dochma neuen auf hab dann nur vergessen den hier zu löschen. tuett mir au very sry. werde aber denk ich mir weiter hier meine fragen stellen. Wenn ihr nichts dagegen habt?



  • Nochmal schnell was zu Arrays (von Anfänger für Anfänger 😉 )

    Stell dir eine Variable wie einen Container vor.

    int zahl; //hier passt eine int-Zahl rein
    

    Wenn du jetzt zum Beispiel 1000 Zahlen bräuchtest könntest du es ja so machen:

    int zahl1;    //Beginn: 15. Feb. 2005
    int zahl2;
    int zahl3;
    ...
    int zahl998;
    int zahl999;
    int zahl1000; //Ende: 17. April 2005
    

    DAS ist ziemlich aufwändig (und unübersichtlich) also benutzt man Arrays. Stell sie dir wie ein Regal vor. In jedem Fach passt genau eine int Zahl.

    //das geht dann so
    int zahl[1000]; // in den eckigen Klammern "[]" steht die anzahl der "Fächer" die das regal braucht.
    

    Du hast jetzt also 1000 int Variablen in "einer" Variable. Auf die einzelnen "Fächer" greifst du mit dem Index zu z.B.

    zahl[51]; //wär die zahl 50
    

    in C++ wird übrigens von 0 an gezählt. Das heist das zahl[0] die erste Variable, zahl[1] die 2. und zahl[999] die 1000. Variable ist.

    PS: siehe Tutorials



  • florian1x schrieb:

    standarts

    Ok ok, ich kanns nicht lassen 😉

    EDIT: da war wohl schon jemand schneller



  • @ chris danke. Sowas meine ich mit benutzerfreundlicher erklärung. Hatte jetzt aber so auch schon verstanden finde nur, dass ich arrays in meinem prgramm nicht unbedingt brauche. Da ich meine variante übersichtlicher finde. (ist jedenfalls meine meinung)

    aber mein lehre meinte sowiueso ich sollte nicht gleich mit 4 unbekannten sondern 2 anfangen also mach ich das mal dann hat der mir so auch noch ein paar aufgaben gegeben, an denen man gut üben kann. ^^ ich werde noch spass haben.
    mfg flo


Anmelden zum Antworten