
- •Базовий курс програмування у середовищі Turbo Pascal Методичні вказівки
- •Базовий курс програмування у середовищі Turbo Pascal Методичні вказівки
- •Практична робота №1
- •Організація вводу та виводу даних
- •Мета роботи: ознайомитись з конструкціями мови Turbo Pascal, структурою програм, стандартними типами даних і процедурами вводу та виводу.
- •Теоретичні відомості
- •1 Особливості мови Turbo Pascal
- •1.1 Спеціальні символи
- •1.2 Зарезервовані (ключові) слова
- •1.3 Ідентифікатори
- •1.5 Числа
- •1.6Рядки
- •1.7 Коментарі
- •2 Структура програми
- •Індивідуальні завдання
- •Контрольні питання
- •Практична робота №2
- •Логічні та циклічні структури
- •Теоретичні відомості
- •1 Логічні структури
- •1.1 Команда розгалуження if (умовна команда)
- •1.2 Команда goto
- •1.3 Команда вибору (сase)
- •2 Циклічні структури
- •2.1 Команда циклу з параметром (for)
- •2.2 Команда циклу з передумовою (while)
- •2.3 Команда циклу з постумовою (repeat)
- •2.4 Порівняння роботи команд циклу while, repeat та for
- •Індивідуальні завдання
- •Контрольні питання
- •Практична робота №3
- •Одновимірні масиви. Сортування
- •Мета роботи: ознайомитись з поняттям одновимірних масивів та діями над ними, навчитися застосовувати різні методи сортування для розв’язку математичних і технічних задач.
- •Теоретичні відомості
- •1 Одновимірні масиви
- •1.1 Додавання елементів масиву
- •1.2 Лічильник
- •1.3 Екстремуми
- •2 Методи сортування
- •2.1 Метод лінійного сортування
- •2.2 Сортування методом «бульбашки»
- •Індивідуальні завдання
- •Контрольні питання
- •Практична робота №4
- •Багатовимірні масиви
- •Мета роботи: вивчити технологію роботи з багатовимірними масивами.
- •Теоретичні відомості
- •1 Опис багатовимірних масивів
- •2 Доступ до елементів масивів
- •3 Масиви ідентичного типу
- •4 Головна та побічна діагоналі
- •6 Ввід матриці
- •7 Виведення матриці
- •Індивідуальні завдання
- •Контрольні питання
- •Практична робота №5
- •Підпрограми
- •Мета роботи: ознайомитись з правилами використання підпрограм, вивчити відмінності між процедурами та функціями.
- •Теоретичні відомості
- •1 Процедури та функції
- •1.1 Опис процедури
- •1.2 Опис функції
- •1.3 Формальні та фактичні параметри
- •1.3.1 Передача параметрів у підпрограмах
- •1.3.2 Виклик підпрограм
- •1.4 Глобальні та локальні змінні
- •1.5 Основні відмінності між функціями і процедурами
- •2 Рекурсивні функції
- •Індивідуальні завдання
- •Контрольні питання
- •Практична робота №6
- •Символьні та рядкові змінні
- •Мета роботи: ознайомитись з прийомами роботи із символьними та рядковими змінними.
- •Теоретичні відомості
- •1 Символьні змінні
- •2 Множини
- •3 Рядкові змінні
- •3.1 Оголошення рядкових змінних
- •3.2 Доступ до окремих елементів рядка
- •3.3 Зміна поточної довжини рядка
- •3.4 Злиття рядків
- •3.5 Порівняння рядків
- •3.6 Порожній рядок
- •3.7 Рядки і символи
- •3.8 Масиви символів і рядка
- •3.9 Стандартні підпрограми для обробки рядків.
- •Індивідуальні завдання
- •Контрольні питання
- •Практична робота №7
- •Записи. Записи з варіантами
- •Мета роботи: навчитись створювати прості бази даних за допомогою записів та записів з варіантами.
- •Теоретичні відомості
- •1 Записи
- •2 Записи з варіантами.
- •Індивідуальні завдання
- •Контрольні питання
- •Практична робота №8
- •Файли: текстові, типізовані, нетипізовані
- •Мета роботи: ознайомитись з випадками використання файлів, типами файлів та методами обробки елементів файлів.
- •Теоретичні відомості
- •1 Текстові файли
- •2 Типізовані файли. Мітки
- •3 Нетипізовані файли
- •Приклад 4:
- •Приклад 5:
- •Індивідуальні завдання
- •Контрольні питання
- •Практична робота №9
- •Мета роботи: вивчити структуру та особливості роботи з модулями в Turbo Pascal.
- •Теоретичні відомості
- •1 Структура модуля
- •1.1 Заголовок модуля
- •1.2 Інтерфейс модуля
- •1.3 Виконавча частина модуля
- •1.4 Розділ ініціалізації.
- •2 Етапи розробки модуля
- •Індивідуальні завдання
- •Контрольні питання
- •Практична робота №10
- •Графіка
- •Мета роботи: ознайомитись з принципами побудови графіків функцій та інших графічних об’єктів за допомогою засобів TurboPascal.
- •Теоретичні відомості
- •1 Основні процедури і функції модуля Graph
- •2 Робота із зображеннями.
- •3 Побудова і масштабування графіків
- •Індивідуальні завдання
- •Контрольні питання
- •1 Дані динамічної структури
- •2 Вказівник
- •3 Списки
- •4 Стек. Черга
- •4.1 Алгоритм побудови стека
- •4.2 Алгоритм побудови черги
- •Індивідуальні завдання
- •Контрольні питання
- •Практична робота №12
- •Об’єктно-орієнтоване програмування
- •Мета роботи: засвоїти матеріал щодо можливостей TurboPascal при створенні об’єктів.
- •Теоретичні відомості
- •1 Поняття «об'єкт»
- •2 Спадкування
- •Індивідуальні завдання
- •Контрольні питання
- •Список літератури
- •Зразок оформлення результатів виконання практичного завдання
4 Стек. Черга
Стек – це структура даних, в якій елемент, записаний останнім, зчитується першим. Діє принцип LIFO – “Last Input First Output” (останнім прийшов, першим пішов)». Стек часто використовується в програмуванні для реалізації рекурсій.
Черга – це структура даних, в якій елемент, записаний першим, зчитується першим. Діє принцип FІFO – “First Input First Output” (першим прийшов, першим пішов).
Максимально припустимі розміри стека й черги – важливі характеристики реалізації мови програмування, які визначають коло завдань, які можна вирішити Стеки й черги описуються й створюються в пам'яті за допомогою списків.
4.1 Алгоритм побудови стека
Визначити вказівник на перший елемент first:=nil;
Виділити пам'ять для нового елемента new(curr);
Занести значення даних за адресою вказівника, наприклад, readln (curr^.data);
Зв'язати перший елемент з поточним curr^.next:=first;
Вказівник на перший елемент перепризначити на поточний first:=curr; Повторити дії від пункту 2 доти, поки не закінчаться всі елементи.
4.2 Алгоритм побудови черги
Виділити пам'ять для поточного елемента черги new(curr);
Запам'ятати вказівник на перший елемент – first:=curr;
Запам'ятати покажчик на попередній елемент ргеv:=curr;
Ввести дані в пам'ять: rеadln(cuur^.data);
Встановити вказівник на наступний елемент curr^.next:=nil;
Зв'язати поточний елемент з попереднім, перепризначивши вказівник prev^.next:=curr;
Виділити пам'ять для нового елемента й повторити дії пунктів 3 - 7.
Приклад 1:
Побудувати список з одночасним сортуванням елементів списку в порядку зростання. Виконати операції додавання елементів списку.
Алгоритм
Список порожній.
Повторювати дії поки не буде натиснута клавіша:
Виведення списку на екран.
Додавання елемента списку й сортування списку:
- виділити пам'ять для нового елемента;
- ввести елемент в пам'ять;
- якщо список порожній, то перепризначити вказівник на новий елемент, вказівнику на наступний елемент - привласнити значення nil;
- якщо список не порожній, та якщо нове значення елемента менше першого, помістити елемент у початок списку;
- інакше пошук місця вставки нового елемента в списку елементів.
Вилучення заданого елемента:
- якщо список не порожній, то введення елемента, який необхідно вилучити;
- якщо необхідний елемент знайдено, то перепризначити вказівники;
- інакше пошук необхідного елемента, вилучення його й звільнення пам'яті.
Кінець.
program Din_Var;
{організація списку з операціями сортування елементів, виведення списку}
uses
crt;
type
ptr=^zap; {тип вказівника на запис}
zap=record
numbcr:string; {елемент даних}
next:ptr; {вказівник на наступний елемент}
end;
var
first:ptr; {вказівник на початок списку}
ch:char; {вибір режиму обробки списку}
newptr, {вказівник на введений елемент}
curr, {вказівник на наступний елемент}
prev:ptr; {вказівник на попередній елемент}
reg:string; {значення елементу даних}
done:boolean; {прапорець для пошуку місця вставки елементу}
{включення елементу в список}
procedure insert;
begin
write('Input element:'); readln(reg);
new(newptr); {виділення пам'яті для нового елементу)
newptr^.number:=reg; {введення даних в пам’ять}
if first=nil then
{формування першого елементу списку}
begin
first:=newptr; {вказівник початку списку па перший елемент} first^.next:=nil;{вказівник на наступний елемент}
end else {якщо список не порожній)
if reg<=first^.number then{якщо ціле значення менше існуючих}
{вставка нового елемента в початок списку}
begin
newptr^.next:=firsl; flrsl:=newptr;
end else {якщо ціле значення більше існуючих}
{пошук необхідного місця вставки}
begin
curr:=first; {вказівник поточного елемента вказує на перший}
repeat
prev:=curr; {вказівник попереднього елемента вказує на
поточний}
curr:=urr^.next;{вказівник поточного елемента вказує на
наступний}
if curr=nil
then done:=true
else done:=curr^.number>=reg;
until done; {переадресація пари вказівників до тих пір,
поки значення даного більше ніж ті, що є в
списку:until curr^.nutnber>=reg}
{вставка нового елементу}
prev^.next:=newptr;
newptr^.next:=curr;
end;
end; {кінець процедури}
{вилучення елементу зі списку, перший елемент витягаєтся останнім}
procedure delete;
begin
if first=il then {якщо список порожній}
begin
writeIn('List is empty. Press ENTER...');
readln;
end;
else begin {якщо список непорожній}
write('Input element:');
readln(reg); {введення значення, що буде вилучатись}
curr:=first;
if curr^:nuinber=reg then {якщо необхідний елемент знайдений}
first:=curr^.next
else
repeat {пошук необхідного елементу}
prev:=curr; {перепризначення вказівників}
curr:=curr^.next;{вказівник па попередній
елемент стає поточним вказівником, вказівник нa
поточний елемент вказує на наступний}
until (curr^.number=reg) or (curr^.next=nil);
{вилучення знайденого елементу й звільнення пам'яті}
if curr^.number=reg then {якщо елемент списку збігається із заданим}
begin
prev^.next := curr^.next;{переадресація вказівників}
dispose(curr); {звільнення пам'яті}
end
else begin {якщо елемент не знайдений}
writeln(reg,' not found in lisl. Press ENTER...');
readln;
end;
end;
end; {кінець процедури delele}
{виведення списку на екран}
procedure outlist;
begin
curr:=flrst; {поточний вказівник показує
на перший елемент}
if curr=nil then writeln ('Lisl is empty')
eIse begin
writeln('output Iisl:');
repeat
write(curr^.number,' ');{виведення значення елементу}
curr:=curr^.next; {поточним стає вказівник на
наступний елемент}
until curr=nil; {виведення значення, поки є
елементи в списку}
end;
writeln;
end;
{головна програма}
begin
first:=nil; {на початку список порожній}
repeat
elrser; outlist; {очищення екрана, виведення
списку на екран}
writeln('l – input D – delete Q - quit');
write('input command:');
readln(ch); ch:=upcase(ch);
case ch of
'I':insert;
'D':delete;
end;
until ch='Q';
end.