C Determinante bestimmen, mehrdimensionale Arrays



  • //Hallo! Wieso gibt mein printf-Befehl die Determinante nicht aus 😞
    //Vielen Dank.

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>

    double matrix[3][3];
    double inverse_matrix[3][3];

    /********************************************************************************************
    BERECHNEN DER DETERMINANTE
    *********************************************************************************************/

    double berechne_determinante(double **matrix,int dimension) { //Bei ** ok aber bei [][] nicht, wieso?

    double determinante;
    switch (dimension) {
    case 1: {
    	determinante = matrix[0][0];
    	return determinante;
    	break;
    }
    
    case 2: {
    
    	determinante = matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0];
    	return determinante;
    	break;
    }
    case 3: {
    
    	determinante =
    		matrix[0][0] * matrix[1][1] * matrix[2][2] + matrix[0][1] * matrix[1][2] * matrix[2][0] + matrix[0][2] * matrix[1][0] * matrix[2][1] -
    		matrix[2][0] * matrix[1][1] * matrix[0][2] - matrix[2][1] * matrix[1][2] * matrix[0][0] - matrix[2][2] * matrix[1][0] * matrix[0][1];
    	return determinante;
    	break;
    }
    
    }
    

    }

    int main(void) {
    int i, j;
    int dimension;
    printf("Programm zur Berechnung der Determinante einer quadratischen Matrix\n\n");
    printf("Bitte Dimension der Matrix eingeben (1, 2 oder 3 Dimensionen)!\n");
    scanf_s("%d", &dimension);

    for (i = 0; i < dimension; i++) {
    	for (j = 0; j < dimension; j++) {
    		printf("Bitte Element [%d][%d] eingeben! ", i + 1, j + 1);
    		scanf_s("%lf", &matrix[i][j]);
    	}
    }
    printf("Die Determinante der Matrix lautet : %lf\n", berechne_determinante(matrix, dimension));
    
    //printf("Die Inverse der Matrix lautet : %.2lf\n", berechne_inverse();
    

    }

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>

    double matrix[3][3];
    double inverse_matrix[3][3];

    /********************************************************************************************
    BERECHNEN DER DETERMINANTE
    *********************************************************************************************/

    double berechne_determinante(double **matrix,int dimension) { //Bei ** ok aber bei [][] nicht, wieso?

    double determinante;
    switch (dimension) {
    case 1: {
    	determinante = matrix[0][0];
    	return determinante;
    	break;
    }
    
    case 2: {
    
    	determinante = matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0];
    	return determinante;
    	break;
    }
    case 3: {
    
    	determinante =
    		matrix[0][0] * matrix[1][1] * matrix[2][2] + matrix[0][1] * matrix[1][2] * matrix[2][0] + matrix[0][2] * matrix[1][0] * matrix[2][1] -
    		matrix[2][0] * matrix[1][1] * matrix[0][2] - matrix[2][1] * matrix[1][2] * matrix[0][0] - matrix[2][2] * matrix[1][0] * matrix[0][1];
    	return determinante;
    	break;
    }
    
    }
    

    }

    int main(void) {
    int i, j;
    int dimension;
    printf("Programm zur Berechnung der Determinante einer quadratischen Matrix\n\n");
    printf("Bitte Dimension der Matrix eingeben (1, 2 oder 3 Dimensionen)!\n");
    scanf_s("%d", &dimension);

    for (i = 0; i < dimension; i++) {
    	for (j = 0; j < dimension; j++) {
    		printf("Bitte Element [%d][%d] eingeben! ", i + 1, j + 1);
    		scanf_s("%lf", &matrix[i][j]);
    	}
    }
    printf("Die Determinante der Matrix lautet : %lf\n", berechne_determinante(matrix, dimension));
    
    //printf("Die Inverse der Matrix lautet : %.2lf\n", berechne_inverse();
    

    }



  • @Elahamadinahabib sagte in C Determinante bestimmen, mehrdimensionale Arrays:

    //Bei ** ok aber bei [][] nicht, wieso?

    Weil ein Array kein Zeiger ist und ein Zeiger kein Array ist, schon gar nicht als Funktionsparameter.



  • @Elahamadinahabib Ein 2D-Array ist ein zusammenhängender Speicherbereich.

    Bei einem Doppelzeiger hat man meist ein Array mit Zeigern, dessen Elemente auf weitere Arrays verweisen, die dann die Werte enthalten.
    (Es kann aber auch nur die Adresse eines einzelnen Zeigers sein)

    Du kannst als Funktionsargument Variable Length Arrays (VLA) benutzen. Aber bitte nur da.

    double berechne_determinante(int dimension, double matrix[dimension][dimension])