|
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: 7936 (0x1f00) Types: TextFile Names: »MARKET.BAS«
└─⟦69a509965⟧ Bits:30005211 CR8 BASIC Games └─ ⟦this⟧ »MARKET.BAS«
1 REM PROGRAM MARKET.BAS 10 REM MARKET - SIMULATION OF MARKET COMPETITION BETWEEN 2 COMPANIES 20 REM DEVELOPED BY S. FINKELSTEIN, J. MCGRATH, I. STAW, D. SOBIN 30 REM ALSO DEVELOPED BY D. KLASSEN - PROGRAMMED BY D. SOBIN 40 REM LATEST REVISION 8-29-72 50 REM COPYRIGHT 1972 - STATE UNIVERSITY OF NEW YORK 60 DEF FNR(X)=.01*INT(100*X+.5) 70 DIM C(2),I(2),T(2),A(2),L(2),D(2),P(2),V(2),W(2),B(2),E(5) 80 PRINT "DO YOU WANT INSTRUCTIONS(TYPE 1 FOR YES, 0 FOR NO)"; 90 INPUT H 100 READ K2,N,K,K3,C(1),C(2),I(1),I(2),F,U,R,G1,G2,G3,M1,K4 110 LET Q=0 120 PRINT 130 IF H=0 THEN 210 140 PRINT "MARKET SIMULATES THE COMPETITION BETWEEN TWO COMPANIES" 150 PRINT "SELLING A PRODUCT DIFFERENTIATED BY BRAND ADVERTISING." 160 PRINT "THE QUANTITY EACH COMPANY SELLS IS DEPENDENT UPON PRICE" 170 PRINT "AND ADVERTISING BUDGET. THE GAME ENDS WHEN ONE " 180 PRINT "COMPANY GOES BANKRUPT OR REACHES ";1.00000E-03*M1;" MILLION IN" 190 PRINT "TOTAL ASSETS." 200 PRINT 210 PRINT "ARE YOU BEGINNING THE GAME OR CONTINUING" 220 PRINT "(TYPE 1 FOR BEGINNING, 2 FOR CONTINUING)"; 230 INPUT A 240 PRINT 250 IF A=1 THEN 350 260 FOR J=1 TO 2 270 PRINT "COMPANY ";J;"ENTER PREVIOUS CASH ON HAND,PREVIOUS INVENTORY"; 280 INPUT C(J),I(J) 290 PRINT 300 NEXT J 310 PRINT "ENTER VARIABLE PRODUCTION COST"; 320 INPUT U 330 PRINT "ENTEP QUARTER NUMBER"; 340 INPUT Q 350 PRINT 360 PRINT "FIXED PRODUCTION COST=$";F*1000;"/ QUARTER" 370 PRINT "VARIABLE PRODUCTION COST=$";U;"/UNIT" 380 PRINT "WITH NO ADVERTISING AND A SELLING PRICE OF $50/UNIT" 390 PRINT "A COMPANY WILL SELL ";K2*500;" UNITS (PRINTED AS ";K2/2;")" 400 PRINT "WAREHOUSE CHARGE FOR INVENTORY=";R*100;" PER CENT" 410 PRINT "INTEREST CHARGE ON BORROWED MONEY=";K3*100;" PER CENT" 420 PRINT 430 PRINT 440 RANDOMIZE 450 PRINT 460 PRINT 470 PRINT "UNITS AND DOLLARS BELOW ARE IN THOUSANDS " 480 PRINT 490 PRINT 500 FOR J=1 TO 5 510 LET E(J)=0 520 NEXT J 530 LET P4=0 540 GOSUB 1560 550 FOR J=1 TO 2 560 LET W(J)=0 570 LET D(J)=0 580 LET T(J)=0 590 LET B(J)=U*I(J)+C(J) 600 GOSUB 1610 610 NEXT J 620 PRINT 630 LET Q=Q+1 640 GOSUB 1930 650 GOSUB 1160 660 GOSUB 1540 670 REM COMPUTE DEMAND 680 FOR J=1 TO 2 690 LET D(J)=(1-E(5))*.5*(K2+2*V(J)*D1)/(P(J)/50)^N 700 NEXT J 710 GOSUB 1810 720 FOR J=1 TO 2 730 IF D(J)>I(J) THEN 760 740 LET T(J)=D(J) 750 GO TO 770 760 LET T(J)=I(J) 770 LET T(J)=INT(T(J)) 780 LET C(J)=C(J)+T(J)*P(J) 790 LET I(J)=I(J)-T(J) 800 NEXT J 810 FOR J=1 TO 2 820 LET C(J)=C(J)-R*I(J)*U-K3*C(J)*(SGN(C(J))-SGN(C(J))^2)/2 830 LET C(J)=INT(C(J)) 840 IF E(5)=0 THEN 870 850 LET W(J)=0 860 GO TO 890 870 IF T(1)+T(2)=0 THEN 850 880 LET W(J)=INT(10000*T(J)/(T(1)+T(2)))/100 890 NEXT J 900 FOR J=1 TO 2 910 GOSUB 1610 920 LET B(J)=C(J)+U*I(J) 930 IF B(J)>0 THEN 970 940 PRINT 950 GOSUB 1760 960 PRINT 970 IF B(J)<M1 THEN 1050 980 IF B(J)<=C(3-J)+U*I(3-J) THEN 1050 990 LET P4=17 1000 PRINT 1010 PRINT TAB(14);"********************" 1020 PRINT "COMPANY ";J;" YOU HAVE REACHED ";1.00000E-03*M1;" MILLION AND WON" 1030 PRINT TAB(14);"********************" 1040 PRINT 1050 NEXT J 1060 PRINT 1070 IF P4<>17 THEN 630 1080 PRINT 1090 PRINT "DO YOU WANT TO PLAY AGAIN(TYPE 1 FOR YES, 0 FOR NO)"; 1100 INPUT H 1110 IF H=0 THEN 1150 1120 RESTORE 1130 PRINT 1140 GO TO 80 1150 STOP 1160 PRINT 1170 FOR J=1 TO 2 1180 PRINT 1190 PRINT 1200 PRINT "COMPANY ";J 1210 IF E(2)<>1 THEN 1240 1220 PRINT "NO PRODUCTION POSSIBLE DUE TO STRIKE" 1230 GO TO 1270 1240 PRINT "PRODUCTION LEVEL"; 1250 INPUT L(J) 1260 IF L(J)<0 THEN 1240 1270 PRINT "ADVERTISING BUDGET"; 1280 INPUT A(J) 1290 IF A(J)<0 THEN 1270 1300 LET C(J)=C(J)-F-L(J)*U-A(J) 1310 IF E(2)=1 THEN 1330 1320 LET I(J)=I(J)+L(J) 1330 PRINT "UNIT PRICE"; 1340 INPUT A 1350 IF E(1)<>1 THEN 1410 1360 IF A<=P(J) THEN 1410 1370 PRINT 1380 PRINT "YOU MAY NOT RAISE PRICES DURING THE WAGE-PRICE FREEZE" 1390 PRINT 1400 GO TO 1330 1410 LET P(J)=A 1420 IF A>200 THEN 1330 1430 IF P(J)<=0 THEN 1330 1440 NEXT J 1450 LET A2=A(1)+A(2) 1460 IF A2>0 THEN 1500 1470 LET V(1)=0 1480 LET V(2)=0 1490 GO TO 1520 1500 LET V(1)=A(1)/A2 1510 LET V(2)=A(2)/A2 1520 LET D1=(K2-K2*EXP(-K*A2))*K4 1530 RETURN 1540 PRINT 1550 PRINT 1560 PRINT "QUARTER ";Q 1570 PRINT 1580 PRINT "PROFIT MARKET SHARE CASH ON HAND NUMBER SOLD "; 1590 PRINT "INVENTORY ASSETS" 1600 RETURN 1610 PRINT U*I(J)+C(J)-B(J);TAB(9);W(J);TAB(23);C(J);TAB(37); 1620 PRINT T(J);TAB(50);I(J);TAB(61);U*I(J)+C(J) 1630 RETURN 1640 DATA 50 1650 DATA 2 1660 DATA 1.00000E-03 1670 DATA .05 1680 DATA 5000,5000 1690 DATA 100,100 1700 DATA 250 1710 DATA 20 1720 DATA .05 1730 DATA .2,.4,.4 1740 DATA 12000 1750 DATA 1.5 1760 PRINT TAB(7);"********************" 1770 PRINT "COMPANY ";J;" YOU HAVE GONE BANKRUPT" 1780 PRINT TAB(7);"********************" 1790 LET P4=17 1800 RETURN 1810 IF P(1)<P(2) THEN 1840 1820 LET M=2 1830 GO TO 1850 1840 LET M=1 1850 LET G4=(P(3-M)-P(M))/P(3-M) 1860 IF G4<=G1 THEN 1920 1870 IF G4<G2 THEN 1890 1880 LET G4=G2 1890 LET G5=D(3-M)*((G4-G1)/(G2-G1))*G3 1900 LET D(3-M)=D(3-M)-G5 1910 LET D(M)=D(M)+G5 1920 RETURN 1930 IF Q<6 THEN 2270 1940 IF RND<.1 THEN 1990 1950 IF RND<.1 THEN 2040 1960 IF RND<.1 THEN 2140 1970 IF RND<.1 THEN 2210 1980 GO TO 2270 1990 IF E(1)>0 THEN 1950 2000 GOSUB 2410 2010 LET E(1)=1 2020 LET Q1=Q 2030 GO TO 1950 2040 LET I=INT(RND+1.5) 2050 IF Q-W2<=2 THEN 1960 2060 IF C(I)<0 THEN 1960 2070 IF C(I)>200 THEN 2100 2080 LET C(I)=.75*C(I) 2090 GO TO 2110 2100 LET C(I)=C(I)-200 2110 GOSUB 2460 2120 LET W2=Q 2130 GO TO 1960 2140 LET J=INT(RND+1.5) 2150 IF Q-W3<=2 THEN 1970 2160 GOSUB 2510 2170 LET C(J)=C(J)+U*I(J)*.75 2180 LET I(J)=0 2190 LET W3=Q 2200 GO TO 1970 2210 IF E(1)=1 THEN 2270 2220 IF Q-W4<=2 THEN 2270 2230 LET W4=Q 2240 GOSUB 2560 2250 LET E(5)=1 2260 LET Q2=Q 2270 IF INT((Q-1)/4)*4<>Q-1 THEN 2660 2280 IF Q=1 THEN 2660 2290 IF E(1)=1 THEN 2660 2300 IF RND>.25 THEN 2370 2310 IF Q<6 THEN 2370 2320 GOSUB 2610 2330 LET E(2)=1 2340 LET U=INT(U*(1.1+.1*RND)) 2350 LET Q3=Q 2360 GO TO 2660 2370 LET U=INT(U*(1.05+.1*RND)) 2380 PRINT "NEW LABOR CONTRACT - VARIABLE PRODUCTION COST NOW="; 2390 PRINT " $";U;"/UNIT" 2400 GO TO 2660 2410 PRINT "THE PRESIDENT HAS JUST IMPOSED A WAGE-PRICE FREEZE ON THE" 2420 PRINT "ECONOMY, AND YOU MAY NOT RAISE THE PRICE OF YOUR PRODUCT" 2430 PRINT "OVER THE NEXT 2 QUARTERS." 2440 PRINT 2450 RETURN 2460 PRINT "COMPANY ";I;"HAS BEEN THE VICTIM OF EMBEZZLEMENT BY THE" 2470 PRINT "VICE PRESIDENT OF THE COMPANY. YOUR CASH ON HAND IS NOW "; 2480 PRINT "$";C(I) 2490 PRINT 2500 RETURN 2510 PRINT "COMPANY";J;" HAS SUFFERED FIRE DAMAGE IN ITS WAREHOUSE" 2520 PRINT "ALL UNITS WERE DESTROYED. YOUR INSURANCE WILL REIMBURSE YOU" 2530 PRINT "IN THE AMOUNT OF $";INT(U*I(J)*.75);" FOR THESE UNITS" 2540 PRINT 2550 RETURN 2560 PRINT "A TRANSPORTATION STRIKE HAS OCCURED, AND YOU ARE UNABLE TO" 2570 PRINT "MOVE YOUR GOODS TO THE DISTRIBUTORS. NEGOTIATIONS HAVE" 2580 PRINT "BEGUN, BUT HOPE OF A SETTLEMENT LOOKS DIM." 2590 PRINT 2600 RETURN 2610 PRINT "THERE HAS BEEN A STRIKE AND YOUR PRODUCTION HAS BEEN" 2620 PRINT "HALTED. NEGOTIATIONS HAVE BEEN STARTED, BUT HOPE OF" 2630 PRINT "A SETTLEMENT LOOKS DIM." 2640 PRINT 2650 RETURN 2660 IF E(1)<>1 THEN 2710 2670 IF Q<Q1+2 THEN 2710 2680 LET E(1)=2 2690 PRINT "THE WAGE-PRICE FREEZE HAS ENDED" 2700 PRINT 2710 IF E(5)<>1 THEN 2760 2720 IF Q2=Q THEN 2760 2730 LET E(5)=0 2740 PRINT "TRANSPORTATION STRIKE SETTLED. NORMAL DELIVERIES RESUMED" 2750 PRINT 2760 IF E(2)<>1 THEN 2820 2770 IF Q3=Q THEN 2820 2780 PRINT "STRIKE SETTLED. NORMAL PRODUCTION RESUMED" 2790 PRINT "NEW VARIABLE COST=$";U;" / UNIT DUE TO INCREASED WAGES" 2800 PRINT 2810 LET E(2)=0 2820 RETURN 2830 END «eof»