Разработка классов на языке Object Pascal. Соколов Е.В. - 6 стр.

UptoLike

Составители: 

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;
Подпрограммы 46, осуществляющие прибавление, вычитание и
присваивание, отличаются от вышеприведенных в первую очередь тем ,
что изменяют один из своих аргументов . Следовательно, этот аргумент
должен быть объявлен как передаваемый по ссылке (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