/************** Programa Principal **************/ main (int argc, char **argv) { /***** Declarações *****/ FILE *fp; int i, j; int numMatrizes; //Número de matrizes Matriz *matriz; //Vetor de matrizes Matriz matrizFinal; /***** Abre arquivo *****/ if (argv[1] != NULL) { fp = fopen(argv[1], "r+"); } else { fp = fopen("matriz.dat", "r+"); } /***** Programa *****/ leArquivo(matriz, fp, numMatrizes); while (i <= numMatrizes) { inverteMatriz(matriz[j]); multiplicaMatrizes(matriz[i], matriz[j], matrizFinal); imprimeArquivo (matrizFinal); } }
int main(){ FILE *arq; // ponteiro para arquivo int qtdAlunos; arq = fopen("teste.txt","w"); //abre arquivo qtdAlunos = defineQtdAlunos(); // define a quantidade de alunos (linhas) a serem escritos no arquivo escreveArquivo(arq, qtdAlunos); // escreve dados no arquivo fclose(arq); // fecha arquivo leArquivo(arq); // lê dados do arquivo return 0; }
int main() { float resultado = 0; float matriz[2][30]; int i = 0; leArquivo(matriz, &i); int x,y; for(x = 0; x<i; x++){ for(y = 0; y<2; y++) { printf("%f ", matriz[y][x]); } printf("\n"); } resultado = M_simpson_h3(matriz, i); printf("Resultado: "); printf("%f ", resultado); return EXIT_SUCCESS; }
int main(){ colocaAcentos(); Pilha* pilhasNormais[MAX_PILHAS_NORMAIS]; Pilha* pilhasSuperiorDireita[MAX_PILHAS_SUPERIOR_DIREITA]; Carta cartasSuperiorEsquerda[MAX_CARTAS_SUPERIOR_ESQUERDA]; inicializaCartasComValorPadrao(cartasSuperiorEsquerda); criaPilhas(pilhasNormais, MAX_PILHAS_NORMAIS); criaPilhas(pilhasSuperiorDireita, MAX_PILHAS_SUPERIOR_DIREITA); leArquivo(pilhasNormais); unsigned short int jogadorVenceu = 0; char mensagemErro[100] = ""; unsigned short int jogadaJogador = 0; unsigned short int colunasFormadas = 0; while(!jogadorVenceu){ imprimeFreecell(pilhasNormais, pilhasSuperiorDireita, cartasSuperiorEsquerda); imprimeQuantidadeJogadasFeitas(jogadaJogador); char coluna_origem; char coluna_destino; mostraMensagemErro(mensagemErro); pedeMovimentoParaUsuario(&coluna_origem, &coluna_destino); Carta cartaColunaOrigem; short int indiceColunaOrigem = indiceLetra(coluna_origem); short int corCartaColunaOrigem; Carta cartaColunaDestino; short int indiceColunaDestino = indiceLetra(coluna_destino); short int corCartaColunaDestino; if(indiceColunaOrigem == -1 || indiceColunaDestino == -1){ strcpy(mensagemErro, "Voce inseriu uma coluna fora dos limites. Lembre-se: de [0 - 3], [X - Z], [A - H]"); } else { short int ondeColunaOrigemEsta = checaQualPilhaColunaEsta(coluna_origem); short int ondeColunaDestinoEsta = checaQualPilhaColunaEsta(coluna_destino); // [A-H] => [W-Z] if(ondeColunaOrigemEsta == 1 && ondeColunaDestinoEsta == 0){ movimentaNormalParaSuperiorEsquerda(cartasSuperiorEsquerda, pilhasNormais, indiceColunaOrigem, indiceColunaDestino, mensagemErro, &jogadaJogador); } // [A-H] => [A-H] else if(ondeColunaDestinoEsta == 1 && ondeColunaOrigemEsta == 1){ movimentaNormalParaNormal(pilhasNormais, indiceColunaOrigem, indiceColunaDestino, mensagemErro, &jogadaJogador); } // [W-Z] => [A-H] else if(ondeColunaOrigemEsta == 0 && ondeColunaDestinoEsta == 1){ movimentaSuperiorEsquerdaParaNormal(cartasSuperiorEsquerda, pilhasNormais, indiceColunaOrigem, indiceColunaDestino, mensagemErro, &jogadaJogador); } // [W-Z] => [W-Z] else if(ondeColunaDestinoEsta == 0 && ondeColunaOrigemEsta == 0){ movimentaSuperiorEsquerdaParaSuperiorEsquerda(cartasSuperiorEsquerda, indiceColunaOrigem, indiceColunaDestino, mensagemErro, &jogadaJogador); } // [W-Z] => [0-3] else if(ondeColunaOrigemEsta == 0 && ondeColunaDestinoEsta == 2){ movimentaSuperiorEsquerdaParaSuperiorDireita(cartasSuperiorEsquerda, pilhasSuperiorDireita, indiceColunaOrigem, indiceColunaDestino, mensagemErro, &jogadaJogador, &colunasFormadas); } // [A-H] => [0-3] else if(ondeColunaOrigemEsta == 1 && ondeColunaDestinoEsta == 2){ movimentaNormalParaSuperiorDireita(pilhasNormais, pilhasSuperiorDireita, indiceColunaOrigem, indiceColunaDestino, mensagemErro, &jogadaJogador, &colunasFormadas); } // Checa se o jogador formou as quatro pilhas do canto superior direito if(checaJogadorFormouTodasPilhas(colunasFormadas)){ jogadorVenceu = 1; } } } imprimeFreecell(pilhasNormais, pilhasSuperiorDireita, cartasSuperiorEsquerda); imprimeMensagemVencedor(jogadaJogador); pausaTela(); liberaPilhas(pilhasNormais, MAX_PILHAS_NORMAIS); liberaPilhas(pilhasSuperiorDireita, MAX_PILHAS_SUPERIOR_DIREITA); return 0; }
int main(int argc, char const *argv[]) { FILE *fp = fopen("googlebot.txt", "r"); LISTA *lista = criar_lista(); int oper, codigo, relevancia, i; char *palavra, *nomeSite, *link; leArquivo(fp, lista); fclose(fp); if(fp != NULL){ do{ printf("1 - Inserir site\n2 - Inserir palavra chave\n3 - Remover um site\n4 - Atualizar relevancia\n"); printf("5 - Mostrar lista\n6 - Busca por palavra chave\n7 - Sugestoes de sites\n8 - Sair\n\n"); scanf("%d", &oper); switch(oper){ case 1: //Inserir um novo site na lista do{ printf("Codigo: "); scanf("%d", &codigo); if(codigo < 0 || codigo > 9999) printf("Codigo invalido. Digite um valor entre 0 e 9999\n"); }while(codigo < 0 || codigo > 9999); getchar(); printf("Nome Site: "); nomeSite = lerString(); if(strlen(nomeSite) > TAM-1) nomeSite[TAM-1] = '\0'; do{ printf("Relevancia: "); scanf("%d", &relevancia); if(relevancia < 0 || relevancia > 1000) printf("Relevancia invalido. Digite um valor entre 0 e 1000\n"); }while(relevancia < 0 || relevancia > 1000); getchar(); printf("Link: "); link = lerString(); if(strlen(link) > N-1) link[N-1] = '\0'; if(!insere_site( lista, criar_no(criar_item(codigo, nomeSite, relevancia, link)))){ printf("Erro ao inserir site!\n"); } free(link); free(nomeSite); break; case 2: //Inserir palavra chave do{ printf("Codigo: "); scanf("%d", &codigo); if(codigo < 0 || codigo > 9999) printf("Codigo invalido. Digite um valor entre 0 e 9999\n"); }while(codigo < 0 || codigo > 9999); getchar(); printf("Palavra chave: "); palavra = lerString(); if(strlen(palavra) > TAM-1) palavra[TAM-1] = '\0'; for(i=0; i < strlen(palavra); i++){ palavra[i] = ctolower(palavra[i]); } if(!insere_chave(lista, codigo, palavra)){ printf("Erro ao inserir palavra chave!\n"); } free(palavra); break; case 3: //Remover um site do{ printf("Codigo: "); scanf("%d", &codigo); if(codigo < 0 || codigo > 9999) printf("Codigo invalido. Digite um valor entre 0 e 9999\n"); }while(codigo < 0 || codigo > 9999); if(!remove_site(lista, codigo)){ printf("Erro ao remover site!\n"); } break; case 4: //Atualizar relevancia do{ printf("Codigo: "); scanf("%d", &codigo); if(codigo < 0 || codigo > 9999) printf("Codigo invalido. Digite um valor entre 0 e 9999\n"); }while(codigo < 0 || codigo > 9999); do{ printf("Relevancia: "); scanf("%d", &relevancia); if(relevancia < 0 || relevancia > 1000) printf("Relevancia invalido. Digite um valor entre 0 e 1000\n"); }while(relevancia < 0 || relevancia > 1000); atualiza_relevancia(lista, codigo, relevancia); break; case 5: //Mostrar a lista imprime_lista(lista); break; case 6: //Busca por palavra chave getchar(); printf("Palavra chave: "); palavra = lerString(); if(strlen(palavra) > TAM-1) palavra[TAM-1] = '\0'; for(i=0; i < strlen(palavra); i++){ palavra[i] = ctolower(palavra[i]); } busca_palavra(lista, palavra); free(palavra); break; case 7: //Sugestao do site getchar(); printf("Palavra chave: "); palavra = lerString(); if(strlen(palavra) > TAM-1) palavra[TAM-1] = '\0'; for(i=0; i < strlen(palavra); i++){ palavra[i] = ctolower(palavra[i]); } sugestao_site(lista, palavra); free(palavra); break; default: break; } }while(oper != 8); finaliza_lista(&lista); } else { printf("Could not open googlebot.txt\n"); } return 0; }
int main(int argc, char *argv[]){ clock_t tempoInicialGeral, tempoFinalGeral, tempoInicialLU, tempoFinalLU; tempoInicialGeral = clock(); int i; int linhas = atoi(argv[2]); int colunas = linhas+1; double *matriz; double *matrizU; double *matrizL; matrizU = malloc(sizeof(double)*linhas*linhas-1); matrizL = malloc(sizeof(double)*linhas*linhas-1); int myid, numprocs; MPI_Status status; MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD,&numprocs); MPI_Comm_rank(MPI_COMM_WORLD,&myid); int escravos = numprocs-1; /*operacoes referentes ao broadcast*/ int destinos[escravos]; for(i=1; i< numprocs; i++){ destinos[i-1] = i; } MPI_Group grupoGlobal; MPI_Comm_group(MPI_COMM_WORLD, &grupoGlobal); MPI_Group grupoEscravos; MPI_Group_incl(grupoGlobal, (escravos), destinos, &grupoEscravos); MPI_Comm commEscravos; MPI_Comm_create(MPI_COMM_WORLD, grupoEscravos, &commEscravos); int totalElementos = linhas*linhas; int mestre = 0; int linhaPivo; int inicio, fim = 0; int qtdProcs; if(myid == mestre){ matriz = leArquivo(argv[1],linhas,colunas); matrizU = inicializaMatrizU(matriz, linhas); matrizL = inicializaMatrizL(matriz, linhas); //novaU = inicializaMatrizU(matriz, linhas); //novaL = inicializaMatrizU(matriz, linhas); MPI_Bcast(matrizU,totalElementos,MPI_DOUBLE,mestre,MPI_COMM_WORLD); MPI_Bcast(matrizL,totalElementos,MPI_DOUBLE,mestre,MPI_COMM_WORLD); int linhasConsideradas = linhas - 1; int divisao; int j; tempoInicialLU = clock(); for(i=0;i<(linhas-1);i++){ divisao = linhasConsideradas/escravos; qtdProcs = (escravos>=linhasConsideradas?linhasConsideradas:escravos); linhaPivo = i; while(matrizU[linhaPivo*linhas+i] == 0){ linhaPivo--; } if (divisao == 0){ inicio = i+1; } // MPI_Bcast(&linhaPivo,1,MPI_INT,mestre,MPI_COMM_WORLD); // MPI_Bcast(&i,1,MPI_INT,mestre,MPI_COMM_WORLD); // MPI_Bcast(&qtdProcs,1,MPI_INT,mestre,MPI_COMM_WORLD); for(j=1;j<=qtdProcs;j++){ MPI_Send(&linhaPivo,1,MPI_INT,j,1,MPI_COMM_WORLD); MPI_Send(&i,1,MPI_INT,j,2,MPI_COMM_WORLD); MPI_Send(&qtdProcs,1,MPI_INT,j,3,MPI_COMM_WORLD); if (divisao == 0){ fim = inicio; }else{ inicio = (j-1) * divisao + i; inicio++; fim = j*divisao +i; } if (j == qtdProcs){ fim = linhas-1; } MPI_Send(&fim,1,MPI_INT,j,4,MPI_COMM_WORLD); MPI_Send(&inicio,1,MPI_INT,j,5,MPI_COMM_WORLD); inicio++; } // MPI_Recv(matrizU,totalElementos,MPI_DOUBLE,MPI_ANY_SOURCE,1,MPI_COMM_WORLD, &status); // MPI_Recv(matrizL,totalElementos,MPI_DOUBLE,MPI_ANY_SOURCE,1,MPI_COMM_WORLD, &status); linhasConsideradas--; } tempoFinalLU=clock(); MPI_Recv(matrizU,totalElementos,MPI_DOUBLE,MPI_ANY_SOURCE,1,MPI_COMM_WORLD, &status); MPI_Recv(matrizL,totalElementos,MPI_DOUBLE,MPI_ANY_SOURCE,1,MPI_COMM_WORLD, &status); //Encerra outros processos linhaPivo = -1; //MPI_Bcast(&linhaPivo,1,MPI_INT,mestre,MPI_COMM_WORLD); for(i=1;i<=escravos;i++){ MPI_Send(&linhaPivo,1,MPI_INT,i,1,MPI_COMM_WORLD); } double *vetorY = malloc(sizeof(double)*linhas); double *incognitas = malloc(sizeof(double)*linhas); double *resultados = extraiResultados(matriz,linhas,colunas); calculaY(resultados,matrizL,vetorY, linhas); calculaIncognitas(vetorY,matrizU,incognitas, linhas, linhas); verificaCorretude(matrizL, matrizU, matriz,linhas); gravaResposta(incognitas,argv[2]); tempoFinalGeral = clock(); printf("Tempo de execucao da fatoracao LU: %.8lf segundos \n",(double)(tempoFinalLU - tempoInicialLU)/CLOCKS_PER_SEC); printf("Tempo de execucao total: %.8lf segundos \n",(double)(tempoFinalGeral - tempoInicialGeral)/CLOCKS_PER_SEC); }else{ MPI_Bcast(matrizU,totalElementos,MPI_DOUBLE,mestre,MPI_COMM_WORLD); MPI_Bcast(matrizL,totalElementos,MPI_DOUBLE,mestre,MPI_COMM_WORLD); int colunaAtual; while(1){ MPI_Recv(&linhaPivo,1,MPI_INT,mestre,1,MPI_COMM_WORLD,&status); if (linhaPivo == -1){ break; } MPI_Recv(&colunaAtual,1,MPI_INT,mestre,2,MPI_COMM_WORLD,&status); MPI_Recv(&qtdProcs,1,MPI_INT,mestre,3,MPI_COMM_WORLD,&status); MPI_Recv(&fim,1,MPI_INT,mestre,4,MPI_COMM_WORLD, &status); MPI_Recv(&inicio,1,MPI_INT,mestre,5,MPI_COMM_WORLD, &status); //MPI_Recv(&matrizU[inicio*linhas],((fim-inicio+1)*linhas),MPI_DOUBLE,mestre,1,MPI_COMM_WORLD, &status); //MPI_Recv(&matrizL[inicio*linhas],((fim-inicio+1)*linhas),MPI_DOUBLE,mestre,1,MPI_COMM_WORLD, &status); calculaMatrizLU(matrizL, matrizU, linhas, linhaPivo, inicio, fim, colunaAtual); //momento de envio para todos int i; for (i = 0; i < qtdProcs; i++){ int posInicial = inicio*linhas; int qtdeEnviados = ((fim-inicio+1)*linhas); MPI_Bcast(&posInicial,1,MPI_INT,i,commEscravos); MPI_Bcast(&qtdeEnviados,1,MPI_INT,i,commEscravos); MPI_Bcast(&matrizU[posInicial],qtdeEnviados,MPI_DOUBLE,i,commEscravos); MPI_Bcast(&matrizL[posInicial],qtdeEnviados,MPI_DOUBLE,i,commEscravos); } if (myid == 1 && qtdProcs == 1){ MPI_Send(matrizU, totalElementos, MPI_DOUBLE, mestre, 1, MPI_COMM_WORLD); MPI_Send(matrizL, totalElementos, MPI_DOUBLE, mestre, 1, MPI_COMM_WORLD); } //MPI_Send(&fim,1,MPI_INT,mestre,1,MPI_COMM_WORLD); //MPI_Send(&inicio,1,MPI_INT,mestre,1,MPI_COMM_WORLD); //MPI_Send(&matrizU[inicio*linhas],((fim-inicio+1)*linhas),MPI_DOUBLE,mestre,1,MPI_COMM_WORLD); //MPI_Send(&matrizL[inicio*linhas],((fim-inicio+1)*linhas),MPI_DOUBLE,mestre,1,MPI_COMM_WORLD); } } MPI_Finalize(); }