Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal, tenho essa formula, aonde as notas n1, n2, n3, n4 são as notas bimestrais,
e a nota n5 a de recuperação. Do jeito que está ele calcula as notas lançadas e divide
pelo mesmo. Se lançou três notas ele divide por três, se lançou quatro divide por quatro
. No caso a média estou setando 5. então por exemplo se o aluno tiver uma
média abaixo eu lanço a nota n5 que é recuperação, e ela substitui a menor nota
e recalcula a média final. Até aí funciona. Mas eu queria é que ao lançar a nota de
recuperação, essa nota substituísse a média. que seria dos quatro bimestres
<?php
$n1 = $data["n1"];
$n2 = $data["n2"];
$n3 = $data["n3"];
$n4 = $data["n4"];
$n5 = $data["n5"];#recuperacao / nota extra
$notas = [ $n1, $n2, $n3, $n4, $n5 ];
$notas = array_filter($notas, function( $nota ) {
return !is_null($nota);
});
//ordenamos em ordem crescente
sort($notas, SORT_NUMERIC);
//removemos a primeira nota do array ordenado, no caso a mais baixa
$nota_mais_baixa = array_shift($notas);
$fator_divisao = count($notas);
if ($fator_divisao) {$media = array_sum($notas) / $fator_divisao;
//exibimos
printf(
'Nota mais baixa: %.2f<br>Media: %.2f', $nota_mais_baixa, $media
);
}
?>>
14 horas atrás, Josemir Dias disse:
Boa noite Marxrj,
Se entendi seria algo como:
if(!isset($notas[$n5])){
$media = $notas[$n5];
//exibimos
printf('Nota mais baixa: %.2f<br>Media: %.2f', $nota_mais_baixa, $media); $fator_divisao = count($notas);
if ($fator_divisao) {
//calculamos a media aritmética
$media = array_sum($notas) / $fator_divisao;
//exibimos
printf('Nota mais baixa: %.2f<br>Media: %.2f', $nota_mais_baixa, $media);
}
}
Espero ter conseguido contribuir.
Não deu certo, a média está saindo 0.00. Não sei também se juntei a formula passada por você corretamente com a que posteiOlá!
Se o sr. precisa que "ao lançar a nota de recuperação, essa nota substituísse a média", faça assim:
php7:
$media = $notas[4] ?? array_sum($notas) / $fator_divisao;
php5:
$media = isset($notas[4]) ? $notas[4] : array_sum($notas) / $fator_divisao;Então, não alterou nada, continuou dando o mesmo resultado. Não sei também se deixei bem claro.
No caso havendo recuperação, a nota mais baixa seria a média e a média seria a nota n5 que seria a nota de recuperação
Bom dia @Marxrj,
Agora ficou confuso hehehehe, veja bem:
>
8 horas atrás, Marxrj disse:
No caso havendo recuperação, a nota mais baixa seria a média e a média seria a nota n5 que seria a nota de recuperação
Ou seja, digamos que temos:
N1:7; N2:6; N3:5; N4:7;
Se a média for 7, este indivíduo está de recuperação, logo, pela sua explicação acima, *"a nota mais baixa seria a média"*, a nota mais baixa deveria resultar em 6,25 (média das quatro notas) e esta mesma média, ainda segundo sua explicação, *"e a média seria a nota n5 que seria a nota de recuperação"* seria a N5. É isso?
Se conseguir esclarecer isso tenho certeza de que conseguimos te ajudar.Bom dia Josenir,
Sim, na fórmula que eu postei ele substitui a nota mais baixa que é uma das citadas. n1, n2, n3 ou n4, porém ali eu quero que se não for lançada a nota n5 (recuperação), ele de na nota mais baixa a média das quatro notas, e no resultado da média o mesmo valor que seria claro que a média.
Mas seu eu lançar a nota n5 (recuperação) ele na média deixasse a nota da recuperação e não mais a média, e a media apareceria somente na nota mais baixa.
>
3 horas atrás, Marxrj disse:
[...]se não for lançada a nota n5 (recuperação), ele de na nota mais baixa a média das quatro notas, e no resultado da média o mesmo valor que seria claro que a média.[...]
Essa parte está difícil de entender. Por favor, nos dê alguns exemplos práticos.
Vamos lá. Abaixo meu código novamente.
<?php
$n1 = $data["n1"];
$n2 = $data["n2"];
$n3 = $data["n3"];
$n4 = $data["n4"];
$n5 = $data["n5"];#recuperacao / nota extra
$notas = [ $n1, $n2, $n3, $n4, $n5 ];
$notas = array_filter($notas, function( $nota ) {
return !is_null($nota);
});
//ordenamos em ordem crescente
sort($notas, SORT_NUMERIC);
//removemos a primeira nota do array ordenado, no caso a mais baixa
$nota_mais_baixa = array_shift($notas);
$fator_divisao = count($notas);
if ($fator_divisao) {$media = array_sum($notas) / $fator_divisao;
//exibimos
printf(
'Nota mais baixa: %.2f<br>Media: %.2f', $nota_mais_baixa, $media
);
}
?>
Vamos supor que em lancei notas para 4 bimestres.
Exemplo 1
n1 = 7, n2 = 8, n3 = 6, n4 = 8
Neste caso a média foi 7,25 então vamos dizer que eu não lance a nota para n5, neste caso no printf a nota mais baixa ele vai deixar como 0.00 e a média ele vai deixar 7,25 (até aí tudo bem.)
Exemplo 2
No caso eu lançando uma nota de recuperação a n5, por exemplo nota 9, ele no printf vai dar nota mais baixa 6 e a média 7,50. Pois ele neste caso descartou a nota mais baixa que foi a n2 e somou a n5 recuperação com as outras 3 notas e dividiu por 4. Até aí beleza, e é como ele está fazendo.
Mas no caso eu preciso que ele se comporte como no exemplo 1, e no caso do exemplo 2 ele faça diferente se eu precisar lançar a nota de recuperação. Neste caso eu precisaria que a nota mais baixa fosse a média das 4 notas bimestrais, e a média passasse a ser a nota n5 de recuperação.
Resumindo: Se eu lançar a nota n5, ele substituísse a média por essa, e descartasse a média das 4 notas bimestrais.
Não sei se é possível com está fórmula que está funcionado bem como nos exemplos 1 e 2
Boa noite Marxrj,
Se entendi seria algo como:
if(!isset($notas[$n5])){
}else{