Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
algor_1.docx
Скачиваний:
5
Добавлен:
01.05.2015
Размер:
112.49 Кб
Скачать

Тема №1. 2.Принцип абстракції

Принцип абстракції логічний (теоретико-множинний) принцип, що лежить в основі визначень через абстракцію. Згідно П. а., Будь-яке відношення типу рівності, визначене на деякій множині об'єктів, може служити для розподілу (розбиття) об'єктів цієї множини по попарно непересічним класам, наз. класоміабстракції (або класами розбиття, або класами еквівалентності) цього відношення, і таким, що будь-які два об'єкти разбиваемого безлічі належать до одного й того ж класу абстракції в тому ( і тільки в тому) випадку, коли вони перебувають у вказаному відношенні; одночасно кожен елемент множини належить до к.-л. класу абстракції (напр., безліч всіх, хто живе на землі людей ставленням "х має однаковий вік з y" розбивається на непересічні класи "живих людей однакового віку"). Відповідно до т.зв. аксіомою "існування класів" (аксіомою "згортання"), що дозволяє ототожнювати класи і властивості (ознаки), всяке, визначений для елементів розбитого множини, відношення типу рівності "виділяє" певний вид ознак, що характеризують відповідності. класи абстракції. Навпаки, всяке розбиття множини за відомим увазі ознак його елементів на класи абстракції (класи еквівалентних, або рівних, по відношенню до даного ознакою елементів) "виділяє" нек-рої відношення типу рівності, а саме таке, в якому знаходяться будь-які два члени одного і того ж класу абстракції.

П. а. розглядають зазвичай як одну з теорем про абстракції в класичні. теорії множин, оскільки його формулювання зводиться до твердження про існування безлічі (класів), - абстрактних об'єктів, що володіють определ. властивостями. Проте за допомогою П. а. досягається і зворотний процес - позбавлення від абстракції, у д а л е н н я її. Адже, згідно осн. положенню цієї теорії, клас абстракції може бути ототожнений з властивістю, загальним всім членам (предметів) даного класу. Але властивість це, в свою чергу, можна ототожнити (і ми дійсно на практиці часто його ототожнюємо) з будь-яким "конкретним" предметом (членом) цього класу (носієм властивості). Таке ототожнення представляється навіть більш природним, ніж ототожнення класу і властивості, в силу свідомо прийнятого, - за змістом самого П. а., - Quot; і н т е р в а л а о б с т р а до ц й " , згідно до-рому ін властивості цього предмета нас просто не цікавлять: вони є п о с т о р о н н і м і в даному аналізі та п р а к т и ч е з до і їх немає, якщо дивитися, так би мовити, "зсередини" прийнятого інтервалу абстракції. Т.ч., з т. зр. цілей, що визначають вибір відповідності. відносини типу рівності або соответств. властивості, кожен "конкретний" предмет, - елемент разбиваемого множини, при цьому розбитті використовується тільки в якості "абстрактного" предмета, або, що те саме - як представник (і заступника) певного (свого) класу абстракції. У цій своєрідній діалектиці "абстрактного" і "конкретного", що дозволяє вводити абстракції з одночасним зазначенням засобів їх видалення, складається основне гносеологіч. зміст П. а.

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

Мовою Паскаль даний оператор записується за допомогою відповідних англійських службових слів IF, THEN, ELSE. Усю конструкцію прийнято оформляти у виді вже знайомої вам структури - "драбинкою".

Порядок виконання  дуже простий. Якщо значення "логічного виразу" - істина  (TRUE), те  виконується "оператор1", а "оператор2" – не виконується. Якщо  ж значення "логічного  виразу" - неправда (FALSE), то навпаки, виконується "оператор2", а "оператор1" - немає. Зверніть  увагу  на  правила  запису. Якщо після умовного оператора IF у програмі маються ще й інші оператори, то слідом за "оператор2" обов'язково ставиться крапка з комою. Існує ще і скорочена форма умовного оператора.

Tут у випадку, коли "логічне вираження" має значення неправда (FALSE), то нічого не виконується, а здійснюється перехід до наступного (після умовного) оператору. За правилами мови Паскаль після службових слів THEN і ELSE записується по одному операторі. Якщо ж у випадку "то" чи "інакше" потрібно виконати декілька операторів, то замість одного оператора треба використовувати СКЛАДЕНИЙ ОПЕРАТОР, що являє собою ланцюжок будь-яких операторів, обмежених службовими словами BEGIN і END: begin оператор1; оператор2; ...; оператор end;

begin оператор1; оператор2; .........; оператор N; end; Слова BEGIN і END прийнято називати "операторними дужками", а окремі оператори усередині складеного, як звичайно, відокремлюються друг від друга крапкою з коми. Тоді в загальному виді умовний оператор можна записати так:   IF логічне вираження THEN BEGIN оператор1; .........; оператор; END ELSE BEGIN оператор1; .........; оператор M; END;  Весь оператор IF із усіма вкладеними складеними операторами вважається одним оператором. Складені оператори можуть містити будь-як кількість операторів - від одного і більш, у тому числі й інших умовних операторах. Кожен END найкраще записувати строго під відповідним йому BEGIN. Після першого складеного оператора перед словом ELSE крапка з коми не ставиться, тому що інакше транслятор сприйме це як закінчення умовного оператора (скорочена форма), а ELSE - як наступний оператор, що самостійно не використовується (виникає помилка). Якщо після THEN і ELSE використовуються ще умовні оператори, що можуть мати свої THEN і ELSE, то, щоб не виникло плутанини, найкраще строго дотримувати сходової структури і кожен THEN і ELSE писати під своїм IF, чи ж взагалі оформляти внутрішній умовний оператор у виді складеного, тобто обмежувати словами BEGIN і END. Наприклад:   IF логічне вираження THEN BEGIN IF логічне вираження THEN BEGIN оператори END ELSE BEGIN оператори END END ELSE BEGIN оператори END; Уважно розглянете цей приклад, звертаючи увагу на крапку з коми, визначите початок і кінець усіх складених операторів (тут вони вкладені друг у друга, як мотрійки). А тепер розглянемо рішення простий "класичної" задачі: із трьох чисел, уведених користувачем, визначити максимальне. Алгоритм рішення нескладний, якщо згадати, що комп'ютер відноситься до перемінних як до комірок пам'яті, у які можна щось записати, чи з який можна щось прочитати. Визначимо 4 осередок-перемінні a, b, c, max. Уперші три користувачів уведе свої числа, а 4-ю будемо використовувати як допоміжну. Порівняємо першу пару чисел і більше з них помістимо в max. А потім порівняємо число в max із третім числом, що залишилося, і більше з них знову запишемо в max. Наприкінці виведемо значення з max на екран - воно і буде максимальним. PROGRAM Maximum; VAR a,b,c : real; три вихідних числа max : real; допоміжний осередок BEGIN write('Уведіть три числа: '); readln(a,b,c); уведення чисел if a > b визначаємо більше з двох then max := a else max := b; if max < c якщо  третє  число  ще більше, then max := c; те  поміщаємо  його  в  max; інакше writeln('Максимум =',max) у max залишається колишній результат END.

16.Символьний тип даних Char. Символьний тип даних. Кожному окремому значенням символьного типу даних Char відповідає один символ кодової таблиці ASCII (American Standard Code for Information Interchange - американський стандартний код для обміну інформацією). Кожному символу з цієї таблиці відповідає встановлений цілочисельний код в діапазоні від 0 до 255. Мінлива символьного типу займає в пам'яті комп'ютера 1 байт. Таблиця кодування ASCII представлена ​​в додатку Е. ASCII таблиця кодів. ASCII представляє собою кодування для представлення користувачеві десяткових цифр як латинського, так і національного алфавітів, керуючих символів і різних знаків пунктуації. У більшості комп'ютерах звичайно використовують розширення ASCII з задіяної другою половиною байта, тобто використовують не 7-бітні, а 8-бітові символи. Оголошення символьного типу даних Char в програмі. Значеннями типу даних є безліч всіх символів, які використовує комп'ютер: російська або латинська буква, реєстр букв (велика чи маленька), цифра, знаки пунктуації та спеціальні знаки (це символи - "+", "-", "/", "* "," = "," "і т.д.) або знак пробіл" ". У Турбо Паскалі значення символьного типу містять в апострофи, наприклад: 'Б'. До даних символьного типу застосовують оператори порівняння. Символьний тип даних може використовуватися як основа для перечислимого типу (із застосуванням функції ORD) та інтервального типів даних. Оголошення символьного типу даних char: Var ch: char;

21. Рядки. Стандартні процедури та функції для виконання операцій над рядками.

Рядок у загальному значенні цього слова – скінченна послідовність символів. У програмуванні для подання рядків використовують масиви символів.

Типи рядків мають свої специфічні операції, не означені над масивами символів, тобто рядки та символьні масиви є цілком різними типами.

Змінна-рядок є масивом символів разом із додатковим компонентом. В означенні типу задається довжина n послідовності символьних компонентів, індексованих цілими 1,…,n. Додатковий компонент указує довжину послідовності символів, поданої в масиві. Ця довжина значення-рядка може змінюватися в процесі виконання програми від 0 до довжини масиву n.

У мові Бор ланд-Паскаль тип рядків задається виразом вигляду

string[n],

де n – ціла стала з діапазону 1 255 (можливо, іменована). Наприклад, string[80]. Змінна такого типу є масивом символів із індексами від 0 до n. Значення-рядок подається змінними з індексами від 1 до n, змінна з індексом 0подає довжину рядка. Точніше, якщо її значення c, то m=ord(c) розглядається як довжина значення-рядка. У процесі виконання програми вона може мінятися від 0 до n.

Елементи масиву з індексами від m+1 до n недоступні; їх значення можна розглядати як "сміття". Спроба присвоїти щось цим елементам або взяти їх значення призведе до аварійного завершення програми.

Оскільки невід'ємна довжина значення-рядка подається в одному байті, вона не може перевищувати 255. Звідси "маємо, те що маємо", тобто обмеження 255 на довжини рядків. Ім'я типу string еквівалентне виразові string[255].

Найпростішими виразами типу рядок є ім'я змінної-рядка, рядкова стала (літерал), або вираз типу char. Над рядками означена бінарна операція катенації (або дописування); її знаком є '+'. Результат одержується дописуванням правого операнда до лівого: значенням виразу '123'+'45' є '12345'. Ціла довжина рядка повертається з виклику функції length із аргументом-рядком: length('123') = 3.

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

Вираз типу "рядок" можна присвоїти змінній-рядку. Його символи присвоюються елементам змінної, починаючи з першого. Якщо довжина значення більша максимально можливої довжини n змінної, то присвоюються лише n перших символів. При цьому довжина значення (або n) неявно присвоюється додатковому компоненту змінної-рядка (як символ нульовому елементу масиву). Наприклад, нехай змінна s означена як string[3]. Після присвоювання

s:='12345'

чотири її компоненти з індексами 0, 1, 2, 3 матимуть значення chr(3), '1', '2', '3', а після

s:='12'

– chr(2), '1', '2', а останній компонент буде недоступним, і його значення буде "сміттям". За останнього значення змінної s виконання оператора

s:=s+'9'

надасть їй значення '129', а оператора

s:='9'+s

– значення '912'. В обох випадках s[0]=chr(3). Після присвоювання s:='' змінна s подає порожній рядок:

s[0]=chr(0), а решта елементів недоступні.

Змінити довжину значення можна явно, змінивши нульовий символ. Якщо після s:='' виконати s[0]:=2, то значення компонентів із індексами 1 і 2 зі "сміття" перетворяться на значення-рядок. Присвоювання іншим елементам рядка не змінює довжини його значення.

У типах рядків означено операції порівняння =, <>, <, … . За означенням, рядки рівні, якщо мають ту саму довжину, і в її межах відповідні символи однакові. У противному разі вони не рівні. Упорядкування рядків залежить від системи програмування.

У системі програмування Бор ланд-Паскаль означено багато корисних підпрограм обробки рядків.

Функція з заголовком

function copy ( s : string; ind, cnt : byte ) : string

задає повернення підрядка рядка s, що починається з s[ind] і має довжину cnt. Наприклад, copy('abcd', 2, 2)='bc'.

Функція з заголовком

function pos ( subs, s : string ) : byte

задає повернення номера того елемента в рядку s, починаючи з якого subs входить у s як підрядок (якщо не входить, то повертається 0). Наприклад, pos('bc', 'abcd')=2, pos('aa', 'abcd')=0.

Процедура з заголовком

procedure val(s : string, var v; var ErrCode : integer)

задає перетворення зображення числа в рядку s у числовий тип і присвоювання його змінній v. Якщо перетворення дійсно можливе, то значенням ErrCode буде 0. У противному разі її значенням буде позиція з символом у рядку, починаючи з якого перетворення неможливе. Тип аргументу, відповідного параметрові v,повинен мати тип, відповідний змісту рядка s. Так само зміст рядка повинен задавати число, представне в типі цього аргументу. Наприклад, за s='1.3' або s='1E2' другий аргумент повинен бути дійсного типу, а не цілого.

Аналогічно за його типу integer у рядка не повинно бути значень, що подають числа, більші 32767 або менші -32768.

Процедура з заголовком

procedure delete(var s : string; start, len : integer)

задає знищення len символів, починаючи з позиції start у рядку s. Наприклад, за s='abcdef' після виклику delete(s,3, 3) рядок s матиме значення 'abf'. За start=0 або len=0 або start>length(s) рядок не змінюється. За start+len>length(s) з s вилучається підрядок до кінця рядка.

Задачі

1).Що друкується в результаті виконання програми:

а) program strconc ( input, output );

var a: integer; c: char; s: string;

begin

s :='';

for a := 0 to 2 do

begin

c := chr ( ord ( '0' ) + a ); s := c + s + c; writeln ( s )

end

end.

б) program concstr ( input, output );

var a: integer; c: char; s: string;

begin

s :=''; c:= chr ( 47 );

while length ( s ) < 7 do

begin

c := succ ( c ); s := s + c + s; writeln ( s )

end

end.

Тема №7. 26.Процедури і функції для роботи з типізованими файлами

Типізовані файли складаються з однотипних елементів, наприклад, цілих чиел, записів, символів. Тип елементів файлу задається у розділі опису змінних. Для типізованого файла непридатні процедури readln і writeln - типізований файл складається не з рядків, з якими працюють ці процедури, а з однотипних компонентів. Тому читання інформації з типізованого файла здійснюється тільки процедурою read.

read (f, список змінних типу компонентів файла)

А запис інформації в файл процедурою write.

write (f, список виразів типу компонентів файла)

Прямий доступ до файла забезпечується процедурою seek.

seek (f, номер компонента)

причому нумерація компонентів файла починається з нуля. Таким чином, оператор seek(f, 0) перемістить покажчик в файлі, пов'язаному з файловою змінною f, на його початок. Можуть виявитися корисними при переміщеннях по файлу також функції:

Function FilePos(var F): Longint; - повертає положення покажчика в файлі (0 - початок файлу, перший компонент, і т.п.)

Function FileSize(var F): Longint; - повертає кількість компонентів в файлі.

Оскільки нумерація компонентів файла починається з нуля, для того, щоб перейти до останнього компонента, потрібно скористатися оператором seek(f, FileSize(f)-1); оператор seek(f, FileSize(f)) перемістить покажчик за останній компонент (в кінець файла). Оскільки нумерація компонентів файла починається з нуля, для того, щоб перейти до останнього компонента, потрібно скористатися оператором seek(f, FileSize(f)-1); оператор seek(f, FileSize(f)) перемістить покажчик за останній компонент (в кінець файла).

При виникненні помилок під час роботи з файлами (відкриття неіснуючого файла для читання, перехід на неіснуючий компонент файла і т.п.) виникають помилки періоду виконання і виконання програми уривається. Іноді буває необхідно не переривати дію програми, а виконувати обробку можливих помилкових ситуацій свідомо. У такому випадку потрібно відключити автоматичний контроль операцій введення-виведення; це робиться за допомогою директиви компілятора {$I-}. Відновлення автоматичного контролю виконує директива {$I+}. Якщо автоматичний контроль операцій введення-виведення відключений, для перевірки правильності останньої операції введення-виведення використовується функція IOResult. Якщо операція завершилася успішно, функція повертає нульове значення, в іншому випадку - ненульове.

