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

Calculadora em C com procedimentos.


Léo Unicap

Pergunta

Oi galera...

Sou novo aqui e já to com uma bronca...

Fiz um código em C de uma calculadora, todos os procedimentos respondem normalmente, menos um...

O sétimo, que calcula o resto.

Acho que errei em alguma coisa, porque toda vez ele da 0 (zero).

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

void soma (float a, float b){
     float resp;
     resp = a+b;
     printf ("\n\aA soma de %.2f por %.2f é %.2f.\n",a,b,resp);
}

void subtracao (float a, float b){
     float resp;
     resp = a-b;
     printf ("\n\aA subtracao de %.2f por %.2f é %.2f.\n",a,b,resp);
}

void multiplicacao (float a, float b){
     float resp;
     resp = a*b;
     printf ("\n\aA multiplicacao de %.2f por %.2f é %.2f.\n",a,b,resp);
}

void divisao (float a, float b){
     float resp;
     resp = a/b;
     printf ("\n\aA divisao de %.2f por %.2f é %.2f.\n",a,b,resp);
}

void quadrado (float a){
     float resp;
     resp = pow(a,2);
     printf ("\n\aO quadrado de %.2f é %.2f.\n",a,resp);
}

void cubo (float a){
     float resp;
     resp = pow(a,3);
     printf ("\n\aO cubo de %.2f é %.2f.\n",a,resp);
}

[b]void resto (int a, int b){
     int resp;
     resp = (a%b);
     printf ("\n\aO resto da divisão de %.2f por %.2f é %.2f.",a,b,resp);
}[/b]

void main(){
     float num1, num2;
     int val;
     printf ("\n           ======PROGRAMA CALCULADORA BASICA======\n");
     do{
        do{
           printf ("\nDigite o numero correspondente a operacao que deseja realizar:\n\n1=> Soma\n2=> Subtracao\n3=> Multiplicacao\n4=> Divisao\n5=> Quadrado\n6=> Cubo\n7=> Resto\nDigite:\a ");
           scanf ("%i",&val);
           fflush (stdin);
           if (val<1 || val>7){
              printf ("\nVALOR INVALIDO!!!\a\a\a \nDIGITE UM VALOR VALIDO: ");
              scanf ("%i",&val);
              fflush (stdin);
           }
        }while (val<1 || val>7);
        if (val==1){
           printf ("\nDigite o primeiro numero:\a ");
           scanf ("%f",&num1);
           fflush (stdin);
           printf ("\nDigite o segundo numero:\a ");
           scanf ("%f",&num2);
           fflush (stdin);
           soma (num1,num2);
        }
        else if (val==2){
           printf ("\nDigite o primeiro numero:\a ");
           scanf ("%f",&num1);
           fflush (stdin);
           printf ("\nDigite o segundo numero: \a");
           scanf ("%f",&num2);
           fflush (stdin);
           subtracao (num1,num2);
        }
        else if (val==3){
           printf ("\nDigite o primeiro numero: \a");
           scanf ("%f",&num1);
           fflush (stdin);
           printf ("\nDigite o segundo numero: \a");
           scanf ("%f",&num2);
           fflush (stdin);
           multiplicacao (num1,num2);
        }
        else if (val==4){
           printf ("\nDigite o primeiro numero:\a ");
           scanf ("%f",&num1);
           fflush (stdin);
           printf ("\nDigite o segundo numero:\a ");
           scanf ("%f",&num2);
           fflush (stdin);
           divisao (num1,num2);
        }
        else if (val==5){
           printf ("\nDigite o primeiro numero: \a");
           scanf ("%f",&num1);
           fflush (stdin);
           quadrado (num1);
        }
        else if (val==6){
           printf ("\nDigite o primeiro numero: \a");
           scanf ("%f",&num1);
           fflush (stdin);
           cubo (num1);
        }
        [b]else if (val==7){
           printf ("\nDigite o valor do primeiro numero: \a");
           scanf ("%f",&num1);
           fflush (stdin);
           printf ("\nDigite o valor do segundo numero: \a");
           scanf ("%f",&num2);
           fflush (stdin);
           resto (num1,num2);
        }[/b]
        do{
           printf ("\n Deseja executar o programa novamente...\n[1]-SIM\n[2]-não\nDigite: ");
           scanf ("%i",&val);
           fflush (stdin);
           if (val<1 || val>2){
              printf ("\nVALOR INVALIDO!!! \nDIGITE UM VALOR VALIDO:\a\a\a ");
              scanf ("%i",&val);
              fflush (stdin);
           }
        }while (val<1 || val>2);
     }while (val==1);
}

