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

 

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

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

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

106
PROCEDURE matmul(VAR p: ARRAY[I..rp:INTEGER; 1..cp:INTEGER]OF INTEGER;
VAR q: ARRAY[l.,cp: INTEGER; 1.. cq: INTEGER]OF REAL; VAR r: ARRAY[I.. rp: INTEGER; 1..cq: INTEGER]OF REAIJ; VAR -
i,j,k: INTEGER; BEGIN FOR i-l TO cq DO FOR j:-l TO rp DO BEGIN
'FOR k:-l TO cp DO -r[j>i]--r[j,i] + P[j,k].q[k,i]; END
END;
Ъто настраиваемый параметр-массив;* массив г должен совмещаться по размерности\ типу компонент и упаковке с любым массивом) передаваемым в качестве фактического, " параметра
с"
S
ызов процедуры matmul остается неизменным:
matmul( а, Ь, с);
^JaK как же matmul узнает значения eg, rp и cp? В этом и есть изюминка. Настраиваемые параметры-массивы передают в процедуру matmul достаточно информации, чтобы matmul могла подглядеть в вызывающей программе объявления этих массивов. Вот картинка для массива р, когда программа вызывает matmul с фактическим параметром а:^
Q случае совместимости массивов р и а (оба - двумерные, у обоих компоненты типа INTEGER, оба - неупакованные) каждое имя, такое как гр, сопоставляется со значением размерности, например 3.
|астраиваемее параметры-массивы не обеспечивают динамических границ массивов, они позволяют только автоматически устанавливать соответсвие с фиксированной размерностью из исходного объявления типа. Сложная возможность для достижения малого . Лишь немногие версии Паскаля допускают настраиваемые параметры-массивы.
д.
Динамические границы массива в ограниченных пределах можно промоделировать объявлением массивов большего размера и заданием параметров текущей размерности. Идея поясняется следующим фрагментом программы:
PROCEDURE matmul(p: atype; q: btype; г: ctype; i,j,lcINTEGER);
з
r^tmul(^a, J)1 с,,2, ^,^)^^ej^og)
[растраиваемые параметры-массивы позволили бы сообщить процедуре matmul лишь то, что максимально возможные размеры равны 20.
ВЫДОХ... I
107
Uq 0ведите программу bubbles с более существенным, нежели 30, размером константы sizetype ~ скажем 100 или 150. Затем измерьте время сортировки:
• когда входная последовательность задана случайными нажатиями клавиш без какой-либо системы
• когда входная последовательность в основном отсортирована: AAAABBCCCCCCDDE...
но какая-либо буква, выпадает из последовательности: ... EZFFFGGGG...
[JL)o вто р и те предыдущее упражнение, используя вместо сортировки методом пузырька быструю сортировку (с. 97). Какие выводы можно сделать из результатов?
Зо 0зяв за основу программу bases, разработайте специальные процедуры для:
• преобразования чисел из шестнадцатеричной формы записи в десятичную
• преобразования чисел из десятичной формы записи в шестнадцатеричную
Избавившись от чрезмерной общности в программе bases, вы в конечном итоге получите две коротких, элегантных и полезных процедуры.
4Jfo иЗсли вьі знакомы с матричной алгеброй, разработайте набор процедур, подобных процедуре matmul, для сложения, транспонирования и (крепкий орешек) обращения матриц. Используйте параметры для передачи текущей размерности как предлагается в конце предыдущей страницы.
(с. 98) Для хранения литеры в подавляющем большинстве компьютеров отводится 8 бит; изредка используется 6-битовый код (БЭСМ-6, код TEXT); но никогда - 4 бит.
(с. 98) В версии Турбо Паскаль нет никаких ограничений на использование компонент упакованных структур в качестве параметров процедур и функций ~ по очень простой причине: этот компилятор игнорирует слово PACKED.
3) (с. 99) В версии Турбо Паскаль допускается сравнение упакованных
массивов литер разной длины и, кроме того, имеется специальный строковый тип, позволяющий присваивать одной переменной последовательности литер разной длины.
4) (с. 107) То принципиально новое, что обеспечивают настраиваемые
массивы-параметры - это возможность с помощью одной подпрограммы обрабатывать массивы разных размеров.
108
9
ЗНАКОМСТВО С ЗАПИСЯМИ СИНТАКСИС ЗАПИСЕЙ ПЕРСОНАЛЬНЫЕ ЗАПИСИ (ПРИМЕР) ОПЕРАТОР WITH ЧТО ТАКОЕ ВАРИАНТЫ
ЛИШЬ РАЗ УВИДЕВ ПРЕЛЕСТЬ ЗАПИСИ ...
Q т0 время как массив - объединение компонент одинакового типа, запись объединение компонент, вообще говоря, различного
типа. Сравните следующий тип массива: і ^¦^^ _f "infotype"
массив упакованных массивов
TYPE
nametype infotype =
= PACKED ARRAY[I.. 10] OF CHAR, ARRAY[I..3] OF nametype;
с этим вот типом записи:
TYPE
nametype = PACKED ARRAY[I.. 10] OF CHAR; detailtype = RECORD surname, forename: nametype; age: 18..65; grade: (jr,sr,exec) END
запись с полями разного типа
Іеременная может содержать массив целиком
переменная
точно так же она может содержать цел и ком запись:
VAR
. q,r: detailtype;
[Похожим образом адресуются компоненты - в массивах посредством индексов (в квадратных скобках):
a[i]:= 'Wilberforc'; b[2]:= а[1];
а в записях - посредством имени поля (после точки):
q.surname:= 'Wilberforc'; q.age:= 22; q.grade:= jr; r. forename:= q.surname;
51
_ Ja рисунках показаны записи, в состав которых входят компоненты различных типов, в том числе упакованные массивы. С другой стороны, записи сами могут являться компонентами массива. Единственное ограничение на смешение типов в массивах и записях касается массивов: в каждом конкретном массиве все компоненты должны быть одного типа. Пример массива записей; ^
Предыдущая << 1 .. 26 27 28 29 30 31 < 32 > 33 34 35 36 37 38 .. 58 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100