Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Elpidio neto

Javascript calculo de media ponderada com formulário html5 e javascript.

Recommended Posts

 Bom dia a todos!

Estou com uma dúvida simples em javascript porém não consigo resolver.

Estive olhando na internet e tem varias soluções com média simples, porém não vi nada com média ponderada (quando tem pontuação com peso).

O calculo da nota é a seguinte:

Para cursos de Licenciatura e tecnologia segue a seguinte formula:  Média=((AVA*1)+(Prova*9))/10

Para cursos de Tecnologia segue a seguinte formula: Média = ((AVA*1)+(PIM*2)+(Prova*7))/10

 

O sistema que eu quero criar segue os seguintes parâmetros:

 

O usuário insere a nota no formulário e sem a necessidade de clicar em nenhum botão aparece a nota no campo especifico.(se não der pra fazer eu coloco um botão kkkk)

A nota tem que ser do tipo decimal (float).

 

Será que alguém poderia me ajudar?

 

Abaixo tem o código

<!DOCTYPE html>
<html>
<head>
	<title>Calculo de Notas da Escola para licenciatura/Tecnologia</title>
	<script type="text/javascript">
		 function calc_mediaLic(){
                var ntAva = parseFloat(document.getElementById('licAva').value);
                totAva=ntAva*1;
                var ntProva = parseFloat(document.getElementById('licProv').value);
                totProv=ntProva*9;
                totMedia=parseFloat(totAva+totProv)/10;
                document.getElementById('licM').value=totMedia;			
		}
	</script>
	<style type="text/css">
	h1{
		text-align: center;
		font-family: cursive, sans-serif;
	}
	p#inst{
		text-align: center;
		font-family: cursive, sans-serif;	
		font-size: 13pt;
	}
	form{
		width: 500px;
		margin: auto;
	}
		fieldset legend{
			text-align: center;
			font-weight: bold;
			text-transform: uppercase;
			font-family: Arial, sans-serif;
		}
		fieldset#licen {
			margin-bottom: 25px;
		}
		fieldset#licen input#licM, fieldset#tec input#mediaTec{
			background-color: #dddddd;
		}
	</style>
</head>
<body>
	<h1>Calculo de Notas da Escola</h1>
	<p id="inst">Insina as notas do AVA e da Prova nos seus respectivos campos.</p>
<form class="" method="post">
	<fieldset id="licen">
		<legend>Calculo da Licenciatura/bacharelado</legend>
		<p><label for="licAva">AVA:</label><input type="number" name="lAva" id="licAva" min="0" max="10" value="0"></p>
		<p><label for="licProv">Prova:</label><input type="number" name="lProv" id="licProv" min="0" max="10" value=""></p>
		<p><label for="licM">Média:</label><input type="text" name="lMed" id="licM" placeholder="Nota da Média" readonly></p>
	</fieldset>
	<fieldset id="tec"><legend>Calculo de Notas Tecnologia</legend>
		<p><label for="avaTec">AVA: </label><input type="number" name="tAva" id="avaTec" min="0" max="10" value=""> </p>
		<p><label for="cPim"> PIM: </label><input type="number" name="tPim" id="cPim" min="0" max="10" value=""></p>
		<p><label for="provaTec">PROVA: </label> <input type="number" name="tProva" id="provaTec" min="0" max="10" value=""></p>
		<p><label for="mediaTec"> Média: </label><input type="number" name="tMedia" id="mediaTec" placeholder="Nota da Média" readonly></p>
	</fieldset>
</form>
</body>
</html>

 

adicionado 42 minutos depois

Bom pessoal consegui fazer o calculo usando um botão para dar a média, porém eu queria que desse a media automatica.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia Elpidio neto,

 

O que você quer fazer é quando escrever o ultimo número, dar um TAB e aparecer automaticamente correto?

 

Aconselho utilizar a biblioteca do Jquery, existe uma finção chamada (.focusout), ela é chamada toda vez que você da um TAB no campo selecionado, ou retira a seleção dele pelo mouse.

 

Segue a API de documentação, é bem fácil de utilizar:

https://api.jquery.com/focusout/

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Elpidio neto É como o colega acima mencionou. Podes usar o onchange para calcular a cada vez que mudar o valor.

 

Para ficar legal do jeito que você quer pense no seguinte. A média precisa ser calculada quando mudar o valor do campo AVA e/ou do campo Prova. 

Primeiro o ideal, é você zerar o seu formulário definindo o valores iniciais como zero, no caso o value igual a zero.

 

Então no JS você pega os campos que vai usar  coloca em uma variável:

var avaInput = document.getElementById("licAva");
var provaInput = document.getElementById("licProv");
var resultado = document.getElementById("licM");

Agora você cria a função para calcular a média 

function mediaLIC(ava, prova){
    var media;
    media = ((ava*1)+(prova*9)/10);
       
   	return media;
}

Com a função pronta e funcionando,  usa-se o addEventListener com a ação de "change",  façamos isso para os dois campos...  AVA e Prova:

 

//Aciona o cálculo a partir do campo AVA
avaInput.addEventListener("change", function(e) {
        var avaInputValor = document.getElementById("licAva").value;
        var provaInputValor = document.getElementById("licProv").value;
        var resultado = document.getElementById("licM");
        
        //Insere o resultado do cálculo no campo input da média
        resultado.value = mediaLIC(avaInputValor,provaInputValor);
       
}, false);

//Aciona o cálculo a partir do campo Prova
provaInput.addEventListener("change", function(e) {
        var avaInputValor = document.getElementById("licAva").value;
        var provaInputValor = document.getElementById("licProv").value;
        var resultado = document.getElementById("licM");
        
        //Insere o resultado do cálculo no campo input da média
        resultado.value = mediaLIC(avaInputValor,provaInputValor);
       
}, false);

Então o código inteiro desta parte ficaria assim:

 

//Variáveis do campo AVA, PROVA, MÉDIA e valores padrão do formulário
var avaInput = document.getElementById("licAva");
var provaInput = document.getElementById("licProv");
var resultado = document.getElementById("licM");
 
//Calcula a média quando mudar o valor no campo AVA   
avaInput.addEventListener("change", function(e) {
        var avaInputValor = document.getElementById("licAva").value;
        var provaInputValor = document.getElementById("licProv").value;
        var resultado = document.getElementById("licM");
        
        //Insere o resultado do cálculo no campo input da média
        resultado.value = mediaLIC(avaInputValor,provaInputValor);
       
}, false);

//Calcula a média quando mudar o valor no campo prova
provaInput.addEventListener("change", function(e) {
        var avaInputValor = document.getElementById("licAva").value;
        var provaInputValor = document.getElementById("licProv").value;
        var resultado = document.getElementById("licM");
        
        //Insere o resultado do cálculo no campo input da média
        resultado.value = mediaLIC(avaInputValor,provaInputValor);
       
}, false);

   //Função para calcular a média 
   function mediaLIC(ava, prova){
       var media;
       media = ((ava*1)+(prova*9)/10);
       
   	   return media;
   }

Veja funcionando online: http://jsfiddle.net/hqmgtb8p/15/

 

PS: Com jQuery é muito mais prático e menos linhas. Porém como é para aprendizado, use o javascript convencional.

Editado por DiF
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@DiF  ficou do jeito que eu queria so tem um problema com a nota do ava que não esta valendo 1 pt na media final e eu não estou sabendo ajustar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Elpidio neto

36 minutos atrás, Elpidio neto disse:

so tem um problema com a nota do ava que não esta valendo 1 pt na media final

Poderia ser mais claro nisso?

O cálculos estão corretos... a condição para que haja um cálculo ali é que pelo menos um dos campos precisa ter valor acima de 1. 

Pela sua fórmula:

Se colocar a nota  AVA em zero e a prova em 1,  a média fica em 0.9.

Por outro lado, se a nota do AVA for 1 e a prova zero,   a média fica em 1. 

 

Não há erros ali. A não ser que a fórmula esteja errada e/ou está faltando informações sobre o exercício.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@DiF  Quando eu coloco as duas notas como "10" está dando a media como "19" sendo que a media deve ser no máximo 10 correto?

 

e a fórmula para a media é: ((ava*1)/10)+((prova*9)/10)ou (o que da no mesmo)  ((ava*1)+(prova*9))/10.

 

Sendo assim:

 

Se ava = 10, então  media =1

Se prova = 10, então  media =9.

 

