Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Синтаксис і мовні конструкції
Паскаль, в його первісному вигляді, представляє собою чисто процедурний мову і включає в себе безліч алголоподобних структур і конструкцій з зарезервованими словами на зразок if, then, else, while, for, і т. д. Проте, Паскаль також містить велику кількість можливостей для структурування інформації та абстракцій, які відсутні в початковому Алгол-60, такі як визначення типів, записи, покажчики, перерахування, і безлічі. Ці конструкції були частково успадковані або інспіровані від мов Симула -67, Алгол-68, створеного Никлаусом Віртом AlgolW та запропоновано Хоаром. У сучасних діалектах (Free Pascal) доступні такі операції як перевантаження операторів і функцій. Hello world Програми на Паскалі починаються з ключового слова program і наступного за ним ім'я програм з крапкою з комою (в деяких діалектах є необов'язковим), за ім'ям може в дужках слідувати список зовнішніх файлових дескрипторів в якості параметрів, за ним слід тіло програми, що складається із секцій опису змінних, типів і констант, оголошень процедур і функцій і наступного за ними блоку операторів, що є точкою входу в програму. У мові Паскаль блок обмежується ключовими словами begin і end. Оператори поділяються крапкою з комою, після тіла поміщається точка, що служить ознакою кінця програми. Літери в Паскалі не має значення. Таким чином, найпростіша програма на Паскалі буде виглядати наступним чином: program p; begin end.Програма не виконує ніяких дій і містить порожній блок операторів. Приклад програми, що виводить рядок "Hello, World!": program HelloWorld (output); begin writeln ('Hello, World!') {Оператор виведення рядка} end.В Pascal над цілими типами (byte, shortint, word, integer, longint і їх діапазони) припустимі побітові операції. Логічні операції над бітами: Над битами двох цілих операндів можна виконувати раніше розглянуті логічні операції: not, and, or, xor. Відмінність між побітовим і логічними операціями полягає в тому, що побітові (порозрядне) операції виконуються над окремими бітами операндів, а не над їх значенням в десятковому (звичайно) поданні. Виділяється поняття порядкових типів даних (ordinal), до них відносяться цілі типи (знакові і беззнакові), логічний (boolean), символьний (char), Перечіслімий типи і типи-діапазони. Порядкові типи задаються цілим числом (кодом), яку можна отримати за допомогою функції ord. Всі операції, що виконуються над порядковими типами, виконуються з їх кодами.
Діапазони містять підмножина значень інших порядкових типів: var x: 1.. 10; Y: 'A'.. 'Z'; Z: pear.. orange;Для порядкових типів визначені операції inc, dec, succ, pred, ord, операції порівняння (= > < => <= <>), їх можна використовувати в операторах case, for (як лічильник циклу), як кордони масивів, для завдання елементів множин і типів-діапазонів. У Паскалі, на відміну від Сі-подібних мов, з типами boolean і char арифметичні цілочисельні операції не визначені. На відміну від багатьох поширених мов, Паскаль підтримує спеціальний тип даних безліч: var set1: set of 1.. 10; Set2: set of 'A'.. 'Z'; Set3: set of pear.. orange;Безліч - фундаментальне поняття в сучасній математиці, яке може бути використане в багатьох алгоритмах. В паскалі тип множина може містити тільки однотипні елементи порядкового типу. Ця особливість широко використовується і звичайно швидше еквівалентної конструкції у мові, що не підтримує множини. Наприклад, для більшості компіляторів Паскаля: if i in [ 5.. 10 ] then {Перевірка на приналежність елемента множині}...обробиться швидше, ніж if (i> 4) and (i < 11) then {Перевірка логічними умовами}...Для завдання значення безлічі використовується список елементів множини, відокремлених комами і ув'язнений в квадратні дужки (як уже було показано вище): var {Секція оголошення змінних} d: set of char; begin {Початок блоку} d: = [ 'A', 'B' ];...У Паскалі Йенсен і Вірта рядка представлялися як упаковані масиви символів, отже, вони мали фіксовану довжину і зазвичай доповнювалися до цієї довжини пробілами. У сучасному Паскалі [11] для роботи з рядками використовується вбудований тип string, що підтримує операції конкатенації (+) та порівняння (> < = <> >= <=). Рядки порівнюються в лексикографічному порядку. Наприклад, рядки вважаються рівними якщо вони мають однакову довжину і коди всіх символів з однаковими індексами збігаються. Тип string [n] або просто string в діалектах мови 1970-1990-х років визначався у вигляді масиву символів array [0..n] of char (n за замовчуванням брало значення 80 в UCSD Pascal і 255 в Turbo / Borland Pascal), код нульового символу при такому поданні служить для завдання довжини рядка, відповідно рядок могла мати максимальний розмір 255 символів. За умовчанням в Delphi і FreePascal як String використовується тип AnsiString, пам'ять під який виділяється і звільняється компілятором динамічно, а максимальний розмір рядка в поточних реалізаціях складає 2 гігабайти. Крім того, в Delphi і Free Pascal як string може використовуватися тип WideString, де застосовується 16-бітове представлення символів в кодуванні UCS-2, при цьому кошти перетворення з однобайтових рядків у багатобайтові і назад в стандартній бібліотеці мови відсутні.
Нові типи можуть бути визначені з існуючих: type {Секція оголошення типів} x = Integer; Y = x;...Більше того, з примітивних типів можуть бути сконструйовані складові: type {Секція оголошення типів} a = Array [ 1.. 10 ] of Integer; {Визначення масиву} b = record {Визначення запису} x: Integer; Y: Char; end; C = File of a; {Визначення файлу}Файлові типи в Паскалі діляться на типізовані, текстові та файли без типів. Як показано в наведеному вище прикладі, типізовані файли в Паскалі - це послідовності однотипних елементів. Для кожного файлу існує змінна-вказівник на буфер, яка позначається f^. Процедури get (для читання) і put (для запису) переміщують покажчик до наступного елементу. Читання реалізовано так, що read(f, x) являє собою те ж, що і get(f); x:=f^. Відповідно, запис реалізована так, що write(f, x) являє собою те ж, що і f^:= x; put(f). Текстові файли text визначені як розширення типу file of char і крім стандартних операцій над типізований файлами (читання, запис символу), дозволяють здійснювати символьний введення-виведення в файл всіх типів даних аналогічно консольного вводу-виводу. Файли без типів оголошуються як змінні типу file. З ними можна проводити операції побайтово нетипізовані вводу-виводу по кілька блоків байт зазначеної довжини через буфер, для цього є спеціальні процедури blockread і blockwrite (розширення UCSD). Покажчики Паскаль підтримує використання покажчиків (типізовані ^тип і нетипізовані pointer): type a = ^ B; b = record x: Integer; Y: Char; Z: a; end; var pointer_to_b: a;Тут змінна pointer_to_b - покажчик на тип даних b, є записом. Тип типізованого покажчика може бути заданий перед оголошенням типу, на який він посилається. Цей виняток до правила, яке говорить, що будь-яка річ належна бути оголошена перед тим, як використовується. Введення цього винятку дозволило організовувати рекурентні визначення структур даних, у тому числі такі, як лінійні списки, стеки і черзі, включаючи покажчик на запис в описі цього запису (див. також: нульовий покажчик - nil). Для типізованого покажчика визначена операція разименованія (її синтаксис: указатель^). Щоб створити новий запис і присвоїти значення 10 і символ A полям a і b в ній, необхідні наступні оператори: new (pointer_to_b); {Виділення пам'яті вказівником} pointer_to_b ^. x: = 10; {Разименовиваніе покажчика та звернення до поля запису} pointer_to_b ^. y: = 'A'; Pointer_to_b ^. z: = nil;... dispose (pointer_to_b); {Звільнення пам'яті з-під покажчика}Для цілей звернення до полів записів і об'єктів можна також використовувати оператор with, як показано в прикладі: new (pointer_to_b); With pointer_to_b ^ do begin x: = 10; Y: = 'A'; Z: = nil end;... dispose (pointer_to_b);Процедурний тип В оригінальному мовою Паскаль Йенсен і Вірта процедурний тип використовувався тільки при описі формального параметра. Вже в TP існував повноправний процедурний тип. В оголошенні типу ставиться заголовок процедури або функції (без імені), узагальнено описує інтерфейс підпрограми. Значення цього типу містить покажчик на підпрограму з заголовком, відповідну описаному в оголошенні типу. За допомогою ідентифікатора змінної може відбуватися виклик відповідної процедури або функції.
|
||||||
Последнее изменение этой страницы: 2017-02-10; просмотров: 103; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.17.150.89 (0.008 с.) |