Goodspeed21 | Salut tout le monde,
Je débute en programmation et j'aurais besoin d'un petit coup de pouce. Je dois calculer les normes matricielles (norme 1 et norme infinie). J'ai essayé de le sprogrammer, à la compilation ça passe, par contre je ne comprends pas pourquoi ça plante à l'exécution. Je vous mets ici mon code pour la norme 1 (pour la norme infinie il suffit juste de permuter les indices) :
main.c :
Code :
- #include <stdio.h>
- #include "functions.h"
- int main ()
- { int i,j,c,nrows,ncols;
- double **mat;
- double res1,res3;
- printf("Choose the norm you want to calculate :\n 1. l1 norm\n 2. linf norm\n " );
- scanf("%d",&c);
- printf("Please input the number of rows and columns for the matrix. These numbers must be the same :\n" );
- scanf("%d %d",&nrows,&ncols);
- mat = dmatrix(nrows,ncols); /* dynamic allocation for the matrix*/
- printf("Please input the %d*%d matrix elements :\n",nrows,ncols);
- /*nested loop*/
- for (i=0;i<nrows;i++)
- {
- for (j=0;j<ncols;j++)
- {
- scanf("%lf",&mat[i][j]);
- }
- }
- switch (c)
- {case 1: res1=norm1(mat,nrows,ncols);
- printf("The result is %lf", res1);
- break;
- case 2: res3=norminf(mat,nrows,ncols);
- printf("The result is %lf", res3);
- break;
- }
- /* frees the memory for the matrix */
- for (i=0;i<nrows;i++)
- {
- free(mat[i]);
- }
- free(mat);
- }
|
functions.c (contient les fonctions qui vont calculer les normes)
Code :
- #include <math.h>
- double norminf(double **mat ,int nrows, int ncols)
- {
- double sum, res;
- int i,j;
- res=0;
- sum=0;
- for(i=0;i<=nrows;i++)
- {
- for(j=0;j<=ncols;j++)
- {
- sum = sum + fabs(mat[i][j]);
- if(sum>res)
- {
- res=sum;
- }
- }
- }
- return(res);
- }
- double norm1(double **mat ,int nrows, int ncols)
- {
- double sum, res;
- int i,j;
- res=0;
- sum=0;
- for(j=0;j<=ncols;i++)
- {
- for(i=0;i<=nrows;i++)
- {
- sum = sum + fabs(mat[i][j]);
- if(sum>res)
- {
- res=sum;
- }
- }
- }
- return(res);
- }
|
memory.c (gestion de la mémoire dynamique)
Code :
- #include <stdio.h>
- /* dynamic memory allocation function for a matrix */
- double ** dmatrix (int nrows, int ncols)
- {
- double **mat; /* matrix */
- int i;
- mat = (double **)malloc(nrows*sizeof(double*));
- for(i=0;i<nrows;i++)
- {
- mat[i] = (double *)malloc(ncols*sizeof(double));
- }
- return mat;
- }
|
J'ai fait aussi un function.h pour les prototypes des fonctions. Est-ce que des programmeurs un peu plus expérimentés pourraient m'aider ? Merci bcp |