Ir ao conteúdo

Posts recomendados

Postado

NÃO CONSIGO ENTENDER porque NA MAIN, MAIS ESPECIFICAMENTE NO WHILE O 

<for(tpal = 0; matpal[i1][tpal]; tpal++);>

NÃO FUNCIONA NA PRIMEIRA PALAVRA, HELP-ME!


 

<#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<locale.h>
#define TMAT 16
#define PAL 5


void funcpal(char mat[TMAT][TMAT],char matpal[PAL][11]){        //COLOCAR PALAVRAS DENTRO DA MAT//

    short int i, j;                                             //SHORT INT = 16 BITS = PODIA USAR CHAR, MAS ASSIM GASTO MENOS Q O INT E N ME ENROLO//
    short int i1,j1,dir,c,cont,tpal;
    i1=j1=c=cont = 0;

    for( ;cont < PAL; ){
    //cont = 10;      //teste//
    i = rand() % 16;                                           // SORTEAR POSIÇÃO ALEATÓRIA |LINHA| //
    j = rand() % 16;                                           // SORTEAR POSIÇÃO ALEÁTORIA |COLUNA| //
    dir = rand() % 8;
    for(tpal = 0; matpal[i1][tpal]; tpal++);                   // MINHA STRLEN QUE É MELHOR //

        if(dir == 0){       //NORTE//
            for(j1 = 0; matpal[i1][j1]; j1++,i--){
                if(mat[i][j] == '\0' && i >= 0  || mat[i][j] == matpal[i1][j1] && i >=0){
                    c++;            //CONTAR SE TEM POSIÇÕES VÁLIDAS NA DIREÇÃO QUE O RAND SORTEOU//
                }                   //JÁ PERMITO O CRUZAMENTO DE PALAVRAS//
            }
            //printf("%d\n" ,c);
            if(c == tpal){          //PALAVRA CABE NA POSIÇÃO//
                i +=tpal;
                //j1-=tpal;
                //printf("%d\n", i1);
                for(j1 = 0; matpal[i1][j1]; j1++,i--){
                    mat[i][j] = matpal[i1][j1];     //COLOCANDO PALAVRA NAS POSIÇÕES TESTADAS//
                    //printf("%c", matpal[i1][j1]);
                }
                i1++;                               //PASSAR PRA PROXIMA PALAVRA//
                cont++;                             //PALAVRA COLOCADA NA MATRIZ COM SUCESSO// INDICADOR DISSO//
            }
        }

         else if(dir == 1){       //NORDESTE//
            for(j1 = 0; matpal[i1][j1]; j1++,i--,j++){
                if(mat[i][j] == '\0' && i >=0 && j <=15 || mat[i][j] == matpal[i1][j1] && i >= 0 && j <= 15){
                    c++;
                }
            }
            if(c == tpal){
                i +=tpal;
                j -=tpal;
                //j1 -=tpal;
                for(j1 = 0; matpal[i1][j1]; j1++,i--,j++){
                    mat[i][j] = matpal[i1][j1];
                    //printf("%c\n", matpal[i1][j1]);
                }
                i1++;
                cont++;
            }
        }
        else if(dir == 2){      //LESTE//
            for(j1 = 0; matpal[i1][j1]; j1++,j++){
                if(mat[i][j] == '\0' && j <=15 || mat[i][j] ==  matpal[i1][j1] && j <=15){
                    c++;
                }
            }
            if(c == tpal){
                j -=tpal;
                //j1 -=tpal;
                for(j1 = 0; matpal[i1][j1]; j1++,j++){
                    mat[i][j] = matpal[i1][j1];
                    //printf("%c\n", matpal[i1][j1]);
                }
                i1++;
                cont++;
            }
        }
        else if(dir == 3){      //SUDESTE//
            for(j1 = 0; matpal[i1][j1]; j1++,i++,j++){
                if(mat[i][j] == '\0' && j <=15 && i <=15 || mat[i][j] == matpal[i1][j1] && j <=15 && i <=15){
                    c++;
                }
            }
            //printf("%d\n", c);
            if(c == tpal){
                i -=tpal;
                j -=tpal;
                //j1 -=tpal;
                for(j1 = 0; matpal[i1][j1]; j1++,i++,j++){
                    mat[i][j] = matpal[i1][j1];
                    //printf("%c\n", matpal[i1][j1]);
                }
                i1++;
                cont++;


            }

        }
        else if(dir == 4){      //SUL//
            for(j1 = 0; matpal[i1][j1]; j1++,i++){
                if(mat[i][j] == '\0' && i <= 15 || mat[i][j] == matpal[i1][j1] && i <= 15){
                    c++;
                }
            }
            if(c == tpal){
                i -=tpal;
                //j1 -=tpal;
                for(j1 = 0; matpal[i1][j1]; j1++,i++){
                    mat[i][j] = matpal[i1][j1];
                    //printf("%c\n", matpal[i1][j1]);
                }
                i1++;
                cont++;
            }
        }
        else if(dir = 5){       //SUDOESTE//
            for(j1 = 0; matpal[i1][j1]; j1++,i++,j--){
                if(mat[i][j] == '\0' && i <=15 && j >= 0 || mat[i][j] == matpal[i1][j1] && i <=15 && j >= 0){
                    c++;
                }
            }
            //printf("%d\n", c);
            if(c == tpal){
                i -=tpal;
                j +=tpal;
                //j1 -=tpal;
                for(j1 = 0 ; matpal[i1][j1]; j1++,i++,j--){
                    mat[i][j] = matpal[i1][j1];
                    //printf("%c\n", matpal[i1][j1]);
                }
                i1++;
                cont++;
            }
        }
        else if(dir = 6){       //OESTE//
            for(j1 = 0; matpal[i1][j1]; j1++,j--){
                if(mat[i][j] == '\0' && j >= 0 || mat[i][j] == matpal[i1][j1] && j >= 0){
                    c++;
                }
            }
            //printf("%d\n", c);
            if(c == tpal){
                j +=tpal;
                //j1 -=tpal;
                for(j1 = 0; matpal[i1][j1]; j1++,j--){
                    mat[i][j] = matpal[i1][j1];
                    //printf("%c\n", matpal[i1][j1]);
                }
                i1++;
                cont++;
            }

        }
        else if(dir =7){        //NOROESTE//
            for(j1 = 0; matpal[i1][j1]; j1++,i--,j--){
                if(mat[i][j] == '\0' && i >=0 && j >=0 || mat[i][j] == matpal[i1][j1] && i >=0 && j >=0){
                    c++;
                }
            }
            //printf("%d\n", c);
            if(c == tpal){
                i +=tpal;
                j +=tpal;
                //ja -=tpal;
                for(j1 = 0; matpal[i1][j1]; j1++,i--,j--){
                    mat[i][j] = matpal[i1][j1];
                    //printf("%c", matpal[i1][j1]);
                }
                i1++;
                cont++;
            }
        }
c = 0;
}
}