Vlw...

Link para o comentário
Compartilhar em outros sites

13 respostass a esta questão

Posts Recomendados

  • 0

olha..... eu já criei uma calculadora (quem nunca criou!ahuuhuhasuhusa) e vey...calculadora q fica pedindo primeiro a conta q quer....segundo o primeiro termos e depois o segundo termo é muito feia....

eu fiz a mina em c++ e usei concatenação pra fazer o seguinte:

5 + 5...aii o usuario clika enter e sai o resultado....10.(ele pode ate fazer '5 e 3' q eleva o 5 a terceira potencia....)

se eu não me engano...em C pode fazr concatenaçao tb.

em C++ ficaria +- assim:

int termo1;
int termo2;
char operador;
cout<<"digite a operação"<<endl;
cin>>termo1>>operador>>termo2;
........
aii você continua seu codigo do jeito que quiser.... em C axo que ficaria assim..:
float termo1, termo2, resultado;
char operador;
printf("digite sua operacao\n");
scanf("%f", & termo1);
scanf("%c", & operador);
scanf("%f", & termo2);

daii você continua o codigo....

qualquer coisa é só fla q eu posto o codigo inteiro...

Link para o comentário
Compartilhar em outros sites

  • 0

PARCEIRO TEM UMA FORMA MUITO MAIS FACIL DE FAZER ISSO

você PODE USA APENAS SWITCH COM O CASE

SE TIVE DUVIDA COMO FAZER ME MANDA UM E-MAIL beleza

.. AXO MAIS SIMOKE É MAIS EFICIENTE

FLWS !!

:blink: :wacko:

Link para o comentário
Compartilhar em outros sites

  • 0
PARCEIRO TEM UMA FORMA MUITO MAIS FACIL DE FAZER ISSO

você PODE USA APENAS SWITCH COM O CASE

SE TIVE DUVIDA COMO FAZER ME MANDA UM E-MAIL beleza

.. AXO MAIS SIMOKE É MAIS EFICIENTE

FLWS !!

:blink: :wacko:

fgs4ntos@hotmail.com

Link para o comentário
Compartilhar em outros sites

  • 0
PARCEIRO TEM UMA FORMA MUITO MAIS FACIL DE FAZER ISSO

você PODE USA APENAS SWITCH COM O CASE

SE TIVE DUVIDA COMO FAZER ME MANDA UM E-MAIL beleza

.. AXO MAIS SIMOKE É MAIS EFICIENTE

FLWS !!

:blink: :wacko:

affs....switch com case.....uhauhaauau....fala bobagem não fih!!!

switch é uma b***...ninguém usa isso não....

e tipow...usando switch você vai faze um programa do tipow....o que você quer fazer....? a - adicao, b - subtracao, c - multiplicacao...

ai depois você coloka o primeiro e segundo termos.....isso é muito feio... tem q faze uma calculadora q você proprio digite o q você quer......tipow....:

#include <cstdio>
#include <cstdlib>
#include <cmath>

int main()
{
    int option;
    float termo1, termo2, resultado;
    char operador;
    while (true)
    {
        system("color f0");
        printf ("\t\t\t\tCALCULADORA\n\n\n");
        printf ("Digite a operacao para que seja calculado o resultado\n");
        printf ("Utilize 'e' e 'r' para exponenciar, racionalizar qualquer numero\n");
        printf ("De espacos entre o numero, operador, numero. exemplo: 5 + 5 ou 9 r 2.\n\n");
        scanf ("%f", & termo1);
        scanf ("%s", & operador);
        scanf ("%f", & termo2);
        if (operador == '+')
        {
            resultado = termo1 + termo2;
            printf (" = %f", resultado);
        }
        else if (operador == '-')
        {
            resultado = termo1 - termo2;
            printf (" = %f", resultado);
        }
        else if (operador == '*')
        {
            resultado = termo1 * termo2;
            printf (" = %f", resultado);
        }
        else if (operador == '/')
        {
            while (termo2 == 0)
            {
                printf ("não se pode dividir por zero!\n");
                printf ("digite o divisor novamente: ");
                scanf ("%f", & termo2);
            }
            resultado = termo1 / termo2;
            printf (" = %f", resultado);
        }
        else if (operador == 'e')
        {
            resultado = pow (termo1, termo2);
            printf (" = %f", resultado);
        }
        else if (operador == 'r')
        {
            resultado = 1 / termo2;
            resultado = pow (termo1, resultado);
            printf (" = %f", resultado);
        }
        else
        {
            printf ("não existe este operador!\n");
        }
        system("pause");
        system("cls");
    }
    return 0;
}

eu fiz esse aki rapidao......dá uma olhada pra você fragar....

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Visitante
affs....switch com case.....uhauhaauau....fala bobagem não fih!!!

switch é uma b***...ninguém usa isso não....

e tipow...usando switch você vai faze um programa do tipow....o que você quer fazer....? a - adicao, b - subtracao, c - multiplicacao...

Pense antes de sair falando que só porque é limitado é uma b*** e ninguém usa.

Switch-cases podem ser muito mais fáceis de se ler do que ifs enormes ou aninhados.

Se só funciona com char ou int isso é limitação imposta pela linguagem,já que em Groovy o switch-case aceita de tudo,inclusive ranges, sendo que eu até prefiro ler

switch(idade) {

case 1..12:

print "criança"

break

case 13..19:

print "adolescente"

break

case 20..54:

print "adulto"

break

default:

print "não especificado"

}

do que

if (idade >0 && idade < 13)

print "crianca"

else if (idade > 12 && idade < 20)

print "adolescente"

else if (idade > 19 && idade < 55)

print "adulto"

else

print "não especificado

Quando se escreve um programa para o Octave, não é permitido comparar strings dentro de um if,isso só é possível num switch. Em Python p/ se ter um switch você tem que apelar pra funções lambda numa construção estranha.

http://kerneltrap.org/node/7516

Link para o comentário
Compartilhar em outros sites

  • 0

Também prefiro muito mais ler um switch do que um monte de if's.

Vou apontar algumas coisas ruins no seu código:

1º - scanf:

scanf é ruim, pode causar buffer overrun, geralmente deixa lixo no buffer do stdin, é uma função pesada etc.

2º - scanf - %s em caractere.

Era pra utilizar %c.

3º - system("pause") e system("cls")

São métodos não portáveis;

No caso do pause, tem que fazer MUITA coisa só para pausar um programa, enquanto poderia simplesmente dar um cin.get() ou getch() (Não no caso do scanf! Afinal, vai deixar lixo no buffer do stdin, o que leva a maioria usar o fflush(stdin), que tem comportamento indefinido)

etc.

Abraços!

Editado por Durub
Link para o comentário
Compartilhar em outros sites

  • 0

opaaa...

aki.....respondendo aii....eu fiz o codigo em C só pra mostrar pro cara lá mas prefiro programar em C++....

entaum para poder esvaziar o nivel de buffer.....(axo q é assim q fala !)... eu uso sempre endl......

segundo q o %c não suportava naquele local do programa....ele não lia os caracteres 'e' e 'r'.....já quando usei o %s passou a ler.....

