-
Posts
36 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Fabricantes
Livros
Cursos
Análises
Fórum
posts postados por PauloC19
-
-
@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
-
-
@Basole Seria como retornar verdadeiro ou falso, né!? Eu queria retornar a quantidade
-
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
-
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!
- 1
-
@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:
- 1
-
@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.
- 3
-
@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.
- 1
-
@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; } } } (...)
- 1
-
6 horas atrás, PauloC19 disse:
@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 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);
}
}- 1
-
@AnsiC Vou tentar a implementação levando para esse lado agora...
- 1
-
@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.
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
Função CONT.SE - Retornar a quantidade de preços iguais entre duas colunas
em Microsoft Office e similares
Postado
@BasoleFiz de outra forma e conseguir chegar ao resultado desejado. Obrigado pela ajuda!