- •Предисловие
- •Глава 1. Основные понятия
- •1.1. Элементы языка программирования
- •1.2. Процесс создания программы
- •1.3. Первая программа
- •1.4. Состав программы
- •Глава 2. Средства разработки на C++
- •2.1. Системы Turbo C++ 3.0/Borland C++ 3.1
- •2.2. Система C++ Builder
- •Глава 3. Работа с числовыми данными
- •3.1. Целые типы
- •3.2. Числа с плавающей точкой
- •3.3. Ввод и вывод чисел
- •3.4. Логический тип и логические операции
- •3.5. Математические функции
- •Глава 4. Операторы. Ключевые слова
- •4.1. Операторы
- •4.2. Приоритеты операторов
- •4.3. Ключевые слова
- •4.4. Структура программы
- •4.5. Константы
- •Задачи - . Простейшие вычисления
- •Глава 5. Управление и циклы
- •5.1. Условный оператор
- •5.2. Операторы цикла
- •5.3. Переключатель
- •5.4. Операторы break и continue
- •Задачи -. Выбор и циклы
- •Глава 6. Массивы
- •6.1. Одномерные массивы
- •6.2. Двумерные массивы
- •Задачи -. Одно- и двумерные массивы
- •Глава 7. Функции
- •7.1. Определение функции
- •7.2. Формальные параметры и фактические аргументы
- •7.3. Автоматические и статические переменные
- •7.4. Прототипы функций
- •7.5. Массивы как аргументы функций
- •7.6. Внешние переменные
- •7.7. Рекурсия
- •7.8. Перегруженные имена функций
- •7.9. Аргументы функций по умолчанию
- •Задачи -. Функции
- •Глава 8. Символы и строки
- •8.1. Символы
- •8.2. Строки символов
- •Задачи -. Символы и строки
- •Глава 9. Препроцессор
- •9.1. Директивы препроцессора
- •9.2. Макросы
- •Задачи -. Макросы
- •Глава 10. Указатели и ссылки
- •10.1. Указатели и адреса
- •10.2. Указатели и массивы
- •10.3. Адресная арифметика
- •10.4. Символьные указатели
- •10.5. Массивы указателей
- •10.6. Указатели на функции
- •10.7. Ссылки
- •10.8. Операторы new и delete
- •Задачи -. Указатели и ссылки
- •Глава 11. О файлах и командной строке
- •11.1. Знакомство с файлами
- •11.2. Командная строка
- •11.3. Перенаправление стандартного ввода и вывода на файл
- •11.4. Аргументы командной строки
- •Задачи -. Файлы и командная строка
- •Глава 12. Работа с экраном дисплея
- •12.1. Текстовый режим
- •12.2. Графический режим
- •Задачи -. Работа с экраном
- •Глава 13. Внутреннее представление чисел
- •13.1. Двоичная система счисления
- •13.2. Беззнаковые целые
- •13.3. Двоичный дополнительный код
- •13.4. Двоичный код с избытком
- •13.5. Побитовые операторы
- •13.6. Дробные числа в двоичной системе
- •13.7. Внутреннее представление плавающих типов
- •13.8. Преобразование типов
- •Задачи -. Побитовые операторы
- •Глава 14. Структуры, перечисления, объединения
- •14.1. Объявление структур
- •14.2. Структуры и функции
- •14.3. Указатели на структуры
- •14.4. Массивы структур
- •14.5. Перечисления
- •14.6. Объединения
- •14.7. Битовые поля
- •14.8. О бинарных файлах
- •Задачи -. Структуры
- •Глава 15. Классы
- •15.1. Структуры в C++. Инкапсуляция
- •15.2. Встроенные функции
- •15.3. Классы. Скрытие данных
- •15.4. Конструкторы
- •15.5. Статические члены класса
- •15.6. Друзья класса
- •15.7. Копирование объектов класса
- •15.8. Управление доступом
- •15.9. Ссылка на себя
- •15.10. Деструкторы
- •Задачи -. Работа с классами
- •Глава 16. Программы из нескольких файлов
- •16.1. Работа с проектами
- •16.2. Область действия имен
- •16.3. Заголовочные файлы
- •16.4. Пространства имен
- •Задачи -. Работа со стеком
- •Глава 17. Перегрузка операторов
- •17.1. Правила перегрузки операторов
- •Задачи -. Перегрузка операторов
- •Глава 18. Конструктор копирования и оператор присваивания
- •18.1. Проблемы при копировании
- •Задачи -. Конструктор копирования
- •Глава 19. Ввод и вывод
- •19.1. Вывод
- •19.2. Ввод
- •19.3. Ввод и вывод определяемых пользователем типов
- •19.4. Работа с файлами
- •Глава 20. Взаимоотношения классов
- •20.1. Объекты как члены класса
- •20.2. Конструкторы встроенных типов
- •20.3. Наследование
- •20.4. Виртуальные функции
- •20.5. Абстрактные классы
- •20.6. Совместимость типов
- •20.7. Множественное наследование
- •Задачи -. Наследование классов
- •Глава 21. Шаблоны, исключения
- •21.1. Шаблоны
- •21.2. Шаблоны функций
- •21.3. Классы и шаблоны
- •21.4. Обработка исключений
- •21.5. Стандартная библиотека шаблонов
- •Литература
- •Предметный указатель
14411
143.Выведите первую из самых коротких строк текстового файла.
144.В текстовый файл построчно записаны целочисленные элементы квадратной матрицы размером 4*4. Прочитайте матрицу из файла в двумерный массив, транспонируйте и запишите транспонированную матрицу в другой файл.
145.В текстовый файл построчно записаны целочисленные элементы квадратной матрицы размером 4*4. Прочитайте матрицу из файла в двумерный массив, вычеркните заданную строку и столбец, полученную матрицу 3*3 запишите в другой файл.
146.Напишите программу, которая выводит сообщения:
Работает программа из файла FILENAME В командной строке имеются слова: WORD1
WORD2
…
Здесь FILENAME – имя файла, в котором находится программа, WORD1, WORD2, … – слова из командной строки.
147. Напишите программу ical, которая сможет выполнять 4 арифметические действия над своими аргументами, то есть в ответ на ввод команды типа
ical 5 + 4
печатать результат выполнения заданной операции: 9.
Глава 12. Работа с экраном дисплея
12.1. Текстовый режим
Экран дисплея может работать в текстовом режиме и, при соответствующей аппаратной и программной поддержке, в графическом режиме. В текстовом режиме на экране можно разместить обычно 25 строк по 80 символов в каждой строке. Средства для работы
втекстовом режиме объявлены в заголовочном файле conio.h.
Втекстовом режиме на экране дисплея действует следующая система координат: ось x направлена слева направо, ось y – сверху вниз; началом координат является левый верхний угол экрана. В начале координат x = 1, y = 1. Координата x является номером символа в
строке, а координата y – номером строки.
На экране могут создаваться текстовые окна. Внешне окна ничем не выделяются, но после создания окна доступной является только его
О файлах и командной строке 145
внутренняя область. В каждый момент времени активным является единственное окно экрана. В окнах действует своя локальная система координат с началом в левом верхнем углу окна. Все функции, обращающиеся к экрану, используют относительные координаты текущего окна, и только одна функция window использует абсолютные координаты, связанные непосредственно с экраном.
Таблица 35. Константы цветов и их значения
Цвет |
Константа |
Значение |
черный |
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 |
В текстовом режиме символы могут выводиться на экран разными цветами на разном фоне. Система TC допускает использования 16 цветов для символов и 8 цветов для фона. В conio.h определены 16 констант, кодирующих возможные цвета. Они приведены в табл.36. Все 16 цветов можно использовать для цвета символов, для цвета фона можно использовать только первые 8 цветов.
Ниже приводится краткое описание некоторых, объявленных в conio.h, функций, которые можно использовать для управления экранном в текстовом режиме.
Функция
void clrscr(void);
очищает текущее текстовое окно, устанавливает заданный цвет фона и помещает курсор в левый верхний угол.
Функция
void gotoxy(int x, int y);
146 11
устанавливает курсор в текущем окне в положение с координатами x, y. Значения x, y могут изменяться от 1 до максимальных размеров окна соответственно в горизонтальном и вертикальном направлении.
Функции
int wherex(void); int wherey(void);
возвращают текущие координаты курсора. Функция
void textbackground(int color);
устанавливает цвет фона color. В качестве цвета можно брать первые 8 цветов из табл.37, задавая их или числами от 0 до 7, или именованными константами, что проще, так как их легче запомнить.
Функция
void textcolor(int color);
устанавливает цвет символов и признак мерцания, определенные в аргументе color. Можно использовать все цвета из табл.38. Для установки признака мерцания используется константа BLINK со значением 128. Если взять, например, color = RED + BLINK; то будет установлен режим вывода красных мерцающих символов.
Функция
void window(int x1, int y1, int x2, int y2);
формирует текстовое окно в виде прямоугольника с координатами левого верхнего угла x1, y1 и правого нижнего угла x2, y2. Используются абсолютные координаты, связанные с экраном.
Функция
int putch(int ch);
выводит на экран в текущую позицию курсора символ с кодом ch, используя установленные цвета символа и фона.
Функция
int getch(void);
читает единственный символ с клавиатуры без его отображения на экране. Если нажимается функциональная или управляющая клавиша, getch возвращает 0. После этого ее можно повторно вызвать и она возвратит некоторый код клавиши. Например, если нажата клавиша «стрелка вверх» ↑, то при первом вызове getch возвратит 0, а при втором – 72. При нажатии клавиши Enter getch возвращает
единственный символ возврат каретки ’\r’ с кодом 13.
О файлах и командной строке 147
Программа 33. Российский флаг
Программа изображает на экране Российский флаг. Изображение флага создает функция RussFlag путем образования трех текстовых окон, у которых цвета фона устанавливаются в соответствии с цветами флага.
По умолчанию на экране используется черный (BLACK) цвет для фона и светло-серый (LIGHTGRAY) цвет для символов. Функция RussFlag изменяет цветовые установки, поэтому они восстанавливаются в функции NormScreen.
//Файл RussFlag.cpp
//Программа изображает на экране флаг России #include <conio.h>
#include <iostream.h> #include <stdlib.h>
double HW = 14.0/9.0;// Отношение высоты к ширине одного знакоместа
//RussFlag: изображает флаг России
void RussFlag(int x, int y, int h)
{ |
// x, y - координаты левого верхнего угла флага |
|
// h - высота одной цветовой полосы |
int w; |
// Длина флага |
w = h * 3 * 2 * HW; |
// Флаг состоит из трех цветных полос, |
//его длина в 2 раза больше высоты
//Множитель HW дает поправку,
//так как на экране в текстовом режиме
//высота знакоместа больше ширины
//Создаем изображение на экране
window(x, y, x + w, y + h - 1); |
// Окно для белой полосы флага |
textbackground(LIGHTGRAY); |
|
clrscr(); |
|
window(x, y + h, x + w, y + 2 * h - 1); // Окно для голубой полосы |
|
textbackground(BLUE); |
|
clrscr(); |
|
window(x, y + 2*h, x + w, y + 3*h - 1); |
// Окно для красной полосы |
textbackground(RED); |
|
clrscr(); |
|
}
// NormScreen: восстанавливает нормальное состояние экрана void NormScreen()
{
window(1, 1, 80, 25); |
// Окно во весь экран |
textbackground(BLACK); |
// Черный цвет фона |
textcolor(LIGHTGRAY); |
// Светло-серый цвет для символов |
clrscr(); |
// Очистка экрана |