int main(int argc, char **argv) { // Verificando quantidade de arquivos na chamada de execução no terminal. if (argc != 3) { printf("ERROR!\nQuantidade de arquivos diferente do esperado.\n"); } else { Mat *matrizA = NULL; Mat *matrizB = NULL; Mat *matrizC = NULL; matrizA = busca_arquivo(matrizA, argv[1]); matrizB = busca_arquivo(matrizB, argv[2]); matrizC = soma_matriz(matrizA, matrizB); desaloca_matriz(matrizA); desaloca_matriz(matrizB); imprime_matriz(matrizC); desaloca_matriz(matrizC); } return 0; }
int main(int argc, char *argv[]) { // Declara as variáveis char * inputFileName = argv[1]; char * outputFileName = argv[2]; int ** matrizA, ** matrizB, ** matrizResult; int numInstancias, numLinhasA, numLinhasB, numLinhasResult, numColunasA, numColunasB, numColunasResult, i, j, k, l, m; // Abrir arquivo de entrada FILE * inputFileOpen; if ((inputFileOpen = fopen(inputFileName, "r")) == NULL) { printf("Nao foi possivel abrir o arquivo.\n"); } else { printf("Aberto arquivo de entrada %s \n", inputFileName); } // Abrir arquivo de saída FILE * outputFileOpen; if ((outputFileOpen = fopen(outputFileName, "w")) == NULL) { printf("Nao foi possivel abrir o arquivo.\n"); } else { printf("Aberto arquivo de entrada %s \n", outputFileName); } // Lê o número de instâncias fscanf(inputFileOpen, "%d", &numInstancias); // Escreve o número de instâncias no arquivo de saída fprintf(outputFileOpen, "%d\n", numInstancias); for(m = 0; m < numInstancias; m++) { // Lê linhas e colunas da matriz A fscanf(inputFileOpen, "%d", &numLinhasA); fscanf(inputFileOpen, "%d", &numColunasA); // Preenche a matriz A matrizA = preenche_matriz(inputFileOpen, numLinhasA, numColunasA); // Lê linhas e colunas da matriz B fscanf(inputFileOpen, "%d", &numLinhasB); fscanf(inputFileOpen, "%d", &numColunasB); // Preenche a matriz B matrizB = preenche_matriz(inputFileOpen, numLinhasB, numColunasB); // Seta linhas e colunas da matriz resultante numLinhasResult = numLinhasA * numLinhasB; numColunasResult = numColunasA * numColunasB; // Aloca a matriz resultante matrizResult = aloca_matriz(numLinhasResult, numColunasResult); // Preenche a matriz resultante (Produto de Kronecker) for (i = 0; i < numLinhasA; ++i) { for (j = 0; j < numColunasA; ++j) { for (k = 0; k < numLinhasB; ++k) { for (l = 0; l < numColunasB; ++l) { matrizResult[i * numLinhasB + k][j * numColunasB + l] = matrizA[i][j] * matrizB[k][l]; } } } } // Libera as matrizes já utilizadas desaloca_matriz(matrizA, numLinhasA); desaloca_matriz(matrizB, numLinhasB); // Escreve o número de linhas e colunas no arquivo de saída fprintf(outputFileOpen, "%d ", numLinhasResult); fprintf(outputFileOpen, "%d\n", numColunasResult); // Escreve a matriz resultante no arquivo de saída for(i = 0; i < numLinhasResult; i++) { for(j = 0; j < numColunasResult; j++) { fprintf(outputFileOpen,"%d ", matrizResult[i][j]); } fprintf(outputFileOpen, "\n"); } // Libera a matriz resultante desaloca_matriz(matrizResult, numLinhasResult); } // Retorna 0 se conseguiu fechar o arquivo com sucesso if(fclose(inputFileOpen) == 0) { printf("%s fechado com sucesso\n", inputFileName); } if(fclose(outputFileOpen) == 0) { printf("%s fechado com sucesso\n", outputFileName); } return 0; }