void funcale(char mat[TMAT][TMAT]){

    short int letale = 26,i, j;
    char a,b,c, letra;
    i = j = 0;

    for(i = 0; i < TMAT; i++){
        for(j = 0; j <TMAT; j++){
            //printf("%c", mat[i][j]);
            if(mat[i][j] == '\0'){  //SE TIVER LIXO NA MATRIZ A FUNÇÃO RAND GERA LETRA//
                //mat[i][j] = (rand()%letale)+65;
                if(j-1 >=0)         //COMPARAÇÃO PARA GARANTIR Q A LETRA AO OESTE NÃO SE REPITA 3 VEZES NA HORIZONTAL
                    a = mat[i][j-1];
                if(i-1 >=0 && j-1 >=0) //COMPARAÇÃO PARA GARANTIR Q A LETRA AO NOROESTE NÃO SE REPITA 3 VEZES NA DIAGONAL
                    b = mat[i-1][j-1];
                if(i-1 >=0)         //COMPARAÇÃO PARA GARANTIR Q A LETRA AO NOROESTE NÃO SE REPITA 3 VEZES NA VERTICAL
                    c = mat[i-1][j];
                letra= (rand()%letale)+65; //GERO UMA LETRA
                while(letale == a || letale == b || letale == c){
                    letra = (rand()%letale)+65;         //LETRA FOI IGUAL A UMA DAS POSIÇÕES ANTERIORES, EU TROCO.
                }
                mat[i][j] = letra;                      //MATRIZ RECEBE A LETRA.

            }
        }
    }
}

                                        ///NÃO FUNCIONOU MAS RENDEU UMAS ideias///

                /*if(j-1 >=0 && mat[i][j-1] == mat[i][j]){
                    letale--;
                    mat[i][j] = rand()%letale+65;
                    aux = mat[i][j];
                    if(aux>= mat[i][j])
                        mat[i][j]= aux+1;

                    else
                        mat[i][j] = aux;

                }
                else if(i-1 >=0 && j+15 == 15  && mat[i-1][j+15] == mat[i][j]){
                    letale--;
                    mat[i][j] = rand()%letale+65;
                    aux = mat[i][j];
                    if(aux>= mat[i][j])
                        mat[i][j] = aux+1;
                    else
                        mat[i][j] = aux;
                }
            }*/

    /*for(i = 0; i < TMAT; i++){
        for(j = 0; j <TMAT; j++){
            if(i-1 >=0 && i+1 <=15 && mat[i-1][j] == mat[i+1][j] && mat[i-1][j] == mat[i][j]){
                letale--;
                aux = rand()%letale+65;
                if(aux >= mat[i][j]){
                    aux++;
                    mat[i][j] = aux;
                }
                else{
                    mat[i][j] = aux;
                }
                letale = 26;
            }
            if(j-1 >=0 && j+1 <=15 && mat[i][j-1] == mat[i][j+1] && mat[i][j-1] == mat[i][j]){
                letale--;
                aux = rand()%letale+65;
                if(aux >= mat[i][j]){
                    aux++;
                    mat[i][j] = aux;
                }
                 else{
                    mat[i][j] = aux;
                }
                letale = 26;
            }
            if(i+1 <=15 && j-1 >=0 && i-1 >= 0 && j+1 <=15 && mat[i+1][j-1] == mat[i-1][j+1]){
                letale--;
                aux = rand()%letale+65;
                if(aux >= mat[i][j]){
                    aux++;
                    mat[i][j] = aux;
                }
                 else{
                    mat[i][j] = aux;
                }
                letale = 26;
            }
            if(i-1 >=0 && j-1 >= 0 && i+1 <=15 && j+1 <=15 && mat[i-1][j-1] == mat[i+1][j+1] ){
                letale--;
                aux = rand()%letale+65;
                if(aux >= mat[i][j]){
                    aux++;
                mat[i][j] = aux;
                }
                 else{
                    mat[i][j] = aux;
                }
                letale = 26;
            }
        }
    }*/


    /*for(i = 0; i <TMAT; i++){
        for(j = 0; j <TMAT; j++){
            letale = 26;
            if(i-1 >=0 && i+1 <=15 && mat[i-1][j] == mat[i+1][j]){
                letra1 = mat[i-1][j];  //C = 67
                letale--;
                i1++;
            }
            if(j-1 >=0 && j+1 <=15 && mat[i][j-1] == mat[i][j+1]){
                letra2 = mat[i][j-1];
                letale--;
                i1++;
            }
            if(i+1 <=15 && j-1 >=0 && i-1 >= 0 && j+1 <=15 && mat[i+1][j-1] == mat[i-1][j+1]){
                letra3 = mat[i+1][j-1];
                letale--;
                i1++;
            }
            if(i-1 >=0 && j-1 >= 0 && i+1 <=15 && j+1 <=15 && mat[i-1][j-1] == mat[i+1][j+1] ){
                letra4 = mat[i-1][j-1];
                letale--;
                i1++;
            }
            printf("\nQUANTO VALE O LETALE %d\n", letale);

            for( j1 = 0; j1 < i1; j1++){
                if(letra1 >= letra2 && letra1 >= letra3 && letra1 >= letra4){           //66 67 70 78
                    aux = letra1;
                    letra1 = '!';
                }
                else if(letra2 >= letra1 && letra2 >= letra3 && letra2 >= letra4){
                    aux = letra2;
                    letra2 = '!';
                }
                else if(letra3 >= letra1 && letra3 >= letra2 && letra3 >= letra4){
                    aux = letra3;   // 78 P
                    letra3 = '!';
                }
                else if(letra4 >= letra1 && letra4 >= letra2 && letra4 >= letra3){
                    aux = letra4;
                    letra4 = '!';
                }
                l1 = l2;
                l2 = l3;
                l3 = l4;
                l4 = aux;       //78
            }
                if(l1 == '!')
                    l1 = '~';
                if(l2 == '!')
                    l2 = '~';
                if(l3 == '!')
                    l3 = '~';
                if(l4 == '!')
                    l4 = '~';                                                                    // 78 67 70 66
                letale = (rand()%letale)+65;
                if(letale >=  l4)
                    letale++;
                if(letale >=  l3)
                    letale++;
                if(letale >=  l2)
                    letale++;
                if(letale >=  l1)
                    letale++;
                printf("\n L4 o que TEM %d \n", l4);


                if(mat[i][j] == '\0')
                    mat[i][j] = letale;
            }
            i1 = 0;

        }*/

main(){

setlocale(LC_ALL, "portuguese");
    char  mat[TMAT][TMAT], matpal[PAL][11];   //MATRIZ DO JOGO//MATRIZ DAS PALAVRAS//
    short int i = 0,j = 0;
    short int i1 = 0, j1 = 0, i2 = 0, j2 = 0;
    short int a = 0, dir, cont= 0,tpal, ant = 0;


    srand((unsigned)time(NULL));            //INICIALIZAR A SEMENTE//

    for(i = 0; i < TMAT; i++){
        for( j = 0; j <TMAT; j++){          //ADD ELEMENTO CONHECIDO'\0';
            mat[i][j] = '\0';
        }
    }
    printf("\n|BEM VINDO AO CAÇA PALAVRA|\n");         //BOAS-VINDAS//
    printf("\nDIGITE 20 PALAVRAS, TODAS ENTRE 5 E 10 CARACTERES: \n");
    for(i = 0; i < 5; ){
        scanf("%s", matpal[i]);
                                                                        //LER STRING DO USER//
        for(tpal = 0;matpal[i][tpal]; tpal++);
        printf("\n%d\n", tpal);
        if(tpal >= 5 && tpal <= 10)
            i++;
        else
            printf("\nPOR FAVOR, PALAVRAS ENTRE 5 E 10 CARACTERES!!!\n");    //USER DIGITAR AS PALAVRAS CORRETAMENTE// N INCREMENTO//

    }
    printf("\n");
    printf("PALAVRAS A SEREM ENCONTRADAS: \n");
    for(i1 = 0; i1 < 5; i1++){                                                  //MOSTRAR PALAVRAS DO USER NA TELA, QUE ELE DEVE ACHAR//
        printf("%s\n", matpal[i1]);
    }
    printf("\n");

    funcpal(mat, matpal);                                                   // CHAMAR FUNÇÃO Q COLOCA NA GRADE AS PALAVRAS//
    funcale(mat);
                                                              // CHAMAR FUNÇÃO Q GERA LETRAS ALEATÓRIAS//
    while(a < PAL){
        for(i = 0; i < TMAT; i++){
            for(j = 0; j < TMAT; j++){
                printf("   %c   ", mat[i][j]);                              // MOSTRAR NA TELA A MATRIZ SEMPRE Q ELE JOGAR UMA RODADA//
                }
                printf("\n\n");
            }
        printf("Digite a posição inicial - |LINHA E COLUNA|(RESPECTIVAMENTE):\n");
        scanf("%d", &i);                                                            // DIGITAR LINHA E COLUNA
        scanf("%d", &j);
        printf("Considere |0 = NORTE| - |1 = NORDESTE| - |2 = LESTE| - |3 = SUDESTE| -\n|4 = SUL| - |5 = SUDOESTE| - |6 = OESTE| - |7 = NOROESTE|: ");
        scanf("%d", &dir);
        //tpal = 0;
        if(dir == 0){   //NORTE//
            for(i1 = 0; i1 < PAL; i1++){                        //NUMERO DE PALAVRAS//
                for(tpal = 0; matpal[i1][tpal]; tpal++);        //STRLEN MINHA//
                for( ;i >= 0 && mat[i][j] == matpal[i1][j1]; j1++,i--){     //cavalo    //5//
                    cont++;                                     //A CADA LETRA IGUAL, CONT AUMENTA//
                }
                printf("\n\n%d\n\n",tpal);
                if(cont == tpal){                               // SE CONT FOR IGUAL AO TAMANHO DA PALAVRA O a aumenta(menos 1 palavra)//
                    a++;
                    printf("voce ACERTOU\n");                   //AVISO Q ELE ACERTOU//
                }
                i +=cont;                                       //REINICIO A POSIÇÃO DA PALAVRA NA MATRIZ, PRA CASO A PALAVRA A SER PROCURADA SEJA FINAL E COM INICIO SEMELHANTE A ANTERIOR//
                j1 -=cont;                                      //REINICIO A POSIÇÃO INICIAL DA LEITURA DA PALAVRA//
                cont = 0;                                       //REDEFINO O CONTADOR, ELE Q ME GARENTE SE AS PALAVRAS SÃO IGUAIS
            }
            if(a == ant){                                       //MEU a TAMBÉM ATUA COMO UMA ESPÉCIE DE FLAG, JÁ QUE DEIXO O DA RODADA PASSADA NO anterior
                printf("voce ERROU\n");                         //SE O a NÃO AUMENTAR, SIGNIFICA QUE O USER ERROU//
            }
        }
        else if(dir == 1){ //NORDESTE//
            for(i1 = 0; i1 < PAL; i1++){
                for(tpal = 0; matpal[i1][tpal]; tpal++);
                for( ; i >=0 && j <=15 && mat[i][j] == matpal[i1][j1]; j1++, i--,j++){
                    cont++;
                }
                printf("\n\n%d\n\n",tpal);
                if(cont == tpal){
                    a++;
                    printf("voce ACERTOU\n");
                }
                i +=cont;
                j -=cont;
                j1 -=cont;
                cont = 0;
            }
            if(a == ant)
                printf("voce ERROU\n");

        }
        else if(dir == 2){  //LESTE//
            for(i1 = 0; i1 <PAL; i1++){
                for(tpal = 0; matpal[i1][tpal]; tpal++);
                for( ;j <=15 && mat[i][j] == matpal[i1][j1]; j1++, j++){
                    cont++;
                }
                printf("\n\n%d\n\n",tpal);
                if(cont == tpal){
                    a++;
                    printf("voce ACERTOU\n");
                }
                j -=cont;
                j1 -=cont;
                cont = 0;

            }
            if(a == ant)
                printf("voce ERROU\n");

        }
        else if(dir == 3){  //SUDESTE//
            for(i1 = 0; i1 < PAL; i1++){         //i1++// //
                //printf("\n%d\n", i1);
                //printf("\n%d\n", tpal);
                for(tpal = 0; matpal[i1][tpal]; tpal++);    //tpal 8//
                for( ;i <= 15 && j <=15 && mat[i][j] == matpal[i1][j1]; j1++,i++,j++){
                    cont++;
                }
                printf("\n\n%d\n\n",tpal);
                if(cont == tpal){
                    a++;
                    printf("voce ACERTOU\n");
                }
                i -=cont;
                j -=cont;
                j1 -=cont;
                cont = 0;
            }
            if(a == ant)
                printf("voce ERROU\n");
        }
        else if(dir == 4){  //SUL//
            for(i1 = 0; i1 <PAL; i1++){
                for(tpal = 0; matpal[i1][tpal]; tpal++);
                for( ;i <= 15 && mat[i][j] == matpal[i1][j1]; j1++,i++){
                    cont++;
                }
                printf("\n\n%d\n\n",tpal);
                if(cont == tpal){
                    a++;
                    printf("voce ACERTOU\n");
                }
                i -=cont;
                j1-=cont;
                cont = 0;
            }
            if(a == ant)
                printf("voce ERROU\n");
        }
        else if(dir == 5){  //SUDOESTE//
            for(i1 = 0; i1 <PAL; i1++){
                for(tpal = 0; matpal[i1][tpal]; tpal++);
                for( ;i <= 15 && j >= 0 && mat[i][j] == matpal[i1][j1]; j1++,i++,j--){
                    cont++;
                }
                printf("\n\n%d\n\n",tpal);
                if(cont == tpal){
                    a++;
                    printf("voce ACERTOU\n");
                }
                i -=cont;
                j +=cont;
                j1 -=cont;
                cont = 0;
            }
            if(a == ant)
                printf("voce ERROU\n");
        }
        else if(dir == 6){  //OESTE//
            for(i1 = 0; i1 <PAL; i1++){
                for(tpal = 0; matpal[i1][tpal]; tpal++);
                for( ;j >= 0 && mat[i][j] == matpal[i1][j1]; j1++,j--){
                    cont++;
                }
                printf("\n\n%d\n\n",tpal);
                if(cont == tpal){
                    a++;
                    printf("voce ACERTOU\n");
                }
                j +=cont;
                j1 -=cont;
                cont = 0;
            }
            if(a == ant)
                printf("voce ERROU\n");
        }
        else if(dir == 7){  //NOROESTE//
            for(i1 = 0; i1 <PAL; i1++){
                for(tpal = 0; matpal[i1][tpal]; tpal++);
                for( ; i >= 0 && j >=0 && mat[i][j] == matpal[i1][j1]; j1++,i--,j--){
                    cont++;
                }
                printf("\n\n%d\n\n",tpal);
                if(cont == tpal){
                    a++;
                    printf("voce ACERTOU\n");
                }
                i +=cont;
                j +=cont;
                j1 -= cont;
                cont = 0;
            }
            if(a == ant)
                printf("voce ERROU\n");
        }
        ant = a;                        //O ANTERIOR É O a DA PASSADA//
        cont = 0;
        //tpal = 0;
    }

    printf("\nMEUS PARABENS, voce ACHOU TODAS AS PALAVRAS!!!!!!!! \n");
}

 

  • Obrigado 1
