- •Основні стандартні функції мови Pascal. Навести приклади виразу деяких функцій користувача через основні функції в програмах мовою Pascal.
- •16.Використання в програмах мовою Pascal складеної команди та команди безумовного переходу. Наведіть приклади їх використання.
- •18.Організація циклічного обчислювального процесу в програмах мовою Pascal. Наведіть приклади блок-схем таких алгоритмів.
- •21.Організація масивів даних(види масивів, операції з масивами). Опис та використання їх в програмах (навести приклади).
- •23.Підпрограми, їх призначення та види підпрограм в мові Pascal.
- •26.Рекурсивні функції та їх використання.
- •27.Поняття модулів. Їх види та використання в програмах.
- •28.Модулі користувача (правила створення).
- •30.Поняття файлу. Програмна модель файлу. Типи файлів. Способи доступу.
- •32.Стандартні процедури і функції для файлів прямого доступу
- •32.Використання текстових файлів в програмах. Обробка текстового файлу в програмах мовою Pascal.
- •34.Поняття динамічної пам’яті, вказівники та динамічні змінні. Поняття стека та черги.
- •35.Загальна характеристика типів даних мови Паскаль
- •36.Використання графіки в програмах мовою Pascal.
- •37.Стандартні процедури та функції для графічних побудов. Наведіть приклади їх використання в програмах мовою Pascal.
32.Використання текстових файлів в програмах. Обробка текстового файлу в програмах мовою Pascal.
Відкриття текстового файлу здійснюється також як і відкриття типізованого файлу, але для текстового файлу процедура Reset відкриває файл тільки для зчитування, а Rewrite – тільки для запису. Крім того для текстових файлів застосовується ще процедура
Append(< ФЗ >);
яка відкриває вже існуючий текстовий файл для запису в кінець цього файлу (файловий покажчик при цьому встановлюється на кінець файлу).
Доступ до елементів файлу
Стандартні процедури і функції для файлів всіх типів
Еоf (<ФЗ>) : boolean
Функція повертає значення true, якщо досягнутий кінець файлу або false у протилежному випадку.
Дуже зручно використовувати цю функцію при організації циклічного зчитування з файлу. Розглянемо приклад: заданий файл ‘c:\myfile.dat’, що містить непусту послідовність цілих чисел. Обрахувати суму цих чисел.
var
F: file of integer; {файл цілих чисел}
S: longint; {накопичувач суми}
x:integer; {проміжна змінна для зчитування компонентів файлу}
begin
{відкриття файлу для зчитування}
Assign (F, ‘c:\myfile.dat’);
Reset(F);
S:=0;
while not EOF (F) do
begin
read(F, x);
S:=S+x;
end;
Close (F); {закриття файлу}
Writeln (‘S=’, S:10);
end.
В наведеному прикладі на початку програми файлова змінна зв’язується з вказаним у задачі файлом на диску, який відкривається для зчитування. Тіло циклу while буде повторюватися доки не буде досягнуто кінець файлу. У циклі з файлу послідовно зчитується по одному компоненту та додаються до суми. По завершенні циклу значення суми виводиться на екран.
34.Поняття динамічної пам’яті, вказівники та динамічні змінні. Поняття стека та черги.
Динамічний розподіл пам'яті - спосіб виділення оперативної пам'яті комп'ютера для об'єктів у програмі, при якому виділення пам'яті під об'єкт здійснюється під час виконання програми.
При динамічному розподілі пам'яті об'єкти розміщуються в т.зв. " купі "( англ. heap ): При конструюванні об'єкта вказується розмір запитуваної під об'єкт пам'яті, і, в разі успіху, виділена область пам'яті, умовно кажучи, "вилучається" з "купи", стаючи недоступною при наступних операціях виділення пам'яті. Протилежна за змістом операція - звільнення зайнятої раніше під який-небудь об'єкт пам'яті: освобождаемая пам'ять, також умовно кажучи, повертається в "купу" і стає доступною при подальших операціях виділення пам'яті.
У міру створення в програмі нових об'єктів, кількість доступної пам'яті зменшується. Звідси випливає необхідність постійно звільняти раніше виділену пам'ять. В ідеальній ситуації програма повинна повністю звільнити всю пам'ять, яка потрібна для роботи. За аналогією з цим, кожна процедура (функція або підпрограма) повинна забезпечити звільнення всієї пам'яті, виділеної в ході виконання процедури. Некоректне розподіл пам'яті призводить до т.зв. "Витокам" пам'яті, коли виділена пам'ять не звільняється. Багаторазові витоку пам'яті можуть призвести до вичерпання всієї оперативної пам'яті і порушити роботу операційної системи.
Інша проблема - це проблема фрагментації пам'яті. Виділення пам'яті відбувається блоками - безперервними фрагментами оперативної пам'яті (таким чином, кожен блок - це кілька йдуть підряд байтів). У якийсь момент, в купі просто може не виявитися блоку відповідного розміру і, навіть, якщо вільна пам'ять достатня для розміщення об'єкта, операція виділення пам'яті закінчиться невдачею.
Для управління динамічним розподілом пам'яті використовується "Збирач сміття" - програмний об'єкт, який стежить за виділенням пам'яті і забезпечує її своєчасне звільнення. Збирач сміття також стежить за тим, щоб вільні блоки мали максимальний розмір, і, при необхідності, здійснює дефрагментацію пам'яті.
Стек в інформатиці та програмуванні — різновид лінійного списку, структура даних, яка працює за принципом (дисципліною) «останнім прийшов — першим пішов» (LIFO, англ. last in, first out). Всі операції (наприклад, видалення елементу) в стеку можна проводити тільки з одним елементом, який знаходиться на верхівці стеку та був введений в стек останнім.
Стек можна розглядати як певну аналогію до стопки тарілок, з якої можна взяти верхню, і на яку можна покласти верхню тарілку (інша назва стеку — «магазин», за аналогією з принципом роботи магазину в автоматичній зброї)
Черга (англ. queue) в програмуванні — динамічна структура даних, що працює за принципом «перший прийшов — перший пішов» (англ. FIFO — first in, first out). У черги є голова (англ. head) та хвіст (англ. tail). Елемент, що додається до черги, опиняється в її хвості. Елемент, що видаляється з черги, знаходиться в її голові.
Така черга повністю аналогічна звичній «базарній» черзі, в якій хто перший встав в неї, той першим буде обслуженим.
