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

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

  1. Что означают операторы * и & при работе с указателями?

  2. Что означает запись *(p + i), где p – указатель?

  3. Есть ли понятие указатель в языке Basic?

  4. Различается ли запись литералов типа string в языках Basic и C?

  5. Укажите средство для сравнения строк в языке C.

  6. Что делает функция gets?

  7. Укажите средства для сцепления строк в языках C и Basic.

  8. Для чего служит функция free?

  9. Дайте определение рекурсивной процедуры.

  10. С помощью какой структуры данных реализуется рекурсия?

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

  1. Можно ли менять начальный адрес массива во время выполнения программы?

  2. Эквивалентны ли записи a[ i ] и *(a+i), если a – имя массива?

  3. В каком из изучаемых языков отсутствуют переменные предопределенного типа string?

  4. Укажите средство для сравнения строк в языке Basic.

  5. Можно ли задать значение одной строки другой в языке C оператором присваивания?

  6. Чем отличаются результаты выполнения функций lset и rset?

  7. Чем отличаются функции malloc и calloc?

  8. Как освобождается память, выделенная в "куче"?

  9. Что такое стек?

  10. Укажите способ "потери" выделенной в "куче" памяти.

16. Работа с экраhом

В этом и последующих разделах излагаются средства языка C, точнее средства, входящие в среду разработки Borland 3.1 C++, работающей под управлением операционной системы MS DOS.

Различают текстовый и графический режимы(mode).

В текстовом режиме экран делится на 25 строк и 80 позиций или 43 строки и 80 позиций в зависимости от настройки среды. Каждая ячейка имеет байт символа и байт атрибута. Символ выводится на экран, а атрибут показывает, как он представлен на экране(цвет символа и фона, интенсивность и т.п.).

В графическом режиме экран делится на элементы разложения(пиксели). Каждый пиксель выглядит точкой на экране. Число строк и пикселей в строке зависит от настроек монитора и видеоадаптера.

Координаты ячейки или элемента задаются парой чисел: № позиции в строке, № строки.

Координаты верхнего левого угла экрана:

в текстовом режиме: 1, 1;

в графическом: 0, 0.

Окно – это прямоугольный участок, определенный на экране при работе в текстовом режиме. При работе вывод программы ограничен активным окном, остальной экран неизменен. По умолчанию окном является весь экран от ячейки с координатами (1, 1) до ячейки с координатами (80, 25). В графическом режиме такой же прямоугольный участок называют областью представления(view port). Для работы с экраном используются видеофункции, прототипы которых находятся в: для текстового режима в заголовочном файле conio.h, для графики - graphics.h. Большинство видеофункций работают в относительных координатах в пределах активного окна. Координаты отсчитываются относительно координат левого верхнего угла окна.

16.1. Текстовый режим(textmode)

Определены следующие видеорежимы:

BW40 0 черно-белый, 40 позиций в строке;

C40 1 16 цветов, 40 позиций в строке;

BW80 2 черно-белый, 80 позиций в строке;

C80 3 16 цветов, 80 позиций в строке;

MONO 7 монохромный, 80 позиций в строке.

Режимы представляют собой символические константы, определенные в файле conio.h. В программе они используются в качестве аргумента функции textmode. Для современных мониторов следует использовать только режим C80.

Информация для каждой ячейки занимает в памяти 2 байта: первый содержит значение выводимого символа, второй – атрибут. Атрибут определяет цвет выводимого символа(foreground) и цвет фона ячейки(background).

Для заданий цвета используют символические константы, определенные в файле conio.h.

BLACK 0 черный

BLUE 1 синий

GREEN 2 зеленый

CYAN 3 бежевый цвета символов и фона

RED 4 красный

MAGENTA 5 сиреневый

BROWN 6 коричневый

LIGHTGRAY 7 светлосерый

DARKGRAY 8 темносерый

LIGHTBLUE 9 голубой

LIGHTGREEN 10 светлозеленый

LIGHTCYAN 11 светлобежевый

LIGHTRED 12 светлокрасный только цвета символов

LIGHTMAGENTA 13 светлосиреневый

YELLOW 14 желтый

WHITE 15 белый

BLINK 128 мерцание

Различают 4 группы видеофункций.

16.1.1. Ввод/вывод и манипулирование

В отличие от аналогичных функций передачи данных потоком все описанные ниже функции работают в пределах активного окна.

Ввод

int cscanf(...); Аналогично функции scanf.

int getch( ); Чтение символа с клавиатуры без отображения на экран.

int getche( ); То же с отображением с отображением символа на экране.

char* cgets(char*); Аналогично функции gets.

Вывод

int cprintf(...); Аналогично функции printf.

int putch(int); Аналогично функции putchar.

int cputs(char*); Аналогично функции puts.

Манипулирование цветом и курсором

void clrscr(void); Очистить текущее текстовое окно и установить курсор в его левый верхний угол(координаты 1, 1).

void gotoxy(int x, int y); Установить курсор в окне в точку с координатами (x,y). Если обращение к ней некорректно, то оно игнорируется.

Пример.

gotoxy(50, 15); Если правый нижний угол окна расположен в ячейке с координатами (35, 25), то действие не выполняется.

int gettext( int left, int top, int right, int bottom, void *mem); Запомнить содержимое окна с координатами углов(left, top, right, bottom) в области памяти по адресу mem.

int puttext (int left, int top, int right, int bottom, void *mem); Восстановить окно.

int movetext(int left, int top, int right, int bottom, int new_left, int new_top); Скопировать область экрана в новое место.

Возвращаемое значение всех трех функций: 1 – в случае успеха, 0 – при неудаче. Функции gettext, puttext и movetext работают в абсолютных координатах экрана. Hеобходимый объем памяти для хранения содержимого окна: 2*h*w байтов, где h - ширина окна в позициях, w - высота его в строках.

Замечание. Все функции работают только с консолью(экраном). Их называют функциями консольного ввода-вывода.