Se trata de un examen de preguntas al azar de 3 niveles diferentes: 5 de nivel 1, 5 nivel 2 y 1 nivel 3.
Previamente el programa debe comprobar tu identidad y verificar si no diste el examen antes, si lo hiciste no te permitiría ingresar al examen.
Entonces el programa lee el archivo "preguntas.txt" carga las preguntas a la memoria y su nivel correspondiente y luego lee las respuestas de "respuestas.txt" y las carga a la memoria y lo mismo con "registro.txt" (archivo donde se encuentran los resultados anteriores), mi problema está cuando tengo que hacer la comparación entre la información nueva del usuario y el registro (comparación de cadenas) y posteriormente en la función "pregu()" cuando debe comparar la respuesta ingresada con la respuesta correspondiente (en por lo menos un 80%).
Cualquier tipo de ayuda o consejo con respecto a la comparación de cadenas, la escritura de datos en un archivo o traducción de código de Perl a PHP me serviría muchísimo, es un proyecto de mucha importancia para mi, y si no lo tengo listo para la próxima semana mis amigas me matan.
Using perl Syntax Highlighting
- #!/usr/bin/perl
- #
- #
- use strict;
- my @preguntas;
- my @respuestas;
- my @registro;
- my $counter=0;
- my $level;
- my @levelpregunta;
- my @levelrespuesta;
- my $cont1=0;
- my $cont2=0;
- my $cont3=0;
- my $conterr=0;
- my @pregslev;
- open(PREG, "< preguntas.txt") or die "Could not open preguntas.txt";
- while (<PREG>) {
- if (/Level/) {
- s/Level//;
- chomp;
- $level = $_;
- $pregslev[$level]=0;
- } else {
- $levelpregunta[$counter] = $level;
- $preguntas[$counter++] = $_;
- $pregslev[$level]++;
- }
- }
- close(PREG);
- $counter=0;
- open(RESP, "< respuestas.txt") or die "Could not open respuestas.txt";
- while (<RESP>) {
- if (/Level/) {
- s/Level//;
- chomp;
- $level = $_;
- } else {
- $levelrespuesta[$counter] = $level;
- $respuestas[$counter++] = $_;
- }
- }
- close(RESP);
- my $contreg;
- $counter=0;
- $contreg=0;
- open(REG, "< registro.txt") or die "Could not open registro.txt";
- while (<REG>) {
- $registro[$counter++] = $_;
- $contreg++;
- }
- close(REG);
- my @info;
- print "antes de empezar, Favor ingrese los siguientes datos: \n";
- print "Nombre (tal cual esta en facebook): ";$info[1]=<STDIN>;print"\n";
- print "Correo electronico (este no sera agregado a ningun mailinglist): ";$info[2]=<STDIN>;print"\n";
- print "Numero de telefono(o escribe -1 si no deseas dar alguno): ";$info[3]=<STDIN>;print"\n";
- print "Departamento (elegir entre: COCHABAMBA , LAPAZ, SANTACRUZ , TARIJA , POTOSI , CHUQUISACA , ORURO , BENI , PANDO ) ";$info[4]=<STDIN>;print"\n";
- my $temp;
- my $string;
- $temp=0;
- #$string=$info[1]+" "+ $info[2]+" "+ $info[3]+" "+ $info[4];
- chop($info[1]);
- chop($info[2]);
- chop($info[3]);
- chop($info[4]);
- $string=$info[1]." ".$info[2]." ".$info[3]." ".$info[4]."\n";
- #$string=@info;
- print "\n se registro: ";print $string;#print "\n";
- while ($temp<=$contreg)
- {
- if ($string=$registro[$temp]) ##corregir revision de existencia de datos
- {die "your name is already on the database.\n"}
- else
- {
- $temp++;
- }
- }
- ##open(RESP, "< registro.txt") or die "Could not open registro.txt"; ##guardar $string en registro.txt
- print "Gracias ahora podemos continuar...\n";
- while(( $conterr<=3) && ($cont1 < 5) ) {
- if (&pregu(1)) {
- $cont1++;
- } else {
- $conterr++;
- }
- }
- if ($cont1==5){
- while(( $conterr<=3) && ($cont2 < 5) ) {
- if (&pregu(2)) {
- $cont2++;
- } else {
- $conterr++;
- }
- }
- }
- else {die "Lo sentimos ha reprobado" }
- if ($cont2==5)
- {
- print "Solo una pregunta mas... \n";
- $conterr=0;
- while (( $conterr<=3) && ($cont3 < 1)) {
- if (&pregu(3)) {
- $cont3++;
- } else {
- $conterr++;
- }
- }
- }
- else {die "Lo sentimos ha reprobado"}
- sub compare
- {
- ##recibir $resp y $respuestas[$offset+$preg] si 80% parecido entonces true else false;
- }
- sub pregu {
- my $lev = @_;
- my $preg;
- my $offset=0;
- my $resp;
- if ($lev>1) { $offset = $pregslev[1] };
- if ($lev>2) { $offset += $pregslev[2] };
- $preg = int(rand()*$pregslev[$lev]+0.5);
- print $preguntas[$offset+$preg];
- $resp = <STDIN>;
- if ( $resp =~ $respuestas[$offset+$preg]) {
- return 1;
- } else {
- return 0;
- }
- }
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4
Muchas gracias.
Lucas Cuppers
P.D.: tengo 16 años, cualquier tipo de programación desordenada o lenguaje inculto se debe a mi falta de experiencia en esta vida ¡ji,ji!