Программирование в среде Турбо Паскаль (Поляков, Круглов) - страница 110

Если бы значения в выборке были целыми и имели диапазон 0..3 (т.е. занимали два бита), то можно было бы в один байт уместить четыре таких значения и т.д. Логика останется той же, изменятся лишь параметры в процедурах преобразования.

К сожалению, подобный подход нельзя применить к вещественным значениям. Единственное, что можно посоветовать — это посмотреть, нужны ли именно вещественные формы хранения данных. Так, если хранится массив вещественных (Real — 6 байт на элемент) значений размеров чего-либо в метрах с точностью до сантиметра, и самое длинное измерение не превосходит 2,55 м, то гораздо эффективнее будет хранить их как массив размеров в сантиметрах. И одно значение будет свободно размещаться в одном байте! Тип Byte занимает 1 байт — экономия шестикратная.

- 171 -


| { Процедура кодирования X1 и X2 в один байт (X1, X2<=15) }

| PROCEDURE Code2to1( X1,X2 : Byte; VAR X1X2 : Byte );

| BEGIN

| >X1X2 := X1 + (X2 shl 4 )

| END;

| >{Процедура декодирования X1 и X2 из одного байта }

| PROCEDURE DeCode1to2{ X1X2 : Byte; VAR X1,X2 : Byte );

| BEGIN

| >X1 := X1X2 and 15; { X1X2 and $F }

| >X2 := X1X2 shr 4

| >END; VAR {== ПРИМЕР ВЫЗОВА ==}

| >C, C1, C2 : Byte;

| BEGIN

| >Code2to1(8,7, C);

| >WriteLn('8 и 7 - кодируются в —> ',C);

| >DeCode1to2(C, C1, C2);

| >WriteLn(C:3, — декодируются в --> ',C1:-3,' и ',C2);

| >ReadLn { пауза до нажатия клавиши ввода }

| END.


Рис. 9.2

9.3. Логические вычисления и операции отношения


Наличие логического типа Boolean и операций с ним позволяет программировать логические вычисления, причем запись логических выражений будет соответствовать законам Булевой алгебры.

В Турбо Паскале введены четыре логических операции (табл. 9.4, где L1 и L2 — логические константы, переменные или выражения, равные True или False).

Таблица 9.4

Название

Запись

Результат операции

not

Логическое 'НЕ' (отрицание)

not A1

Логическое значение, противоположное значению L1

and

Логическое 'И' (конъюнкция)

L1 и L2

Логическое значение True, если L1 и L2 равны True, и False во всех остальных случаях

- 172 -

or

Логическое 'ИЛИ' (дизъюнкция)

L1 or L2

Логическое значение True, если хотя бы одно из значений L1 или L2 равно True, и False, если L1 и L2 равны False

xor

Логическое исключающее 'ИЛИ'

L1 xor L2

Логическое значение True, если значения L1 и L2 различны, и False, если они равны

Результат операции всегда имеет тип Boolean и может иметь только одно из двух значений : True (истинно) или False (ложно). Логические операции имеют различные приоритеты (см. табл. 9.1), и в случае, если L1 и L2 сами являются логическими выражениями, лучше расставлять скобки, явно задавая порядок логических вычислений. Так, например, запись