Matrizen berechnen(Uni Hannover)



  • Hallo zusammen!
    Ich sitze als Erstsemester in 'Einführung in die Informatik'.
    Ich grüße alle, die daran teilnehmen oder teilgenommen haben. 😉

    Die Aufgabe seit einer Woche: Schreiben sie ein Programm, welches 2
    n*n Matrizen einliest und diese addiert, transponiert, multipliziert.
    Mit typedef soll Matrix [anzahl][anzahl] vorher bekannt sein. (Schon die erste Fehlermeldung: Matrix außerhalb von Funktion - Ist typedef nicht deswegen da? 😕 )
    Außerdem sollen die Berechnungen in Funktionen wie

    void einlesen(matrix m){}
    

    stattfinden.
    Nun, aus void noch Werte zu bekommen, funktioniert über Zeiger(also die Speicheradressen). Habe das mit Zahlentausch ausprobiert. (War, glaub ich, auch ne Aufgabe) -funktionierte.
    Aber ich bekomme es nicht einmal hin, eine Matrix einzulesen und auszugeben!

    #include <stdio.h>
    
    main(){
    int anzahl;
    int i,j;
    float matrix[i][j];
    printf("geben sie die Spalten- und Zeilenbreite ihrer n*nMatrix an: ");
    scanf("%d",&anzahl);
    
    for(i=0;i<anzahl;i++){
    	for(j=0;j<anzahl;j++){
    		printf("geben sie die %d. Zahl der %d Zeile ein: ",j+1,i+1);
    		scanf("%d",&matrix[i][j]);
    				}
    					}
    	for(i=0;i<=anzahl;i++){
    	for(j=0;j<=anzahl;j++){
    	printf("%d ",matrix[i][j]);
    	printf("\n");
    	}
    	}
    }
    

    Die Fehlermeldung kommt erst beim Versuch, dass Programm auszuführen: Segmentation fault (core dumped) 😮
    Jetzt weiß ich gar nicht mehr weiter.
    Wie kriege ich es denn hin, dass eine Matrix eingelesen wird, und das andere Funktionen auf den Inhalt der Matrix zugreifen können?
    Bin für jede Erklärung, sinnvolle Verweise auf frühere Beiträge, Links und Quellprogramme dankbar.(Habe wohl nicht mit dem richtigen Stichwort gesucht, oder war nicht ausdauernd genug?)



  • vielleicht solltest du dich mal mit Zeiger beschäftigen:
    http://turing.fh-landshut.de/~jamann/Einfuehrung in Zeiger und Referenzen.htm

    such dir auch Tutorials zu Mehrdimensionalen Arrays (wie man diese dynamisch anlegt usw.)

    ich hab mal ein Matrix Template in C++ programmiert:
    http://turing.fh-landshut.de/~jamann/MatrixHtml/_matrix_8h-source.html

    Such hier mal nach Matirx - auch google sollte einiges finden:
    http://www.koders.com/



  • Die Größe eines Arrays mußt du als Konstante angeben (in C sogar als Literal, d.h. #define) - daran kannst du schonmal nichts ändern. Alternativ könntest du dir die Matrix per malloc() zusammenbauen:

    typedef float* Matrix;
    void add(Matrix lhs,Matrix rhs,Matrix sum,int size);
    
    //..
    scanf("%d",&anzahl);
    Matrix m=malloc(anzahl*anzahl*sizeof(float));
    for(x=0;x<anzahl;++x)
      for(y=0;<anzahl;++y)
      {
        prinft("Element (%d,%d):",x,y);
        scanf("%f",&(m[x*anzahl+y]));
      }
    Matrix m2=malloc(...);//ebenfalls einlesen
    Matrix ms=malloc(...);
    
    add(m,m2,ms,anzahl);
    


  • nach einem scanf() solltest du mal das probieren:

    int c; while ((c = getchar()) != EOF && c != '\n');
    

Anmelden zum Antworten