All pastes #885498 Raw Edit

Miscellany

public text v1 · immutable
#885498 ·published 2008-01-30 22:57 UTC
rendered paste body
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

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 %s\n", direccion);
	if (!in)
	{
		printf("ERROR ABRIENDO ARCHIVO\n");
		fclose(in);
		return 0;
	}
	else
	{
		printf("ANTES DEL FGETS");
		fgets(cadena, 81, in);
		printf("cadena = %s", cadena);
		//printf("ENTRO ELSE, LUESGO DE FGETS");
		if(fgets(cadena, 81, in) != NULL)
		{
			printf("cadena otra vez %s", cadena);
			if(obtenerDimensiones(cadena, f, c))
			{
				matriz = (double *)malloc((size_t)(*f)*(*c)*sizeof(double));
				for(i = 0; i < (*f)*(*c); i++)
				{
					if(fgets(cadena, 81, in) == NULL)
					{
						break;
					}
					if(cadena != NULL) matriz[i] = atof(cadena);
				}
			}
			else
			{
				fclose(in);
				return 0;
			}
			//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;
		}
	}
	/*for(i = 0; i < (*f)*(*c); i++)
	{
		printf("%lf ", matriz[i]);
	}*/
	free(cadena);
	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;
}