elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


Tema destacado: Tutorial básico de Quickjs


  Mostrar Mensajes
Páginas: 1 ... 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 [421] 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436
4201  Programación / .NET (C#, VB.NET, ASP) / Re: Crear 5 form y que aparezcan en forma aleatoria. con vb 2012 en: 31 Marzo 2017, 17:00 pm
El texto de las preguntas pon lo que te dé la gana...
Las líneas que son excepción son las líneas donde se espera un número (solo número), las cuales son las líneas de 'solución' y la primera que contiene el número de preguntas.
El ejemplo previo, modificado (donde se puede):
Citar
6
Pregunta 1. ¿Cuál, de entre los siguientes, es requisito para la recuperación de la nacionalidad española?
A - Ser residente legal en España durante los tres años anteriores a la petición.
B - Renunciar a la anterior nacionalidad.
C - Tener al menos más de una nacionalidad en la U.E.
D - Inscribir la recuperación en el Registro Civil.
3
Pregunta 2. ¿Qué tipo de leyes no pueden ser aprobadas en Comisión?
A - Todas las leyes pueden aprobarse en Comisión.
B - La reforma Constitucional, las cuestiones internacionales, las leyes Orgánicas y de bases y los Presupuestos Generales del Estado.
C - Todas las leyes pueden aprobarse en comisión, excepto las orgánicas que necesita mayoría absoluta del Pleno.
D - Solo las leyes orgánicas.
1
Pregunta 3. Señale la respuesta correcta respecto a la vecindad civil:
A - El matrimonio no altera la vecindad Civil.
B - La vecindad civil se adquiere por residencia continuada durante un año, siempre que el interesado manifieste ser esa su voluntad.
C - La vecindad civil se adquiere por residencia continuada de siete años, sin declaración en contrario en este plazo.
D - Ninguna respuesta es cierta.
0
Pregunta 4. El domicilio de los diplomáticos residentes en el extranjero por razón de su cargo, que gocen del derecho de extraterritorialidad, será el último que hubieren tenido en territorio español; ¿qué nombre recibe este domicilio?
A - Real o voluntario.
B - Legal o necesario.
C - Electivo o especial.
D - Domicilio diplomaturado.
0
Pregunta 5. Siendo la capacidad de obrar o de ejercicio, la posibilidad que tiene una persona de actuar jurídicamente por sí mismo, señale, entre las siguientes, la que considere limitación de dicha capacidad:
A - La incapacitación.
B - La prodigalidad.
C - Ambas respuestas son ciertas.
D - Ninguna respuesta es cierta.
2
Pregunta 6. ¿Cuándo se concede la nacionalidad española por carta de naturaleza?
A - Te la dan cuando demuestras tener una permanecnia en el país superior a 2 años.
B - Pertenece concederla al Rey en base a su derecho constitucional de gracia.
C - Tiene que dar su consentimiento el ministerio del Interior.
D - Cuando en el interesado concurren circunstancias excepcionales.
3


Al respecto date cuenta que hemos limitado a byte el valor númerico, porque no va ser cierto que una pregunta ofrezca más de 256 respuestas entre las que elegir, ni tampoco va a ser un cuestionario cómodo que tenga más de 255 preguntas... pero si necesitas ampliar ese valor... en vez de byte, defínelo como short (int16), que ofrece hasta 65536 preguntas y 65546 opciones de respuesta por cada pregunta.

En el programa, mejor dicho en TODOS los programas, siempre que puedas (y si no puedes también), haz que funcione con números, siempre, siempre será infinitamente más rápido... el ordenador cuenta bien números, pero cuenta muy mal las letras A+B no es C, porque A=65 y B=66, luego para que fuere C, habría que convertirlo a números, sumarlo y luego el resultado convertirlo a letra otra vez...  66+65-64=67, Mejor si 1+2=3, esto es lo más efectivo.

Bueno, no pasa nada si se cambia el valor de las soluciones de la respuesta, después de todo está previsto al haber dispuesto una función de conversión en la propia estructura, así si quieres que el 'Alumno' en vez de responde 0, 2..1 responda A, C..B
donde pone esto:
Código
  1. Public Function Convertir(ByRef Texto As String) As RespuestasPosibles
  2.            Select Case Texto
  3.                Case "0" : Return RespuestasPosibles.RESPUESTA_A
  4.                Case "1" : Return RespuestasPosibles.RESPUESTA_B
  5.                Case "2" : Return RespuestasPosibles.RESPUESTA_C
  6.                Case "3" : Return RespuestasPosibles.RESPUESTA_D
  7.                Case Else : Return RespuestasPosibles.RESPUESTA_A
  8.            End Select
  9.        End Function
  10.  
Cámbialo por esto otro (observa la escasa diferencia, donde antes ponía 0,1,2,3 ahora ponemos A,B,C,D pero como el usuario podría poner a,b,c,d antes nos aseguramos que la comparación sea en mayuscula fíjate en la línea "Select Case Texto.Toupper", antes era solo "Select Case Texto"), peor sigue dejando el número de solución en el texto, también se puede cambiar, pero requiere retocar más cosas en el código... ya lo harás cuando aprendas lo suficiente:

Código
  1. Public Function Convertir(ByRef Texto As String) As RespuestasPosibles
  2.            Select Case Texto.Toupper
  3.                Case "A" : Return RespuestasPosibles.RESPUESTA_A
  4.                Case "B" : Return RespuestasPosibles.RESPUESTA_B
  5.                Case "C" : Return RespuestasPosibles.RESPUESTA_C
  6.                Case "D" : Return RespuestasPosibles.RESPUESTA_D
  7.                Case Else : Return RespuestasPosibles.RESPUESTA_A
  8.            End Select
  9.        End Function

Internamente en ambos casos sigue devolviendo un valor numérico, y externamente en ambos caso sigue recibiendo un texto...

Bien, como estás empezando, déjalo tal cual, no te preocupes sobre lo del inputbox y el formulario... solo señalarte que el inputbox, es un formulario que ofrece un ancho máximo y que por tanto si las preguntas son muy largas, como se han puesto en el título, no se verán enteras... entonces confórmate en tal caso con pasarlas al mismo sitio que las opciones de respuesta y deja una línea en blanco tras la pregunta...

..en fin trata de entender el código, que hace cada cosa y sobretodo, por qué lo hace... pulsando la tecla F11 te moverás paso a paso entre las instrucciones del código (examina el menú 'Depurar' y haz uso de sus ítems, aprendenrás mucho más rápido así), así vas viendo y entiendo como opera (en ese estado posando el ratón sobre el código, el 'intellisense', te da info adicional sobre los valores actuales que tiene un objeto o variable... también podría serte útil, activar desde el menú 'Depurar-->Ventanas-->variables locales', aunque ahí todas esas ventanas son muy útiles (aunque cada una en su momento), la que te he dicho facilita mucho ver el estado actual de cada objeto hasta sus últimos campos... mientras estás en ejecución paso a paso o parado en un punto de interrupción...

Si es preciso mira de buscar en youtube algún vídeo sobr eel manejo dle IDE de VB.
4202  Foros Generales / Dudas Generales / Re: ¿Qué es programar y como funciona junto a el sistema operativo? en: 31 Marzo 2017, 16:24 pm
Si uno fuera multimillonario, lo que haría sería diseñar el mismo hardware, eso te libera de entrada de tener que amoldarte al hardware. Puedes además potenciar aquellas áreas donde uno cree que se necesite más énfasis...
..yo por ejemplo no le veo mucho sentido a tener una CPU por un lado y una GPU por otro. Creo que una buena CPU debería hacer innecesario disponer de una GPU.

Cuando diseñas el hardware, tú mismo al hacerlo, esás formalizando como será el ensamblador de ese hardware. Siempre se parte de la CPU, luego se puede rediseñar el resto del hardware o reutilizar lo ya existente. Por ejemplo cosas como la memoria, quizás no valga la pena molestarse en rediseñarlas, pero las BIOS, están pidiendo a gritos que sí... La propia BIOS debería ser un mini Sistema Operativo en sí mismo, no solo para la configuración hardware del equipo si no para hacer operaciones básicas de lectura y escritura sobre unidades de almacenamiento, eso implica que el propio BIOS entonces deberia alojar algún que otro driver...

Una vez se tenga el hardware listo, el diseño del software, el S.O. depende de lo que quieras que haga y el hardware permita. Básicamente considera que todo lo que el hardware no tenga de fábrica, rediseñado en software será siempre hackeable.

El Kernel, debes considerarlo como el 'bucle principal de trabajo' del sistema operativo, así que deberá tener asignadas funciones como la distribución de tareas, la compartimentación de la memoria, la atención d eprioridades, la seguridad, etc... El diseño de ello parte más d elas ideas propias que uno tiene sobre como debería ser, que sobre imitar lo que otros ya hacen. Básicamente si tratas de imitar lo que haga otro S.O. es fácil que acabe siendo mucho más lento. cuando tienes un diseño particular ya pensado, suele estar diseñado junto a otras partes que hacen que el 'todo' sea algo mucho más sólido y funciones con mucha más eficiencia (imagina la diferencia entre el motor de un coche donde cada pieza es diseñada sola, pero teniendo presente las características del resto de piezas, sus tamaños y la posición que ocupan, con abrir un motor y pretender encajar ahí ahora una pieza para que haga algo nuevo que no tenía en diseño).

El lenguaje de programación, es independiente... quiero decir que se pueden diseñar tantos como se desee y la forma en que trabajen sucede lo msimo, piensa que lo único preciso es el compilador, que de una forma u otra lo que hace es como se ha de traducir el código de dicho lenguaje al ensamblador que entienda ese hardware. el ensamblador en última instancia es también un lenguaje intermedio, que se traduce a binario, pero ya de una forma 'natural', es decir los lenguajes ensamblador, también pueden ser rediseñados. Es lo que se llama "codificación de instrucciones", por ejemplo pueden dedicare 2 bytes para el código de operación, otros 2 bytes para especificar el modo de dirección y registro y otros bytes adicionales cuando por ejemplo se reciben datos inmediatos (que pueden ocupar 1,2,4,8 bytes extras)...

En el diseño hay que decidir y definir que conjunto de instrucciones se abordarán e incluso el tamaño de bits de los buses. 8,16,32,64,128 ???. Fácilmente se ve que si admite esos tamaños, al ser 5 variantes, solo para especificar el tamaño se precisan 3 bits. Por supuesto esto es aparte de la diferenciación en las propias instrucciones y por tanto uno podría llamar Mov a todas lasinstrucciones de transferencia de datos, o llamarla Mover o llamarlas individualmente según el tamaño de bytes que se muevan del origen al destino, por ejemplo:
MovL0 EAX,EBX
MovL1 EAX,EBX
MovL2 EAX,EBX
MovL3 EAX,EBX
Podrían estar diciendo que solo se mueve 1,2,4 u 8 bytes (los más bajos de EBX a EAX)
La alternativa MovL0 EAX,EBX lo sería de la actual Mov al,bl,
Fijándose como la decisión afecta solo al diseño externo del lenguaje ya que la 'codificación de la instrucción' al final seguramente serían idénticas, y la elección de una u otra manera, podría por ejemplo simplificar cometer menos errores y detectarlos más fácilmente, a cambio de tener una tabla de instrucciones visiblemente más larga, frente a una tabla de instrucciones más reducidas (pero más compleja) y sujeta a una mayor dificultad de aprendizaje y resolución de errores...

Por último, no veo a donde quieres ir con eso de"¿este nuevo sistema sería mejor que los ya existentes..?" A qué nuevo sistema te refieres?. Que yo lea, no has definido nada nuevo, solo plantes la hipotética posibilidad de hacer algo, sin especifcar cómo ni qué... en cualqier caso, la respuesta a ello es Depende. Depende de qué se haga, depende de si la idea en la cabeza finalmente es posible hacerse y se hace o si al final se trunca y se hace otra cosa distinta.

En general una vez que se ha definido bien un sistema podría establecerse dado su rendimiento, si mejora algo y en qué areas o no a lo ya existente. La potencia d elos actuales procesadores, recáe básicamente en 3 cosas: la velocidad de ejecución, el procesado en paralelo y la miniaturización alcanzada... cada una está interrelacionado con el resto. La velocidad de ejecución también depende de la miniaturización, cuando más pequeño sea el proceso de estampado del chip, más cerca estarán los componentes, menos distancia recorrerán y por tanto antes llega la señal eléctrica a su destino. cuantos más millones de puertas tengas, más posibilidades de procesador en paralelo hay de poder resolver más de una instrucción a la vez, la cantidad de pertas también dependerá de la miniaturización, la disipación de calor suele ser un problema constante, cuanto mas pequeños, menos calor emite cada una y cuanto menos calor individual, menos acumulado en total y por tanto pueden añadirse más componentes hasta un límite aceptable, a su vez cuantos más haya y más puertas concurran para realizar una o un grupo de instrucciones (no necesariamente siempre cieto), más veloz resultará.

El procesado en paralelo se ha resuelto muy bien con los múltiples cores, pero también se llega a un cuello de botella por la ineficiencia al concurrir todos a la vez a la memoria, por eso más de un core dedicado a la misma y específica tarea (en general del mismo proceso del mismo programa), suele implicar acceder a la misma área de memoria que queda bloqueada y por tanto compiten por su acceso de lo que resulta inefectivo... es más eficiente (para el procesado general), que cada núcleo opere sobre una tarea distinta, así es más probable que no se pisen y bloqueen en el acceso a memoria.

En defnitiva... como te decía que un sistema sea mejor o no que otro, debe como mínimo ser teorizado en todos sus detalles, simplement ediciendo que 'si hago algo nuevo', es insuficiente para decir nada que no suene prepotente, ya que se estaría adivinando como será algo, sobre lo que nadie sabe nada.

Ahora si tu pregunta fuera: ¿pueden mejorarse los sitemas actuales con un nuevo rediseño sea del software o del hardware?. La respuesta es sí en ambos casos... ya que todos los sistemas actuales arrastran con su legado, que es un pesado lastre.
Puestos a apostar, yo lo haría por un hardware nuevo con un software nuevo... para superar límites estúpidos, resolver problemas de segurdiad desde el hardware y mejorar muchos aspectos en todas las áreas...
4203  Programación / .NET (C#, VB.NET, ASP) / Re: Crear 5 form y que aparezcan en forma aleatoria. con vb 2012 en: 31 Marzo 2017, 00:15 am
lo primero en el fichero debe ser una línea donde haya un valor numérico entre 1 y 255
Ese valor indica cuántas preguntas hay en es efichero, en mi ejemplo he puesto 6 preguntas, por eso en la primera línea aparece un 6.

Al leer esa línea (al comienzo del fichero), lo convierte a byte, si hay un texto largo, evidentemente no podrá convertirlo a byte

6 hola que tal <--- no puede ser convertido a byte un texto así.

¿Puedes volcar el texto que has puesto en tu fichero???. eso ayudaría ver más claro donde está el error.
4204  Foros Generales / Noticias / Re: EE.UU. acaba con la privacidad en la Red: el Congreso aprueba que las ... en: 30 Marzo 2017, 23:46 pm
La solución eficaz... es que mañana mismo, la gente empezara a reclamar a sus proveedores la extinción del contrato... cuando la suma fuera por los 100 millones en una semana, ya veríamos si prefieren vender los datos de nadie, ganando por la suscripción de 0 contratos o si preferían ganar la suscripción de millones d econtratos y nada por vender datos.

...pero como la gente mayormente es incapaz de tomar una decisión así y mantenerla el tiempo que haga falta... pués se saldrán con la suya.
4205  Foros Generales / Noticias / Re: Intel se aferra a la Ley de Moore y promete procesadores de 10 nm más baratos... en: 30 Marzo 2017, 23:39 pm
Querrán decir que "vamos a ganar menos", porque dudo que mágicamente de golpe resulte que reducir la escala mágicamente reduzca costes.

Y que no insulten a la inteligencia indicando que "como son mas pequeños usamos menos silicio". A ver si resulta que de golpe, lo mas barato de un chip que es el substrato va a ser mas caro que el platino
Por supuesto...
Un edificio de 10 plantas, emplea más silicio del que llevan todos los chips del mundo.
4206  Programación / .NET (C#, VB.NET, ASP) / Re: Crear 5 form y que aparezcan en forma aleatoria. con vb 2012 en: 30 Marzo 2017, 23:03 pm
Te decía al final:
Citar

'  NumPreguntas: ' tiene el número de preguntas que aloja el fichero, en el ejemplo
(por cada pregunta que indique numpreguntas debe haber esta estructura)
'  Pregunta X el texto de la pregunta, por ejemplo: Test 01: De qué color es la hierba?
'    Respuesta A  el texto de una posible respuesta, por ejemplo: 0 - Azul
'    Respuesta B   por ejemplo 1 - Blanco
'    Respuesta C  por ejemplo 2 - verde
'    Respuesta D  por ejemplo 3 - Gris
'    Solución 0-3 un valor numérico entre 0 y 3 , por ejemplo 2

Un ejemplo para copiar y pegar en un fichero de texto:
Citar
6
01. ¿Cuál, de entre los siguientes, es requisito para la recuperación de la nacionalidad española?
0 - Ser residente legal en España durante los tres años anteriores a la petición.
1 - Renunciar a la anterior nacionalidad.
2 - Tener al menos más de una nacionalidad en la U.E.
3 - Inscribir la recuperación en el Registro Civil.
3
02. ¿Qué tipo de leyes no pueden ser aprobadas en Comisión?
0 - Todas las leyes pueden aprobarse en Comisión.
1 - La reforma Constitucional, las cuestiones internacionales, las leyes Orgánicas y de bases y los Presupuestos Generales del Estado.
2 - Todas las leyes pueden aprobarse en comisión, excepto las orgánicas que necesita mayoría absoluta del Pleno.
3 - Solo las leyes orgánicas.
1
03. Señale la respuesta correcta respecto a la vecindad civil:
0 - El matrimonio no altera la vecindad Civil.
1 - La vecindad civil se adquiere por residencia continuada durante un año, siempre que el interesado manifieste ser esa su voluntad.
2 - La vecindad civil se adquiere por residencia continuada de siete años, sin declaración en contrario en este plazo.
3 - Ninguna respuesta es cierta.
0
04. El domicilio de los diplomáticos residentes en el extranjero por razón de su cargo, que gocen del derecho de extraterritorialidad, será el último que hubieren tenido en territorio español; ¿qué nombre recibe este domicilio?
0 - Real o voluntario.
1 - Legal o necesario.
2 - Electivo o especial.
3 - Domicilio diplomaturado.
0
05. Siendo la capacidad de obrar o de ejercicio, la posibilidad que tiene una persona de actuar jurídicamente por sí mismo, señale, entre las siguientes, la que considere limitación de dicha capacidad:
0 - La incapacitación.
1 - La prodigalidad.
2 - Ambas respuestas son ciertas.
3 - Ninguna respuesta es cierta.
2
06. ¿Cuándo se concede la nacionalidad española por carta de naturaleza?
0 - Te la dan cuando demuestras tener una permanecnia en el país superior a 2 años.
1 - Pertenece concederla al Rey en base a su derecho constitucional de gracia.
2 - Tiene que dar su consentimiento el ministerio del Interior.
3 - Cuando en el interesado concurren circunstancias excepcionales.
3

...y el fichero debe estar situado en la misma carpeta donde está el ejecutable, la carpeta varía en función de si estás en modo debug o compilado...

En debug, la ruta sería más o menos esta:
... \WindowsApplication1\bin\Debug\Cuestionario.txt
ó si está compilado:
... \WindowsApplication1\bin\Release\Cuestionario.txt

la ruta y el nombre del fichero, se pueden cambiar en la línea:
Citar
Fios = New IO.StreamReader(Application.ExecutablePath & "\Cuestionario.txt")
que aparece dos veces, una en el método de evento:
Test_IntroducirNuevoCuestionario
y otra en método de carga del formulario:
Form1_Load

El código sale largo, porque lleva comentarios, estructuras y demás... (pueden omitirse o remplazarse por alogo más sencillo)... además, puede ser optimizado, está sencillo y 'expandido para que te sea más asequible de entender...


4207  Programación / .NET (C#, VB.NET, ASP) / Re: Crear 5 form y que aparezcan en forma aleatoria. con vb 2012 en: 30 Marzo 2017, 20:24 pm
Bien... ya estoy de vuelta.
He corregido un par de sencillos bugs... ahora funciona correctamente.

Recuerda que el inputbox, limita mucho el ancho para preguntas y respuestas largas, lo mejor es que lo remplaces por un formulario y tener un método similar (al inputbox), donde envías los mismos parámetros que el inputbox, que muestre la ventana y recoja el resultado del usuario de vuelta... Vamos emular al inputbox... eso queda a tu esfuerzo.
4208  Programación / .NET (C#, VB.NET, ASP) / Re: Crear 5 form y que aparezcan en forma aleatoria. con vb 2012 en: 30 Marzo 2017, 18:45 pm
Crea un nuevo proyecto, añade un formulario con un solo botón y añade una clase llamada "cuestionario"...

No he tenido tiempo de probarlo (creando un fichero de ejemplo y tal) si te sale algún error trata de solucionarlo y si no puedes me comentas... ahora tengo que salir...

Este sería el código para la clase:
Código
  1. Public Class Cuestionario
  2.    Private p_Preguntas() As CuestionProfesor
  3.    Private p_NumPreguntas As Integer
  4.    Private p_Next As Integer
  5.    Private p_Aciertos As Integer
  6.  
  7.    Private Rnd_M As Integer
  8.    Private Rnd_Q As Integer
  9.    Private Rnd_P As Integer
  10.  
  11.  
  12.    Public Enum RespuestasPosibles
  13.        RESPUESTA_A = 0
  14.        RESPUESTA_B = 1
  15.        RESPUESTA_C = 2
  16.        RESPUESTA_D = 3
  17.    End Enum
  18.  
  19.    ''' <summary>
  20.    ''' La pregunta que rellena el profesor.
  21.    ''' </summary>
  22.    ''' <remarks>Al hacer el test, se envía al alumno, una copia de la pregunta y respuestas únicamente.</remarks>
  23.    Public Structure CuestionProfesor
  24.        Public Pregunta As String
  25.        Public Respuesta1 As String
  26.        Public Respuesta2 As String
  27.        Public Respuesta3 As String
  28.        Public Respuesta4 As String
  29.        Public Solucion As RespuestasPosibles    '
  30.        Friend Acierto As Boolean ' para no hacer trampas...
  31.  
  32.        ''' <summary>
  33.        ''' Convierte una pregunta del profesor en una del alumno.
  34.        ''' </summary>
  35.        ''' <returns>Devuelve una copia idéntica de la pregunta y las posibles respuestas.</returns>
  36.        ''' <remarks></remarks>
  37.        Friend Function Convertir() As CuestionAlumno
  38.            With Convertir
  39.                .Pregunta = Me.Pregunta
  40.                .Respuesta1 = Me.Respuesta1
  41.                .Respuesta2 = Me.Respuesta2
  42.                .Respuesta3 = Me.Respuesta3
  43.                .Respuesta4 = Me.Respuesta4
  44.            End With
  45.            Return Convertir
  46.        End Function
  47.    End Structure
  48.  
  49.    ''' <summary>
  50.    ''' La pregunta que se envía para ser respondida.
  51.    ''' </summary>
  52.    ''' <remarks>Es una copia de la "pregunta del profesor"</remarks>
  53.    Public Structure CuestionAlumno
  54.        Public Pregunta As String
  55.        Public Respuesta1 As String
  56.        Public Respuesta2 As String
  57.        Public Respuesta3 As String
  58.        Public Respuesta4 As String
  59.  
  60.        Public Function Convertir(ByRef Texto As String) As RespuestasPosibles
  61.            Select Case Texto
  62.                Case "0" : Return RespuestasPosibles.RESPUESTA_A
  63.                Case "1" : Return RespuestasPosibles.RESPUESTA_B
  64.                Case "2" : Return RespuestasPosibles.RESPUESTA_C
  65.                Case "3" : Return RespuestasPosibles.RESPUESTA_D
  66.                Case Else : Return RespuestasPosibles.RESPUESTA_A
  67.            End Select
  68.        End Function
  69.    End Structure
  70.  
  71.    ''' <summary>
  72.    ''' Envía al cliente la pregunta actual del test.
  73.    ''' </summary>
  74.    ''' <param name="Pregunta">Una estructura conteniendo la pregunta y las posibles respuestas.</param>
  75.    ''' <param name="Respuesta">El índice de respuesta que dió el usuario del cliente.</param>
  76.    ''' <remarks></remarks>
  77.    Public Event Test(ByRef Pregunta As CuestionAlumno, ByRef Respuesta As RespuestasPosibles)
  78.    ''' <summary>
  79.    ''' Solicita al cliente los datos de una cuestión.
  80.    ''' </summary>
  81.    ''' <param name="Pregunta">Pregunta que se formula</param>
  82.    ''' <param name="Respuesta1">Posible respuesta -A-</param>
  83.    ''' <param name="Respuesta2">Posible Respuesta -B-</param>
  84.    ''' <param name="Respuesta3">Posible respuesta -C-</param>
  85.    ''' <param name="Respuesta4">Posible respuesta -D-</param>
  86.    ''' <param name="Solucion">Indice de la solución correcta a la pregunta entre las 4 (rango 0-3)</param>
  87.    ''' <remarks></remarks>
  88.    Public Event EntrarPregunta(ByRef Pregunta As String, ByRef Respuesta1 As String, ByRef Respuesta2 As String, ByRef Respuesta3 As String, ByRef Respuesta4 As String, ByRef Solucion As RespuestasPosibles)
  89.    ''' <summary>
  90.    ''' Informa al cliente que se ya se han realizado todas las preguntas del cuestionario.
  91.    ''' </summary>
  92.    ''' <param name="Aciertos">Entrega el número de aciertos que se obtuvo.</param>
  93.    ''' <param name="RepetirTest">Pregunta al cliente si se desea repetir (reiniciar) el mismo test</param>
  94.    ''' <remarks></remarks>
  95.    Public Event FinDeCuestionario(ByVal Aciertos As Byte, ByRef RepetirTest As Boolean)
  96.    ''' <summary>
  97.    ''' Solicita el cliente si desea rellenar el cuestionario actual
  98.    ''' </summary>
  99.    ''' <param name="NumPreguntas">Un valor 0, expresa que no se desea realizar otro cuestionario.</param>
  100.    ''' <remarks></remarks>
  101.    Public Event IntroducirNuevoCuestionario(ByRef NumPreguntas As Byte)
  102.  
  103.  
  104.  
  105.  
  106.    ''' <summary>
  107.    ''' Devuelve el número de preguntas que tiene el cuestionario actual.
  108.    ''' </summary>
  109.    ''' <value></value>
  110.    ''' <returns></returns>
  111.    ''' <remarks></remarks>
  112.    Public ReadOnly Property CantidadDePreguntas As Integer
  113.        Get
  114.            Return p_NumPreguntas
  115.        End Get
  116.        'Set(ByVal value As Byte)
  117.        '    Call ComenzarTest(value)
  118.        'End Set
  119.    End Property
  120.  
  121.    ''' <summary>
  122.    ''' Solicita la entrega de una nueva cuestión.
  123.    ''' </summary>
  124.    ''' <remarks>Si alcanza el final, devuelve un evento para solicitar si se desea barajar de nuevo el test actual.</remarks>
  125.    Public Sub Siguiente()
  126.        Dim r As RespuestasPosibles
  127.        Dim ca As CuestionAlumno
  128.        Dim np As Byte = 0
  129.  
  130.        If (p_Next < p_NumPreguntas) Then
  131.            ca = p_Preguntas(p_Next).Convertir
  132.            RaiseEvent Test(ca, r)
  133.            If (p_Preguntas(p_Next).Solucion = r) Then
  134.                p_Preguntas(p_Next).Acierto = True
  135.                p_Aciertos += 1
  136.            End If
  137.  
  138.            p_Next += 1
  139.        End If
  140.  
  141.        If (p_Next = p_NumPreguntas) Then
  142.            Dim barajaOtraVez As Boolean = False
  143.  
  144.            RaiseEvent FinDeCuestionario(p_Aciertos, barajaOtraVez)
  145.  
  146.            If (barajaOtraVez = True) Then
  147.                Call Barajar()
  148.                ca = p_Preguntas(p_Next).Convertir
  149.                RaiseEvent Test(ca, r) ' aquí, p_next vale ahora mismo 0.
  150.                If (p_Preguntas(p_Next).Solucion = r) Then
  151.                    p_Preguntas(p_Next).Acierto = True
  152.                    p_Aciertos += 1
  153.                End If
  154.            Else
  155.                RaiseEvent IntroducirNuevoCuestionario(np)
  156.                If (np > 0) Then
  157.                    Call ComenzarTest(np)
  158.                End If
  159.            End If
  160.            'Call MessageBox.Show("No existe la pregunta número: " & p_next.ToString & vbNewLine & "Realice una nueva petición, el número máximo de pregunta es: " & (p_NumPreguntas-1).ToString)
  161.        End If
  162.    End Sub
  163.  
  164.    'Public Sub New()
  165.    '    Me.New(6)
  166.    'End Sub
  167.  
  168.    'Public Sub New(ByVal NumPreguntas As Byte)
  169.    '    Call ComenzarTest(NumPreguntas)
  170.    'End Sub
  171.  
  172.    ''' <summary>
  173.    ''' Solicita al cliente que introduzca los datos del nuevo cuestionario.
  174.    ''' </summary>
  175.    ''' <param name="NumPreguntas">Cantidad de preguntas que tendrá el cuestionario</param>
  176.    ''' <remarks>Se invoca al crear la clase y cuendo se ha finalizado el cuestionario actual</remarks>
  177.    Public Sub ComenzarTest(ByVal NumPreguntas As Byte)
  178.        Dim k As Integer, q As CuestionProfesor
  179.  
  180.        If (p_NumPreguntas = 0) Then
  181.            Rnd_M = 5 : Rnd_Q = 11 : Rnd_P = 767
  182.        Else ' evitamos números pares...
  183.            Rnd_M = ((Rnd_M Mod 81) + 2)
  184.            Rnd_Q = ((Rnd_Q Mod 353) + 4)
  185.            Rnd_P = ((Rnd_P Mod 2311) + 8)
  186.        End If
  187.  
  188.        p_NumPreguntas = NumPreguntas
  189.        ReDim p_Preguntas(0 To p_NumPreguntas)
  190.  
  191.        For k = 0 To NumPreguntas - 1
  192.            With q
  193.                .Pregunta = ""
  194.                .Respuesta1 = ""
  195.                .Respuesta2 = ""
  196.                .Respuesta3 = ""
  197.                .Respuesta4 = ""
  198.                .Solucion = 0
  199.                ' ahora se ofrece la oportunidad de rellenar el cuestionario (que quizás esté guardado en un fichero)...
  200.                RaiseEvent EntrarPregunta(.Pregunta, .Respuesta1, .Respuesta2, .Respuesta3, .Respuesta4, .Solucion)
  201.                p_Preguntas(k) = q ' y se almacena...
  202.            End With
  203.        Next
  204.  
  205.        Call Barajar()
  206.    End Sub
  207.  
  208.  
  209.    ''' <summary>
  210.    ''' Reinicia el cuestionario. Baraja los test del cuestionario actual y restablece a 0 el número de aciertos.
  211.    ''' </summary>
  212.    ''' <remarks></remarks>
  213.    Public Sub Reset()
  214.        Call Barajar()
  215.    End Sub
  216.  
  217.    ''' <summary>
  218.    ''' Baraja las preguntas del test y se obtiene una lista en orden aleatorio.
  219.    ''' </summary>
  220.    ''' <remarks>El 'siguiente' se resetea al índice 0 del cuestionario.</remarks>
  221.    Private Sub Barajar() ' es mejor que sea un método privado, Y a su vez Se crea el método Reset, más explícito...
  222.        Dim k As Integer, az As Integer, tmp As CuestionProfesor
  223.  
  224.        For k = p_NumPreguntas - 1 To 1 Step -1
  225.            az = (Random(az) Mod (k + 1)) ' proporciona un valor entre 0 y k.
  226.  
  227.            tmp = p_Preguntas(az)
  228.            p_Preguntas(az) = p_Preguntas(k)
  229.            p_Preguntas(k) = tmp
  230.        Next
  231.        p_Next = 0
  232.        p_Aciertos = 0
  233.    End Sub
  234.  
  235.    ''' <summary>
  236.    ''' Genera un número random pseudoaleatorio.
  237.    ''' </summary>
  238.    ''' <param name="n">Semilla desde la que generar el siguiente número</param>
  239.    ''' <returns>Devuelve un entero entre 0 y (Rnd_P -1)</returns>
  240.    ''' <remarks>Hay que ser cuidadoso al elegir el valor de los parámetros internos que utiliza la función. Si todos los parámetros son congruentes entre sí, podría devolver números predecibles, incluso siempre el mismo (típicamente el 0).</remarks>
  241.    ''' Puede recurrirse al propio entorno NET para generar los números aleatorios.
  242.    Private Function Random(ByVal n As Integer) As Integer
  243.        Random = (((n * Rnd_M) + Rnd_Q) Mod Rnd_P)
  244.    End Function
  245.  
  246. End Class
  247.  

Y éste el código para el formulario:
Código
  1. Public Class Form1
  2.    Private WithEvents Test As New Cuestionario
  3.    Private Fios As IO.StreamReader
  4.  
  5.    ' Realizar la siguiente pregunta
  6.    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  7.        Test.Siguiente()
  8.    End Sub
  9.  
  10.    ' Hacer la pregunta.
  11.    ' La rpopia clase, verifica la respuesta y lleva la cuenta de aciertos y al final del test, notifica el resultado.
  12.    Private Sub Test_Test(ByRef Pregunta As Cuestionario.CuestionAlumno, ByRef Respuesta As Cuestionario.RespuestasPosibles) Handles Test.Test
  13.        With Pregunta
  14.            Dim R As String = InputBox(.Respuesta1 & vbNewLine & .Respuesta2 & vbNewLine & .Respuesta3 & vbNewLine & .Respuesta4 & vbNewLine & vbTab & "( ELIJA COMO RESPUESTA 0, 1,2 Ó 3)", .Pregunta)
  15.            Respuesta = Pregunta.Convertir(R)
  16.        End With
  17.    End Sub
  18.  
  19.  
  20.    ' El cliente debe indicar las preguntas que tendrá el nuevo cuestionario.
  21.    ' un valor de 0, indica que ya no se desea hacer más test.
  22.    ' En el ejemplo, se lee la primera línea del fichero, que contiene el número de preguntas que contiene el cuestionario dentro del fichero.
  23.    ' Uno debe proveer
  24.    Private Sub Test_IntroducirNuevoCuestionario(ByRef NumPreguntas As Byte) Handles Test.IntroducirNuevoCuestionario
  25.        Fios.Close()
  26.        Dim fin As Boolean = MessageBox.Show("¿Desea dar por finalizado la sesión de tests (S/N)?", "Nuevo cuestionario...", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
  27.        If (fin = False) Then
  28.            Fios = New IO.StreamReader(Application.ExecutablePath & "\Cuestionario.txt")
  29.            NumPreguntas = Convert.ToByte(Fios.ReadLine) ' ojo: Cambiar al gusto y necesidad...
  30.        Else
  31.            NumPreguntas = 0
  32.        End If
  33.    End Sub
  34.  
  35.    ' Solicita al cliente cada test, uno a uno. debe introducirse los datos procedentes de donde sea...
  36.    '   en este ejemplo se proveen de un simple fichero de texto, que está formateado así:
  37.    '  NumPreguntas: ' tiene el número de preguntas que aloja el fichero, en el ejemplo no se verifica si esto es correcto.
  38.    '  Pregunta X
  39.    '    Respuesta A
  40.    '    Respuesta B
  41.    '    Respuesta C
  42.    '    Respuesta D
  43.    '    Solución A-D
  44.    ' En el ejemplo provisto no se verifica que todo esté correcto, se da por hecho que es así.
  45.    Private Sub Test_EntrarPregunta(ByRef Pregunta As String, ByRef Respuesta1 As String, ByRef Respuesta2 As String, ByRef Respuesta3 As String, ByRef Respuesta4 As String, ByRef Solucion As Byte) Handles Test.EntrarPregunta
  46.        Pregunta = Fios.ReadLine
  47.  
  48.        Respuesta1 = Fios.ReadLine
  49.        Respuesta2 = Fios.ReadLine
  50.        Respuesta3 = Fios.ReadLine
  51.        Respuesta4 = Fios.ReadLine
  52.  
  53.        Solucion = Fios.ReadLine
  54.    End Sub
  55.  
  56.  
  57.    Private Sub Test_FinDeCuestionario(ByVal Aciertos As Byte, ByRef RepetirTest As Boolean) Handles Test.FinDeCuestionario
  58.        Dim numPreg As Integer = Test.CantidadDePreguntas        
  59.        Dim btn As Windows.Forms.MessageBoxButtons = vbYesNo
  60.        Dim ico As Windows.Forms.MessageBoxIcon
  61.  
  62.        ' Seleccionamos un icono en función del número de aciertos podría personalizarse mejor con iconos específicos creados al efecto).
  63.        If (Aciertos < (numPreg / 2)) Then
  64.            ico = MessageBoxIcon.Warning
  65.        Else
  66.            ico = MessageBoxIcon.Information
  67.        End If
  68.  
  69.        RepetirTest = MessageBox.Show("El número de aciertos fue: " & Aciertos.ToString & vbNewLine & "Sobre " & numPreg.ToString & " preguntas" & vbNewLine & vbNewLine & vbTab & "¿Desea repetir el mismo cuestionario (S/N)?", "Se ha finalizado el cuestionario.", btn, ico)
  70.    End Sub
  71.  
  72.  
  73.  
  74.  
  75.    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
  76.        Fios = New IO.StreamReader(Application.StartupPath & "\Cuestionario.txt")
  77.        Test.ComenzarTest(Convert.ToByte(Fios.ReadLine))
  78.    End Sub
  79.  
  80.    Private Sub Form1_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Disposed
  81.        Fios.Close()
  82.        Fios = Nothing
  83.    End Sub
  84. End Class
  85.  

Para probarlo debes crear un fichero de texto llamado cuestionario.txt en la ruta del ejecutable (nota que si está en debug, la carpeta es distinta de si está compilado), con la siguiente estructura (OJO un dato por cada línea, y por línea se entiende Un SALTO de LINEA...

'  NumPreguntas: ' tiene el número de preguntas que aloja el fichero, en el ejemplo
(por cada pregunta que indique numpreguntas debe haber esta estructura)
'  Pregunta X el texto de la pregunta, por ejemplo: Test 01: De qué color es la hierba?
'    Respuesta A  el texto de una posible respuesta, por ejemplo: 0 - Azul
'    Respuesta B   por ejemplo 1 - Blanco
'    Respuesta C  por ejemplo 2 - verde
'    Respuesta D  por ejemplo 3 - Gris
'    Solución 0-3 un valor numérico entre 0 y 3 , por ejemplo 2


---------------------------------------------------
p.d.: no se utiliza ningún formulario extra, todo la operación de mostrar los test recáe sobre un objeto inputbox.... que para el caso de ejemplo que se trata, es más que suficiente... ya tu tendrás que poner algo de tu parte y modificarlo a tus necesidades.

Lo que se hace aleatoriamente es reordenar las preguntas en el array y lueo se procede a mostrarlas en ese orden (desordenado, barajado), como cuando barajas un mazo de cartas y luego las muestras una a una...
4209  Foros Generales / Noticias / Re: El latido del corazón como método de autentificación en: 30 Marzo 2017, 04:03 am
bfffffffffffffffffffff....
Estas empresas empeñadas en ganar millones con patentes biométricas...

está más que demostrado, que ABSOLUTAMENTE todas las formas biométricas, presentes y futuras, son hackeables.... sencillamanete si hay un hardware que ha de registrar la biometría de cierta parte de la anatomía humana, entonces esa info es clonable, y si es clonable es factible de ser volcada en algún dispositivo que luego puede ser usado para colarse...

Básicamente el ABC del asunto se resume en que si me roban las llaves de casa y entran y me roban, al menos podré cambiar la ceradura y a otra cosa... en cambio si utilizo el iris del ojo (por ejemplo), y se empeñan en acceder mi casa, pués podría acabar con un ojo arrancado y que guardan en formol... pero yo ya no podré reponer mi ojo. ...las huellas de la mano... esos dispositivos ridículos que capturan tu huella dactilar... quiensabe donde se ha clonado esas huellas y donde hay una copia ahora mismo en la red... ahora el día d emañana te creas una cuenta bancaria (gorda), y que el banco controla su acceso mediante tu huella dactilar... ya tienen copia, luego te la podrán hackear... con las llaves, podrías cambiar la cerradura, pero que C0J0N3X se supone que has de hacer con tus huellas???.

En fin, las contraseñas siguen siendo lo mejor, aunque falla el hardware que ha de contenerlas libre de intromisiones.

Me gustaría saber que hará aquel que tenga ahora acceso a su casa mediante la biometría del corazón, y mañana le dé un infarto, se lo lleven al hospital y cuando salga, vez que su "bioseñal", ya no es válida... no podrá acceder a su casa, ni al coche, ni a su cuenta bancaría, ni... a todos los sitios que fueren sumando al "hipotético sistema biométrico infalible", con que contínuamente son adjetivados, para intentar negociar sus patentes...

La única firma biométrica infalible, es aquella que no se pueda registrar y por lo tanto, ni siquiera tener una copia, por lo que per sé no podría ser utilizada.
4210  Foros Generales / Noticias / Re: Apple rechaza aplicaciones que utilizan la palabra gratis en: 30 Marzo 2017, 03:49 am
Lamentable....

Una empresa que cobra comisiones, no debe imponer a sus comisionados como deben llevar sus negocios. ...o dicho de otra manera, hacerlo, es un acto propio de mafias.

En sus productos (software o hardware) que hagan lo que les salga de los EGGS, igual que deben hacer quienes programan para sus chips...
Páginas: 1 ... 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 [421] 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines