none
Utilização de timer para cálculo de equações RRS feed

  • Pergunta

  • Olá,

    Sou iniciante na linguagem c# e minha duvida é como utilizar um tempo inserido pelo o usuário para calculo de equações. 

    Ex: O usuário insere um determinado tempo para o programa rodar e o programa calcula respostas instantâneas com uma equação, como por exemplo v = 2+5*t.

    Desde já agradeço! 

    sexta-feira, 27 de março de 2015 17:09

Respostas

  • Rafael, bom vindo ao C#.

    Vou ser brother com você, segue um passo a passo, veja se te ajuda:

    Crie um projeto do tipo Windows Forms

    Monte seu formulário criando ao menos um TexBox para o usuário preencher o tempo, um Button para o usuário mandar calcular e um Label para exibir o resultado. Segue uma sugestão:

    Coloquei o nome no Textbox de 'txtValor', no Button de 'btnCalcular' e no Label de resultado de 'lblResultado'. Em seguida, adicione o código do cálculo no botão. Segue sugestão:

            private void btnCalcular_Click(object sender, EventArgs e)
            {
                try
                {
                    //Tenta converter o valor digitado em número do tipo decimal
                    decimal valorT = Decimal.Parse(txtValor.Text);
                    //Calcula o resultado
                    decimal resultado = 2 + (5 * valorT);
                    //Exibe o resultado no Label
                    lblResultado.Text = resultado.ToString();
                }
                catch
                {
                    //Se der erro no cálculo, significa que o usuário não digitou um número válido
                    //Informar o erro
                    MessageBox.Show("Não foi possível realizar o cálculo. Por favor, verifique o valor de 't' informado",
                        "Erro no cálculo", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
            }

    Depois rode o programa e seja feliz! :)

    Se tiver alguma dificuldade, nos conte!!

    sexta-feira, 27 de março de 2015 19:45

Todas as Respostas

  • Rafael, bom vindo ao C#.

    Vou ser brother com você, segue um passo a passo, veja se te ajuda:

    Crie um projeto do tipo Windows Forms

    Monte seu formulário criando ao menos um TexBox para o usuário preencher o tempo, um Button para o usuário mandar calcular e um Label para exibir o resultado. Segue uma sugestão:

    Coloquei o nome no Textbox de 'txtValor', no Button de 'btnCalcular' e no Label de resultado de 'lblResultado'. Em seguida, adicione o código do cálculo no botão. Segue sugestão:

            private void btnCalcular_Click(object sender, EventArgs e)
            {
                try
                {
                    //Tenta converter o valor digitado em número do tipo decimal
                    decimal valorT = Decimal.Parse(txtValor.Text);
                    //Calcula o resultado
                    decimal resultado = 2 + (5 * valorT);
                    //Exibe o resultado no Label
                    lblResultado.Text = resultado.ToString();
                }
                catch
                {
                    //Se der erro no cálculo, significa que o usuário não digitou um número válido
                    //Informar o erro
                    MessageBox.Show("Não foi possível realizar o cálculo. Por favor, verifique o valor de 't' informado",
                        "Erro no cálculo", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
            }

    Depois rode o programa e seja feliz! :)

    Se tiver alguma dificuldade, nos conte!!

    sexta-feira, 27 de março de 2015 19:45
  • Olá Dimas, obrigado por me responder. Bem, minha duvida na verdade é como fazer em tempo real o cálculo. Usando o mesmo exemplo, digamos que o usuário inseriu o tempo de 10s. O software teria que retornar todos os "v" no tempo de 10s com um intervalo fixo, por exemplo, de 1ms em 1ms. Lembrando que é em tempo real.
    segunda-feira, 30 de março de 2015 17:48
  • Olá Dimas, obrigado por me responder. Bem, minha duvida na verdade é como fazer em tempo real o cálculo. Usando o mesmo exemplo, digamos que o usuário inseriu o tempo de 10s. O software teria que retornar todos os "v" no tempo de 10s com um intervalo fixo, por exemplo, de 1ms em 1ms. Lembrando que é em tempo real.

    Rafael,
    Acho que entendi o seu problema.

    Veja só, modifiquei o programa para isso:

    Modifiquei o código para isso:

            private void btnCalcular_Click(object sender, EventArgs e)
            {
                System.Threading.Thread thread = new System.Threading.Thread(new System.Threading.ThreadStart(Calcular));
                thread.Start();
            }
    
            private void Calcular()
            {
                //Obtém o horário do começo da operação
                TimeSpan horaInicio = DateTime.Now.TimeOfDay;
                int valorT, maximoT, intervalo;
    
                try
                {
                    //Converte valores dos Textboxes em valores numéricos
                    maximoT = Int16.Parse(txtValorT.Text);
                    intervalo = Int16.Parse(txtIntervalo.Text);
                }
                catch
                {
                    //Se der erro no cálculo, significa que o usuário não digitou um número válido
                    //Informar o erro
                    MessageBox.Show("Não foi possível realizar o cálculo. Por favor, verifique os valores t e intervalo.",
                        "Erro no cálculo", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    return;
                }
    
                //Limpa resultados prévios
                this.Invoke(new MethodInvoker(delegate { lstResultado.Items.Clear(); } ));
                
                do
                {
                    //Calcula a diferença de tempo entre o começo da operação e agora
                    TimeSpan diferenca = DateTime.Now.TimeOfDay.Subtract(horaInicio);
                    valorT = Int16.Parse(diferenca.TotalMilliseconds.ToString().Split(',')[0]);
                    //Calcula o resultado
                    int resultado = 2 + (5 * valorT);
                    //Adiicona resultado na lista
                    this.Invoke(new MethodInvoker(delegate { lstResultado.Items.Add("2 + (5 * " + valorT + ") = " + resultado); }));
                    
                    //Executa eventos de UI e faz o sleep
                    Application.DoEvents();
                    System.Threading.Thread.Sleep(intervalo);
                } while ((valorT / 1000) <= maximoT);
            }

    E o resultado:

    Seria isso???

    • Sugerido como Resposta dimascsoares terça-feira, 7 de abril de 2015 14:28
    terça-feira, 31 de março de 2015 19:47