Главная страница
Навигация по странице:

  • BASIC-256 может открыть одновременно не более восьми (8) файлов

  • Для доступа к файлу рекомендуется

  • Пример 6.7.1 в книге [2] Теоретические сведения по графики в Basic-256 – см. файл ГРАФИКА_256. Окно вывода графики в Basic-256

  • Команда Формат Описание

  • Этот и последующий примеры изучить Задача (Готовый сложный пример) 1

  • Построение движущихся изображений на экране. С помощью цикла определить траекторию движения фигуры.

  • Лабораторная работа_7_ТА. Для построения движущихся изображений на экране


    Скачать 77.23 Kb.
    НазваниеДля построения движущихся изображений на экране
    Дата26.02.2020
    Размер77.23 Kb.
    Формат файлаdocx
    Имя файлаЛабораторная работа_7_ТА.docx
    ТипЛабораторная работа
    #109976


    Лабораторная работа №7

    Разработка и построение блок-схем алгоритмов с использованием графических возможностей среды программирования BASIC-256

    Цель:

    - научиться использовать графические операторы BASIC-256 для построения движущихся изображений на экране;

    - научиться использовать операторы BASIC-256 для работы с файлами – изучить примеры программ из книги [1].
    В BASIC-256 предусмотрен следующий набор операторов для работы с текстовыми файлами [1]

    Оператор Close — закрывает открытый файл. Если никакой файл не открыт, никаких действий не выполняет. Оператор Eof, eof() — возвращает двоичный флаг (признак, имеющий значения true/false или 1/0). Он сигнализирует о том, что прочитан символ конца файла End Of File (EOF). Чаще всего используется в операторах анализа условий или в циклах с условиями, например, следующего вида: if not eof then … end if; while not eof … end while; do … until eof. Функция eof возвращает истину (true) если достигнут конец файла в процессе чтения и ложь (false) в если ещё есть не прочтённые данные. Если номер_файла не указан используется значение нуль (0).

    Оператор Open file$ — открывает для чтения и записи файл, полное обозначение которого задано строковой переменной file$. Полное обозначение или спецификация файла — это его обозначение в командных строках операционной системы, включающее путь и собственно обозначение файла. Одновременно может быть открыт только один файл. Если файл не существует на указанном в переменной file$ пути, оператор open создает пустой файл с указанным в переменной file$ именем и расширением.

    Open выражение; open (выражение); open номер_файла, выражение

    open (номер_файла, выражение). Открывает указанный переменной выражение файл, задавая ему указанный номер_файла. Если файл не существует, создаётся новый файл так, что в него можно добавлять информацию (см. операторы write и writeln). Не забудьте выполнить команду close, когда ваша программа закончит работать с файлом.

    BASIC-256 может открыть одновременно не более восьми (8) файлов с номерами от 0 до 7. Если номер файла не указан, он открывается с номером нуль (0).

    Оператор Exists (path$) — возвращает двоичный флаг (true/false или 1/0), который указывает, существует или не существует указанный в строковой переменной path$ путь к файлу.

    Оператор Read, read() — читает фрагмент очередной строки (token) из открытого в данный момент файла. Ограничителями фрагмента строки могут быть следующие символы в различных комбинациях: пробелы, символы табуляции (tab), символы конца строки (перевод строки, возврат каретки). Оператор read используется в конструкциях вида x = read, y$ = read в зависимости от типа читаемых из строки данных.

    Оператор Readline, readline () — читает из открытого в данный момент файла очередную строку целиком. Используется в конструкции вида x$ = readline.

    Readline; readline (); readline (номер_файла)

    Возвращает прочитанную из файла строку. Если достигнут конец файла

    [eof (номер_файла)=true], тогда функция возвращает пустую строку ("")

    Если номер_файла не указан используется значение нуль (0).

    Оператор Reset — очищает открытый в настоящее время файл. Все данные, хранившиеся ранее в файле, теряются. Указатель помещается в начало первой строки файла.

    Оператор Write S$ — записывает строку S$ в конец открытого файла, в текущую строку. Оператор Writeline S$ — добавляет строку S$ в конец файла с новой строки. Writeline выражение; writeline (выражение); writeline номер_файла, выражение. Записывает значение аргумента выражение в открытый файл и добавляет символ конца строки. Указатель файла перемещается в конец записи так, что следующая команда записи запишет данные непосредственно за этими. Если номер_файла не указан, используется нулевой номер (0).

    Оператор Seek location — перемещает указатель, который указывает место чтения или записи в открытом файле, на заданное в переменной location число байтов от начала файла. Оператор Size, size() — возвращает размер открытого в данный момент файла в байтах.

    Size size () size(номер_файла) Возвращает длину файла в байтах. Если номер_файла не указан используется значение нуль (0).

    Close; close (); close(номер_файла). Функция close закрывает ввод/вывод в файл и позволяет другому файлу использовать тот же номер. Если номер_файла не указан используется значение нуль (0).

    1. Джеймс М. Рено, М.С. Хотите научиться программировать? - Copyright ©2010.

    2. Никитенко С. Г. Свободное программное обеспечение. BASIC-256 для школы. — СПб.: БХВ-Петербург, 2011. — 224 с.

    Текстовые файлы - единственный вид файлов, с помощью которых возможен ввод/вывод данных в BASIC-256. В версии 0.9.6p возможны лишь чтение и запись строковых данных. Операторы вида X = read, X$ = read в этой версии не работают. Чтение возможно только оператором вида X$ = readline строки текста из файла целиком. Для доступа к файлу рекомендуется в специальной переменной F$ сформировать спецификацию файла, т. е. полное обозначение в командной строке с указанием пути. Далее его следует открыть для записи и чтения оператором open F$. Если необходимо читать или дописывать данные в существующий файл, этого достаточно. Если нужно файл очистить от старой информации, используется оператор reset. Если путь указан правильно, а файл не существует, оператор open F$ создает пустой файл. После завершения работы с файлом его следует закрыть оператором close, чтобы не потерять информацию при завершении работы программы. См. Пример 6.7.1 в книге [2]

    Теоретические сведения по графики в Basic-256 – см. файл ГРАФИКА_256.
    Окно вывода графики в Basic-256

    Для вывода графических объектов в Basic-256 существует специальное окно графического вывода. Координатная сетка в этом окне задаётся осями координат, расположенными несколько непривычно (см. рисунок ниже). Размер можно изменить командой: Graphsize 640, 480 – новы размеры 640х480 точек (пикселей). По умолчанию окно для вывода графики имеет размер 300 пикселей в ширину (х) и 300 пикселей в высоту (y). Пиксель — это самая маленькая точка, которая может быть изображена на мониторе вашего компьютера. Координаты верхнего левого угла — (0,0), а правого нижнего — (299,299). Каждый пиксель может быть представлен двумя числами, первое (x) показывает смещение вправо, второе (y) — смещение вниз. Такой способ маркировки точек известен в математике как, Декартова прямоугольная система координат.


    Рис. Декартова система координат окна вывода графики
    Таблица 1. Основные графические операторы

    Команда

    Формат

    Описание

    Circle

    circle x,y,r

    Рисует текущим цветом круг с центром в точке (x, y) радиусом r.

    Clg

    clg

    Очищает окно графического вывода

    Color

    color название цвета

    Устанавливает текущий цвет для команд рисования

    FastGraphics

    fastgraphics

    Не разрешает обновления графического окна до выполнения команды Refresh (используется в анимации)

    Line

    line x1,y1,x2,y2

    Рисует линию от точки (x1, y1) до точки (x2, y2)

    Plot

    plot x,y

    Рисует точку с координатами (x, y) текущего цвета

    Poly

    poly массив, n

    Рисует n-угольник, координаты вершин которого парами считываются из массива

    Rect

    rect x,y,a,b

    Рисует прямоугольник шириной а и высотой b от точки (x, y)

    Refresh

    refresh

    Обновляет содержимое окна графического вывода

    Таблица 2. - названий цветов.

    white

    black

    red

    darkred

    green

    darkgreen

    blue

    darkblue

    cyan

    darkcyan

    purple

    darkpurple

    yellow

    darkyellow

    orange

    darkorange

    gray

    darkgray


    Этот и последующий примеры изучить
    Задача (Готовый сложный пример) 1. Вывести на графический экран ломаную линию из N отрезков со случайными координатами точек. Отрезки вычерчиваются случайными цветами. N вводится с клавиатуры в диапазоне 10 <= N <= 100. Использовать размер графического экрана по умолчанию и определить его.

    Анализ задачи

    Для вычерчивания ломаной из N отрезков необходимо сформировать координаты (N+1) точек. Координаты X1, Y1 начала первого отрезка формируются отдельно (до начала цикла). Координаты концов отрезков X2, Y2 формируются в цикле. После вычерчивания очередного отрезка координаты точки его конца приравниваются координатам начала следующего отрезка.

    Алгоритм решения задачи

    1. Подготовка экрана

    2. Ввод N

    3. Определение характеристик графического экрана: высоты H и ширины W

    4. Формирование координат начальной точки X1, Y1

    5. Цикл по I от 1 до N [ (цикл FOR)

    6. Формирование случайных координат I-й точки: X2 = Int(W*rand); Y2 = Int(H*rand)

    7. Формирование случайного цвета. Интенсивность образующих цветов выбирается случайным образом в диапазоне от 50 до 200: R = 50 + Int(151*rand); G = 50 + Int(151*rand); B = 50 + Int(151*rand)

    8. Вычертить отрезок (X1, Y1) — (X2, Y2)

    9. X1 = X2; Y1 = Y2]
    Clg

    Input "Введите число отрезков N от 32 до 100 N = ", N

    # Определение характеристик графического экрана

    H = graphheight: W = graphwidth

    # Формирование координат и цвета точек. Вывод на графический экран

    X1 = Int(W*rand): Y1 = Int(H*rand)

    For I = 1 to N

    X2 = Int(W*rand): Y2 = Int(H*rand)

    R = 50 + Int(151*rand)

    G = 50 + Int(151*rand)

    B = 50 + Int(151*rand)

    Color R, G, B

    line X1, Y1, X2, Y2

    X1 = X2: Y1 = Y2

    Next I
    Решение:

    1 этап: Анализ задачи (сделать описание постановки задачи).

    2 этап:. Исходные данные: описать необходимые для решения задачи переменные (включая массив) и правильно их объявить в программе.

    3 этап: Разработать блок-схему алгоритма решения этой задачи.

    4 этап: Написать и отладить текст программы в среде программирования BASIC-256.

    5 этап: Отлаженную программу показать преподавателю.

    ПРИМЕЧАНИЕ: Эти этапы решения поставленной задачи применять во всех последующих вариантах заданий.
    Задание 2: Пример 2

    В графическом экране размером 640×480 вычертить фигуру, состоящую из N (N <= 15) вложенных друг в друга правильных K-угольников (K <= 40), каждый из которых окрашен случайным цветом CL. Все многоугольники вписаны в окружности с равномерно изменяющимися радиусами R от R1 до R1/3 с общим центром в центре экрана O(320, 240). Параметры N, K, R1 вводятся с клавиатуры. Окружности на фигуре не отображаются.

    Анализ задачи

    Начинать вычерчивание следует с многоугольника наибольшего размера и вычерчивать их последовательно в порядке убывания радиуса описанной окружности R — только в этом случае будут видны все N многоугольников. Для решения задачи, кроме указанных в условии переменных N, K, R, понадобятся следующие дополнительные переменные: DR — шаг изменения радиуса опи-санной окружности: DR = (R – R/3)/(N – 1). X1(K), Y1(K) — массивы абсцисс и ординат вершин текущего многоугольника. P(M), M = 2*K — общий массив координат вершин текущего многоугольника с номером I, с радиусом описанной окружности R = R1 – DR*(I – 1); I = 1, 2, ..., N. Для I = 1 R = R1; для I = N R = R1/3.

    Если условно обозначить вершины многоугольника и их координаты как A0(X1[0], Y1[0]), A1(X1[1], Y1[1]), ..., AK–1(X1[K–1], Y1[K–1]), то общий массив координат P запишется в следующем виде: P = {X1[0], Y1[0], X1[1], Y1[1], ..., X1[K–1], Y1[K–1]}. Связь между координатами вершин AJ(X1[J], Y1[J]), J = 0, 1, 2, ..., K–1 и элементами массива P получится из последовательности: P[0] = X1[0], P[1] = Y1[0]; P[2] = X1[1], P[3] = Y1[1]; ... P[2*J] = = X1[J], P[2*J+1] = Y1[J]; ... P[2*K–2] = X1[K–1], P[2*K–1] = = Y1[K–1].

    Положение начальных вершин многоугольников можно выбрать любым. Для определенности примем, что все начальные вершины располагаются на горизонтальном луче, исходящем из центра экрана параллельно оси X и с тем же направлением. Напомним, что началом координат графического экрана является его левый верхний угол. Ось X при этом направлена горизонтально вправо, ось Y — вертикально вниз. Координаты вершин многоугольников при этом будут описываться через его радиус описанной окружности R следующими соотношениями. Начальные вершины A0: X1[0] = 320 + R; Y1[0] = 240. Произвольные вершины AJ: X1[J] = 320 + R*cos(2*PI*J/K), Y1[J] = 240 + R*sin(2*PI*J/K); J = 0, 1, ..., K–1.

    Алгоритм и программа будут строиться по конструкции типа "цикл в цикле". Внешний цикл строится по номеру многоугольника I, изменяющемуся от 1 до N. Внутренний цикл формируется по номеру вершины многоугольника J, который изменяется от 0 до K–1.

    Алгоритм решения задачи

    Начало

    1. Подготовка текстового и графического экранов (установка нужных режимов, очистка)

    2. Ввод числа многоугольников N, числа вершин многоугольника K, радиуса описанной окружности первого многоугольника R1

    3. Формирование описаний массивов X1(K), Y1(K), P(2*K)

    4. Вычисление шага изменения радиуса описанной окружности DR:

    DR = 2*R1/(3*(N-1))

    5. Внешний цикл по номеру многоугольника I от 1 до N[

    6. Вычисление радиуса описанной окружности R для I-го многоугольника:

    R = R1 – (I-1)*DR

    7. Вычисление и установка случайного цвета I-го многоугольника по составляющим r, g, b: r = 50 + Int(151*rand); g = 50 + Int(151*rand); b = 50 + Int(151*rand)

    8. Внутренний цикл по номеру вершины J от 0 до K–1[

    9. Вычисление координат вершины AJ:

    X1[J] = 320 + R*cos(2*PI*J/K);

    Y1[J] = 240 + R*sin(2*PI*J/K)

    10. Формирование общего массива координат вершин P: P[2*J] = X1[J];

    11. P[2*J+1] = Y1[J]. Конец внутреннего цикла по J:]

    12. Вычерчивание I-го многоугольника по массиву координат вершин P. Конец внешнего цикла по I:]

    Конец
    # Подготовка графического и текстового экранов

    Graphsize 640, 480

    Cls

    Clg

    И.Т.Д. ……
    Построение движущихся изображений на экране.

    1. С помощью цикла определить траекторию движения фигуры.

    2. Нарисовать фигуру заданным цветом в начале траектории.

    3. Нарисовать фигуру цветом фона на том же месте.

    4. Перейти к следующей точке траектории движения.

    Пример1

    # Цикл горизонтального движения отрезка

    For X = 0 To 300 step 2

    COLOR Black

    Line X, H, X, H+L

    Pause T

    COLOR RED

    CIRCLE X,150,20

    Pause T1

    Clg

    Next X

    End

    Пример2.

    clg

    y=0

    color 0,255,255

    for y=0 to 300

    rect 150,y,20,20

    pause 0.01

    clg

    next y

    clg

    color 0,0,0

    rect 90,90,120,250

    for i=1 to 10

    color 255,0,0

    circle 150,150,50

    pause 3

    color 0,255,0

    circle 150,150,50

    pause 3

    color 255,255,0

    circle 150,150,50

    pause 3

    next i

    См. также пример – Полет мячика

    Варианты заданий

    1. На графическом экране размером 540×440 вычертить по центру графического окна координатные оси X , Y и относительно построенных осей нарисовать круг, вписанный в квадрат со стороной А, равной половине оси Х. Цвет круга и квадрата задать случайным цветом.

    1А.
    Cls

    Clg x=10

    For k=1 to 10

    circle x,100,10

    x=x+25

    Pause 0.1

    next k
    x=10

    y=150

    r=10

    h=25

    a: circle x,y,r

    pause 0.1

    x=x+h

    goto a
    Нарисуйте на экране максимальное число кругов с заданным радиусом х.

    clg

    a=30

    x=a

    while x<300-a

    circle x,x,a

    x=x+2*a

    end while

    Изобразите на экране расходящиеся концентрические круги (с эффектом анимации).

    clg

    color white

    rect 0,0,300,300

    color red

    a=5

    x=150

    while a<150

    circle x,x,a

    pause 0.1

    a=a+5

    end while
    Оператор stamp - позволяет задать позицию многоугольника в любом месте экрана и, если необходимо, указать масштабирование и поворот
    Задания: Построить движущиеся окружности, смещенные по:

    Оси Y;

    Главной диагонали экрана;

    Побочной диагонали экрана

    Пример

    CLG

    COLOR RED

    FOR X=50 TO 250 STEP 50

    CIRCLE X,150,25

    NEXT X
    Построение графиков функций
    Пример Y=SIN(X)

    Clg

    Line 0,150,300,150

    Line 150,0,150,300

    Color red

    For x=-3.14 to 3.14 step 0.01

    y=sin(x)

    Plot 150+40*x,150+80*y

    Next x

    Построить графики функций:

    1. COS(X)

    2. TAN(X)

    3. X2

    4. X3





    написать администратору сайта