none
C# Calculadora Semestral RRS feed

  • Pergunta

  • Galera tô tentando fazer uma calculadora para ajudar alguns colegas da faculdade na hora de somar as notas da 1ª e 2ª prova, e dá um resultado se a pessoa passou ou não, se não quanto falta para ela passar na Exame.

    Estou com alguns problemas, primeiro quando insiro os valores, me retorna tudo normal mais na hora de me dá o valor necessário para passar fica com valor negativo, já pesquisei e tentei de várias formas mas sempre retorna com valores negativo, tentei multiplicar por -1, tentei método Math.Abs(), tentei outras formas mas nada dá certo, sempre retorna numero negativo, não sei mais o que fazer.

    int nt1, nt2;
                double res, med;
                
                
    
                nt1 = int.Parse(txtNT1.Text);
                nt2 = int.Parse(txtNT2.Text);
                res = nt1 + nt2;
                
    
                // Resolver este problema para poder converte o número em positivo,
                // ou  tentar de alguma forma esconder o caráctere negativo dá expressão.
                //rf =-rf;
                double rf = (nt1 + nt2) / 2;
    
                    med = Convert.ToDouble(res / 2 >= 6.70);
                    if (med)
                    {
                        lblResultado.Text = "Parabéns! Você passou nesta matéria, " + "sua média foi: " + (med);
                    }
                    else
                    {
                        
                        lblResultado.Text = "Que pena! Você não passou nesta matéria ainda, " + "sua média foi: " + (med)
                        + ", você precida de: " + (rf) + " para passar.";                                    
                    }


    sábado, 2 de abril de 2016 02:04

Respostas

  • Cara vou deixar a resposta que tava escrevendo à você  para ver se entende mais, enquanto eu estava escrevendo o finalzinho, acabei percebendo o erro, e consertei tá do jeito que eu preciso e agora o número aparece dá forma correta que é positiva, pois o meu erro estava nessa parte:

    lblResultado.Text = "Que pena! Você não passou nesta matéria ainda, " + "sua média foi: " + (med)
                    + ", você precida de: " + (9.5 - rf) + " para passar.";

    Nesse (9.5 - rf), estava ao contrário, (rf - 9.5), então o número que continha no rf é menor que o 9.5, quando subtraia ele ficava negativo, dando errado!

    /*Sim sim, acho que não fui muito claro nas minhas ponderações, vamos tentar mais detalhado...

    Média dá faculdade nas duas primeiras provas: (nt1 + nt2) / 2 = (6.7 para arredondar para) 7.

    Se a média entre as duas provas for inferior a 6.7, a pontuação necessária para que a pessoa possa passar é a soma do (res + a quantidade de pontos necessário que ele, somando as duas de pelo menos 9.5, por conta do sistema de arredondamento dá faculdade).

    No regimento da faculdade tem implementado ao sistema o arredondamento de pontos automáticos. Então as notas são assim: (nt1 + nt2) /2, essa média entre as duas provas tem que ter no mínimo 6.7 pontos para o sistema arredondar para 7 e a pessoa passa naquela matéria. Mas se a pessoa tiver menos do que 6.7 nessa média então à pessoa terá de fazer uma terceira prova, que será somado então o resultado dá média nt1, nt2 com essa terceira prova que é chamada na faculdade de EXAME, é como se fosse uma prova de recuperação no ensino médio/fundamental, ou segunda chance para não ter que repetir a matéria. Então levando em consideração que a pessoa não passou pois não atingiu o mínimo necessário na divisão das duas primeiras provas, então ele fará a terceira prova para agregar a essa nota dele que ele tire a pontuação necessária que ele atinja pelo menos 9.5,  exemplo:

    nt1 = 3 | nt2 = 6 | 3 + 6 = 9 | Média: 4.5 (inferior à 6.7, então terá que fazer a terceira prova)

    Terceira prova (vamos chamar de EF = Exame Final), levando em consideração estas afirmações fica assim:

    EF = 4.5 - 9.5

    Então EF = 5...*/

    • Marcado como Resposta Marcos SJ quarta-feira, 6 de abril de 2016 21:12
    terça-feira, 5 de abril de 2016 03:41

