Программа стрелочного секундомера

      Комментарии к записи Программа стрелочного секундомера отключены

SCREEN 12

CIRCLE (320,240),205’рисование окружности

‘число секунд от 0 часов до пуска программы

s=VAL(MID$(TIME$,1,2))*360 +

VAL(MID$(TIME$,4,2))*60+VAL(MID$(TIME$,7,2))

ds=0‘число секунд

LOCATE 3, 2: PRINT Секунд:

FOR i = s TO s+180’цикл на три минуты (i – секунды)

LOCATE 2, 2: PRINT TIME$’вывод текущего времени

LOCATE 4, 2: PRINT USING ###; ds’вывод числа секунд

t$ = TIME$’запоминание времени

g=(i*6-90) MOD 360’преобразование числа секунд в угол поворота

‘рисование стрелки

DRAW c7ta-+STR$(g)+r200 nh30 ng30 bm320,240

WHILE t$ = TIME$: WEND’пауза до изменения времени

ds=VAL(MID$(TIME$, 1,2))*360+VAL(MID$(TIME$,4,2))*60

+VAL(MID$(TIME$, 7, 2)) — s

‘стирание старой стрелки

DRAW c0ta-+STR$(g)+r200 nh30 ng30 bm320,240

NEXT

Пример. Составить программу вычерчивания линии при нажатии соответствующих навигационных клавиш (клавиш со стрелками и диагональных клавиш – Home, End, PgUp, PgDn). Кроме того, в правой части экрана следует отобразить текущие координаты точки. Для выхода из программы использовать клавишу Enter. Результат работы программы может быть например таким, как показано на рис.2.10.12.

Программа приведена ниже. Сначала здесь изображается прямоугольник, в котором разрешено двигаться точке, и курсор устанавливается в исходное положение. Затем организуется цикл вывода. Внутри него командой SLEEP создается состояние ожидания для фиксации нажатия клавиш. Если нажатие произошло, проверяется длина кода. Если она равна двум (LEN(a$)=2), значит была использована управляющая клавиша. Далее выясняется ее код. Если это клавиша Enter (код 13), осуществляется выход из цикла и работа программы прекращается. Если это клавиша со стрелкой, например стрелкой вниз (код 80), соответствующая координата (Y) увеличивается на 1 пиксель и формируется новое значение команды перемещения (переменная z$). Однако, прежде чем выполнить графическую операцию, проверяется положение новых координат относительно установленных пределов вывода (здесь для Y это 0-200, для Х – 0-300). Если новая точка находится внутри прямоугольника, выполняется команда рисования (DRAW z$), иначе возвращаются старые координаты. В конце цикла в позиции 1,55 выводятся текущие координаты точки.

SCREEN 12

LINE (0, 0)-(300, 200), , B

x=10: y=100: PSET(x y)’переход в начальную точку рисования

DO

SLEEP

a$=INKEY$’запоминание кода нажатой клавиши

IF LEN(a$) = 2 THEN’если нажата управляющая клавиша

IF ASC(a$) = 13 THEN EXIT DO’если нажата Enter – выход

‘проверка нажатия навигационных клавиш

k = ASC(RIGHT$(a$, 1))’выявление кода второго символа

y1 = y: x1 = x’запоминание старых координат

‘в зависимости от кода клавиши формируются новые координаты

IF k=80 THEN y=y+1: z$=d’движение вниз

IF k=72 THEN y=y-1: z$=u’движение вверх

IF k=75 THEN x=x-1: z$=l’движение влево

IF k=77 THEN x=x+1: z$=r’движение вправо

IF k=73 THEN x=x+1: y=y-1: z$=e’движение вверх вправо

IF k=81 THEN x=x+1: y=y+1: z$=f’движение вниз вправо

IF k=71 THEN x=x-1: y=y-1: z$=h’движение вверх влево

IF k=79 THEN x=x-1: y=y+1: z$=g’движение вниз влево

‘проверка выхода за установленные пределы

IF y0 AND y0 AND x

DRAW z$’точка внутри области — вывод прямой

ELSE’иначе

y=y1: x=x1:’возврат к старым координатам и сигнал

END IF

LOCATE 1,55

PRINT X=;x;Y=;y’вывод текущих координат

END IF

LOOP

2.11. РАБОТА С ДИСКОВЫМИ ФАЙЛАМИ

В случаях, когда на компьютере обрабатываются большие наборы данных, или данные должны быть сохранены после завершения программы, следует сохранять их в дисковых файлах. Для описания структуры файла введем следующие термины. Каждый файл состоит из одной или нескольких записей. Каждая запись, в свою очередь содержит поля данных. Обычно, файл организуется так, что все его записи имеют одинаковую структуру. Если сравнить файл с таблицей, то строка таблицы соответствует записи, а отдельная клетка – полю. Например, пусть это файл о кадровом составе подразделения, где для каждого сотрудника хранятся данные: фамилия, табельный номер, год рождения, зарплата (в тыс. руб.).

