Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Não apresenta média

Galera, no decorrer do curso criei um código que cálcula média do aluno, porém na hora de preencher a média final quando separei o código em funções não apresenta a média corretamenta, onde estou errando?

var botaoAdicionar = document.querySelector("#adicionar-paciente");
botaoAdicionar.addEventListener("click", function(event) {
    event.preventDefault();

    var form = document.querySelector("#form-adiciona");
    //Extraindo informacoes do aluno do form
    var aluno = obtemPacienteDoFormulario(form);

    var alunoTr = montaTr(aluno);

    var tabela = document.querySelector("#tabela-alunos");

    tabela.appendChild(alunoTr); 
});

function obtemPacienteDoFormulario(form){
    var aluno = {        
        nome: form.nome.value, 
        turma: form.turma.value,
        primeiroBimestre: parseInt (form.primeiroBimestre.value),
        segundoBimestre: parseInt (form.segundoBimestre.value),
        terceiroBimestre: parseInt (form.terceiroBimestre.value),
        quartoBimestre: parseInt (form.quartoBimestre.value),
        media: parseInt (calculaMedia(form.primeiroBimestre.value, form.segundoBimestre.value, form.terceiroBimestre.value, form.quartoBimestre.value))
    }
    return aluno;
}

function montaTr(aluno){

    var alunoTr = document.createElement("tr");

    var nomeTd = document.createElement("td");
    var turmTd = document.createElement("td");
    var pBimestre = document.createElement("td"); 
    var sBimestre = document.createElement("td");
    var tBimestre = document.createElement("td");
    var qBimestre = document.createElement("td");
    var mFinal = document.createElement("td");

    nomeTd.textContent = aluno.nome;
    turmTd.textContent = aluno.turma;
    pBimestre.textContent = parseInt (aluno.primeiroBimestre);
    sBimestre.textContent = parseInt (aluno.segundoBimestre);
    tBimestre.textContent = parseInt (aluno.terceiroBimestre);
    qBimestre.textContent = parseInt (aluno.quartoBimestre);
    mFinal.textContent = parseInt (aluno.media);

    alunoTr.appendChild(nomeTd);
    alunoTr.appendChild(turmTd);
    alunoTr.appendChild(pBimestre);
    alunoTr.appendChild(sBimestre);
    alunoTr.appendChild(tBimestre);
    alunoTr.appendChild(qBimestre);
    alunoTr.appendChild(mFinal);

    return alunoTr;
}
5 respostas

Bom dia.

Poderia compartilhar conosco a função calculaMedia() ?

Segue...

function calculaMedia(primeiroBimestre, segundoBimestre, terceiroBimestre, quartoBimestre){

    var somaNotas, MedialFinal;

    somaNotas = primeiroBimestre + segundoBimestre + terceiroBimestre + quartoBimestre
    MedialFinal = somaNotas/4;

    return MedialFinal.toFixed(2);
}

if (calculaMedia(primeiroBimestre, segundoBimestre, terceiroBimestre, quartoBimestre) >= 7) {
    statusFinal.textContent = "Aluro Aprovado!";
    statusFinal.classList.add("valido");
} else {
    statusFinal.textContent = "Aluno Reprovado!";
    statusFinal.classList.add("invalido");
}

Bom dia!

Se entendi corretamente o que você reclama de ser o problema de sua média, acho que o problema está aqui:

return MedialFinal.toFixed(2);

mFinal.textContent = parseInt (aluno.media);

Quando você utiliza a função parseInt(), ela retorna um número inteiro. Número inteiro não contém casas decimais.

Testando na console:

parseInt((10+8)/2) = 9

parseInt((10+9)/2) = 9 (quando na verdade seria 9,5)

Assim, a média quando passa pelo parser, é transformado sem casas decimais. Não sei se é este o caso que sua média não é apresentada corretamente. Caso não seja este o problema, nos passe mais detalhes de qual o problema.

Notei que se não faço um parseInt quando informo as notas no textContent no momento que ele faz o cálculo no meu IF apresenta um número totalmente diferente, por exemplo

Estou somando as notas (5+10+5+10)/4 = 7.5

Mas no html ele mostra 127627.50

Então não deveria usar o toFixed? Me perdi nesse ponto

solução!

Bom dia!

Invés de usar o parseInt, tente usar assim:

primeiroBimestre: parseFloat ((form.primeiroBimestre.value).replace(",","."))

Primeiro, trocamos virgula por ponto para não haver erro de transformação. Depois, transformamos em um número decimal, que pode ser trabalhado em operações aritméticas.

Seria algo assim no final:

var aluno = {

    primeiroBimestre: parseFloat ((document.forms[0].primeiro.value).replace(",",".")),

    segundoBimestre: parseFloat ((document.forms[0].segundo.value).replace(",",".")),

    media:0

}

aluno.media = calculaMedia(aluno.primeiroBimestre,aluno.segundoBimestre);