o motivo de q não goste de switchs é q eles não saum bons ao mistura-los com formas de programas um pouco mais complexas.....

---não vejo muita utilidade nele não.....ele pode ser substituido facilmente por um if!!----

o system("pause") é mania.....!!uhauaauhua.....estes saum bons mesmo mas troque o sytem("pause") por getch() ou cin.getch() no meu programa pra você fragar....vai dar akela famosa frase.....'getch' undeclared (first use this function).....auhuhaauuah...e eu não vou incluir uma biblioteca só pra isso......

mas aki...eu programo em C/C++....não em outra lingua não....as vezes um Java ou um Delph....uaauauhua

mas vlw pelas dicas aew....

abrazz

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Visitante

Vamos deixar as coisas bem claras:

1 - A calculadora do cara pode ser feia p/ você, mas se é o que o exercício pede, dane-se. Se quer liberdade p/ resolver problemas entre numa competição.

2 - Leu o link do kernel trap? Então não fique dizendo que não são bons quando se escreve um programa complexo.

3 - Se foi ironia,não funcionou. System("pause") é uma das piores coisas p/ se enfiar num programa só porque a droga da IDE não tem terminal embutido.http://www.gidnetwork.com/b-61.html

vai dar akela famosa frase.....'getch' undeclared (first use this function).....auhuhaauuah...e eu não vou incluir uma biblioteca só pra isso......

Reclama de incluir uma biblioteca pra usar getch mas inclui stdlib só pra poder usar o system... Na stdio.h existe o getchar() que serve pra mesma coisa.

Link para o comentário
Compartilhar em outros sites

  • 0

affs cara.....eu dei uma dica lá em cima....se o cara quer usar ow não o problema é dele....

(liberdade para resolver problemas é o q a programacao nos dá.... é sempre bom deixarmos os programas mas bem feitos...)

mas é porque quando eu fiz a calculadora pela minah primeira vez eu concatenei......fiko bem melhor....e num precisa de conhecimentos complexos pra isso não..... agora....se você acha system("pause") uma droga aii é com você...ele não vai alterar o programa mesmo.... a funcao de pausar vai ser a mesmo....!!heheehhe

e otra...tda vez q eu programo só em C eu adiciono as bibliotecas cstdlib e cstdio por causa das funcoes delas....talvez nakele programa não era necessario a cstdlib mas uso muito em outros....

agora.....é muito melhor por um system("pause > nul") do q fikar perguntando q operacao deve ser feita.....

mas vlw aew...

Link para o comentário
Compartilhar em outros sites

  • 0

Err, a função que falei mesmo era a getchar(), não a getch(). (do conio.h)

Agora com a indicação do visitante (C/C++ nuts?) para ler o link do KernelTrap, ótimo.

Mas um motivo para preferir switch em vez de vários if's e else's.

mas é porque quando eu fiz a calculadora pela minah primeira vez eu concatenei......fiko bem melhor....e num precisa de conhecimentos complexos pra isso não..... agora....se você acha system("pause") uma droga aii é com você...ele não vai alterar o programa mesmo.... a funcao de pausar vai ser a mesmo....!!heheehhe

????? Para pausar um programa com o pause tem que:

1. suspender o seu programa

2. chamar o sistema operacional

3. abrir um shell do sistema operacional (lançar o sistema operacional em um sub-processo)

4. o sistema operacional procura pelo pause (C:/WINDOWS/system32 no Windows e /bin no UNIX, se não me engano)

5. aloca a memória para executar o pause

6. executa o comando e espera por uma tecla

7. desaloca a memória

8. sai do sistema operacional

9. continua o programa

Isso de uma tradução do: (http://www.gidnetwork.com/b-61.html)

Ou você poderia simplesmente fazer uma chamada a uma função nativa do C ou C++.

Abraços.

Editado por Durub
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,3k
×
×
  • Criar Novo...