ZX-Ревю 1994 №4 1993 г.

Спектрум в школе - программы, написанные в Бейсике для уроков математики и физики. Они одинаково хорошо работают и на уроке и дома, отличия несущественны.


Два года назад собрал с учениками "Спектрум" версии "Ленинград-2" и с тех пор влюблен в эту замечательную маленькую ЭВМ. Как учитель физики не могу не сказать Вам слов глубокой благодарности за этот, по-моему, самый важный раздел "ZX-РЕВЮ". Предлагаю программы, написанные в Бейсике для уроков математики и физики. Они одинаково хорошо работают и на уроке и дома, отличия несущественны. В программе "GRAPHIC" значения функций организованы в массивы, в программе "V.P.GRAPH" вычисления производятся непосредственно перед выдачей точки на экран. Для обеспечения крупного масштаба все сообщения выводятся на служебный экран. Программы позволяют строить до двух графиков в одном координатном поле.

X-coordinat Y-coordinat С-са Leu Late

R-restart G-graphiс S-s cane г

1-Function S-function I-in former

/ '■

/

. V

4-

X=0.992

Y 1 =0

832754-24-

Y2 = -

015936003

Управление в программах. X - задание области изменения аргумента. Y - задание области наблюдения функций.

С - калькулятор - позволяет ввести произвольное значение X и получить значения функций. S - сканер - дает 245 значений X, Y1, Y2 в пределах экрана. Перемещается курсорными клавишами. Для выхода из этого режима -повторно нажать S.

1 - ввод первой функции.

2 - ввод второй функции.

I - вывод информации о введенных функциях и областях изменения X и Y. G - режим вычерчивания графиков. R - рестарт.

GRAPHIC.

5 CLEAR 3 9999 10 FOR i=1 TO 30 2 0 READ p: POKE 63 999+i,p 30 NEXT i

4 0 DATA 33,0,64,1,0,27,17,64,156,237,176,201,33,64,156,1,0,27,17,0,64,237,176,201,6,

21,205,68,14,201 50 DIM A(250): DIM B(250): LET t$=CHR$ 32: LET u$=CHR$ 32:

60 BORDER 6: BRIGHT 1: CLS : LET k=128: LET x0=0: LET xn=0: LET y0=0: LET yn=0 70 PRINT AT 0,0; PAPER 5; "X-coordinat R-restart 1-functionY-coordinat G-graphic 2-functionC-calculate S-scaner I-informer"

100

IF

INKEY$=

"1"

THEN

GO

SUB

260

110

IF

INKEY$=

"2"

THEN

GO

SUB

300

120

IF

INKEY$=

"x"

THEN

GO

SUB

200

130

IF

INKEY$=

"y"

THEN

GO

SUB

230

140

IF

INKEY$=

"i"

THEN

GO

SUB

330

150

IF

INKEY$=

"g"

THEN

GO

SUB

400

160

IF

INKEY$=

"c"

THEN

GO

SUB

600

170

IF

INKEY$=

"s"

THEN

GO

TO

800

180

IF

INKEY$=

"r"

THEN

CLS

: GO TO 5 0

190

GO

TO 100

200 PRINT AT 0,0; PAPER 6; BRIGHT 1;"X" 210 INPUT "X(min)=";x0,"X(max)= ";xn

220 LET a=250/(xn-x0): LET OX=a*x0: GO SUB 1900: BEEP .2,9: RETURN 230 BEEP .2,7: PRINT AT 1,0; PAPER 6; BRIGHT 1;"Y"

ШШЮПРУМ

ЖШПЕ

© Василий Марков, г. Люберцы, 1994 г.

240 INPUT "Y(min)=";y0,"Y(max)=";yn

250 LET b=140/(yn-y0): LET OY=b*y0: GO SUB 1900: BEEP .2,7: RETURN

260 BEEP .2,5: PRINT AT 0,22; PAPER 6; BRIGHT 1;"1"

270 INPUT "Y1=";y$

280 LET t$=y$: DEF FN t(x)=VAL t$: GO SUB 1900: BEEP

300 BEEP .2,3: PRINT AT 1,22; PAPER 6; BRIGHT 1;"2"

310 INPUT "Y2=";y$

320 LET u$=y$: DEF FN u(x)=VAL u$: GO SUB 1900: BEEP

330 BEEP .1,8: PRINT AT 2,22; PAPER 6; BRIGHT 1;"I":

340 IF xn>x0 AND yn>y0 THEN PRINT #1;AT 0,0;x0; INVERSE 1;"<X<"; INVERSE 0;xn,y0;

INVERSE 1;"<Y<"; INVERSE 0;yn: GO TO 360

350 PRINT #1;AT 0,6; PAPER 3; BRIGHT 1;" NO THE COORDINATS !"

