Ir ao conteúdo
  • Cadastre-se

Brunohmferreira

Membro Júnior
  • Posts

    19
  • Cadastrado em

  • Última visita

Reputação

1
  1. Galera, estou tentando implementar uma arvore Trie, so que estou com problemas na função de pesquisa dela. As funções de adição, criação e remoção estão rodando certinho, porém na de pesquisa, quando chamo ela na main, não esta entrando no "if(Atual->chave == (*chave))", logo sempre imprime "Palavra não encontrada", mesmo a palavra pesquisada estando na arvore. O que esta errado no meu código? Sera que conseguem me ajudar? Código da struct e da função de pequisa: typedef struct NOtrie { char chave; int valor; struct NOtrie *Proximo; struct NOtrie *Anterior; struct NOtrie *Filho; struct NOtrie *Pai; } trieNO; trieNO TriePesquisa(trieNO *raiz, const char *chave) { trieNO *nivel = raiz; trieNO *Ponteiro = NULL; int level = 0; while(1){ trieNO *Encontrado = NULL; trieNO *Atual; for(Atual = nivel; Atual != NULL; Atual = Atual->Proximo){ if(Atual->chave == (*chave)){ Encontrado = Atual; level++; printf("Palavra encontrada\n"); break; } } if (Encontrado == NULL){ printf("Palavra não encontrada\n"); return; } if(*chave == '\0'){ Ponteiro = Atual; return *Ponteiro; } nivel = Encontrado->Filho; chave++; } } Obrigado!
  2. Boa tarde, estou tentando fazer um jogo de caça palavras em C, para isso estou tentando implementar uma arvore Patricia para verificar se as palavras digitadas pelo usuario estão existem e podem ser formadas no grid de letras aleatorias(na horizontal, vertical ou diagonal). O código não esta completo, mas gostaria de saber onde esta o erro na minha implementação da arvore patrícia, para que, depois, possa continuar. As palavras validas se encontram em um arquivo texto. o código esta em anexo e copiado abaixo. #include <stdio.h> #include <stdlib.h> #include <string.h> typedef enum { Interno, Externo }Vertice; typedef struct PatVertice* Arvore; typedef struct PatVertice { Vertice nt; union{ struct{ unsigned char Index; Arvore Esq, Dir; }VInterno; unsigned char Chave; }VERTICE; }PatVertice; unsigned char Bit(unsigned char i, unsigned char k) { int c, j; if (i ==0) return 0; else{ c = k; for (j = 1; j <= D - i; j++) c/= 2; return (c & 1); } } //verifica se p8 e nodo externo short EExterno(Arvore p) { return (p->nt == Externo); } void Pesquisa(unsigned char k, Arvore t) { if (EExterno(t)){ if (k == t->VERTICE.Chave) printf("Elemento encontrado\n"); else printf("Elemento nao encontrado\n"); return; } if (Bit(t->VERTICE.VInterno.Index, k) == 0) Pesquisa(k, t->VERTICE.VInterno.Esq); else Pesquisa(k, t->VERTICE.VInterno.Dir); } Arvore CriaVerticeInt(int i, Arvore *Esq, Arvore *Dir) { Arvore p; p = (Arvore) malloc(sizeof(PatVertice)); p->nt = Interno; p->VERTICE.VInterno.Esq = *Esq; p->VERTICE.VInterno.Dir = *Dir; p->VERTICE.VInterno.Index = i; return p; } Arvore CriaVerticeExt(unsigned char k) { Arvore p; p = (Arvore) malloc (sizeof(PatVertice)); p->nt = Externo; p->VERTICE.Chave = k; return p; } Arvore InsereEntre(unsigned char k, Arvore *t, int i) { Arvore p; if ((EExterno(*t)) || (i < (*t)->VERTICE.VInterno.Index)){ p = CriaVerticeExt(k); if (Bit(i, k) == 1) return (CriaVerticeInt(i, t, &p)); else return(CriaVerticeInt(i, &p, t)); } else { if (Bit((*t)->VERTICE.VInterno.Index, k) == 1) (*t)->VERTICE.VInterno.Dir = InsereEntre(k, &(*t)->VERTICE.VInterno.Dir, i); else (*t)->VERTICE.VInterno.Esq = InsereEntre(k, &(*t)->VERTICE.VInterno.Esq, i); return (*t); } } Arvore Insere(unsigned char k, Arvore *t) { Arvore p; int i; if ((*t) == NULL) return (CriaVerticeExt(k)); else{ p = (*t); while (!EExterno(p)){ if (Bit(p->VERTICE.VInterno.Index, k) == 1) p = p->VERTICE.VInterno.Dir; else p = p->VERTICE.VInterno.Esq; } i = 1; while ((i <= D) && (Bit((int)i, k) == Bit((int)i, p->VERTICE.Chave))) i++; if (i > D){ printf("ERRO: chave ja presente na arvore\n"); return (*t); } else return (InsereEntre(k, t, i)); } } int main() { //lista de variaveis int i, j, quant_palavras = 0; char matriz_letras[9][9], palavra[30]; //formatando a tabela de letras printf("\t\tJOGO DE PALAVRAS\n"); printf("\n Quantas palavras diferente, em inglês, voce e capaz de encontrar?\n Quando encontrar alguma digite-a!\n Lembrando que as palavras podem ser formadas na horizontal, vertical e diagonal!\n Quando terminar, digite: ""fim""!\n\n"); srand(0); for(i=0; i<9; i++){ for (j=0; j<9; j++){ matriz_letras[j] = 'A' + (char)(rand()%26); printf(" %c \t", matriz_letras[j]); } printf("\n\n"); } //Abrindo arquivo com as palavras FILE *arqList; arqList = fopen("listOfEnglishWords.txt", "r"); if (arqList == NULL){ printf("\n ERRO: falha na abertura do arquivo!\n\n"); exit(1); } //Lendo a palavra escrita do { scanf("%s", &palavra); if (strlen(palavra) < 3){ printf("\n ERRO: palavra invalida(tamanho minimo da palavra: 3 letras)\n\n"); } return 0; } main.zip
  3. @lucasoad399 Entendi, valeu. Boa ideia
  4. Boa tarde, estou precisando resolver o problema do caixeiro viajante, que é um problema que busca determinar a menor rota para percorrer uma serie de cidades com coordenadas predefinidas, deve-se iniciar na cidade 1, passar por todas as outras cidades somente uma vez e, ao final, retornar à cidade 1. Vocês tem alguma ideia de código ou de lógica para resolver esse problema? OBS.: ir passando pelas cidades mais próximas entre si e, quando chegar na mais distante, voltar para a cidade 1 não é uma solução valida. O objetivo é encontrar um algoritmo melhor que esse. Obrigado
  5. Boa tarde, estou precisando resolver o problema do caixeiro viajante, que é um problema que busca determinar a menor rota para percorrer uma serie de cidades com coordenadas predefinidas, deve-se iniciar na cidade 1, passar por todas as outras cidades somente uma vez e, ao final, retornar à cidade 1. Vocês tem alguma ideia de código ou de lógica para resolver esse problema? OBS.: ir passando pelas cidades mais próximas entre si e, quando chegar na mais distante, voltar para a cidade 1 não é uma solução valida. O objetivo é encontrar um algoritmo melhor que esse. Obrigado
  6. Boa tarde, alguém tem algum material sobre análise de algoritmos (sobre funções de complexidade, ordem de complexidade, pior caso, melhor caso, etc.) que possa me indicar? Obrigado
  7. Boa tarde, tem jeito de abrir um arquivo com o nome de uma string digitada pelo usuário? por exemplo: o usuário digita "arquivo", então o programa abre um arquivo chamado "arquivo.txt". Consigo fazer isso na linguagem C? Se sim, como? Obrigado
  8. @vangodp Ahh agora entendi. Consegui resolver compilando assim pelo gcc Agora o programa esta rodando certinho Muito obrigado pela paciência e pela grande ajuda!!
  9. Ahh sim, entendi. Fiz dessa forma com maiúscula+botao direito ficando assim: C:\Users\bruno\Desktop\tp0> gcc main.c -o TP0.exe mas o retorno foi: 'gcc' não é reconhecido como um comando interno ou externo, um programa operável ou um arquivo em lotes. E ao tentar executar o retorno manteve: Erro: : No such file or directory Será que o problema é com meu computador?
  10. Eu uso o Windows mesmo. Estou a pasta onde esta o executável, o .c e o .txt, dessa forma "C:\Users\usuario\Desktop\tp0>gcc programa.c -o TP0.exe" substituindo "usuário" por meu nome. TP0 é o nome do .exe criado. mas esta aparecendo a mensagem: "'C:\Users\bruno\Desktop\tp0\' não é reconhecido como um comando interno ou externo, um programa operável ou um arquivo em lotes." Estou fazendo algo errado? Desculpa aignorancia mas nunca tinha executado nada pelo prompt, estou meio perdido adicionado 9 minutos depois Mas acredito que a forma que eu compilar não vai interferir muito. Eu compilei pelo CodeBlocks e executei da forma que você falou no prompt. O problema continuou: "Erro: : No such file or directory". Não estou entendendo porque que no seu rodou tranquilo, e no meu esta dando erro..não faz sentido... Porque tenho quase certeza que realmente não tem erros no meu codigo
  11. Não tenho conhecimento sobre essa forma de compilar... "C:\Users\usuario\Desktop>gcc programa.c -o programa.exe" seria "C:\Users\usuario\Desktop>"=localização do executável; "programa.c"=main.c; "programa.exe"=o nome do execuavel É isso?
  12. Ok, aguardo sua resposta. Obrigado
  13. Será por que o mesmo não esta acontecendo comigo? O meu esta retornando no prompt: "Erro: : No such file or directory".
  14. @vangodp sim, usei if...else na verdade. Exatamente, no seu imprimiu isso na SAIDA.txt?
  15. Estou executando o programa pelo prompt de comando por isso, la eu coloco o "arquivo executável CODIGO", por exemplo, coloco a localização do .exe, dou um espaço e escrevo PETR4, então o programa teria que ler o arquivo PETR4.txt e imprimir alguns valores no arquivo SAIDA.txt. Entendeu? então eu digitei no prompt: "C:\Users\bruno>C:\Users\bruno\Desktop\TP0\bin\Debug\TP0.exe PETR4", isso faria entrar no comando de abrir o arquivo PETR4, nesse ponto esta ocorrendo o erro.

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...