Inmultire Matrice in C
Inmultire Matrice in C
h>
#include<stdlib.h>
#include <errno.h>
#include <string.h>
struct matrix {
int l;
int c;
double **data;
};
}
free((*m)->data);
}
free(*m);
}
}
if(m != NULL && m->l > 0 && m->l < 30 && m->c > 0 && m->c < 30)
{
l = m->l;
c = m->c;
printf("Numarul de linii = %d \nNumarul de coloane = %d ",l,c);
for(i = 0; i < l; i++)
{
printf("\n");
for(j = 0; j < c; j++)
{
d = m->data[i][j];
printf("%4.2lf ", d);
}
}
}
else printf("Nu sunt date de afisat\n");
}
void allocateMemory(struct matrix **m, int linii, int coloane){
int i;
*m = (struct matrix*)malloc(sizeof(*m));
(*m)->l = linii;
(*m)->c = coloane;
(*m)->data = (double**)malloc(linii * sizeof(double*));
for(i = 0; i < linii; i++)
{
(*m)->data[i] = (double*)calloc(coloane, sizeof(double));
}
}
if(in == NULL)
{
errnum = errno;
fprintf(stderr, "Error opening file %s : %s\n",file,
strerror( errnum ));
*m = NULL;
return;
}
fgets(lines, sizeof lines, in); // citesc prima linie pe care sunt salvate
nr de linii si nr de coloane
if ( ( lines[0] < '0' || lines[0] > '9') && lines[0] != '\n' )
{
printf("\n In fisierul %s, sunt si alte caractere\n", file);
*m = NULL;
return;
}
i = strtol(lines, &aux, 10);
linii = i;
strcpy(lines,aux);
// printf("%d '%s'", i, lines);
if( ( lines[0] != ' ' || lines[1] < '0' || lines[1] > '9') && lines[0] !=
'\n')
{
printf("\n In fisierul %s, sunt si alte caractere \n", file);
*m = NULL;
return;
}
while(lines[0] != '\n')
{
if(j == col)
{
printf("\nIn fisierul %s, pe linia %d, sunt mai multe elemente
decat este declarat la inceput ca ar trebui sa fie.\n",file, i);
freeSpace(m);
*m = NULL;
return;
}
d = strtod(lines, &aux);
strcpy(lines, aux);
if((lines[0] != ' ' || lines[1] < '0' || lines[1] > '9') &&
lines[0] != '\n' && lines[1] != '-' && lines[1] != '+' && lines[1] != '.')
{
if ( lines[0] == ' ' && (lines[1] =='-' || lines[1] == '+') &&
lines[2] != '.' )
{
printf("\n In fisierul %s, sunt si alte caractere
%d'%s'\n", file,i, lines);
freeSpace(m);
*m = NULL;
return;
}
}
(*m)->data[i-1][j] = d;
j++;
}
fclose(in);
if(out == NULL)
{
errnum = errno;
printf("\nError opening file %s : %s\n",fisier, strerror( errnum ));
exit(0);
}
l = m->l;
fprintf(out, "%d ", l);
c = m->c;
fprintf(out, "%d\n", c);
for(i = 0; i < l; i++)
{
for(j = 0; j < c; j++)
{
d = m->data[i][j];
fprintf(out, "%.2lf", d);
if(j < c-1)
{
fprintf(out, " ");
}
else
fprintf(out,"\n");
}
}
fclose(out);
}
void multiply(struct matrix *mat1, struct matrix *mat2, struct matrix **rez)
{
int i, j, k, l1, c1, c2;
l1 = mat1->l;
c1 = mat1->c;
c2 = mat2->c;
allocateMemory(rez,l1,c2);
display(*rez);
}
saveFile(argv[3], rezultat);
freeSpace(&mat1);
freeSpace(&mat2);
freeSpace(&rezultat);
return 0;
}