поле 1Фамилия поле 2Табель поле 3Год рождения поле 4Зарплата
Петров А.В. запись 1
Кулик С.П. запись 2
. . .
Яшин А.А. запись N

И конечно, файл должен иметь имя, которое дается по известным правилам для образования имен файлов. Пусть именем нашего файла будет KADR.DAT.

Различают файлы с последовательным и прямым (произвольным) доступом. Простейшим является последовательный доступ. В этом случае программа обрабатывает файл целиком даже если нужно изменить только один единственный символ. Такой файл может быть одновременно использован только для одной из целей – запись или считывание информации. Структура данных в файле может быть нерегулярной – длины одноименных полей могут отличаться друг от друга в разных записях. В файлах с произвольным доступом программа может обращаться к любой записи по номеру для ее обработки. Последовательность доступа к записям может быть любой, например, можно перемещаться и в обратном порядке. Структуры всех записей в файле должны быть строго идентичны.

Хотя файлы имеют имена, обращение к ним в программе происходит не непосредственно по имени, а по, закрепленному за ним в программе, номеру.

Любому действию с файлом должно предшествовать его открытие следующим оператором

u OPEN имя_файла [FOR тип] AS#номер_файла LEN длина

Здесь файлу с указанным именем файла присваивается произвольный номер файла. Далее при обработке файла обращение к нему происходит только по номеру.

Остальные параметры имеют следующий смысл:

тип – может иметь одно из значений, определяющих тип доступа:

OUTPUT – последовательный ввод данных в файл,

INPUT – последовательный вывод данных из файла.

APPEND – последовательный ввод с добавлением данных в конец файла.

RANDOM – прямой ввод-вывод данных. Если параметр тип не задан, подразумевается файл с прямым доступом (RANDOM).

длина – длина записи. По умолчанию равна 128 байт для файлов прямого доступа и 512 байт для файлов прямого доступа.

Примеры организации доступа к файлу KADR.DAT:

OPEN kadr.dat FOR OUTPUT AS#1 – запись в начало нового файла

(номер 1) с последовательным доступом

OPEN kadr.dat FOR APPEND AS#2 – запись (добавление) в конец

существующего файла с последовательным доступом

OPEN kadr.dat FOR INPUT AS#3 – чтение с начала существующего

файла с последовательным доступом

OPEN kadr.dat FOR RANDOM AS#4 – запись или чтение файла с

произвольным доступом

Функция

uLOC (номер_файла)

возвращает текущую позицию в открытом файле. Для файлов прямого доступа, возвращается номер записи, к которой было последнее обращение. Для файлов последовательного доступа – текущую байтовую позицию, деленную на 128.

Функция

uEOF (номер_файла)

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

Функция

uLOF (номер_файла)

возвращает размер открытого файла в байтах.

Оператор

uSEEK #номер_файла, позиция_в_файле

устанавливает указатель записей в заданную позицию. Для файлов прямого доступа – на запись с заданным номером. Для файлов с последовательным доступом – на байт с заданным номером от начала файла. В таких файлах оператор удобно использовать для перехода в его начало (например, SEEK #4,1 – переход в начало файла #4).

Оператор

uCLOSE [[#номер_файла [,[#номер_файла]..]

закрывает файлы с перечисленными номерами. Если параметры отсутствуют, закрываются все файлы.

¶ФАЙЛЫ ПОСЛЕДОВАТЕЛЬНОГО ДОСТУПА. Работа с такими файлами осуществляется с помощью следующих операторов и функций.

Оператор

uINPUT #номер_файла, переменные

читает данные из файла последовательного доступа в перечисленные переменные. Типы данных в файле и типы переменных должны соответствовать друг другу.

Оператор

uWRITE #номер_файла [,список_выражений]

посылает данные из списка выражений в файл последовательного доступа.

Выводимые значения разделяются запятыми. Символьные строки заключаются в кавычки.

Оператор

uPRINT #номер_файла, [USING формат;] список_выражений[,/;]

посылает данные из списка выражений в файл последовательного доступа. Никакие разделители между полями не вставляются.

Пример. Ввести в файл KADR.DAT данные о сотрудниках учреждения (фамилия, номер отдела, зарплата), первоначально хранимых в массивах fam$(n), ot(n), zar(n). Затем вывести из файла список сотрудников отдела 123, а также суммарную и среднюю зарплату его работников.

Статьи к прочтению:

Хороший секундомер (программы для Андроид)


Похожие статьи: