Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <pthread.h> /*VARIAVEL Global*/ char palavra[100][25], matriz[1000][1000]; int m, n, p; void *Verifica(void *args); int main(int argc, char *argv[]) { int i, j, k, t; //Contadores /*ABRINDO ARQUIVO*/ FILE *arq; arq = fopen(argv[1], "rt"); if(arq == NULL) printf("FALHOU\n"); /*Lendo inteiros da matriz*/ fscanf(arq,"%d",&m); fscanf(arq,"%d",&n); fscanf(arq,"%d",&p); /*LENDO A MATRIZ*/ for (i = 0; i < m; i++) fscanf(arq, "%s", matriz[i]); //Armazena as letras na matriz. /*LENDO AS PALAVRAS*/ for (i = 0; i < p; i++) fscanf(arq,"%s", palavra[i]); //Armazena as palavras que serão buscadas na matriz. /*Criando threads*/ pthread_t threads[25]; int rc; long x; for(x=0; x<p; x++){ rc = pthread_create(&threads[x], NULL, Verifica, (void *)x); if (rc){ printf("ERRO ao criar a thread: %d\n", rc); } pthread_join(threads[x], NULL); } return 0; } void *Verifica(void *threadid){ int encontrada; // SIM = 1. NÃO = 0. int i, j, k, t; k = (long)threadid; //Inicialmente a palavra é considerada Não-Encontrada. encontrada = 0; for (i = 0; i < m; i++) //Para cada linha da matriz { for (j = 0; j < n; j++) //Para cada coluna da matriz { if (palavra[k][0] == matriz[i][j]) //Se a primeira letra for encontrada { if (palavra[k][1] == matriz[i - 1][j]) //Se a segunda letra for encontrada acima (Norte) { encontrada = 1; for (t = 0; t < strlen(palavra[k]); t++) if (palavra[k][t] != matriz[i - t][j]) encontrada = 0; if (encontrada) break; } if (palavra[k][1] == matriz[i + 1][j]) //Se a segunda letra for encontrada abaixo (Sul) { encontrada = 1; for (t = 0; t < strlen(palavra[k]); t++) if (palavra[k][t] != matriz[i + t][j]) encontrada = 0; if (encontrada) break; } if (palavra[k][1] == matriz[i][j + 1]) //Se a segunda letra for encontrada a direita (Leste) { encontrada = 1; for (t = 0; t < strlen(palavra[k]); t++) if (palavra[k][t] != matriz[i][j + t]) encontrada = 0; if (encontrada) break; } if (palavra[k][1] == matriz[i][j - 1]) //Se a segunda letra for encontrada a esquerda (Oeste) { encontrada = 1; for (t = 0; t < strlen(palavra[k]); t++) if (palavra[k][t] != matriz[i][j - t]) encontrada = 0; if (encontrada) break; } if (palavra[k][1] == matriz[i - 1][j + 1]) //Se a segunda letra for encontrada acima-direita (Nordeste) { encontrada = 1; for (t = 0; t < strlen(palavra[k]); t++) if (palavra[k][t] != matriz[i - t][j + t]) encontrada = 0; if (encontrada) break; } if (palavra[k][1] == matriz[i - 1][j - 1]) //Se a segunda letra for encontrada acima-esquerda (Noroeste) { encontrada = 1; for (t = 0; t < strlen(palavra[k]); t++) if (palavra[k][t] != matriz[i - t][j - t]) encontrada = 0; if (encontrada) break; } if (palavra[k][1] == matriz[i + 1][j + 1]) //Se a segunda letra for encontrada abaixo-direita (Sudeste) { encontrada = 1; for (t = 0; t < strlen(palavra[k]); t++) if (palavra[k][t] != matriz[i + t][j + t]) encontrada = 0; if (encontrada) break; } if (palavra[k][1] == matriz[i + 1][j - 1]) //Se a segunda letra for encontrada abaixo-esquerda (Sudoeste) { encontrada = 1; for (t = 0; t < strlen(palavra[k]); t++) if (palavra[k][t] != matriz[i + t][j - t]) encontrada = 0; if (encontrada) break; } } } if (encontrada) break; } //Depois da verificação ele diz se a palavra foi encontrada ou não, então passa para a verificação da próxima palavra. if (encontrada) printf("Palavra: %s\nENCONTRADA\nLinha:%d Coluna:%d\n", palavra[k],i,j); pthread_exit(NULL); }
Compartilhar