#include #include #include double *multmatriz(double *matriz1, int f1, int c1, double *matriz2, int f2, int c2, int *fr, int *cr) { int i,j,k; double suma; double *matriz_r = (double *)malloc((size_t)(f1*c2*sizeof(double))); for(i = 0; i < f1; i++) { for(j = 0; j < c2; j++) { suma = 0; for(k = 0; k < c1; k++) { suma += matriz1[c1*i+k]*matriz2[c1*k+j]; } matriz_r[c2*i + j] = suma; } } *cr = c2; *fr = f1; return matriz_r; } int obtenerDimensiones(char *cad, int *f, int *c) { int i,j; char *cadaux = NULL, *cadaux2 = NULL; //printf("%s", cad); for(i = 0; i < strlen(cad); i++) { //printf("%c", cad[i]); cadaux2 = NULL; if(cad[i] != ' ' && cad[i] != '\0') { //printf("entro al if"); sprintf(cadaux2, "%c", cad[i]); cadaux = strcat(cadaux, cadaux2); //printf("cadaux = %s\n", cadaux); } else break; } if(cadaux == NULL) return 0; else { *c = atoi(cadaux); cadaux = NULL; cadaux2 = NULL; for(j = i+1; j < strlen(cad); j++) { cadaux2 = NULL; if(cad[i] != ' ' && cad[i] != '\0') { sprintf(cadaux2, "%c", cad[i]); cadaux = strcat(cadaux, cadaux2); } else break; } if(cadaux == NULL) return 0; else { *f = atoi(cadaux); free(cadaux); } } return 1; } int leerMatriz(char *direccion, double *matriz, int *f, int *c) { char *cadena; int i, n; FILE *in = fopen(direccion, "r"); printf("\nENTRO LEER MATRIZ\n"); if (!in) { printf("ERROR ABRIENDO ARCHIVO\n"); fclose(in); return 0; } else { printf("ANTES DEL FGETS"); fgets(cadena, 81, in); //printf("ENTRO ELSE, LUESGO DE FGETS"); if(fgets(cadena, 81, in) != NULL) { //printf("%s", cadena); //obtenerDimensiones(cadena, f, c); //printf("\nTamaƱo matriz c=%d f=%d\n", c, f); /*matriz = (double *)malloc((size_t)(*f)*(*c)*sizeof(double)); for(i = 0; i < (*f)*(*c); i++) { if(fscanf(in, "%lf\n", matriz[i]) == EOF) { printf("ERROR EN EL FORMATO DEL ARCHIVO\n"); fclose(in); return 0; } }*/ } else { printf("ERROR EN EL FORMATO DEL ARCHIVO\n"); fclose(in); return 0; } } fclose(in); return 1; } int escribirMatriz(char *direccion, double *matriz, int f, int c) { FILE *out = fopen(direccion, "w"); int i; if(!out) { printf("ERROR AL CREAR EL ARCHIVO\n"); fclose(out); return 0; } else { fprintf(out, "MATRIZ RESULTANTE\n"); fprintf(out, "%d %d\n", c, f); for(i = 0; i < f*c; i++) { if(!fprintf(out, "%lf\n", matriz[i])) { printf("SE PRODUJO UN ERROR AL ESCRIBIR EN EL ARCHIVO\n"); fclose(out); return 0; } } } fclose(out); return 1; } int main(int argc, char *argv[]) { int f1, c1, f2, c2, fr, cr; double *m1, *m2, *mr; //printf("%s\n", argv[0]); if(leerMatriz(argv[1], m1, &f1, &c1) && leerMatriz(argv[2], m2, &f2, &c2)) { /*printf("\nLEYO LAS MATRICES\n"); if(c1 == f2) { mr = multmatriz(m1, f1, c1, m2, f2, c2, &fr, &cr); if(escribirMatriz("resultado.txt", mr, fr, cr)) { printf("EL ARCHIVO CON LA MATRIZ RESULTANTE HA SIDO CREADO\n"); } } else { printf("ERROR, EL NUMERO DE COLUMNAS DE LA PRIMERA MATRIZ DEBE SER IGUAL AL NUMERO DE FILAS DE LA SEGUNDA MATRIZ\n"); } free(m1); free(m2); free(mr);*/ } return 0; }