ВУЗ:
Составители:
Рубрика:
6
Размер же вектора зависит от числа n и, вообще говор я , может быть
сколь угодно большим . Поэтому следует использовать один из состав-
ных типов : запись (record), массив (array) или множество (set).
Поскольку компоненты вектора могут иметь одинаковые значе-
ния, тип «множество» исключается. Запись обычно объединяет значе-
ния, имеющие различные содержательный смысл, тип и размер. Их по-
следовательный перебор в цикле невозможен, и это может затруднить
последущую реализацию подпрограмм. Элементы массива напротив со-
вершенно равноправны и могут быть легко перечис лены с помощью ин-
дексирования. Очевидно, что этот вариант в наибольшей степени соот -
ветствует семантике вектора, поэтому в качестве типа данных выбираем
массив фиксированной размерности. При этом константа, оп ределяю-
щая размерность, должна быть объявлена до определения типа:
const Dim = n; // вместо n необходимо указать конкретное целое число
type IVector = array[1..Dim] of Integer;
2. Перейдем теперь к объявлению процедур и функций. Здесь ос-
новную роль играет содержательный смысл выполняемых ими дейс твий.
Вычисление суммы и разности — бинарные операции на множ е -
стве векторов размерности n. Поэтому соответствующие подпрограммы
будут функциями с двумя параметрами типа IVector и возвращаемыми
значениями типа IVector:
function Plus (v1, v2: IVector): IVector; // вычисление суммы
function Minus(v1, v2: IVector): IVector; // вычисление разности
Скалярное произведение — также функция двух аргументов , яв -
ляющихся векторами, но ее значение — это число, получающееся из
компонент векторов последовательностью операций сложения и умно-
жения. Поскольку мы рассматриваем векторы с целочисленными компо-
нентами, результат выполнения данной последовательности снова будет
целым числом :
function ScalarProduct(v1, v2: IVector): Integer;
Подпрограммы 4–6, осуществляющие прибавление, вычитание и
присваивание, отличаются от вышеприведенных в первую очередь тем ,
что изменяют один из своих аргументов . Следовательно, этот аргумент
должен быть объявлен как передаваемый по ссылке (var-параметр). Кро-
ме того, в языке Object Pascal оператор присваивания не возвращает зна-
чения, поэтому в нашем случае реализующая его подпрограмма должна
быть процедурой . Поскольку прибавление и вычитание — это арифм е-
тические операторы с присваиванием , к ним могут быть прим енены те
же соображения. Тем с амым, получаем следующие объявления:
Раз м ер же в ектора з ав ис ит от чис л а n и, в ообщ е гов оря, м ожет бы т ь с кол ь угод но бол ь шим . Поэтом у с л ед ует ис пол ь з ов ат ь од ин из с ос т ав - ны х т ипов : з апис ь (record), м ас с ив (array) ил и м ножес т в о(set). Пос кол ь ку ком понент ы в ектора м огут им ет ь од инаков ы е з наче- ния, т ип «м ножес т в о» ис кл ючает с я. Запис ь обы чно объед иняет з наче- ния, им еющ ие раз л ичны е с од ержат ел ь ны й с м ы с л , т ип и раз м ер. И х по- с л ед ов ат ел ь ны й перебор в ц икл е нев оз м ожен, и это м ожет з ат руд нит ь пос л ед ущ ую реал из ац ию под програм м . Э л ем ент ы м ас с ив а напрот ив с о- в ершеннорав ноправ ны и м огут бы т ь л егкоперечис л ены с пом ощ ь ю ин- д екс иров ания. О чев ид но, чт оэтот в ариант в наибол ь шей с т епени с оот - в ет с т в ует с ем ант ике в ектора, поэтом у в качес т в е т ипа д анны х в ы бираем м ас с ив фикс иров анной раз м ернос т и. При этом конс т ант а, опред ел яю- щ ая раз м ернос т ь , д ол жна бы т ь объяв л ена д оопред ел ения т ипа: const Dim = n; // вместо n необходимо указать конкретное целое число type IVector = array[1..Dim] of Integer; 2. Перейд ем т еперь к объяв л ению проц ед ур и функц ий. Зд ес ь ос - нов ную рол ь играет с од ержат ел ь ны й с м ы с л в ы пол няем ы х им и д ейс т в ий. Вы чис л ение с ум м ы и раз нос т и — бинарны е операц ии на м ноже- с т в е в екторов раз м ернос т и n. Поэтом у с оот в ет с т в ующ ие под програм м ы буд ут функц иям и с д в ум я парам ет рам и т ипа IVector и в оз в ращ аем ы м и з начениям и т ипа IVector: function Plus (v1, v2: IVector): IVector; // вычисление суммы function Minus(v1, v2: IVector): IVector; // вычисление разности С кал ярное произ в ед ение — т акже функц ия д в ух аргум ентов , яв - л яющ ихс я в екторам и, но ее з начение — это чис л о, пол учающ еес я из ком понент в екторов пос л ед ов ат ел ь нос т ь ю операц ий с л ожения и ум но- жения. Пос кол ь ку м ы рас с м ат рив аем в екторы с ц ел очис л енны м и ком по- нент ам и, рез ул ь т ат в ы пол нения д анной пос л ед ов ат ел ь нос т и с нов а буд ет ц ел ы м чис л ом : function ScalarProduct(v1, v2: IVector): Integer; Под програм м ы 4–6, ос ущ ес т в л яющ ие прибав л ение, в ы чит ание и прис в аив ание, отл ичают с я от в ы шеприв ед енны х в перв ую очеред ь т ем , чтоиз м еняют од ин из с в оих аргум ентов . С л ед ов ат ел ь но, этот аргум ент д ол жен бы т ь объяв л ен как перед ав аем ы й пос с ы л ке (var-парам ет р). Кро- м е того, в яз ы ке Object Pascal оператор прис в аив ания не в оз в ращ ает з на- чения, поэтом у в нашем с л учае реал из ующ ая егопод програм м а д ол жна бы т ь проц ед урой. Пос кол ь ку прибав л ение и в ы чит ание — это арифм е- т ичес кие операторы с прис в аив анием , к ним м огут бы т ь прим енены т е же с оображения. Тем с ам ы м , пол учаем с л ед ующ ие объяв л ения: 6
Страницы
- « первая
- ‹ предыдущая
- …
- 4
- 5
- 6
- 7
- 8
- …
- следующая ›
- последняя »