<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[cin überladen für die eingabe einer kompletten matrix]]></title><description><![CDATA[<p>wir sitzten zz an einem Programmierenprojekt bei dem wir mit operatot überladung arbeiten sollen...<br />
wir sollen den cin operator so überladen das die eingabe einer kompletten matrix möglich ist<br />
den operator haben wir schon überladen,nun stehen wir aber vor dem problem der eingabe der daten durch den nutzer</p>
<p>hier mal unser quelltext<br />
header datei</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;

using namespace std;

struct newline{};
class P_matrix {

private:
	vector&lt;vector&lt;double&gt; &gt; mv;
	vector&lt;double&gt; l_vektor;
	int index;
	int Determinante;

public:
	P_matrix(void);
	P_matrix(int n, int m);
    //~matrix(void);
	int set_determinante();
    void Zeilenumformung();
    void Rueckaufloesung();
    P_matrix&amp; operator &gt;&gt; (const int WERT);
	P_matrix&amp; operator &gt;&gt; (const struct newline N);
	P_matrix&amp; operator += (const P_matrix &amp;MATRIX);
	P_matrix&amp; operator *= (const P_matrix &amp;MATRIX);
	friend ostream &amp; operator &lt;&lt; (ostream &amp; os, const P_matrix &amp;m);
	friend P_matrix operator * (const P_matrix &amp;MATRIX_A, const P_matrix &amp;MATRIX_B);
};

P_matrix operator + (const P_matrix &amp;MATRIX_A, const P_matrix &amp;MATRIX_B);
</code></pre>
<p>cpp datei</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &quot;Matrix.h&quot;

using namespace std;
//// Standard-Konstruktor der Klasse P_matrix //////////////////////////////////

P_matrix::P_matrix(void)
{
    mv.push_back(vector&lt;double&gt;());
   index=0;
}

////Überladener Konstruktor um die Größe der Matrix am Anfang zu definieren ////
/*
P_matrix::P_matrix(int n, int m)
{
   for (int index=0; index&lt;n; index++){
        mv.push_back(vector&lt;int&gt;());
        cout&lt;&lt;&quot; Zeile &quot;&lt;&lt; i+1 &lt;&lt; &quot;: &quot;; 
        for (int j=0; j&lt;m; j++)
           cinmv[][]

}
*/
//// Determinantenberechnung ///////////////////////////////////////////////////
/*
int P_matrix::set_determinante(){
 if ((mv.size()==1)&amp;&amp; (mv[0].size()==1))
    Determinante = mv[0][0];
    return mv[0][0];
}
*/
//Addition zweier Matrizen mit dem Operator '+=' ///////////////////////////////

P_matrix&amp; P_matrix::operator += (const P_matrix &amp;MATRIX)
{        
         int i,j;                                   //Index-Variablen um durch die Matrix zu laufen

         for (i=0; i&lt;MATRIX.mv.size();i++)              //Zeilenvorschub
          {   
                for (j=0; j&lt;MATRIX.mv[i].size();j++)    //Spaltenvorschub
                mv[i][j]+=MATRIX.mv[i][j];
          }
          return *this;
}

////Global Überladen zur Addition zweier Matrizen über den Operator '+' ////////

P_matrix operator + (const P_matrix &amp;MATRIX_A, const P_matrix &amp;MATRIX_B) 
{
          P_matrix m_tmp = MATRIX_A;
          return m_tmp += MATRIX_B;

}

////Einlesen der einzelnen Werte in die Matrix über den Operator '&gt;&gt;' //////////

P_matrix&amp; P_matrix::operator &gt;&gt; (const int WERT)
{  
	mv[index].push_back(WERT);                     //neuer Wert wird am Zeilenvektor hinten angehängt
    return *this;
}

//// Zeilenvorschub erzeugen innerhalb der Matrix über den Operator '&gt;&gt;' ///////

P_matrix&amp; P_matrix::operator &gt;&gt; (const struct newline N)  //Es wird ein Wert vom leeren struct newline erwartet
{
	mv.push_back(vector&lt;double&gt;());                   //erzeugt einen neuen Zeilenvektor in der Matrix
		index++;                                   //Index-Variable zum schreiben in die neue Zeile wird inkrementiert
		return *this;
}

//// Ausgabe der Matrix über den Operator &lt;&lt; ///////////////////////////////////

ostream &amp; operator&lt;&lt;(ostream &amp; os, const P_matrix &amp;m)
{
        int i, j;                                 //Index-Variablen um durch die Matrix zu laufen

        for (i=0; i&lt;m.mv.size();i++)              //Zeilenvorschub
          {   
                for (j=0; j&lt;m.mv[i].size();j++)   //Spaltenvorschub
            {
                os&lt;&lt;m.mv[i][j]&lt;&lt;&quot;\t&quot;;              //schreiben in die ostream Variable
            }
            os&lt;&lt;endl;                             //Zeilenvorschub der Ausgabe
          }	
          return os;
}

P_matrix operator * (const P_matrix &amp;MATRIX_A, const P_matrix &amp;MATRIX_B)
{        
         int i,j,k;
         double hilf=0;                                       //Index-Variablen um durch die Matrix zu laufen
 P_matrix m_tmp;
         newline nz;      

for (k=0; k&lt;MATRIX_A.mv.size();k++)   
{
         for (i=0; i&lt;MATRIX_B.mv.size();i++)              //Zeilenvorschub
          {   

                for (j=0; j&lt;MATRIX_B.mv[i].size();j++)    //Spaltenvorschub
                {

                  hilf+=MATRIX_A.mv[k][j]*MATRIX_B.mv[j][i];

                }
                m_tmp &gt;&gt; hilf;
                hilf=0;
          }
          if ((k+1)&lt;MATRIX_A.mv.size()) m_tmp &gt;&gt; nz;
}

          return m_tmp;
}
///// Gauss Zeilenumformung ////////////////////////////////////////////////////

void P_matrix::Zeilenumformung()
{
     int k=0;
     int n = mv.size();
     double c;              //Faktor durch den geteilt wird. 
     int i;

     for (k=0; k&lt;n-1; k++){   //c_ik= a_ik / a_kk // k: 1...n-1; Elinationsstufe

      for (i=1; (i+k)&lt;n; i++)    //i: 1...n-1; Zeile
      {   

          c=mv[i+k][k]/mv[k][k];
          for (int j=0; j&lt;mv[i].size(); j++)   //j: 1...n(spalten); Spalte
          {
              mv[i+k][j]=mv[i+k][j]-(mv[k][j]*c);  //0 erzeugen durch Subtraktion der aktuellen Zeile mal den Faktor c
          }

      }
      }
}
void P_matrix::Rueckaufloesung(){

     int n= mv.size();

     }
</code></pre>
<p>der &gt;&gt; operator ist schon überladen,so dass man ins programm MAtrixname&gt;&gt;element&gt;&gt;...schreiben kann und das in ne neue matrix gespeichert wird<br />
sowas würde ich gerne für die konsolenanwendung haben</p>
<p>hab mir das so gedacht:<br />
der user gibt die zahlen einer spalte mit leerzeichen getrennt ein,wenn er fertig ist drückt er enter um in die nächste zeile zu gelangen<br />
umd die eingabe zu beenden muss der user entweder ein word wie fertig oder ende oder so eingeben ooder ne bestimmte taste(tastenkombi) drücken</p>
<p>hat einer ne idee wie ich das mit dem oben überladenen &gt;&gt; operator umsetzen kann?<br />
bin über jede hilfe dankbar</p>
<p>MFG</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/215182/cin-überladen-für-die-eingabe-einer-kompletten-matrix</link><generator>RSS for Node</generator><lastBuildDate>Mon, 12 Oct 2026 18:23:16 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/215182.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 07 Jun 2008 11:19:33 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to cin überladen für die eingabe einer kompletten matrix on Sat, 07 Jun 2008 11:27:40 GMT]]></title><description><![CDATA[<p>wir sitzten zz an einem Programmierenprojekt bei dem wir mit operatot überladung arbeiten sollen...<br />
wir sollen den cin operator so überladen das die eingabe einer kompletten matrix möglich ist<br />
den operator haben wir schon überladen,nun stehen wir aber vor dem problem der eingabe der daten durch den nutzer</p>
<p>hier mal unser quelltext<br />
header datei</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;

using namespace std;

struct newline{};
class P_matrix {

private:
	vector&lt;vector&lt;double&gt; &gt; mv;
	vector&lt;double&gt; l_vektor;
	int index;
	int Determinante;

public:
	P_matrix(void);
	P_matrix(int n, int m);
    //~matrix(void);
	int set_determinante();
    void Zeilenumformung();
    void Rueckaufloesung();
    P_matrix&amp; operator &gt;&gt; (const int WERT);
	P_matrix&amp; operator &gt;&gt; (const struct newline N);
	P_matrix&amp; operator += (const P_matrix &amp;MATRIX);
	P_matrix&amp; operator *= (const P_matrix &amp;MATRIX);
	friend ostream &amp; operator &lt;&lt; (ostream &amp; os, const P_matrix &amp;m);
	friend P_matrix operator * (const P_matrix &amp;MATRIX_A, const P_matrix &amp;MATRIX_B);
};

P_matrix operator + (const P_matrix &amp;MATRIX_A, const P_matrix &amp;MATRIX_B);
</code></pre>
<p>cpp datei</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &quot;Matrix.h&quot;

using namespace std;
//// Standard-Konstruktor der Klasse P_matrix //////////////////////////////////

P_matrix::P_matrix(void)
{
    mv.push_back(vector&lt;double&gt;());
   index=0;
}

////Überladener Konstruktor um die Größe der Matrix am Anfang zu definieren ////
/*
P_matrix::P_matrix(int n, int m)
{
   for (int index=0; index&lt;n; index++){
        mv.push_back(vector&lt;int&gt;());
        cout&lt;&lt;&quot; Zeile &quot;&lt;&lt; i+1 &lt;&lt; &quot;: &quot;; 
        for (int j=0; j&lt;m; j++)
           cinmv[][]

}
*/
//// Determinantenberechnung ///////////////////////////////////////////////////
/*
int P_matrix::set_determinante(){
 if ((mv.size()==1)&amp;&amp; (mv[0].size()==1))
    Determinante = mv[0][0];
    return mv[0][0];
}
*/
//Addition zweier Matrizen mit dem Operator '+=' ///////////////////////////////

P_matrix&amp; P_matrix::operator += (const P_matrix &amp;MATRIX)
{        
         int i,j;                                   //Index-Variablen um durch die Matrix zu laufen

         for (i=0; i&lt;MATRIX.mv.size();i++)              //Zeilenvorschub
          {   
                for (j=0; j&lt;MATRIX.mv[i].size();j++)    //Spaltenvorschub
                mv[i][j]+=MATRIX.mv[i][j];
          }
          return *this;
}

////Global Überladen zur Addition zweier Matrizen über den Operator '+' ////////

P_matrix operator + (const P_matrix &amp;MATRIX_A, const P_matrix &amp;MATRIX_B) 
{
          P_matrix m_tmp = MATRIX_A;
          return m_tmp += MATRIX_B;

}

////Einlesen der einzelnen Werte in die Matrix über den Operator '&gt;&gt;' //////////

P_matrix&amp; P_matrix::operator &gt;&gt; (const int WERT)
{  
	mv[index].push_back(WERT);                     //neuer Wert wird am Zeilenvektor hinten angehängt
    return *this;
}

//// Zeilenvorschub erzeugen innerhalb der Matrix über den Operator '&gt;&gt;' ///////

P_matrix&amp; P_matrix::operator &gt;&gt; (const struct newline N)  //Es wird ein Wert vom leeren struct newline erwartet
{
	mv.push_back(vector&lt;double&gt;());                   //erzeugt einen neuen Zeilenvektor in der Matrix
		index++;                                   //Index-Variable zum schreiben in die neue Zeile wird inkrementiert
		return *this;
}

//// Ausgabe der Matrix über den Operator &lt;&lt; ///////////////////////////////////

ostream &amp; operator&lt;&lt;(ostream &amp; os, const P_matrix &amp;m)
{
        int i, j;                                 //Index-Variablen um durch die Matrix zu laufen

        for (i=0; i&lt;m.mv.size();i++)              //Zeilenvorschub
          {   
                for (j=0; j&lt;m.mv[i].size();j++)   //Spaltenvorschub
            {
                os&lt;&lt;m.mv[i][j]&lt;&lt;&quot;\t&quot;;              //schreiben in die ostream Variable
            }
            os&lt;&lt;endl;                             //Zeilenvorschub der Ausgabe
          }	
          return os;
}

P_matrix operator * (const P_matrix &amp;MATRIX_A, const P_matrix &amp;MATRIX_B)
{        
         int i,j,k;
         double hilf=0;                                       //Index-Variablen um durch die Matrix zu laufen
 P_matrix m_tmp;
         newline nz;      

for (k=0; k&lt;MATRIX_A.mv.size();k++)   
{
         for (i=0; i&lt;MATRIX_B.mv.size();i++)              //Zeilenvorschub
          {   

                for (j=0; j&lt;MATRIX_B.mv[i].size();j++)    //Spaltenvorschub
                {

                  hilf+=MATRIX_A.mv[k][j]*MATRIX_B.mv[j][i];

                }
                m_tmp &gt;&gt; hilf;
                hilf=0;
          }
          if ((k+1)&lt;MATRIX_A.mv.size()) m_tmp &gt;&gt; nz;
}

          return m_tmp;
}
///// Gauss Zeilenumformung ////////////////////////////////////////////////////

void P_matrix::Zeilenumformung()
{
     int k=0;
     int n = mv.size();
     double c;              //Faktor durch den geteilt wird. 
     int i;

     for (k=0; k&lt;n-1; k++){   //c_ik= a_ik / a_kk // k: 1...n-1; Elinationsstufe

      for (i=1; (i+k)&lt;n; i++)    //i: 1...n-1; Zeile
      {   

          c=mv[i+k][k]/mv[k][k];
          for (int j=0; j&lt;mv[i].size(); j++)   //j: 1...n(spalten); Spalte
          {
              mv[i+k][j]=mv[i+k][j]-(mv[k][j]*c);  //0 erzeugen durch Subtraktion der aktuellen Zeile mal den Faktor c
          }

      }
      }
}
void P_matrix::Rueckaufloesung(){

     int n= mv.size();

     }
</code></pre>
<p>der &gt;&gt; operator ist schon überladen,so dass man ins programm MAtrixname&gt;&gt;element&gt;&gt;...schreiben kann und das in ne neue matrix gespeichert wird<br />
sowas würde ich gerne für die konsolenanwendung haben</p>
<p>hab mir das so gedacht:<br />
der user gibt die zahlen einer spalte mit leerzeichen getrennt ein,wenn er fertig ist drückt er enter um in die nächste zeile zu gelangen<br />
umd die eingabe zu beenden muss der user entweder ein word wie fertig oder ende oder so eingeben ooder ne bestimmte taste(tastenkombi) drücken</p>
<p>hat einer ne idee wie ich das mit dem oben überladenen &gt;&gt; operator umsetzen kann?<br />
bin über jede hilfe dankbar</p>
<p>MFG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1524592</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1524592</guid><dc:creator><![CDATA[Braineater]]></dc:creator><pubDate>Sat, 07 Jun 2008 11:27:40 GMT</pubDate></item><item><title><![CDATA[Reply to cin überladen für die eingabe einer kompletten matrix on Sat, 07 Jun 2008 12:45:17 GMT]]></title><description><![CDATA[<p>Es wäre nett wenn du beim nächsten mal nicht gleich dein ganzes Projekt posten würdest, sondern nur den für dein Problem relevanten Teil <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Braineater  schrieb:</p>
<blockquote>
<p>der user gibt die zahlen einer spalte mit leerzeichen getrennt ein</p>
</blockquote>
<p>nimm doch einfach std::string( oder char*, den du dann an string übergibst ):</p>
<pre><code class="language-cpp">while( ... )    // Abbruchbedingung
{
    cin &gt;&gt; Matrixname;  // einen String übergeben, trennung der Werte z.B. mit '|'           
}
</code></pre>
<p>Überlade den &gt;&gt; operator nocheinmal:</p>
<pre><code class="language-cpp">P_matrix&amp; P_matrix::operator &gt;&gt; (const char* WERT_ch)
{  
    std::string WERT;
    int len = 0;
    while( *WERT_ch++ ) len++;  // größe ermitteln
    for( int i=0; i&lt;=len; i++ )
        WERT += WERT_ch[i];     // übertragen

    if( WERT == &quot;ende&quot; ) // Abbruch...
    // die einzelnen Werte auslesen( stringstream &amp;&amp; isdigit ) und an die Matrix übergeben...
    // nach der Bearbeitung dann eine neue Zeile erstellen
    mv.push_back(vector&lt;double&gt;());                   //erzeugt einen neuen Zeilenvektor in der Matrix
        index++;
    //...
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1524635</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1524635</guid><dc:creator><![CDATA[double *T]]></dc:creator><pubDate>Sat, 07 Jun 2008 12:45:17 GMT</pubDate></item><item><title><![CDATA[Reply to cin überladen für die eingabe einer kompletten matrix on Sat, 07 Jun 2008 15:51:54 GMT]]></title><description><![CDATA[<p>so wie die fkt jetzt geschrieben ist ist sie aber zum rechnen nicht mehr zu gebrauchen da alles als char übergeben wird,oder hab ich mich da verguckt?</p>
<p>wir sollen nämlich anschliessend noch mit den eingegebenen matrizen rechnen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1524709</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1524709</guid><dc:creator><![CDATA[Braineater]]></dc:creator><pubDate>Sat, 07 Jun 2008 15:51:54 GMT</pubDate></item><item><title><![CDATA[Reply to cin überladen für die eingabe einer kompletten matrix on Sat, 07 Jun 2008 17:36:44 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">P_matrix&amp; P_matrix::operator &gt;&gt; (const std::string WERT_ch)
{
    //...
}
</code></pre>
<p>mit std::string sollte es auch gehen...</p>
<p>Braineater  schrieb:</p>
<blockquote>
<p>so wie die fkt jetzt geschrieben ist ist sie aber zum rechnen nicht mehr zu gebrauchen da alles als char übergeben wird,oder hab ich mich da verguckt?</p>
</blockquote>
<p>so wie die funktion im moment geschrieben ist, trifft das zu, ja, aber wenn man den string mit stringstreams ausliest, erhält man wieder integer-Werte:</p>
<pre><code class="language-cpp">P_matrix&amp; P_matrix::operator &gt;&gt; (const std::string str)
{  
	if( WERT == &quot;ende&quot; ) break;

	std::string buffer;
	std::stringstream cst;
	int i=0;
	int k=0;
	int mwert=0;

    // die einzelnen Werte auslesen( stringstream &amp;&amp; isdigit ) und an die Matrix übergeben...
    // nach der Bearbeitung dann eine neue Zeile erstellen

	while( i &lt;= str.length() )
	{
		if( std::isdigit( str[i] ) )
		{
			buffer += str[i];
		}

		else if( str[i] == '|' ) // ein leerzeichen als trennzeichen ist nicht möglich, da std::cin keine lesen kann
 		{
			cst.clear();

			cst &lt;&lt; buffer;
			cst &gt;&gt; mwert;

			// Integerwerte an die Matrix übergeben
			mv[index].push_back(mwert);

			buffer = &quot;&quot;;
			mwert = 0;
		}

                else
                {
                    std::cout &lt;&lt; &quot;Syntax Error&quot; &lt;&lt; std::endl;
                    break;
                }
		++i;
	}	

	// neue zeile anhängen... -&gt; kann auch am anfang stehen
	mv.push_back(vector&lt;double&gt;());                   //erzeugt einen neuen Zeilenvektor in der Matrix
	index++;
    //...
}
</code></pre>
<p>Jetzt sollten die Werte in die Matrix eingetragen sein und man<br />
kann weiter mit ihnen rechnen</p>
<p>\\EDIT: nicht vergessen die Header einzubinden</p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;sstream&gt;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1524749</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1524749</guid><dc:creator><![CDATA[double *T]]></dc:creator><pubDate>Sat, 07 Jun 2008 17:36:44 GMT</pubDate></item></channel></rss>