home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
64'er
/
64ER_CD.iso
/
90xx
/
9006a.d64
/
fakultaet
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
1995-03-30
|
4KB
|
168 lines
100 REM ************************
110 REM
120 REM FAKULTAETSBERECHNUNG
130 REM
140 REM VON C.P.HUGELMANN
150 REM
160 REM ************************
170 REM PROGRAMMPARAMETER
180 FM=100000:NZ%=5:NS%=7180
190 PI=1314 : PZ=1329
200 REM EINGABE DER FAKULTAET
210 GOSUB 1000
220 REM BERECHNUNG DER ZIFFERNANZAHL
230 GOSUB 1100
240 REM SPEICHERBEDARFABSCHAETZUNG
250 GOSUB 1300
260 REM ABSCHAETZUNG DER RECHENZEIT
270 GOSUB 1400
280 REM AUSFUEHREN ?
290 GOSUB 1500
300 REM INITIALISIERUNG
310 TI$="000000" : TA=TI
320 ML%=1
330 DIM M1(ND%)
340 M1(1)=1
350 PRINT"[147]"
360 REM BILDSCHIRM GANZ DUNKEL ?
400 REM BERECHNUNG
410 FOR I=1 TO FF%
420 UE=0
430 REM GOSUB 1600 FUER DIAGNOSE
440 FOR J=1 TO ML%
450 ZZ=M1(J)*I+UE
460 UF=INT(ZZ/FM)
470 M1(J)=ZZ-UF*FM
480 UE=UF
490 NEXT
500 IF UE=0 THEN 530
510 ML%=ML%+1
520 M1(ML%)=UE
530 NEXT
600 REM NACHBEREITUNG
610 TA=(TI-TA)/60
620 AU%=0
900 REM VERTEILER
910 GOSUB 1700
999 END
1000 PRINT"[147]"
1010 PRINT" "
1020 PRINT"WELCHE FAKULTAET MOECHTEN SIE BERECHNEN";
1030 INPUT A$
1040 IF A$="0" THEN FF%=0 : GOTO 1070
1050 FF%=VAL(A$)
1060 IF FF%=0 THEN PRINT"GEBEN SIE BITTE NUR EINE ZAHL GROESSER 0 EIN":GOTO 1010
1070 A$=STR$(FF%)
1080 LL%=LEN(A$)
1090 FS$=RIGHT$(A$,LL%)+"!"
1099 RETURN
1100 IF FF%=0 OR FF%=1 THEN FZ=1 : GOTO 1180
1110 LX=LOG(SQR(6.283185307179))
1120 LY=(FF%+0.5)*LOG(FF%)-FF%+LX
1130 LZ=LOG(10.)
1140 FZ=INT(LY/LZ)+1
1150 IF FZ=1 THEN 1180
1160 PRINT FS$;" HAT ";FZ;" ZIFFERN"
1170 GOTO 1199
1180 PRINT FF%;"! HAT EINE ZIFFER"
1199 REM RETURN FALLS 0EN UNINTERESSANT
1200 LL%=FF%
1210 L5%=0
1220 M5%=INT(LL%*0.2+0.1)
1230 IF LL%>=5 THEN:L5%=L5%+M5%:LL%=M5%:GOTO 1220
1240 IF L5%=0 THEN 1299
1250 IF L5%=1 THEN 1280
1260 PRINT" ...DAVON ";L5%;" NULLEN AM ENDE"
1270 RETURN
1280 PRINT" ...DAVON EINE NULL AM ENDE"
1299 RETURN
1300 ND%=INT((FZ+NZ%-.5)/NZ%)
1310 IF ND%<=NS% THEN 1399
1315 PRINT" "
1320 PRINT" "
1325 PRINT" LEIDER REICHT DER SPEICHER-"
1330 PRINT" BEDARF FUER EINE BERECHNUNG"
1335 PRINT" SO NICHT AUS. WEITER UEBER "
1340 PRINT" 10000! KOMMT MAN NUR, WENN "
1345 PRINT" MAN JE 4 ZIFFERN IN EINEM "
1350 PRINT" INTEGERFELD SPEICHERT(NZ%=4"
1355 PRINT" ND%<=NS%=18000,DIM M1%(NS%))"
1360 PRINT" DIE ZEITBERECHNUNG STIMMT "
1365 PRINT" DANN SO NICHT MEHR : "
1370 PRINT" "
1380 AU%=-1
1399 RETURN
1400 IF FF%>99 THEN 1440
1410 A=0.10633 : B=1.5192E-4 : C=3.2094E-3 : D=1.6457E-5 : E=6.18974E-2
1420 SE=((D*FF%+C)*FF%+B)*FF%+A+E*LOG(FF%+1)
1430 GOTO 1480
1440 A=-426.652 : B=-1.64185 : C=8.36252E-3 : D=4.6302E-7 : E=119.972
1450 SE=INT(((D*FF%+C)*FF%+B)*FF%+A+E*LOG(FF%)+.5)
1480 PRINT"DIE BERECHNUNG DAUERT ETWA"
1490 PRINT SE;" SEKUNDEN"
1499 RETURN
1500 PRINT" "
1510 IF AU%>=0 THEN PRINT" AUSFUEHREN (J/N)":GOTO1530
1520 PRINT"WEITER MIT <RETURN>"
1530 GET A$ : IF A$="" THEN 1530
1540 IF AU%<0 THEN 900
1570 IF LEFT$(A$,1)="N" THEN AU%=-1 : GOTO 900
1580 AU%=1
1599 RETURN
1600 POKE PI-3,9:POKE PI-2,61
1610 A$=STR$(VAL(STR$(I)))
1620 FOR K=1 TO LEN(A$)
1630 POKE PI+K,ASC(MID$(A$,K,1))
1640 NEXT
1650 POKE PZ+2,19:POKE PZ+3,5:POKE PZ+4,3
1660 A$=STR$(INT((TI-TA)/60))
1670 FOR K=1 TO LEN(A$)
1680 POKE PZ-LEN(A$)+K,ASC(MID$(A$,K,1))
1690 NEXT
1699 RETURN
1700 PRINT"[147]"
1710 PRINT" "
1720 PRINT"NEUE FAKULTAETSBERECHNUNG --> 1"
1730 PRINT"AUFHOEREN --> 2"
1740 IF AU%<0 THEN GOTO 1800
1750 PRINT"LAENGE,ZEIT --> 3"
1760 PRINT"AUSGABE BILDSCHIRM --> 4"
1770 PRINT"AUSGABE FLOPPY --> 5"
1775 GOTO 1800
1780 PRINT"AUSGABE DRUCKER --> 6"
1800 GET A$ :IF A$="" THEN 1800
1810 LL%=VAL(A$)
1815 PRINT"[147]"
1820 ON LL% GOTO 1840,999,1900,1850,1930,2000
1830 PRINT"EINGABEFEHLER !":GOTO 1710
1840 RUN
1850 PRINT FS$;" = ";RIGHT$(STR$(M1(ML%)),NZ%);
1860 IF ML%=1 THEN 1895
1870 FOR K=ML%-1 TO 1 STEP -1
1880 PRINT RIGHT$(STR$(FM+M1(K)),NZ%);
1890 NEXT
1895 GET A$ : IF A$="" THEN 1895
1899 GOTO 1700
1900 REM ZEITVERGLEICH
1910 GOSUB 1150
1920 PRINT "ZUR BERECHNUNG WURDEN BENOETIGT:"
1921 PRINT TA;" SEKUNDEN"
1925 PRINT "(GESCHAETZT:";SE;" )"
1928 GET A$ :IF A$="" THEN 1928
1929 GOTO 1700
1930 REM FLOPPY
1940 PRINT"FLOPPY EINGESCHALTET ?"
1950 GET A$ :IF A$="" THEN 1950
1960 OPEN 11,8,11,"0:"+FS$+",S,W"
1970 ZZ$="*** "+FS$+" MIT "+STR$(FZ)+"ZIFFERN ***"
1971 PRINT#11,ZZ$
1980 ZZ$="*** BERECHNET IN "+STR$(TA)+" SEKUNDEN ***"
1981 PRINT#11,ZZ$
1990 FOR K=ML% TO 1 STEP -1
1991 PRINT#11,RIGHT$(STR$(FM+M1(K)),NZ%);
1992 NEXT
1993 PRINT#11,"*"
1997 CLOSE 11
1998 GOTO 1710
1999 RETURN