Estou desenvolmento um script o qual consiste em corrigir questões de somatária. Para quem não conhece, as regras são o seguinte:
1. O valor da primeira alternativa é 1, da 2ª é 2, da 3ª é 4 e assim por diante. Ou seja, o valor da resposta é sempre 2 elevado a potencia (começando com 0);
2. Para dar a resposta, é somado o valor das questões certas, de forma que o resultado SOMENTE seja possível se utilizar o valor das respostas certas.
3. Para cada questão existe pelo menos uma resposta certa, e pelo menos uma errada;
4. Caso marque uma resposta errada como sendo certo, a pontuação é Zero!
5. Caso a pessoa acerte todas as respostas, ele receberá 60 pontos. Caso acerte metade ele recebe 30 pontos, 1/3 20 pontos... e assim em diante.
Dai eu tive a seguinte lógica: Tranformar a somatória da resposta inteiramente certa e a resposta do candidato no sistema binário, em seguida transformar num vetor com todos algarismos e fazer a comparação bit a bit.
Acredito que minha lógica esteja correta, no entanto, esse algorimo não mostra nada na página, nem mesmo erro. Segue o código abaixo:
<?
$ultima_resposta= 32;
$num=28;
$num2=29;
function corrige($v1, $v2, $ult_resp) {
// verifica quantas alternativas existem
$tam = strlen(decbin($ult_resp));
// converte o valor 1 para um vetor binário
if (($v1 > 2147483647) OR ($v1 < 0)) return FALSE;
Pergunta
Xandão Grunge
Bom dia Pessoal!
Estou desenvolmento um script o qual consiste em corrigir questões de somatária. Para quem não conhece, as regras são o seguinte:
1. O valor da primeira alternativa é 1, da 2ª é 2, da 3ª é 4 e assim por diante. Ou seja, o valor da resposta é sempre 2 elevado a potencia (começando com 0);
2. Para dar a resposta, é somado o valor das questões certas, de forma que o resultado SOMENTE seja possível se utilizar o valor das respostas certas.
3. Para cada questão existe pelo menos uma resposta certa, e pelo menos uma errada;
4. Caso marque uma resposta errada como sendo certo, a pontuação é Zero!
5. Caso a pessoa acerte todas as respostas, ele receberá 60 pontos. Caso acerte metade ele recebe 30 pontos, 1/3 20 pontos... e assim em diante.
Dai eu tive a seguinte lógica: Tranformar a somatória da resposta inteiramente certa e a resposta do candidato no sistema binário, em seguida transformar num vetor com todos algarismos e fazer a comparação bit a bit.
Acredito que minha lógica esteja correta, no entanto, esse algorimo não mostra nada na página, nem mesmo erro. Segue o código abaixo:
<?
$ultima_resposta= 32;
$num=28;
$num2=29;
function corrige($v1, $v2, $ult_resp) {
// verifica quantas alternativas existem
$tam = strlen(decbin($ult_resp));
// converte o valor 1 para um vetor binário
if (($v1 > 2147483647) OR ($v1 < 0)) return FALSE;
$binstring = strrev(str_pad(decbin ($v1),31,"0",STR_PAD_LEFT));
$v1 = explode(":",chunk_split($binstring, 1, ":"));
// converte o valor 2 para um vetor binário
if (($v2 > 2147483647) OR ($v2 < 0)) return FALSE;
$binstring = strrev(str_pad(decbin ($v2),31,"0",STR_PAD_LEFT));
$v2 = explode(":",chunk_split($binstring, 1, ":"));
$cont=0 // contador de respostas certas
$acertos=0; // contador de respostas acertadas
//verifica quantas questões certas existem
for($i=1;$i<$tam;$i++) {
if($v1[$i]==1) $cont++;
}
//verifica quantas questões certas existem
for($i=1;$i<$tam;$i++) {
if($v2[$i]>$v1[$i]) { //se marcou certo uma resposta a sua pontuação já está definida: é zero!!!!
$ch=1;
$i=$tam;
} elseif($v2[$i]==$v1[$i]) { // senão verifica se a alternativa marcada é válida. Se for conta um acerto
$acertos++;
}
}
if($ch == 1) {
$pontuacao = 0;
} else {
$vpa = 60 / $cont; // valor por cada questão certa
$pontuacao= $acertos*$vpa;
}
return $pontuacao;
}
echo "$num<br>$num2<br>";
if($num2 > $num) {
echo "Pontos dessa questão = 0";
} else {
$pontos=corrige($num, $num2, $ultima_resposta);
echo "Pontos dessa questão = $pontos";
}
?>
Caso alguém saiba o que está ocorrendo, por favor postar aqui.
Agradeço a atenção,
Xandão Grunge
Link para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.