Изез ипПЫаше;
Как правило, в интерфейсной части модуля определяют объектные типы. В разделе 1шр1ешеп1: а11оп осуществляется реализация методов объектов. Пример. \Зп±Ь таЪг±сез; 1пЪег1: асе изез сгЪ; СопзЪ тах = 3; Ъуре з" Ьг10 = 51: г1пд [10]; ша'Ьг1х = аггау[1..шах, 1..шах] о^ рол_п1: ег; сошр1ех = гесогс! ге, 1Ш: геа1; Епс1; сошр1ех_р!: г = Асошр1ех; сотр1ех_ша1: г1х = аггау[1..тах, 1..тах] оИ сотр1ех; та'Ьг1х_оЬз = оЬ^есЬ М: та{: г1х; сопз'Ьгис'Ьог л.пл.1:; ргосес! иге зе1: _'Ьо_2его ^аг р: рол_п1: ег); V^^'Ьиа1; ргосес! иге зса1аг_зит (сопзЪ р, я: рол_п1: ег; Vа^ г: рол.п'Ьег); V^^'Ьиа1; ргосес! иге зса1аг_ргос1ис1: (сопз'Ь р, я: рол.п'Ьег; Vа^ г: рол-п-Ьег); V^^'Ьиа1; ргосес! иге та1: г1х_зит (сопз'Ь А, В: таЬг^х); ргосес! иге рг1п1: (пате: з^гЮ); аезЪгисЬог с1опе; еп< 1; 1тр1етеп'Ьа'Ь10п сопз'Ьгис'Ьог та1: г1х_оЬз. л.пл.1:; Ьед±п еп< 1; ргосейиге та1: г1х_оЪСГ.та1: г1х_ргос1ис1: (сопз'Ь А, В: та1: г1х); Vа^ к: могс1; ргос!, зит: рол.п1: ег; Ьед±п деЪтет(ргос1, 51ге0^ (М [ 1, 1 ])); ^ог 1: =1 -Ьо тах с! о ^ог к: =1 -Ьо тах с1о Ьед±п зит: = М[1, к]; зе-Ь_'Ьо_2его (зит); ^ог ^: =1 -Ьо тах ск> Ьед±п зса1аг_ргос! ис1: (А [1, СГ], В [0", к], ргос!); зса1аг_зит (зит, ргос!, зит); епс! еп< 1; ^геетет (ргос!, 31ге0^ (М [1, 1])); Епс1; ^ез^гисЬор та1: г1х_оЪ1Т. с1опе; Ьед±п еп< 1; Епс1. Задачи и упражнения Объекты в Турбо-Паскале Упражнение № 1. Знакомство с типом «объект». Работа с модулем, содержащим объект «звезда» Рассмотрим модуль 0пр1ап1. В нем определен объект РогИ^оп, позволяющий инициализировать положение точки на экране дисплея, и объект-потомок зъаг, наследующий свойства объекта Рог: И: 1оп. Методы объекта з^аг позволяют устанавливать точку по заданным координатам, с заданным цветом, перемещать и гасить ее. Ниже приведен полный листинг модуля. Запишите этот модуль в виде файла с именем 11пр1ап1.ра8. 11x111: 0пр1ап1; 1пЪег^асе изез СгарЪ, СгЪ; " Ьуре Ро2л_-Ыоп = оЬ^есЬ Х, У: 1п1: едег; ргосейиге 1пл.{: (Соогс1Х, Соогс1У: 1п" Ьедег); ^ипсЪ1оп СеЬХ: 1п1: едег; ^ипс" Ыоп Се1: У: 1п" Ьедег; епс1; ЗЪаг = оЬ^есЪ (Ро211: л_оп) У151Ые: Воо1еап; Со1ог: ДОогс!; сопз" Ьгис" Ьог 1пл_1: (Соогс1Х, Соогс1У: 1п" Ьедег; 1пИ: Со1ог: Могс!); < 1ез" Ьгис" Ьог Эопе; V^^1: иа1; ^ипсЫоп 1зУ151Ые: Воо1еап; ргосейиге ЗЪом; V^^1: иа1; ргосейиге ВНпй; V^^■ Ьиа1; ргосейиге ^шр (Ыех" ЬХ, Ыех-ЬУ: 1п1: едег); V^^■ Ьиа1; епс1; 1шр1ешеп-Ьа-Ыоп I ** -к-к-к-к-к-к-к-к методы объекта Ро21" Ыоп *************** } ргосейиге Р02Л--Ы0П. 1пл." Ь (Соогс1Х, Соогс1У: 1п-Ьедег); Ьед1п X: =Соогс1Х; У: =Соогс1У; епс1; ^ипсЫоп Ро2л_-Ыоп. Се*: Х: 1п-Ьедег; Ьед1п Се1: Х: =Х; еп< 1; ^ипсЪ1оп Ро21^: 1оп. Се1: У: 1п*: едег; Ьед1п Се" ЬУ: =У; епс1; I -к-к -к-к-к-к-к-к-к-к Методы объекта 511.а2Г ****************** | сопз" Ьгис" Ьог ЗЪаг. 1пл_1: (Соогс1Х, Соогс1У: 1п-Ьедег; 1пл_{: Со1ог: ЭДогс!); Ьед1п Ро21" Ыоп. 1п1" Ь (Соогс1Х, Соогс1У); У151Ые: = Еа1зе; Со1ог: = 1п11: Со1ог; еп< 1; йез-ЪгисЪог З-Ьаг.Эопе; Ьед±п ВПпс1; еп< 1; ргосейиге 51: аг.5Ъом; Ьед±п У151Ые: = Тгие; Ри" ЬР1хе1 (X, У, Со1ог); епс1; ^ипсЫоп 5" Ьаг. 1зУ1з1Ые: Воо1еап; Ьед±п 1зУ151Ые: = У1зл.Ые; Епс1; ргосейиге 5" Ьаг. В1л_пс1; Ьед±п У15Ше: = Га1зе; РиЪР1хе1 (X, У, Се1: ВкСо1ог); {точка закрашивается фоновым цветом} Епс1; ргосейиге 5" Ьаг. Оитр; { (Ыех-ЬХ, Ыех-ЬУ: л_п" Ьедег); } Ьед±п ВИпй; X: = Ыех" ЬХ; У: = ЫехЪУ; ЗЪом; епс1; {секции инициализации нет} Епс1. Пример 78. Программа «блуждающая звезда». В нижеприведенной программе используется объект 31: а г из подключаемого модуля Шр1ап1. ьри. Предполагается, что модуль был предварительно откомпилирован. После инициализации и установки точки (переменная Аз^аг) в цикле происходит гашение и установка точки с новыми координатами, определяемыми случайным образом. Ргодгат Ехатр1е_7 8, 5" Ьаг1; ХДзез СгЬ, СгарЪ, 11пр1ап1; Уаг СгарМгл^ег, СгарЪМос1е, ЕггогСос1е: 1п1: едег; А5" Ьаг: 31: аг; 1: 1п{: едег; Ьед1п Капс1от12: е; СгарМгл^ег: =Бе1: ес1:; 1пл_1: СгарЪ (ОгарМгл^ег, СгарЪМос1е, ' '); ±± СгарЬКези11: ОбгОк ЪЬеп На11: (1); Аз" Ьаг. 1п1" Ь (200, 100, 15); {инициализация точки} Аз^аг.зЪом; геасИп; {установка точки до нажатия ввода} ^ог 1: =1 Ьо 10 До Ьед±п АзЪаг.Ыл_пс1; {гашение точки} Аз^аг.СГитр (50+Капс1от (400), 50+Капс1от (300)); Аз-Ьаг.зЪом; геасИп; {установка точки в новом случайном месте} еп< 1; АЗЪаг.Бопе; С1озеСгарЪ; Еп< 1. Пример 79. Программа «звездное небо с мигающими звездами». С использованием модуля Опр1ап1.ъри в программе задается массив экземпляров объекта зъаг. Ргодгат Ехатр1е_7 9, 51: аг2; 11зе5 СгЪ, СгарЪ, Ш1р1ап1; Уаг СгарМгл^ег, СгарЪМос1е, ЕггогСос1е: 1п1: едег; АЗ" Ьаг: аггау [ 1.. 200 ] о^ ЗЪаг; 1/5: л.п'Ьедег; Ъед±п СгарМгл^ег: = Бе^есЬ; 1пл_1: Сгар11 (СгарМгл^ег, СгарЪМос1е, ' '); СгарЬКезиИ: < > СгОк ЪЬеп На11: (1); Капс1от12е; ^ог л_: =1 Ьо 200 с! о {начальная установка 200 звезд} Ъед±п Аз" Ьаг [ 1 ]. 1пИ: (50 + гапс1от (350), 50 + гапс1от (250), 15); Аз'Ьаг [1]. зЪом; еп< 3; геас11п; г ере а*: з: =гапс1от(199)+1; Аз*: аг [з].ЪИпс!; с! е1ау(100); Аз*: аг [з]. зЪоте; 1111^11 Кеургеззес!; геас11п; ^ог 1: =1 " Ьо 200 йо АЗ" Ьаг [ 1 ]. Эопе; С1озеСгарЬ; Епс!. Пример 80. Программа «звездное небо с пролетающим метеоритом». В алгоритм предыдущей программы добавлен экземпляр вз*: аг, который двигается прямолинейно до границ рассматриваемой области. Ргодгат Ехатр1е_80, ЗЪагЗ; Цвез СгЪ, СгарЪ, 11пр1ап1; Уаг СгарМгл^ег, СгарЪМос1е, ЕггогСос1е: 1п1: едег; АЗ" Ьаг: аггау [ 1.. 200 ] о^ ЗЪаг; ВЗ" Ьаг: ЗЪаг; л_, з: л.п'Ьедег; Ъед±п СгарМгл^ег: = Бе^есЬ; 1п11: Сгар11 (СгарМгл^ег, СгарЪМос1е, ' 1); СгарЬКезиИ: < > СгОк ЪЬеп На11: (1); Капс1от±2е; ^ог 1: =1 -Ьо 2 00 с! о {начальная установка 200 звезд} Ъед±п Аз" Ьаг [1]. 1пИ: (5 0 + гапс1от (35 0), 5 О + га'пйот (2 5 0), дгееп); Аз'Ьаг [ 1]. зЪом; еп< 1; ВЗ" Ьаг. 1п1" Ь (100, 60, теМЪе); ВЗ^аг.зЬом; {начальная установка метеорита} геас11п; 1: =1; гереаЬ з: =гапс! от (199) +1; АзЪаг [з].Ыл.пс1; < 2е1ау ('200); АзЪаг [з]. зЪсж; ВЗЪаг.СГитр (100 + 1, 60 + 1); ВЗЪаг.зЪою; 1: =1+1; ипЪИ (КеургеззесО ог (ВЗЪаг.СеЪХ> 400) ог (ВЗЪаг.СеЪУ> 300); {останов по нажатию любой клавиши, либо когда метеорит долетит до границы области} геа< 11п; ^ог л_: =1 Ьо 200 До АЗЪаг [1]. Бопе; ВЗ^аг.Бопе; С1озеСгарЬ; Еп< 1. Упражнение № 2. Работа с модулем, содержащим объекты «звезда» и «планета» В следующем модуле описаны объекты: «звезда» и «планета». С их помощью на экране дисплея можно изображать точку — «звезду» и закрашенный круг — «планету» заданного цвета, удалять, инициировать и перемещать их. Объект Ро21^1оп инициирует положение точки на экране дисплея и запоминает ее координаты. Объект з*: аг наследует свойства РогИ^оп, устанавливает точку с заданными координатами и с заданным цветом. Его методы позволяют перемещать и гасить точку. Объект Р1апеъ наследует свойства з*: аг и имеет аналогичные методы по инициализации, установке и перемещению закрашенного круга. Рекомендуется записать текст модуля ^Р1апе^ в файл с именем ар1апеъ.раз и откомпилировать его с целью получения файла ар1апе^.-ьри. Ш1 ±Ь ^Р1апеЬ; 1п-Ьег^асе изез СгарЪ, СгЪ; ■ Ьуре Ро21 " Ь1 оп = о^есЬ Х, У: 1п" Ьедег; ргосейиге 1пИ (СоогйХ, Соогс1У: 1п-Ьедег); ^ипсЫоп Се-ЬХ: 1п-Ьедег; ^ипсЫоп Се-ЬУ: 1п-Ьедег; епй; ЗЪагРЪг=Л5*: аг; З-Ьаг = оЬ^есЬ (Ро2л_-Ыоп) У131Ые: Воо1еап; Со1ог: ДОог< 2; сопзЬгисЬог 1пИ: (СоогйХ, Соогс1У: 1п1: едег; 1пИ: Со1ог: ДОогс!); йез-ЬгисЬог Бопе; V^^■ Ьиа1; ^ипсЫоп 1зУ151Ые: Воо1еап; ргосейиге ЗЪом; V^^■ Ьиа1; ргосейиге В1л_пс1; V^^■ Ьиа1; ргосейиге Оитр (Ыех-ЬХ, Ыех-ЬУ: 1п-Ьедег); V^^■ Ьиа1; епй; Р1апе1: Р1: г= ЛР1апе*:; Р1апе^: =оЬзес1: (ЗЪаг) КасНиз: 1п-Ьедег; Р1: Роз-пЪег; Зхге: ЭДогс!; сопзЪгисЪог 1П11: (СоогсЗХ, СоогсЗУ: 1п1: едег; 1п11: Со1ог: ДОогсЗ; 1п11: Кас11и5: 1п1: едег); йезЪгисЪог Эопе; V^^1: иа1; ргосе< 1иге ЗЪом; V^^1: иа1; ргосес! иге В1л_пс1; V^^1: иа1; ргосес! иге СГитр (Ыех1: Х, Ыех1: У: 1п1: едег); V^^1: иа1; епс1; 1тр1етепЪа*: ±с> п Методы объекта Ро2л.-Ыоп ***************} Ргосес1иге Ро2л.-Ыоп. 1пИ: (СоогсЗХ, СоогсЗУ: 1п1: едег); Ьед±п X: =Соогс1Х; У: =Соогс1У; епс1; Гипс*: ±оп Ро-21-Ыоп.беЪХ: 1п1: едег; Ьед±п 6еЪХ: =Х; еп< 1; ГипсЪ±оп Ро21-Ыоп. бе'ЬУ: 1п1: едег; Ьед±п 6еЪУ: =У; епс!; Методы объекта 3" Ьа2г СопзЪгисЬог ЗЪаг. 1п1-Ь (СоогсЗХ, СоогсЗУ: 1п1: едег; 1п: И: Со1ог: ЭДогсО; Ьед±п Рогл-Ъл-ОП. 1пл.1: (Соогс1Х, СоогсЗУ); У131Ые: = Ра1зе; Со1ог: = 1п11: Со1ог; епс1; ЭезЪгисЪог ЗЪаг.Бопе; Ьед±п ВИпс1; епс1; Ргосе< 1иге З-Ьаг.ЗЪом; Ьед±п У151Ые: = Тгие; Ри" ЬР1хе1 (X, У, Со1ог); епс1; ГипсЫоп З'Ьаг. 15У151Ые: Воо1еап; Ьед±п 1зУ151Ые: = Ухзл-Ые; еп< 1; Ргосейиге 31: а г. ВИпсЗ; Ьед±п У15л.Ые: = Га1зе; РиЪР1хе1 (X, У, СеЪВкСо1ог); {точка закрашивается фоновым цветом} еп< 1; Рг осейиге 31: а г. СГитр; Ьед±п В1л.пс1; X: = ЫехЪХ; У: = ЫехЪУ; ЗЪом; епс1; ******** методы объекта Р1апе-Ь ***************} Сопз" Ьгис" Ьог Р1апе1:. 1пл_1: (Соогс1Х, Соогс1У: 1п1: едег; 1пл_1: Со1ог: ДОогсЗ; 1п1-ЬКас11из: Гп-Ьедег); Ьед±п З'Ьаг. 1пИ: (СоогсЗХ, СоогсЗУ, 1пл.1: Со1ог); КасИиз: = 1п11: Кас1±из; 312е: = 1таде312е(Х/ У, Х+2*КасИиз, У+2*Кас11из); {вычисляем размер прямоугольной области, занимаемой планетой} СеШет (Р1, Зхге); {выделяем память в куче для хранения областей} еп< 1; ВезЪгисЬог Р1апе1:. Эопе; Ьед±п ВИпс1; ЕгееМет(Р1, Зл_2е); епс!; Ргосейиге Р1апе1:. ЗЪом; Уаг 1: Iпоедет; РгошСо1ог: ЭДогс1; Ьед±п У151Ые: = Тгие; Се1: 1таде (Х-КасНиз, У-КасНиз, Х+КасНиз, У+КасИиз, Р1А); РготСо1ог: = СгарЬ. Се1: Со1ог; {запоминаем установленный ранее цвет рисования} СгарЬ.Зе1: Со1ог (Со1ог); {устанавливаем заданный для планеты цвет} ^ог I: = 1 Ьо КасНиз йо СгарЪ.С1гс1е(X, У, I); СгарЬ. Зе1: Со1ог (РгошСо1ог); епс!; Ргосес1иге Р1апе1:. ВИпс!; Ьед±п - У131Ые: = Га1зе; Ри1: 1таде(Х - КасНиз, У - КасНиз, Р1А, Ыогта1Ри1:); {выдаем старый фон} епс1; Ргосес1иге Р1апе1:. Оитр (Ыех1: Х, Ыех1: У: 1п1: едег); Ьед±п ВИпс1; X: = Ыех1: Х; У: = Ыех1: У; ЗЪом; епс!; {секции инициализации нет} Епс1. Пример 81. Программа установки звезды (экземпляр аа) и двух планет (экземпляры АР1апе1, ВР1апе1). Следующие программы используют модуль зР1апе1:. -Ьри. Ргодгат Ехатр1е_81, Р1апе1: 1; изез СгЪ, СгарЬ, ^Р1апе1: / Уаг СгарМгл^ег, СгарЪМос1е, ЕггогСос1е: 1п1: едег; АР1апе1:, ВР1апе1:: Р1апе1:; аа: з1: аг; Вед±п СгарМгл^ег: = Эе1: ес1:; Эе1: ес1: СгарЬ (СгарМгл^ег, СгарЪМос1е); 1п11: СгарЬ (СгарМгл^ег, СгарЪМосЗе, 1 1); СгарЬКезиИ: ОСгОк ЪЬеп На1Ь(1); аа.1п±Ь(290, 150, 15); аа.зЪом; геасИп; АР1апеЪ.1п±Ь(151, 82, 3, 50); ВР1апеЪ.1п±Ь(201, 82, 4, 50); АР1апе-Ь. ЗЪом; КеасИп; ВР1апе-Ь. ЗЪом; КеасИп; ВР1апе-Ь. Оитр (55, 82); КеасИп; ВР1апе1:. В1л_пс1; КеасИп; АР1апе1:. В1л_пс1; КеасИп; АР1апе-Ь. Бопе; ВР1апе1:. Эопе; С1озеСгарЬ; Епс1. Пример 82. Программа «планеты на фоне мигающих звезд». Программа составлена на основе алгоритма примера 2 с добавлением двух экземпляров типа объект Р1апе1. Ргодгат Ехатр1е_82, Р1апеЬ2; изез Сг-Ь, СгарЪ, ^1апеЬ; Уаг ОгарМгл^ег, СгарЪМос1е, ЕггогСос1е: 1пЬедег; АЗЬаг: аггау[1..20] о^ ЗЬаг; 1, 8: 1пЬедег; АР1апеЬ, ВР1апеЬ: Р1апеЬ; Вед±п СгарШг^ег: = БеЬесЬ; 1п1ЬСгарЪ (ОгарМгллгег, СгарЪМос1е, ' "); СгарЪКези1Ь < > СгОк ЬЪеп На1Ь(1); Капс1от12е; ^ог 1: =1 Ьо 20 йо Ьед1п АзЬаг [ 1 ]. 1п1Ь (50 + гапйот (.350), 50 + гапс1от (2 50), 15); АзЬаг [ 1 ]. зЪом-; епс1; {начальная установка 20 звезд} АР1апеЬ.1п1Ь(85, 82, 3, 20); ВР1апеЬ.1п1Ь(201, 82, 4, 10); геасИп; АР1апеЬ.ЗЪом; {установка стационарной планеты} ВР1апеЬ.ЗЪом; {установка блуждающей планеты} геасИп; 1: =1; гереаЬ ВР1апеЬ.СГитр (55+1, 82 + 1); з: =гапс! от (19) +1; АзЬаг [з].ЬИпс!; с! е1ау(100); АзЬаг [ з ]. зЪом; л_: =1+1; ипЫ1 (Кеургеззес!) ог (ВР1апеЬ. СеЬХ> 400) ог (ВР1апеЬ. СеЬУ> 300); геасИп; ^ог 1: =1 Ьо 2 0 с! о АЗЬаг [1].Бопе; АР1апеЬ.Бопе; ВР1апеЬ.Бопе; С1озеСгарЬ; Епс!. Пример 83. Программа «Динамическая модель солнечной системы». Программа содержит блоки программ, рассмотренных выше, а также алгоритм перемещения двух экземпляров объектного типа по окружностям. Ргодгат Ехатр1е_83, Р1апеЬЗ; изез СгЬ, СгарЪ, ар1апеЬ; сопзЬ р1=3.1415; Уаг СгарЪБг^ег, Сг'арЪМойе, ЕггогСос1е: 1пЬедег; АЗЬаг: аггау[1..20] о^ ЗЬаг; 1, 3: 1пЬедег; Зип, 2ет1а, Мооп: Р1апеЬ; ±±, Ъ., ±±1, 1п1: геа1; хО, уО, х, у, г, г1: 1пЬедег; Ведхп СгарМг^ег: = БеЬесЬ; 1п1ЬСгарЬ (СгарЪОг^ег, СгарЪМос1е, 1 1); СгарЬКези1Ь < > СгОк ЪЬеп На1Ь(1); Капс1от12е; ^ог 1: =1 Ьо 20 с! о Ьед1п АзЬаг [1]. 1П1Ь (50+гапс1от (550), 50 + гапс1от (350), 15); Аз" Ьаг [ 1 ]. зЪом; епс1; {начальная установка 20 звезд} 5ип. 1п1" Ь (320, 240, 15, 20); 2ет1а. 1пИ: (320, 34 0, Ыие, 10); Мооп. 1п1" Ь (320, 370, гес1, 5); геас11п; Зип.ЗЪом; 2ет1а.ЗЪом; Мооп.ЗЪом; геасИп; Ь: =5; Ы: =1; ^1: =0; ^И: =0; г: =Мооп. Се-ЬУ-2еш1а. Се-ЬУ; {радиус орбиты Луны} г1: =2еш1а. Се-ЬУ-Зип. Се-ЬУ; {радиус орбиты Земли} гереаЬ хО: =гоипс! (г1*51П (Л1)) +Зип.Се1: Х; уО: =гоипс! (г1*соз (^И)) +5ип.СеЪУ; х: =х0 + гоипс1 (г*31п(^1)); у: =у0+гоипс1 (г*соз (^л.)); ^1: =^1+2*р1*11/ЗбО; ±±1: =±И+2*р±*Ъ1/ЗвО; 2еш1а. Оиптр (хО, уО); Мооп.Оитр(х, у); з: =гапс! от (19) +1; Аз" Ьаг [з].ЬНпс1; с! е1ау(200); Аз-Ьаг [ з ]. зЬсж; ип" Ы1 Кеургеззес!; ^ог 1: =1 Ьо 20 До АЗЪаг[1].Эопе; Зип.Эопе; 2ет1а.Эопе; Мооп.Эопе; С1озеСгарЬ; Епс!.
|