Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Структура программы. Интерфейс пользователя.

Комплекс обучающих программ по теме “Векторы на плоскости” состоит из следующих программ:

* Сложение векторов. Учащемуся предлагается построить два вектора на координатной плоскости, ввести их координаты и посчитать координаты вектора суммы. Затем учащемуся предлагается построить вектор суммы.

* Вычитание векторов. Учащемуся предлагается построить два вектора на координатной плоскости, ввести их координаты и посчитать координаты вектора разности. Затем учащемуся предлагается найденный вектор суммы.

* Умножение вектора на число. Учащемуся предлагается построить вектора на координатной плоскости, ввести его координаты и посчитать координаты вектора равного произведению построенного вектора и числу загаданному компьютером. Затем учащемуся предлагается построить вектор произведения.

Каждая программа состоит из 10 однотипных заданий.

Все три программы имеют одинаковый внешний вид.

При входе в выбранную программу в правой части экрана появляется задание которое необходимо выполнить. В левой части экрана появляется изображение координатной плоскости. В правом верхнем углу нарисовано 10 яблок, которые являются индикатором степени выполняемости заданий. Если в процессе выполнения задания учащийся не допускает ошибок, то яблоко закрашивается в красный цвет, если учащийся допустил 1 ошибку яблоко приобретает желтую окраску, 2 ошибки - зеленый цвет, 3 ошибки - синий, 4 и более ошибок - белый.

Рассмотрим вариант программы (Умножение вектора на число). При запуске программы на в левой части экрана изображается координатная плоскость и стрелочка-курсор. Учащийся при помощи клавиш управления курсором перемещает стрелочку до места, где он предполагает отметить начало вектора и нажимает клавишу <ПРОБЕЛ>, тем самым отмечая на координатной плоскости начало вектора. Затем аналогичным образом он отмечает конец вектора. После этого все события переходят в правую часть экрана, где испытуемому предлагается указать координаты построенного вектора. При неправильном указании координат испытуемому предлагается повторить ввод координат.

На следующем этапе работы с программой учащемуся предлагается ввести координаты вектора произведения равного произведению построенного испытуемым вектора на число загаданное компьютером. При правильном построении на экране появляется сообщение о количестве ошибок и предлагается выполнить следующее задание.

Выйти из программы можно нажав клавишу <Esc>.

Программы построены таким образом, что от пользователя практически не требуется никаких навыков работы с персональным компьютером, благодаря удачному пользовательскому интерфейсу. В каждой программе выходными данными является количество ошибок за тестирование. Количество ошибок не говорит о точном оценивании знаний учащегося, так как неизвестен “уровень претензий” предъявляемых к тестируемому.

Благодаря обширной системе подсказок пользователь может в том или ином месте программы нажав клавишу <F1> получить всегда хорошую помощь в виде сообщения на экране.

Программа написана на языке программирования Qbasic. Программа требует для работы персональной компьютер совместимый с IBM PC 386 и выше. Обязательно должен быть загружен драйвер кириллицы.

 

Приложения

Приложение №1

Файл - modul.bas

REM ГЛАВНОЕ МЕНЮ

CLS

FILEHLP$ = "GLMENU.HLP"

menuha:

'вывод на экран меню

baz$ = "menu.dat"

dlin = 30

m = 1

GOSUB menu

IF rez1$ = "Работа в системе" THEN GOTO rmp

IF cur = 2 THEN GOSUB reklama

IF rez1$ = "Выход" THEN CLS: SYSTEM

GOTO menuha

rmp:

REM вывод на экран меню с темами

baz$ = "prog.dat"

baz$ = parh$ + baz$

dlin = 30

GOSUB menu

finalshow:

OPEN "bat.bat" FOR OUTPUT AS #1

FOR i = 1 TO LEN(rez2$)

IF MID$(rez2$, i, 1) = "." THEN rash$ = MID$(rez2$, i + 1, 3)

NEXT i

PRINT #1, "@echo off "

IF rash$ = "bas" THEN PRINT #1, "@qbasic.exe /run "; rez2$

IF rash$ = "com" OR rash$ = "exe" OR rash$ = "bat" THEN PRINT #1, rez2$

PRINT #1, "@del bat.bat"

CLOSE #1

CLS

SYSTEM

reklama:

OPEN FILEHLP$ FOR INPUT AS #1

S = 0

DO

ON ERROR GOTO 0

LINE INPUT #1, stran$

S = S + 1

LOOP UNTIL EOF(1)

CLOSE #1

IF FIX(S / 18) >= (S / 18) THEN KS = FIX(S / 18) ELSE KS = FIX(S / 18) + 1

DIM stran$(S)

OPEN FILEHLP$ FOR INPUT AS #1

FOR i = 1 TO S

ON ERROR GOTO 0

LINE INPUT #1, stran$(i)

NEXT i

CLOSE #1

NS = 1

GOSUB stran

obrabotka:

A$ = INKEY$

IF A$ = CHR$(0) + CHR$(73) THEN NS = NS - 1: GOSUB stran

IF A$ = CHR$(0) + CHR$(81) THEN NS = NS + 1: GOSUB stran

IF A$ = CHR$(27) THEN ERASE stran$: RETURN

GOTO obrabotka

stran:

IF NS < 1 THEN NS = 1: RETURN

IF NS > KS THEN NS = KS: RETURN

n = 18 * NS

'SLC:

LOCATE 1, 1

PRINT "г"; STRING$(64, "="); "T============="

PRINT "¦"; STRING$(15, " ");: COLOR 15, 0: PRINT "ИНФОРМАЦИОННО - СПРАВОЧНАЯ СИСТЕМА";: COLOR 7, 0: PRINT STRING$(15, " ");

IF NS < 10 THEN PRINT "¦ Страница "; NS; "¦" ELSE PRINT "¦ Страница"; NS; "¦"

PRINT "¦"; STRING$(64, " "); "L=============¦"

FOR i = n - 17 TO n

IF i > S THEN PRINT "¦"; STRING$(78, " "); "¦" ELSE PRINT "¦ "; stran$(i); STRING$((76 - LEN(stran$(i))), " "); "¦"

NEXT i

PRINT "L"; STRING$(78, "="); "-"

COLOR 1, 7: PRINT " Выход - Esc ";

IF NS = 1 THEN COLOR 8, 7 ELSE COLOR 1, 7

PRINT " Предыдущая страница - PageUp ";

IF NS = KS THEN COLOR 8, 7 ELSE COLOR 1, 7

PRINT " Следующая страница - PageDown "

COLOR 7, 0

RETURN

menu:

COLOR 7, 0

CLS

OPEN baz$ FOR INPUT AS #2

DIM mas$(150, 2)

INPUT #2, R$

i = 0

DO

i = i + 1

INPUT #2, mas$(i, 1)

INPUT #2, mas$(i, 2)

LOOP UNTIL EOF(2)

CLOSE #2

m = i

IF m > 10 THEN m = 10

R = INT((25 - m) / 2)

nashalo:

u = 1: cur = 1: cur1 = 1

uold = LEN(R$): uold = dlin - uold: uuold = INT(uold / 2): uuuold = uold - uuold

R1$ = STRING$(uuuold, "=") + R$ + STRING$(uuold, "=") ' Формирование заголовка таблицы

tablisha:

LOCATE R, 1

PRINT STRING$(21, " "); "г"; R1$; ""

PRINT STRING$(21, " "); "¦"; STRING$(dlin, " "); "¦"

schet = 0

FOR t = u TO u + m - 1

schet = schet + 1

COLOR 7, 0: PRINT STRING$(21, " "); "¦";

IF cur1 = schet THEN COLOR 0, 7

' установка стандартной длинны фразы

uold = LEN(mas$(t, 1)): uold = dlin - uold: uuold = INT(uold / 2): uuuold = uold - uuold

t$ = STRING$(uuuold, " ") + mas$(t, 1) + STRING$(uuold, " ")

PRINT t$;

COLOR 7, 0: PRINT "¦"

NEXT t

PRINT STRING$(21, " "); "L"; STRING$(dlin, "="); "-"

GOSUB smotr

chetire:

kbd$ = INKEY$

flag = 0

SELECT CASE kbd$

CASE CHR$(0) + "H": cur = cur - 1: cur1 = cur1 - 1: flag = 1

CASE CHR$(0) + "P": cur = cur + 1: cur1 = cur1 + 1: flag = 1

CASE CHR$(0) + CHR$(61): GOTO dopoln

CASE CHR$(13): GOTO final

CASE CHR$(27): CLS: SYSTEM

END SELECT

IF flag = 0 THEN GOTO chetire

IF cur = 0 THEN u = i - m + 1: cur = i: cur1 = m: GOTO tablisha

IF cur = i + 1 THEN GOTO nashalo

IF cur1 = 0 THEN u = u - 1: cur1 = 1

IF cur1 = m + 1 THEN: u = u + 1: cur1 = m

GOTO tablisha

 

smotr:

LOCATE 1, 1: COLOR 15, 3: PRINT STRING$(80, " ")

ddl = (80 - LEN(mas$(cur, 2))) / 2

LOCATE 1, 1: COLOR 15, 3: PRINT STRING$(ddl, " "); mas$(cur, 2)

COLOR 7, 0

RETURN

final:

rez1$ = mas$(cur, 1)

rez2$ = mas$(cur, 2)

ERASE mas$

RETURN

dopoln:

CLS

LOCATE 10, 20: COLOR 7, 0: PRINT "Добавление новой темы в меню"

LOCATE 12, 10: COLOR 7, 0: PRINT "Для отмены нажмите <Esc> или <F3> для продолжения"

mmm:

kbd$ = INKEY$

SELECT CASE kbd$

CASE CHR$(0) + CHR$(61): GOSUB pop

CASE CHR$(27): CLS: GOTO rmp

END SELECT

GOTO mmm

pop:

CLS

LOCATE 10, 10: COLOR 7, 0

PRINT "Введите название новой темы"

LOCATE 12, 10

PRINT "Введите имя файла"

COLOR 0, 7

LOCATE 10, 40: PRINT STRING$(31, " ")

LOCATE 12, 40: PRINT STRING$(31, " ")

LOCATE 10, 40: INPUT "", a1$

LOCATE 12, 40: INPUT "", a2$

ERASE mas$

CLS

OPEN baz$ FOR APPEND AS #1

PRINT #1, a1$

PRINT #1, a2$

CLOSE #1

GOTO rmp

 

Приложение №2

Файл - vector1.bas

 

REM СУММА ВЕКТОРОВ

'Константы

speed = 800      'Скорость

FILEHLP$ = "vector.hlp"

filerez$ = "vector.rez"

oshibka = 0      'Общее количество ошибок

k = 10           'Длина пера вектора

k1 = 3           'Ширина пера вектора

radius = 2       'Радиус начала вектора

zakr = 1         'Закраска начала вектора

zakrstr = 1      'Закраска стрелки вектора

c = 12           'Цвет стрелки - курсора

curx = 0: cury = 0 'Установка начальниых координат положения стрелки

DIM colora(10)

DIM slovo$(5)

DIM zapusk$(18)

 

SCREEN 9,, 0, 0

OPEN filerez$ FOR APPEND AS #3

PRINT #3, DATE$; " СТАРТ ПРОГРАММЫ < СЛОЖЕНИЕ ВЕКТОРОВ > - "; TIME$;

GOSUB coord     'Построение координатной плоскости

GOSUB zapusk    'Страничка с заданиями

FOR shag = 1 TO 10

PRINT #3,: PRINT #3, "Задание - "; shag

glupo = 0

GOSUB coord     'Построение координатной плоскости

p = 1: GOSUB slov

FOR ccc = 10 TO 13 STEP 3

GOSUB telo

IF ccc = 10 THEN abx = curx - curoldx: aby = cury - curoldy ELSE cdx = curx - curoldx: cdy = cury - curoldy

NEXT ccc

PRINT #3, "AB("; abx; ","; aby; ")"; TAB(15); "; CD("; cdx; ","; cdy; ")"; ";"; TAB(34); "m("; cdx + abx; ", "; cdy + aby; ")";

GOSUB analis

NEXT shag

GOSUB coord

LOCATE 10, 53: PRINT "Вы допустили "; oshibka; " ошибок"

PRINT #3,

PRINT #3, "Количество допущенных ошибок - "; oshibka

PRINT #3,

CLOSE #3

DO WHILE INKEY$ = "": LOOP

GOTO alis

 

telo:

GOSUB preobr:

GOSUB zapomin   ' Запоминает

GOSUB strelka   ' Рисует стрелку

GOSUB vibor     '

GOSUB oldstrelka ' Закрашивает место, где была стрелка

IF fl = 2 THEN fl = 0: RETURN

GOTO telo

 

vibor:

flag = 0

kbd$ = INKEY$

SELECT CASE kbd$

CASE CHR$(0) + "H": IF cury < 10 THEN cury = cury + 1: flag = 1

CASE CHR$(0) + "P": IF cury > -10 THEN cury = cury - 1: flag = 1

CASE CHR$(0) + "K": IF curx > -11 THEN curx = curx - 1: flag = 1

CASE CHR$(0) + "M": IF curx < 11 THEN curx = curx + 1: flag = 1

CASE CHR$(0) + CHR$(59): GOSUB reklama

CASE CHR$(32): GOSUB final: IF fl = 2 THEN RETURN

CASE CHR$(27): GOSUB vihod

END SELECT

IF flag = 0 THEN GOTO vibor

kx = x: ky = y

GOSUB preobr

RETURN

 

strelka:

'==== x y c ============ Рисует стрелку ========

PSET (x, y), c

DRAW "r6g2f4g2h4g2u6"

PAINT (x + 1, y + 1), c

PSET (x, y), 15

DRAW "r6g2f4g2"

RETURN

 

zapomin:

'==== x y ============ zap(9,9) ========

DIM zap(9, 9)

FOR i = 1 TO 9

FOR j = 1 TO 9

zap(i, j) = POINT(i + x - 1, j + y - 1)

NEXT j

NEXT i

RETURN

 

oldstrelka:

'==== kx ky zap(9,9) ==== Рисует ====

FOR i = 1 TO 9

FOR j = 1 TO 9

PSET (i + kx - 1, j + ky - 1), zap(i, j)

NEXT j

NEXT i

ERASE zap

RETURN

 

preobr:

x = curx * 16 + 203

y = 160 - cury * 14

RETURN

 

final:

kx = x: ky = y: GOSUB oldstrelka

IF fl = 1 THEN x2 = x: y2 = y: GOSUB strvect: IF ccc = 10 THEN p = 2: GOSUB slov ELSE p = 5: GOSUB slov

IF fl = 0 THEN curoldx = curx: curoldy = cury: x1 = x: y1 = y: CIRCLE (x, y), radius, ccc: IF zakr = 1 THEN PAINT (x, y), ccc

IF ccc = 10 AND fl = 0 THEN p = 3: GOSUB slov

IF ccc = 13 AND fl = 0 THEN p = 4: GOSUB slov

IF ccc = 14 AND fl = 0 THEN p = 6: GOSUB slov

fl = fl + 1

GOSUB zapomin: GOSUB strelka: RETURN

 

coord:

COLOR 15: CLS

'LINE (0, 0)-(639, 349), 15, B

LINE (10, 10)-(395, 311), 15, B

LINE (10, 10)-(394, 310), 7, B

LINE (400, 10)-(629, 311), 15, B

LINE (400, 10)-(628, 310), 7, B

FOR g = 27 TO 380 STEP 16

LINE (g, 15)-(g, 305), 8, B

NEXT g

FOR g = 20 TO 300 STEP 14

LINE (19, g)-(387, g), 8, B

NEXT g

FOR g = -10 TO 10 STEP 2

LOCATE 13, g * 2 + 25

IF g <> 0 THEN PRINT g

NEXT g

