Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Informatics.doc
Скачиваний:
6
Добавлен:
21.08.2019
Размер:
1.33 Mб
Скачать

1.12. Сегментирование программы

Если программа достаточно велика, ее можно разбить на части

(сегменты). Бейсик позволяет не держать в оперативной памяти всю

программу, а лишь необходимый в данный момент сегмент, обращаясь

к другому сегменту с помощью оператора CHAIN"Диск: \имя сегмен-

та" (аналогичным образом работает оператор RUN). Общие для сег-ментов данные передаются при этом вызываемому сегменту. Если не-обходимо передать лишь часть данных, можно воспользоваться опе-ратором COMMON ‹ список переменных ›. Например, если в массиве А(n) содержатся коэффициенты многочлена степени n, то отыскание корней можно выполнить либо по формулам для квадратного уравне-ния при n  2, либо по формулам приближенного решения уравнений при n > 2. Пусть квадратное уравнение решает программа "Sqroot", находящаяся на диске А, а более общую задачу - программа "Polуroot" (на том же диске). Разветвление задачи можно осуществить програм-мой:

DEFINT IK

COMMON n, A()

Input n

DIM A(n) AS SINGLE

FOR i = 0 TO n : INPUT A(i) : NEXT

IF n <= 2 THEN

CHAIN"A : \ Sqroot"

ELSE

CHAIN"A : \ Polyroot"

END IF

1.13. Работа с графической информацией

При загрузке системы БЕЙСИК дисплей устанавливается в ал-фавитно - цифровой режим. Для обработки графической информации необходим графический режим, который устанавливается оператором SCREEN N (N - номер режима). Например, при N = 9 на экране раз-мещается 640350 точек в графическом режиме, 8025 символов в ал-фавитно-цифровом режиме, при использовании 16 цветов. При N = 12 размещается соответственно 640480 точек и 8030 символов, разре-шается использовать до 256 цветов (подробности определяются свой-ствами монитора). Перечислим основные функции, используемые при обработке графической информации.

CIRCLE(x,y),R[,c[,,[,S]]] - изображает окружность (или дугу) с цент-

ром в точке (х, у) (счет точек начинается слева направо и сверху

вниз) радиуса R цветом с кодом с,  и  - угловые меры начала

и конца дуги (если изображается не вся окружность), S степень

сжатия (если изображается эллипс или его дуга).

СOLOR [b[,f]] - выбор цвета фона и палитры.

DRAW"‹текстовая информация›"- изображение произвольной лома-

ной в соответствии со строкой информации, где указываются

команды :

Un - движение вверх на n позиций,

Dn - движение вниз на n позиций,

L,R,E,F,G,H соответственно указывают на движение влево, впра-

во на северо-восток, юго-восток, юго-запад, северо-запад.

Mx,y - команда перехода к точке с координатами (х, у).

Префикс В команд движения указывает на перемещение без изо-

бражения линии (просто "перенос пера"), префикс N указыва-

ет на движение с возвратом в исходную точку.

An - разрешает поворот фигуры на n прямых углов,

TAn - разрешает поворот на n градусов (против хода часов),

Сn - устанавливает код n цвета линии,

Pn,m - закрашивает область цветом с кодом n вплоть до грани-

цы цвета с кодом m,

Sn - введение масштабного коэффициента n.

Если в качестве информации используется строка или подстрока како-

го-либо текста, то используется функция VARPTR$ в виде

"X" + VARPTR$("‹ строка ›") (функция передает в качестве параметра

начальный адрес стэка информации в памяти)

LINE(a, b) - (c, d) [,c[,B[F]]] - изображение прямой, соединяющей точ-

ки (a, b) и (c, d), цветом с кодом с. Признак В означает изобра-

жение прямоугольника с вершинами (a, b), (c, d), признак F (вме-

сте с В) закрашивает прямоугольник указанным цветом. Если

предыдущая точка предполагается фиксированной (оператором

LINE или PSET),то первый операнд можно опустить, оператор

