f) Выйти из программы
в. Программа выполняет действия, соответствующие пунктам меню. Позиции меню d и е требуют ввода дополнительных данных, и каждая из них должна позволять прерывать ввод.
г. По завершении выполнения отдельной функции программа отображает меню снова; исключением является позиция f.
д. Между запусками программы данные сохраняются в файле. При очередном запуске программа сначала загружает данные из файла, если они есть.
9. Авиакомпания Colossus Airlines (из упражнения 8) приобрела второй самолет (с тем же количеством мест) и расширила обслуживание до четырех рейсов ежедневно (рейсы с номерами 102, 311, 444 и 519). Модифицируйте программу для обработки четырех рейсов. Она должна предлагать меню верхнего уровня, которое позволяет выбирать интересующий рейс и выходить из программы. После выбора рейса должно отобразиться меню, подобное показанному в упражнении 8. Однако в него должен быть добавлен новый элемент — подтверждение брони места. Кроме того, вариант выхода из программы потребуется заменить вариантом возвращения в меню верхнего уровня. При каждом отображении должен указываться номер рейса, обрабатываемого в текущий момент. Вдобавок при отображении брони мест должно выводиться состояние подтверждения.
10. Напишите программу, которая реализует меню с использованием массива указателей на функции. Например, выбор пункта а в меню должен активизировать функцию, на которую указывает первый элемент массива.
глава 14
1. Напишите функцию по имени transform(), которая принимает четыре аргумента: имя исходного массива, содержащего данные типа double, имя целевого массива типа double, значение int, представляющее количество элементов массива, и имя функции (или, что эквивалентно, указатель на функцию). Функция transform]) должна применять указанную функцию к каждому элементу исходного массива и помещать возвращаемое ею значение в целевой массив. Например, вызов
transform(source, target, 100, sin);
должен установить target [0] в sin (source [0] ) и сделать то же самое для 100 элементов массива. Протестируйте функцию в программе, которая вызывает transform() четыре раза, используя в качестве аргументов две функции из библиотеки math.h и две подходящих функции, которые написаны вами специально для transform().
15
Манипулирование
битами
В ЭТОЙ ГЛАВЕ...
• Операции: &, |,^, », <<, &=, | =, ^=, >>=, << =
• Обзор двоичной, восьмеричной
и шестнадцатеричной систем счисления
• Два средства языка С для обработки отдельных битов значения: побитовые операции и битовые поля
• Ключевые слова: _Alignas, _Alignof
628 глава 15
Я
зык С позволяет управлять индивидуальными битами значения переменной.
Может возникнуть вопрос: для чего это нужно? Не сомневайтесь, что иногда такая возможность необходима или, по крайней мере, удобна. Примером может служить управление некоторым физическим устройством, что часто связано с передачей нескольких битов, причем каждый из них имеет определенный смысл. Кроме того, информация о файлах в операционной системе обычно хранится в виде определенных битов, указывающих на отдельные элементы. Многие операции сжатия и шифрования связаны с управлением битами. Языки высокого уровня, как правило, не обеспечивают такого уровня детализации. Способность совмещать возможности языка высокого уровня с операциями на уровне, который обычно оставляется за языком ассемблера, делает С предпочтительным выбором для написания драйверов устройств и встраиваемого кода.
В этой главе мы исследуем возможности языка С по работе с битами, первоначально ознакомившись с понятиями бита, байта, двоичной и других систем счисления.
Двоичные числа, биты и байты
Обычная форма записи чисел основана на числе 10. Например, число 2157 в позиции тысяч содержит цифру 2, в позиции сотен — 1, в позиции десятков — 5, а в позиции единиц — 7. Это означает, что число 2157 можно рассматривать следующим образом:
2 х 1000 +1x100+5x10+7x1!
Принимая во внимание, что 1000 — это 10 в кубе, 100 — это десять в квадрате, 10 - 10 в первой степени, а 1 — это 10 (как и любое другое положительное число) в нулевой степени, число 2157 можно записать так:
2 х 10 3+ 1 х 10 2+ 5 х 10 1+ 7 х 10 0!
Поскольку привычная система записи чисел основана на степенях 10, мы говорим, что число 2157 записано по основанию 10.
Люди пользуются десятичной системой счисления потому, что у них на руках 10 пальцев. Тогда будем считать, что у бита только два пальца, т.к. он может быть установлен лишь в 0 или 1 (выключен или включен). Таким образом, для компьютера естественной является двоичная система счисления. В ней для записи чисел используются степени 2, а не 10. Числа, выраженные по основанию 2, называют двоичными. Число 2 играет такую же роль в двоичной системе, как число 10 в десятичной. Например, двоичная запись 1101 означает:
Читать дальше