Лабораторная работа №6
Управление выводом данных на экран
Цель работы:получение навыков работы с функциями вывода данных на экран в текстовом режиме
Задания для подготовки к работе
Разработать алгоритм и составить программу для решения задачис учетом вывода данных на экран в текстовом режиме
Подобрать наборы тестовых данных.
Содержание отчета
Описание используемых структур данных.
Наборы тестовых данных с обоснованием их выбора.
Текст программы.
Описание и анализ ошибок, выявленных при отладке программы.
Краткие теоретические сведения
Для работы в текстовом режиме под *nixнеобходимо использовать библиотеку (n)curses. Её можно загрузить через менеджер пакетов, либо набрав в терминале:
sudo apt-get install libncurses5-dev
Кроме того, при компиляции проекта необходимо добавить параметр "-lncurses".
Если вы компилируете проект при помощи консоли, то параметр добавляется при финальной линковке:
g++ myProg.cpp -o myProg -lncurses
Если вы используете Code::Blocks, то для добавления параметра необходимо нажать правой кнопкой мыши на имя вашего проекта и выбрать пункт "Properties...".
В появившемся окне нажать кнопку "Project's build options..." в правом нижнем углу.
Наконец, во вкладке "Linker settings" в поле "Other linker options" добавить упомянутый параметр:
Сама библиотека подключается так:
#include <ncurses.h>
Если вы работаете под Windows, то можно использовать библиотеку "Public Domain Curses" ("pdcurses"), доступную по адресу:http://sourceforge.net/projects/pdcurses/files/latest/download
Для подключения этой библиотеки к проекту, необходимо распаковать архив в какую-либо папку, в свойствах проекта, в вашей среде разработки добавить параметры "Compiler Search Directories" и "Linker Search Directories", где указать пусть к распакованным файлам. А библиотеку "pdcurses.lib" необходимо подключить к самому проекту, используя параметр "Link library...".
Однако в коде программы библиотека подключается как
#include <curses.h>
Например, для Code::Blocksпод Windows это выглядит так:
И подключенная библиотека:
Для подключения библиотеки к другим средам разработки обращайтесь за помощью к преподавателю, либо разбирайтесь сами.
Работа с библиотекой ncurses.
Каждая программа, использующая ncurses, должна иметь следующую структуру:
#include <ncurses.h>
...
initscr(); // инициализация работы ncurses
работа с ncurses
endwin(); // завершение работы с ncurses
Вывод
Вывод символа
int addch(const chtype ch)
выводит символ ch в текущую позицию курсора и перемещает курсор на один символ вправо или в начало следующей строки, если курсор находится у правой границы экрана. (аналогична функции putcharиз<stdio.h>)chtypeтип символов с которыми работаетncurses(он включает в себя код символа, цвет и дополнительные атрибуты).
Вставка символа
int insch(chtype ch)
вставляет символ chслева от курсора и все символы стоящие после курсора перемещаются на одну позицию вправо.
Вывод строки с преобразованием по формату
int printw(const char *fmt,...)
пример:
...
i=1;
printw("Значение i=%d",i);
...
выведет Значение i=1
(аналогична функции printf)
Вывод строки типа chtype*
int addchnstr(const chtype *chstr, int n)
выводит первые nсимволов или всю строку символовchstr, если n=-1 в позицию, где расположен курсор.
Вывод строки типа char*
int addstr(const char *str)
выводит строку strв позицию, где расположен курсор.
Вставка строки
int insnstr(const char* str, int n)
вставляет первые n символов или всю строку символов str, если n=-1 в позицию, где расположен курсор. (положение курсора не изменяется, то что стояло справа от курсора сдвигается вправо)
Вставка пустой строки
int insertln()
вставляет пустую строку (строки стоящие ниже начиная с текущей сдвигаются вниз на одну строку)
Режимы вывода
Для символов типа chtypeможно устанавливать такие атрибуты, как мигание или цвет символа и фона. Для добавления символу атрибута мигания нужно включить флажокA_BLINK. Делается это так:
chtype ch = 'w' | A_BLINK;
Теперь при выводе этого символа он будет мигать, если конечно это позволяет сделать терминал. (A_DIM- пониженная яркость,A_BOLD- повышенная яркость,A_NORMAL- нормальное отображение,A_UNDERLINE- подчёркнутый,A_REVERSE- инверсный)
С включением цвета немного сложнее. Перед использованием цветов нужно проинициализировать палитру. Палитра это структура, в которой определённой цифре соответствует определённый цвет. В нашем случае одной цифре соответствуют сразу два цвета символов и фона.
...
chtype ch;
...