Мои Конспекты
Главная | Обратная связь

...

Автомобили
Астрономия
Биология
География
Дом и сад
Другие языки
Другое
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Металлургия
Механика
Образование
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Туризм
Физика
Философия
Финансы
Химия
Черчение
Экология
Экономика
Электроника

Структурирован.типы (СТ).





Помощь в ✍️ написании работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

Любой из СТ (в Object Pascal их 4: массивы, записи, множ-ва и файлы) характер-ся множествен-тью образующих этот тип эл-тов. Каждый эл-т, в свою очередь, может принадлежать СТ, что позво­ляет говорить о возможной вложен-ти типов. В Object Pascal до­пуск-ся произвольная глубина вложен-ти типов, однако сум­марная длина любого из них во внутреннем представлении не долж­на превышать 2 Гбайт. В целях совместимости со стандарт.Паскалем в Object Pascal разреш-ся перед описанием СТ ставить за­резервирован.слово packed, предписывающее компил-ру по возмож-ти экономить память, отводимую под объекты СТ. 1)Массивы. Отличительная осо­бен-ть массивов заключ-ся в том, что все их данные одного типа (структурированного). Эти комп-ты можно легко упорядочить и обеспечить доступ к любому из них простым указ-ем его порядкового №, # Type digit = array [0..9] of Char; matrix = array [byte] of Single; var m: matrix; d : digit; i: integer; begin m[17]:= ord(d[i-l])/10; end. Описание типа массива: <имя типа> = array [<сп.инд.типов>] of <тип>; где <имя типа> - правильный идентификатор; array, of - заре­зервирован/слова; <сп.инд.типов> - список из одно­го или неск-ких индексных типов, разделенных запятыми; <тип> - любой тип Object Pascal. В кач-ве индексных типов в Object Pascal можно использ-ть любые порядковые типы, имеющие мощность не более 2 Гбайт (кроме LongWord И Int64). Глубина вложен-ти CT вообще произвольная, поэтому кол-во эл-тов в списке индексных типов (размерность массива) не ограни­чено.. Если # Var a: array [1..2,1..2] of Byte; begin а[1,1]:= 1; а[2,1]:= 2; а[1,2]:= 3; а[2,2]:= 4; end. то в памяти последов-но друг за другом будут расположены байты со значениями 1, 3, 2, 4 . Это обстоят-во может оказ-ся важным при использ-и стандартной процедуры копиров-я памяти MoveMemory. 2)Запись - это структура данных, состоящая из фиксирован.кол-ва комп-тов, называемых полями записи. записи могут быть различного типа. Чтобы можно было ссылаться на тот или иной комп-т записи, поля именуются. Структура объявления типа записи такова: <имя типа> = record <сп.полей> end; где <имя типа> - правильный идентификатор; record, end - за­резервирован.слова (запись, конец); <сп.полей> - список полей; предст-ет собой последов-ть разделов записи, между к­тр ставится «;». Кажд.раздел записи состоит из одного или неск-ких иден­тификаторов полей, отделяемых друг от друга запятыми. За иден­тификатором (идентификаторами) ставится «:» и описание типа поля (полей), # Type BirthDay = record Day, Month: Byte; Year: Word; end; var a,b: Birthday. В этом примере тип BirthDay (день рождения) есть запись с поля­ми Day, Month и Year (день, месяц и год); переменные А и В содержат записи типа BirthDay. К каждому из комп-тов записи можно получить доступ, если использ-ть составное имя, т.е.указать имя переменной, затем точку и имя поля: a.day:= 27; b.year:= 1939. Чтобы упростить доступ к полям записи, использ-ся оператор присоединения with: with <переменная> do <оператор>; где with, do зарезервирован.слова; <переменная> - имя переменной типа запись, за ктр следует список вложен.полей; <оператор> - любой оператор. 3)Множ-ва - это наборы однотипных логически связанных друг с другом объектов. Количество эл-тов, входящих в множ-во, может меняться в пределах от 0 до 256 (множ-во, не содержащее эл-тов, наз-ся пустым). Именно непостоянством кол-ва своих эл-тов множ-ва отлич-ся от массивов и записей. Два множ-ва считаются эквивалентными тогда и только тогда, когда все их эл-ты одинаковы, причем порядок следования эл-тов в множ-ве безразличен. Если все эл-ты одного множ-ва входят также и в другое, говорят о включении первого множ-ва во второе. Пустое множ-во включ-ся в любое дру­гое. Пример опр-я и задания множ-в: Type digitChar = set of ' 0 ' . . ' 9 '; digit = set of 0..9; var sl,s2,s3: digitChar; s4,s5,s6: digit, begin s1:=[‘1’,’2’,’3’]; s2:=[‘3’,’2’,’1’]; s3:=[’2’,’3’]; s4:=[0..3, 6]; s5:=[4, 5]; s6:=[3..9]; end. В этом примере множ-ва S1 и S2 эквивалентны, а множ-во S3 включено в S2 , но не квивалентно ему. Описание типа множ-ва имеет вид: <имя типа> = set of <базовый тип>; где <имя типа> - правильный идентификатор; set, of - заре­зервирован.слова (множ-во, из); <баз.тип> - баз.тип эл-тов множ-ва, в кач-ве ктр может использ-ся любой порядковый тип, кроме Word, Integer, Longlnt, Int64. Д/задания множ-ва использ-ся так называемый конструктор множ-ва: список спецификаций эл-тов множ-ва, отделенных друг от друга запятыми. Спецификациями эл-тов могут быть константы или выраж-я ба­з.типа, а также тип-диапазон того же баз.типа. Над множ-вами опр-ны след.операции: пересечение (*) множ-в; рез-т содержит эл-ты, общие для обоих множ-в; # S4*S6 = [3], S4*S5 - пустое множ-во; объединение (+) множ-в; рез-т содержит эл-ты перво­го множ-ва, дополненные недостающими эл-тами из второго множ-ва: S4 + S5 = [0,1,2,3,4,5,6]; S5+S6 = [3,4,5,6,7,8,9]; разность (-) множ-в; рез-т содержит эл-ты из первого множ-ва, ктр не принадлежат второму: S6-S5=[3,6,7,8,9]; S4-S5 =[0,1,2,3,6]; проверка эквивалентности (=); возвращает True, если оба множ-ва эквивалентны; проверка неэквивалентности (<>); возвращает True, если оба множ-ва неэквивалентны; проверка вхождения (<=); возвращает True, если первое множ-во включено во второе; проверка вхождения (>=); возвращает True, если второе множ-во включено в первое; проверка принадлеж-ти (IN); в этой бинарной операции первый эл-т – выраж-е, а второй – множ-во одного и того же типа; возвращает True, если выраж-е имеет знач-е, при­надлежащее множ-ву: 3 IN S6 = True; 2*2 IN S1 = False. Дополнительно к этим операциям можно использ-ть две проце­дуры. include – вкл-ет новый эл-т во множ-во. Обращение к процедуре: Include(S,I), где s – множ-во, состоящее из эл-тов баз.типа TSetBase; I – эл-т типа TSetBase, ктр необх-мо включить во множ-во. exclude - исключает эл-т из множ-ва. Обращение: Exclude(S,I). Эти процедуры оптимизированы д/работы с одиночными эл-тами множ-ва и поэтому отлич-ся высокой скоростью выполнения.

 