360 IF t$<>CHR$ 32 OR u$<>CHR$ 32 THEN PRINT #1;AT 1,0;"Y1=";t$,"Y2=";u$: GO TO 380

370 PRINT #1;AT 1,6; PAPER 2; BRIGHT 1;" NO THE FUNCTIONES !"

380 GO SUB 1900: RETURN

400 BEEP .2,1: PRINT AT 1,12; PAPER 6; BRIGHT 1;"G": RANDOMIZE USR 64024

410 IF xn<=x0 OR yn<=y0 THEN PRINT #1;TAB 6; PAPER 3; BRIGHT 1;" NO THE COORDINATS

!": GO SUB 1900: RETURN

420 IF t$=CHR$ 32 AND U$=CHR$ 32 THEN PRINT #1;TAB 6; PAPER 2; BRIGHT 1;" NO THE

FUNCTIONES !": GO SUB 1900: RETURN

430 PRINT #1;AT 0,0,,PAPER 6;TAB 9; PAPER 4; BRIGHT 1;" I AM THINK ! ";PAPER 6,

440 IF OX>-250 AND OX<0 THEN PLOT ABS OX,1: DRAW 0,140

450 IF OY>-140 AND OY<0 THEN PLOT 0,ABS OY: DRAW 255,0

460 IF t$=CHR$ 32 THEN GO TO 510

470 FOR n=1 TO 250

480 LET x=n/a+x0: LET A(n)=FN t(x):

490 IF z>=1 AND z<140 THEN PLOT n,z

500 NEXT n

510 IF u$=CHR$ 32 THEN GO TO 560

520 FOR n=1 TO 250

530 LET x=n/a+x0: LET B(n)=FN u(x):

540 IF Z>=1 AND z<140 THEN PLOT n,z

550 NEXT n

560 RANDOMIZE USR 3438: RANDOMIZE USR 64000: OVER 1:

0: GO SUB 1900: BEEP .2,1: RETURN

600 BEEP .2,11: PRINT AT 2,0; PAPER 6; BRIGHT 1;"C":

610 IF xn<=x0 OR yn<=y0 THEN PRINT #1;TAB 6; PAPER 3;

!": GO SUB 1900: RETURN

620 IF t$=CHR$ 32 AND u$=CHR$ 32 THEN PRINT #1;TAB 6; PAPER 2; BRIGHT 1;" NO THE

FUNCTIONES !" : GO SUB 1900: RETURN

630 INPUT "X=";x$

640 IF x$="c" THEN GO SUB 1900: BEEP .2,11: RETURN

650 LET x=VAL x$: IF CODE x$<48 OR CODE X$>57 THEN GO TO 630

660 PRINT #1;AT 0,0;"X=";x

670 IF t$<>CHR$ 32 THEN PRINT #1;AT 0,15;"Y1=";FN t(x)

680 IF u$<>CHR$ 32 THEN PRINT #1;AT 1,15;"Y2=";FN u(x)

690 BEEP .2,11: GO SUB 1900: RETURN

800 PRINT AT 2,12; PAPER 6; BRIGHT 1;"S": RANDOMIZE USR 3438: BEEP .3,8: BEEP .5,4

810 IF xn<=x0 OR yn<=y0 THEN PRINT #1;TAB 6; PAPER 3; BRIGHT 1;" NO THE COORDINATS

!": GO SUB 1900: GO TO 100

820 IF t$=CHR$ 32 AND u$=CHR$ 32 THEN PRINT #1;TAB 6; PAPER 2; BRIGHT 1;" NO THE

FUNCTIONES !": GO SUB 1900: GO TO 100

830 PLOT OVER 1; INK 2;k,0: DRAW OVER 1; INK 2;0,140

832 PRINT #1;AT 0,0;"X=";x0+k/a

834 IF t$<>CHR$ 32 THEN PRINT #1;AT 0,15;"Y1=";A(k)

836 IF U$<>CHR$ 32 THEN PRINT #1;AT 1,15;"Y2=";B(k)

840 IF INKEY$=CHR$ 9 THEN GO SUB 880

850 IF INKEY$=CHR$ 8 THEN GO SUB 950

860 IF INKEY$="s" THEN GO TO 1030

870 GO TO 840

880 IF k>24 9 THEN BEEP .5,2: RETURN

890 IF POINT (k,0)=1 THEN PLOT OVER 1;k,0: DRAW OVER 1;0,140

900 LET k=k+1: PLOT OVER 1; INK 2;k,0: DRAW OVER 1; INK 2;0,140: RANDOMIZE USR 3438

.2,5: RETURN

.2,3: RETURN RANDOMIZE USR 34 38

LET z=A(n)*b-OY

LET z=B(n)*b-OY

RANDOMIZE USR 64012: OVER

CLS

