none
Me ajudem: Cálculo Coplexo RRS feed

  • Pergunta

  • Bom galera eu estou com um problema de calculo e acredito que os experts neste fórum podem me ajudar. Eu fiz um programa que realiza cálculos e nele tem uma função de converter minutos em horas, assim, eu coloquei a função "double Con = Min / 60" o calculo é executado mas meu problema é com os decimais. Exemplo: 200 minutos pela função "Min / 60" o resultado seria o seguinte 3, 33 porem o ,33 não quer dizer 33 min mas 33% de 1 hora que seria 20 min. Então eu quero saber se é possível (se for possível postem um exemplo por favor) fazer um código que separe esses decimais e os calcule. Exemplo: 200 min "Min / 60" = 200 / 60 = 3,33   e depois "X * 60"  0,33 * 60 = 20 (onde X é somente os decimais descartando o numero inteiro).

    Ps: A função "Min" é o numero que o usuário coloca no textBox então é uma variável e não apresenta problemas.

    Pss: Só para reforçar o que eu quero é que a função "X" tenha o valor decimal seguindo o calculo "Con"( Con = Min / 60). Exemplo: se "Con" for igual a 1.2, "X" seria 0.2,  se "Con" for igual a 3.33, "X" seria igual a 0.33 e assim por diante.

    Psss: Eu uso o Microsoft Visual C++ 2010 Express

    terça-feira, 14 de maio de 2013 16:44

Respostas

  • Agora ficou mais claro!

    Estou sem compilador, porém, acredito que o código abaixo resolva seu problema:

    int Minutes = Convert::ToInt32(textBoxMinutes->Text);
    textBoxresultado->Text = String::Format("{0}:{1}",(int)(Minutes / 60), (Minutes % 60));



    Diego Cotini do Couto - MCTS .NET Framework 3.5, ASP.NET Applications


    • Editado Diego Cotini sábado, 29 de junho de 2013 01:03 correção
    • Marcado como Resposta Eikeros quarta-feira, 6 de novembro de 2013 12:35
    sábado, 29 de junho de 2013 00:56

