
'VersÆo com RANDOM

DEFINT A-Z

'DEFINT A-Z define que todas as vari veis (ou seja, aquelas cuja primeira
'letra do nome est  entre A e Z) sÆo do tipo INTEGER, a nÆo ser aquelas
'que tenham sido declaradas de modo diferente, como c() e n ().
'Isso acelera o programa, pois o padrÆo do Qbasic, se nÆo me engano, ‚
'definir vari veis nÆo declaradas como do tipo SINGLE (!), e fazer
'opera‡äes com SINGLE ‚ mais lento do que fazer opera‡äes com INTEGER.
    
    
CLS

'Tamanho do bloco (em n£mero de registros). Basta alterar esse valor que
'todo o programa ser  adaptado ao novo valor.
tamBloco = 5000
'Tamanho de cada registro (em bytes). Basta alterar aqui tamb‚m.
tamReg = 25

DIM tamanho AS LONG

DIM c(1 TO tamBloco) AS STRING * 8
DIM n(1 TO tamBloco) AS STRING * 17

'Conta quantos blocos tem o arquivo atual
'Qual o tamanho do arquivo?
OPEN "Gera.dat" FOR BINARY AS #1
tamArq! = LOF(1)
CLOSE #1

'PRINT "N§ de registros do arquivo atual:"; tamArq! / tamReg

'Calcula o n£mero de blocos do arquivo
numBlocos = tamArq! \ (tamBloco * tamReg)
'Se a divisÆo de blocos no arquivo nÆo for exata...
a = (tamArq! MOD (tamBloco * tamReg)) \ tamReg
IF a > 0 THEN
    numBlocos = numBlocos + 1 'temos um bloco incompleto no fim do arq.
    NumRegUltBlc = a 'N£mero de Registros do éltimo Bloco
    'Mas se for exata...
ELSE
    NumRegUltBlc = tamBloco 'O £ltimo registro ‚ um bloco completo
END IF

'Moldura...
COLOR 11
LOCATE 1, 1: PRINT STRING$(80, CHR$(196))
LOCATE 3, 1: PRINT STRING$(80, CHR$(196))
LOCATE 9, 1: PRINT STRING$(36, CHR$(196))
LOCATE 23, 1: PRINT STRING$(80, CHR$(196))

FOR r = 1 TO 23
    LOCATE r, 1: PRINT CHR$(179)
    LOCATE r, 80: PRINT CHR$(179)
NEXT r

FOR T = 3 TO 23
    LOCATE T, 36: PRINT CHR$(179)
NEXT T

LOCATE 3, 1: PRINT CHR$(195)
LOCATE 3, 80: PRINT CHR$(180)
LOCATE 1, 80: PRINT CHR$(191)
LOCATE 23, 80: PRINT CHR$(217)
LOCATE 23, 1: PRINT CHR$(192)
LOCATE 1, 1: PRINT CHR$(218)
LOCATE 23, 36: PRINT CHR$(193)
LOCATE 3, 36: PRINT CHR$(194)
LOCATE 9, 1: PRINT CHR$(195)
LOCATE 9, 36: PRINT CHR$(180)
      
COLOR 7
LOCATE 22, 44: PRINT "                            "
  
tamanho = tamArq! / tamReg
 
'Mostra Data
a$ = DATE$
b$ = MID$(a$, 1, 3)
c$ = MID$(a$, 4, 3)
e$ = MID$(a$, 7, 4)
f$ = c$ + b$ + e$

COLOR 11: LOCATE 2, 25: PRINT "* * * Pesquisa da Mega * * *":
LOCATE 2, 65: PRINT f$
    
