f43l 0 Denunciar post Postado Junho 17, 2009 Meu problema: Eu quero pegar o resto de uma divisão, mas o c++ ta arredondando ela automatico por exemplo: o resto de 1985/16 é 0.0625, mas no c++ ele arredonda para 1 exemplo: #include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) { int x=1985; float y; y=x%16; cout<<y; system("PAUSE"); return EXIT_SUCCESS; } Ele exibe o numero 1! eu quero que ele exiba o 0.0625 infelizmente sou iniciante e pesquisei o dia todo mas não consegui desde ja agradeço a preocupação Compartilhar este post Link para o post Compartilhar em outros sites
VictorCacciari 42 Denunciar post Postado Junho 17, 2009 Cara,o operador '%' trabalha com inteiros, pois, tratando-se de aritimética modular são faz sentido utilizar números que não sejam inteiros. você vai ter que escrever a sua própria função.... não é nada muito difícil... Recorre à definição de divisão, com inteiros: * 'a', diferente de 0, divide 'b' apenas se existir 'k', tal que: b = a*k * Denotase: a/b ou a|b * Axiomas (adimitindo que a, b e c são números inteiros naturais) - se a | b e a | c então a | (b + c) - se a | b então a | (b*c) - se a | b e b | c então a | c fonte: eu xD (há mais disponível em: www.criptografia.com.pt) Para pegar o resto de a/b imagine que deve existir 'k' e 'resto' tal que: b = a*k + resto uma forma muito fácil de se fazer isso é: resto = a/b - int(a/b) http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Junho 17, 2009 Cara,o operador '%' trabalha com inteiros, pois, tratando-se de aritimética modular são faz sentido utilizar números que não sejam inteiros. Vitor, dá uma olhada melhor: os operandos do % estão certos. São inteiros. O que tá errado é usar inteiro p/ conseguir parte fracionária. E não precisa reescrever a função. Existe a fmodf. Compartilhar este post Link para o post Compartilhar em outros sites
VictorCacciari 42 Denunciar post Postado Junho 17, 2009 Então Isis, se o operador '%' só trabalha com inteiros e retorna um inteiro, nunca virá o resto da divisão em um float... Eu não conhecia essa função "fmodf", encontrei duas parecidas, uma chama-se "modf" e outra "fmod". Acho que a que interessa é a "fmod": http://www.cplusplus.com/reference/clibrary/cmath/fmod/ Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Junho 17, 2009 O que deu a entender do teu comentário é que ele não estava usando o tipo de operandos corretos no operador. Compartilhar este post Link para o post Compartilhar em outros sites
VictorCacciari 42 Denunciar post Postado Junho 17, 2009 É verdade... expressei-me mal, peço desculpas! :P Compartilhar este post Link para o post Compartilhar em outros sites
f43l 0 Denunciar post Postado Junho 17, 2009 Como eu usaria esse fmod para pegar o resto da divisão? Por exemplo: y=1985%16 no c++ o Y sai disso valendo 1 eu quero que ele sai valendo 0.0625 que é o correto Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Junho 17, 2009 Já foi dito que fmod é uma função e o porquê você está tendo o resultado errado... http://lmgtfy.com/?q=fmod+c%2B%2B Compartilhar este post Link para o post Compartilhar em outros sites
f43l 0 Denunciar post Postado Junho 17, 2009 Só consegui com um tal de modf, que pega a parte fracionaria e inteira de um numero #include <cstdlib> #include <iostream> #include <math.h> #include <stdio.h> using namespace std; int main(int argc, char *argv[]) { double Valor = 124.0625; double ParteInteira; double ParteFracionaria; ParteFracionaria = modf(Valor, &ParteInteira); cout<<ParteFracionaria; system("PAUSE"); return EXIT_SUCCESS; } Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Junho 17, 2009 sei lah vendo seu post parece q você nem lew oq escreveram =// []s Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Junho 17, 2009 Só consegui com um tal de modf, Pelo que escreveu ('um tal de'), nem leu mesmo. #include <cstdlib> #include <iostream> #include <math.h> #include <stdio.h> Em C++, use cmath. Por que alguém usando iostream inclui stdio? Compartilhar este post Link para o post Compartilhar em outros sites
f43l 0 Denunciar post Postado Junho 18, 2009 vocês que parecem que não lêem, como eu disse: sou iniciante claro que eu li mas tenho pouca noção ainda mas isso esta mudando de qualquer forma vlw Compartilhar este post Link para o post Compartilhar em outros sites
VictorCacciari 42 Denunciar post Postado Junho 18, 2009 vocês que parecem que não lêem, como eu disse: sou iniciante(Cara, encare isso como uma critica construtiva, por favor!!) Exatamente por isso que te ajudamos, eu te expliquei onde estava errado, te ensinei como fazer o que você queria, até o link para a documentação da função eu te passei.... E você, no post a seguir você fala: Como eu usaria esse fmod para pegar o resto da divisão? Por exemplo: detalhe mínimo.... no link que te passei encontra-se o seguinte exemplo: /* fmod example */ #include <stdio.h> #include <math.h> int main () { printf ("fmod of 5.3 / 2 is %lf\n", fmod (5.3,2) ); printf ("fmod of 18.5 / 4.2 is %lf\n", fmod (18.5,4.2) ); return 0; } O que parece, pelo menos pra mim, é que você nem ao menos entrou no link, entende?? Ajude-nos a te ajudar! "Para ter a resposta certa, é preciso fazer a PERGUNTA certa" - Albert Einstein Mas pronto, esquece isso, o importane é que você resolveu teu problema! :D :D Abraços http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Junho 19, 2009 "Para ter a resposta certa, é preciso fazer a PERGUNTA certa" - Albert Einsteingostei vo por na minha assinatura ;D Compartilhar este post Link para o post Compartilhar em outros sites