Todas as Respostas

  • Olá Eikeros,

    Estou bem enferrujado no C++ e vou ver se consigo criar uma função dessa mais para frente. Mas para adiantar: 

    - Se quiser o valor em minutos e não em decimais, basta fazer o mod por 60, conforme "200 % 60";

    - Se quiser o decimal, poderia utilizar "(200 % 60) / 60".

    Isto resolveria seu problema de duas maneiras, mas conforme citei anteriormente, irei verificar posteriormente se tem outra maneira.

    Abraços.

    quinta-feira, 16 de maio de 2013 02:25
  • Olá Diego Couto usei o mod que você me passou mas acho que fiz algo errado olha o código como ficou:

    double Con = (min % 60) /60;
    			

    dessa forma da problema:

    Error 1 error C2296: '%' : illegal, left operand has type 'double'	
    
    

    Aguardo respostas.

    Ps: Se quiser posto o código de calculo completo do .programa

    quinta-feira, 16 de maio de 2013 20:53
  • Olá Eikeros,

    Então, o uso do % é para tipo inteiro, com double não é possível, portanto, sua variável min tem que ser de tipo inteiro (ou ser convertida para tal).

    Porém, você terá que fazer um cast para double, pois, caso contrário o resultado será zero (tinha me esquecido do detalhe. Segue exemplo:

    int min = 200;
    (double)(min % 60) / 60;
    

    Testei em uma aplicação console, conforme código abaixo e funcionou:

    #include "stdafx.h"
    #include <string>
    
    using namespace System;
    
    int main(array<System::String ^> ^args)
    {
        int Minutes = 200;
        Console::WriteLine((double)(Minutes % 60) / 60);
        Console::ReadKey();
    }

    Acredito que agora resolva seu problema.

    • Sugerido como Resposta Programar é viver quarta-feira, 29 de maio de 2013 17:10
    • Marcado como Resposta Eikeros terça-feira, 5 de novembro de 2013 09:35
    • Não Marcado como Resposta Eikeros quarta-feira, 6 de novembro de 2013 12:35
    sexta-feira, 17 de maio de 2013 02:27
  • Bem, eu queria que "Minutes" fosse uma varável onde o usuário do programa acrescentasse e não um inteiro de valor fixo (int Minutes = 200). É possível tornar Minutes uma variável? 
    terça-feira, 11 de junho de 2013 18:03
  • Claro, no caso, coloquei fixo somente para teste, mesmo porque utilizei uma aplicação console e provavelmente não é o que está utilizando.

    Neste caso, você só terá pegar o valor que o usuário informou (não sei se está utilizando um texbox, por exemplo) e converter para inteiro.



    Diego Cotini do Couto - MCTS .NET Framework 3.5, ASP.NET Applications

    terça-feira, 11 de junho de 2013 18:14
  • Bem eu estou usando texbox então eu queria saber se ficaria na seguinte ordem:

    1-Converter os dados do textbox 

    double Minutes = Convert::ToDouble(textBoxMinutes->Text);

    2- Aplicar o calculo

    double min = (Minutes % 60) / 60;

    3- Expressar os resultados

    textBoxresultado->Text = String::Format("{0:0.00}",min);

    é isso que devo fazer?

    sexta-feira, 28 de junho de 2013 14:54
  • Caro,

    Conforme seu último comentário, fiquei um pouco confuso e li novamente a sua pergunta (fiquei um pouco mais confuso... rs), conforme minha primeira resposta (vide abaixo), qual o resultado que você pretende?

    - Se quiser o valor em minutos e não em decimais, basta fazer o mod por 60, conforme "200 % 60";
    Exemplo: usuário informou 200, resultado será 20;

    - Se quiser o decimal, poderia utilizar "(200 % 60) / 60".
    Exemplo: usuário informou 200, resultado será 0,33333;


    E qual seria a formatação final a ser exibida para o usuário?


    Diego Cotini do Couto - MCTS .NET Framework 3.5, ASP.NET Applications

    sexta-feira, 28 de junho de 2013 15:56
  • Desculpe-me por falar confusamente, este é o código da função no meu programa:

    private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) { double Minutes = Convert::ToDouble(textBoxMinutes->Text); double min = Minutes / 60; textBoxresultado->Text = String::Format("{0:0.00}",min);

    }

    Onde Minutes é uma variável adicionada pelo o usuário (tipo no textbox o usuário coloca 100, 200 ...) 

    "min" é o nome que se da a função: Minutes (que é a variável) / 60 (valor fixo). E a ultima linha é a função printf/string ( que serve pra expressar em outro textbox ( textBoxresultado) o valor adquiro de Minutes / 60). Porém nessa função tem um problema, por exemplo, "Minutes / 60" (onde o usuário colocou no texbox 200 então Minutes é = 200) assim ficaria 200 / 60 = 3,33 o problema é que 0,33 não corresponde a 33 minutos mas sim a 33% de 1 hora e é isso que eu quero, um calculo que pegue o 0,33 (ou qualquer decimal) e o calcule, exemplo 200/60 = 3,33| primeira parte| 0,33 (separado do 3) x  60 (valor fixo) = 20 minutos. Assim o resultado seria 3 horas que foi o primeiro calculo e 20 minutos que foi o segundo calculo.

    sexta-feira, 28 de junho de 2013 23:46
  • Agora ficou mais claro!

    Estou sem compilador, porém, acredito que o código abaixo resolva seu problema:

    int Minutes = Convert::ToInt32(textBoxMinutes->Text);
    textBoxresultado->Text = String::Format("{0}:{1}",(int)(Minutes / 60), (Minutes % 60));



    Diego Cotini do Couto - MCTS .NET Framework 3.5, ASP.NET Applications


    • Editado Diego Cotini sábado, 29 de junho de 2013 01:03 correção
    • Marcado como Resposta Eikeros quarta-feira, 6 de novembro de 2013 12:35
    sábado, 29 de junho de 2013 00:56