DEF fn.frac (a#) = a# - INT(a#) DIM p30(8) DIM sum30#(8) pr.alt# = 1 dreissiger: DATA 1, 7, 11, 13, 17, 19, 23, 29 GOSUB start.meldung GOSUB lade.30 GOSUB pruefe.datei ON datei.existiert + 1 GOSUB datei.neu, datei.alt GOSUB oeffne flag.ende = 0 WHILE flag.ende = 0 xx = xx + 1 GOSUB ermittle.primzahl IF fn.frac(xx / 100) = 0 THEN GOSUB pruefe.taste WEND GOSUB schliesse END '------------------------------------------------------- oeffne: OPEN "_temp_.txt" FOR OUTPUT AS #2 CLOSE #2 KILL "_temp_.txt" NAME fileout$ AS "_temp_.txt" OPEN "_temp_.txt" FOR INPUT AS #2 OPEN fileout$ FOR OUTPUT AS #1 WHILE NOT EOF(2) LINE INPUT #2, tx$ PRINT #1, tx$ WEND CLOSE #2 KILL "_temp_.txt" RETURN schliesse: CLOSE #1 RETURN pruefe.taste: IF INKEY$ <> "" THEN flag.ende = 1 xx = 0 RETURN '------------------------------------------------------- ermittle.primzahl: limit# = 2 * INT(SQR(start.zahl#) + 1) FOR z# = 3 TO limit# STEP 2 IF fn.frac(start.zahl# / z#) = 0 THEN GOTO weiter NEXT z# rem PRINT nr#; start.zahl#; PRINT #1, nr#; start.zahl#; IF nr# < 12 THEN PRINT #1, " - "; : GOTO get.diff FOR i = 1 TO 8 IF fn.frac((start.zahl# - p30(i)) / 30) = 0 THEN GOTO gefunden NEXT i PRINT "Programm geht noch nicht bei "; nr#; start.zahl#: END gefunden: sum30#(i) = sum30#(i) + 1 rem PRINT p30(i); PRINT #1, p30(i); get.diff: nr# = nr# + 1 diff = start.zahl# - pr.alt# pr.alt# = start.zahl# rem PRINT diff PRINT #1, diff weiter: start.zahl# = start.zahl# + 2 RETURN '------------------------- Startmeldung------------------------------ start.meldung: PRINT "Primzahl-Generierung (C) Streichert 2001 Version 1.8" PRINT "Die Primzahlen werden ein eine Ausgabedatei geschrieben und " PRINT "NICHT am Bildschrim angezeigt. Damit eine bereits vorliegende Primzahl-" PRINT "liste erweitert werden kann, werden die neu ermittelten Primzahlen" PRINT "in der vorhandenen Datei angeh„ngt." PRINT "Zus„tzlich wird die Gruppenzugeh”rigkeit der 8 Gruppen angegeben, " PRINT "sowie die Differenz zur vorausgegangenen Primzahl." PRINT GOSUB get.command.line IF anz.param = 0 THEN INPUT "Name der Ausgabedatei "; fileout$ IF anz.param <> 0 THEN fileout$ = param$(1) PRINT fileout$; " wird benutzt." RETURN '-------------------------- Datei muss neu angelegt werden datei.neu: OPEN fileout$ FOR OUTPUT AS #1 PRINT #1, "Primzahlen" PRINT #1, 1; 1; " - "; " - " PRINT #1, 2; 2; " - "; 1 PRINT #1, 3; 3; " - "; 1 PRINT #1, 4; 5; " - "; 2 nr# = 5 start.zahl# = 7 pr.alt# = 5 CLOSE #1 RETURN '-------------------------- Datei existiert schon datei.alt: OPEN fileout$ FOR INPUT AS #1 INPUT #1, t$ IF LEFT$(t$, 10) <> "Primzahlen" THEN GOTO falsche.datei WHILE NOT EOF(1) INPUT #1, nr#, start.zahl#, gr, piff WEND pr.alt# = start.zahl# start.zahl# = start.zahl# + 2 nr# = nr# + 1 CLOSE #1 RETURN '-------------------------- Prfe, ob Datei existiert -------------- pruefe.datei: datei.existiert = 1 ON ERROR GOTO datei.nein OPEN fileout$ FOR INPUT AS #1 ON ERROR GOTO 0 CLOSE #1 RETURN '--------------------------- Datei existiert nicht, neu anlegen ----------- datei.nein: datei.existiert = 0 RESUME NEXT '--------------------------- Datei enth„lt keine Primzahlen ----------- falsche.datei: PRINT "Die angegebene Datei enth„lt nicht das Wort 'Primzahlen' in der" PRINT "ersten Zeile. Bitte prfen Sie den Dateinamen. Beginnen Sie gegebenenfalls" PRINT "mit einer Datei, die noch nicht existiert. Programm wird beendet." END '---------------------- liefert Parameter aus der COMMAND$-Variablen get.command.line: comand$ = COMMAND$ IF comand$ = "" THEN anz.param = 0: RETURN anz.param = 1 laenge = LEN(comand$) WHILE laenge > 0 nxt.c$ = LEFT$(comand$, 1) laenge = laenge - 1 comand$ = RIGHT$(comand$, laenge) IF nxt.c$ <> " " THEN param$(anz.param) = param$(anz.param) + nxt.c$: p.flag = 0 IF nxt.c$ = " " AND p.flag = 0 THEN p.flag = 1: anz.param = anz.param + 1 WEND RETURN lade.30: RESTORE dreissiger FOR i = 1 TO 8 READ p30(i) NEXT i RETURN