1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
| #include <stdio.h>
#include <stdlib.h>
#include <omp.h>
#include <time.h>
#include <string.h>
int main()
{
long int N;
double* A;
unsigned long int i,z,j,signe,d,max,min,NNZ;
FILE *fp;
printf("donner la taille de matrice :");
scanf("%d",&N);
// Allocations
A = (double*) malloc(N*N*sizeof(double)) ;
/*Cette fonction permet de générer aléatoirement une matrice quelconque*/
/*--------------------------------*/
/*Mise à zéro de la matrice*/
for(i=0;i<N;i++)
for(j=0;j<N;j++)
{
A[i*N+j]=0;
}
/*On génére, d'abord,tous les éléments de la diagonale de la matrice aléatoirement
afin d'éviter des lignes ou des colonnes vides.*/
for(i=0;i<N;i++)
{
A[i*N+i]=(double)RAND_MAX/(rand()+1);
signe=rand();
if(signe<(RAND_MAX/2))
A[i*N+i]*=(-1);
}
/*Génération de la matrice.*/
d=NNZ-N;/*calcul du nombre d'éléments non nuls restants*/
for(z=0;z<d;z++)
/*Répéter la génération NNZ fois(Nombre d'élèments non nuls)- N fois(Nombre d'éléments déjà placé à la diagonale).*/
{ do
{/*Générer des indices colonnes et des indices lignes dont l'élèment correspondant
est nul pour éviter la génération du même élément plusieurs fois */
i=(int)(((float)rand()/RAND_MAX)*(N-1));
j=(int)(((float)rand()/RAND_MAX)*(N-1));
} while(A[i*N+j]!=0);
/*Génération de l'élèment ayant les indices générés.*/
A[i*N+j]=((double)RAND_MAX)/(rand()+1);
signe=rand();
if(signe<(RAND_MAX/2))
A[i*N+j]*=(-1);
}
/*------------------------------------*/
fp = fopen("matrice.txt","w+t");
fprintf(fp," %d \n", N);
for(i=0;i< N;i++)
{
for(j=0;j<N;j++)
{
fprintf(fp,"%f ", A[i,j]);
}
fprintf(fp," \n");
}
} |
Partager