1 REM THIS PROGRAM APPEARS AT PAGE 143 OF THE ITALIAN VERSION OF
2 REM "PROGRAMMING IN BASIC" 1ST EDITION, BY BYRON S. GOTTFRIED 
10  REM        SIMULATION OF A BOUNCING BALL
20  DIM X(100),Y(100),Z(100),T(100)
30  PRINT "INITIAL HEIGHT OF BALL (FT)";
40  INPUT H
50  IF H=0 THEN 810
60  PRINT "INITIAL HORIZONTAL VELOCITY (FT/SEC)";
70  INPUT V
80  PRINT "NUMBER OF BOUNCES";
90  INPUT N
100 PRINT "BOUNCE COEFFICIENT";
110 INPUT C
120 PRINT "LENGTH OF TIME INCREMENT (SEC)";
130 INPUT D
140 PRINT
150 REM
160 REM        INITIALIZE PARAMETERS
170 REM
180 LET B=0
181 LET T(1)=0
182 LET X(1)=0
183 LET Z(1)=0
190 LET Y(1)=H
200 LET G=32.2
210 REM
220 REM COMPUTE VELOCITY AND DISPLACEMENT FOR EACH TIME INCREMENT
230 REM
240 FOR I=1 TO 99
250    GOSUB 730
260    IF Y(I+1)>0 THEN 330
270    IF B=N THEN 360
280    LET D1=D*Y(I)/(Y(I)-Y(I+1))    ' CORRECT FOR BOUNCE CONDITION
290    LET Z1=-C*(Z(I)-G*D1)
300    LET Z(I+1)=Z1-G*(D-D1)
310    LET Y(I+1)=.5*(Z1+Z(I+1))*(D-D1)
320    LET B=B+1
330 NEXT I
340 GO TO 400
350 REM 
360 REM        BALL HITS GROUND FOR LAST TIME    
370 REM
380 LET D=D*Y(I)/(Y(I)-Y(I+1))
390 GOSUB 730
400 LET I1=I+1
410 LET T1=T(I1)
420 LET X1=X(I1)
430 REM
440 REM        PRINT NUMERICAL OUTPUT
450 REM
460 PRINT "HORIZONTAL DISTANCE TRAVELED=";X1;"FT"
470 PRINT "TIME REQUIRED=";T1;"SECS"
480 PRINT
490 FOR I=1 TO I1
500    PRINT "T=";T(I),"X=";X(I),"Y=";Y(I),"Z=";Z(I)
510 NEXT I
520 PRINT
530 REM
540 REM        PRINT GRAPHICAL OUTPUT
550 REM
560 PRINT "GRAPHICAL SOLUTION TO BOUNCING BALL PROBLEM"
570 PRINT
580 FOR J=0 TO 71 STEP 3	' WORKAROUND, BECAUSE THE ORIGINAL
590    PRINT TAB(J);"...";	' CODE DOESN'T WORK UNDER dib DUE TO
600 NEXT J			' ITS PRECISE ADHERENCE TO DARTMOUTH
610 PRINT TAB(69);"..*"		' BASIC'S OUTPUT
620 PRINT "."
630 FOR I=2 TO I1      ' GENERATE SUCCESSIVE POINTS OF CURVE
640    LET J=INT(71*Y(I)/Y(1))
650    IF J=0 THEN 680
655    IF J<0 OR J>74 THEN 700	' ADDED BY A. MASCHIO (Nov. 23, 2008)
660    PRINT ".";TAB(J);"*"
670    GO TO 690
680    PRINT "*"
690    PRINT "."
700 NEXT I
710 GO TO 30
720 REM
730 REM SUBROUTINE TO CALCULATE VELOCITY AND DISPLACEMENT AT END
740 REM        OF TIME INCREMENT
750 REM
760 LET T(I+1)=T(I)+D
770 LET X(I+1)=X(I)+V*D
780 LET Z(I+1)=Z(I)-G*D
790 LET Y(I+1)=Y(I)+.5*(Z(I+1)+Z(I))*D
800 RETURN
810 END