DO
    DO

        COLOR 13: LOCATE 21, 6: PRINT "Digite [ S ] para SAIR..."
        LOCATE 22, 6: PRINT "-------------------------": COLOR 7
        LOCATE 4, 3: PRINT "Digite os N£meros conforme"
        LOCATE 5, 3: PRINT "Exemplo abaixo:"
        LOCATE 7, 3: PRINT "Ex.: 03 09 18 23 33 45"
        LOCATE 10, 3: PRINT "Combinacoes.:";: COLOR 15: PRINT tamanho: COLOR 7
        LOCATE 13, 2: PRINT "Conc:";: COLOR 7
        LOCATE 13, 8: COLOR 15: PRINT "_________________"
        LOCATE 13, 8: INPUT "", np$: COLOR 7

        np$ = UCASE$(np$)
        LOCATE 13, 8: PRINT "                    "
    LOOP UNTIL LEN(np$) < 18 OR np$ = "S"
    LOCATE 16, 15: PRINT "                   "
    COLOR 15: LOCATE 16, 8: PRINT np$
    LOCATE 17, 8: PRINT "================="
    COLOR 7:
 
    FOR h = 4 TO 21
        LOCATE h, 40: PRINT "                                    "
    NEXT h

    IF np$ = "S" THEN
        PLAY "o3l32ceff+g"
        PLAY "mfo4l64ceg>c"
        CLS
        SCREEN 12
        COLOR 11: LOCATE 12, 18: PRINT "* * * Programa feito por Carlos Cordeiro * * *"
        LOCATE 14, 32: PRINT "< (84) 9 8846-2948 >"
        LOCATE 16, 26: PRINT "< carloscordeiro45#gmail.com >"

        SAIR& = TIMER
        DO
            SA& = TIMER
            bs& = SA& - SAIR&
        LOOP WHILE bs& < 4
        SYSTEM
    END IF

    h = 3

    'Agora o programa vai ler e exibir na tela todos os registros, lendo
    'um bloco de cada vez
    OPEN "Gera.dat" FOR RANDOM AS #1 LEN = 25
    FIELD #1, 8 AS a$, 17 AS f$

    FOR kk = 1 TO numBlocos
        IF kk < numBlocos THEN maxj = tamBloco ELSE maxj = NumRegUltBlc
        FOR j = 1 TO maxj 'lˆ o bloco
            GET #1, tamBloco * (kk - 1) + j
            c$(j) = a$
            n$(j) = f$
        NEXT j

        FOR y = 1 TO maxj
            IF h > 19 THEN
                COLOR 13: LOCATE 22, 42: PRINT "Pressione Enter para continuar..."
                COLOR 7
                DO
                LOOP UNTIL INKEY$ = CHR$(13) '13 ‚ o c¢digo ASCII para Enter.
                LOCATE 22, 40: PRINT "                                      "

                FOR S = 4 TO 21
                    LOCATE S, 38: PRINT "                                        "
                NEXT S
                h = 3
            END IF

            W$ = c$(y)
            h = h + 1
            x = 42

            COLOR 7: LOCATE h, x - 4: PRINT W$; " => "

            FOR i = 1 TO 17 STEP 3
                x = x + 3
                T$ = MID$(n$(y), i, 2)
                FOR r = 1 TO LEN(np$) STEP 3
                    O$ = MID$(np$, r, 2)

                    IF T$ = O$ THEN
                        g = g + 1
                        cor1(g) = i
                        'COLOR 7: LOCATE h, x + 1: PRINT T$
                        r = LEN(np$)
                    ELSE
                        COLOR 7: LOCATE h, x + 6: PRINT T$
                    END IF
                NEXT r
            NEXT i


            'SAIR! = TIMER
            'DO
            'SA! = TIMER
            'DD! = SA! - SAIR!
            'LOOP WHILE DD! < 1
         

            IF g = 0 THEN
                LOCATE h, 38: PRINT "                                    "
                h = h - 1
            END IF

            IF g = 1 THEN
                LOCATE h, 38: PRINT "                                    "
                h = h - 1
            END IF

            IF g = 2 THEN
                LOCATE h, 38: PRINT "                                    "
                'LOCATE h, x + 4: COLOR 11: PRINT "=> Duque": COLOR 7
                h = h - 1
            END IF

            IF g = 3 THEN
                COLOR 12
                'LOCATE h, x + 10: PRINT "=>";: PRINT " TERNO"
                FOR ag = 1 TO 3
                    'LOCATE h, 50 + cor1(ag): PRINT MID$(n$(y), cor1(ag), 2)
                NEXT ag
                COLOR 7
                h = h - 1
            END IF

         
            IF g = 4 THEN
                COLOR 10
                'LOCATE h, x + 10: PRINT "=>";: PRINT " QUADRA"
                FOR ag = 1 TO 4
                    'LOCATE h, 50 + cor1(ag): PRINT MID$(n$(y), cor1(ag), 2)
                NEXT ag
                COLOR 7
                h = h - 1
            END IF


            IF g = 5 THEN
                COLOR 3
                LOCATE h, x + 10: PRINT "=>";: PRINT " QUINA"
                FOR ag = 1 TO 5
                    LOCATE h, 50 + cor1(ag): PRINT MID$(n$(y), cor1(ag), 2)
                NEXT ag
                COLOR 7
            END IF

            IF g = 6 THEN
                COLOR 14
                LOCATE h, x + 10:: PRINT "=>";: PRINT " SENA"
                FOR ag = 1 TO 6
                    LOCATE h, 50 + cor1(ag): PRINT MID$(n$(y), cor1(ag), 2)
                NEXT ag
                COLOR 7
            END IF

            g = 0
        NEXT y
    NEXT kk

    CLOSE #1
    'LOCATE 10, 20: PRINT "     "

LOOP