RANDOMIZE USR 3438 BRIGHT 1;" NO THE COORDINATS

910 PRINT #1;AT 0,0;"X=";x0+k/a

920 IF t$<>CHR$ 32 THEN PRINT #1;AT 0,15;"Y1=";A(k) 930 IF U$<>CHR$ 32 THEN PRINT #1;AT 1,15;"Y2=";B(k) 94 0 RETURN

950 IF k<3 THEN BEEP .5,2: RETURN

960 IF POINT (k,0)=1 THEN PLOT OVER 1;k,0: DRAW OVER 1;0,140

980 LET k=k-1: PLOT OVER 1; INK 2;k,0: DRAW OVER 1; INK 2;0,140: RANDOMIZE USR 3438 990 PRINT #1;AT 0,0;"X=";x0+k/a

1000 IF t$<>CHR$ 32 THEN PRINT #1;AT 0,15;"Y1 = ";A(k) 1010 IF u$<>CHR$ 32 THEN PRINT #1;AT 1,15;"Y2=";B(k) 102 0 RETURN

1030 IF POINT (k,0)=1 THEN PLOT OVER 1;k,0: DRAW OVER 1;0,140 1040 BEEP .3,8: BEEP .5,4: GO SUB 1900: GO TO 100

1900 PAPER 5: PRINT AT 0,0;"X";AT 0,12;"R";AT 0,22;"1";AT 1,0;"Y";AT 1,12;"G";AT 1,22;"2";AT 2,0;"C";AT 2,12;"S";AT 2,22;"I": PAPER 7: RETURN

V.P.GRAPH.

Текст этой программы незначительно отличается от "GRAPHIC". Ниже приводятся отличающиеся строки.

480 LET x=n/a+x0: LET z=FN t(x)*b-OY

530 LET x=n/a+x0: LET z=FN u(x)*b-OY

650 IF CODE X$<48 OR CODE X$>57 THEN GO TO 630

655 LET X=VAL x$

832 LET x=k/a+x0: PRINT #1;AT 0,0;"X=";x

834 IF t$<>CHR$ 32 THEN PRINT #1;AT 0,15;"Y1=";FN t(x)

836 IF u$<>CHR$ 32 THEN PRINT #1;AT 1,15;"Y2=";FN u(x)

910 LET x=k/a+x0: PRINT #1;AT 0,0;"X=";x

920 IF t$<>CHR$ 32 THEN PRINT #1;AT 0,15;"Y1=";FN t(x)

930 IF u$<>CHR$ 32 THEN PRINT #1;AT 1,15;"Y2=";FN u(x)

990 LET x=k/a+x0: PRINT #1;AT 0,0;"X=";x

1000 IF t$<>CHR$ 32 THEN PRINT #1;AT 0,15;"Y1 = ";FN t(x)

1010 IF u$<>CHR$ 32 THEN PRINT #1;AT 1,15;"Y2=";FN u(x)

Буду, признателен за все замечания и дополнения, которые смогут сделать читатели для улучшения программ. Так, например, в предлагаемых мной графических программах параболическую функцию нельзя задать как Y=X02, но можно, как Y=X*X - почему? Как это связано с работой операторов DEF FN и FN?

Хотелось бы также знать, как работают процедуры обработки ошибок в ПЗУ. Или, конкретней, как отключить процедуры ПЗУ и подключить собственные. Например, при построении графиков типа Y=SQR X было бы желательно, чтобы компьютер игнорировал отрицательные значения: X и переходил к обработке следующего значения, не выдавая сообщения об ошибке. Как вернуться в Бейсик?

Невозможно дать ответ на вопрос Василия Петровича более полный, чем был дан в большой работе Алексеева А.Г. под общим названием "ПРОФЕССИОНАЛЬНЫЙ ПОДХОД". Первая часть этой работы так и называется: "Обработка ошибок в Бейсике". Она была опубликована в РЕВЮ-92, № 5-6, стр.113. Пользуясь случаем, сообщаем об опечатке в листинге программы, приведенной на стр. 115 (левая колонка, внизу): в Бейсик-строке 100 шестое значение DATA должно быть 225, а не 255, иначе не сходится контрольная сумма при формировании кодового блока ON ERROR GO TO.

Тем, у кого нет возможности ознакомиться с этим материалом, можем посоветовать разыскать

программу SUPERCODE, там вы можете найти упомянутый блок кодов.

* * *




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
News - вернулись Shaitan, Valera Selev и Nuts!
Программирование - когда калькулятор бейсика противопоказан.
Юмор - анекдоты.
Доступ к автоответчикам - Телефоны и факсы Pаnаsоniс со встроенным автоответчиком имеют чудесную функцию: дистанционное управление автоответчиком.
Про кровь - группа крови - задачка для психологов.

В этот день...   29 марта