русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Перечисления. Работа с клавиатурой IBM PC


Дата добавления: 2014-02-04; просмотров: 771; Нарушение авторских прав


Оператор цикла do-while.

Оператор цикла do-while предназначен для реализации циклических алгоритмов и имеет следующую форму записи

 

БНФ:

 

цикл_do-while =

"do" оператор "while" "("выражение")" ";"

 

Оператор выполняется циклически до тех пор, пока выражение отлично от нуля. В отличие от оператора while, тело оператора do-while выполняется хотя бы один раз до первого вычисления условия.

Работу оператора do-while проиллюстрируем на примере программы, которая определяет корень уравнения x-cos(sin(x))=0 методом итераций, который заключается в циклическом вычислении очередного приближения x_new по предыдущему приближению x_old, согласно выражению x_new=cos(sin(x_old)), вытекающему из исходного уравнения. Процесс итерации заканчивается тогда, когда x_new станет равен x_old. Программа, реализующая этот алгоритм, приведена ниже.

 

#include <stdio.h>

#include <math.h>

 

/* Решение уравнения x-cos(sin(x))=0 */

void main (void)

{

double x_new=0.9, x_old, eps=0.0001;

do

{

x_old = x_new;

x_new = cos(sin(x_old));

} while ( fabs( x_new - x_old ) > eps );

printf ( "x=%lf", x_new );

}

 

Сравнение двух вещественных чисел осуществляется с использованием точности eps. Это необходимо потому, что из-за погрешностей округления прямая проверка на равенство двух вещественных чисел скорее всего даст в результате 0 (ложь).

Перечисления используются для задания символических имен константам целого типа.

 

БНФ:

перечисление =

"enum" [ имя_перечисления ]

"{"

имя_конст [ "=" конст_выр ]

{ "," имя_конст [ "=" конст_выр ] }

"};"



 

Здесь имя_перечисления - любое символическое имя; имя_конст - символическое имя, назначаемое константе; конст_выр - константное выражение, то есть такое, которое не содержит переменных и функций и может быть определено на этапе компиляции.

Если константное выражение отсутствует, то имени назначается значение предыдущего выражения, увеличенное на единицу. Если отсутствует выражение, соответствующее первому имени константы, то ему назначается значение 0. Например:

 

enum DAYS { MON=1, TUE, WED, THU, FRI, SAT, SUN };

enum MONTH { JAN=1, FEB, MAR, APR, MAY, JUN,

JUL, AUG, SEP, OCT, NOV, DEC };

 

В дальнейшем в программе эти имена можно использовать вместо целых констант. Например, DEC вместо 12, THU вместо 4 и т. д.

Рассмотрим использование перечислений для организации удобной работы с клавиатурой IBM PC.

В библиотеке conio имеется функция, осуществляющая ввод одиночного символа (точнее его кода) без отображения его на экране дисплея. Она имеет следующий прототип:

 

int getch( void );

 

При обращении к этой функции выполнение программы приостанавливается до нажатия на клавишу. После нажатия на клавишу код соответствующего символа возвращается в виде целого числа.

Некоторым клавишам клавиатуры не соответствует ни один символ из кодовой таблицы. При нажатии на подобные клавиши getch() вначале возвращает нулевое значение. Если при этом обратиться к функции повторно, то она возвратит условный номер клавиши на клавиатуре, так называемый скэн-код. Это свойство используется в функции GetCh() для расширения возможностей getch(). Функция GetCh() будет возвращать коды символов в обычных случаях. При нажатии специальной клавиши GetCh() возвратит скэн-код, увеличенный на 256 (0x100) или на 512 (0x200), в зависимости от того, была ли нажата клавиша Shift или нет. Текст функции GetCh() приводится ниже.

 

#include <conio.h>

#include <bios.h>

/* Ввод одиночного символа с клавиатуры */

int GetCh( void )

{

int ch;

if( ( ch = getch() ) == 0 )

ch = getch() | ( bioskey(2) & 3 ? 0x200 : 0x100 );

return ch;

}

 

Здесь, выражение bioskey(2) & 3 осуществляет проверку нажатия клавиши Shift и отлично от нуля, если последняя нажата.

Прототип функции GetCh() и коды специальных клавиш перечисления KeyboardCodes, получаемых с помощью этой функции, следует поместить в файл, например, keyboard.h и в дальнейшей использовать не числовые значения кодов, а только символические имена. Фрагмент перечисления KeyboardCodes приведен ниже:

 

enum KeyboardCodes

{

kbF1 = 315, kbF2, kbF3, kbF4, ..., kbF10,

kbShiftF1 = 596, kbShiftF2, kbShiftF3, ..., kbShiftF10,

kbCtrlF1 = 350, kbCtrlF2, kbCtrlF3, ..., kbCtrlF10,

kbAltF1 = 360, kbAltF2, kbAltF3, ..., kbAltF10,

kbAlt1 = 376, kbAlt2, kbAlt3, ..., kbAlt0,

kbAltQ = 272, kbAltW, kbAltE, ..., kbAltP,

kbAltA = 286, kbAltS, kbAltD, ..., kbAltL,

kbAltZ = 300, kbAltX, kbAltC, ..., kbAltM,

kbCtrlA = 1, kbCtrlB, kbCtrlC, ..., kbCtrlZ,

 

kbUp = 328, kbDown = 336, kbTab = 9,

kbCtrlUp = 397, kbCtrlDown = 401, kbCtrlTab = 404,

kbAltUp = 408, kbAltDown = 416, kbAltTab = 421,

kbShiftUp = 584, kbShiftDown = 592, kbShiftTab = 527,

 

kbRight = 333, kbLeft = 331, kbEsc = 27,

kbCtrlRight = 372, kbCtrlLeft = 371,

kbAltRight = 413, kbAltLeft = 411, kbAltEsc = 257,

kbShiftRight = 589, kbShiftLeft = 587,

 

kbPgUp = 329, kbPgDn = 337, kbIns = 338,

kbCtrlPgUp = 388, kbCtrlPgDn = 374, kbCtrlIns = 513,

kbAltPgUp = 409, kbAltPgDn = 417, kbAltIns = 418,

kbShiftPgUp = 585, kbShiftPgDn = 593, kbShiftIns = 594,

 

kbHome = 327, kbEnd = 335, kbDel = 339,

kbCtrlHome = 375, kbCtrlEnd = 373, kbCtrlDel = 515,

kbAltHome = 407, kbAltEnd = 415, kbAltDel = 419,

kbShiftHome = 583, kbShiftEnd = 591, kbShiftDel = 595,

 

kbEnter = 13, kbBackspace = 8,

kbCtrlEnter = 10, kbCtrlBackspace = 127,

kbAltEnter = 284, kbAltBackspace = 270

};

 

Предложенная методика работы с клавиатурой IBM PC не требует никаких изменений исходных текстов программ, использующих функцию GetCh(), в случае изменения аппаратных средств.



<== предыдущая лекция | следующая лекция ==>
Множественный выбор. Оператор переключения | Пример организации светового меню


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.466 сек.