|
DataMuseum.dkPresents historical artifacts from the history of: CP/M |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CP/M Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - download
Length: 3712 (0xe80) Types: TextFile Names: »SUPERMAR.KED«
└─⟦eca9022c5⟧ Bits:30002661 Datalære sådan - løsningsdiskette └─ ⟦this⟧ »SUPERMAR.KED«
0010 // simulering af supermarked: SUPER 0020 //--------------------------------------------------------------- 0030 DIM videre$ OF 1 // en hjælpevariabel uden betydning 0040 CLEAR 0050 INPUT "Hvor mange åbne kasser: ": n 0060 INPUT "hvor mange minutter skal der simuleres: ": slut 0070 // 0080 DIM kasse(n),kø(n) 0085 ankomne:= 0; nr:= 0; t:= 0 // kun nødvendig i RCcomal 0090 spildtid:= 0 0100 // 0110 FOR minut:= 1 TO slut DO 0120 EXEC kundeankomst(ankomne) 0130 // 0140 WHILE ankomne>0 DO 0150 EXEC findkortkø(kø,kasse,n,nr) 0160 kø(nr):= kø(nr)+1 0170 ankomne:= ankomne-1 0180 ENDWHILE 0190 // 0200 FOR i:= 1 TO n DO 0210 IF kasse(i)=0 THEN 0220 IF kø(i)=0 THEN 0230 spildtid:= spildtid+1 0240 ELSE 0250 kø(i):= kø(i)-1 0260 EXEC betjeningstid(t) 0270 kasse(i):= t 0280 ENDIF 0290 ELSE 0300 kasse(i):= kasse(i)-1 0310 ENDIF 0320 NEXT i 0330 // 0340 CLEAR 0350 PRINT "status for minut nr ";minut 0360 PRINT 0370 FOR i:= 1 TO n DO 0380 PRINT USING "kasse nr ##: eksped.tid endnu ## min.": i,kasse(i) 0390 PRINT USING " kølængde er ### personer": kø(i) 0400 NEXT i 0410 PRINT 0420 PRINT 0430 PRINT "Samlet spildtid i kasserne indtil nu: ";spildtid 0440 PRINT 0450 PRINT 0460 INPUT "- tast RETURN-tasten når udskrift er læst:": videre$ 0470 // 0480 NEXT minut 0490 CLEAR 0491 PRINT 0492 PRINT 0495 spildpct:= 100*spildtid/(n*slut) 0500 PRINT USING "SIMULERING SLUT - SAMLET SPILDTID ###### MIN ": spildtid 0505 PRINT USING "SPILDTID I % AF SAMLET ÅBNINGSTID ER ###.# %": spildpct 0510 END // ------------------hovedprogram slut --------------------------- 0520 // 0530 // 0540 PROC kundeankomst(REF antal) CLOSED 0550 RANDOMIZE 0560 x:= RND(1,100) 0570 CASE TRUE OF 0580 WHEN x<=21 0590 antal:= 0 0600 WHEN x<=49 0610 antal:= 1 0620 WHEN x<=72 0630 antal:= 2 0640 WHEN x<=90 0650 antal:= 3 0660 WHEN x<=96 0670 antal:= 4 0680 OTHERWISE 0690 antal:= 5 0700 ENDCASE 0710 ENDPROC kundeankomst 0720 // 0730 // 0740 PROC betjeningstid(REF tid) CLOSED 0750 RANDOMIZE 0760 x:= RND(1,100) 0770 CASE TRUE OF 0780 WHEN x<=24 0790 tid:= 1 0800 WHEN x<=39 0810 tid:= 2 0820 WHEN x<=77 0830 tid:= 3 0840 WHEN x<=94 0850 tid:= 4 0860 OTHERWISE 0870 tid:= 5 0880 ENDCASE 0890 ENDPROC betjeningstid 0900 // 0910 // 0920 PROC findkortkø(REF kø(),REF kasse(),antal,REF nr) CLOSED 0930 nr:= 1 0940 FOR i:= 2 TO antal DO 0950 li:= kø(i) 0960 lnr:= kø(nr) 0970 IF kasse(i)>0 THEN li:= li+1 0980 IF kasse(nr)>0 THEN lnr:= lnr+1 0990 IF li<lnr THEN nr:= i 1000 NEXT i 1010 ENDPROC findkortkø 1020 // 1030 //----------------------------------------------------------- 5000 PROC skrivud(fra,til) CLOSED 5010 IMPORT antalfelter,antalposter,feltnavne$,skærmpå,postlængde 5020 DIM post$ OF postlængde 5030 DIM postindhold$(antalfelter) OF 25,svar$ OF 1 5040 CLEAR 5050 IF til>antalposter THEN til:= antalposter 5060 IF fra<1 THEN fra:= 1 5070 FOR nr:= fra TO til DO 5080 READ FILE 1,nr: post$ 5090 FOR f:= 1 TO antalfelter DO postindhold$(f):= post$((f-1)*25+1:f*25) 5100 PRINT USING "post nr ###:": nr 5110 FOR i:= 1 TO antalfelter DO 5120 PRINT feltnavne$(i);": ";postindhold$(i) 5130 NEXT i 5140 PRINT 5150 PRINT 5160 IF skærmpå THEN 5170 INPUT AT(60,22),"-tast return:": svar$ 5180 CLEAR 5190 ENDIF 5200 NEXT nr 5210 ENDPROC skrivud «eof»