Ir para conteúdo
Fórum Script Brasil
  • 0

Correção De Prova


Xandão Grunge

Pergunta

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 cool.gif

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0
Guest - Carlos -

Cara se pode simplificar bem isso ai usando um simples if

nada de coisas complicadas apenas se a resposta for igual a certa retorna true

caso a resposta não for igual a escolhida retorna false dai você coloca a pontuação que quiser

Link para o comentário
Compartilhar em outros sites

  • 0
Cara se pode simplificar bem isso ai usando um simples if

nada de coisas complicadas apenas se a resposta for igual a certa retorna true

caso a resposta não for igual a escolhida retorna false dai você coloca a pontuação que quiser

Caro Carlos, sobre qual trecho você está se referindo?

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...