Варианты.

Вариантные типы испол-ся д/представления знач-й, кот., могут интерпретироваться различными способами. Переменная вариантного типа может содержать зн-я различных типов и обычно применяется в случаях, когда тип ее зн-я при компиляции неизвестен или может изм-ся в процессе вып-я пр-мы. д/описания переменной вариантного типа служит ключевое слово Variant. Такой переменной можно присваивать зн-я целочисленных ( кроме Int64 ) вещ-х, симв-х, строк-х и логич-х типов. Все эти типы считаются совместимыми с типом Variant, и в случае необходимости компилятор вып-т операцию преобраз-я типа автом-ки. Д/вариантной переменной определены два специфических зн-я, во многом похожие друг на друга: Unassigned -назначается переем-й при ее описании и указывает, что значение переменной пока не присвоено и не определено; null - указывает, что переменная содержит значение неопределенного типа или что значение было потеряно. Вариантную переменную можно интерпретировать так же, как массив знач-й. При этом нельзя назначить обычный статический массив вариантной переменной. Вместо этого следует создать массив Variant с помощью одной из двух стандартных функций VarArrayCreate или VarArrayOf+.

 

Строки.

Д/обработки текстов в Object Pascal использ-ся типы: короткая строка ShortString или String[n], где n<=255; длинная строка String; широкая строка WideString; нуль-терминальная строка Pchar (отсчет симв. с нуля и в конце ставится #0).

Общим явл-ся то, что каждая строка трактуется как одномерный массив символов, кол-во символов в ктр может меняться в работе пр-мы: для String[n] длина строки от 0 до n, для Pchar – от 0 до 2 Гбайт. Широкие строки WideString идентичны длинным строкам, но отлич-ся тем, что д/представления каждого символа использ-ся не 1, а 2 байта. ‘ ’ – пустая строка. ANSIString – 2 Гб. Текущую длину строки можно получить с помощью f-ции Length. // - комментарий для одной строки.

 

Процедуры и f-и.

Ключ.слово Способ передачи пар-ров
Pascal Стандар-й (пар-р) помещ-ся в стек
Register По умолчанию
Cdect Примен-ся, когда происходит обращ-е к динам-м библиот-м на Си и С++
Std call В соотв-и с соглаш-ями Widows
Sаfe call Использ-ся при работе с компонентными техн-ми

Подпр-мы: процедуры и f-ции. Состоит из заголовка, локального описания и тела. Procedure compute (x:integer; s:string); function compare (a1,a2:byte;stroke:string): real; В заголовке подпр-мы задается ее имя, а в скобках формальные пар-ры. Формальные пар-ры – входящие и выходящие пар-ры. Д/некот-х пар-ров, может быть, заданы знач-я по умолчанию. Procedure My proc (i:integer; i1:integer=1; i2:integer=2); My proc (0); i=0; i1=1; i 2=2. My proс (0, 3); i=0; i1=3; i2=2. Передача пар-ров по имени и по знач-ю. Когда происходит обращ-е к подпр-ме переменным, указанным в списке пар-ров в описании (формал-й пар-р) после чего выполн-ся необх-мые вычисления. Это наз-ся передача пар-ров по знач-ю: в подпр-му передаютя знач-я нужных типов. В списке пар-ров перед любым пар-ром можно поставить VAR. Тогда, считается, что дан-й пар-р будет передав-ся по имени, т.е. копирование знач-я не происходит, а вместо формального пар-ра подставл-ся имя перем-й. Отсюда следует, что в кач-ве фактич-х пар-ров с ключ.словом VAR можно применять только имена переменных. Способы вызов подпр-м. Машинный код, ктр создается компил-м д/разных пр-м, может отлич-ся. Это зависит от цели применения конкретной пр-мы.

 

 

Если в тексте имеется неск-ко подпр-м, ктр вызывают друг друга, испол-ся forward в проц-ре. Проц-ры и f-и (подпр-мы)предст-ют собой важный инструмент Object Pascal, позволяющий писать хорошо структурированные пр-мы. В структурирован.пр-мах обычно легко про­слеж-ся осн.алг-м, их проще понять любому читате­лю, они удобнее в отладке и менее чувствительны к ошибкам про­граммир-я. Все эти св-ва явл-ся следствием важной осо­бен-ти подпр-м, каждая из ктр предст-ет собой во многом самостоятел.фрагмент пр-мы, связанный с осн.пр-мой лишь с помощью неск-х пар-ров. Само­стоятельность подпр-м позволяет локализовать в них все дета­ли пр-ной реализации того или иного алгоритмич.дей­-я, и поэтому измен-е этих деталей, #, в процессе от­ладки обычно не приводит к изменениям осн.пр-мы. Процедурой в Object Pascal наз-ся особым образом оформ­ленный фрагмент пр-мы, имеющий собств-е имя. Упоминание этого имени в тексте пр-мы приводит к активизации проц-ры и наз-ся ее вызовом.Сразу после активизации про­ц-ры начинают выполн-ся входящие в нее операторы, после выполн-я последнего из них упр-е возвращ-ся обратно в осн.пр-му и выполн-ся операторы, стоящие непосредственно за оператором вызова процедуры. Для обмена i-цией между осн.пр-мой и проце­дурой использ-ся один или неск-ко пар-ров вызова. Процедуры могут иметь и др.меха­низм обмена данными с вызывающей пр-мой, так что пар-­ры вызова могут и не использ-ся. Если они есть, то они пере­числ-ся в круглых скобках за именем процедуры и вместе с ним образуют оператор вызова процедуры. F-ция отлич-ся от процедуры тем, что ее идентификатор можно использ-ть в выраж-и, т.к.f-ция имеет выходной рез-т опр-ного типа. Имя процедуры нельзя использ-ть в выраж-и, т.к. процедура не имеет связанного с нею рез-та. Нестандартную подпр-му необх-мо описать, чтобы ком­пилятор смог установить связь между оператором вызова и теми действиями, ктр предусмотрены в подпр-ме. Описание подпр-мы помещ-ся в разделе описаний (до начала испол­няемых операторов).

 

Доверь свою работу ✍️ кандидату наук!
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой



Поиск по сайту:







©2015-2020 mykonspekts.ru Все права принадлежат авторам размещенных материалов.