Ir ao conteúdo
  • Cadastre-se

Boko Moko

Membro Pleno
  • Posts

    149
  • Cadastrado em

  • Última visita

Tudo que Boko Moko postou

  1. Observe que você está criando a Pessoa p e a Conta c dentro do loop do menu. Recomendo tirar fora pois de outra forma você está reinicializando a variável a cada vez. adicionado 6 minutos depois Também é importante definir a relação entre os objetos. Entendi que uma pessoa pode ter até 100 contas. O CPF é um atributo original da pessoa e não da conta. Melhor usá-lo como identificador da pessoa, na classe pessoa e usá-lo para identificar o correntista, o dono da conta, na conta. Isso é mais parecido com o que acontece na vida real em bancos de dados para quando você for completar esse programa e gravar os dados de pessoas, contas, bancos.
  2. Dá uma olhada aqui https://repl.it/@bokomoko/Confere-loteria #include <math.h> #include <stdio.h> #include <stdlib.h> void acertos(int gabarito[], int resposta[], int cartao) { int cont = 0; for (int x = 0; x < 13; x++) { cont += (resposta[x] == gabarito[x]); } printf("O apostador %d acertou %d\n", cartao, cont); if (cont == 13) { printf("Parabens voce ganhou!!"); } } void main() { int gabarito[13] = {1, 0, 2, 2, 1, 0, 1, 2, 0, 1, 1, 2, 0}; int cartao; int resposta[13]; int x, y; printf("Digite o numero do seu cartao:"); scanf("%d", &cartao); printf("Digite 0 para sair:\n"); for (x = 0; x < 13; x++) { printf( "Digite o resultado do jogo %d : Coluna 1 - Zero(empate) Coluna 2", (x + 1)); scanf("%d", &resposta[x]); }; acertos(gabarito, resposta, cartao); }
  3. Pense assim, quantos números de cartões serão digitados ? Um só ? ou 13 ? E porque não 20 ? ou 10 ? Provavelmente só precisa de um número de cartao. Um cartão = 13 resultados de jogos.
  4. O número do cartão não é vetor ok ? E o contador de acertos não é vetor. Repense. O programa tá pertinho de ficar correto.
  5. O problema é que você está fazendo um laço só e todos os 3 dígitos estão variando juntos. Quando você incrementa a, incrementa também o b e o c ao mesmo tempo. Então quando a é 1, b 0, c0, a 2 , b 1 , c 1 e assim por diane. O que tem que fazer é um laço dentro de um laço dentro de um laço. Porque 3 laços ? porque tem 3 variáveis aí O a vai variar de 1 a 9 O b vai variar de 0 a 9 o c vai variar de 0 a 9 E como sabemos de antemão a faixa que os valores vão variar, usamos o for, assi #include <stdio.h> int main(void) { for (int a = 1; a < 10; a++) { for (int b = 0; b < 10; b++) { for (int c = 0; c < 10; c++) { printf("%d%d%d=(%d*%d*%d), %d\n",a,b,c, a, b, c, (a * b * c)); } } } return 0; }
  6. Obrigado a você pela oportunidade de ajudá-lo
  7. Devair, não precisa trocar a ordem do vetor. Tanto faz se o número está armazenado de frente para traz ou de traz para frente no vetor. O que importa é como a função retorna o valor. Seu código ficou muito bom e pode ser ainda mais otimizado.
  8. Acho que facilitaria sobremaneira se você usasse vetores. Que acha da ideia ?
  9. Tente assim #include<stdio.h> #include<stdlib.h> void main () { int vet[10]; /* este for vai preencher o vetor */ for (int x=0;x<=9;x++) { vet[x]= x*2+1; } /* este for vai exibir o vetor */ for (int x=0;x<=9;x++) { printf("Vetor[%d] = %d\n",x,vet[x]); } }
  10. você está invocando a função ANTES de obter o número e a casa . Pense nisso. Já o printf está errado porque .... faltou O %d tente assim prinft("O dígito é: %d \n",position);
  11. Lembre-se, a função pow() invoca a biblioteca de matemática de ponto flutuante e é muito mais lenta do multiplicar por 10 repetidas vezes. adicionado 22 minutos depois Tente esse código aqui #include <stdio.h> int pedaco(int numero, int casa) { int digitos[] = { 0,0,0,0,0,0,0,0,0,0}; int i; for (i = 0; numero>0; i++) { digitos[i] = numero % 10; numero = numero / 10; } return (digitos[i-casa-1]); } int main(void) { printf("%d %d\n", 7452, pedaco(7452, 0)); printf("%d %d\n", 7452, pedaco(7452, 1)); printf("%d %d\n", 7452, pedaco(7452, 2)); printf("%d %d\n", 7452, pedaco(7452, 3)); return 0; }
  12. Seu programa está com a lógica quase correta porém com a implementação errada. O problema fundamental é que você está confundindo apontar com o que o apontador aponta Por exemplo, a função push para por na pilha void push (pPilha *p, int x){ // *p é o apontador para o topo da pilha // x é valor a ser adicionado a pilha pNodo no; // aqui declara-se uma variável que vai ter o apontador para o novo nó no = (pNodo) malloc(sizeof (nodo_b)); // aqui criou-se o nó if (no != NULL){ // se der != NULL significa que conseguiu alocar a memória para o novo nó no -> dado = x; // no não é uma estrutura. Ele aponta para uma então o correto seria (*no)->dado = x; no -> prox = *p; // aqui a mesma coisa (*no)->dado = *p; o próximo passa a apontar para o ex-topo da pilha *p = no; // topo da pilha passa a apontar para o no } } Existem vários erros de compilação e inclusão de bibliotecas que não são necessárias. além disso, esqueceu de traduzir "band" para faixa. Dá uma olhada aqui e checa os comentários: Código: #include <stdio.h> #include <stdlib.h> /* #include <conio.h> #include <locale.h> */ typedef struct nodo_a { int dado; struct nodo_a *prox; } nodo_b; typedef nodo_b *pNodo; typedef nodo_b *pPilha; void push(pPilha *p, int x) { pNodo no; no = (pNodo)malloc(sizeof(nodo_b)); if (no != NULL) { no->dado = x; no->prox = *p; *p = no; } } int pop(pPilha *p) { pNodo no; int x = 0; no = *p; x = (*p)->dado; *p = (*p)->prox; free(no); return x; } int pilha_vazia(pPilha *p) { return (*p == NULL ? 1 : 0); } void mostra_pilha(pPilha *p) { pPilha ponteiro; ponteiro = *p; for( int i=0 ; (ponteiro != NULL) ;i++) { printf("Posicao %2i valor=%2i\n",i,(*ponteiro).dado); ponteiro = (*ponteiro).prox; } printf("Fim da pilha\n\n"); } void pilhasIguais(pNodo N1, pNodo N2) { double faixa = 1; if ((N1 == NULL) || (N2 == NULL)) { printf(" Um das Pilhas Está vazia "); } else { while ((N1 != NULL) && (N2 != NULL) && (faixa)) { if (N1->dado != N2->dado) { faixa = 0; } else { N1 = N1->prox; N2 = N2->prox; } } } if ((N1 == NULL) && (N2 == NULL) && (faixa)) { printf("Pilhas Iguais\n"); } else { printf("Pilhas Diferentes\n"); } } void main() { pPilha P1 = NULL, P2 = NULL; /* cria pilha um */ push(&P1, 8); push(&P1, 23); push(&P1, 3); mostra_pilha(&P1); push(&P2, 8); push(&P2, 23); push(&P2, 3); mostra_pilha(&P2); if (!pilha_vazia(&P1) && !pilha_vazia(&P2)) { pilhasIguais(P1, P2); } pPilha P3 = NULL, P4 = NULL; push(&P3, 8); push(&P3, 23); push(&P3, 4); mostra_pilha(&P3); pilhasIguais(P1, P3); push(&P4, 4); push(&P4, 23); push(&P4, 8); mostra_pilha(&P4); pilhasIguais(P1, P4); ; } Código com compilador online: https://repl.it/@bokomoko/Pilha-usando-apontadores-comparacao
  13. Eu faria assim int pedaco ( int numero, int casa ) { int digitos[10]; i = 0 ; while( 1) { digitos[i] = numero % 10 ; numero = numero / 10 ; if (!numero) { break; } i++; } return (digito[i-casa]); } teste aqui https://repl.it/@bokomoko/obem-digitos
  14. Eis um pedaço do código #include <stdio.h> #include <stdlib.h> #include <string.h> struct dados { char Nome[20]; char Email[40]; char observacoes[500]; struct endereco { char Rua[20]; char Numero[10]; char Complemento[20]; char Bairro[20]; char Cep[20]; char Cidade[20]; char Estado[20]; char Pais[20]; } endereco; struct telefone { char DDD[10]; char NumeroTelefone[9]; } telefone; struct aniversario { int Dia; int Mes; int Anos; } aniversario; }; typedef struct dados dados; /* árvore binária com os dados da agenda */ struct agenda { struct dados nota; struct agenda *maior; struct agenda *menor; }; typedef struct agenda agenda; /* fim da declaração da árvora binária */ int busca(struct agenda **Raiz, char nome[]) { if (*Raiz == NULL) { return 0; // não achou } int compara = strcmp(((*Raiz)->nota.Nome), nome); if (compara == 0) { // achou ! return 1; } else if (compara < 0) { return (busca(&(*Raiz)->maior, nome)); } else { return (busca(&(*Raiz)->menor, nome)); } } void insercao(struct agenda **Raiz, char nome[]) { if (*Raiz == NULL) { *Raiz = (agenda *)malloc(sizeof(agenda)); (*Raiz)->maior = NULL; (*Raiz)->maior = NULL; strcpy((*Raiz)->nota.Nome, nome); } else { int compara = strcmp(((*Raiz)->nota.Nome), nome); if (compara < 0) { insercao(&(*Raiz)->maior, nome); } else { insercao(&(*Raiz)->menor, nome); } } } void insere_nota(struct agenda **Raiz, struct dados *mais_um) { if (*Raiz == NULL) { *Raiz = (agenda *)malloc(sizeof(agenda)); (*Raiz)->maior = NULL; (*Raiz)->maior = NULL; /* strcpy( (*Raiz)->nota.Nome , nome) ;*/ (*Raiz)->nota = (*mais_um); } else { int compara = strcmp(((*Raiz)->nota.Nome), (*mais_um).Nome); if (compara < 0) { insere_nota(&(*Raiz)->maior, mais_um); } else { insere_nota(&(*Raiz)->menor, mais_um); } } } void exibe_asc(agenda **Raiz) { if (*Raiz == NULL) { return; } exibe_asc(&(*Raiz)->menor); printf("Nome : %s\nEmail: %s \n\n", (*Raiz)->nota.Nome, (*Raiz)->nota.Email); exibe_asc(&(*Raiz)->maior); } void exibe_desc(agenda **Raiz) { if (*Raiz == NULL) { return; } exibe_desc(&(*Raiz)->maior); printf("Nome: %s\nEmai: %s \n\n", (*Raiz)->nota.Nome, (*Raiz)->nota.Email); exibe_desc(&(*Raiz)->menor); } void mostra(struct dados *entrada) { printf("Dados da pessoa:\n"); printf("\tNome: %s\n",(*entrada).Nome); printf("\tEmail:%s\n",(*entrada).Email); printf("\tEndereço:\n"); printf("\t\tRua:%s\n",(*entrada).endereco.Rua); printf("\t\tNúmero:%s",(*entrada).endereco.Numero); printf("\t\tComplemento:%s",(*entrada).endereco.Complemento); printf("\t\tBairro:%s",(*entrada).endereco.Bairro); printf("\t\tCep: %s",(*entrada).endereco.Cep); printf("\t\tCidade: %s",(*entrada).endereco.Cidade); printf("\t\tEstado: %s",(*entrada).endereco.Estado); printf("\t\tPais: %s",(*entrada).endereco.Pais); printf("\tTelefone:\n"); printf("\t\tDDD: %s",(*entrada).telefone.DDD); printf("\t\tNumeto de Telefone: %s",(*entrada).telefone.NumeroTelefone); printf("\tAniversario:\n"); printf("\t\tDia: %d", &(*entrada).aniversario.Dia); printf("\t\tMês: %d", &(*entrada).aniversario.Mes); printf("\t\tAnos: %d\n", &(*entrada).aniversario.Anos); printf("Observações: %s\n\nA",(*entrada).observacoes); } /* função para obter dados do teclado */ void pega_dados(struct dados *entrada) { printf("Dados da pessoa:\n"); printf("\tNome:"); fflush(stdin); gets((*entrada).Nome); printf("\tEmail:"); fflush(stdin); gets((*entrada).Email); printf("\tEndereço:\n"); printf("\t\tRua:"); fflush(stdin); gets((*entrada).endereco.Rua); printf("\t\tNúmero:"); fflush(stdin); gets((*entrada).endereco.Numero); printf("\t\tComplemento:"); fflush(stdin); gets((*entrada).endereco.Complemento); printf("\t\tBairro:"); fflush(stdin); gets((*entrada).endereco.Bairro); printf("\t\tCep:"); fflush(stdin); gets((*entrada).endereco.Cep); printf("\t\tCidade:"); fflush(stdin); gets((*entrada).endereco.Cidade); printf("\t\tEstado:"); fflush(stdin); gets((*entrada).endereco.Estado); printf("\t\tPais:"); fflush(stdin); gets((*entrada).endereco.Pais); printf("\tTelefone:\n"); printf("\t\tDDD:"); fflush(stdin); gets((*entrada).telefone.DDD); printf("\t\tNumeto de Telefone:"); fflush(stdin); gets((*entrada).telefone.NumeroTelefone); printf("\tAniversario:\n"); printf("\t\tDia:"); scanf("%d", &(*entrada).aniversario.Dia); printf("\t\tMês:"); scanf("%d", &(*entrada).aniversario.Mes); printf("\t\tAnos:"); scanf("%d", &(*entrada).aniversario.Anos); printf("Observações:"); fflush(stdin); gets((*entrada).observacoes); } int main(void) { struct agenda *minha_agenda; minha_agenda = NULL; struct dados um_cara; strcpy(um_cara.Nome, "Criatura"); strcpy(um_cara.Email, "[email protected]"); mostra(&um_cara); insere_nota(&minha_agenda, &um_cara); mostra(&um_cara); pega_dados(&um_cara); insere_nota(&minha_agenda, &um_cara); insercao(&minha_agenda, "Joao"); insercao(&minha_agenda, "Lara"); insercao(&minha_agenda, "Eduardo"); insercao(&minha_agenda, "Ana"); insercao(&minha_agenda, "Joaquim"); insercao(&minha_agenda, "Bernardo"); insercao(&minha_agenda, "Diego"); exibe_asc(&minha_agenda); printf("Buscando Ana...\n%d\n", busca(&minha_agenda, "Ana")); printf("Buscando Chica..\n%d\n", busca(&minha_agenda, "Chica")); printf("Buscando Criatura..\n%d\n", busca(&minha_agenda, "Criatura")); return 0; } Ainda não está pronto, mas usei uma boa parte do que você definiu. As structs (simplifiquei uns detalhes), a rotina de obtenção de dados. adicionado 26 minutos depois Pode experimentar rodá-lo aqui https://repl.it/@bokomoko/Insercao-em-arvore-binaria-1
  15. a comparação com o maior e o menor salário tem que ser feita dentro do laço. Do jeito que você está fazendo, ele só compara com o primeiro salário informado Tente novamente. Se precisar de apoio, ative o teamviewer que eu mostro no seu computador
  16. Esse exercício é uma ótima chance de usar uma árvore binária Facilita a ordenação e a busca. Já cogitou ?
  17. Depende do tamanho do projeto. Para fins didáticos, eu tenho usado o bom e velho Eclipse mesmo. Serve para um monte de linguagens.
  18. Aqui você declarou o tipo struct produtoc. Até aqui, tudo bem.... Aqui você criou uma função e declarou um array de 10 elementos que é local a essa função. O problema está no trecho abaixo, que é outra função, onde a declaração da variável não aparece. A variável local que foi declarada na função anterior não vale mais aqui pois a variável não é global. ainda por cima, essa função está com o mesmo nome da anterior, overridando (?) a anterior. Além disso, os dados estão num vetor. Observe que voce faz um loop mas não indexa o vetor. O loop inclusive percorre 10 elemento no for porém apenas 3 elementos são carregados. Solução, reestruturar essas declarações assim definição da struct ... como você fez declaração da main () dentro da main, declara a variável array dentro da main, a funçào que obtem os dados. Essa função usará a variável array como se fora global dentro da main, a função que exibe os dados. Usará variáveis globais do mesmo jeito. Dentro da main, chame a função que carrega, depois chame a função que exibe Tomei a liberdade de corrigir o programa https://repl.it/@bokomoko/exemplo-de-struct-com-declaracao-global Dá uma olhada.
  19. O enunciado pede para calcular a média, o salário mais alto e o mais baixo. O programa deve pedir o código e o salário do funcionário. e quando um código igual a zero for digitado, termina o programa De cara da para ver que vamos fazer um loop. Porque ? porque o enunciado diz que sào "vários". Então dentro do loop vamos solicitar o código (um scanf de código inteiro, para facilitar) e o salário (um scanf de float pois salário tem casas decimais). Mas quantos funcionários ? Não sabemos ! Se soubéssemos, iriíamos usar um for que é o laço que é usado quando sabemos quantas vezes vamos repetir. Como nào sabemos quantas vezes vamos pedir código + salário, então vamos usar um while. Qual a condição para sair do laço ? Quando um código igual a 0 for digitado Então o pseudo código fica mais ou menos assim Inicializar variáveis enquanto o código não é 0 vamos pedir o código se o código for zero, saímos do loop pegamos o salário acumulamos para calcular a média contamos quantos funcionários até agora testamos se o salário é o maior, se for, esse passa a ser o maior salário testamos se o salário é o menor, se for, esse passa a ser o menor salário fim do laço Calcula-se a média exibe-se o maior salário exibe-se o menor salário exibe-se a média Que tal ? Consegue ir adiante sozinho ? Ou quer mais uma ajuda ?
  20. eu faria assim https://repl.it/@bokomoko/qual-o-maior-salario-de-5-salarios-digitados O truque é inicializar a variável que terá o maior salário com um valor bem pequeno. Assim, na primeira vez que ele for testado, qualquer salário será maior e passará a ser o maior valor. A soma dos 5 salários deve ser dividida por 5 para poder dar a média.
  21. Dica : toda vez que você repetir comandos muito parecidos, está na hora de usar um laço, seja while, ou for. No caso, a dica é calcular o primeiro elemento da sequencia de fibo, comparar com o número digitado. Foi igual ? Avança. Foi diferente ? Buzina o cara. Eis a sequencia 0,1,1,2,3,5,8,13,21 Então definimos que o corrente é 0 e o próximo é 1 (os dois primeiros números). Comparamos o input do usuário com o corrente, foi igual ? Sim, então calculamos o seguinte ao próximo = anterior + próximo anterior = próximo próximo = seguinte repetimos o teste até o usuário errar. O programa fica bem menor e mais simples. Assim Pode testá-lo aqui https://repl.it/@bokomoko/Checa-Fibo Eis o fonte #include <stdio.h> /* este programa irá checar a entrada do usuário para ver se é igual a sequencia de fibonacci */ int input(char mensagem[]){ int entrada; printf("%s",mensagem); scanf("%d",&entrada); return entrada; } int main(void) { int anterior = 0, proximo = 1, seguinte, chute, n=0 ; while (1) { // vai ficar no loop para sempre printf("Qual é o %d-ésimo número de fibonnaci. ",++n); chute = input("Qual é ele ? "); if (chute != anterior) { printf("Lamento mas você errou!\nPrograma terminado\n"); break; } seguinte = anterior + proximo; anterior = proximo; proximo = seguinte; } return 0; }
  22. Boko Moko

    C Raiz quadrada

    Veja só Acho que a ideia é o algoritmo de raiz quadrada e não como usar a função pré-fabricada. Lógico, sempre podemos usar a função já existente porém com fins didáticos a ideia é ensinar o algoritmo computacional que calcula a raiz quadrada. Como é que sqrt() faz o cálculo ? Já parou para pensar ? O algoritmo seria assim em C https://repl.it/@bokomoko/Calculo-de-raiz-quadrada Eis o fonte /* Implementação de raiz quadrada numero = float(input("Numero ? ")) precisao = int(input("Informe a precisao em casas decimais")) precisao = 1 / 10**precisao b = numero a = 1 while ( (b-a) >= precisao): b = (a+b)/2 a = numero / b print(b) */ #include <stdio.h> float raiz( float numero ) { float precisao = 0.000001; float b = numero, a=1; while ( (b-a) >= precisao ) { b = (a+b)/2; a= numero / b; } return b; } float input( char mensagem[]) { float entrada; printf("%s",mensagem); scanf("%f",&entrada); return entrada; } int main(void) { float valor = 1.0; while (1) { valor = input("Digite o número para tirar raiz ou 0 para terminar"); if (!valor) break; printf("A raiz quadradade de %f é %f\n",valor,raiz(valor)); } return 0; }

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!