FOR g = -10 TO 10 STEP 2

LOCATE 12 - g, 24

PRINT g

NEXT g

LINE (19, 160)-(387, 160), 7, B

LINE (384, 158)-(387, 160), 7

LINE (384, 162)-(387, 160), 7

LINE (203, 15)-(203, 305), 7, B

LINE (200, 18)-(203, 15), 7

LINE (206, 18)-(203, 15), 7

LOCATE 2, 28

PRINT "y"

LOCATE 11, 49

PRINT "x"

shar:

FOR c = 1 TO 10

CIRCLE (405 + c * 20, 41), 7, 15

LINE (405 + c * 20, 38)-(410 + c * 20, 31), 15

PAINT (405 + c * 20, 39), colora(c), 15

NEXT c

RETURN

 

strvect:

dx = SQR((x2 - x1) ^ 2)

dy = SQR((y2 - y1) ^ 2)

df = SQR((dx * dx) + (dy * dy))

IF df = 0 THEN df = 1

dsx = k * dx / df

dsy = k * dy / df

dxx = k1 * dy / df

dyy = k1 * dx / df

IF x1 < x2 THEN x3 = x2 - dsx: x4 = x2 - dsx / 2 ELSE x3 = x2 + dsx: x4 = x2 + dsx / 2

IF y1 < y2 THEN y3 = y2 - dsy: y4 = y2 - dsy / 2 ELSE y3 = y2 + dsy: y4 = y2 + dsy / 2

IF SGN(x1 - x2) = SGN(y1 - y2) THEN x31 = x3 - dxx: y31 = y3 + dyy: x32 = x3 + dxx: y32 = y3 - dyy

IF SGN(x1 - x2) * (-1) = SGN(y1 - y2) THEN x31 = x3 + dxx: y31 = y3 + dyy: x32 = x3 - dxx: y32 = y3 - dyy

IF SGN(x1 - x2) = 0 OR SGN(y1 - y2) = 0 THEN x31 = x3 - dxx: y31 = y3 - dyy: x32 = x3 + dxx: y32 = y3 + dyy

LINE (x31, y31)-(x2, y2), ccc

LINE (x32, y32)-(x2, y2), ccc

IF zakrstr = 1 THEN LINE (x32, y32)-(x31, y31), ccc: PAINT (x4, y4), ccc

LINE (x1, y1)-(x2, y2), ccc

RETURN

 

reklama:

SCREEN 9,, 1, 1

COLOR 7, 0

OPEN FILEHLP$ FOR INPUT AS #1

S = 0

DO

ON ERROR GOTO 0

LINE INPUT #1, stran$

S = S + 1

LOOP UNTIL EOF(1)

CLOSE #1

IF FIX(S / 18) >= (S / 18) THEN KS = FIX(S / 18) ELSE KS = FIX(S / 18) + 1

DIM stran$(S)

OPEN FILEHLP$ FOR INPUT AS #1

FOR i = 1 TO S

ON ERROR GOTO 0

LINE INPUT #1, stran$(i)

 

NEXT i

CLOSE #1

NS = 1

GOSUB stran

obrabotka:

a$ = INKEY$

IF a$ = CHR$(0) + CHR$(73) THEN NS = NS - 1: GOSUB stran

IF a$ = CHR$(0) + CHR$(81) THEN NS = NS + 1: GOSUB stran

IF a$ = CHR$(27) THEN ERASE stran$: SCREEN 9,, 0, 0: RETURN

GOTO obrabotka

stran:

IF NS < 1 THEN NS = 1: RETURN

IF NS > KS THEN NS = KS: RETURN

n = 18 * NS

LOCATE 1, 1

PRINT "г"; STRING$(64, "="); "T============="

PRINT "¦"; STRING$(15, " ");: COLOR 15, 0: PRINT "ИНФОРМАЦИОННО - СПРАВОЧНАЯ СИСТЕМА";: COLOR 7, 0: PRINT STRING$(15, " ");

IF NS < 10 THEN PRINT "¦ Страница "; NS; "¦" ELSE PRINT "¦ Страница"; NS; "¦"

PRINT "¦"; STRING$(64, " "); "L=============¦"

FOR i = n - 17 TO n

IF i > S THEN PRINT "¦"; STRING$(78, " "); "¦" ELSE PRINT "¦ "; stran$(i); STRING$((76 - LEN(stran$(i))), " "); "¦"

NEXT i

PRINT "L"; STRING$(78, "="); "-"

'COLOR 1, 7:

PRINT " Выход - Esc ";

'IF NS = 1 THEN COLOR 8, 7 ELSE COLOR 1, 7

PRINT " Предыдущая страница - PageUp ";

'IF NS = KS THEN COLOR 8, 7 ELSE COLOR 1, 7

PRINT " Следующая страница - PageDown "

COLOR 7, 0

RETURN

 

analis:

PRINT #3,

PRINT #3, "Варианты ответов ученика:";

ccc = 10

COLOR ccc

LOCATE 9, 58: PRINT "__"

LOCATE 10, 58: PRINT "AB (;)"

PRINT #3,

PRINT #3, "координата x вектора AB ";

vectx1:

p = 11: GOSUB slov

mm = 3: nx = 10: ny = 63

l$ = "+-1234567890"

m$ = "": m = 0

GOSUB napis

PRINT #3, VAL(m$);

IF abx <> VAL(m$) THEN GOSUB glupo: GOTO vectx1

 

PRINT #3,

PRINT #3, "координата y вектора AB ";

vecty1:

p = 12: GOSUB slov

mm = 3: nx = 10: ny = 69

l$ = "+-1234567890"

m$ = "": m = 0

GOSUB napis

PRINT #3, VAL(m$);

IF aby <> VAL(m$) THEN GOSUB glupo: GOTO vecty1

ccc = 13

COLOR ccc

LOCATE 11, 58: PRINT "__"

LOCATE 12, 58: PRINT "CD (;)"

PRINT #3,

PRINT #3, "координата x вектора CD ";

vectx2:

p = 13: GOSUB slov

mm = 3: nx = 12: ny = 63

l$ = "+-1234567890"

m$ = "": m = 0

GOSUB napis

PRINT #3, VAL(m$);

IF cdx <> VAL(m$) THEN GOSUB glupo: GOTO vectx2

 

PRINT #3,

PRINT #3, "координата y вектора CD ";

vecty2:

p = 14: GOSUB slov

mm = 3: nx = 12: ny = 69

l$ = "+-1234567890"

m$ = "": m = 0

GOSUB napis

PRINT #3, VAL(m$);

IF cdy <> VAL(m$) THEN GOSUB glupo: GOTO vecty2

ccc = 14

COLOR ccc

LOCATE 13, 53: PRINT "__ __ _"

LOCATE 14, 53: PRINT "AB+CD=m (;)"

PRINT #3,

PRINT #3, "координата x вектора m ";

vectx3:

p = 15: GOSUB slov

mm = 3: nx = 14: ny = 63

l$ = "+-1234567890"

m$ = "": m = 0

GOSUB napis

PRINT #3, VAL(m$);

IF cdx + abx <> VAL(m$) THEN GOSUB glupo: GOTO vectx3

PRINT #3,

PRINT #3, "координата y вектора m ";

vecty3:

p = 16: GOSUB slov

mm = 3: nx = 14: ny = 69

l$ = "+-1234567890"

m$ = "": m = 0

GOSUB napis

PRINT #3, VAL(m$);

IF cdy + aby <> VAL(m$) THEN GOSUB glupo: GOTO vecty3

ccc = 14: p = 5: GOSUB slov

vectm:

GOSUB telo

'Обработка ошибки правильности построения вектора m

mmx = curx - curoldx: mmy = cury - curoldy

IF mmx <> abx + cdx OR mmy <> aby + cdy THEN GOSUB glupo: PRINT #3,: PRINT #3, "Построил вектор m("; mmx; ","; mmy; ")";: CIRCLE (x1, y1), radius, 12: ccccc = ccc: ccc = 12: GOSUB strvect: ccc = ccccc: GOTO vectm

p = 20: GOSUB slov

IF glupo = 0 THEN colora(shag) = 4: coob$ = "    Нет ошибок   ": GOSUB shar

IF glupo = 1 THEN colora(shag) = 14: coob$ = "   Одна ошибка   ": GOSUB shar

IF glupo = 2 THEN colora(shag) = 2: coob$ = "    Две ошибки!  ": GOSUB shar

IF glupo = 3 THEN colora(shag) = 9: coob$ = "    Три ошибки!  ": GOSUB shar

IF glupo > 3 THEN colora(shag) = 15: coob$ = " Много ошибок!!! ": GOSUB shar

oshibka = oshibka + glupo

glupo = 0

COLOR colora(shag): LOCATE 20, 52: PRINT coob$: COLOR ccc

DO WHILE INKEY$ = "": LOOP

RETURN

 

napis:

LOCATE nx, ny: PRINT STRING$(mm, " ")

napis1:

k$ = ""

DO WHILE k$ = ""

LOCATE nx, ny: PRINT CHR$(95)

k$ = INKEY$

IF k$ = CHR$(0) + CHR$(59) THEN GOSUB reklama

LOOP

k = ASC(k$)

IF k = 13 AND m <> 0 THEN LOCATE nx, ny: PRINT " ": RETURN

IF k = 27 THEN GOSUB vihod

IF k = 8 AND m <> 0 THEN m = m - 1: m$ = LEFT$(m$, m): LOCATE nx, ny: ny = ny - 1: PRINT " ": GOTO napis1

IF INSTR(1, l$, k$) = 0 OR m = mm THEN GOTO napis1

m = m + 1:

m$ = m$ + k$: LOCATE nx, ny: PRINT k$: ny = ny + 1

GOTO napis1

 

vihod:

vih$ = ""

SCREEN 9,, 1, 1

CLS

LOCATE 10, 10

PRINT "Выйти из программы - <Esc>"

DO WHILE vih$ = ""

vih$ = INKEY$

IF vih$ = CHR$(27) THEN CLS: PRINT #3, "Выход из программы по желанию пользователя - "; TIME$: PRINT #3,: CLOSE #3: GOTO alis

LOOP

SCREEN 9,, 0, 0

RETURN

alis:

CLS

LOCATE 10, 30: PRINT "GOOD BYE!!!"

DO WHILE INKEY$ = "": LOOP

FOR i = 1 TO 120

LINE (i + 200, 140)-(i + 240, 120), 0

SOUND i * 3 + 1100,.05

FOR j = 1 TO speed: NEXT j

NEXT i

SYSTEM

 

 

slov:

COLOR 15

IF p < 10 THEN slovo$(1) = " Перемещай стрелку по ": slovo$(2) = " координатной плоскости ": slovo$(3) = "пользуясь клавишами " + CHR$(27) + CHR$(24) + CHR$(25) + "->": slovo$(4) = " Клавишей <ПРОБЕЛ> укажи "

IF p = 1 THEN slovo$(5) = " начало вектора AB "

IF p = 2 THEN slovo$(5) = " начало вектора CD "

IF p = 3 THEN slovo$(5) = " конец вектора AB "

IF p = 4 THEN slovo$(5) = " конец вектора CD "

IF p = 5 THEN slovo$(5) = " начало вектора m "

IF p = 6 THEN slovo$(5) = " конец вектора m  "

IF p > 10 THEN slovo$(1) = " Введи с клавиатуры ": slovo$(3) = " и нажми <Enter> ": slovo$(4) = "  если ошибся  ": slovo$(5) = "  нажми <==  "

IF p = 11 THEN slovo$(2) = " координату x вектора AB "

IF p = 12 THEN slovo$(2) = " координату y вектора AB "

IF p = 13 THEN slovo$(2) = " координату x вектора CD "

IF p = 14 THEN slovo$(2) = " координату y вектора CD "

IF p = 15 THEN slovo$(2) = " координату x вектора m "

IF p = 16 THEN slovo$(2) = " координату y вектора m "

IF p = 20 THEN FOR cl = 1 TO 5: slovo$(cl) = "                     ": NEXT cl

LINE (403, 235)-(626, 309), 15, B

LINE (403, 235)-(625, 308), 7, B

PAINT (450, 240), 0, 7

FOR lo = 18 TO 22

LOCATE lo, 52: PRINT slovo$(lo - 17)

NEXT lo

LOCATE 6, 52: PRINT "<F1>-Помощь <Esc>-Выход"

LINE (403, 65)-(626, 89), 15, B

LINE (403, 65)-(625, 88), 7, B

COLOR ccc

RETURN

 

zapusk:

zapusk$(1) = " СЛОЖЕНИЕ ВЕКТОРОВ "

zapusk$(2) = "                     "

zapusk$(3) = " Тебе предстоит:    "

zapusk$(4) = " выполнить 10 заданий "

zapusk$(5) = "                     "

zapusk$(6) = " В каждом задании нужно: "

zapusk$(7) = "1 - построить на     "

zapusk$(8) = " координатной плоскости "

zapusk$(9) = " два вектора, указав "

zapusk$(10) = " их начало и конец  "

zapusk$(11) = "2 - ввести их координаты "

zapusk$(12) = "3 - сложить построенные "

zapusk$(13) = " векторы и ввести   "

zapusk$(14) = " координаты вектора суммы"

zapusk$(15) = "4 - построить вектор суммы"

zapusk$(16) = " указав начало вектора "

zapusk$(17) = " в произвольной точке "

zapusk$(18) = "                     "

FOR ii = 1 TO 26

FOR ki = speed TO speed * 2: BEEP: NEXT ki

FOR ji = 1 TO 18

LOCATE ji + 4, 51 + ii

PRINT MID$(zapusk$(ji), ii, 1)

NEXT ji

NEXT ii

DO WHILE INKEY$ = "": LOOP

FOR ii = 26 TO 1 STEP -1

FOR ki = speed TO speed * 2: BEEP: NEXT ki

FOR ji = 1 TO 18

LOCATE ji + 4, 51 + ii

PRINT " "

NEXT ji

NEXT ii

RETURN

 

glupo:

glupo = glupo + 1

FOR clor = 15 TO 0 STEP -1

PLAY "n60l20"

COLOR clor

LOCATE 16, 53: PRINT "ОШИБКА! ПОВТОРИТЕ ВВОД"

NEXT clor

COLOR ccc

RETURN

 

Приложение №3

Файл - vector2.bas

 

REM РАЗНОСТЬ ВЕКТОРОВ

'Константы

speed = 800      'Скорость

FILEHLP$ = "vector.hlp"

filerez$ = "vector.rez"

oshibka = 0      'Общее количество ошибок

k = 10           'Длина пера вектора

k1 = 3           'Ширина пера вектора

radius = 2       'Радиус начала вектора

zakr = 1         'Закраска начала вектора

zakrstr = 1      'Закраска стрелки вектора

c = 12           'Цвет стрелки - курсора

curx = 0: cury = 0 'Установка начальниых координат положения стрелки

DIM colora(10)

DIM slovo$(5)

DIM zapusk$(18)

 

SCREEN 9,, 0, 0

OPEN filerez$ FOR APPEND AS #3

PRINT #3, DATE$; " СТАРТ ПРОГРАММЫ < РАЗНОСТЬ ВЕКТОРОВ > - "; TIME$;

GOSUB coord     'Построение координатной плоскости

GOSUB zapusk    'Страничка с заданиями

FOR shag = 1 TO 10

PRINT #3,: PRINT #3, "Задание - "; shag

glupo = 0

GOSUB coord     'Построение координатной плоскости

p = 1: GOSUB slov

FOR ccc = 10 TO 13 STEP 3

GOSUB telo

IF ccc = 10 THEN abx = curx - curoldx: aby = cury - curoldy ELSE cdx = curx - curoldx: cdy = cury - curoldy

NEXT ccc

PRINT #3, "AB("; abx; ","; aby; ")"; TAB(15); "; CD("; cdx; ","; cdy; ")"; ";"; TAB(34); "m("; cdx - abx; ", "; cdy - aby; ")";

GOSUB analis

NEXT shag

GOSUB coord

LOCATE 10, 53: PRINT "Вы допустили "; oshibka; " ошибок"

PRINT #3,

PRINT #3, "Количество допущенных ошибок - "; oshibka

PRINT #3,

CLOSE #3

DO WHILE INKEY$ = "": LOOP

GOTO alis

 

telo:

GOSUB preobr:

GOSUB zapomin   ' Запоминает

GOSUB strelka   ' Рисует стрелку

GOSUB vibor     '

GOSUB oldstrelka ' Закрашивает место, где была стрелка

IF fl = 2 THEN fl = 0: RETURN

GOTO telo

 

vibor:

flag = 0

kbd$ = INKEY$

SELECT CASE kbd$

CASE CHR$(0) + "H": IF cury < 10 THEN cury = cury + 1: flag = 1

CASE CHR$(0) + "P": IF cury > -10 THEN cury = cury - 1: flag = 1

CASE CHR$(0) + "K": IF curx > -11 THEN curx = curx - 1: flag = 1

CASE CHR$(0) + "M": IF curx < 11 THEN curx = curx + 1: flag = 1

CASE CHR$(0) + CHR$(59): GOSUB reklama

CASE CHR$(32): GOSUB final: IF fl = 2 THEN RETURN

CASE CHR$(27): GOSUB vihod

END SELECT

IF flag = 0 THEN GOTO vibor

kx = x: ky = y

GOSUB preobr

RETURN

 

strelka:

'==== x y c ============ Рисует стрелку ========

PSET (x, y), c

DRAW "r6g2f4g2h4g2u6"

PAINT (x + 1, y + 1), c

PSET (x, y), 15

DRAW "r6g2f4g2"

RETURN

 

zapomin:

'==== x y ============ zap(9,9) ========

DIM zap(9, 9)

FOR i = 1 TO 9

FOR j = 1 TO 9

zap(i, j) = POINT(i + x - 1, j + y - 1)

NEXT j

NEXT i

RETURN

 

oldstrelka:

'==== kx ky zap(9,9) ==== Рисует ====

FOR i = 1 TO 9

FOR j = 1 TO 9

PSET (i + kx - 1, j + ky - 1), zap(i, j)

NEXT j

NEXT i

ERASE zap

RETURN

 

preobr:

x = curx * 16 + 203

y = 160 - cury * 14

RETURN

 

final:

kx = x: ky = y: GOSUB oldstrelka

IF fl = 1 THEN x2 = x: y2 = y: GOSUB strvect: IF ccc = 10 THEN p = 2: GOSUB slov ELSE p = 5: GOSUB slov

IF fl = 0 THEN curoldx = curx: curoldy = cury: x1 = x: y1 = y: CIRCLE (x, y), radius, ccc: IF zakr = 1 THEN PAINT (x, y), ccc

IF ccc = 10 AND fl = 0 THEN p = 3: GOSUB slov

IF ccc = 13 AND fl = 0 THEN p = 4: GOSUB slov

IF ccc = 14 AND fl = 0 THEN p = 6: GOSUB slov

fl = fl + 1

GOSUB zapomin: GOSUB strelka: RETURN

 

coord:

COLOR 15: CLS

'LINE (0, 0)-(639, 349), 15, B

LINE (10, 10)-(395, 311), 15, B

LINE (10, 10)-(394, 310), 7, B

LINE (400, 10)-(629, 311), 15, B

LINE (400, 10)-(628, 310), 7, B

FOR g = 27 TO 380 STEP 16

LINE (g, 15)-(g, 305), 8, B

NEXT g

FOR g = 20 TO 300 STEP 14

LINE (19, g)-(387, g), 8, B

NEXT g

FOR g = -10 TO 10 STEP 2

LOCATE 13, g * 2 + 25

IF g <> 0 THEN PRINT g

NEXT g

FOR g = -10 TO 10 STEP 2

LOCATE 12 - g, 24

PRINT g

NEXT g

LINE (19, 160)-(387, 160), 7, B

LINE (384, 158)-(387, 160), 7

LINE (384, 162)-(387, 160), 7

LINE (203, 15)-(203, 305), 7, B

LINE (200, 18)-(203, 15), 7

LINE (206, 18)-(203, 15), 7

LOCATE 2, 28

PRINT "y"

LOCATE 11, 49

PRINT "x"

shar:

FOR c = 1 TO 10

CIRCLE (405 + c * 20, 41), 7, 15

LINE (405 + c * 20, 38)-(410 + c * 20, 31), 15

PAINT (405 + c * 20, 39), colora(c), 15

NEXT c

RETURN

 

strvect:

dx = SQR((x2 - x1) ^ 2)

dy = SQR((y2 - y1) ^ 2)

df = SQR((dx * dx) + (dy * dy))

IF df = 0 THEN df = 1

dsx = k * dx / df

dsy = k * dy / df

dxx = k1 * dy / df

dyy = k1 * dx / df

IF x1 < x2 THEN x3 = x2 - dsx: x4 = x2 - dsx / 2 ELSE x3 = x2 + dsx: x4 = x2 + dsx / 2

IF y1 < y2 THEN y3 = y2 - dsy: y4 = y2 - dsy / 2 ELSE y3 = y2 + dsy: y4 = y2 + dsy / 2

IF SGN(x1 - x2) = SGN(y1 - y2) THEN x31 = x3 - dxx: y31 = y3 + dyy: x32 = x3 + dxx: y32 = y3 - dyy

IF SGN(x1 - x2) * (-1) = SGN(y1 - y2) THEN x31 = x3 + dxx: y31 = y3 + dyy: x32 = x3 - dxx: y32 = y3 - dyy

IF SGN(x1 - x2) = 0 OR SGN(y1 - y2) = 0 THEN x31 = x3 - dxx: y31 = y3 - dyy: x32 = x3 + dxx: y32 = y3 + dyy

LINE (x31, y31)-(x2, y2), ccc

LINE (x32, y32)-(x2, y2), ccc

IF zakrstr = 1 THEN LINE (x32, y32)-(x31, y31), ccc: PAINT (x4, y4), ccc

LINE (x1, y1)-(x2, y2), ccc

RETURN

 

reklama:

SCREEN 9,, 1, 1

COLOR 7, 0

OPEN FILEHLP$ FOR INPUT AS #1

S = 0

DO

ON ERROR GOTO 0

LINE INPUT #1, stran$

S = S + 1

LOOP UNTIL EOF(1)

CLOSE #1

IF FIX(S / 18) >= (S / 18) THEN KS = FIX(S / 18) ELSE KS = FIX(S / 18) + 1

DIM stran$(S)

OPEN FILEHLP$ FOR INPUT AS #1

FOR i = 1 TO S

ON ERROR GOTO 0

LINE INPUT #1, stran$(i)

 

NEXT i

CLOSE #1

NS = 1

GOSUB stran

obrabotka:

a$ = INKEY$

IF a$ = CHR$(0) + CHR$(73) THEN NS = NS - 1: GOSUB stran

IF a$ = CHR$(0) + CHR$(81) THEN NS = NS + 1: GOSUB stran

IF a$ = CHR$(27) THEN ERASE stran$: SCREEN 9,, 0, 0: RETURN

GOTO obrabotka

stran:

IF NS < 1 THEN NS = 1: RETURN

IF NS > KS THEN NS = KS: RETURN

n = 18 * NS

LOCATE 1, 1

PRINT "г"; STRING$(64, "="); "T============="

PRINT "¦"; STRING$(15, " ");: COLOR 15, 0: PRINT "ИНФОРМАЦИОННО - СПРАВОЧНАЯ СИСТЕМА";: COLOR 7, 0: PRINT STRING$(15, " ");

IF NS < 10 THEN PRINT "¦ Страница "; NS; "¦" ELSE PRINT "¦ Страница"; NS; "¦"

PRINT "¦"; STRING$(64, " "); "L=============¦"

FOR i = n - 17 TO n

IF i > S THEN PRINT "¦"; STRING$(78, " "); "¦" ELSE PRINT "¦ "; stran$(i); STRING$((76 - LEN(stran$(i))), " "); "¦"

NEXT i

PRINT "L"; STRING$(78, "="); "-"

'COLOR 1, 7:

PRINT " Выход - Esc ";

'IF NS = 1 THEN COLOR 8, 7 ELSE COLOR 1, 7

PRINT " Предыдущая страница - PageUp ";

'IF NS = KS THEN COLOR 8, 7 ELSE COLOR 1, 7

PRINT " Следующая страница - PageDown "

COLOR 7, 0

RETURN

 

analis:

PRINT #3,

PRINT #3, "Варианты ответов ученика:";

ccc = 10

COLOR ccc

LOCATE 9, 58: PRINT "__"

LOCATE 10, 58: PRINT "AB (;)"

PRINT #3,

PRINT #3, "координата x вектора AB ";

vectx1:

p = 11: GOSUB slov

mm = 3: nx = 10: ny = 63

l$ = "+-1234567890"

m$ = "": m = 0

GOSUB napis

PRINT #3, VAL(m$);

IF abx <> VAL(m$) THEN GOSUB glupo: GOTO vectx1

 

PRINT #3,

PRINT #3, "координата y вектора AB ";

vecty1:

p = 12: GOSUB slov

mm = 3: nx = 10: ny = 69

l$ = "+-1234567890"

m$ = "": m = 0

GOSUB napis

PRINT #3, VAL(m$);

IF aby <> VAL(m$) THEN GOSUB glupo: GOTO vecty1

 

ccc = 13

COLOR ccc

LOCATE 11, 58: PRINT "__"

LOCATE 12, 58: PRINT "CD (;)"

PRINT #3,

PRINT #3, "координата x вектора CD ";

vectx2:

p = 13: GOSUB slov

mm = 3: nx = 12: ny = 63

l$ = "+-1234567890"

m$ = "": m = 0

GOSUB napis

PRINT #3, VAL(m$);

IF cdx <> VAL(m$) THEN GOSUB glupo: GOTO vectx2

 

PRINT #3,

PRINT #3, "координата y вектора CD ";

vecty2:

p = 14: GOSUB slov

mm = 3: nx = 12: ny = 69

l$ = "+-1234567890"

m$ = "": m = 0

GOSUB napis

PRINT #3, VAL(m$);

IF cdy <> VAL(m$) THEN GOSUB glupo: GOTO vecty2

ccc = 14

COLOR ccc

LOCATE 13, 53: PRINT " __ __ _"

LOCATE 14, 53: PRINT " CD-AB=m(;)"

PRINT #3,

PRINT #3, "координата x вектора m ";

vectx3:

p = 15: GOSUB slov

mm = 3: nx = 14: ny = 63

l$ = "+-1234567890"

m$ = "": m = 0

GOSUB napis

PRINT #3, VAL(m$);

IF cdx - abx <> VAL(m$) THEN GOSUB glupo: GOTO vectx3

PRINT #3,

PRINT #3, "координата y вектора m ";

vecty3:

p = 16: GOSUB slov

mm = 3: nx = 14: ny = 69

l$ = "+-1234567890"

m$ = "": m = 0

GOSUB napis

PRINT #3, VAL(m$);

IF cdy - aby <> VAL(m$) THEN GOSUB glupo: GOTO vecty3

ccc = 14: p = 5: GOSUB slov

vectm:

GOSUB telo

'Обработка ошибки правильности построения вектора m

mmx = curx - curoldx: mmy = cury - curoldy

IF mmx <> cdx - abx OR mmy <> cdy - aby THEN GOSUB glupo: PRINT #3,: PRINT #3, "Построил вектор m("; mmx; ","; mmy; ")";: CIRCLE (x1, y1), radius, 12: ccccc = ccc: ccc = 12: GOSUB strvect: ccc = ccccc: GOTO vectm

p = 20: GOSUB slov

IF glupo = 0 THEN colora(shag) = 4: coob$ = "    Нет ошибок   ": GOSUB shar

IF glupo = 1 THEN colora(shag) = 14: coob$ = "   Одна ошибка   ": GOSUB shar

IF glupo = 2 THEN colora(shag) = 2: coob$ = "    Две ошибки!  ": GOSUB shar

IF glupo = 3 THEN colora(shag) = 9: coob$ = "    Три ошибки!  ": GOSUB shar

IF glupo > 3 THEN colora(shag) = 15: coob$ = " Много ошибок!!! ": GOSUB shar

oshibka = oshibka + glupo

glupo = 0

COLOR colora(shag): LOCATE 20, 52: PRINT coob$: COLOR ccc

DO WHILE INKEY$ = "": LOOP

RETURN

 

napis:

LOCATE nx, ny: PRINT STRING$(mm, " ")

napis1:

k$ = ""

DO WHILE k$ = ""

LOCATE nx, ny: PRINT CHR$(95)

k$ = INKEY$

IF k$ = CHR$(0) + CHR$(59) THEN GOSUB reklama

LOOP

k = ASC(k$)

IF k = 13 AND m <> 0 THEN LOCATE nx, ny: PRINT " ": RETURN

IF k = 27 THEN GOSUB vihod

IF k = 8 AND m <> 0 THEN m = m - 1: m$ = LEFT$(m$, m): LOCATE nx, ny: ny = ny - 1: PRINT " ": GOTO napis1

IF INSTR(1, l$, k$) = 0 OR m = mm THEN GOTO napis1

m = m + 1:

m$ = m$ + k$: LOCATE nx, ny: PRINT k$: ny = ny + 1

GOTO napis1

 

vihod:

vih$ = ""

SCREEN 9,, 1, 1

CLS

LOCATE 10, 10

PRINT "Выйти из программы - <Esc>"

DO WHILE vih$ = ""

vih$ = INKEY$

IF vih$ = CHR$(27) THEN CLS: PRINT #3, "Выход из программы по желанию пользователя - "; TIME$: PRINT #3,: CLOSE #3: GOTO alis

LOOP

SCREEN 9,, 0, 0

RETURN

alis:

CLS

LOCATE 10, 30: PRINT "GOOD BYE!!!"

DO WHILE INKEY$ = "": LOOP

FOR i = 1 TO 120

LINE (i + 200, 140)-(i + 240, 120), 0

SOUND i * 3 + 1100,.05

FOR j = 1 TO speed: NEXT j

NEXT i

SYSTEM

 

slov:

COLOR 15

IF p < 10 THEN slovo$(1) = " Перемещай стрелку по ": slovo$(2) = " координатной плоскости ": slovo$(3) = "пользуясь клавишами " + CHR$(27) + CHR$(24) + CHR$(25) + "->": slovo$(4) = " Клавишей <ПРОБЕЛ> укажи "

IF p = 1 THEN slovo$(5) = " начало вектора AB "

IF p = 2 THEN slovo$(5) = " начало вектора CD "

IF p = 3 THEN slovo$(5) = " конец вектора AB "

IF p = 4 THEN slovo$(5) = " конец вектора CD "

IF p = 5 THEN slovo$(5) = " начало вектора m "

IF p = 6 THEN slovo$(5) = " конец вектора m "

IF p > 10 THEN slovo$(1) = " Введи с клавиатуры ": slovo$(3) = " и нажми <Enter> ": slovo$(4) = "  если ошибся  ": slovo$(5) = "  нажми <==  "

IF p = 11 THEN slovo$(2) = " координату x вектора AB "

IF p = 12 THEN slovo$(2) = " координату y вектора AB "

IF p = 13 THEN slovo$(2) = " координату x вектора CD "

IF p = 14 THEN slovo$(2) = " координату y вектора CD "

IF p = 15 THEN slovo$(2) = " координату x вектора m "

IF p = 16 THEN slovo$(2) = " координату y вектора m "

IF p = 20 THEN FOR cl = 1 TO 5: slovo$(cl) = "                     ": NEXT cl

LINE (403, 235)-(626, 309), 15, B

LINE (403, 235)-(625, 308), 7, B

PAINT (450, 240), 0, 7

FOR lo = 18 TO 22

LOCATE lo, 52: PRINT slovo$(lo - 17)

NEXT lo

LOCATE 6, 52: PRINT "<F1>-Помощь <Esc>-Выход"

LINE (403, 65)-(626, 89), 15, B

LINE (403, 65)-(625, 88), 7, B

COLOR ccc

RETURN

 

zapusk:

zapusk$(1) = " РАЗНОСТЬ ВЕКТОРОВ "

zapusk$(2) = "                     "

zapusk$(3) = " Тебе предстоит:    "

zapusk$(4) = " выполнить 10 заданий "

zapusk$(5) = " В каждом задании нужно: "

zapusk$(6) = "1 - построить на     "

zapusk$(7) = " координатной плоскости "

zapusk$(8) = " два вектора, указав "

zapusk$(9) = " их начало и конец  "

zapusk$(10) = "2 - ввести их координаты "

zapusk$(11) = "3 - вычесть из второго "

zapusk$(12) = " вектора первый вектор "

zapusk$(13) = " и ввести координаты "

zapusk$(14) = " вектора разности   "

zapusk$(15) = "4 - построить вектор "

zapusk$(16) = " разности указав начало "

zapusk$(17) = " вектора в произвольной "

zapusk$(18) = " точке              "

FOR ii = 1 TO 26

FOR ki = speed TO speed * 2: BEEP: NEXT ki

FOR ji = 1 TO 18

LOCATE ji + 4, 51 + ii

PRINT MID$(zapusk$(ji), ii, 1)

NEXT ji

NEXT ii

DO WHILE INKEY$ = "": LOOP

FOR ii = 26 TO 1 STEP -1

FOR ki = speed TO speed * 2: BEEP: NEXT ki

FOR ji = 1 TO 18

LOCATE ji + 4, 51 + ii

PRINT " "

NEXT ji

NEXT ii

RETURN

 

glupo:

glupo = glupo + 1

FOR clor = 15 TO 0 STEP -1

PLAY "n60l20"

COLOR clor

LOCATE 16, 53: PRINT "ОШИБКА! ПОВТОРИТЕ ВВОД"

NEXT clor

COLOR ccc

RETURN

 

Приложение №4

Файл - vector3.rez

 

REM УМНОЖЕНИЕ ВЕКТОРА НА ЧИСЛО

'Константы

speed = 800      'Скорость

FILEHLP$ = "vector.hlp"

filerez$ = "vector.rez"

oshibka = 0      'Общее количество ошибок

k = 10           'Длина пера вектора

k1 = 3           'Ширина пера вектора

radius = 2       'Радиус начала вектора

zakr = 1         'Закраска начала вектора

zakrstr = 1      'Закраска стрелки вектора

c = 12           'Цвет стрелки - курсора

curx = 0: cury = 0 'Установка начальниых координат положения стрелки

DIM colora(10)

DIM slovo$(5)

DIM zapusk$(18)

 

SCREEN 9,, 0, 0

OPEN filerez$ FOR APPEND AS #3

PRINT #3, DATE$; " СТАРТ ПРОГРАММЫ < УМНОЖЕНИЕ ВЕКТОРА НА ЧИСЛО > - "; TIME$;

GOSUB coord     'Построение координатной плоскости

GOSUB zapusk    'Страничка с заданиями

FOR shag = 1 TO 10

PRINT #3,: PRINT #3, "Задание - "; shag

glupo = 0

GOSUB coord     'Построение координатной плоскости

p = 1: GOSUB slov

ccc = 10

GOSUB telo

abx = curx - curoldx: aby = cury - curoldy

er: 'Задание числа er

RANDOMIZE TIMER

er = INT(RND(1) * 19) - 9

IF ABS(er * abx) > 20 OR ABS(er * aby) > 22 THEN GOTO er

 

PRINT #3, "AB("; abx; ","; aby; ")"; TAB(15); "Загадано число "; er

GOSUB analis

NEXT shag

GOSUB coord

LOCATE 10, 53: PRINT "Вы допустили "; oshibka; " ошибок"

PRINT #3,

PRINT #3, "Количество допущенных ошибок - "; oshibka

PRINT #3,

CLOSE #3

DO WHILE INKEY$ = "": LOOP

GOTO alis

 

telo:

GOSUB preobr:

GOSUB zapomin   ' Запоминает

GOSUB strelka   ' Рисует стрелку

GOSUB vibor     '

GOSUB oldstrelka ' Закрашивает место, где была стрелка

IF fl = 2 THEN fl = 0: RETURN

GOTO telo

 

vibor:

flag = 0

kbd$ = INKEY$

SELECT CASE kbd$

CASE CHR$(0) + "H": IF cury < 10 THEN cury = cury + 1: flag = 1

CASE CHR$(0) + "P": IF cury > -10 THEN cury = cury - 1: flag = 1

CASE CHR$(0) + "K": IF curx > -11 THEN curx = curx - 1: flag = 1

CASE CHR$(0) + "M": IF curx < 11 THEN curx = curx + 1: flag = 1

CASE CHR$(0) + CHR$(59): GOSUB reklama

CASE CHR$(32): GOSUB final: IF fl = 2 THEN RETURN

CASE CHR$(27): GOSUB vihod

END SELECT

IF flag = 0 THEN GOTO vibor

kx = x: ky = y

GOSUB preobr

RETURN

 

strelka:

'==== x y c ============ Рисует стрелку ========

PSET (x, y), c

DRAW "r6g2f4g2h4g2u6"

PAINT (x + 1, y + 1), c

PSET (x, y), 15

DRAW "r6g2f4g2"

RETURN

 

zapomin:

'==== x y ============ zap(9,9) ========

DIM zap(9, 9)

FOR i = 1 TO 9

FOR j = 1 TO 9

zap(i, j) = POINT(i + x - 1, j + y - 1)

NEXT j

NEXT i

RETURN

 

oldstrelka:

'==== kx ky zap(9,9) ==== Рисует ====

FOR i = 1 TO 9

FOR j = 1 TO 9

PSET (i + kx - 1, j + ky - 1), zap(i, j)

NEXT j

NEXT i

ERASE zap

RETURN

 

preobr:

x = curx * 16 + 203

y = 160 - cury * 14

RETURN

 

final:

kx = x: ky = y: GOSUB oldstrelka

IF fl = 1 THEN x2 = x: y2 = y: GOSUB strvect: IF ccc = 10 THEN p = 2: GOSUB slov ELSE p = 5: GOSUB slov

IF fl = 0 THEN curoldx = curx: curoldy = cury: x1 = x: y1 = y: CIRCLE (x, y), radius, ccc: IF zakr = 1 THEN PAINT (x, y), ccc

IF ccc = 10 AND fl = 0 THEN p = 3: GOSUB slov

'IF ccc = 13 AND fl = 0 THEN p = 4: GOSUB slov

'IF ccc = 14 AND fl = 0 THEN p = 6: GOSUB slov

fl = fl + 1

GOSUB zapomin: GOSUB strelka: RETURN

 

coord:

COLOR 15: CLS

'LINE (0, 0)-(639, 349), 15, B

LINE (10, 10)-(395, 311), 15, B

LINE (10, 10)-(394, 310), 7, B

LINE (400, 10)-(629, 311), 15, B

LINE (400, 10)-(628, 310), 7, B

FOR g = 27 TO 380 STEP 16

LINE (g, 15)-(g, 305), 8, B

NEXT g

FOR g = 20 TO 300 STEP 14

LINE (19, g)-(387, g), 8, B

NEXT g

FOR g = -10 TO 10 STEP 2

LOCATE 13, g * 2 + 25

IF g <> 0 THEN PRINT g

NEXT g

FOR g = -10 TO 10 STEP 2

LOCATE 12 - g, 24

PRINT g

NEXT g

LINE (19, 160)-(387, 160), 7, B

LINE (384, 158)-(387, 160), 7

LINE (384, 162)-(387, 160), 7

LINE (203, 15)-(203, 305), 7, B

LINE (200, 18)-(203, 15), 7

LINE (206, 18)-(203, 15), 7

LOCATE 2, 28

PRINT "y"

LOCATE 11, 49

PRINT "x"

shar:

FOR c = 1 TO 10

CIRCLE (405 + c * 20, 41), 7, 15

LINE (405 + c * 20, 38)-(410 + c * 20, 31), 15

PAINT (405 + c * 20, 39), colora(c), 15

NEXT c

RETURN

 

strvect:

dx = SQR((x2 - x1) ^ 2)

dy = SQR((y2 - y1) ^ 2)

df = SQR((dx * dx) + (dy * dy))

IF df = 0 THEN df = 1

dsx = k * dx / df

dsy = k * dy / df

dxx = k1 * dy / df

dyy = k1 * dx / df

IF x1 < x2 THEN x3 = x2 - dsx: x4 = x2 - dsx / 2 ELSE x3 = x2 + dsx: x4 = x2 + dsx / 2

IF y1 < y2 THEN y3 = y2 - dsy: y4 = y2 - dsy / 2 ELSE y3 = y2 + dsy: y4 = y2 + dsy / 2

IF SGN(x1 - x2) = SGN(y1 - y2) THEN x31 = x3 - dxx: y31 = y3 + dyy: x32 = x3 + dxx: y32 = y3 - dyy

IF SGN(x1 - x2) * (-1) = SGN(y1 - y2) THEN x31 = x3 + dxx: y31 = y3 + dyy: x32 = x3 - dxx: y32 = y3 - dyy

IF SGN(x1 - x2) = 0 OR SGN(y1 - y2) = 0 THEN x31 = x3 - dxx: y31 = y3 - dyy: x32 = x3 + dxx: y32 = y3 + dyy

LINE (x31, y31)-(x2, y2), ccc

LINE (x32, y32)-(x2, y2), ccc

IF zakrstr = 1 THEN LINE (x32, y32)-(x31, y31), ccc: PAINT (x4, y4), ccc

LINE (x1, y1)-(x2, y2), ccc

RETURN

 

reklama:

SCREEN 9,, 1, 1

COLOR 7, 0

OPEN FILEHLP$ FOR INPUT AS #1

S = 0

DO

ON ERROR GOTO 0

LINE INPUT #1, stran$

S = S + 1

LOOP UNTIL EOF(1)

CLOSE #1

IF FIX(S / 18) >= (S / 18) THEN KS = FIX(S / 18) ELSE KS = FIX(S / 18) + 1

DIM stran$(S)

OPEN FILEHLP$ FOR INPUT AS #1

FOR i = 1 TO S

ON ERROR GOTO 0

LINE INPUT #1, stran$(i)

 

NEXT i

CLOSE #1

NS = 1

GOSUB stran

obrabotka:

a$ = INKEY$

IF a$ = CHR$(0) + CHR$(73) THEN NS = NS - 1: GOSUB stran

IF a$ = CHR$(0) + CHR$(81) THEN NS = NS + 1: GOSUB stran

IF a$ = CHR$(27) THEN ERASE stran$: SCREEN 9,, 0, 0: RETURN

GOTO obrabotka

stran:

IF NS < 1 THEN NS = 1: RETURN

IF NS > KS THEN NS = KS: RETURN

n = 18 * NS

LOCATE 1, 1

PRINT "г"; STRING$(64, "="); "T============="

PRINT "¦"; STRING$(15, " ");: COLOR 15, 0: PRINT "ИНФОРМАЦИОННО - СПРАВОЧНАЯ СИСТЕМА";: COLOR 7, 0: PRINT STRING$(15, " ");

IF NS < 10 THEN PRINT "¦ Страница "; NS; "¦" ELSE PRINT "¦ Страница"; NS; "¦"

PRINT "¦"; STRING$(64, " "); "L=============¦"

FOR i = n - 17 TO n

IF i > S THEN PRINT "¦"; STRING$(78, " "); "¦" ELSE PRINT "¦ "; stran$(i); STRING$((76 - LEN(stran$(i))), " "); "¦"

NEXT i

PRINT "L"; STRING$(78, "="); "-"

'COLOR 1, 7:

PRINT " Выход - Esc ";

'IF NS = 1 THEN COLOR 8, 7 ELSE COLOR 1, 7

PRINT " Предыдущая страница - PageUp ";

'IF NS = KS THEN COLOR 8, 7 ELSE COLOR 1, 7

PRINT " Следующая страница - PageDown "

COLOR 7, 0

RETURN

 

analis:

PRINT #3, "Варианты ответов ученика:";

ccc = 10

COLOR ccc

LOCATE 9, 58: PRINT "__"

LOCATE 10, 58: PRINT "AB (;)"

PRINT #3,

PRINT #3, "координата x вектора AB ";

vectx1:

p = 11: GOSUB slov

mm = 3: nx = 10: ny = 63

l$ = "+-1234567890"

m$ = "": m = 0

GOSUB napis

PRINT #3, VAL(m$);

IF abx <> VAL(m$) THEN GOSUB glupo: GOTO vectx1

 

PRINT #3,

PRINT #3, "координата y вектора AB ";

vecty1:

p = 12: GOSUB slov

mm = 3: nx = 10: ny = 69

l$ = "+-1234567890"

m$ = "": m = 0

GOSUB napis

PRINT #3, VAL(m$);

IF aby <> VAL(m$) THEN GOSUB glupo: GOTO vecty1

 

ccc = 14

COLOR ccc

LOCATE 13, 53: PRINT TAB(56); " __ _"

LOCATE 14, 53: PRINT er; TAB(56); "*AB= m(;)"

PRINT #3,

PRINT #3, "координата x вектора m ";

vectx3:

p = 15: GOSUB slov

mm = 3: nx = 14: ny = 64

l$ = "+-1234567890"

m$ = "": m = 0

GOSUB napis

PRINT #3, VAL(m$);

IF er * abx <> VAL(m$) THEN GOSUB glupo: GOTO vectx3

PRINT #3,

PRINT #3, "координата y вектора m ";

vecty3:

p = 16: GOSUB slov

mm = 3: nx = 14: ny = 70

l$ = "+-1234567890"

m$ = "": m = 0

GOSUB napis

PRINT #3, VAL(m$);

IF er * aby <> VAL(m$) THEN GOSUB glupo: GOTO vecty3

ccc = 14: p = 5: GOSUB slov

vectm:

GOSUB telo

'Обработка ошибки правильности построения вектора m

mmx = curx - curoldx: mmy = cury - curoldy

IF mmx <> abx * er OR mmy <> aby * er THEN GOSUB glupo: PRINT #3,: PRINT #3, "Построил вектор m("; mmx; ","; mmy; ")";: CIRCLE (x1, y1), radius, 12: ccccc = ccc: ccc = 12: GOSUB strvect: ccc = ccccc: GOTO vectm

p = 20: GOSUB slov

IF glupo = 0 THEN colora(shag) = 4: coob$ = "    Нет ошибок   ": GOSUB shar

IF glupo = 1 THEN colora(shag) = 14: coob$ = "   Одна ошибка   ": GOSUB shar

IF glupo = 2 THEN colora(shag) = 2: coob$ = "    Две ошибки!  ": GOSUB shar

IF glupo = 3 THEN colora(shag) = 9: coob$ = "      Три ошибки!  ": GOSUB shar

IF glupo > 3 THEN colora(shag) = 15: coob$ = " Много ошибок!!! ": GOSUB shar

oshibka = oshibka + glupo

glupo = 0

COLOR colora(shag): LOCATE 20, 52: PRINT coob$: COLOR ccc

DO WHILE INKEY$ = "": LOOP

RETURN

 

napis:

LOCATE nx, ny: PRINT STRING$(mm, "

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...