Disk Buffering/ Prime Num

Area:    Quik_Bas
  Msg:    #289
 Date:    02-14-93 13:16 (Public) 
 From:    Eric B. Ford             
 To:      ALL                      
 Subject: Disk Buffering/ Prime Num
Somebody asked about buffering.  Here's an example with a 
prime number generator.  (A crumby one, but that's ok.)


CLS
PRINT "                        Prime Number Generater"
PRINT : PRINT

DIM First AS LONG, Last AS LONG

INPUT "What number would you like to start checking at"; First
INPUT "What number would you like to end checking at"; Last
IF First MOD 2 = 0 THEN First = First + 1
IF Last MOD 2 = 0 THEN Last = Last - 1
IF First < 0 THEN First = 0
IF Last < 0 THEN Last = 0
IF Last - First <= 0 THEN END
PRINT : PRINT
WHILE OutPutTo <> 1 AND OutPutTo <> 2 AND OutPutTo <> 3
CLS

PRINT "Would you like Prime Number to be printed to:"
PRINT "           (1) The Screen"
PRINT "           (2) A Data File"
PRINT "           (3) Both"
INPUT "                         Chioce"; OutPutTo
WEND
IF OutPutTo = 2 OR OutPutTo = 3 THEN DIM dat(8192) AS LONG
DIM i AS LONG, j AS LONG, ii AS LONG

IF OutPutTo = 1 THEN
     tim1 = TIMER
     CLS
     x = 1: y = 2
     PRINT "The numbers below are prime.        Now testing...";
     FOR i = First TO Last STEP 2
          TEST = 1
          LOCATE 1, 51: PRINT i
          ii = i / 2
          IF ii MOD 2 = 0 THEN ii = ii - 1
          FOR j = 3 TO ii STEP 2
               IF i MOD j = 0 THEN
               TEST = 0
               j = ii
               END IF
          NEXT
     IF TEST = 1 THEN
          primes = primes + 1
          LOCATE y, x
          PRINT "***"; i; "***";
          x = x + 20
          IF x > 61 THEN x = 1: y = y + 1
          IF y > 22 THEN y = 2
          LOCATE y, x: PRINT "                           "
     END IF
     NEXT
tim2 = TIMER: tim = tim2 - tim1
LOCATE 1, 1:  PRINT "     ---   Done   ---      "; primes; 
"primes computed in"; tim; "seconds"
END IF

IF OutPutTo = 2 THEN
     INPUT "File name for output"; File$
     File$ = RTRIM$(LTRIM$(File$))
     IF LEN(File$) > 8 OR LEN(File$) = 0 THEN END
     IF INSTR(File$, ".") = 0 THEN File$ = File$ + ".txt"
     OPEN File$ FOR OUTPUT AS #1
     CLS
     tim1 = TIMER
     PRINT "Now testing...";
     FOR i = First TO Last STEP 2
          LOCATE 1, 16: PRINT i;
          TEST = 1
          ii = i / 2
          IF ii MOD 2 = 0 THEN ii = ii - 1
          FOR j = 3 TO ii STEP 2
               IF i MOD j = 0 THEN
                    TEST = 0
                    j = ii
               END IF
          NEXT
     IF TEST = 1 THEN
     primes = primes + 1
     dat(0) = dat(0) + 1
     dat(dat(0)) = i
          IF dat(0) = 8192 THEN
               FOR dit = 1 TO 8192
               PRINT #1, dat(dit)
               dat(0) = 0
               NEXT
          END IF
     END IF
     NEXT
FOR dit = 1 TO dat(o)
     PRINT #1, dat(dit)
     NEXT
tim2 = TIMER: tim = tim2 - tim1
LOCATE 1, 1:  PRINT "     ---   Done   ---      "; primes; "primes computed 
in"; tim; "seconds"
PRINT #1, "     ---   Done   ---      "; primes; "primes 
computed in"; tim; "seconds"
END IF

IF OutPutTo = 3 THEN
     INPUT "File name for output"; File$
     File$ = RTRIM$(LTRIM$(File$))
     IF LEN(File$) > 8 OR LEN(File$) = 0 THEN END
     IF INSTR(File$, ".") = 0 THEN File$ = File$ + ".txt"
     OPEN File$ FOR OUTPUT AS #1
     tim1 = TIMER
     CLS
     x = 1: y = 2
     PRINT "The numbers below are prime.        Now testing...";
     FOR i = First TO Last STEP 2
          TEST = 1
          LOCATE 1, 51: PRINT i
          ii = i / 2
          IF ii MOD 2 = 0 THEN ii = ii - 1
          FOR j = 3 TO ii STEP 2
               IF i MOD j = 0 THEN
               TEST = 0
               j = ii
               END IF
          NEXT
     IF TEST = 1 THEN
          primes = primes + 1
          LOCATE y, x
          PRINT "***"; i; "***"
          x = x + 20
          IF x > 61 THEN x = 1: y = y + 1
          IF y > 22 THEN y = 2
          LOCATE y, x: PRINT "                           "
          dat(0) = dat(0) + 1
          dat(dat(0)) = i
               IF dat(0) = 8192 THEN
                    FOR dit = 1 TO 8192
                    PRINT #1, dat(dit)
                    dat(0) = 0
                    NEXT
               END IF
          END IF
     NEXT

FOR dit = 1 TO dat(o)
     PRINT #1, dat(dit)
     NEXT
tim2 = TIMER
tim = tim2 - tim1
LOCATE 1, 1:  PRINT "     ---   Done   ---      "; primes; 
"primes computed in"; tim; "seconds"
PRINT #1, "     ---   Done   ---      "; primes; "primes 
computed in"; tim; "seconds"
END IF
CLOSE
END

---
 * Origin: Eric Ford (1:3632/1.6)


Outer Court
Echo Basic Postings

Books at Amazon:

Back to BASIC: The History, Corruption, and Future of the Language

Hackers: Heroes of the Computer Revolution (including Tiny BASIC)

Go to: The Story of the Math Majors, Bridge Players, Engineers, Chess Wizards, Scientists and Iconoclasts who were the Hero Programmers of the Software Revolution

The Advent of the Algorithm: The Idea that Rules the World

Moths in the Machine: The Power and Perils of Programming

Mastering Visual Basic .NET