Inhalt einer Matrix über Tastatur einlesen



  • Hi Leute,
    habe folgendes Problem.
    Würde gerne eine Matrix programmieren, deren Inhalt ich per Tastatur einlese.
    Hat mir jemand ne Idee (evt. Quellcode) wie ich das machen könnte?
    Danke



  • DanielH schrieb:

    Hat mir jemand ne Idee (evt. Quellcode) wie ich das machen könnte?

    Die Matrix oder das einlesen (das dauert aber ewig ne Matrix "von Hand" zu befüllen)??



  • Ich würde es so machen, daß man die Matrizen im Maple- oder Matlab-Format eingibt, also z. B. <<1 | 1>, <2 | -1>> oder [ 0 4 0 0 0 7 0 0 6; 0 0 8 6 2 4 9 0 0 ], dann könntest du das mit boost::tokenizer und boost::lexical_cast in deine Matrix schreiben und man müßte nicht mühsam jedes Element einzeln einlesen ...



  • Also,Leute,passt auf.
    Sagen wir ich habe eine einfache Matrix mit (4x2) und möchte diese 8 Elemenete der Matrix über die Tastatur eingeben können (z.B:{0,1}{2,3}{4,5}{6,7}).Wie mache ich das dann am einfachsten?Habe nicht sehr viel Erfahrung mit C++,aber wäre dies möglich mit einer for-Schleife und dem Befehl cin>> ?
    Wäre dankbar über jeden Hinweis.



  • im Notfall nimmst du dafür eine doppelte Schleife:

    for(int x=0;x<4;++x)
      for(int y=0;y<2;++y)
        cin>>Matrix[x][y];
    


  • Ich würde fubars Lösung favorisieren, also das eingeben und auswerten:
    ( 1 2; 3 4; 5 6; 7 8 )



  • Ok.
    Sagen wir mal ich bringe es fertig die Matrix einzulesen.
    Gibt es dann noch eine Möglichkeit, und wenn ja,welche,damit ich eine zweite Matrix einlese und diese irgendwie mit der ersten multipliziere?



  • Einlesen kannst du die genauso wie die erste (am besten packst du deinen Code in eine Funktion "Matrix::read();" oder überlädst "istream& operator>>(istream& sin,Matrix& tgt);" dafür, dann kannst du ihn für beliebige Matrizen anwenden), die nötigen Rechnungen mußt du dir selber schreiben (entweder als Funktion oder als überladene Operatoren).



  • Sorry,bitte nicht so viel Fachbegriffe!!!
    Programmiere jetzt gerade mal seit 6 Wochen.Wäre euch also dankbar wenn ihr mir das mal "verständlich" erklären könntet!
    Danke...



  • Da du mehrere Matrizen einlesen willst, kannst du den Namen nicht fest verdrahten - ergo Funktion:

    class Matrix
    {
    public:
      read()
      {
        //hier dein Code, um this (Pointer auf Matrix) mit Daten zu füllen
      }
    };
    
    Matrix mult(const Matrix& l,const Matrix& r)
    {
      //Mutliplikation zweier Matrizen
    }
    
    //... Anwendung:
    Matrix m1,m2,m3;
    m1.read();//einlesen von Konsole
    m2.read();//-"-
    m3=mult(m1,m2);//Multiplikation
    

    Um das ganze etwas übersichtlicher zu gestalten, gibt es die Möglichkeit, C-Operatoren zu überladen:

    Matrix operator*(const Matrix& l,const Matrix&r)
    { return mult(l,r); }
    ->
    m3=m1*m2;
    
    istream& operator>>(istream in,Matrix& data)
    {
      //einlesen aus in
      return in;
    }
    ->
    cin>>m1>>m2;//Einlesen
    


  • Na ja, also du willst bestimmt sowas schreiben:

    Matrix m1, m2, m3;
    
    //Hier matrizen füllen
    
    m1 = m2 * m3;
    

    Dazu musst du den * Operator für die Klasse Matrix überladen. Das ist allerdings nicht gerade ein Einstiegsthema in C++.

    EDIT: Too slow...



  • Na,ok.
    Danke erst mal.Dann werde ich mich mal versuchen.Meld mich dann morgen noch mal falls ich dennoch nicht weiterkomme.CU....


Anmelden zum Antworten