Ir ao conteúdo
  • Cadastre-se

PauloC19

Membros Plenos
  • Total de itens

    27
  • Registro em

  • Última visita

  • Qualificações

    N/D
  1. @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?
  2. @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"); }
  3. @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; } }
  4. @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);
  5. 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:
  6. @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.
  7. @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.
  8. @devair1010 Bom dia! Estou usando...
  9. 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; } } } (...)
  10. @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; } } }
  11. @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; } } }
  12. 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:
  13. @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); } }
  14. @AnsiC Vou tentar a implementação levando para esse lado agora...
  15. @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...

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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...

GRÁTIS: minicurso “Como ganhar dinheiro montando computadores”

Gabriel TorresGabriel Torres, fundador e editor executivo do Clube do Hardware, acaba de lançar um minicurso totalmente gratuito: "Como ganhar dinheiro montando computadores".

Você aprenderá sobre o quanto pode ganhar, como cobrar, como lidar com a concorrência, como se tornar um profissional altamente qualificado e muito mais!

Inscreva-se agora!