Advertisement
Guest User

Untitled

a guest
May 26th, 2018
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.23 KB | None | 0 0
  1. // Bibliotecas
  2.  
  3. #include <stdlib.h>
  4. #include <stdio.h>
  5. #include <string.h>
  6. #include <ctype.h>
  7. #include <time.h>
  8.  
  9. // Constantes Globais
  10.  
  11. #define maxLin 301 //definindo quantidade máxima de linhas do caça palavras
  12. #define maxCol 200 //definindo quantidade máxima de colunas do caça palavras
  13.  
  14.  
  15. // Protótipos
  16.  
  17. void coletaInfo (int *lin, int *col, char M[maxLin][maxCol]);
  18. void geraMatrizAleatoria(int lin, int col, char M[maxLin][maxCol]);
  19. void imprimeMatriz(int lin, int col, char M[maxLin][maxCol]);
  20. void listaAleatoria(int lin, int col, char M[maxLin][maxCol]);
  21. void recebeMatriz(int* linhas, int* colunas, char matriz[maxLin][maxCol]);
  22. void recebePalavras(int* numPalavras, char palavras[60][50]);
  23. void temPalavras(int linhas, int colunas, char M[maxLin][maxCol], int numPalavras, char palavras[50][50]);
  24.  
  25.  
  26. // Corpo do programa
  27.  
  28. int main() {
  29. //inicialização das variáveis
  30. srand(time(NULL));
  31. int numPalavras;
  32. int lin=0;
  33. int col=0;
  34. char M[maxLin][maxCol];
  35. char resposta[3];
  36. char lista[50][50];
  37.  
  38. // Condicional para saber o que o usuário deseja
  39.  
  40. // Gerar matriz aleatoria
  41.  
  42. printf("Deseja gerar uma matriz aleatoriamente? (Digite S para confirmar ou N para negar) ");
  43. scanf("%s", resposta);
  44. while(1) {
  45. resposta[0]=toupper(resposta[0]);
  46. if(resposta[0]=='S' || resposta[0]=='N') break;
  47. else {
  48. printf("Resposta invalida, tente novamente! ");
  49. scanf("%s", resposta);
  50. }
  51. }
  52.  
  53. if(resposta[0] == 'S')
  54. {
  55. coletaInfo(&lin, &col, M);
  56. geraMatrizAleatoria(lin, col, M);
  57. imprimeMatriz(lin, col, M);
  58. }
  59. else {
  60.  
  61. // Gerar matriz atraves de arquivo
  62.  
  63. printf("\nDeseja gerar uma matriz atraves de um arquivo pre-formatado 'Matriz.txt'? (Digite S para confirmar ou N para negar) ");
  64. scanf("%s", resposta);
  65. while(1) {
  66. resposta[0]=toupper(resposta[0]);
  67. if(resposta[0]=='N') {
  68. printf("\nNenhuma opcao de geracao de matriz selecionada. Fechando o programa...\n\n");
  69. return 0;
  70. }
  71. else if(resposta[0]=='S') break;
  72. else {
  73. printf("Resposta invalida, tente novamente! ");
  74. scanf("%s", resposta);
  75. }
  76. }
  77.  
  78. // Obtendo a matriz por arquivo
  79.  
  80. FILE *arquivo;
  81.  
  82. arquivo = fopen("Matriz.txt", "r");
  83.  
  84. if (arquivo == NULL) {
  85. printf("Arquivo nao encontrado...\nFechando o programa!...\n");
  86. return 0;
  87. }
  88.  
  89. fscanf(arquivo, "%d", &lin);
  90. fgetc(arquivo);
  91. fscanf(arquivo, "%d", &col);
  92.  
  93. printf("linhas : %d\n", lin);
  94. printf("colunas : %d\n", col);
  95.  
  96. int i, j;
  97.  
  98. for (i = 0; i < lin; ++i)
  99. for (j = 0; j < col; ++j) {
  100. fscanf(arquivo, " %c", &M[i][j]);
  101. }
  102.  
  103.  
  104. printf("\nMatriz:\n\n");
  105.  
  106. for (i = 0; i < lin; ++i) {
  107. for (j = 0; j < col; ++j)
  108. printf("%c ", M[i][j]);
  109. printf("\n");
  110. }
  111.  
  112. }
  113.  
  114. // Gerar ista de palavras aleatoria
  115.  
  116. printf("\nDeseja gerar uma lista de palavras aleatoriamente? (Digite S para confirmar ou N para negar) ");
  117. scanf("%s", resposta);
  118. while(1) {
  119. resposta[0]=toupper(resposta[0]);
  120. if(resposta[0]=='S' || resposta[0]=='N') break;
  121. else {
  122. printf("Resposta invalida, tente novamente! ");
  123. scanf("%s", resposta);
  124. }
  125. }
  126. if(resposta[0] == 'S')
  127. {
  128. listaAleatoria(lin, col, M);
  129. printf("\nEncerrando o programa...\n\n");
  130. return 0;
  131. }
  132. else {
  133.  
  134. // Gerar lista de palavras atraves de arquivo
  135.  
  136. printf("\nDeseja gerar uma lista de palavras atraves de um arquivo pre-formatado 'Palavras.txt'?\n(Digite S para confirmar ou N para negar) ");
  137. scanf("%s", resposta);
  138. while(1) {
  139. resposta[0]=toupper(resposta[0]);
  140. if(resposta[0]=='S' || resposta[0]=='N') break;
  141. else {
  142. printf("Resposta invalida, tente novamente! ");
  143. scanf("%s", resposta);
  144. }
  145. }
  146. if(resposta[0]=='N') {
  147.  
  148. printf("\nNenhuma opcao de lista de palavras selecionada. Fechando o programa...\n\n");
  149. return 0;
  150.  
  151. }
  152.  
  153. else if(resposta[0]=='S')
  154. recebePalavras(&numPalavras, lista);
  155.  
  156. printf("Deseja verificar se as palavras estão na matriz?\n(Digite S para confirmar ou N para negar) ");
  157. scanf("%s", resposta);
  158. while(1) {
  159. resposta[0]=toupper(resposta[0]);
  160. if(resposta[0]=='S' || resposta[0]=='N') break;
  161. else {
  162. printf("Resposta invalida, tente novamente! ");
  163. scanf("%s", resposta);
  164. }
  165. }
  166. if(resposta[0]=='N') {
  167.  
  168. printf("\nEncerrando o programa...\n\n");
  169. return 0;
  170.  
  171. }
  172. else if(resposta[0]=='S') {
  173.  
  174. temPalavras(lin, col, M, numPalavras, lista);
  175. printf("Fechando o programa...\n");
  176.  
  177. }
  178. }
  179. system("pause");
  180. return 0;
  181. }
  182.  
  183.  
  184.  
  185. // Objetivo: Coletar irformações sobre a matriz
  186. // Parâmetros Formais
  187. // - Lin: Número de linhas da matriz
  188. // - Col: Número de colunas da matriz
  189.  
  190. void coletaInfo (int *lin, int *col, char M[maxLin][maxCol])
  191. {
  192. //inicialização das variáveis
  193.  
  194. int i, j;
  195.  
  196. printf("Informe o numero de linhas da seu caça palavras. No maximo 300\n");
  197.  
  198. //loop criado para forçar o usário a atender as especificações
  199. do {
  200. scanf("%d", lin);
  201. if (*lin > maxLin)
  202. printf("Por favor insira um numero de linhas valido\n");
  203. } while (*lin > maxLin);
  204.  
  205. printf("Informe o numero de colunas da seu caça palavras. No maximo 200\n");
  206.  
  207. //loop criado para forçar o usário a atender as especificações
  208. do {
  209. scanf("%d", col);
  210. if (*col > maxCol)
  211. printf("Por favor insira um numero de colunas valido\n");
  212. } while (*col > maxCol);
  213.  
  214. }
  215.  
  216. // Objetivo: Gerar uma matriz com caracteres aleatórios
  217. // Parâmetros Formais
  218. // - Lin: Número de linhas da matriz
  219. // - Col: Número de colunas da matriz
  220.  
  221. void geraMatrizAleatoria (int lin, int col, char M[maxLin][maxCol]){
  222.  
  223. //gerando matriz aleatória
  224. int i, j;
  225. for (i = 0; i <= lin; i++)
  226. for (j = 0; j <= col; j++)
  227. M[i][j] = 'A' + (char)(rand() % 26);
  228.  
  229. }
  230.  
  231.  
  232. // Objetivo: imprimir a matriz gerada
  233. // Parâmetros Formais
  234. // - Lin: Número de linhas da matriz
  235. // - Col: Número de colunas da matriz
  236.  
  237. void imprimeMatriz (int lin, int col, char M[maxLin][maxCol]){
  238.  
  239. //imprimindo matriz
  240. int i, j;
  241. printf("\nMatriz:\n");
  242. for (i = 0; i <= lin; i++)
  243. for (j = 0; j <= col; j++) {
  244. printf("%2c", M[i][j]);
  245. if (j == col)
  246. printf("\n");
  247. }
  248. printf("\n");
  249.  
  250. }
  251.  
  252. // Objetivo: Gerar a lista de palavras a partir da matriz
  253. // Parâmetros Formais
  254. // - Lin: Número de linhas da matriz
  255. // - Col: Número de colunas da matriz
  256.  
  257. void listaAleatoria(int lin, int col, char M[maxLin][maxCol])
  258. {
  259.  
  260. int i, j;
  261.  
  262. printf("\n\n");
  263. printf("Lista de palavras:\n\n");
  264.  
  265. //palavras aleatórias das linhas
  266. for(i=0;i<lin;i++)
  267. {
  268. int k = rand()%50;
  269.  
  270. if (k<25)
  271. {
  272. int l = rand()%(col-1);
  273. int p = rand()%col;
  274.  
  275. while(p<l)
  276. {
  277. p = rand()%col;
  278. }
  279. if(p-l>=2 && p-l <=10){
  280. for(j=l; j<=p;j++)
  281. {
  282. printf("%c", M[i][j]);
  283.  
  284. }
  285. printf("\n");
  286. }
  287. }
  288. }
  289.  
  290. //palavras aleatórias das colunas
  291. for(j=0;j<col;j++)
  292. {
  293. int k = rand()%50;
  294.  
  295. if (k<25)
  296. {
  297. int l = rand()%(col-1);
  298. int p = rand()%col;
  299.  
  300. while(p<l)
  301. {
  302. p = rand()%col;
  303. }
  304. if(p-l>=2 && p-l <=10){
  305. for(i=l; i<=p;i++)
  306. {
  307. printf("%c", M[i][j]);
  308.  
  309. }
  310. printf("\n");
  311. }
  312. }
  313. }
  314. printf("\n");
  315.  
  316. }
  317.  
  318.  
  319. // Objetivo: Ler um arquivo(palavras)
  320. // Parâmetros Formais
  321. // - numPalavras: numero de palavras da lista
  322. // - palavras: matriz com as palavras da lista
  323.  
  324. void recebePalavras(int *numPalavras, char palavras[50][50]) {
  325.  
  326. int i;
  327. FILE *arq;
  328. arq = fopen("Lista.txt", "r");
  329. if(arq == NULL)
  330. printf("Erro, nao foi possivel abrir o arquivo\n");
  331. else {
  332. fscanf(arq, "%d", numPalavras);
  333. printf("\n\nNumero de palavras: %d\n", *numPalavras);
  334. printf("\nLista de palavras:\n");
  335. for(i=0;i<=*numPalavras;i++) {
  336. fgets(palavras[i], 50, arq);
  337. printf("%s", palavras[i]);
  338. if(feof(arq)) break;
  339. }
  340. }
  341. fclose(arq);
  342. printf("\n\n");
  343. }
  344.  
  345. // Objetivo: Ler um arquivo (matriz)
  346. // Parâmetros Formais
  347. // - linhas = numero de linhas
  348. // - colunas = numero de colunas
  349. // - matriz = matriz de caracteres referente a lista de palavras
  350.  
  351. /*void recebeMatriz (int *linhas, int *colunas, char *matriz[maxLin][maxCol]){
  352.  
  353. FILE *arquivo = fopen("Matriz.txt", "r");
  354.  
  355. if (arquivo == NULL) {
  356.  
  357. printf("Arquivo nao encontrado...\n\n");
  358. return;
  359.  
  360. }
  361.  
  362. fscanf(arquivo, "%d", linhas);
  363. fscanf(arquivo, "%d", colunas);
  364. printf("\nLinhas : %d\n", *linhas);
  365. printf("Colunas : %d\n\n", *colunas);
  366.  
  367. int i, j;
  368.  
  369. for (i = 0; i < *linhas; ++i)
  370. for (j = 0; j < *colunas; ++j) {
  371.  
  372. fscanf(arquivo, " %c", &matriz[i][j]);
  373. getc(arquivo);
  374.  
  375. }
  376.  
  377. for (i = 0; i < *linhas; ++i) {
  378. for (j = 0; j < *colunas; ++j)
  379. printf("%c ", matriz[i][j]);
  380. printf("\n");
  381. }
  382. printf("\n");
  383.  
  384. fclose(arquivo);
  385.  
  386.  
  387. return;
  388.  
  389. }*/
  390.  
  391. // Objetivo: Verificar a existencia das palavras na matriz
  392. // Parametros formais:
  393. // - linhas: quantidade de linhas da matriz
  394. // - colunas: quantidade de colunas da matriz
  395. // - matriz: matriz de caracteres
  396. // - palavras: lista de palavras
  397.  
  398. void temPalavras(int linhas, int colunas, char M[maxLin][maxCol], int numPalavras, char palavras[50][50]){
  399. int i, j;
  400. char transposta[maxCol][maxLin];
  401. for (i=0;i<linhas;i++)
  402. for(j=0;j<colunas;j++){
  403. transposta[j][i] = M[i][j];
  404. }
  405. int existe=1;
  406. for(j=0;j<numPalavras;j++){
  407. if(strstr(M, palavras[j]) == 0 || strstr(transposta, palavras[j]) == 0){
  408. existe=0;
  409. continue;
  410. }
  411. }
  412. if(existe==1)
  413. printf("Todas as palavras da lista estao na matriz!\n");
  414. else printf("Nem todas as palavras da lista estao na matriz!\n");
  415. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement