Buscar

cacapalavras

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);
}

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando