asyan.org
добавить свой файл
  1 ... 9 10 11 12 13 ... 15 16

Основні поняття мови: числа, рядки, ідентифікатори, описи, оператори.

Операнди - це спеціальні символи або послідовності символів, які виконують над даними певні операції (математичні, логічні і т.д.). Прикладом операндів можуть бути операнди математичних операцій: “+” - додавання даних), “-” - віднімання даних, “*” -множення даних, “/” - ділення даних, “=” - рівність даних і т.д.

Оператори - це деякі неподільні елементи програми, що дозволяють виконувати певні алгоритмічні дії у програмі, тобто виконувати в програмі певні команди. фактично, оператор - це окрема команда в алгоритмі програми, тобто окремий крок виконання програми.

В Turbo Pascal оператори поділяються на прості та структурні. До простих операторів відносяться:

- оператор присвоєння (:=);

- оператор безумовного переходу (goto);

- оператор звертання до процедури (функції).

Структурними операторами називаються такі, що складаються з інших операторів. До них відносяться:

- складний оператор - представляє собою набір операторів, що поміщені в операторні дужки (begin - end);

- умовний оператор (if);

- оператор вибору (case);

- оператори циклу (repeat, while, for);

  • оператор приєднання (with).


Структура програми. Основні розділи програми і правила їх опису

Структура опису програми мовою Паскаль.

1. Заголовок програми: Службове слово program та ім’я програми

program <ім’я програми>

2. Розділ описів: описуються всі ідентифікатори об’єктів, що використовуються в даній програмі. Описати ідентифікатор – значить указати його ім’я і тип

uses <опис модулів>;

label <мітки>;

const <оголошення констант>;

type <визначення типів даних>;

var <оголошення змінних>;

<опис процедур і функцій>

3. Розділ операторів (тіло програми): зазначається послідовність дій, які необхідно виконати над описаними об’єктами. Починається службовим словом begin, закінчується – end.

begin

оператор 1;

оператор 2;

.............

оператор n;

end.


Поняття

Опис

Приклад

Алфавіт мови

Літери латинського алфавіту, цифри, спеціальні символи, зарезервовані слова.

A...Z, a...z, 0...9,
+ - * / = < >[ ]{ }$ ^ & #

Ідентифікатори

Імена об'єктів (констант, типів даних, змінних, функцій, програм). Правила запису ідентифікаторів:
· всі ідентифікатори складаються з літер латинського алфавіту, цифр, починаються з літери або знака,«_»;
· Великі і малі літери не розрізняються.

А, В
begin
Write
Test
My_First_Program

Елементи даних

Константа - комірка пам'яті, значення якої протягом виконання програми залишається постійним.

Змінна - комірка пам'яті, значення якої протягом виконання програми може змінюватися.

45,
a, b, c Pi

Коментар

Призначений для внесення до тексту програми пояснень. Обмежується символами { } або (* *)






28. Реалізація структур даних процедурною мовою програмування. Типи даних і засоби їх опису. Структури даних та їх опис. Динамічні структури даних та їх реалізація.

В мові Паскаль будь-який тип даних визначає множину значень, яких може набувати величина цього типу, і ті операції, які можна застосувати до величин цього типу:

1. Прості неструктуровані типи:

  • Стандартні скалярні типи

    • цілі числа INTEGER (-32768..32768), ціле довжиною 1 байт BYTE (0..255), коротке ціле SHORTING, довге ціле LONGING, ціле довжиною 1 слово WORD

    • дійсні числа REAL (2.9*10E-39..1.7*10E-38), дійсне одинарної точності SINGLE, дійсне подвійної точності DOUBLE, зовнішні (або розширені)

    • логічний (булівський) тип BOOLEAN (True, False)

    • літерний тип WORD (символи кодової таблиці з кодами 0..255)

  • Посилальний тип Point

  • Оголошені скалярні типи: перелічуваний тип, обмежений тип.

2. Структуровані типи: рядковий тип STRING (символи, що складають рядок завдовжки до 255 символів), масиви ARRAY, записи RECORD, множина SET, файли FILES, послідовності, черга, стек.

У мовах структурованого програмування типи величин мають бути описані. Опис типів у програмах на Паскаль виглядає, наприклад, так:

const

Count=10; Num=100;

var

I, J: integer;

X1, X2: real;

Ans: boolean;

Symb1, Symb2: char;

Структура оголошення типу Рядок: var <ідентифікатор>: String

Опис масиву <Ідентифікатор>: array [<кількість елементів>] of <базовий тип масиву> , де

<базовий тип масиву> - будь-який тип елемента множини, в якості якого може використовуватись будь-який порядковий тип, крім WORD, INTEGER, LONGING

Множина <ім’я типу> = set of <базовий тип>

Запис <ім’я типу> = record <список полів> end

Файл <ім’я> = file of < тип>

Опис різних структур даних процедурною мовою програмування.

Структуровані типи: рядковий тип STRING (символи, що складають рядок завдовжки до 255 символів), масиви ARRAY, записи RECORD, множина SET, файли FILES, послідовності, черга, стек.

У мовах структурованого програмування типи величин мають бути описані. Опис типів у програмах на Паскаль виглядає, наприклад, так:

Структура оголошення типу Рядок:

var <ідентифікатор>: String

У Паскалі є набір стандартних процедур і функцій для роботи з рядками. Розглянемо деякі з цих процедур і функцій

  • Concat (s1, s2, ..., sn): String - це функція рядкового типу, що послідовно з’єднує рядки s1, s2, ..., sn.

Приклад: S:=Concat('1','2','3')

S='123'

  • Copy (S: String; Index: Integer; Count: Integer) - це функція рядкового типу, що виділяє з рядка S підрядок завдовжки в Count символів, починаючи з позиції Index

Приклад: S:=Copy('порівняння',3,8)

S='рівняння'

  • Length (S: String): Integer - це функція цілого типу, що повертає довжину рядка.

Приклад: S:= Length ('рядок')

S=5

  • Pos (Substr: String; S: String): Byte - це функція цілого типу, що повертає позицію, з якої підрядок Substr уперше зустрічається у рядку S.

Приклад: S:= Pos ('ритм', 'алгоритм')

S=5

  • Delete (S: String; Index: Integer; Count: Integer) – процедура, що видаляє з рядка S Count символів, починаючи з позиції Index.

Приклад: S:='алгоритміка'

Delete(S,9,3)

S='алгоритм'

  • Insert (Source: String; S: String; Index: Integer) – процедура, о вставляє підрядок Source у рядок S, починаючи з позиції Index.

Приклад: S:='алгом'

Source:= 'рит'

Insert (Source; S; 5)

S='алгоритм'

  • Str (V: Integer; S: String) – процедура, яка число V перетворює в рядок S.

Приклад: Str(5, S)

S='5"

  • Val (S: String; V: Integer; W: Integer) – якщо рядок S являє собою правильний запис числа, то це число записується як значення змінної V, при цьому значення W дорівнює 0.

Приклад: Val ('8.4',V,W)

V=8.4

W=0

Val ('2f3',V,W)

W=2

Опис масиву

Масив – це структурований тип, який складається з фіксованого числа компонентів одного і того ж типу, що називається базовим типом

1. Одновимірний масив

Type <ім’я типу>=Array[<порядковий тип>] of <тип компонент>;

Var <список змінних>: <ім’я типу>;

Приклад: Type U=Array[1..20] of Real;

Vector=Array[1..5] of Real;

M=1..100;

Skal=Array[1..50] of

(kul, kur, piram);

2. Багатовимірний масив

Array[<тип індексів>,<тип індексів>] of <тип компонент>;

3. Звернення до компонентів масиву

<ім’я змінної> [<список імен індексів>]

Множина

<ім’я типу> = set of <базовий тип>

Запис

<ім’я типу> = record <список полів> end

Файл

<ім’я> = file of < тип>
Динамічні структури даних та їх реалізація процедурною мовою програмування.

Динамічні структури - структури даних, розмір яких (об'єм пам'яті, що вони займають) може змінюватись у процесі виконання програми. Для організації таких структур використовуються динамічні змінні, які створюються та знищуються в процесі виконання програми. Характеризуються:

1. Ці змінні явно не описуються, до них неможливо звернутись за допомогою ідентифікатора.

2. Пам'ять для цих змінних не виділяється під час формування коду програми. Вона виділяється у спеціальній області оперативної пам'яті - heap-області (динамічній пам'яті) - тільки під час виконання програми (звідки і назва - динамічні змінні).

3. Доступ до таких змінних виконується за допомогою показівників (чи посилань), які стають активними після визначення динамічного об'єкту та містять адресу у вигляді <сегмент>:<зміщення>

Показівники можуть містити будь-яку адресу: статичних даних, фрагменту коду програми, стеку і т.і.).

Тип показівник

Type <ідентифікатор>=^<базовий тип>;

<базовий тип> - визначає тип елементів, на які буде вказувати показівник

Тип показівник - визначає множину значень дискретних змінних визначенного типу, на які може посилатись відповідний показівник.

Звернутись до динамічних змінних можна тільки через показівник (а не через ідентифікатор):

<показівник>^

Надання значення змінній-показівнику

Надання показівнику значення іншого показівника.

За допомогою спеціальної процедури, що зв'язує з динамічною змінною область пам'яті у heap-області.

NEW(var p:pointer);

За допомогою безпосереднього надання показівнику припустимого значення адреси:

1) Використання оператора @

@ - унарний оператор, що повертає адресу статичної змінної, процедури чи функції, сумісну з типом NIL (тобто з любим типом показівника):

a) використання для змінної - повертає адресу цієї змінної у вигляді <сегмент>:<зміщення>

@<ідентифікатор змінної> <показівник>

b) використання для процедури дозволяє отримати точку входу - адресу, з якої починається її виконання. Використовується для надання керування відповідній процедурі чи функції

@<ідентифікатор процедури, функції> <показівник на точку входу>

2) addr(x):pointer;

x - будь-яка змінна чи ідентифікатор процедури/функції. Результат - показівник на x, сумісний із всіма типами показівників.

3) ptr(<сегмент>,<зміщення>:word):pointer;

функція перетворює надану у вигляді <сегмент>:<зміщення> адресу у показівник

4) seg(x):word

ofs(x):word

x - ідентифікатор змінної, процедури чи функції. Ці функції повертають:

seg - адресу сегменту об'єкту x

ofs - адресу зміщення об'єкту x

5) dseg:word; - функція повертає адресу сегменту даних (вміст регістру ds)

cseg:word; - адресу сегменту коду (регістр cs)

sseg:word; - адресу сегменту стеку (регістр ss).

Надання показівнику значення NIL розриває зв'язок між змінною та показівником, але не знищує самої змінної у динамічній пам'яті. Місце, яке вона займає, залишається зарезервованим і не може бути використано іншими динамічними змінними.

DISPOSE(var p:pointer);

процедура знищує динамічну змінну, на яку посилається показівник p, та повертає пам'ять, що вона займала, до динамічної нерозподіленої пам'яті. Значення показівника р стає невизначеним. Слідкувати за звільненням динамічних змінних слід самостійно.

Утворювати та визволяти динамічні змінні можна також за допомогою іншої пари процедур:

getmem ~ freemem

Але якщо у процедурах NEW - DISPOSE об'єм пам'яті, що виділяється під динамічну змінну, визначається базовим типом показівника, то у процедурах getmem и freemem він визначається безпосередньо, за допомогою додаткового параметра.

getmem(var p:pointer;size:word);

утворює динамічну змінну розміром size

freemem(var p:pointer,size:word);

звільнює динамічну змінну розміром size.

Параметр size повинен дорівнювати відповідному параметру у процедурі getmem.

Блочне визволення пам'яті

Існують дві зв'язані між собою процедури, одна з яких фіксує поточний стан динамічної пам'яті (наприклад, перед викликом блоку процедури або функції), а інша відновлює цей стан (наприклад, після його виконання, звільнюючи всі динамічні змінні, які за цей час були утворені).

mark(var p:pointer);

записує поточний стан heap-області у змінну p (фактично записується heaptr)

release(var p:pointer);

повертає динамічну область до попереднього стану через показівник p (тобто heapptr надається значення p)

Процедура release(heaporg); звільняє всю динамічно розподілену пам'ять.

Таким чином, існує декілька засобів утворення та знищення динамічної змінної:

1) NEW/DISPOSE

2) NEW/MARK/RELEASE

3) GETMEM/FREEMEM.



  1. Опис та використання підпрограм. Реалізація базових алгоритмічних структур процедурною мовою програмування. Опис процедур та функцій процедурною мовою програмування. Реалізація рекурсивних алгоритмів процедурною мовою програмування. Модульне програмування та його реалізація в системах процедурного програмування.

Базові структури алгоритмів (керуючі структури) – це способи керування процесами обробки даних. Комбінуючи керуючі структури, можна складати програми для розв’язання різноманітних задач. Виділяють три базові алгоритмічні конструкції: лінійні алгоритми (послідовне виконання); умова розгалуження; цикли.

Лінійна структура (наступність) передбачає, що тіло алгоритму являє собою послідовність команд, виконуваних одна за іншою поспіль. Умова (розгалуження) – це вид керуючої структури, що передбачає можливість вибору з кількох варіантів, для кожного з яких, залежно від визначеної умови, виконується різна послідовність команд. Цикл – це вид керуючої структури, що дозволяє багаторазово повторити задану послідовність команд.

Розгалуження. У мові Паскаль алгоритм із розгалуженням реалізований за допомогою умовного оператора if або case.

Загальний вигляд умовного оператора if.

if <вираз>

then <оператор 1> або <серія 1>

else <оператор 2> або <серія2>

де <вираз> - будь-який вираз логічного типу (що виробляє в результаті True або False); <оператор 1> і <оператор 2> - оператори мови Паскаль, <серія 1> і <серія 1> - набір операторів мови Паскль.Якщо вираз набуде значення True, то виконується <оператор (серія) 1>, в іншому разі - <оператор (серія) 2>.

Мовою блок-схем ця команда записується у наступному вигляді:



Друга або скорочена форма команди розгалуження:

if < умова > then

begin

<серія>;

end;

Мовою блок-схем вона записується так:



У повній формі команди умовного переходу виконується <серія 1>, якщо умова істинна, і <серія 2>, якщо вона хибна. В скороченій формі - серія виконується тільки у випадку, якщо умова істинна, у протилежному випадку команда розгалуження закінчується і виконується наступний за нею оператор.

Оператор служить для вибору одного з помічених варіантів дії (операторів), залежно від значення "параметра". Оператор має вигляд:

Case "параметр"

"список помічених операторів"

Else "оператор" End;

Тут "параметр" - вираз або змінна порядкового типу.

З "списку помічених операторів" виконується оператор з міткою, що включає значення "параметра", інакше оператор після слова Else. Конструкція Else "оператор" може бути відсутній.

Нагадаємо, що "оператор" може мати вигляд: Begin "оператори" end;

Приклад операторів для визначення порядку цілого числа N від 0 до 999:

case N

0..9: writeln('однозначне');

10..99: writeln('двухначне');

100..999: writeln('трьохзначне')

else writeln('Число "N" не входить у вказаний діапазон') end;

Цикли

1. Безумовний цикл

Якщо заздалегідь відома кількість повторень циклу, то можна скористатися циклом із покроковою зміною аргументу. Його перевагою є стислість і простота запису. Циклічні програми з покроковою зміною аргументу мовою Паскаль реалізовані за допомогою оператора циклу for:



<< предыдущая страница   следующая страница >>