11000 REM KNAUS.BAS 1010 REM 820510 1020 DIM A(100) 1035 PRINT : PRINT "PROGRAMM NACH KNAUS-OGINO" : PRINT : PRINT 1040 X=0 : REM ANZAHL DER WERTE 1050 PRINT "ES KOENEN NUR WERTE ZWISCHEN DEM 1. JAN. 1973 UND DEM" 1060 PRINT "31. DEZ 1999 VERWENDET WERDEN." 1070 PRINT "ALLE WERTE MUESSEN OHNE UNTERBRECHUNG AUFEINANDERFOLGEN" 1080 PRINT "DIE JAHRESANGABE MUSS 4-STELLIG SEIN." 1090 PRINT : PRINT "HABEN SIE WERTE GESPEICHERT "; : GOSUB 4000 1100 IF A<>1 THEN 1110 : PRINT "NAME: "; : INPUT F$ : GOSUB 8000 : GO TO 1120 1110 PRINT "FUER WEN WIRD GERECHNET "; : INPUT F$ : GO TO 1160 1120 PRINT : PRINT "WOLLEN SIE WEITERE WERTE HINZUFUEGEN "; : GOSUB 4000 1130 IF A=1 THEN 1160 : IF X>=2 THEN 1150 1140 PRINT "EIN WERT IST NICHT GENUG" : GO TO 1120 1150 IF A<>1 THEN 1190 1160 X=X+1 : PRINT : PRINT "BITTE DEN";X;".TEN WERT EINGEBEN" 1170 PRINT "TAG, MONAT, JAHR, ZEIT "; : INPUT D,M,Y,T 1180 GOSUB 3000 : A(X)=H : GO TO 1120 1190 GOSUB 4070 : IF A<>1 THEN 2000 1200 GOSUB 9000 000 PRINT 2010 PRINT "BERECHNUNG","(";X;"WERTE)" : PRINT : V=0 : W=0 : REM ABWEICHUNG 2020 Z=(A(X)-A(1))/(X-1) : REM ARITHMETISCHES MITTEL 2030 B=0 : REM SUMME DER FEHLERQUADRATE 2040 PRINT " DATUM UHRZEIT DAUER ABWEICHUNG" 2050 FOR K=1 TO X : H=A(K) : GOSUB 5000 : GOSUB 5830 : IF K<>1 THEN 2070 2060 PRINT : GO TO 2120 2070 S=A(K)-A(K-1) : PRINT TAB(28);INT(S/2.4)/10; : REM PERIODENDAUER 2080 U=S-Z : PRINT TAB(39);INT(U) : REM ABWEICHUNG VOM MITTELWERT 2090 B=B+U*U : REM AUFSUMMIERUNG DER FEHLERQUADRATE 2100 IF U>W THEN W=U : REM ZU SPAET 2110 IF U0 THEN 2200 : REM NEU BEGINNEN 2125 CLOSE #1 : GO TO 1000 2200 PRINT : PRINT : PRINT 2210 PRINT "ERGEBNISSE:" : PRINT : W=INT(.5+W) : V=-INT(.5+ABS(V)) 2220 H=Z : GOSUB 5600 : PRINT "MITTEL",D;"D";T;"H","(+";W;"/";V;")" 2230 A=B/(X-1) : A=SQR(A) : PRINT "STREUUNG",INT(10*A+.5)/10 2240 B$="SEHR GUT" : IF A>14 THEN B$="GUT" 2250 IF A>24 THEN B$="BEFRIEDIGEND" 2260 IF A>44 THEN B$="MANGELHAFT" 2270 IF A>54 THEN B$="UNGENUEGEND" 2280 PRINT "BEMERKUNG:"," WERTE SIND ";B$;"." : PRINT 2290 S=A(X)+Z : REM DER NAECHSTE TERMIN 2300 H=S-A-410 : B$="PAUSE VON " : GOSUB 6000 2310 H=S+A-300 : B$=" BIS " : GOSUB 6000 2320 H=S : B$="NAECHSTE " : GOSUB 6000 2330 H=S-336 : B$="EISPRUNG " : GOSUB 6000 2340 H=S+6048 : B$="GEBURT " : GOSUB 6000 2350 PRINT : GOSUB 4060 : IF A=1 THEN 2000 : REM NOCHMAL BEGINNEN 2360 PRINT : PRINT "DANKE SCHOEN !" : PRINT : PRINT : PRINT 2370 STOP 3000 REM BERECHNUNG DER STUNDEN SEIT 1.1.1972 0.00 UHR 3010 REM INPUT DATUM & TIME (D,M,Y$T)INTERNALLYMODIFIED 3020 REM OUTPUT H INTERNAL USE OF I AND DATA-READ-STATEMENT 3030 Y=Y-1972 : IF Y<1 THEN 3040 : IF Y>27 THEN 3040 : GO TO 3050 3040 PRINT "JAHR IST UNZULAESSIG!" : STOP 3050 H=24*(365*Y+INT(Y/4)+D)+T : IF INT(Y/4)<>Y/4 THEN 3070 3060 IF M<3 THEN H=H-24 3070 FOR I=1 TO M : READ D : NEXT I : RESTORE : H=H+24*D : RETURN 3080 DATA 0,31,59,90,120,151,181,212,243,273,304,334,365 4000 REM FRAGE MIT JA ODER NEIN BEANTWORTEN 4010 J=1 : N=0 : PRINT "(J/N)"; : INPUT A$ : IF A$="J" THEN A=1 4020 IF A$="N" THEN A=0 4030 IF A$="N" THEN 5420 : IF A$="J" THEN 5420 4040 PRINT "BITTE MIT 'J' ODER 'N' ANTWORTEN "; : GO TO 4010 4050 PRINT "SIND DIE WERTE BRAUCHBAR "; : GOSUB 4000 : RETURN 4060 PRINT "WOLLEN SIE DIE TERMINE NOCH MAL SEHEN "; : GOSUB 4000 : RETURN 4070 PRINT "SOLLEN WERTE ABGESPEICHERT WERDEN "; : GOSUB 4000 : RETURN 5000 REM BERECHNUNG DES ABSOLUTEN DATUMS AUS H (SEIT1972) 5010 REM INPUT H OUTPUT D,M,Y $T 5020 REM INTERNALLY USES SUBROUTINE 2000 (CON VERTHTOD&T) 5030 REM BERECHNUNG DES JAHRES 5040 Y=1972 : H=H-8784 : IF H<0 THEN PRINT "FEHLER !" : STOP 5050 Y=Y+1 : IF H<8760 THEN 5200 5060 IF INT(Y/4)<>Y/4 THEN H=H-8760 : GO TO 5050 5070 IF H>=8784 THEN H=H-8784 : GO TO 5050 5200 REM BERECHNUNG DES MONATS 5210 M=-1 5220 M=M+1 : N=J : READ J : IF M>1 THEN 5230 : GO TO 5240 5230 IF INT(Y/4)=Y/4 THEN J=J+1 5240 IF H>=J*24 THEN 5220 5250 RESTORE : H=H-N*24 5400 REM BERECHNUNG VON TAG UND UHRZEIT 5410 GOSUB 5600 : D=D+1 5420 RETURN 5600 REM KONVERSION VON STUNDEN IN TAGE UND STUNDEN 5610 REM INPUT H (=ANZAHLDERSTUNDEN) 5620 REM OUTPUT D (=VOLLETAGE)T(=RESTSTUNDEN) 5630 IF H>2000 THEN 5640 : IF H>=0 THEN 5650 5640 PRINT "HOURS OUT OF RANGE" : STOP 5650 D=INT(H/24) : T=INT(H-24*D) : RETURN 5800 REM AUSDRUCK VON (HINWEIS&)DATUM 5810 REM IN B$,D,M,Y & T OUTPUT NOTHING 5820 PRINT B$;TAB(15); 5830 REM ENTRY FOR NO PRINTING OF B$ 5840 PRINT USING "##. ##. #### ##.## UHR ",D,M,Y,INT(T+.5); : RETURN 6000 REM BERECHNUNG & AUSDRUCK VON DATUM (MITHINWEIS) 6010 GOSUB 5000 : GOSUB 5800 : PRINT : RETURN 7000 REM BERECHNUNG UND AUSDRUCK VON DATUM (OHNEHINWEIS) 7010 GOSUB 5000 : GOSUB 5830 : PRINT : RETURN 8000 REM FILE VON SPEICHER LESEN 8010 OPEN "i",#1,"FKNAUS" 8020 INPUT #1:X 8030 FOR J=1 TO X 8040 INPUT #1:A(J) 8050 NEXT J 8060 RETURN 9000 REM AUF SPEICHER SCHREIBEN 9010 OPEN "o",#2,"FKNAUS" 9020 PRINT #2:X 9030 FOR J=1 TO X 9040 PRINT #2:A(J) 9050 NEXT J 9060 CLOSE #2 9070 RETURN 9900 END