Porém não achei o erro no algoritmo seu, porque você declara isto:

 

Em 11/07/2018 às 02:44, DiF disse:

media = ((ava*1)+(prova*9)/10);

 

 

Ai é que eu não entendi o erro. porque quando eu executo este codigo o ava sai como nota pura e não como se fosse divida por 10.

 

adicionado 0 minutos depois

Continuando......

 

O que eu devo fazer para corrigir?

adicionado 4 minutos depois
Em 11/07/2018 às 02:44, DiF disse:

@Elpidio neto É como o colega acima mencionou. Podes usar o onchange para calcular a cada vez que mudar o valor.

 

Para ficar legal do jeito que você quer pense no seguinte. A média precisa ser calculada quando mudar o valor do campo AVA e/ou do campo Prova. 

Primeiro o ideal, é você zerar o seu formulário definindo o valores iniciais como zero, no caso o value igual a zero.

 

Então no JS você pega os campos que vai usar  coloca em uma variável:


var avaInput = document.getElementById("licAva");
var provaInput = document.getElementById("licProv");
var resultado = document.getElementById("licM");

Agora você cria a função para calcular a média 


function mediaLIC(ava, prova){
    var media;
    media = ((ava*1)+(prova*9)/10);
       
   	return media;
}

Com a função pronta e funcionando,  usa-se o addEventListener com a ação de "change",  façamos isso para os dois campos...  AVA e Prova:

 


//Aciona o cálculo a partir do campo AVA
avaInput.addEventListener("change", function(e) {
        var avaInputValor = document.getElementById("licAva").value;
        var provaInputValor = document.getElementById("licProv").value;
        var resultado = document.getElementById("licM");
        
        //Insere o resultado do cálculo no campo input da média
        resultado.value = mediaLIC(avaInputValor,provaInputValor);
       
}, false);

//Aciona o cálculo a partir do campo Prova
provaInput.addEventListener("change", function(e) {
        var avaInputValor = document.getElementById("licAva").value;
        var provaInputValor = document.getElementById("licProv").value;
        var resultado = document.getElementById("licM");
        
        //Insere o resultado do cálculo no campo input da média
        resultado.value = mediaLIC(avaInputValor,provaInputValor);
       
}, false);

Então o código inteiro desta parte ficaria assim:

 


//Variáveis do campo AVA, PROVA, MÉDIA e valores padrão do formulário
var avaInput = document.getElementById("licAva");
var provaInput = document.getElementById("licProv");
var resultado = document.getElementById("licM");
 
//Calcula a média quando mudar o valor no campo AVA   
avaInput.addEventListener("change", function(e) {
        var avaInputValor = document.getElementById("licAva").value;
        var provaInputValor = document.getElementById("licProv").value;
        var resultado = document.getElementById("licM");
        
        //Insere o resultado do cálculo no campo input da média
        resultado.value = mediaLIC(avaInputValor,provaInputValor);
       
}, false);

//Calcula a média quando mudar o valor no campo prova
provaInput.addEventListener("change", function(e) {
        var avaInputValor = document.getElementById("licAva").value;
        var provaInputValor = document.getElementById("licProv").value;
        var resultado = document.getElementById("licM");
        
        //Insere o resultado do cálculo no campo input da média
        resultado.value = mediaLIC(avaInputValor,provaInputValor);
       
}, false);

   //Função para calcular a média 
   function mediaLIC(ava, prova){
       var media;
       media = ((ava*1)+(prova*9)/10);
       
   	   return media;
   }

Veja funcionando online: http://jsfiddle.net/hqmgtb8p/15/

 

PS: Com jQuery é muito mais prático e menos linhas. Porém como é para aprendizado, use o javascript convencional.

Caraca eu não tinha entendido o seu codigo de primeira, mas cara ta muito bom!!!! Muito obrigado!!!!! agora eu peguei a logica

adicionado 6 minutos depois
Em 11/07/2018 às 02:44, DiF disse:

media = ((ava*1)+(prova*9)/10);

achei o erro, é so o parentese

 

 

media =((ava*1)+(prova*9))/10;

 

porque quando o '10' esta dentro do parentese ele é resolvido primeiro e somente para a variavel prova. Mas cara muito obrigado pela ajuda

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×