Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: Frikimaster en 4 Abril 2008, 17:23 pm



Título: Randomize
Publicado por: Frikimaster en 4 Abril 2008, 17:23 pm
Saludos gentes :3, a ver si me podeis echar un cable:

  • BBDD en ACCESS que contiene X preguntas (unas 150 creo)
  • Un VB 6.0
  • Codigo Propio
  • Quiero hacer un RAndomize

La cosa es que estoy haciendo un Trivial, la BBDD contiene varias preguntas con 3 opciones cada una, quiero recojer los valores pero en plan random para que cada vez que cambies de pregunta elija una diferente entre la base de datos.

 
Me podriais echar una mano? Mi codigo es este, criticadlo, analizadlo y quemadlo si quereis xD




Private Function GetNovaPregunta(Optional Actual As Integer = -1) As Integer
   
    Dim SQL As String
    Dim BaseDeDades As DAO.Database ' DAO = Data Acces Objects -- ADO = ActiveX Data Objects
    Dim rstPreguntes As DAO.Recordset ' conjunt de registres, representacio de la taula
    Dim i As Integer
   
     ' Obrim BD
    Set BaseDeDades = Workspaces(0).OpenDatabase(BD)
   
    SQL = "SELECT MAX(id_P) as MAX, MIN(id_p) as MIN FROM PREGUNTAS;"
    Set rstPreguntes = BaseDeDades.OpenRecordset(SQL)
    If Not rstPreguntes.EOF Then
        IndexMax = rstPreguntes.Fields("MAX")
        IndexMin = rstPreguntes.Fields("MIN")
    End If
    rstPreguntes.Close: Set rstPreguntes = Nothing
    BaseDeDades.Close: Set BaseDeDades = Nothing
Ale:
    ' Num aleatori
    Randomize
   
    i = Rnd * 100
    If i > IndexMax Then
        GoTo Ale
    ElseIf i < IndexMin Then
        GoTo Ale
    ElseIf Actual > 0 And i = Actual Then
        GoTo Ale
    Else
        GetNovaPregunta = i
    End If
   
   
End Function

Frikimaster


Título: Re: Randomize
Publicado por: cassiani en 4 Abril 2008, 18:09 pm
La cosa es que estoy haciendo un Trivial, la BBDD contiene varias preguntas con 3 opciones cada una, quiero recojer los valores pero en plan random para que cada vez que cambies de pregunta elija una diferente entre la base de datos.

Código
  1. Ale:
  2.    Randomize
  3.    i = Int(Rnd * indexmax) + 1
  4.    If i = actual Then GoTo Ale

ˇS4lu2!


Título: Re: Randomize
Publicado por: Frikimaster en 8 Abril 2008, 15:49 pm
Entonces la cosa quedaria asi verdad?

Ale:
    Randomize
    i = Int(Rnd * IndexMax) + 1
    If i = Actual Then GoTo Ale
   
    ElseIf i < IndexMin Then
        GoTo Ale
    ElseIf Actual > 0 And i = Actual Then
        GoTo Ale
    Else
        GetNovaPregunta = i
    End If
       
End Function

Frikimaster


Título: Re: Randomize
Publicado por: proteo1 en 8 Abril 2008, 20:32 pm
Entonces la cosa quedaria asi verdad?

Ale:
    Randomize
    i = Int(Rnd * IndexMax) + 1
    If i = Actual Then GoTo Ale
   
    ElseIf i < IndexMin Then
        GoTo Ale
    ElseIf Actual > 0 And i = Actual Then
        GoTo Ale
    Else
        GetNovaPregunta = i
    End If
       
End Function

Frikimaster

A mi forma seria asi: quizas muy sencilla :D

Citar
Dim Tempo as Integer
For Tempo = 0 to IndexMax
 List1.Additem =Cstr(Tempo)
Next Tempo

List2.Clear
Do While List1.Listcount>0
 Tempo=Int(Rnd * List1.Listcount) + 1
 List2.Additem Cstr(Tempo)
 List1.RemoveItem Tempo
Loop

espero me haya salido bien a la primera la desventaja que le veo son las listbox porque como lo han presentado no ocupan ello mas que puras variables