Ir ao conteúdo
  • Cadastre-se

PauloC19

Membro Pleno
  • Posts

    38
  • Cadastrado em

  • Última visita

Tudo que PauloC19 postou

  1. @BasoleFiz de outra forma e conseguir chegar ao resultado desejado. Obrigado pela ajuda!
  2. @Basole Tipo assim, nessas 7 linhas, das duas colunas, G e H, todas as linhas tem o mesmo preço, queria retornar a quantidade de preços iguais, que seria 7
  3. @Basole Nada. Print das duas colunas abaixo... Estava tentando fazer algo assim, com o "=CONT.SES", porém, só vai me retornar a quantidade do valor definido.: =CONT.SES(H2:H999; "=2,00"; G2:G999; "=2,00")
  4. @Basole Seria como retornar verdadeiro ou falso, né!? Eu queria retornar a quantidade
  5. Boa tarde, galera! Então, alguém poderia ajudar? Por ex.: Coluna G e Coluna H, com 999 linhas Coluna G e Coluna H, com seus dados, preços: R$2,00 R$1,00 R$3,00 R$3,00 R$5,00 R$5,00 R$7,00 R$9,00 Quero retornar a quantidade de preços iguais, que nesse caso, seria 2, entre as duas colunas. Estou utilizando a seguinte fórmula, dessa maneira: =CONT.SE(H2:H999;"="&G2:G999) , porém, retorna o valor 0, e não 2
  6. Boa noite. Estou desenvolvendo um Jogo da Velha, e está quase pronto. Testando o Jogo da velha, percebi que mesmo o Jogador Humano vencendo a partida, o Computador ainda efetua mais uma jogada. Alguém pode me orientar? Por exemplo.: X|O|O X|O|_ X| | Jogador Humano VENCEU É tipo isso, o Jogador Humano venceu e o Computador imprimiu mais um O ainda. Acredito que segue algum detalhe nesses if/else, em alguma parte desses blocos de códigos que se encontra no Main. Segue o código abaixo: public class Jogo { //Instâncias de Tabuleiro, Jogador, ComputadorA, ComputadorB e ComputadorC static Tabuleiro jogoTabuleiro = new Tabuleiro(); static Jogador jogador = new Jogador(); static ComputadorA compA = new ComputadorA(); static ComputadorB compB = new ComputadorB(); public static void main(String[] args) { System.out.println("***** Jogo da Velha *****"); System.out.println("Jogador Humano: X"); System.out.println("Computador: O\n"); System.out.println("Escolha o nível de dificuldade 1, 2 ou 3:"); //Ler o que foi digitado pelo usuário Scanner nDificuldade = new Scanner(System.in); //Armazena o que foi digitado int nivel = nDificuldade.nextInt(); //Entra nesse laço se o que foi digitado for menor que 1 ou menor que 3 while(nivel < 1 || nivel > 3){ System.out.println("Opção inválida, escolha a dificuldade 1, 2 ou 3:"); nivel = nDificuldade.nextInt(); } int jogoNaoAcabou = 1; //Enquanto a variável jogonaoAcabou for <= 5 chama o método JogadorHumano while (jogoNaoAcabou <= 5) { jogador.JogadorHumano(Tabuleiro.tab); //Se o nível for igual a 1, cai nesse if e chama o método JogadorComputadorA if (nivel == 1) { compA.JogadorComputadorA(Tabuleiro.tab); } //Nível igual a 2, cai nesse else if e chama o método JogadorComputadorB else if (nivel == 2){ compB.JogadorComputadorB(Tabuleiro.tab); } //Chama o método caso Jogador Humano ou Computador tenha vencido if(jogoTabuleiro.VerificaVencedor(Tabuleiro.tab)){ break; //Para encerrar o jogo caso um dos dois tenha vencido } //jogoNaoAcabou for igual a 5, significa que todas os espaços foram preenchidos e não teve vencedor else if(jogoNaoAcabou == 5){ System.out.println("EMPATE"); } //Incrementa jogoNaoAcabou + 1 jogoNaoAcabou++; } } }
  7. Boa noite, @AdrianoSiqueira Obrigado! Consegui resolver essa parte. Preciso de mais uma ajuda, se você puder me orientar. Então, testando o Jogo da velha, percebi que mesmo o Jogador Humano vencendo a partida, o Computador ainda efetua mais uma jogada. Por exemplo.: X|O|O X|O|_ X| | Jogador Humano VENCEU É tipo isso, o Jogador Humano venceu e o Computador imprimiu mais um O ainda. Acredito que segue algum detalhe nesses if/else, em alguma parte desses blocos de códigos que se encontra no Main. Segue o código abaixo: public class Jogo { //Instâncias de Tabuleiro, Jogador, ComputadorA, ComputadorB e ComputadorC static Tabuleiro jogoTabuleiro = new Tabuleiro(); static Jogador jogador = new Jogador(); static ComputadorA compA = new ComputadorA(); static ComputadorB compB = new ComputadorB(); public static void main(String[] args) { System.out.println("***** Jogo da Velha *****"); System.out.println("Jogador Humano: X"); System.out.println("Computador: O\n"); System.out.println("Escolha o nível de dificuldade 1, 2 ou 3:"); //Ler o que foi digitado pelo usuário Scanner nDificuldade = new Scanner(System.in); //Armazena o que foi digitado int nivel = nDificuldade.nextInt(); //Entra nesse laço se o que foi digitado for menor que 1 ou menor que 3 while(nivel < 1 || nivel > 3){ System.out.println("Opção inválida, escolha a dificuldade 1, 2 ou 3:"); nivel = nDificuldade.nextInt(); } int jogoNaoAcabou = 1; //Enquanto a variável jogonaoAcabou for <= 5 chama o método JogadorHumano while (jogoNaoAcabou <= 5) { jogador.JogadorHumano(Tabuleiro.tab); //Se o nível for igual a 1, cai nesse if e chama o método JogadorComputadorA if (nivel == 1) { compA.JogadorComputadorA(Tabuleiro.tab); } //Nível igual a 2, cai nesse else if e chama o método JogadorComputadorB else if (nivel == 2){ compB.JogadorComputadorB(Tabuleiro.tab); } //Chama o método caso Jogador Humano ou Computador tenha vencido if(jogoTabuleiro.VerificaVencedor(Tabuleiro.tab)){ break; //Para encerrar o jogo caso um dos dois tenha vencido } //jogoNaoAcabou for igual a 5, significa que todas os espaços foram preenchidos e não teve vencedor else if(jogoNaoAcabou == 5){ System.out.println("EMPATE"); } //Incrementa jogoNaoAcabou + 1 jogoNaoAcabou++; } } }
  8. Bom dia. Alguém poderia me ajudar? Tenho um laço de repetição while no código para verificar se o número digitado é 1, 2 ou 3, caso contrário entra no laço, e apresenta a mensagem de opção, até que seja digitado a opção correta, porém ele só entende a primeiro condição, a outra ignorada. Segue o código abaixo: System.out.println("Escolha o nível de dificuldade 1, 2 ou 3:"); Scanner nDificuldade = new Scanner(System.in); int nivel = nDificuldade.nextInt(); //int opcao = nivel; while((nivel != 1 && nivel != 2) && nivel != 3)){ System.out.println("Opção inválida, escolha a dificuldade 1, 2 ou 3:"); nivel = nDificuldade.nextInt(); } Outra dúvida: como eu faço pra chamar um método, e repetir ele quantas vezes quiser juntamente com outro, por exemplo.:sem fazer essa repetição de código abaixo, chama um de cada vez, mas sem ser desse jeito que está. Segue o código a abaixo: if(nivel == 1){ JogadorHumano(tab); JogadorComputadorA(tab); JogadorHumano(tab); JogadorComputadorA(tab); JogadorHumano(tab); JogadorComputadorA(tab); JogadorHumano(tab); JogadorComputadorA(tab); JogadorHumano(tab); }
  9. Bom dia. Alguém poderia me ajudar em relação ao código? Preciso implementar as jogadas do computador, no momento, só consigo efetuar a jogadas do usuário (marcação X), minha ideia era que a cada jogada do usuário, a próxima seria do Computador(precisa ter 3 níveis de dificuldade, de jogadas), e assim, sucessivamente. Segue o código abaixo: import java.util.Scanner; public class Jogo { //Vai desenhar o tabuleiro static char [][] tab = {{'_', '|','_','|','_'} , {'_', '|','_','|','_'} , {' ', '|',' ','|',' '}}; public static void main(String[] args) { //Chama método JogadorHumano e passa parâmetro tab Jogo para iniciar jogo JogadorHumano(tab); JogadorHumano(tab); } //Método para verificar marcação da jogada, posição, int posicaoMarcada para verificar se já foi marcada //char [][] tabuleirojogo vai verificar tabuleiro //Método boolean para retornar true ou false public static boolean VerificaEspacoPreenchido(int posicaoMarcada, char [][] tabuleiroJogo) { //Estrututa Switch para verificar posição, qual posição foi marcada switch(posicaoMarcada){ case 1: //Verifica se a posição 1 está preenchida if(tabuleiroJogo[0][0] == '_') { //Bolean será true, retonando que não está preenchido return true; } //Se tiver preenchida retorna false else { return false; } case 2: if(tabuleiroJogo[0][2] == '_') { return true; } else { return false; } case 3: if(tabuleiroJogo[0][4] == '_') { return true; } else { return false; } case 4: if(tabuleiroJogo[1][0] == '_') { return true; } else { return false; } case 5: if(tabuleiroJogo[1][2] == '_') { return true; } else { return false; } case 6: if(tabuleiroJogo[1][4] == '_') { return true; } else { return false; } case 7: if(tabuleiroJogo[2][0] == ' ') {//''Espaço vazio return true; } else { return false; } case 8: if(tabuleiroJogo[2][2] == ' ') { return true; } else { return false; } case 9: if(tabuleiroJogo[2][4] == ' ') { return true; } else { return false; } default: return false; } } //Essa pode ser a classe que vai imprimi o tabuleiro //Deifine método array passando com parâmetro nome do mesmo public static void ImprimiTabuleiro(char[][] tabuleiroJogo) { //Vai exibir tabuleiro for (char[] linha : tabuleiroJogo) { for(char c : linha) { System.out.print(c); } System.out.println(); } }//Separar essa parte do código em outra classe //Métod para as jogadas do jogador humano, pega o que foi digitado no teclado e substitui no tabuleiro public static void JogadorHumano(char [][] tabuleiroJogo) { System.out.print("*** Jogo da Velha ***"); System.out.println(); ImprimiTabuleiro(tab); System.out.println("Jogador Humano, digite um opção de 1 a 9 para inserir no tabuleiro:"); //Pega o que foi digitado no teclado Scanner teclado = new Scanner(System.in); //Variável para ler posição int posicao = teclado.nextInt(); //Guarda resultado do retorno do método na variável verif do tipo booleana boolean verif = VerificaEspacoPreenchido(posicao, tabuleiroJogo); //Enquanto for diferente de true fica nesse loop dizendo que é jogado que está sendo efetuada é inválida //Só sai desse loop até efetuar uma jogada valida while(verif != true) { System.out.println("A jogado efetuada é inválida!"); System.out.println("Digite uma nova opção:"); //Lê nova jogada efetuada posicao = teclado.nextInt(); //Verifica a jogada verif = VerificaEspacoPreenchido(posicao, tabuleiroJogo); } //Chama método e passa os parâmetros posicao, que é digitado pelo usuário, Jogador Humano, e o tabuleiroJogo //Atualiza posição tabuleiro de acordo com que o usuário escolhe AtualizaTabuleiro(posicao, "Jogador Humano", tabuleiroJogo); } //pos: posição, jogador: representa jogador, tabuleiroJogo é o tabuleiro, pois precisamos alterar elementos public static void AtualizaTabuleiro(int pos, String jogador, char[][] tabuleiroJogo) { //Método para mudar as posições vazias do tabuleiro(com underline) pelas marcações, jogador humano X //jogador computador O char marcacao = ' ';//Vazia, preenchida de acordo com marcação: X ou O //Verifica jogador é Humano e efetua a marcação X if( jogador == "Jogador Humano") { marcacao = 'X';//Marca X Jogador Humano } // Verificar jogador é o Computador e efetua a marcação O else if(jogador == "Jogador Computador") { marcacao = 'O';//Marca O Jogador Computador } //Verifica posição marcada com if/else if(pos == 1){ tabuleiroJogo[0][0] = marcacao; } else if(pos == 2){ tabuleiroJogo[0][2] = marcacao; } else if(pos == 3){ tabuleiroJogo[0][4] = marcacao; } else if(pos == 4){ tabuleiroJogo[1][0] = marcacao; } else if(pos == 5){ tabuleiroJogo[1][2] = marcacao; } else if(pos == 6){ tabuleiroJogo[1][4] = marcacao; } else if(pos == 7){ tabuleiroJogo[2][0] = marcacao; } else if(pos == 8){ tabuleiroJogo[2][2] = marcacao; } else if(pos == 9){ tabuleiroJogo[2][4] = marcacao; } //Verifica posição marcada com Switch /*switch (pos) { //Se a posição for igual a 1 case 1: tabuleiroJogo[0][0] = marcacao; break; case 2: tabuleiroJogo[0][2] = marcacao; break; case 3: tabuleiroJogo[0][4] = marcacao; break; case 4: tabuleiroJogo[1][0] = marcacao; break; case 5: tabuleiroJogo[1][2] = marcacao; break; case 6: tabuleiroJogo[1][4] = marcacao; break; case 7: tabuleiroJogo[2][0] = marcacao; break; case 8: tabuleiroJogo[2][2] = marcacao; break; case 9: tabuleiroJogo[2][4] = marcacao; break; default: break; }*/ ImprimiTabuleiro(tab); } }
  10. @isrnick Boa noite! Muito Obrigado! Com essas modificações o erro foi solucionado e o código rodou perfeitamente. No momento, estou aprendendo sobre estrutura de dados heterogêneas, alocação dinâmica etc.. Até então, não conhecia as funções: "strcpy e strncpy", "strcmp e strncmp". Cada detalhe que você apresentou me ajudou bastante. Obrigado!
  11. @isrnick Boa noite, Deu certo certo com essas alterações, com isso, modifiquei a função de listar, acrescentei mais dois printf entre outros, com o nome e email...falta só um detalhe, ao utilizar a função código percebi o seguinte problema: A função buscar ela está pegando sempre as últimas informações digitadas, e utilizando em todas as numerações buscada no código. Por ex.: Digita a numeração: 1111, nome: aaaa, email: aaaaa, depois cadastra outros dados, numeração: 2222, nome, bbbb, email: bbbbb, quando faz a busca pela numeração: 1111, retorna o nome: bbbb e email: bbbbb, invés de mostrar nome: aaaa, email: aaaaa. Função Buscar: BuscaDados* Buscar(BuscaDados ** ElementoVarredura, int num) { if (*ElementoVarredura == NULL) return NULL; if (num < (*ElementoVarredura)->num) { Buscar(&((*ElementoVarredura)->esquerda), num); //Tentei adicionar depois do num: num, nome, email, e assim nas demais, porém, não altera nada. } else { if (num > (*ElementoVarredura)->num) { Buscar(&((*ElementoVarredura)->direita), num); } else { if (num == (*ElementoVarredura)->num) return *ElementoVarredura; } } } Chamada da função buscar: case 2: printf("Digite o numero a ser buscado: "); scanf_s("%d", &num); printf("\n"); system("cls"); while ((c = getchar()) != '\n' && c != EOF) {} ElementoBusca = Buscar(&root, num); //Tentei depois de num, chamar as variáveis: nome[], email[], e não altera nada também if (ElementoBusca != 0) { printf("Cadastro localizado.\n\n"); printf("Numero: %d\n", num); printf("Nome: %s\n", nome); printf("Email: %s\n\n", email); } else { printf("Cadastro nao localizado.\n"); } system("pause"); break;
  12. @isrnick Boa noite! Muito Obrigado! Com essa função imprimiu na tela o nomes de forma correta...Estou alterando a base de outro código de uma estrutura de dados, fiz algumas alterações, consegui executar o código, realizar a função de busca por um determinado número que quando digitado pelo usuário, caso estiver cadastrado retorna outras informações na tela, como, nome e email referente aquele número, porém, tem a função de listar na tela os dados que foram cadastrados, mas no momento só consigo imprimir os números, o nome, e o email do cadastro não...pretendo tentar listar os cadastros da esquerda para a direita, em ordem crescente pelos números cadastrados. Função para inserir os dados (cadastrar): void Inserir(BuscaDados ** ElementoVarredura, int num, char nome, char email) { if (*ElementoVarredura == NULL) { BuscaDados *NovoElemento = NULL; NovoElemento = (BuscaDados *)malloc(sizeof(BuscaDados)); NovoElemento->esquerda = NULL; NovoElemento->direita = NULL; NovoElemento->num = num; strcpy(NovoElemento->nome, nome); strcpy(NovoElemento->email, email); *ElementoVarredura = NovoElemento; return; } if (num < (*ElementoVarredura)->num) { Inserir(&(*ElementoVarredura)->esquerda, num, nome, email); } else { if (num > (*ElementoVarredura)->num) { Inserir(&(*ElementoVarredura)->direita, num, nome, email); } } } Nessa função acima, essa parte está apresentando erros: strcpy(NovoElemento->nome, nome); strcpy(NovoElemento->email, email); Função para listar os dados: void ListarOrdem(BuscaDados *ElementoVarredura, int num) { if (ElementoVarredura) { ListarOrdem(ElementoVarredura->esquerda); printf("%d\t", ElementoVarredura->num); ListarOrdem(ElementoVarredura->direita); } } No caso com essa base só lista na tela os números que foram cadastrados, seus respectivos nomes e emails, não. Será triplicar essas instruções dentro do if? Pode me orientar?
  13. @isrnick A biblioteca string.h estava adicionada, fiz a seguintes alterações, mas continua a imprimir de forma embaralhada. void AdicionarMusica(char nm[20], char ab[20], float duracao) { Playlist_Musica *NovoElemento; NovoElemento = (struct Playlist_Musica *)malloc(sizeof(struct Playlist_Musica)); strcmp(NovoElemento->nm, nm); strcmp(NovoElemento->ab, ab); NovoElemento->duracao = duracao; if (Head == NULL) { Head = NovoElemento; Head->prox = NULL; } else { NovoElemento->prox = Head; Head = NovoElemento; } } void Playlist() { Playlist_Musica *ElementoVarredura; ElementoVarredura = (struct Playlist_Musica *)malloc(sizeof(struct Playlist_Musica)); ElementoVarredura = Head; //Retirei essa instrução porém não fez diferença. if (ElementoVarredura == NULL) { return; } while (ElementoVarredura != NULL) { printf("Musica: %s", ElementoVarredura->nm); printf("Artista/Banda: %s", ElementoVarredura->ab); printf("Duracao %f", ElementoVarredura->duracao); //Essa parte como eu disse, imprime normal, as intruções acima estão da mesma forma, porém da esse problema, será algo com os caracteres, string? ElementoVarredura = ElementoVarredura->prox; printf("\n"); }
  14. @isrnickEssa parte está imprimindo corretamente: printf("Duracao: %.2f", ElementoVarredura->duracao); agora os outros do tipo string...será alguma parte do elemento de varredura? A Struct : struct Playlist_Musica { char nm[20]; char ab[20]; float duracao; Playlist_Musica *prox; } *Head; Função para inserir: void AdicionarMusica(char nm[20], char ab[20], float duracao) { Playlist_Musica *NovoElemento; NovoElemento = (struct Playlist_Musica *)malloc(sizeof(struct Playlist_Musica)); NovoElemento->nm[20] = nm[20]; NovoElemento->nm[20] = ab[20]; NovoElemento->duracao = duracao; if (Head == NULL) { Head = NovoElemento; Head->prox = NULL; } else { NovoElemento->prox = Head; Head = NovoElemento; } }
  15. @isrnick Boa noite! É para implementar o código com a base da lista encadeada...retirei esse parte, mas acontece erro nessa parte: printf("Musica: %s\n", ElementoVarredura->nm);
  16. O nomes digitados no pelo usuário estão sendo listados na tela de maneira incorreta, depois de escolher a opção para listar...como devo proceder? Código: void Playlist() { Playlist_Musica *ElementoVarredura; ElementoVarredura = (struct Playlist_Musica *)malloc(sizeof(struct Playlist_Musica)); ElementoVarredura = Head; if (ElementoVarredura == NULL) { return; } while (ElementoVarredura != NULL) { printf("Musica: %s\n", ElementoVarredura->nm); printf("Artista/Banda: %s\n", ElementoVarredura->ab); printf("Duracao: %.2f", ElementoVarredura->duracao); ElementoVarredura = ElementoVarredura->prox; printf("\n"); } Ao listar os nomes digitados:
  17. @retrogamer Boa noite! Assim, o dinheiro só liberado para o vendedor quando o produto é entregue ao cliente, se você qualificar ele, caso contrário o mesmo fica retido, se o produto for entregue e o comprador não qualificar o vendedor, automaticamente, depois de uns dias o dinheiro é liberado. Procure efetuar quaisquer tipos de transações dentro da plataforma do ML, assim, eles garantem a compra e venda de ponta a ponta, ok. Sobre pagamento via boleto: Se ocorrer algum tipo de imprevisto, o dinheiro pago pelo produto via boleto, retorna para sua conta do Mercado Pago/Mercado Livre.
  18. @devair1010 Boa tarde! Ah sim, é porque o IDE não lê scanf, precisa ser scanf_s. Mas essa parte do código foi solucionado, obrigado! Esqueci de tirar o "&" dessa parte: "printf("Numero: %d\n", &num)"; Por isso estava imprimindo o número digitado de forma incorreta.
  19. Ao executar um código, o usuário digita as informações, porém, ao imprimir os dados na tela do tipo char, os mesmos não são mostrado de forma correta, fica tudo embaralhado, sem sentido algum. Código: int op, pos, c, res; int num; char nome[50]; char email[50]; BuscaDadosArvoreBinaria *root; root = (BuscaDadosArvoreBinaria *)malloc(sizeof(BuscaDadosArvoreBinaria)); root = NULL; BuscaDadosArvoreBinaria *ElementoBusca; ElementoBusca = (BuscaDadosArvoreBinaria *)malloc(sizeof(BuscaDadosArvoreBinaria)); while (1) { op = menu(); switch (op) { case 1: printf("Digite o numero desejado: "); scanf_s("%d", &num); while ((c = getchar()) != '\n' && c != EOF) {} printf("Digite o seu nome: "); scanf_s("%[^\n]%*c", nome, 50); printf("Digite o seu email: "); scanf_s("%s", email, 50); while ((c = getchar()) != '\n' && c != EOF) {} Inserir(&root, num, nome[50], email[50]); break; case 2: printf("Digite o numero a ser buscado: "); scanf_s("%d", &num); printf("\n"); while ((c = getchar()) != '\n' && c != EOF) {} // sempre limpe o buffer do teclado. ElementoBusca = Buscar(&root, num, nome[50], email[50]); if (ElementoBusca != 0) { printf("Cadastro localizado.\n\n"); printf("Numero: %d\n", &num); printf("Nome: %s\n", nome); printf("Email: %s\n\n", email); } else { printf("Cadastro nao localizado.\n"); } system("pause"); break; (...) BuscaDadosArvoreBinaria* Buscar(BuscaDadosArvoreBinaria ** ElementoVarredura, int num, char nome, char email) { if (*ElementoVarredura == NULL) return NULL; if (num < (*ElementoVarredura)->dado) { Buscar(&((*ElementoVarredura)->esquerda), num, nome, email); } else { if (num > (*ElementoVarredura)->dado) { Buscar(&((*ElementoVarredura)->direita), num, nome, email); } else { if (num == (*ElementoVarredura)->dado) return *ElementoVarredura; } } } (...)
  20. @AnsiC Esse problema ao tentar rodar o código foi solucionado. adicionado 10 minutos depois @AnsiC Boa tarde! Modificando e modificando alguns parâmetros, conseguir fazer o código executar, inserir a numeração, o nome e email...está executando a função de busca normalmente, contudo, tem apenas um detalhe ao inserir a numeração, por ex.: 2222, o programa salva, mas quando faço a busca com esse número digitado para retornar as outras informações, imprimi na tela o nome, email, e a numeração, porém, ao invés de mostrar 2222(como digitado), apresenta 949543, por ex. Pode me orientar? Código: int main() { int op, pos, c, res; int num; char nome[50]; char email[50]; BuscaDadosArvoreBinaria *root; root = (BuscaDadosArvoreBinaria *)malloc(sizeof(BuscaDadosArvoreBinaria)); root = NULL; BuscaDadosArvoreBinaria *ElementoBusca; ElementoBusca = (BuscaDadosArvoreBinaria *)malloc(sizeof(BuscaDadosArvoreBinaria)); while (1) { op = menu(); switch (op) { case 1: printf("Digite o numero desejado: "); scanf_s("%d", &num); while ((c = getchar()) != '\n' && c != EOF) {} printf("Digite o seu nome: "); scanf_s("%[^\n]%*c", nome, 50); printf("Digite o seu email: "); scanf_s("%s", email, 50); while ((c = getchar()) != '\n' && c != EOF) {} Inserir(&root, num, nome[50], email[50]); break; case 2: printf("Digite o numero a ser buscado: "); scanf_s("%d", &num); printf("\n"); while ((c = getchar()) != '\n' && c != EOF) {} // sempre limpe o buffer do teclado. ElementoBusca = Buscar(&root, num, nome[50], email[50]); if (ElementoBusca != 0) { printf("Cadastro localizado.\n\n"); printf("Numero: %d\n", &num); printf("Nome: %s\n", nome); printf("Email: %s\n\n", email); } else { printf("Cadastro nao localizado.\n"); } system("pause"); break; case 3: printf("\n\n"); Consultar(root); printf("\n\n"); system("pause"); break; case 4: return 0; default: printf("Invalido\n"); } } return 0; } int menu() { int op, c; system("Cls"); printf("1.Cadastrar dados\n"); printf("2.Buscar dados\n"); printf("3.Consultar dados\n"); printf("4.Sair\n"); printf("Digite a opcao desejada: "); scanf_s("%d", &op); while ((c = getchar()) != '\n' && c != EOF) {} system("Cls"); return op; } void Inserir(BuscaDadosArvoreBinaria ** ElementoVarredura, int num, char nome, char email) { if (*ElementoVarredura == NULL) { BuscaDadosArvoreBinaria *NovoElemento = NULL; NovoElemento = (BuscaDadosArvoreBinaria *)malloc(sizeof(BuscaDadosArvoreBinaria)); NovoElemento->esquerda = NULL; NovoElemento->direita = NULL; NovoElemento->dado = num, nome, email; *ElementoVarredura = NovoElemento; return; } if (num < (*ElementoVarredura)->dado) { Inserir(&(*ElementoVarredura)->esquerda, num, nome, email); } else { if (num > (*ElementoVarredura)->dado) { Inserir(&(*ElementoVarredura)->direita, num, nome, email); } } } BuscaDadosArvoreBinaria* Buscar(BuscaDadosArvoreBinaria ** ElementoVarredura, int num, char nome, char email) { if (*ElementoVarredura == NULL) return NULL; if (num < (*ElementoVarredura)->dado) { Buscar(&((*ElementoVarredura)->esquerda), num, nome, email); } else { if (num > (*ElementoVarredura)->dado) { Buscar(&((*ElementoVarredura)->direita), num, nome, email); } else { if (num == (*ElementoVarredura)->dado) return *ElementoVarredura; } } }
  21. @AnsiC Bom dia! Tentando refazer o código...apareceu o seguinte erro: Código: struct BuscaDadosArvoreBinaria { int dado; char dado; struct BuscaDadosArvoreBinaria * direita, *esquerda; }; int menu(); void Inserir(BuscaDadosArvoreBinaria **ElementoVarredura, int num, char nome, char email); BuscaDadosArvoreBinaria* Buscar(BuscaDadosArvoreBinaria **ElementoVarredura, int num); void Consultar(BuscaDadosArvoreBinaria *); int main() { int op, num, pos, c, res; char nome[50]; char email[50]; BuscaDadosArvoreBinaria *root; root = (BuscaDadosArvoreBinaria *)malloc(sizeof(BuscaDadosArvoreBinaria)); root = NULL; BuscaDadosArvoreBinaria *ElementoBusca; ElementoBusca = (BuscaDadosArvoreBinaria *)malloc(sizeof(BuscaDadosArvoreBinaria)); while (1) { op = menu(); switch (op) { case 1: printf("Digite o numero desejado: "); scanf_s("%d", &num); printf("Digite o nome: "); scanf("%s", nome); printf("Digite o email: "); scanf_s("%s", email); Inserir(&root, num, nome, email); break; case 2: printf("Digite o numero a ser buscado: "); scanf_s("%d", &num); ElementoBusca = Buscar(&root, num); if (ElementoBusca != 0) printf(".\n"); else printf(".\n"); system("pause"); break; case 3: printf("\n\n"); Consultar(root); printf("\n\n"); system("pause"); break; case 4: return 0; default: printf("Opcao invalida\n"); } } return 0; } int menu() { int op, c; system("Cls"); printf("1.Cadastrar dados\n"); printf("2.Buscar dados\n"); printf("3.Consultar dados\n"); printf("4.Sair\n"); printf("Digite a opcao desejada: "); scanf_s("%d", &op); system("Cls"); return op; } void Inserir(BuscaDadosArvoreBinaria ** ElementoVarredura, int num, char nome, char email) { if (*ElementoVarredura == NULL) { BuscaDadosArvoreBinaria *NovoElemento = NULL; NovoElemento = (BuscaDadosArvoreBinaria *)malloc(sizeof(BuscaDadosArvoreBinaria)); NovoElemento->esquerda = NULL; NovoElemento->direita = NULL; NovoElemento->dado = num, nome, email; *ElementoVarredura = NovoElemento; return; } if (num < (*ElementoVarredura)->dado) { Inserir(&(*ElementoVarredura)->esquerda, num); } else { if (num > (*ElementoVarredura)->dado) { Inserir(&(*ElementoVarredura)->direita, num); } } } BuscaDadosArvoreBinaria* Buscar(BuscaDadosArvoreBinaria ** ElementoVarredura, int num) { if (*ElementoVarredura == NULL) return NULL; if (num < (*ElementoVarredura)->dado) { Buscar(&((*ElementoVarredura)->esquerda), num); } else { if (num > (*ElementoVarredura)->dado) { Buscar(&((*ElementoVarredura)->direita), num); } else { if (num == (*ElementoVarredura)->dado) return *ElementoVarredura; } } }
  22. Bom dia! Preciso fazer um código de cadastro em uma estrutura de dados do tipo árvore binária, onde, digita os dados do cadastro(nome, email, numeração), lista esses dados e faz a busca através da numeração...Modifiquei a base, porém, há detahes que não consegui encaixar e o código persiste em erro e mais erros. Código: #include<stdlib.h> #include<stdio.h> struct ElementoDaArvoreBinaria { char nome[50]; char email[50]; int num; struct ElementoDaArvoreBinaria * direita, *esquerda; }; int menu(); void Inserir(ElementoDaArvoreBinaria **ElementoVarredura, int num, char nome[50], char email[50]); void Buscar(ElementoDaArvoreBinaria **ElementoVarredura, int num, char nome[50], char email[50]); void Consultar(ElementoDaArvoreBinaria *, int num, char nome[50], char email[50]); int main() { char nome[50]; char email[50]; int op, num, c; ElementoDaArvoreBinaria *root; root = (ElementoDaArvoreBinaria *)malloc(sizeof(ElementoDaArvoreBinaria)); root = NULL; ElementoDaArvoreBinaria *ElementoBusca; ElementoBusca = (ElementoDaArvoreBinaria *)malloc(sizeof(ElementoDaArvoreBinaria)); while (1) { op = menu(); switch (op) { case 1: printf("Digite o nome do aluno: "); scanf_s("%s", nome); printf("Digite o email do aluno: "); scanf_s("%s", email); printf("Digite o ru do aluno: "); scanf_s("%d", &num); while ((c = getchar()) != '\n' && c != EOF) {} Inserir(&root, num); break; case 2: printf("Digite o numero do ru para buscar os dados: "); scanf_s("%d", &num); while ((c = getchar()) != '\n' && c != EOF) {} // sempre limpe o buffer do teclado. ElementoBusca = Buscar(&root, num); if (ElementoBusca != 0) { printf("Cadastro encontrado\n"); printf("RU: %d Nome: %s Email %s\n", ru, nome, email); } else printf("Nenhum cadastro encontrado\n"); system("pause"); break; case 3: printf("\n\n"); Consultar(&root); printf("\n\n"); system("pause"); break; case 4: return 0; default: printf("Opcao Invalido\n"); } } return 0; } int menu() { int op, c; system("Cls"); printf("1.Inserir na Arvore Binaria do tipo BST\n"); printf("2.Buscar na Arvore Binaria do tipo BST\n"); printf("3.Consultar a Arvore Binaria do tipo BST\n"); printf("4.Sair\n"); printf("Digite sua escolha: "); scanf_s("%d", &op); while ((c = getchar()) != '\n' && c != EOF) {} system("Cls"); return op; } void Inserir(ElementoDaArvoreBinaria ** ElementoVarredura, int num, char nome[50], char email[50] ) { if (*ElementoVarredura == NULL) { ElementoDaArvoreBinaria *NovoElemento = NULL; NovoElemento = (ElementoDaArvoreBinaria *)malloc(sizeof(ElementoDaArvoreBinaria)); NovoElemento->esquerda = NULL; NovoElemento->direita = NULL; NovoElemento->root = num, nome, email; *ElementoVarredura = NovoElemento; } if (num < (*ElementoVarredura)->root, num, nome, email) { Inserir(&(*ElementoVarredura)->esquerda, num, nome, email); } else { if (num > (*ElementoVarredura)->root, num, nome, email) { Inserir(&(*ElementoVarredura)->direita, num, nome, email); } } } void Buscar(root, int num, char nome[50], char email[50]) { if (root == NULL) return NULL; if (num > (root)->num, nome, email) { Buscar(&((root)->esquerda), num, nome, email); } else { if (num> (root)->num, nome, email) { Buscar(&((root)->esquerda), num, nome, email); } else { if (num == root->num, nome, email) system("cls"); printf("Dados do aluno\n"); printf("\n\nNome: %s", (root)->Nome); printf("\n\Email: %s", (root)->Email); printf("\nNumero: %d", (root)->num); } } } void Consultar(int num, char nome[50], char email[50]) { if (root != NULL) { printf("Listar dados"); printf("%d %s %s \n", num, nome, email); } } Erros:
  23. @AnsiC Olha agora o código, ele persiste em erros e erro, peguei a base da estrutura da árvore binária, e modificando...porém na maioria dos detalhes encontra o erro, consegui rodar o mesmo uma vez, mas na busca só apresentou o numero, faltou email e nome, e continuei a modificar, estou tentando não sair muito fora do contexto, da base da árvore binária. Você me orientar no código abaixo: #include<stdlib.h> #include<stdio.h> struct ElementoDaArvoreBinaria { char nome[50]; char email[50]; int num; struct ElementoDaArvoreBinaria * direita, *esquerda; }; int menu(); void Inserir(ElementoDaArvoreBinaria **ElementoVarredura, int num, char nome[50], char email[50]); void Buscar(ElementoDaArvoreBinaria **ElementoVarredura, int num, char nome[50], char email[50]); void Consultar(ElementoDaArvoreBinaria *, int num, char nome[50], char email[50]); int main() { char nome[50]; char email[50]; int op, num, c; ElementoDaArvoreBinaria *root; root = (ElementoDaArvoreBinaria *)malloc(sizeof(ElementoDaArvoreBinaria)); root = NULL; ElementoDaArvoreBinaria *ElementoBusca; ElementoBusca = (ElementoDaArvoreBinaria *)malloc(sizeof(ElementoDaArvoreBinaria)); while (1) { op = menu(); switch (op) { case 1: printf("Digite o nome do aluno: "); scanf_s("%s", nome); printf("Digite o email do aluno: "); scanf_s("%s", email); printf("Digite o ru do aluno: "); scanf_s("%d", &num); while ((c = getchar()) != '\n' && c != EOF) {} Inserir(&root, num); break; case 2: printf("Digite o numero do ru para buscar os dados: "); scanf_s("%d", &num); while ((c = getchar()) != '\n' && c != EOF) {} // sempre limpe o buffer do teclado. ElementoBusca = Buscar(&root, num); if (ElementoBusca != 0) { printf("Cadastro encontrado\n"); printf("RU: %d Nome: %s Email %s\n", ru, nome, email); } else printf("Nenhum cadastro encontrado\n"); system("pause"); break; case 3: printf("\n\n"); Consultar(&root); printf("\n\n"); system("pause"); break; case 4: return 0; default: printf("Opcao Invalido\n"); } } return 0; } int menu() { int op, c; system("Cls"); printf("1.Inserir na Arvore Binaria do tipo BST\n"); printf("2.Buscar na Arvore Binaria do tipo BST\n"); printf("3.Consultar a Arvore Binaria do tipo BST\n"); printf("4.Sair\n"); printf("Digite sua escolha: "); scanf_s("%d", &op); while ((c = getchar()) != '\n' && c != EOF) {} system("Cls"); return op; } void Inserir(ElementoDaArvoreBinaria ** ElementoVarredura, int num, char nome[50], char email[50] ) { if (*ElementoVarredura == NULL) { ElementoDaArvoreBinaria *NovoElemento = NULL; NovoElemento = (ElementoDaArvoreBinaria *)malloc(sizeof(ElementoDaArvoreBinaria)); NovoElemento->esquerda = NULL; NovoElemento->direita = NULL; NovoElemento->root = num, nome, email; *ElementoVarredura = NovoElemento; } if (num < (*ElementoVarredura)->root, num, nome, email) { Inserir(&(*ElementoVarredura)->esquerda, num, nome, email); } else { if (num > (*ElementoVarredura)->root, num, nome, email) { Inserir(&(*ElementoVarredura)->direita, num, nome, email); } } } void Buscar(root, int num, char nome[50], char email[50]) { if (root == NULL) return NULL; if (num > (root)->num, nome, email) { Buscar(&((root)->esquerda), num, nome, email); } else { if (num> (root)->num, nome, email) { Buscar(&((root)->esquerda), num, nome, email); } else { if (num == root->num, nome, email) system("cls"); printf("Dados do aluno\n"); printf("\n\nNome: %s", (root)->Nome); printf("\n\Email: %s", (root)->Email); printf("\nNumero: %d", (root)->num); } } } void Consultar(int num, char nome[50], char email[50]) { if (root != NULL) { printf("Listar dados"); printf("%d %s %s \n", num, nome, email); } }
  24. @AnsiC Vou tentar a implementação levando para esse lado 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...