Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Алкок Д. -> "Язык Паскаль в иллюстрациях" -> 29

Язык Паскаль в иллюстрациях - Алкок Д.

Алкок Д. Язык Паскаль в иллюстрациях — M.: Мир, 1991. — 192 c.
ISBN 5-03-001292-3
Скачать (прямая ссылка): yazpaskal1991.djvu
Предыдущая << 1 .. 23 24 25 26 27 28 < 29 > 30 31 32 33 34 35 .. 58 >> Следующая

Y
(?)братите внимание, как переключается условие между <- и >. Логическое выражение letters[pointers[i]]>letters[pointers[j]] принимает значение true или false. Это значение сравнивается с тем значением, которое хранится в переменной condition. Это значение, посредством NOT, переключается- между true и false.
(3.
каждый раз, когда процедура вызывает себя, компьютер должен запомнить значения, параметров и локальных переменных для возможного использования их при возврате. Это было проиллюстрировано на простом примере рекурсии на с. 75. В примере выше, переменные jstep и condition можно было бы сделать глобальными и, таким образом, сэкономить память. Но поступать так в столь маленьких задачах, как приведенные в этой книжке, было бы глупо.
4-458
97
^^^^^ л КОМПРОМИСС МЕЖДУ БЫСТРОДЕЙСТВИЕМ И
S7fflAfA(ftfafRA ОБЪЕМОМ ПАМЯТИ (НЕКОТОРЫЕ КОМПИЛЯТОРЫ U JJWli>4-/lw»ll><#0 УПАКОВЫВАЮТ АВТОМАТИЧЕСКИ)
?^ля представления логического значения требуется один бит [] (т.е. двоичная
цифра); литера обычно требует четыре бита 1 ( м |; целое - 16 или 32 бита
І і і і і і і і І і і і і і і і І і і.....1 і і і і і і і I. Однако, в компьютере единица хранения -
- это слово. Размер этого слова зависит от марки и модели компьютера, обычно это - 32 бита. Отсюда следует, что хранение логических значений и литер (возможно, даже целых) по одному в слове - расточительство памяти.
Q Паскале слово PACKED в определении массива (или записи) дает компилятору право упаковать информацию более плотно, чем один элемент на слово. Например, строчка:
PACKED ARRAY [1..32768] OF BOOLEAN
если, конечно, компилятор упакует компоненты этого массива до тридцати двух в слове, позволит, быть может, достьчь чего то, что в другом случае было бы невозможно. (Некоторые современные компиляторы выполняют упаковку автоматически.)
[jqeha за сэкономленную память время выполнения.
пониженная скорость обращения к памяти во
з.
Іаланс между быстродействием и памятью в некоторых системах может достигаться выборочной упаковкой: скажем, обрабатывается неупакованный массив, затем для хранения его содержимое копируется в упакованный массив, Для этих целей в Паскале имеются процедуры PACK и UNPACK._
РАСК( logse
[s+last-1]
UNPACK( tight, loose,
He используйте компоненты упакованного} * массива в качестве параметров процедур
или функций - это может не сработать:* 'х:= SQR(loose[3]); {o.k.}
tight
[last]P^[s+lasM] ^
loose
Іиже приведены два типичных обращения к этим стандартным процедурам:
VAR prolix: ARRAY[I.. 1000] OF CHAR;
pith: PACKED ARRAY[I.. 1000] OF CHAR;
98
3WAK
КЭАХ^аШЗ® В НЕКОТОРЫХ ВЕРСИЯХ п
л^ ^r-w-vл лл rw. ИМЕЕТСЯ СПЕЦИАЛЬНЫЙ
Ш СТРОКОВЫЙ тип
Строковая константа состоит из букв, заключенных в апострофы. Если в строку нужно включить апостроф, то ои должен быть записан в виде пары апострофов:
1 WRITELNfOohl 4t"s cold!') "| ^^^^І^Г^ш)
йод строковую переменную в стандартном Паскале выделяется PACKED ARRAY[] OF CHAR:
VAR shiver: PACKED ARRAY[I..10] OF CHAR
shiver
і і 11 і і і
(Строковые константы можно присваивать строковым переменным
10
shiver :- 4t"s cold!'; WRITELNCPohl ', shiver)
IjOIo в стандартном Паскале присваивание допустимо, только если количество литер константы совпадает с размером упакованного массива^
shiver 'ОопГ;^=^ shiver 'Oohltllf; { o.k. }
ВО МНОГИХ СОВРЕМЕННЫХ^ КОМПИЛЯТОРАХ НЕ ТРЕБУЕТСЯ! СОВПАДЕНИЯ ДЛИН
(Строки можно сравнивать, для этого надо, чтобы число литер в них совпадало. Можно использовать любой компаратор (-, о, >- и т.д.):
WRITELN(shіver - 'Ooh!!!!!*); WRITELN(shiver > 'Ooh!*);
(^равнение выполняется на основе порядковых значений. Литеры двух строк сопоставляются начиная с левого края, пока не встретится отличие. Строка, в которой первая несовпадающая литера имеет большее порядковое значение, считается большей. Отсутствие неравных литер означает равенство строк:
*abcz' < 'abda* 'abcdef'-'abcdef
/True\ нет отличий)
(Дорядок литер в интервалах от '0' до '9', от 'А' до 'Z* и от 'а' до 'z' определяется Паскалем; в остальном порядковые значения литер зависят от символьного кода конкретной системы, это, как правило, - код ASCII.
Зо:
зможна обработка отдельных литер строки:
FOR і:-1 ТО 5 DO
shiver[i+5]:-shiver[i]; WRITELN(shiver)
OooohOooohv
Однако не все версии Паскаля допускают использование компонент упакованного массива в качестве параметров процедур (см. напротив). Например, WRlTE(shiver[i]), возможно, придется заменить на ch:-shiver[i]; WRITE(ch).
{^)тих довольно ограниченных средств все же достаточно для создания набора мощных процедур строковой обработки, что демонстрируется в гл. 13.
99
4*
ИЛЛЮСТРАЦИЯ ОБРАБОТКИ СТРОК КАК МАССИВОВ
^J/дивите своих друзей. Запишите пример на умножение длинных чисел, вроде этого, а затем начинайте записывать ответ, цифру за цифрой справа налево выполняя все действия в уме.
Gjj^OKyc состоит в том, чтобы мысленно перевернуть нижнее число и постепенно сдвигать его влево под верхним числом. На каждом шаге перемножьте цифры, лежащие друг под другом и сложите результаты.Запишите последнюю цифру, а остальное запомните для последующего шага. Справа изображен весь процесс целиком.
Предыдущая << 1 .. 23 24 25 26 27 28 < 29 > 30 31 32 33 34 35 .. 58 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100