Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Bibliotecas
- #include <stdlib.h>
- #include <stdio.h>
- #include <string.h>
- #include <ctype.h>
- #include <time.h>
- // Constantes Globais
- #define maxLin 301 //definindo quantidade máxima de linhas do caça palavras
- #define maxCol 200 //definindo quantidade máxima de colunas do caça palavras
- // Protótipos
- void coletaInfo (int *lin, int *col, char M[maxLin][maxCol]);
- void geraMatrizAleatoria(int lin, int col, char M[maxLin][maxCol]);
- void imprimeMatriz(int lin, int col, char M[maxLin][maxCol]);
- void listaAleatoria(int lin, int col, char M[maxLin][maxCol]);
- void recebeMatriz(int* linhas, int* colunas, char matriz[maxLin][maxCol]);
- void recebePalavras(int* numPalavras, char palavras[60][50]);
- void temPalavras(int linhas, int colunas, char M[maxLin][maxCol], int numPalavras, char palavras[50][50]);
- // Corpo do programa
- int main() {
- //inicialização das variáveis
- srand(time(NULL));
- int numPalavras;
- int lin=0;
- int col=0;
- char M[maxLin][maxCol];
- char resposta[3];
- char lista[50][50];
- // Condicional para saber o que o usuário deseja
- // Gerar matriz aleatoria
- printf("Deseja gerar uma matriz aleatoriamente? (Digite S para confirmar ou N para negar) ");
- scanf("%s", resposta);
- while(1) {
- resposta[0]=toupper(resposta[0]);
- if(resposta[0]=='S' || resposta[0]=='N') break;
- else {
- printf("Resposta invalida, tente novamente! ");
- scanf("%s", resposta);
- }
- }
- if(resposta[0] == 'S')
- {
- coletaInfo(&lin, &col, M);
- geraMatrizAleatoria(lin, col, M);
- imprimeMatriz(lin, col, M);
- }
- else {
- // Gerar matriz atraves de arquivo
- printf("\nDeseja gerar uma matriz atraves de um arquivo pre-formatado 'Matriz.txt'? (Digite S para confirmar ou N para negar) ");
- scanf("%s", resposta);
- while(1) {
- resposta[0]=toupper(resposta[0]);
- if(resposta[0]=='N') {
- printf("\nNenhuma opcao de geracao de matriz selecionada. Fechando o programa...\n\n");
- return 0;
- }
- else if(resposta[0]=='S') break;
- else {
- printf("Resposta invalida, tente novamente! ");
- scanf("%s", resposta);
- }
- }
- // Obtendo a matriz por arquivo
- FILE *arquivo;
- arquivo = fopen("Matriz.txt", "r");
- if (arquivo == NULL) {
- printf("Arquivo nao encontrado...\nFechando o programa!...\n");
- return 0;
- }
- fscanf(arquivo, "%d", &lin);
- fgetc(arquivo);
- fscanf(arquivo, "%d", &col);
- printf("linhas : %d\n", lin);
- printf("colunas : %d\n", col);
- int i, j;
- for (i = 0; i < lin; ++i)
- for (j = 0; j < col; ++j) {
- fscanf(arquivo, " %c", &M[i][j]);
- }
- printf("\nMatriz:\n\n");
- for (i = 0; i < lin; ++i) {
- for (j = 0; j < col; ++j)
- printf("%c ", M[i][j]);
- printf("\n");
- }
- }
- // Gerar ista de palavras aleatoria
- printf("\nDeseja gerar uma lista de palavras aleatoriamente? (Digite S para confirmar ou N para negar) ");
- scanf("%s", resposta);
- while(1) {
- resposta[0]=toupper(resposta[0]);
- if(resposta[0]=='S' || resposta[0]=='N') break;
- else {
- printf("Resposta invalida, tente novamente! ");
- scanf("%s", resposta);
- }
- }
- if(resposta[0] == 'S')
- {
- listaAleatoria(lin, col, M);
- printf("\nEncerrando o programa...\n\n");
- return 0;
- }
- else {
- // Gerar lista de palavras atraves de arquivo
- printf("\nDeseja gerar uma lista de palavras atraves de um arquivo pre-formatado 'Palavras.txt'?\n(Digite S para confirmar ou N para negar) ");
- scanf("%s", resposta);
- while(1) {
- resposta[0]=toupper(resposta[0]);
- if(resposta[0]=='S' || resposta[0]=='N') break;
- else {
- printf("Resposta invalida, tente novamente! ");
- scanf("%s", resposta);
- }
- }
- if(resposta[0]=='N') {
- printf("\nNenhuma opcao de lista de palavras selecionada. Fechando o programa...\n\n");
- return 0;
- }
- else if(resposta[0]=='S')
- recebePalavras(&numPalavras, lista);
- printf("Deseja verificar se as palavras estão na matriz?\n(Digite S para confirmar ou N para negar) ");
- scanf("%s", resposta);
- while(1) {
- resposta[0]=toupper(resposta[0]);
- if(resposta[0]=='S' || resposta[0]=='N') break;
- else {
- printf("Resposta invalida, tente novamente! ");
- scanf("%s", resposta);
- }
- }
- if(resposta[0]=='N') {
- printf("\nEncerrando o programa...\n\n");
- return 0;
- }
- else if(resposta[0]=='S') {
- temPalavras(lin, col, M, numPalavras, lista);
- printf("Fechando o programa...\n");
- }
- }
- system("pause");
- return 0;
- }
- // Objetivo: Coletar irformações sobre a matriz
- // Parâmetros Formais
- // - Lin: Número de linhas da matriz
- // - Col: Número de colunas da matriz
- void coletaInfo (int *lin, int *col, char M[maxLin][maxCol])
- {
- //inicialização das variáveis
- int i, j;
- printf("Informe o numero de linhas da seu caça palavras. No maximo 300\n");
- //loop criado para forçar o usário a atender as especificações
- do {
- scanf("%d", lin);
- if (*lin > maxLin)
- printf("Por favor insira um numero de linhas valido\n");
- } while (*lin > maxLin);
- printf("Informe o numero de colunas da seu caça palavras. No maximo 200\n");
- //loop criado para forçar o usário a atender as especificações
- do {
- scanf("%d", col);
- if (*col > maxCol)
- printf("Por favor insira um numero de colunas valido\n");
- } while (*col > maxCol);
- }
- // Objetivo: Gerar uma matriz com caracteres aleatórios
- // Parâmetros Formais
- // - Lin: Número de linhas da matriz
- // - Col: Número de colunas da matriz
- void geraMatrizAleatoria (int lin, int col, char M[maxLin][maxCol]){
- //gerando matriz aleatória
- int i, j;
- for (i = 0; i <= lin; i++)
- for (j = 0; j <= col; j++)
- M[i][j] = 'A' + (char)(rand() % 26);
- }
- // Objetivo: imprimir a matriz gerada
- // Parâmetros Formais
- // - Lin: Número de linhas da matriz
- // - Col: Número de colunas da matriz
- void imprimeMatriz (int lin, int col, char M[maxLin][maxCol]){
- //imprimindo matriz
- int i, j;
- printf("\nMatriz:\n");
- for (i = 0; i <= lin; i++)
- for (j = 0; j <= col; j++) {
- printf("%2c", M[i][j]);
- if (j == col)
- printf("\n");
- }
- printf("\n");
- }
- // Objetivo: Gerar a lista de palavras a partir da matriz
- // Parâmetros Formais
- // - Lin: Número de linhas da matriz
- // - Col: Número de colunas da matriz
- void listaAleatoria(int lin, int col, char M[maxLin][maxCol])
- {
- int i, j;
- printf("\n\n");
- printf("Lista de palavras:\n\n");
- //palavras aleatórias das linhas
- for(i=0;i<lin;i++)
- {
- int k = rand()%50;
- if (k<25)
- {
- int l = rand()%(col-1);
- int p = rand()%col;
- while(p<l)
- {
- p = rand()%col;
- }
- if(p-l>=2 && p-l <=10){
- for(j=l; j<=p;j++)
- {
- printf("%c", M[i][j]);
- }
- printf("\n");
- }
- }
- }
- //palavras aleatórias das colunas
- for(j=0;j<col;j++)
- {
- int k = rand()%50;
- if (k<25)
- {
- int l = rand()%(col-1);
- int p = rand()%col;
- while(p<l)
- {
- p = rand()%col;
- }
- if(p-l>=2 && p-l <=10){
- for(i=l; i<=p;i++)
- {
- printf("%c", M[i][j]);
- }
- printf("\n");
- }
- }
- }
- printf("\n");
- }
- // Objetivo: Ler um arquivo(palavras)
- // Parâmetros Formais
- // - numPalavras: numero de palavras da lista
- // - palavras: matriz com as palavras da lista
- void recebePalavras(int *numPalavras, char palavras[50][50]) {
- int i;
- FILE *arq;
- arq = fopen("Lista.txt", "r");
- if(arq == NULL)
- printf("Erro, nao foi possivel abrir o arquivo\n");
- else {
- fscanf(arq, "%d", numPalavras);
- printf("\n\nNumero de palavras: %d\n", *numPalavras);
- printf("\nLista de palavras:\n");
- for(i=0;i<=*numPalavras;i++) {
- fgets(palavras[i], 50, arq);
- printf("%s", palavras[i]);
- if(feof(arq)) break;
- }
- }
- fclose(arq);
- printf("\n\n");
- }
- // Objetivo: Ler um arquivo (matriz)
- // Parâmetros Formais
- // - linhas = numero de linhas
- // - colunas = numero de colunas
- // - matriz = matriz de caracteres referente a lista de palavras
- /*void recebeMatriz (int *linhas, int *colunas, char *matriz[maxLin][maxCol]){
- FILE *arquivo = fopen("Matriz.txt", "r");
- if (arquivo == NULL) {
- printf("Arquivo nao encontrado...\n\n");
- return;
- }
- fscanf(arquivo, "%d", linhas);
- fscanf(arquivo, "%d", colunas);
- printf("\nLinhas : %d\n", *linhas);
- printf("Colunas : %d\n\n", *colunas);
- int i, j;
- for (i = 0; i < *linhas; ++i)
- for (j = 0; j < *colunas; ++j) {
- fscanf(arquivo, " %c", &matriz[i][j]);
- getc(arquivo);
- }
- for (i = 0; i < *linhas; ++i) {
- for (j = 0; j < *colunas; ++j)
- printf("%c ", matriz[i][j]);
- printf("\n");
- }
- printf("\n");
- fclose(arquivo);
- return;
- }*/
- // Objetivo: Verificar a existencia das palavras na matriz
- // Parametros formais:
- // - linhas: quantidade de linhas da matriz
- // - colunas: quantidade de colunas da matriz
- // - matriz: matriz de caracteres
- // - palavras: lista de palavras
- void temPalavras(int linhas, int colunas, char M[maxLin][maxCol], int numPalavras, char palavras[50][50]){
- int i, j;
- char transposta[maxCol][maxLin];
- for (i=0;i<linhas;i++)
- for(j=0;j<colunas;j++){
- transposta[j][i] = M[i][j];
- }
- int existe=1;
- for(j=0;j<numPalavras;j++){
- if(strstr(M, palavras[j]) == 0 || strstr(transposta, palavras[j]) == 0){
- existe=0;
- continue;
- }
- }
- if(existe==1)
- printf("Todas as palavras da lista estao na matriz!\n");
- else printf("Nem todas as palavras da lista estao na matriz!\n");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement