Frage zu Matrizen/Funktionen



  • Hi,

    LR_maker schrieb:

    int schreibe_mat(int n,double **A)
      {
           int i,j;
           
           printf("\n");
           for(i=0;i<n;i++)
           {
              printf("%4.6f",A[i][j]);
           }
           printf("\n");
       }
    

    Hier ist schon einiges falsch.

    Den Parameter kannst du erstmal ändern in "double A[3][3]". Mit dynamischen Arrays kannst du dich im Anschluss befassen, aber bring den Code hier erst mal zum Laufen.

    Du benutzt die Variable j, obwohl du sie noch gar nicht initialisiert (ihr einen Wert zugewiesen) hast. Das kann nicht gut gehen. for-Schleife vergessen? 😉

    Die Funktion hat den Typ int (Rückgabe), du gibst aber nix zurück. Da muss ein passendes return-Statement ans Ende.

    EDIT: Beim nächsten Post solltest du deinen Code in cpp-Tags packen und vor allem auch eine genauere (bzw. überhaupt eine) Fehlerbeschreibung mitliefern. 🙂



  • Hallo Matze,

    danke, war wirklich zu schlampig.
    Allerdings funktioniert die Übergabe mit **A trotzdem nicht, also es wird zwar kompiliert, stürzt aber ab 😞

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, char *argv[])
    {
    
    // ursprüngliche Matrizen erstellen 8nd ausgeben
    
      double mat_a[3][3];
      double *hilf[3];
      int l;
      int i,j;
    
      for(l=0;l<3;l++)
         hilf[l] = mat_a[l];
    
    // erste Matrix:
    
      for (i=0;i<=2;i++)
      {
          for(j=0;j<=2;j++)
          {
              mat_a[i][j] = 1+i+3*j ;
          }
      }
      mat_a[2][2] = 10;
    
      schreibe_mat(3,mat_a);
    
      system("PAUSE");	
      return 0;
    }
    
    // Funktion zur Ausgabe von Matrizen
    
      int schreibe_mat(int n,double A[3][3])
      {
           int i,j;
    
           printf("\n");
           for(i=0;i<n;i++)
           {
             for(j=0;j<n;j++)
             {
              printf("%10f",A[i][j]);
             }
             printf("\n\n");
           }
           printf("\n");
           return 0;
       }
    


  • Und wieder hast du die Fehlermeldung vergessen... 🙄

    Merke: "Läuft nicht" oder "stürzt ab" sind keine Fehlerbeschreibungen!

    Bei mir stürzt nix ab, also beschreib mal ganz genau, was bei dir schiefläuft.



  • Naja, ich habe eben kein Problem bzw. Fehlermeldungen beim kompilieren, aber
    beim Ausführen erscheint dann nichts und kurz danach

    main.exe hat ein Problem festgestellt und muss beendet werden.



  • Du musst mal die Debug-Version erstellen (nicht Release), dann kriegst du auch ne bessere Fehlermeldung!



  • Hallo,

    leider hab ich keine Ahnung, was Du meinst, bin da nicht bewandert
    🙄



  • RL_maker schrieb:

    Hallo,

    leider hab ich keine Ahnung, was Du meinst, bin da nicht bewandert
    🙄

    Ich hab ja keine Ahnung, welche IDE du verwendest und kann dir folglich keine genaue Anleitung bieten. Aber du hast wahrscheinlich die Möglichkeit, 2 Build-Arten von deinem Programm zu erstellen.

    Der Release-Build wäre das, was du auch weitergeben würdest, was also (theoretisch) auch bei anderen laufen soll. Hier wird üblicherweise noch vom Compiler optimiert, so dass die exe möglichst performant und/oder möglichst klein ist.

    Der Debug-Build ist hingegen (wer hätte das gedacht 😉 ) zum Debuggen gedacht. Da werden noch einige Debug-Informationen eingebaut, die dir z.B. ermöglichen, Haltepunkte zu setzen und die Ausführung des Programms während der Laufzeit zu überprüfen. Das Programm läuft, du kannst zwischendrin anhalten, Zeile für Zeile ausführen lassen, Variableninhalte überprüfen usw. Und im Falle eines Fehlers sagt dir deine IDE auch genauer Bescheid, was gerade schiefgelaufen ist und springt sogar an die betreffende Stelle im Code. Du kriegst also nicht nur ne blöde Meldung von wegen "Anwendung hatte ein Problem und...". Sondern du kannst direkt in den Code springen und den Fehler fixen.

    Such einfach mal für deine IDE nach "Debug Release erstellen" oder so, dann findeste sicher was.



  • Hallo Matze,

    vielen Dank für die Erklärung und Hilfe.
    Ich habe Dev-C++ (vermutlich nicht die beste Wahl), und da finde
    ich nichts bzw. wäre das (für mich) erheblicher Aufwand.

    Ich werde nun das Programm aus Zeitgründen eben ohne die **A - Variablenübergabe schreiben, eigentlich geht es ja, darum, eine LR-Zerlegung von Matrizen zu programmieren. Werde mich also eher um den Algorithmus als um Informatik-Fitzeleien kümmern, und den Rest machen, wenn mal mehr Zeit ist. Wäre NetBeans besser geeignet?



  • Ich würde dir zu Visual Studio 2008 Express (kostenlos) raten. Das ist eine gute IDE, der Compiler kann allerdings nur C89. Falls du unbedingt C99 willst, musst du was anderes nehmen. Da können dir andere eher einen Tipp geben. Ich arbeite eigentlich nur mit dem VS...



  • _matze schrieb:

    Ich würde dir zu Visual Studio 2008 Express (kostenlos) raten. Das ist eine gute IDE, der Compiler kann allerdings nur C89. Falls du unbedingt C99 willst, musst du was anderes nehmen. Da können dir andere eher einen Tipp geben. Ich arbeite eigentlich nur mit dem VS...

    na, CodeBlocks, watcom, pellesC, usw. vs express ist absoluter mist dagegen.
    🙂


Anmelden zum Antworten