1 REM THIS PROGRAM APPEARS AT PAGE 118 OF THE ITALIAN VERSION OF
2 REM "PROGRAMMING IN BASIC" 1ST EDITION, BY BYRON S. GOTTFRIED 
10 REM SEARCH FOR A MAXIMUM OF THE FUNCTION Y=X*COS(X)
20 DEF FNY(X)=X*COS(X)
30 REM PRINT "LEFT END OF INTERVAL (X1) =";
40 REM INPUT X1
45 LET X1=0
50 PRINT
60 REM PRINT "RIGHT END OF INTERVAL (X4) =";
70 REM INPUT X4
75 LET X4=3.14159
80 PRINT
90 REM PRINT "MINIMUM SEPARATION BETWEEN INTERIOR POINTS (D) =";
100 REM INPUT D
105 LET D=0.0001
110 LET I=1
120
130 REM CALCULATE INTERIOR POINTS
140
150 LET X2=X1+.5*(X4-X1-D)
160 LET X3=X2+D
170 LET Y2=FNY(X2)
180 LET Y3=FNY(X3)
190 PRINT
200 PRINT "Y1=";FNY(X1),"Y2=";Y2,"Y3=";Y3,"Y4=";FNY(X4)
210 PRINT "X1=";X1,"X2=";X2,"X3=";X3,"X4=";X4
220 IF Y2<Y3 THEN 300
230 IF Y2=Y3 THEN 400
240
250 REM Y2 GREATER THAN Y3 - RETAIN LEFT INTERVAL
260
270 LET X4=X3
280 GOTO 340
290
300 REM Y3 GREATER THAN Y2 - RETAIN RIGHT INTERVAL
310
320 LET X1=X2
330
340 REM TEST FOR END OF SEARCH
350
360 IF I=100 THEN 470
370 LET I=I+1
380 IF (X4-X1)>3*D THEN 130
390
400 REM COMPUTE FINAL SOLUTION
410
420 LET X5=.5*(X2+X3)
430 PRINT
440 PRINT ,"XMAX=";X5,"YMAX=";FNY(X5)
450 STOP
460
470 REM TERMINATE COMPUTATION BECAUSE OF MAXIMUM ITERATION COUNT
480
490 PRINT "MAXIMUM NUMBER OF ITERATIONS EXCEEDED - COMPUTATION ENDS"
500 END