При відкритті типізованого файла для читання (процедурою reset) можна записувати у файл, якщо тільки при цьому не збільшується його розмір; компонент, що тобто записується в файл повинен замінювати один з існуючих. Якщо в файл повинна бути додана певна інформація, потрібно скористатися тимчасовим файлом: створити новий файл, переписати в нього вміст існуючого файла, а потім, не закриваючи відкритий для запису файл, дописати в нього нові елементи. Після завершення запису тимчасовий файл може бути перейменований, а непотрібний - видалений за допомогою процедур:

Procedure Erase(var F); - видаляє файл, пов'язаний з F

Procedure Rename(var F; Newname); - перейменовує файл, пов'язаний з F.

28. Нетипізовані файли відрізняються тим, що для їх компонентів не вказано

тип. Відсутність типу робить ці файли, з одного боку, сумісними з любими

іншими файлами, а з іншого – дозволяє організувати швидкий обмін даними

між пам’яттю та диском.

При ініціалізації нетипізованих файлів процедурами reset чи rewrite можна

вказати довжину запису в байтах. Наприклад:

var

f:file;

begin

reset(f,512);

end.

В наведеному прикладі файл, пов’язаний із нетипізованою файловою

змінною f, буде використовуватися в програмі, як нетипізований файл з

довжиною запису 512 байт. Якщо при ініціалізації файлу довжину опущено, то

по замовчуванню вважається, що довжина рівна 128 байтам. В Паскалі довжина

запису повинна бути додатньою і не перевищувати 65535 байт. Для

прискорення роботи з файлом рекомендується вибирати довжину запису

кратною величині сектора дискового носія інформації (величина одного

сектора – 512 байт). Максимальної швидкості при роботі з нетипізованим

файлом можна досягти при довжині запису рівній довжині одного кластера.

Величина кластера може бути різною у різних обчислювальних системах (два

сектори і більше).

При роботі з нетипізованими файлами можуть бути використані всі

процедури і функції, що використовуються при роботі з типізованими файлами, 82

крім read та write. Замість них при роботі з нетипізованими файлами

використовуються процедури blockread та blockwrite:

blockread(<файлова змінна>,<буфер>,<кількість записів> [,<результат>]) –

процедура призначена для зчитуання інформації з нетипізованого файлу.

blockwrite(<файлова змінна>,<буфер>,<кількість записів> [,<результат>]) –

процедура призначена для запису інформації до нетипізованого файлу.

Параметр <файлова змінна> вказує, над яким файлом буде виконано

операцію вводу-виводу. Параметр <буфер> вказує ім’я змінної, у яку буде

записуватись прочитана інформація при зчитуванні або із якої змінної буде

записано інформацію у файл при запису інформації. Параметр <кількість

записів> вказує, яку кількість записів треба прочитати чи записати. Змінна, у

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

збереження заданої кількості записів. Необов’язковий параметр <результат>

після виконання заданої процедури містить кількість записів, які реально

вдалося прочитати з файлу або записати у файл. Він використовується для

аналізу помилок при роботі з файлом і організації поведінки програми при

виникненні таких помилок.

Розглянемо приклад :

uses Crt;

var

FromF, ToF: file;

NumRead, NumWritten: Word;

Buf: array[1..2048] of Char;

begin

clrscr;

Assign(FromF, 'c:\myin.txt'); { відкриваємо вхідний файл }

Reset(FromF, 1); {розмір запису 1 байт}

Assign(ToF, 'c:\myout.txt'); { відкриваємо вихідний файл }

Rewrite(ToF, 1); { розмір запису 1 байт } 83

repeat

BlockRead(FromF, Buf, SizeOf(Buf), NumRead); {читаємо з вхідного

файлу}

BlockWrite(ToF, Buf, NumRead, NumWritten); {записуємо увихідний

файл }

until (NumRead = 0) or (NumWritten <> NumRead); {повторюємо ці дії

доки не перепишемо весь вхідний файл}

Close(FromF);

Close(ToF);

end.

52. 1.4 Покажчики

Покажчик – це змінна, що містить адресу іншої змінної, тобто вказує на

неї.

Всі покажчики діляться на типізовані та нетипізовані. Типізовані

покажчики вказують на змінні певних наперед визначених типів. Нетипізовані

