Ir ao conteúdo
  • Cadastre-se

Vitor Guilhen

Membro Júnior
  • Posts

    2
  • Cadastrado em

  • Última visita

Reputação

1
  1. Bom, estou com problemas num trabalho da faculdade.. onde tenho que fazer um código para conta em banco, que faça tudo, porém, tenho recursos limitados a coisas que o professor ensinou apenas, e está dando um erro na funçao "Saque", que sempre aparece na tela "Saque realizado", mesmo quando nao deveria acontecer. Este é o código, tem um pouco mais de 500 linhas, mas o erro está na função "Saque", e tambem no switchcase 5 do menu principal, onde se encontra essa opção. obrigado pra quem ajudar. #include <stdio.h> #include <stdlib.h> #include <locale.h> typedef struct no celula; struct no { int nmr; float saldo; struct no *prox; }; int tamanho(celula *lista) { int cont; celula *p; p = lista; cont = 0; while(p != NULL) { cont++; p = p->prox; } return cont; } void ordenaContas(celula *Lista) { int i, j, n, troca; float troca2; celula *letra, *dpletra; n = tamanho(Lista); for(i=1; i<=n-1; i++) { letra = Lista; dpletra = letra->prox; for(j=0; j<n-i; j++) { if(letra->saldo > dpletra->saldo) { troca = letra->nmr; letra->nmr = dpletra->nmr; dpletra->nmr = troca; troca2 = letra->saldo; letra->saldo = dpletra->saldo; dpletra->saldo = troca2; } letra = dpletra; dpletra = letra->prox; } } if(Lista = NULL) { printf("Lista vazia!!"); } } void ordenaSaldo(celula *Lista) { int i, j, k, n, troca; float troca2; celula *letra, *dpletra; n = tamanho(Lista); for(i=1; i<=n-1; i++) { letra = Lista; dpletra = letra->prox; for(j=0; j<n-i; j++) { if(letra->nmr > dpletra->nmr) { troca = letra->nmr; letra->nmr = dpletra->nmr; dpletra->nmr = troca; troca2 = letra->saldo; letra->saldo = dpletra->saldo; dpletra->saldo = troca2; } letra = dpletra; dpletra = letra->prox; } } if(Lista = NULL) { printf("Lista vazia!!"); } } void ordenaRico(celula *Lista) { int i, j, k, n, troca; float troca2, saldoO; celula *letra, *dpletra, *P; n = tamanho(Lista); for(i=1; i<=n-1; i++) { letra = Lista; dpletra = letra->prox; for(j=0; j<n-i; j++) { if(letra->nmr < dpletra->nmr) { troca = letra->nmr; letra->nmr = dpletra->nmr; dpletra->nmr = troca; troca2 = letra->saldo; letra->saldo = dpletra->saldo; dpletra->saldo = troca2; } letra = dpletra; dpletra = letra->prox; } } if(Lista == NULL) { printf("Lista vazia!!"); } P = Lista; for(i=0; i<3; i++) { printf("Conta: %d Saldo: %.2f\n", P->nmr, P->saldo); P = P->prox; } } void ordenaPobre(celula *Lista) { int i, j, k, n, troca; float troca2, saldoO; celula *letra, *dpletra, *P; n = tamanho(Lista); for(i=1; i<=n-1; i++) { letra = Lista; dpletra = letra->prox; for(j=0; j<n-i; j++) { if(letra->nmr > dpletra->nmr) { troca = letra->nmr; letra->nmr = dpletra->nmr; dpletra->nmr = troca; troca2 = letra->saldo; letra->saldo = dpletra->saldo; dpletra->saldo = troca2; } letra = dpletra; dpletra = letra->prox; } } if(Lista == NULL) { printf("Lista vazia!!"); } P = Lista; for(i=0; i<3; i++) { printf("Conta: %d Saldo: %.2f\n", P->nmr, P->saldo); P = P->prox; } } void imprimir(celula *lista) { celula *p; for(p = lista; p != NULL; p = p->prox) printf(" %d - %.2f\n ", p->nmr, p->saldo); } celula *busca(celula *lista, int nmrConta) { celula *p; p = lista; while(p != NULL && p->nmr != nmrConta) p = p->prox; return p; } void cadastrar(celula **Lista, int nmrConta, float saldoO) { celula *novo; if(busca(*Lista, nmrConta) == NULL) { novo = (celula *)malloc(sizeof(celula)); if(novo != NULL) { novo->nmr = nmrConta; novo->saldo = saldoO; novo->prox = *Lista; *Lista = novo; } else printf("Não há memoria disponivel!!!\n"); } else printf("Essa conta já está cadastrada!!!\n"); } void saldoNegativa(celula *Lista) { int i=0; celula *P; P = Lista; while (P != NULL) { if(P->saldo < 0){ i++; printf("Conta:%d Saldo:%.2f\n", P->nmr, P->saldo); } P = P->prox; } printf("Contas negativadas: %d\n", i); } void saldoPositivo(celula *Lista) { int i=0; celula *P; P = Lista; while (P != NULL) { if(P->saldo > 0){ i++; printf("Conta:%d Saldo:%.2f\n", P->nmr, P->saldo); } P = P->prox; } printf("Contas positivas: %d\n", i); } void buscaRemove(celula *Lista, celula **apt, celula **ant, int nmrConta) { *ant = NULL; *apt = Lista; while(*apt != NULL && (*apt)->nmr != nmrConta) { *ant = *apt; *apt = (*apt)->prox; } } void removeConta(celula **Lista, int nmrConta) { celula *apt, *ant; buscaRemove(*Lista, &apt, &ant, nmrConta); if(apt != NULL) { if(ant != NULL) ant->prox = apt->prox; else *Lista = apt->prox; free(apt); printf("Conta removida."); } else printf("Valor não encontrado!!!\n"); } void saldoTotalB(celula *Lista) { celula *P; float somaTotal = 0; for(P = Lista; P!=NULL; P = P->prox) { somaTotal = somaTotal + P->saldo; } printf("Dinheiro Total: %.2f\n", somaTotal); } void saque(celula *Lista, int nmrConta, float aux) { celula *conta; for(conta = Lista; conta != NULL; conta = conta->prox) { if(conta->nmr == nmrConta) { conta->saldo = conta->saldo - aux; printf("Saque Realizado com sucesso!!"); } } } /*void transfere(celula **lista, int nrmConta, float aux) { celula *conta; if(busca(lista, nmrConta)== NULL) { } }*/ int menu() { int opcao; printf("\n\t\tMENU:\n"); printf("1 - Cadastrar conta\n"); printf("2 - Remover Conta\n"); printf("3 - Verificar conta\n"); printf("4 – Imprimir Relatórios\n"); printf("5 – Operações (Saque, Depósito ou Transferência)\n"); printf("6 – Sair (Limpar todas as contas - Finalizar o programa)\n"); printf("\nInforme o opcao do menu:"); scanf("%d",&opcao); return opcao; } int menurelatorio() { int opcao; printf("\n\t\tMENU:\n"); printf("1 - Mostrar ordenado (crescente) por contas\n"); printf("2 - Mostrar ordenado (crescente) por saldo\n"); printf("3 - Mostrar as três contas mais ricas\n"); printf("4 - Mostrar as três contas mais pobres\n"); printf("5 - Mostrar a quantidade e as contas negativas\n"); printf("6 - Mostrar a quantidade e as contas positivas\n"); printf("7 - Mostrar a quantidade de contas cadastradas\n"); printf("8 - Mostrar o valor total de dinheiro no banco\n"); printf("0 - Sair (Voltar ao Menu Principal)\n"); printf("\nInforme o opcao do menu de impressão desejada:"); scanf("%d",&opcao); return opcao; } int menuoperacao() { int opcao; printf("\n\t\tMENU:\n"); printf("1 – Saque\n"); printf("2 – Deposito\n"); printf("3 – Transferencia\n"); printf("0 – Sair (Voltar ao Menu Principal)\n"); printf("\nInforme o opcao do menu de operações desejada:"); scanf("%d",&opcao); return opcao; } int main() { setlocale(LC_ALL,"Portuguese"); int opcao, nmrConta, opcaorelatorio, opcaooperacao, P; float saldoO, aux; celula *Lista, *auxBusca, *conta; Lista = NULL; opcao = menu(); while(opcao != 0) { switch (opcao) { case 1: printf("Informe o número da conta: "); scanf("%d", &nmrConta); printf("Informe o saldo da conta: "); scanf("%f", &saldoO); cadastrar(&Lista, nmrConta, saldoO); break; case 2: printf("Digite a conta desejada a ser removida: \n"); scanf("%d", &nmrConta); removeConta(&Lista, nmrConta); break; case 3: printf("Informe conta a ser buscada: "); scanf("%d", &nmrConta); auxBusca = busca(Lista, nmrConta); if(auxBusca != NULL) printf("O elemento %d JÁ esta na lista!\n", auxBusca->nmr); else printf("O elemento %d NÃO esta na lista!\n", nmrConta); break; case 4: opcaorelatorio = menurelatorio(); while(opcaorelatorio != 0) { switch (opcaorelatorio) { case 1: ordenaContas(Lista); imprimir(Lista); printf("Lista Ordenada!!!\n\n"); break; case 2: ordenaSaldo(Lista); imprimir(Lista); printf("Lista ordenadas por saldo!!!\n\n"); break; case 3: ordenaRico(Lista); break; case 4: ordenaPobre(Lista); break; case 5: saldoNegativa(Lista); break; case 6: saldoPositivo(Lista); break; case 7: P = tamanho(Lista); printf("Contas cadastradas: %d\n", P); break; case 8: saldoTotalB(Lista); break; default: printf("Opção inválida!!"); }//switch opcaorelatorio = menurelatorio(); }//while break; case 5: opcaooperacao = menuoperacao(); while(opcaooperacao != 0) { switch (opcaooperacao) { case 1: printf("Digite o numero da sua conta:\n\n"); scanf("%d", &nmrConta); printf("Informe o valor de saque: "); scanf("%f", &aux); conta = busca(Lista, nmrConta); if(conta == NULL) printf("Conta não encontrada!\n\n"); else { if(conta->saldo < 0) { printf("Saldo negativo!\n"); } if(aux > conta->saldo) { printf("Saldo insuficiente!\n"); } if(aux < 0) { printf("Digite um valor positivo."); } else { saque(Lista, nmrConta, aux); } } break; case 2: break; case 3: break; default: printf("\t\tOpcao do menu invalida!!!\n"); } opcaooperacao = menuoperacao(); } default: printf("\t\tOpcao do menu invalida!!!\n"); }//switch opcao = menu(); }//while return 0; }
  2. Eu estou a 1 dia tentando resolver isso pra minha faculdade, nao estou conseguindo, eu fiz vários jeitos diferentes, mas nenhum deu certo sao 4 exercícios, 2 usando o " WHILE ", e 2 usando o " FOR ", esse exercício em questão é usando o " FOR ", n estou achando uma maneira de encaixá-lo aqui.. Faça um programa que solicite ao usuário 5 números inteiros e, ao final, informe a quantidade de números ímpares e pares lidos. Calcule também a soma dos números pares e a média dos números ímpares.

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