РЕВЮ
N10(10)1991
Спектрум в школе
Сегодня мы печатаем материал, подготовленный участниками компьютерного кружка под руководством С. В. Митина (г. Ульяновск).
Первая программа может пригодиться на уроках математики. Она предназначена для построения графиков.
"1. Y=X*X*SIN(1/X)" "2. Y=Х*SIN(1/Х)" "3. Y=SQR(X*X+2)" "4. Y=COS(X*EXP(-X/5))" "5. Y=6+2*X*X-X*X*X*X"
Графики функций.
10 REM ** Построение графиков ** 20 REM ** Начальная установка ** 110 CLS
120 LET sx=176 130 LET sy=160 140 LET hy=sy/2 150 CLS
160 PRINT AT 8,10; "Построение графиков" 170 PRINT 180 PRINT 190 PRINT 200 PRINT 210 PRINT 220 PRINT 230 PRINT 240 PRINT 250 PRINT 260 PRINT 270 PRINT
280 PRINT FLASH 1; TAB 5;"Укажите номер уравнения" 300 INPUT N
310 IF N=1 THEN DEF FN A(x)=x*x*SIN(1/x) 320 IF N=2 THEN DEF FN A(x)=x*SIN(1/x) 330 IF N=3 THEN DEF FN A(x)=SQR(x*x*2) 340 IF N=4 THEN DEF FN A(x)=COS(x*EXP(-x/5)) 350 IF N=5 THEN DEF FN A(x)=6+2*x*x-x*x*x*x 360 PRINT
370 PRINT "Область изменения Х"
400 INPUT "Ввести наименьшее и наибольшее значение ";a,b
450 IF а^ THEN PRINT FLASH 1; "Ошибка - попробуйте еще."
460 IF a>b THEN GO TO 370
500 PRINT "Вычисление области значений Y."
520 LET c=(b-a)/100
530 LET ш=1.0Е-30
540 FOR x=a TO b STEP c
550 IF x=0 THEN GO TO 580
560 LET y=ABS(FN A(x))
570 IF m<y THEN LET m=y
580 NEXT x
590 REM *Готов построить графики
600 PAUSE 500: CLS
700 LET c=c/10
720 FOR x=a TO b STEP c
730 IF x=0 THEN GO TO 790
740 LET y=FN A(x)
Issue #8: The Murder Machine
Scan, OCR & spellcheck by NUK
750 LET u=sx*(x-a)/(b-3)
760 LET v=hy+hy*y/m
770 IF v<0 OR v>sy THEN GO TO 790
780 PLOT u,v
790 NEXT x
800 REM *окончание и повторение* 810 LET g$=INKEY$ 820 IF g$="" THEN GO TO 810 830 CLS
850 PRINT "Повторить? Y/N" 860 LET g$=INKEY$
870 IF g$0"Y" AND g$<>"y" AND g$<>"N" AND g$<>"n" THEN GO TO 860 880 IF g$="Y" OR "="y" THEN GO TO 150 890 STOP
С помощью этой программы Вы можете анализировать графики и каких-то своих функций. Для этого надо изменить расчетную формулу, по которой она будет вычисляться (строки 310 - 350), а также поменять запись формулы в меню (строки 180 - 260). Обратите особое внимание, чтобы при обработке Вашей функции не происходило деления на ноль. Если в формуле есть деление, то либо область изменения знаменателя не должна содержать ноль, либо перед расчетом надо проверять знаменатель и, если он равен нулю, обрабатывать этот случай особо или вообще его пропускать, не рассматривая.
Поэкспериментируйте с предложенной Вам программой, попробуйте менять значение c в строке 700. Вместо c/10 попробуйте c/5 и c/20.
Графики получается симпатичнее, если левое значение х взять отрицательным, а правое положительным.
А вот еще одна небольшая программа для урока математики:
Исследование матриц.
10 REM **"Исследование матриц** 100 REM **Начальная установка** 110 CLS
120 LET sx=176: LET sy=160 130 LET rt=.6
140 LET hx=sx/2: LET hy-sy/2 170 REM ** Ввод матрицы** 200 PRINT
210 PRINT "Введите свою матрицу" 220 PRINT
230 INPUT"Строка 1, столбец 1";m1 240 PRINT
250 INPUT"Строка 1, столбец 2":m2 260 PRINT
270 INPUT"Строка 2, столбец 1";m3 280 PRINT
290 INPUT"Строка 2, столбец 2";m4 320 PRINT
330 PRINT"Ваша матрица: " 340 PRINT TAB 4; m1; TAB 10;m2 350 PRINT TAB 4: m3; TAB 10:m4 360 PRINT
370 LET det=m1*m4 - m2*m3
380 PRINT "Определитель D=";det
390 PRINT "Хотите продолжить Y/N"
400 PRINT
430 LET g$=INKEY$
440 IF g$<>"Y" AND g$<>"У" AND g$<>"N" AND g$<>"n" THEN GO TO 430
45O IF g$="N" OR g$="n" THEN GO TO 180
460 PRINT "Ладно, но немного терпения, пожалуйста"
470 PAUSE 250
480 LET dd=ABS(det)
490 IF dd<1 THEN LET dd=1:BEEP .1,2 500 CLS
600 REM ** Картинка ** 610 FOR x=0 TO 15 STEP 7.5 620 FOR y=0 TO 15 STEP 1/dd 630 GO SUB 910 640 NEXT y 650 NEXT x
660 FOR y=0 TO 15 STEP 15
670 FOR x=0 TO 15 STEP 1/dd
680 GO SUB 910
690 NEXT x
700 NEXT y
710 LET y=12
720 FOR x=5 TO 10 STEP 1/dd 730 GO SUB 910 740 NEXT x
800 REM *окончание и повторение* 810 PAUSE 0
820 PRINT "Повторить? Y/N": PAUSE 500 830 CLS
840 LET g$=INKEY$
850 IF g$<>"Y" AND g$<>"y" AND g$<>"N" AND g$<>"n" THEN GO TO 840 860 IF g$="Y" OR g$="y" THEN GO TO 180 870 STOP
900 REM ** вычерчивание **
910 LET u= (m1*x+m2*y)*rt+bx
920 IF u<0 OR u>sx THEN RETURN
930 LET v=hy+m3*x+m4*y
940 IF v<0 OR v>sy THEN RETURN
950 PLOT u,v
960 RETURN
Сейчас, когда страна вступает на путь рыночный отношений, молодежи могут пригодиться знания, связанные со способами и методами вложения и приумножения капитала. Итак, сегодня мы рассмотрим проект "ИНВЕСТОР".
Для справки: ИНВЕСТОР - человек, который вкладывая свой капитал способствует развитию какого-то предприятия и резонно рассчитывает получить за это часть прибыли. От того, как он сумеет определить перспективность того или иного предприятия, зависит получит ли он прибыль.
В реальной жизни он руководствуется при этом своими знаниями (знания никогда не бывают лишними), опытом, интуицией, личными убеждениями, но может привлекать консультантов и, конечно, рискует.
Итак, неизвестный благодетель предоставил Вам 1000 долларов с условием, что Вы вложите их в развитие трех фирм X, Y, Z. Вы обязаны вкладывать ВСЕ имеющиеся у Вас деньги в течение 10 лет. Для этого Вы раз в год сообщаете компьютеру о том, какую сумму Вы вкладываете в то или иное предприятие.
У Вас есть мощный компьютер и свой человек в каждой из трех фирм, так что Вы в состоянии оценить прибыль (убыток) на один доллар в каждой фирме в зависимости от состояния рынка.
Всего возможны три состояния, и Вам компьютер подсказывает с какой вероятностью наступит то или иное состояние, а вот решение по тому, в какую фирму сколько вкладывать примете Вы сами. Возможная прибыль или убыток на один доллар выводится на экран в виде таблицы,например:_
Фирма |
Состояния рынка |
|
ST 1 |
|
ST 2 |
|
ST 3 |
|
0.222 |
|
0.413 |
|
0.365 |
X |
.4 |
|
-.1 |
|
.3 |
Y |
-.2 |
|
.1 |
|
.1 |
Z |
-.1 |
|
.4 |
|
-.3 |
Здесь вероятность того, что рынок окажется в 1-ом состоянии - 0.222, (т.е. в 22.2% случаях). Если оно произойдет, то в предприятии X каждый вложенный доллар принесет 0.4 доллара прибыли, в фирме Y Вы понесете убыток 0.2 долл., а в фирме Z - 0.1 $. Таким образом, если Вы вложили в X, Y и Z соответственно по 300, 300 и 400 долларов, а состояние рынка было ST 1, то результат Вашей инвестиции будет: 300*0.4+300*(-0.2)+400*(-0.1) = 20 долл.
Теперь Вы будете обладателем 1020 долларов и в конце года будете снова принимать решение, куда Вам их вложить. Достаточно указать сколько будет вложено в X и Y, а остаток компьютер сам переправит в Z.
Цена игры - порядка 5%. Так что, если Вы будете играть оптимально, то должны в среднем приумножать свой капитал на 5% в год. Играя рискованно, Вы можете разбогатеть или разориться чуть быстрее. 10 REM ИНВЕСТОР 100 REM **Начальная установка** 110 CLS
120 DIM a(4,3,10) 130 FOR k=1 ТО 10 140 FOR i=1 ТО 4 150 FOR j=1 TO 3 160 READ a(i,j,k) 170 NEXT j 180 NEXT i 190 NEXT k 200 LET w=1000 210 LET year=1 300 REM ** ЦИКЛ ** 310 CLS
315 PRINT TAB 12; "ИНВЕСТОР" 320 PRINT TAB 13; "ГОД: "; year 330 PRINT
340 PRINT "Капитал в начале года равен ";w 350 PRINT
360 PRINT TAB 8; "Состояние рынка"
370 PRINT TAB 8;"ST 1 ST 2 ST 3"
380 LET K=INT(RND*10+1)
390 FOR i=1 TO 4
400 IF i=2 THEN PRINT "X";
410 IF i=3 THEN PRINT "Y";
420 IF i=4 THEN PRINT "Z";
430 FOR j=1 TO 3
440 IF i=1 THEN PRINT TAB (3+6*j); a(i,j,k); 450 IF i>1 THEN PRINT TAB (3+6*j); a(i,j,k); 460 NEXT j
470 IF i=1 THEN PRINT 480 PRINT 490 NEXT i 500 PRINT
510 INPUT "Сколько Вы хотите вложить в X?"; х 540 LET x=INT(x+0.5)
550 IF x<0 OR x>w THEN PRINT FLASH 1; "Ошибка" 560 IF x<0 OR x>w THEN GO TO 510 570 INPUT "Сколько Вы хотите вложить в Y?"; y 590 LET y=INT(y+0.5)
600 IF y<0 OR y>(w-x) THEN PRINT FLASH 1: "Ошибка" 610 IF y<0 OR y>(w-x) THEN GO TO 570 620 LET z=w-x-y
630 PRINT "Остаток ";z;" вложен в Z" 640 REM ** Состояние рынка ** 650 LET q=RND 660 LET r=3
670 IF q<a(1,1,k)+a(1,2,k) THEN LET r=2 680 IF q<a(1,1,k) THEN LET r=1 690 PRINT " Состояние рынка "; r
700 REM ** Прибыль и убыток **
710 LET w= w+a(2,r,k)*x + a(3,г,k)*у + а(4,г,k)*z
720 LET w=INT(w+.5)
730 PRINT "Ваш капитал теперь равен: ";w 740 PRINT
750 PRINT "Чтобы продолжить нажмите Y" 760 LET g$=INKEY$
770 IF g$ <> "y" AND g$ <> "Y" THEN GO TO 760
780 LET year=year+1
790 IF year<11 THEN GO TO 300
800 REM *Окончание и повторение*
810 PRINT
820 PRINT "Вы начали с 1000, а теперь у Вас уже: 830 PRINT
840 LET b$ = " *Потрясающий результат* " 850 IF w<2500 THEN LET b$=
*Отлично* *Хорошо * *Неплохо* *Жить можно* другой раз повезет *
860 IF w<2000 THEN LET b$= 870 IF w<1750 THEN LET b$= 880 IF w<1400 THEN LET b$= 890 IF w<1000 THEN LET b$= 900 PRINT b$ 910 PRINT
1000 REM ** Повторение ** 1010 PRINT "Повторить? Y/N" 1020 LET g$ = INKEY$
1030 IF g$<>"Y" AND g$<>"y" AND g$<>"N" AND g$ <>"n" THEN GO TO 1020
1040 IF g: 1050 STOP
1100 |
REM ** |
Данные |
** |
|
1110 |
DATA |
478, |
337, |
.185 |
|
- |
7, |
7, |
-.3, |
|
- |
3, |
2, |
.1, |
1120 |
DATA |
106, |
53, |
.364 |
|
- |
3, |
7, |
.5, |
|
|
7, |
3, |
.5, |
1130 |
DATA |
415, . |
347, |
.237 |
|
- |
7, |
7, |
-.3, |
|
- |
3, |
4, |
0, |
1140 |
DATA |
247, |
346, |
.38, |
|
- |
7, |
4, |
-.3, |
|
- |
3, - |
5, |
.2, |
1150 |
DATA |
437, |
438, |
.125 |
|
- |
6, |
4, |
-.6, |
|
- |
3, - |
3, |
.5, |
1160 |
DATA |
304, |
435, |
.261 |
|
- |
7, |
4, |
-.6, |
|
|
2, - |
2, |
.6, |
1170 |
DATA |
422, |
39, |
.188 |
|
|
8, - |
3, |
.7, |
|
- |
3, - |
3, |
.1, |
1180 |
DATA - |
214, |
357, |
.429 |
|
- |
2, |
1, |
-.3, |
|
- |
1, |
1, |
-.2, |
1190 |
DATA |
222, |
413, |
.365 |
|
- |
4, |
3, |
-.2, |
|
|
1, - |
1, |
.4, |
1200 |
DATA |
093 |
463, |
.444 |
|
- |
6, 2, |
7, 2, |
-.6, .8, |
5="Y" OR g$ = "y" THEN GO TO 200
3,
7,
5
5,
5,
7
3,
7,
5
5, 7, 3
6,
4, 6
5, 5, 7
3,
4, 2 4, 1, 3 0, 0,
"ИНФОРКОМ" сыграл в эту игру десяток раз, стратегию и ни разу не показал результата хуже "хорошо" с очень хорошо сбалансированной игрой.
быстро обнаружил оптимальную . Поздравляем авторов программы