Postado

x

9 horas atrás, Flávio Pedroza disse:

Remova o ponto e virgula

 

Não, não remova. Está certo assim.

 

        for (tpal = 0; matpal[i1][tpal]; tpal++)
            ;  // MINHA STRLEN QUE É MELHOR //

 

O que fez você crer que é melhor? Mediu? Ou só por não ter a chamada de função?

 

Seu programa está muito longo e frágil e tem muitos problemas. Vai ter um trabalho do inferno para concluir se escrever assim.

 

Tem muitos dos vícios comuns e sugiro muito rever. E algumas construções que não devem gerar nota, talvez perder. E não vão economizar seu tempo ou o da máquina.
 

        if (dir == 0)
        {  // NORTE//

 

  • Use #define para as direções. O simples. Talvez em meia hora já não se lembre para que direção é 5. E se lembra pode economizar  usar sua memória para memorizar outras coisas.
  • comente o que está fazendo, objetivamente e evite comentários óbvios. Provavelmente não ganha nada em usar maiúsculas para os comentários. E não use acentos. Podem não aparecer certo em telas ou listagens
  • use nomes mais significativos. Por exemplo o que são mat[][] e matpal[][]? Porque não comentou isso por exemplo?
  • inicialize todas as variáveis.
  • declare uma por linha. Vai gostar de não ter que ficar procurando
  •     for (; cont < PAL;)

    Esse comando já existe em C. Se chama while. Escrevendo assim só fica difícil de ler.

  •     srand((unsigned)time(NULL)); \
          // INICIALIZAR A SEMENTE//

    Pois é: talvez possa abrir mão desse comentário. É sabido que srand() faz isso. No entando não deve usar isso num programa que está testando. Ao contrário, é melhor não usar para poder repetir os testes sabendo o que vai acontecer...

  •             mat[i][j] = '\0';

    ''\0' é a mesma coisa que 0 ou 0x00 ou 000. Pra que digitar 4 letras e ainda se arriscar a errar uma apóstrofe dessas?

  •         scanf("%s", matpal[i]);
            // LER STRING DO USER//

    É sabido que scanf() vai ler de stdin. TESTE o retorno de scanf(). É ingênuo seguir sem testar.

  •     funcpal(mat, matpal);  // CHAMAR FUNÇÃO Q COLOCA NA
                               // GRADE AS PALAVRAS//

    Então porque um desses vetores não se chama grade simplesmente?

  •     while (a < PAL)
        {
            for (i = 0; i < TMAT; i++)
            {
                for (j = 0; j < TMAT; j++)
                {
                    printf(
                        "   %c   ",
                        mat[i][j]);  // MOSTRAR NA TELA A MATRIZ
                                     // SEMPRE Q ELE JOGAR UMA
                                     // RODADA//
                }
                printf("\n\n");
            }
            printf(
                "Digite a posição inicial - |LINHA E "
                "COLUNA|(RESPECTIVAMENTE):\n");
            scanf("%d", &i);  // DIGITAR LINHA E COLUNA
            scanf("%d", &j);

    Use uma função para mostrar a tal grade. Não precisa de dois scanf() pode usar um só para ler as coordenadas. Mais ainda talvez seja mais simples usar letras para as colunas por exemplo e número para as linhas como nas planilhas. Todo mundo está acostumado com isso. Mapas são assim.

  •         printf(
                "Considere |0 = NORTE| - |1 = NORDESTE| - |2 = "
                "LESTE| - |3 = SUDESTE| -\n|4 = SUL| - |5 = "
                "SUDOESTE| - |6 = OESTE| - |7 = NOROESTE|: ");

    Use #define com esses valores.

  •     short int i,
            j;  // SHORT INT = 16 BITS = PODIA USAR CHAR, MAS
                // ASSIM GASTO MENOS Q O INT E N ME ENROLO//
        short int i1, j1, dir, c, cont, tpal;
        i1 = j1 = c = cont = 0;

    Com esses nomes pode se enrolar mesmo: i,j,i1,j1. E i e j não inicializados e globais na função tem uma chance gigante de dar problema. Em geral se reserva esses nomes tipo i e j para índices usados e declarados apenas DENTRO de loops.

  • Leia as palavras de um arquivo. É melhor pra todo mundo. Ao invés de perguntar VINTE palavras, ou 5, apenas pergunte o nome do arquivo e poderá testar seu programa em minutos com as mesmas palavras. Não fa sentido perder tempo digitando palavras TODA vez que vai testar o programa. Nem perguntar o nome do arquivo faz sentido porque também é chato. Pergunte apenas se o cara não digiar já na linha de comando:
     

    	jogo pal.txt

 

Sugiro muito rever essas coisas antes de continuar testando.

 

 

 

Postado

@arfneto 

Algumas das questões foram feitas de uma maneira "errada" por que o enunciado era assim! Um exemplo disso é digitar as 20 palavras.

Realmente as variáveis assim = "i1" e "j1" só servem para me confundir desta maneira.

Em relação a strlen ser pior que o meu for é real, chamada de função é mais lenta pelo que aprendi.

Realmente peco em não usar define, me ajudaria muito mesmo!

 

Agradeço pelas dicas e pela ajuda!!

Postado
1 hora atrás, Jardel Gonçalves disse:

Algumas das questões foram feitas de uma maneira "errada" por que o enunciado era assim! Um exemplo disso é digitar as 20 palavras.

 

Pois é. Mas você não precisa seguir o enunciado antes do programa estar pronto. Só perde tempo fazendo isso. Use um arquivo. Usar arquivos em C é trivial e ler do teclado só dá problema. Ou use constantes.

 

Não é importante seguir assim o enunciado enquanto o programa não estiver pronto. Pelo contrário.

 

 

 

Considere esse exemplo

 

void funcale(char mat[TMAT][TMAT])
{
    const char* pal[] = {
        "matriz",
        "garantir",
        "oeste"
        "recebe",
        "repita",
        "letra",
        "noroeste",
        "igual",
        "compara",
        "posicao"};

    for (int i = 0; i < sizeof(pal) / sizeof(char*); i++)
    {
        strcpy(mat[i], pal[i]);
        printf("\t+\"%s\"\n", pal[i]);
    }
    printf(
        "\n\t\tLidas %d palavras\n\n",
        (int) (sizeof(pal) / sizeof(char*)));
    return;
}

 

Se você usar essa função no lugar daquela outra pode ter uma lista de palavras para testar assim que abre o programa... 🤔

 

        +"matriz"
        +"garantir"
        +"oeste"
        +"recebe"
        +"repita"
        +"letra"
        +"noroeste"
        +"igual"
        +"compara"
        +"posicao"

                Lidas 9 palavras

 

Depois da primeira vez claro que não precisa mais ficar mostrando enquanto o programa não estiver pronto.

 

1 hora atrás, Jardel Gonçalves disse:

Em relação a strlen ser pior que o meu for é real, chamada de função é mais lenta pelo que aprendi

 

Então não é a implementação de strlen() o problema... Pense nisso. Está afirmando algo que não é o que escreveu no comentário. 

 

 

Escreva em torno dos dados.

 

Precisa manter a lista de palavras, o total delas, as que foram encontradas até o momento e tal. Então junte tudo isso em uma estrutura. É a noção de encapsulamento e faz seu programa mais simples e seguro.

 

Sugiro mudar as coisas que eu listei.

 

E use um switch para as direções e não um if.

  • Triste 1
Postado
36 minutos atrás, Jardel Gonçalves disse:

Consegui arrumar aquele problema, era o short int q bugava o programa, no entanto agora deu outro problema...

Complicado...


poste o programa como está agora...

Entendeu o que eu expliquei no #6?

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!