покажчики можуть вказувати на змінні будь-яких типів. Для опису типізованих

покажчиків використовується символ ^.

Наприклад:

var

p1:^integer;{покажчик на змінну типу integer}

p2:^real;{покажчик на змінну типу real}

Для опису нетипізованих покажчиків використовують ключове слово

pointer.

Наприклад:

var

p:pointer;

Нетипізовані покажчики зручно використовувати, якщо треба виконувати

якісь операції з адресами змінних різних типів.

Наприклад:

var

p1:^integer;

p2:^real;

pp:pointer;

pp:=p1;

p2:=pp;{допустимаопераціяапрямевиконання p2:=p1 -недопустиме}

Покажчики можуть вказувати на дані любого допустимого у Паскалі типу

крім файлового. 17

Основне призначення покажчиків – це динамічне керування пам’яттю. Як

уже говорилося покажчик це змінна, яка містить адресу деякої області пам’яті

або змінної. Це дає можливість виділяти додаткову пам’ять при необхідності і

звільняти її, коли така необхідність минає. Для виділення пам’яті в Паскалі

існюють такі процедури :

new(varp:^<тип>) – виділяє пам’ять під змінну заданого типу. Адреса

виділеної області пам’яті зберігається у типізованому покажчику p. Покажчик

повинен бути попередньо описаний, як покажчик на даний тип;

getmem(varp:pointer;size:word) – виділяє область пам’яті заданого розміру

size, для збереження нетипізованих даних. Адреса виділеної області

записується у нетипізований покажчик p.

Для звільнення пам’яті, що була виділена за допомогою процедур new та

getmem необхідно використовувати наступні процедури:

dispose(varp:^<тип>) – звільнює пам’ять виділену процедурою new. Типи

вказані при виділенні і при звільненні пам’яті повинні співпадати;

freemem(varp:pointer; size:word) – звільнює область пам’яті розміром size,

виділену процедурою getmem. Розмірsize при виділенні пам’яті і при

звільненні повинен співпадати.

Крім того для зручності роботи з динамічною пам’яттю в Паскалі є дві

функції, що дозволяють перевірити наявність в системі вільної пам’яті,

доступної для динамічного виділення:

functionmaxavail : longint – функція, яка повертає розмір найбільшої

неперервної області вільної пам’яті, доступної для динамічного розподілу. Цей

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

розміщена у пам’яті в даний момент часу;

functionmemavail : longint – функція, яка повертає сумарний розмір вільної

пам’яті, доступної для динамічного розподілу.

Використання динамічного розподілу пам’яті дозволяє значно підвищити

ефективність використання оперативної пам’яті. Після того, як пам’ять18

виділена, над нею можна виконувати ті ж дії, що і над звичайною змінною.

Після звільнення пам’яті вона стає доступною для повторного використання

при роботі з іншими даними. Для використання області пам’яті, на яку вказує

покажчик, застосовують символ ^, що розміщується після імені відповідного

покажчика, як це показано у нижченаведеному прикладі:

var

i,j:^integer;{описуємо два покажчики на змінні цілого типу}

r:^real;{описуємо покажчик на змінну дійсного типу}

k:integer;

d:real;

begin

new(i);{виділяємо область пам’яті під змінну цілого типу і вказує на цю

область}

new(j);{ виділяємо ще одну область пам’яті під змінну цілого типу j

вказує на цю область }

new(r);{ виділяємо область пам’яті під змінну дійсного типу r вказує на

цю область }

i^:=5;{записуємо число 5 у область пам’яті на яку вказує i}

j^:=i^*2;{ записуємо число 10 у область пам’яті на яку вказує j}

k:=i^+j^;{k:=5+10;}

r^:=pi;{записуємо 3.14 до області пам’яті, на яку вказує покажчик r}

d:=sqrt(r^);{d:= π ;}

dispose(r);{звільнення пам’яті на яку вказує r. Ця пам’ять стає доступною

для іншого використання}

dispose(j);{ звільнення пам’яті на яку вказує j. Ця пам’ять стає доступною

для іншого використання }

dispose(i);{ звільнення пам’яті на яку вказує i. Ця пам’ять стає доступною

для іншого використання }

end.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]