Ir para conteúdo
Fórum Script Brasil
  • 0

'Enxugar' código de calculadora de seis operações


silas_

Pergunta

Há como diminuir, ou até mesmo melhorar esse código?

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

main() {
float n1=0.0; float n2=0.0; float n3=0.0; float delta=0.0; int op=0; char escolha=0; char escolhab=0;

printf("Calculadora\n");
printf("Voce pode utilizar numeros de ponto flutuante e numeros negativos\n\n");

do{
      
printf("1 Adicao\n");
printf("2 Subtracao\n");
printf("3 Multiplicacao\n");
printf("4 Divisao\n");
printf("5 Raiz Quadrada\n");
printf("6 Polinomio de grau 2\n");
printf("7 Sair\n\n");
printf("\nDigite sua opcao:\t");
scanf("%d",&op);

   switch(op){
           case 1:
                printf("\nAdicao\n");
                do{printf("\nDigite o 1o numero:\t");
                fflush(stdin);
                scanf("%f",&n1);
                printf("Digite o 2o numero:\t");
                fflush(stdin);
                scanf("%f",&n2);
                printf("\nR: %f\n\n",n1+n2);
                printf("Deseja fazer outra adicao? [S/N]\t");
                fflush(stdin);
                scanf("%c",&escolhab);}while((escolhab=='s')||(escolhab=='S'));
                break;
           case 2:
                printf("\nSubtracao\n");
                do{printf("\nDigite o 1o numero:\t");
                fflush(stdin);
                scanf("%f",&n1);
                printf("Digite o 2o numero:\t");
                fflush(stdin);
                scanf("%f",&n2);
                printf("\nR: %f\n\n",n1-n2);
                printf("Deseja fazer outra subtracao? [S/N]\t");
                fflush(stdin);
                scanf("%c",&escolhab);}while((escolhab=='s')||(escolhab=='S'));
                break;
           case 3:
                printf("\nMultiplicacao\n");
                do{printf("\nDigite o 1o numero:\t");
                fflush(stdin);
                scanf("%f",&n1);
                printf("Digite o 2o numero:\t");
                fflush(stdin);
                scanf("%f",&n2);
                printf("\nR: %f\n\n",n1*n2);
                printf("Deseja fazer outra multiplicacao? [S/N]\t");
                fflush(stdin);
                scanf("%c",&escolhab);}while((escolhab=='s')||(escolhab=='S'));
                break;
           case 4: 
                printf("\nDivisao\n");
                do{
                do{printf("\nDigite o 1o numero:\t");
                fflush(stdin);
                scanf("%f",&n1);
                printf("Digite o 2o numero:\t");
                fflush(stdin);
                scanf("%f",&n2);
                if (n2==0)
                printf("\nO divisor não pode ser zero! Repita a operacao!\n\n");
                else printf("\nR: %f\n\n",n1/n2);}while(n2==0);
                printf("Deseja fazer outra divisao? [S/N]\t");
                fflush(stdin);
                scanf("%c",&escolhab);}while((escolhab=='s')||(escolhab=='S'));
                break;
           case 5:
                printf("\nRaiz Quadrada\n");
                do{ 
                do{printf("\nDigite o numero:\t");
                fflush(stdin);
                scanf("%f",&n1);
                if (n1<0)
                printf("\nNao existe nos reais raiz quadrada de numero negativo!\nRepita a operacao!\n\n");
                else printf("\nR: %f\n\n",sqrt(n1));}while(n1<0);
                printf("Deseja calcular a raiz de outro numero? [S/N]\t");
                fflush(stdin);
                scanf("%c",&escolhab);}while((escolhab=='s')||(escolhab=='S'));
                break;
           case 6:
                printf("\nPolinomio do Segundo Grau\n");
                do{
                do{printf("\nDigite o coeficiente 'a':\t");
                fflush(stdin);
                scanf("%f",&n1);
                if (n1==0) 
                printf("\nO coeficiente 'a' deve ser diferente de zero!\nRepita a operacao!\n\n");}while(n1==0);
                printf("Digite o coeficiente 'b':\t");
                fflush(stdin);
                scanf("%f",&n2);
                printf("Digite o coeficiente 'c':\t");
                fflush(stdin);
                scanf("%f",&n3);
                delta = (n2*n2 - 4*n1*n3);
                if (delta < 0)
                printf("\nNao há raizes reais\n\n");
                else if (delta == 0)
                printf ("\nSo há uma raiz x:\t%f\n\n", n2/2*n1);
                else {
                printf ("\nX1 =\t%f\n",(n2 + sqrt(delta))/2*n1);
                printf ("X2 =\t%f\n\n",(n2 - sqrt(delta))/2*n1);}
                printf("Deseja calcular outro polinomio de segundo grau? [S/N]\t");
                fflush(stdin);
                scanf("%c",&escolhab);}while((escolhab=='s')||(escolhab=='S'));
           case 7: 
                printf("\n\nSilas Yudi\nCiencias da Computacao - UFPB\n\n\n");
                system("PAUSE");
                return 0;
           default:
                printf("\nOperacao ilegal\n");                
                }
           printf("\nDeseja continuar usando a calculadora? [S/N]\t");
           fflush(stdin);
           scanf("%c",&escolha);
           printf("\n\n\n");
}while((escolha == 's')||(escolha == 'S'));
printf("\nSilas Yudi\nCiencias da Computacao - UFPB\n\n");
system("PAUSE");
return 0;
}

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Saudações,

Olhando rapidamente seu código, poderia ser feito:

- Melhorar a identação do programa para facilitar a leitura/entendimento futuro.

- Nas declarações de variáveis utilizar o operador vírgula

- As descrições das operações poderiam estar em um vetor para utilização nos diversos pontos do programa, evitando reescrever em todas as partes.

- O fluxo das operações de Adição, Subtração, Multiplicação e Divisão são os mesmos para entrada dos dados (n1 e n2), você poderia melhorar separando essa leitura (dependendo poderia ser aproveitado para as demais operações/programa inteiro).

Espero ter ajudado.

Abraços,

William Rodrigues.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...