Exemplo n.º 1
0
/**************
	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);
	}
}
Exemplo n.º 2
0
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;
}
Exemplo n.º 4
0
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;
}
Exemplo n.º 5
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;
}
Exemplo n.º 6
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();
}