Matrix modellieren



  • Hi,

    ich bin gerade dabei einen Algorithmus für die Graphentheorie zu implementieren. Dazu will ich eine Matrix für die Kosten aufstellen. Nun suche ich schon seit einer Ewigkeit einen Fehler, ich konnte ihn auf folgendes Programm reduzieren:

    #include <iostream>
    using namespace std;
    
    int main() {
    
    	int d[4][4] =
    	{
    		{1,-3,0,5},
    		{0,0,1,3},
    		{0,0,0,-1},
    		{4,2,0,0}
    	};
    
    	for (int i=1; i<=4; i++)
    	{
            for (int j=1; j<=4; j++)
                cout << d[i][j] << " ";
            cout << endl;
        }
    
    }
    

    Eigentlich ganz simpel, aber kann mir jemand erklären, wieso ich als Ausgabe nicht die Matrix d erhalte, sondern

    0 1 3 0
    0 0 -1 4
    2 0 0 0
    0 2293624 4198762 1
    

    ? Ich kapier das beim besten Willen nicht, ich hoffe ihr könnt meinen dummen Fehler finden.

    Danke und Gruß


  • Administrator

    Ein Arrayindex fängt bei 0 an und geht bis und mit N - 1.

    #include <iostream>
    
    int main()
    {
      int arr[4] = { 1, 2, 3, 4 };
    
      for(int i = 0; i < 4; ++i)
      {
        std::cout << i << std::endl;
      }
    
      return 0;
    }
    

    Grüssli



  • Dein array hat vier einträge: 0,1,2,3 da du aber in der forschleife bis irgendwann i=4 hast greifst du auf d[4][...] und dies führt zu undefiniertem verhalten.

    so wäre es richtig:

    for (int i=1; i<4; i++)
        {
            for (int j=1; j<4; j++)
    

    edit: zu spät 😉


  • Administrator

    Fencer schrieb:

    edit: zu spät 😉

    Und auch falsch, du musst bei 0 anfangen 😉

    Grüssli



  • Oh Gott, wie frustrierend...da programmiert man seit Jahren und bleibt ewig an einem solchen Anfängerfehler hängen 😃 Danke für die schnelle Hilfe.



  • da programmiert man seit Jahren

    Matlab?



  • Nee, C, PHP, Java, ... seit Jahren und auch kommerziell, also eigentlich dürfte ich auf sowas nicht reinfallen 🙂


  • Administrator

    Herr-Vorragend schrieb:

    ... seit Jahren und auch kommerziell, ...

    Aber keine lebenswichtige Systeme? Sonst sag mal welche, damit wir um diese einen grossen Bogen machen können 🤡 😃
    Fehler verstecken sind immer dort, wo man sie nicht sucht. 🙂

    Grüssli


Anmelden zum Antworten