
- •Базовий курс програмування у середовищі 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 Спадкування
- •Індивідуальні завдання
- •Контрольні питання
- •Список літератури
- •Зразок оформлення результатів виконання практичного завдання
2.2 Сортування методом «бульбашки»
Припустимо, що для якогось масиву R встановлені наступні закономірності: R[1]< R[2], R[2]< R[3], R[3]< R[4], . . ., R[ n-1]< R[n]. Масив є впорядкованим за зростанням його елементів. Тому можна сформулювати таке правило: якщо кожний елемент масиву менший за безпосередньо наступний за ним елемента, то це є індикатором того, що всі елементи масиву повністю відсортовані.
Таке правило дозволяє організувати порівняння елементів по-новому – тільки в парах сусідніх елементів. Так, якщо в методі лінійного сортування R[1] потрібно було порівнювати (на першому циклі) з R[2], R[3], . . ., R[n], то тепер R[1] досить порівняти тільки з R[2]. Якщо виявиться, що R[1] менше або дорівнює йому, то варто відразу ж перейти до порівняння R[2] c R[3], R[3] з R [4], . . . , R [ n-1 ] з R[n]. Якщо в результаті таких порівнянь буде виявлено, що якийсь елемент більший за наступний за ним елемента, то, помінявши їх місцями, потрібно продовжити процес порівнянні до кінця масиву.
Однак, якщо була зроблена перестановка значень, наприклад, між R[3] і R[4] елементами масиву, то може трапитися так, що нове значення R[3] (отримане з R[4]) буде менше, ніж R[2]. Із цього випливає, що, завершивши черговий цикл по елементах масиву, необхідно повернутися до його початку й знову повторити весь процес попарного порівняння елементів. Якщо в результаті чергового циклу не буде зроблено ні однієї перестановки, то це означає, що масив став упорядкованим.
Отже, новий метод сортування являє собою багатопрохідний процес попарного порівняння сусідніх елементів, який триває доти, доки не буде зареєстрований цикл, на якому не відбулося ні однієї перестановки.
Сформулюємо тепер алгоритм сортування методом “бульбашки”.
Повторювати наступний процес доти, доки не буде зареєстрований цикл, на якому не було ні однієї перестановки: порівнювати суміжні елементи масиву (тобто R[1] з R[2], R[2] з R[3], R[3] з R[4],...,R[ n-l] з R[n]). Якщо вони стоять за зменшенням значень, то поміняти їх місцями.
Метод одержав назву «метод бульбашки», оскільки в ньому мінімальне число масиву, аналогічно бульбашці повітря у воді, спливає на початок масиву (на поверхню води).
Цей метод працює тим ефективніше, чим більше впорядковані елементи масиву у вихідному стані. Таким чином, його доцільно в першу чергу застосовувати для частково впорядкованих масивів. У загальному ж випадку ефективність обох методів приблизно однакова.
У методі «бульбашки» заздалегідь не відомо, скільки циклів знадобиться для того, щоб n елементів масиву виявилися повністю відсортованими. Це число може змінюватися від 1 для повністю впорядкованих масивів до n, коли всі елементи масиву стоять у зворотному порядку. Сортування ж лінійним методом завжди виконується за n -1 цикл.
Приклад 1:
Одновимірні масиви. Є дані спостереження температури повітря за деякий період. Вимагається визначити середню і мінімальну температуру за цей період, підрахувати число днів, коли температура була вищою за 0.
program massiv;
uses Crt;
const n=10; {число елементів масиву};
var
i:integer; {змінна циклу for};
S:longint; {сума температур};
T_Sred:real; {середнє значення t};
T_min:integer; {min значення t};
n_pol:iteger; {кількість днів з додатною t};
T:array[1..n] of integer;
beign
clrscr;
writeln(‘Введіть масив з n елементів’);
for i:=1 to n do
read (T[i]); {читання елементів масиву};
writeln(‘Введіть елементи масиву: ‘);
for i:=1 to n do
write (T[i]:4);
writeln;
{Визначення T_min}
T_min:=T[1];
for i:=2 to n do
if T[i]<T_min
then
T_min:=T[i];
{Визначення T_Sred}
S:=q;
for i:=1 to n do
S:=S+T[i];
T_Sred:=S/n;
{Визначення n_pol}
n_pol:=0;
for i:=1 to n do
if T[i]>0
then
n_pol:=n_pol+1 {підрахунок числа позитивних значень T[i]};
writeln (‘T_Sredn= ‘,T_red:4:1,’T_min= ’,T_min,’n_pol= ‘,n_pol);
readln;
readln; {для затримки до натиснення Enter};
end.
Приклад 2:
Сортування. Метод лінійного сортування.
Умова задачі містить чотири пункти:
Ввести масив R, що складається з n цілих чисел.
Вивести на екран початковий масив.
Відсортувати всі елементи масиву за збільшенням значень.
Вивести на екран відсортований масив.
Для програмного втілення алгоритму лінійного сортування вводиться ще один параметр циклу for – змінна Candidat. Цією змінною позначатиметься кандидат на мінімальне значення при відборі кожного i-го члена зростаючої послідовності чисел. Згідно алгоритму, таким кандидатом може виявитися будь-який елемент масиву, що стоїть після i-гo елементу: i+1, i+2, i+3...n. Очевидно, що порівняння елементу R[i] з подальшими елементами масиву R, що залишилися, найзручніше організувати за допомогою циклу for.
for Candidate i+1 to n do if R[i]>R[Candidat]
then
{Переставити місцями елементи R[i] і R[Candidat]}
Якщо на місце елементу R[i] помістити (привласнити) елемент R[Candidat], то значення в комірці R[i] зникне назавжди; якщо ж, навпаки, комірці R[Candidat] привласнити величину з R[i], то виявиться втраченим значення в R[Candidat]. Проте такі втрати недопустимі, оскільки і R[i], і R[Candidat] повинні бути відповідними елементами відсортованого масиву. Тому для тимчасового зберігання R[i] (або R[Candidat]) вводиться змінна х.
program Lin_Sort;
uses Crt;
const n=5; {довжина масиву}
type
Int_n=1..n;
Mas=array[Int_n] of integer;
var
i:Int_n;{номер поточного елемента масиву}
Candidat:Int_n; {номер «кандидата» на мінімальне значення}
х:integer; {для тимчасового зберігання елемента масиву}
R:Mas; {масив цілих чисел}
beign
clrscr;
writeln('Введіть поелементно масив з ',n,' цілих чисел');
for i:=1 to n do
read(R[i]);
writeln('Вихідний масив R:');
for i:=1 to n do
write(R[i]:4);
writeln; {для виводу наступних повідомлень із нового рядка}
{Реалізація алгоритму лінійного сортування}
for i:=1 to n-1 do
for Candidat:=i+1 to n do
if R[i]>R[Candidat] then
begin
x:=R[i];
R[i]:=R[Candidat];
R[Candidat]:=x;
end;
writeln('Відсортований масив');
for i:=1 to n do
write(R[i]:4);
readln;
readln;
end.{Lin_Sort}
Приклад 3:
Сортування. Метод «бульбашки».
Блок програми, що реалізує алгоритм сортування, містить два вкладених цикли. Зовнішній цикл repeat_until займається лише тим, що постійно «повторює» внутрішній цикл for, поки не виявиться, що при черговому перегляді (проході) масиву не відбулося ні однієї перестановки елементів (при цьому S=0). Завданням циклу for є послідовне порівняння всіх пар суміжних елементів у масиві R. За один крок зовнішнього циклу внутрішній цикл завжди зробить (n-1) крок. Кількість повторень зовнішнього циклу заздалегідь невідомо, а визначається подією S=0.
Наприкінці кожного циклу в змінній S буде міститись число, значення якого дорівнює числу перестановок. Значення цього числа може змінюватися в інтервалі від 0 до n-1. Ясно, що новий цикл варто виконувати завжди, коли S не дорівнює нулю. При цьому фактичне число циклів не має значення, важливо, що воно більше нуля.
program Bulb_Sort;
uses Crt;
const n=5; {довжина масиву}
type
Int_n=0..n;
Mas=array[Int_n] of integer;
var
i:Int_n; {номер поточного елемента масиву}
х:integer; {для тимчасового зберігання елемента масиву}
R:Mas; {масив цілих чисел}
S:Int_n; {число перестановок у кожному циклі}
beign
clrscr;
writeln('Введіть поэлементно масив з ',n,' цілих чисел');
for 1:=1 to n do
read(R[i]);
writeln('Вихідний масив R:');
for l:=1 to n do
write(R[i]:4);
writeln; {для печатки наступних повідомлень із нового рядка}
{Реалізація алгоритму методом бульбашки}
repeat
S:=0; {очищення осередку перед нагромадженням суми}
for i:=1 to n-1 do
if R[i]>R[i+1]
then
begin
x:=R[i]; {організували тимчасове зберігання}
R[i]:=R[i+1];{перестановка елементів}
R[i+1]:=x;{масиву R[i] і R[i+1]}
S:=S+l; {лічильник числа перестановок}
end; {then}
until
S=0;
writeln('Відсортований масив');
for i:=1 to n do
write(R[i] :4);
readLn;
readLn;
end. {Bulb_Sort}