Todas as Respostas

  • sua variável med é o resultado de Convert.ToDouble(res / 2 >= 6.70);
    res / 2 >= 6.70 = boolean (true ou false)
    Convert.ToDouble(false) = 0
    Convert.ToDouble(true) = 1

    Seu if já deveria dar erro e não compilar, pois não é possível fazer uma conversão explicita de double para bool.

    O problema está atualmente na sua variável med, mas esta possivelmente não é a versão final do seu código. Poderia postar a versão atualizada?

    rf também não faz sentido

    sábado, 2 de abril de 2016 21:27
  • Alterei a conversão implícita que você estava fazendo na média.

     public void CalcularNota()

            {
                int nt1, nt2;
                double res, med;



                nt1 = int.Parse(txtNT1.Text);
                nt2 = int.Parse(txtNT2.Text);
                res = nt1 + nt2;


                // Resolver este problema para poder converte o número em positivo,
                // ou  tentar de alguma forma esconder o caráctere negativo dá expressão.
                //rf =-rf;
                double rf = (nt1 + nt2) / 2;

                med = res / 2; // Convert.ToDouble(res / 2 >= 6.70);
                if (med >= 6.2)
                {
                    lblResultado.Text = "Parabéns! Você passou nesta matéria, " + "sua média foi: " + (med);
                }
                else
                {

                    lblResultado.Text = "Que pena! Você não passou nesta matéria ainda, " + "sua média foi: " + (med)
                    + ", você precida de: " + (rf) + " para passar.";
                }
            }

    domingo, 3 de abril de 2016 11:52
  • Parece estar ok agora, não?

    o seu rf parece não estar correto, rf não seria como abaixo?

    double rf = 6.70 - (res / 2);

    domingo, 3 de abril de 2016 22:34
  • Beleza, resolveu o problema de ficar negativo, só fim uma pequena alteração aonde diz:

    if (med >= 6.2) => if (med >= 6.7)

    Por que a média necessária para passar é 6.7...

    Complica aqui mais um pouquinho, como eu pego o resultado inferior à 6.7, por exemplo:

    Se eu tirar 5 na primeira nota e 5 na segunda, vou precisar de 5 para passar, 5+5 dá uma média de 5 e na nota de exame a pessoa precisa pegar essa média que ela tem e complementar com uma nota equivalente para tirar pelo menos 9.5, o desejado seria 10, mais com 9.5 dá para passar, pois tem arredondamento de sistema e tudo mais, não sei se me entendeu...

    Qualquer coisa faço outra pergunta se você poder responde-la, muito obrigado pela atenção, e um bom começo de semana...

    segunda-feira, 4 de abril de 2016 11:32
  • Muito obrigado pela disposição em ajudar, como o Luan fez ficou perfeito, mas mesmo assim obrigado pela resposta, e o rf foi só uma forma que me veio na cabeça para poder resolver o problema, mas que não funcionou em nada, como eu comentei, no próprio código.

    Mas se você souber, vou fazer a mesma pergunta, que fiz ao Luan:

    Complica aqui mais um pouquinho, como eu pego o resultado inferior à 6.7, por exemplo:

    Se eu tirar 5 na primeira nota e 5 na segunda, vou precisar de 5 para passar, 5+5 dá uma média de 5 e na nota de exame a pessoa precisa pegar essa média que ela tem e complementar com uma nota equivalente para tirar pelo menos 9.5, o desejado seria 10, mais com 9.5 dá para passar, pois tem arredondamento de sistema e tudo mais, não sei se me entendeu...

    Qualquer coisa faço outra pergunta se você poder responde-la, muito obrigado pela atenção, e um bom começo de semana...

    segunda-feira, 4 de abril de 2016 11:35
  • Eu não entendi a parte onde você diz que se ficar com média 5 vai precisar de 5 e depois 9.5.

    A média é 6.7

    Imaginando como exemplo as notas 5 e 8.4... teríamos o seguinte cálculo: 5+8.4 = 13.4, então 13.4/2 = 6.7 passou, certo?

    Se tirar duas notas 5, minha média fica 5.

    (média menos nota) ou (duas médias menos as duas notas)

    6.7-5 = 1.7 (faltou 1.7) ou 13.4-10 (faltou 3.4)

    O que parece lógico para passar é precisar  de 6.7+1.7 (8.4) ou 6.7+3.4 (10.1)

    Não entendi o 9.5.

    Poderia me explicar essa parte novamente?

    segunda-feira, 4 de abril de 2016 12:10
  • Cara vou deixar a resposta que tava escrevendo à você  para ver se entende mais, enquanto eu estava escrevendo o finalzinho, acabei percebendo o erro, e consertei tá do jeito que eu preciso e agora o número aparece dá forma correta que é positiva, pois o meu erro estava nessa parte:

    lblResultado.Text = "Que pena! Você não passou nesta matéria ainda, " + "sua média foi: " + (med)
                    + ", você precida de: " + (9.5 - rf) + " para passar.";

    Nesse (9.5 - rf), estava ao contrário, (rf - 9.5), então o número que continha no rf é menor que o 9.5, quando subtraia ele ficava negativo, dando errado!

    /*Sim sim, acho que não fui muito claro nas minhas ponderações, vamos tentar mais detalhado...

    Média dá faculdade nas duas primeiras provas: (nt1 + nt2) / 2 = (6.7 para arredondar para) 7.

    Se a média entre as duas provas for inferior a 6.7, a pontuação necessária para que a pessoa possa passar é a soma do (res + a quantidade de pontos necessário que ele, somando as duas de pelo menos 9.5, por conta do sistema de arredondamento dá faculdade).

    No regimento da faculdade tem implementado ao sistema o arredondamento de pontos automáticos. Então as notas são assim: (nt1 + nt2) /2, essa média entre as duas provas tem que ter no mínimo 6.7 pontos para o sistema arredondar para 7 e a pessoa passa naquela matéria. Mas se a pessoa tiver menos do que 6.7 nessa média então à pessoa terá de fazer uma terceira prova, que será somado então o resultado dá média nt1, nt2 com essa terceira prova que é chamada na faculdade de EXAME, é como se fosse uma prova de recuperação no ensino médio/fundamental, ou segunda chance para não ter que repetir a matéria. Então levando em consideração que a pessoa não passou pois não atingiu o mínimo necessário na divisão das duas primeiras provas, então ele fará a terceira prova para agregar a essa nota dele que ele tire a pontuação necessária que ele atinja pelo menos 9.5,  exemplo:

    nt1 = 3 | nt2 = 6 | 3 + 6 = 9 | Média: 4.5 (inferior à 6.7, então terá que fazer a terceira prova)

    Terceira prova (vamos chamar de EF = Exame Final), levando em consideração estas afirmações fica assim:

    EF = 4.5 - 9.5

    Então EF = 5...*/

    • Marcado como Resposta Marcos SJ quarta-feira, 6 de abril de 2016 21:12
    terça-feira, 5 de abril de 2016 03:41
  • Agora entendi... Que bom que descobriu o problema, na verdade é muito bom descobrir o problema enquanto explicamos o que está acontecendo (ou o que deveria acontecer) para alguém. É aquele momento onde paramos para refletir sobre o que estamos fazendo. É aquele pequeno detalhe que estava passando despercebido enquanto estávamos focado, já me aconteceu bastante isso
    terça-feira, 5 de abril de 2016 11:57
  • Cara faz tempo que estou tentando aprender programação, mas sempre aparece a faculdade (de Direito - 7º semestre agora) e eu mesmo as vezes acabo me distraindo, mas estou tentando, o que eu acho mais ruim é que tô assistindo as vídeos aulas ou uma vez tava fazendo um exemplo do mesmo programa de um livro que baixei, mas na hora de fazer o que está sendo demonstrado dá algum erro, ou acontece algum tipo de problema, em todos os sistemas de programação, aí bate aquele desanimo, tenho várias ideia mas não consigo botar em prática, devido aos problemas técnicos.

    Deixa eu te fazer outra pergunta sobre o programa, como eu limito entre 0 e 10, porque à prova só vai de 0 a 10, teria que criar uma limitação e uma mensagem de que a pessoa informou número inválido. Espero que entenda à pergunta, fico no aguardo, obrigado por tirar as minhas dúvidas.

    terça-feira, 5 de abril de 2016 18:58
  • Olá Marcilio tem sim,

    Mais não desista, vá com calma, programação é assim mesmo . kkk

    vivendo e aprendendo sempre.

    Você pode fazer esse controle no textbox.

    No evento keypress do text box:

    string caracteresPermitidos = "0123456789\b";
    
                if (!(caracteresPermitidos.Contains(e.KeyChar.ToString().ToUpper())))
                {
                    e.Handled = true;
                }

    Nesse código acima, só aceita números, se for pra aceitar ponto ou vírgula, só incluir na variável caracteres permitidos.

    Espero que te ajude.

    terça-feira, 5 de abril de 2016 19:16