-
Posts
35 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Livros
Cursos
Análises
Fórum
Tudo que PauloC19 postou
-
Excel Função CONT.SE - Retornar a quantidade de preços iguais entre duas colunas
PauloC19 respondeu ao tópico de PauloC19 em Microsoft Office e similares
@BasoleFiz de outra forma e conseguir chegar ao resultado desejado. Obrigado pela ajuda! -
Excel Função CONT.SE - Retornar a quantidade de preços iguais entre duas colunas
PauloC19 respondeu ao tópico de PauloC19 em Microsoft Office e similares
@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 -
Excel Função CONT.SE - Retornar a quantidade de preços iguais entre duas colunas
PauloC19 respondeu ao tópico de PauloC19 em Microsoft Office e similares
@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") -
Excel Função CONT.SE - Retornar a quantidade de preços iguais entre duas colunas
PauloC19 respondeu ao tópico de PauloC19 em Microsoft Office e similares
@Basole Seria como retornar verdadeiro ou falso, né!? Eu queria retornar a quantidade -
Excel Função CONT.SE - Retornar a quantidade de preços iguais entre duas colunas
PauloC19 postou um tópico em Microsoft Office e similares
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 -
Java Jogo da Velha Java - Mesmo X vencendo a partida, o Computador ainda efetua mais
PauloC19 postou um tópico em Java/Android SDK
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++; } } } -
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++; } } }
-
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); }
-
@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!
-
@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;
-
@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?
-
@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"); }
-
@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; } }
-
@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);
-
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:
-
@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.
-
@devair1010 Bom dia! Estou usando...
-
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; } } } (...)
-
@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; } } }
-
@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; } } }
-
@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); } }
-
@AnsiC Vou tentar a implementação levando para esse lado agora...
-
@AnsiC Assim, O exércício: Fazer um código em C que realiza a busca de dados(nome, email...). Fazer a busca com uma estrutura de dados(Para fazer implementação) Precisa amrazenar o nome, email, e o código. Amazenar em uma estrutura heterogênea de dados. Não precisa fazer a leitura do dados manualmente(Pensando bem, pode sim, né!? Ficaria melhor, tudo digitado, e posteriormente salvo, certo!?) e tem a opção de deixar os dados pré-armazenados. Fazer o menu com as opções, digita o código e busca esses dados. adicionado 4 minutos depois @AnsiC De acordo como pedido no exércicio acima, particularmente, não preciso deixar os dados armazenados, pode ser tudo digitado pelo usuário e salvo no programa...Com isso, o código, o nome, sobrenome é digitado pelo usuário, salvo, depois com uma opção de busca digita apenas o código, e imprimi na tela as outras informações...
-
@AnsiC Boa tarde! Desculpe talvez algumas explicações...Dessa maneira acho que era até melhor, o usuário digita as informações, o programa salva, e depois lista na tela os dados inseridos, porém, esses dados precisam está armazenados no programa para que o usuário apenas digite a numeração, e assim, imprimi na tela os outros dados, nome e sobrenome, por ex.
-
@AnsiC Olha: int MostrarDados(DadosAluno *a, int num, char nome[3][2][100]) { char nome[3][2][100] = { "nome0", "Sobrenome0" "Nome1", "Sobrenome1", "Nome2", "Sobrenome2"}; int num[3][2] = { "0000", "1111", "2222" }; int direita, esquerda; if (a == NULL) return 0; if (a->info == num) //Localizou o noh { return 1; } if (num < a->info) //Percorre pela esquerda, caso o numero seja menor do que a raiz { esquerda = buscar_ordenada(a->esq, num); } else { direita = buscar_ordenada(a->dir, num); } return esquerda + direita; } adicionado 18 minutos depois @AnsiC Como relacionaria esse dados? Tipo assim, armazenando as numerações, nome e sobrenome...entrar na condição if/else tipo a do código abaixo, referente a cada numeração e imprimir na tela os dados dessa numeração. Ex: O usuário digitou a numerção, se a mesma estiver armazenda com suas seguintes informações: if(.......){ printf("Nome: %s", ........); printf("Sobrenome: %s", .......); } e assim, fazer isso com todos os dados que estão armazenados.... int MostrarDados(DadosAluno *a,) { char nome[3][100] = { "nome0","nome1", "nome2"}; char sobrenome[3][100] = {"sobrenome0", "sobrenome1", "sobrenome2"}; int num[3][2] = {}; int direita, esquerda; if (a == NULL) return 0; if (a->info == num) //Localizou o noh { return 1; } if (num < a->info) //Percorre pela esquerda, caso o numero seja menor do que a raiz { esquerda = buscar_ordenada(a->esq, num); } else { direita = buscar_ordenada(a->dir, num); } return esquerda + direita; }
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