Léo Unicap Postado Agosto 24, 2008 Denunciar Share Postado Agosto 24, 2008 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... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Durub Postado Agosto 25, 2008 Denunciar Share Postado Agosto 25, 2008 Você está utilizando %f no printf, o correto é utilizar o %d.Ou mude o tipo da variável resp de int para float.Abraços. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 LuKaum Postado Agosto 27, 2008 Denunciar Share Postado Agosto 27, 2008 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... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest fgs4ntos Postado Setembro 5, 2008 Denunciar Share Postado Setembro 5, 2008 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: Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest fgs4ntos Postado Setembro 5, 2008 Denunciar Share Postado Setembro 5, 2008 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 LuKaum Postado Setembro 5, 2008 Denunciar Share Postado Setembro 5, 2008 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.... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Visitante Postado Setembro 6, 2008 Denunciar Share Postado Setembro 6, 2008 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 lerswitch(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 queif (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 especificadoQuando 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Durub Postado Setembro 6, 2008 Denunciar Share Postado Setembro 6, 2008 (editado) 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 Setembro 6, 2008 por Durub Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 LuKaum Postado Setembro 8, 2008 Denunciar Share Postado Setembro 8, 2008 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....uaauauhuamas vlw pelas dicas aew....abrazz Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Visitante Postado Setembro 9, 2008 Denunciar Share Postado Setembro 9, 2008 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.htmlvai 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 LuKaum Postado Setembro 9, 2008 Denunciar Share Postado Setembro 9, 2008 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....!!heheehhee 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... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Durub Postado Setembro 9, 2008 Denunciar Share Postado Setembro 9, 2008 (editado) 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 programa2. chamar o sistema operacional3. 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 pause6. executa o comando e espera por uma tecla7. desaloca a memória8. sai do sistema operacional9. continua o programaIsso 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 Setembro 9, 2008 por Durub Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest --Brown -- Postado Setembro 13, 2008 Denunciar Share Postado Setembro 13, 2008 1º - scanf:scanf é ruim, pode causar buffer overrun, geralmente deixa lixo no buffer do stdin, é uma função pesada etc.você é louco. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Durub Postado Setembro 14, 2008 Denunciar Share Postado Setembro 14, 2008 (editado) Por que? Mostre seus argumentos.Interessante a capacidade do pessoal de falar que x ou y é bom/ruim sem mostrar argumentos.Abraços. Editado Setembro 14, 2008 por Durub Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Léo Unicap
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).
Vlw...
Link para o comentário
Compartilhar em outros sites
13 respostass a esta questão
Posts Recomendados
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.