LINE принимает сокращенную форму: LINE - (c,d) [,c[,B[F]]].

GET (a,b) - (c,d), A - пересылает экранное содержимое прямоугольника

с вершинами (a,b), (c,d) в ранее определенный массив А.

PUT (x,y), A [,характер] - пересылает графическую информацию из

массива А на экран, начиная с точки (х,у). Характер указывает

взаимодействие информации с экраном : PSET, PRESET, XOR,

OR, AND.

PAINT(x,y),c1,c2 - окрашивает область экрана, содержащую точку

(х,у), цветом с кодом с1 до границы цвета с кодом с2.

PSET(x,y),c - изображается на экране точка (х,у) цветом кода с.

PRESET(x,y) - убирает точку (х,у) с экрана.

POINT(x,y) - возвращает атрибут цвета точки (х,у).

Пример 1. Построим программу для изображения графика функ-ции f(x) = на промежутке [0, 3]:

DEFINT I - N : DEFSNG H, S - Z

FUNCTION f (x AS SINGLE)

v = 3.1415926 : v = 16 / v : q = 1 : s = 0 : n = 0

WHILE ABS(q) > 0.00001 'точность приближения

n = n + 1 : IF n MOD 2 THEN k = -1 ELSE k = 1

q = k * n * sin (2 * n * x) / (4 * n * n - 1) ^ 2 : s = s + q

WEND : f = s * v

END FUNCTION

n = 60: h = 3 / n: xm = 550 / 3 'масштаб по Х

DIM z(n): ym = 0

FOR j = 0 TO n: x = j * h: y = f(x): z(j) = y: y = ABS(y)

IF y > ym THEN ym = y

NEXT : ym = 150 / ym 'масштаб по Y

SCREEN 9 : CLS : c = 3 'установка кода цвета линии

DRAW"bm10,150 nr600nu150d150" 'изображение осей

FOR j = 0 TO n : x = 10 + j * xm : y = 150 – ym * z(j) 'координаты с учетом

IF j = 0 THEN 'масштаба

PSET(x, y), c 'помещаем первую точку

ELSE

LINE - (x, y), c 'добавляем очередную точку линии

END IF

NEXT : END

Пример 2. Составим программу управления движением рисунка по экрану с помощью клавиатуры. В качестве рисунка возьмем изоб-ражение зеленого креста с красной окантовкой. Изменять его положе-ние на экране будем с помощью управляющих стрелок клавиатуры ("вверх", "вниз", "влево", "вправо"). Заметим, что код основных сим-волов клавиатуры занимает один байт, код вспомогательных и управ-ляющих клавиш занимает два байта и его "информационная" часть на-ходится в младшем (правом) байте. Эту часть и будем условно назы-вать кодом управляющего символа. Итак, стрелка "вверх" () имеет код 72, "вниз" () – 80, "влево" () – 75, "вправо" () – 77. Клавиша

выхода "Esc" (основная) имеет код 27.

DEFINT A-B, I-N: DERSTR T

SCREEN 12: CLS: n = 18000

DIM A(n), B(n) 'массивы для хранения рисунка и фона

GET (1, 1) – (120, 180), B 'запомнили фон

DRAW "C9BM50,1R20D50R50D20L50D80L20U80L50U20R50U50BF5P10,9"

GET (1, 1) – (120,180), A: i = 1: j = 1: m = 5 'шаг перемещения

DO: t = "": WHILE t = "": t = INKEY$: WEND 'опрос клавиатуры

IF ASC(t) = 27 THEN END 'выход из программы

k = ASC(RIGHT$(t, 1)): lam = 0: mu = 0: nu = 0

SELECT CASE k

CASE 72, 75, 77, 80: nu = 1 'признак перемещения

CASE 72: IF j > m THEN mu = -m 'вверх

CASE 80: IF j + m < 300 THEN mu = m 'вниз

CASE 75: IF i > m THEN lam = -m 'влево

CASE 77: IF i + m < 500 THEN lam = m 'вправо

END SELECT

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]