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

Пиксели

unsigned getpixel(int x, int y); Возвращает цвет пикселя с заданными координатами.

void putpixel(int x, int y, int color); Рисует пиксель цветом color в точке (x, y).

16.2.5. Дополнительные функции

void sound(unsigned frequency); Включить звук(частота в гц).

void nosound(void); Выключить звук.

void delay(unsigned time); Задержка выполнения в миллисек.

void sleep(unsigned lag); Задержка выполнения в сек.

Прототипы в файле dos.h

Данные функции не относятся к библиотеке graphics. Они приводятся в этом разделе, чтобы программист имел возможность включить звук в проектирование интерфейса.

Вопросы для самопроверки и контроля

Вопросы для самопроверки

1. Как перейти в графический режим?

2. Укажите размер экрана и начальные координаты курсора в текстовом и графическом режимах соответственно.

Контрольные вопросы

1. Что представляют собой файлы с расширением bgi?

2. Почему в графическом режиме используются битовые образы размером 8*8 пикселей?

17. УПРАВЛЕНИЕ ПРОГРАММОЙ С ПОМОЩЬЮ КЛАВИАТУРЫ

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

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

Клавиши, не имеющие графического изображения:

  PgUp PgDn Del End Home и т.п.

Каждая клавиша имеет расширенный код символа, занимающий 2 байта. Если в нем младший байт не равен 0, то в нем хранится ASCII-код символа, если он равен 0, то в старшем байте находится сканкод клавиши, характерный только для IBM PC. Все управляющие клавиши, кроме клавиш Esc, Tab, Enter имеют нулевой младший байт, поэтому приходится по-разному обрабатывать управляющие и обычные символы. Более того, для управления программой можно использовать сочетания клавиш типа: Shift+Tab, Alt+F1, Ctrl+F10 и т.п., которые имеют свои расширенные коды.

Байт 2 Байт 1

Расширенный код клавиатуры: Сканкод ASCII-код

Для чтения символов с клавиатуры без отображения на экран используются функции:

- getch( ),

- int bioskey(int cmd);  Прототип в файле bios.h.

Возможные значения параметра cmd={0|1|2}. Если значение cmd равно 0, то функция возвращает расширенный код клавиатуры и удаляет его из буфера клавиатуры, если буфер пуст, то ожидает нажатие клавиши. Как работает функция bioskey с параметрами {1|2}, можно посмотрить в подсказке(help) среды Borland C++ 3.1.

Пример. Фрагмент реализации простейшего текстового редактора.

#include <bios.h>

#define LEFT 19200

#define RIGHT 19712

#define HOME 18176

#define END 20224

#define DEL 21248

#define ENTER 7181

...................

flin=1;

while(flin){

cod = bioskey(0);

switch(cod){

case ENTER: /* Конец ввода */

flin = 0; break;

case LEFT : /* Влево на 1 символ */

.......

break;

case RIGHT: /* Вправо на 1 символ */

.......

break;

case HOME : /* В начало строки */

.......

break;

case END : /* В конец строки */

.......

break;

case DEL : /* Удалить символ над курсором */

.......

break;

default : /* Ввод символа */

cod &= 0x00ff;

if(cod >= 040){ /* Нормальный символ */

.........

}

} /* End switch */

..........

} /* End while */

Расширенные коды клавиш можно взять из системы help, либо написать программу с использованием функции bioskey(0), печатающую их в нужной системе счисления при нажатии соответствующей клавиши.

Те же манипуляции можно выполнить и с функцией getch( ), только нужно дважды читать один и тот же расширенный код. Первое обращение к функции getch( ) читает младший байт буфера клавиатуры. Если он не равен 0, то следующее обращение к getch( ) будет вновь читать младший байт следующего символа, если же он равен 0, то следующее обращение прочтет старший байт буфера клавиатуры.

Пример.

cod1 = getch( ); // Читаем младший байт

if(cod1 == 0){ // Читаем старший байт

cod2 = getch( );

}

Вопросы для самопроверки и контроля

Вопросы для самопроверки

1. Каков состав расширенного кода клавиатуры?

2. Как выделить из прочитанного расширенного кода содержимое младшего байта(ASCII-символ)?

Контрольные вопросы

1. В чем отличие процесса чтения расширенного кода функциями bioskey и getch?

2. Какую инструкцию удобно использовать для управления программой с помощью клавиатуры?

ЗАДАЧИ

Элементарные конструкции

1. Какие нижеприведенных записей являются можно использовать в качестве имен:

X Begin a[3] 3D_Studuo Step1 sin(x) CTEK a15x Str.X 1 конец _XX x_x

2. Какие из записей ниже являются целыми литералами:

0 +006 -45 3. .55 0712 &034 0xabc 0X12a5 &habc &H12A5

3. Какие из записей ниже можно считать литералами с плавающей точкой:

-123.4 34.05 75. -.05 0.0123 -34.593E-12 -2e5 1D15 d-23 1e1 -1e-1.2 0E-3

4. Записать на языках C и Basic следующие арифметические выражения:

a)

б)

в)

г)

д)

е)

5. Определить число сотен натурального числа.

6. Дано трехзначное натуральное число n. Записать его в обратном порядке, например, 456  654.

7. Записать логическое выражение, принимающее значение true, если точка М(x,y) попадает в заштрихованную область:

a ) y б) y

1

1

x -1 1 x

1 2

-1

в) y г) y

2 2

1 x

-2 1 2 x

-1 1

-2

2

8. Записать логическое выражение, принимающее значение true, если из отрезков с длинами x, y, z можно составить треугольник.

9. Начертить на плоскости XY области, в которой перечисленные ниже выражения принимают значения true(выражения записаны на языке C):

а) x2+y2<=1 || x>0

б) x>y == y>0

в) x+y<=1 || x>=0 && !(y<0)

г) x2+y2<1 && y>=x ==y>.5