- •Оглавление
- •6. Ввод-вывод 52
- •11. Операторы. Дополнение 93
- •12. Передача данных потоком 100
- •13. Файлы 103
- •14. Структура программы 109
- •15. Указатели, массивы, строки 118
- •16. Работа с экраhом 137
- •17. Управление программой с помощью клавиатуры 151
- •Введение
- •1. Основные понятия и определения
- •1.1. Компьютер
- •Процессор
- •Периферия
- •1.2. Алгоритмы
- •1.3. Программы и языки
- •Основные понятия языка программирования
- •Выполнение программы
- •Машинный и алгоритмический языки
- •Метаобозначения
- •Этапы обработки программы на компьютере
- •Терминология
- •Трансляция
- •Редактирование связей (компоновка)
- •Загрузка
- •1.4. Данные
- •Системы счисления
- •Типы и совокупности данных.
- •Вещественные
- •Логические
- •Совокупности данных
- •2. Элементы языка
- •2.1. История языков с и Basic
- •2.2. Алфавит
- •2.3. Идентификаторы
- •2.4. Знаки разрядки
- •2.5. Комментарии
- •2.6. Запись текста программы
- •3.1.1. Целые
- •3.1.2. Данные с плавающей точкой
- •3.1.3. Логический тип
- •3.1.4. Символьные данные
- •3.1.5. Дополнительные типы данных
- •3.2. Совокупности данных
- •3.2.1. Массивы
- •Объявления массивов
- •Обращение к элементу массива
- •3.2.2. Структуры
- •4.1. Арифметические операторы Основные
- •Дополнительные
- •Приоритет
- •4.2. Операторы конкатенации
- •4.3. Операторы сравнения
- •4.4. Логические операторы
- •4.5. Обращение к функции
- •4.6. Встроенные функции
- •4.7. Заключительные замечания
- •5.1. Объявления
- •5.2. Присваивание
- •5.3. Безусловный переход
- •5.4. Инструкция If. Пустая инструкция
- •5.5. Составная инструкция
- •5.6. Циклы
- •5.6.1. Циклы с предусловием
- •Циклы while
- •Циклы for
- •5.6.2. Циклы с постусловием
- •5.6.3. Вложенные циклы
- •5.7. Управляемые переходы
- •5.7.1. Инструкция break
- •5.7.2. Инструкция continue
- •5.7.3. Инструкции exit
- •5.8. Многоальтернативный выбор
- •5.8.1. Инструкция switch (язык с)
- •5.8.2. Инструкция select case (язык Basic)
- •Вопросы для самопроверки и контроля Вопросы для самопроверки
- •Контрольные вопросы
- •6. Ввод-вывод
- •6.1. Управляющая строка
- •6.1.1. Спецификация d (целые десятичные числа)
- •6.1.2. Спецификация f (десятичные числа с плавающей точкой)
- •6.1.3. Спецификация e (десятичные числа с плавающей точкой)
- •6.1.4. Спецификация g (универсальная спецификация)
- •6.1.5. Вывод символьной информации
- •6.2. Инструкции printf и scanf. Схема ввода-вывода
- •7.1.1. Распределение скаляров
- •7.1.2. Распределение массивов
- •7.1.3. Статическое и динамическое распределение памяти
- •7.2. Блоки
- •7.3. Процедуры
- •7.3.1. Определения процедур
- •7.3.2. Связь между вызывающей и вызываемой функциями
- •Механизмы передачи данных
- •Прототипы функций (c)
- •Передача скаляров Возвращаемое значение
- •Входные данные
- •Выходные данные
- •Передача массивов
- •Передача функций
- •Вопросы для самопроверки и контроля Вопросы для самопроверки
- •Контрольные вопросы
- •8. Препроцессор
- •8.1. Определение символических констант
- •8.2. Включение файлов в текст программы
- •9.1. Формирование листинга
- •Перенос:
- •9.2. Комментарии
- •9.3. Имена Имена объектов программы должны быть осмысленными.
- •3. Литералы.
- •10.5. Подмассивы (сечения) (c)
- •10.6. Динамические массивы (b)
- •10.7. Структуры и объединения (c)
- •10.7.1. Структуры
- •10.7.2. Рекурсивные структуры
- •10.7.3. Поля битов
- •10.7.4. Объединения (смеси)
- •10.7.5. Переменные структуры
- •10.9. Пользовательские типы данных
- •10.9.1. Инструкция type (b)
- •10.9.2. Инструкция typedef (c)
- •10.10. Преобразование типов
- •10.10.1. Автоматические преобразования
- •10.10.2. Явные преобразования
- •Вопросы для самопроверки и контроля Вопросы для самопроверки
- •Контрольные вопросы
- •11. Операторы. Дополнение
- •11.1. Уровень 1
- •11.2. Уровень 2 (унарные или одноместные операторы)
- •11.3. Уровень 3 (мультипликативные операторы)
- •11.4. Уровень 4 (аддитивные операторы)
- •11.5. Уровень 5 (сдвиги)
- •11.6. Уровень 6 (отношения)
- •11.7. Уровень 7 (равенство и неравенство)
- •11.8. Поразрядные операторы
- •11.9. Логические операторы
- •11.10. Уровень 13 (условное выражение)
- •11.11. Уровень 14 (операторы присваивания)
- •11.12. Уровень 15 (оператор ',' - запятая)
- •11.13. Некоторые замечания
- •11.14. Постоянные выражения
- •Вопросы для самопроверки и контроля Вопросы для самопроверки
- •Контрольные вопросы
- •12. Передача данных потоком
- •12.1. Спецификация "s" управляющей строки функций scanf и printf
- •12.2. Функции getchar и putchar
- •12.3. Функции gets и puts
- •12.4. Внутренняя передача данных (функции sscanf и sprintf)
- •13.2. Описание файла
- •13.3. Открытие и закрытие файлов
- •13.4. Средства языка с
- •13.4.1. Открытие и закрытие файла
- •13.4.2. Основные функции обмена
- •13.5. Средства языка Basic
- •13.5.1. Открытие и закрытие файла Инструкция open
- •Инструкция close
- •13.5.2. Работа с файлами Инструкция input
- •Функция input
- •Инструкция line input
- •Инструкция write
- •Инструкция print
- •Инструкция width
- •Длина файла
- •Функция MsgBox
- •Вопросы для самопроверки и контроля Вопросы для самопроверки
- •Контрольные вопросы
- •14. Структура программы
- •14.1. Элементы структуры программы.
- •14.1.1. Язык c
- •14.1.2. Язык Basic
- •14.2. Область видимости (действия) и время жизни переменных
- •14.2.1. Язык c
- •14.2.2. Язык Basic
- •14.3. Проект программы
- •14.3.1. Использование директивы препроцессора #include
- •14.3.2. Средства управления проектом
- •14.4. Инициализация данных
- •2. Массивы.
- •15.1. Указатели
- •Определение указателей
- •Задание значений
- •Вывод значений
- •15.2. Указатели и массивы
- •15.3. Работа со строками
- •15.3.1. Литералы
- •15.3.2. Переменные
- •15.3.3. Операторы и функции
- •15.4. Динамические объекты
- •15.5. Типичные ошибки, связанные с указателями Отсутствие инициализации указателя
- •Двойное указание
- •Hе выполнено освобождение выделенной памяти
- •Задание адреса локальной (auto) переменной
- •15.6. Примеры использования указателей. Структуры данных
- •15.6.1. Стек
- •15.6.2. Однонаправленный список
- •15.7. Ссылки и многомерные массивы
- •15.8. Рекурсивные процедуры
- •15.8.1. Рекурсивное решение
- •15.8.2. Нерекурсивное решение. Стек в виде массива
- •15.8.3. Нерекурсивное решение. Стек в виде списка
- •Вопросы для самопроверки и контроля Вопросы для самопроверки
- •Контрольные вопросы
- •16. Работа с экраhом
- •16.1. Текстовый режим(textmode)
- •16.1.2. Управление режимом и окном
- •16.1.3. Управление атрибутом(цветами символа и фона в окне)
- •16.1.4. Информация о текстовом режиме
- •16.1.5. Пример
- •16.1.6. Пример(продолжение)
- •16.2. Графический режим
- •16.2.1. Установка и закрытие
- •16.2.2. Форматирование Цвета
- •Битовые образы(pattern)
- •Текстовые фонты
- •Восстановление установок по умолчанию
- •16.2.3. Размещение на экране Окна
- •Координаты курсора и перемещения
- •16.2.4. Вывод на экран Текст
- •Прямоугольники
- •Эллипсы
- •Многоугольники
- •Пиксели
- •16.2.5. Дополнительные функции
- •Простые циклы
- •Вложенные циклы
- •Процедуры
- •Работа со строками
- •Приложения
- •П1.1. Меню File (Файл)
- •П1.2. Меню Options (Установки среды)
- •П1.3. Разное
- •П1.4. Редактирование текста
- •П1.5. Сообщения
- •Трансляция
- •Компоновка (редактирование связей)
- •Ошибки времени выполнения
- •П1.6. Отладка
- •Прогон до точки прерывания
- •Пошаговое выполнение программы
- •Установка точек прерывания
- •Получение значений объектов программы
- •П1.7. Окна
- •Управление окнами
- •Приложение 2. Среда разработки Visual Basic Express
- •П2.1. Запуск среды
- •П 2.2. Подготовка к работе с новым проектом
- •П2.3. Окна и режимы работы
- •П2.4. Главное меню
- •П2.5. Меню File (Файл)
- •П2.6. Редактирование текста
- •П2.7. Меню View (Обзор)
- •П2.8. Меню Project (Проект)
- •П2.9. Отладка
- •Точки прерывания
- •Определение значений объектов программы в момент прерывания
- •Продолжение работы
- •П2.10. Меню Tools (Средства)
- •П2.11. Меню Window (Окно)
- •Приложение 3. Ответы на вопросы для самопроверки
- •2. Элементы языка
- •3. Элементы данных
- •4. Выражения
- •5. Основные инструкции
- •6. Ввод-вывод
- •7. Процедуры
- •8. Препроцессор
- •9. Стиль программирования
- •10. Данные. Дополнение
- •11. Операторы. Дополнение
- •12. Передача данных потоком
- •13. Файлы
- •14. Структура программы
- •15. Указатели, массивы, строки
- •16. Работа с экраном
- •17. Управление программой с помощью клавиатуры
- •Приложение 4. Темы для курсовой работы
- •Библиографический список
16.1.6. Пример(продолжение)
Приведенные ниже функции включены в файл window.c.
/* Вывод строки в окно */
void out_text(int x, // Начальная позиция курсора по X
int y, // Начальная позиция курсора по Y
int kol, // Число выводимых символов
int reg, // Режим: r-разрядка, p-плотный
char *text){ // Текст сообщения
int i;
gotoxy(x, y);
for(i=0; i<kol && *(text+i) != '\0'; i++){
if(reg=='r')putch(' ');
if(*(text+i)=='\n'){
y++;
gotoxy(x, y);
}else{
putch(*(text+i));
}
}
} // End out_text
Замечание. Символы второй кодовой страницы надо задавать в виде:
\<код символа в 8-й системе счисления>. См. ниже пример.
/* Рисование рамки */
void ramka(int type, // 0-одинарная, 1-двойная
int width, // ширина(в позициях)
int height){ // высота(в строках)
static unsigned char *cont[ ]={// коды символов псевдографики в 8-й системе
"\332\300\331\277\263\304", // одинарная рамка
"\311\310\274\273\272\315" // двойная рамка
};
int i;
gotoxy(1, 1);
putch(cont[type][0]);
for(i=2; i<width; i++)putch(cont[type][5]);
putch(cont[type][3]);
for(i=2; i<height; i++){
gotoxy(1, i);
putch(cont[type][4]);
gotoxy(width, i);
putch(cont[type][4]);
}
gotoxy(1, height);
putch(cont[type][1]);
for(i=2; i<width; i++)putch(cont[type][5]);
putch(cont[type][2]);
} /* End ramka */
16.2. Графический режим
Графический режим характеризуется установленным драйвером экрана и видеорежимом(mode). Поскольку ОС MS DOS достаточно "древняя", то наиболее высокая по разрешению экрана и числу используемых цветов установка соответствует драйверу VGA с разрешением 640*480 пикселей и 16 цветами. Драйверы представляют собой файлы с расширением bgi(Borland Graphics Interface). Для описанного выше видеорежима подходит драйвер egavga.bgi. Возможно существуют для работы в MS DOS и драйверы SVGA с лучшим качеством, однако для решения наших задач указанного видеорежима достаточно. Чтобы работать в данном режиме, необходимо в пункте Options\Linker\Libraries среды разработки установить флажок Graphics Library. Перечень функций, входящих в эту библиотеку, и пояснения к ним можно найти в пункте Help\ContentsFunctionsGraphics routines.
16.2.1. Установка и закрытие
Поскольку по умолчанию при запуске приложения устанавливается текстовый режим, переход к графическому режиму выполняется следующей функцией:
void initgraph(int* driver, int* mode, char* path);
Она инициализирует графический режим. Символические константы для параметров driver и mode заданы в файле graphics.h. Если в качестве первого параметра задана символическая константа DETECT, то функция находит установленный драйвер и задает режим с максимальным разрешением для него(настоятельно рекомендуется). Третий параметр функции указывает путь к директории, в которой располагаются драйверы.
Пример.
int gd=DETECT, mode;
initgraph(&gd, &mode, "c:\\bc\\bgi");
Если третий параметр – пустая строка, то драйвер экрана должен находиться в директории, из которой производится запуск приложения(текущей).
Пример. initgraph(&gd, &mode, "");
int graphresult(void);
Функция возвращает информацию об исходе последней графической операции. Если инициализация режима прошла упешно, то возвращается 0. Перечень возможных ошибок при выполнении графических операций можно найти в описании функции graphresult в системе Help по ссылке graphics_errors. Для каждой ошибки определены символические константы. Так для успешного исхода используется константа grOk, равная 0. Эту функцию рекомендуется использовать сразу после вызова функции initgraph для проверки установки графического режима.
Пример.
int gd=DETECT, mode;
……………………………
initgraph(&gd, &mode, "");
gerror=graphresult( );
if(gerror != grOk){ // Ошибка инициализации
printf("Ошибка! %s\n", grapherrormsg(gerror));
getch( );
exit(1);
}
char* grapherrormsg(int errorcode);
Функция возвращает указатель на текст сообщения об ошибке, соответствующей коду ошибки, возвращаемому функцией graphresult.
Пример. Возможный текст сообщения из предыдущего примера.
Error! Device driver file not found (EGAVGA.BGI)Файл драйвера EGAVGA.BGI не найден.
То есть данный файл в текущей директории не обнаружен.
void exit(int status);
Функция завершает задачу. При этом:
- закрывает все файлы;
- выводит незаполненные буферы вывода.
Используется обычно при аварийном завершении задачи. Значение параметра status, равную 0, обычно сигнализирует о нормальном завершении, другое – нет. Прототип функции находится в файлах process.h и stdlib.h.
Она не имеет отношения к графическому режиму и описана здесь в связи с тем, что раньше не упоминалась.
void closegraph(void);
Функция закрывает графический режим. Она освобождает всю память, используемую для обеспечения графического режима и восстанавливает тот режим, который был до вызова функции initgraph. Использовать обязательно!
