Matrizen Produkt ||Matriz * Matriz || @(( Rodrner ))

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Matrizen Produkt ||Matriz * Matriz || @(( Rodrner ))

    // so es handelt sich um zwei Matrizen
    // 1. Einlesen 2. Ausgaben 3. Multi.
    Header.h // Deklaration

    Quellcode

    1. #ifndef _CALC_INC
    2. #define _CALC_INC
    3. // Funktionen
    4. void Einlesen( unsigned *x,int n);
    5. void Ausgeben( unsigned *x, int n);
    6. unsigned Multi(unsigned *x,unsigned *y, unsigned *c, int n);
    7. #endif


    Calc.cpp // Funktionen

    Quellcode

    1. #include"global.h"
    2. void Einlesen( unsigned *x,int n)
    3. {
    4. int i,j; // i : zeilen, j : Spalten
    5. for(i=0;i<n;i++)
    6. for(j=0;j<n;j++)
    7. {
    8. scanf("%d",x+i*n+j); // scanf("%d",x+i*n+j)
    9. }
    10. }
    11. // Ausgabe
    12. void Ausgeben( unsigned *x, int n)
    13. {
    14. int i,j;
    15. for(i=0;i<n;i++)
    16. for(j=0;j<n;j++)
    17. {
    18. printf("%d",x+i*n+j);
    19. }
    20. }
    21. unsigned Multi(unsigned *x,unsigned *y, unsigned *c, int n)
    22. {
    23. int k,i,j;
    24. unsigned (*(c+k*n+j))=0;
    25. for(j=0;j<n;j++)
    26. {
    27. for(k=0;k<n;k++)
    28. unsigned (*(c+k*n+j))=0;
    29. *(c+k*n+j)+= *(x+i*n+k)* *(y+k*n+j);
    30. }
    31. return( *(c+k*n+j));
    32. }
    Alles anzeigen


    main // hauptprog.

    Quellcode

    1. #include"global.h"
    2. #include<stdlib.h>
    3. void main()
    4. {
    5. unsigned *x;
    6. unsigned *y;
    7. unsigned *c;
    8. int n;
    9. // Vorwort
    10. printf("\n Das Programm rechnet Matriz * Matriz durch \n");
    11. printf(" geben Sie bitte die Anzahl der Zeilen bzw. Spalten ein\n");
    12. scanf("%d",&n);
    13. // Dynamische Erzeugung
    14. x = (unsigned *) calloc (n*n, sizeof(unsigned));
    15. y = (unsigned *) calloc (n*n, sizeof(unsigned)); / Dynamische Erzeugnng.
    16. c = (unsigned *) calloc (n*n, sizeof(unsigned));
    17. // Einlesen
    18. printf(" geben Sie bitte die Koordinanten der ersten Matrize ein\n");
    19. Einlesen(x,n);
    20. printf(" geben Sie bitte die Koordinanten der zweiten Matrize ein\n\n");
    21. Einlesen(x,n);
    22. printf("\n \***************************** Das Ergebnis *****************************\ \n" );
    23. // Ausgabe
    24. printf("\n\n Das Ergebnis lautet \n\n");
    25. Multi(x,y,c,n);
    26. free(x);
    27. free(y);
    28. free(c);
    29. getchar();
    30. getchar();
    31. }
    32. // Berechnung
    Alles anzeigen


    // neu erstellung : ========== Alles neu erstellen: 1 erfolgreich, Fehler bei 0, 0 übersprungen ==========
    // nach dem Eingeben der beiden Matrizen stoppt er...also ( meine rMeinung nach ) der Fehler sollte dann ebn bei der Ausgeben Funktion irgendwo sein
    :
  • Quellcode

    1. Fehlerliste waren halt nur Warnungen..!!!
    2. Warnung 1 warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
    3. Warnung 4 warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. c:\users\hassan\documents\visual studio 2010\projects\main mat_mat\main mat_mat\calc.cpp 8 main mat_mat 1
    4. Warnung 5 warning C4700: Die nicht initialisierte lokale Variable "k" wurde verwendet.
    5. 25 main mat_mat 1
    6. Warnung 6 warning C4700: Die nicht initialisierte lokale Variable "j" wurde verwendet.
    7. 25 main mat_mat 1
    8. Warnung 7 warning C4700: Die nicht initialisierte lokale Variable "i" wurde verwendet.
    9. Warnung 2 warning C4129: '*': Nicht erkannte Folge von Escapesequenz mat_mat 1
    10. Warnung 3 warning C4129: ' ': Nicht erkannte Folge von Escapesequenz mat_mat 1
  • Oh man, nur Warnungen 8)

    Wenn du so schon meinst Warnungen kannst du ignorieren, dann solltest du spätestens dann, wenn der Quelltext nicht das was du möchtest ausgibt darüber nachdenken :rolleyes:

    Ist ja schön das du in Zeile 35:

    Quellcode

    1. printf("\n\n Das Ergebnis lautet \n\n"); //???
    2. Multi(x,y,c,n);

    "Das Ergebnis lautet" geschrieben hast. Aber wie das aussehen soll hast du nicht geschrieben :D

    Die Fehlermeldungen/Warnungen gehören bei dir zum gezeigten Quelltext ?(
    Warum dann unterschiedliche Dateinamen ?(

    MfG bcc-fan

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von bcc-fan () aus folgendem Grund: Hab mir das noch mal genauer anhesehen

  • Bin doch nicht dein persönlicher Helfer hier...

    Und er hat recht, irgendwas stimmt bei deiner Matrixmultiplikation nicht so richtig.

    Aber unabhäng davon am besten erstmal die Ausgabe hinbekommen, damit du siehst was bei der Multiplikation rauskommt:

    Quellcode

    1. printf("\n Das Ergebnis lautet %d \n",*(c+k*n+j));

    Also das geht so schonmal nicht, auf die weise kannst du nur einen einzelnen Integer Wert ausgeben. Der Compiler kann auch gar nicht wissen, dass es sich dabei um ne Matrix handeln soll. Du hast doch extra eine Ausgeben-Funktion geschrieben, die ist doch genau für diesen Zweck gedacht, dann benutz sie doch einfach...

    Aber abgesehen davon:

    Quellcode

    1. printf("\n Das Ergebnis lautet %d \n",*(c+k*n+j));
    2. Multi(x,y,c,n);

    Du hast hier ja auch ERST die Ausgabe und berechnest dann erst das Produkt.
  • hier mal die Header-Datei-Variante, die ich bevorzuge:

    Quellcode

    1. #ifndef _DATEINAME_ERWETERUNG
    2. #define _DATEINAME_ERWETERUNG
    3. // Funktionen
    4. void Einlesen(int **x, size_t n);
    5. void Ausgeben( int **x, size_t n);
    6. void Multi(int **x, int **y, int **c, size_t n);
    7. #endif

    Könnt ja den Rest passend machen.

    Zur Variante des Beitragserstellers:
    Neben einigen anderen Änderungen im Quelltext sind hier deutliche Änderungen angesagt.
    Das Ergebnis:

    Quellcode

    1. (*(c+j*n+i))=0; // hier
    2. for(k=0;k<n;k++)
    3. *(c+j*n+i)+= *(x+j*n+k)* *(y+k*n+i); // hier ebenso
    4. }
    5. }

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von bcc-fan () aus folgendem Grund: Andere Quelltextvariante