Ir ao conteúdo
  • Cadastre-se

PauloC19

Membro Pleno
  • Posts

    38
  • Cadastrado em

  • Última visita

posts postados por PauloC19

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

  2. 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++;
                        } 
                    }   
    }

     

  3. 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++;
    					} 
    				}   
    }

     

     

  4. 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);
        }

     

  5. 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);
    	}
    	
    }

     

  6. @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! 

     

      

    • Curtir 1
  7.  

     

    @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;

     

  8. @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?

  9. @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");
        }
     

  10. @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;
            }
        }

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

     

    530234887_ErroImprimirnomes.PNG.4b2244390131494a68b8459fa20fb746.PNG

    • Curtir 1
  12. @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. 

    • Curtir 3
  13. 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;
    		}
    	}
    }
    (...)

     

     

    • Curtir 1
  14. 6 horas atrás, PauloC19 disse:

    @AnsiC Bom dia! Tentando refazer o código...apareceu o seguinte erro:

     

    1903258887_Erroaorodarcdigo.thumb.PNG.9824ec11b0ce38890dde05fbdef07e31.PNG

     

    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;
            }
        }
    }

     

    @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;
    		}
    	}
    }

     

  15. @AnsiC Bom dia! Tentando refazer o código...apareceu o seguinte erro:

     

    1903258887_Erroaorodarcdigo.thumb.PNG.9824ec11b0ce38890dde05fbdef07e31.PNG

     

    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;
            }
        }
    }

     

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

     

    Erros.thumb.PNG.af68798d1da01174f1577539b667c2d0.PNG

  17. @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);
        }
    }

    • Curtir 1

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!