- •Історична довідка
- •Характеристика й особливості мови
- •Алфавіт мови
- •Службові (зарезервовані) слова.
- •Структура програми мови Turbo Pascal
- •Процедури введення-виведення. Деякі вбудовані функції Турбо-Паскаля.
- •Функції числових параметрів.
- •Базові управляючі конструкції Турбо-Паскаля Оператори умовного переходу.
- •Оператори циклів у Паскалі
- •Концепція типів даних. Типи даних в мові Pascal
- •Дійсні типи
- •Бульовий (логічний) тип
- •Символьні і рядкові змінні
- •1. Символьний тип
- •2. Рядковий тип
- •Перерахований та обмежений типи
- •1. Перерахований тип
- •2. Обмежений тип
- •1. Поняття масиву. Одномірні масиви
- •2. Багатомірні масиви
- •3. Сортування і пошук
- •Множинний тип
- •Тип запис
- •Процедури і функції
- •Формальні і фактичні параметри. Механізм параметрів
- •Параметри - значення
- •Параметри-змінні
- •Безтипові параметри
- •Приведення типів.
- •Процедурні типи
- •Рекурсія Рекурсивні визначення
- •Рекурсивні підпрограми
- •Алгоритми з поверненням. Розв’язок задачі про рух коня
- •Алгоритми з поверненням. Розв’язок задачі про вісьмох ферзів
- •Модулі в Турбо Паскалі
- •Модуль crt
- •1. Керування екраном
- •2. Робота з клавіатурою
- •3. Інші можливості
- •Графіка в Турбо Паскалі
- •1. Включення і вимикання графічного режиму.
- •2. Побудова елементарних зображень
- •3. Виведення текстової інформації.
- •Файли в мові програмування Pascal
- •Установчі і завершальні операції
- •Операції введення-виведення
- •Обробка помилок введення-виведення
- •Переміщення по файлу
- •Спеціальні операції
- •Текстові файли
- •Двійкові файли
- •Статичні і динамічні змінні
- •Покажчики
- •Стан покажчика
- •Установка розмірів динамічної пам'яті
- •Сумісність і перетворення посилкових типів
- •Динамічні структури даних
- •Динамічні змінні: інші види списків, стек і черга.
- •1. Інші види списків
- •2. Стек і черга
- •Дерева і пошук у деревах
- •1. Визначення й описи структур даних
- •2. Алгоритми
- •Змішані таблиці
- •Об’єктно-орієнтоване програмування. Що таке об’єктно-орієнтоване програмування
- •Інкапсуляція
- •Спадкування
- •Віртуальні методи і поліморфізм
- •Конструктори, динамічні об'єкти і деструктори
- •Поля і методи: сховані і загальнодоступні
- •Системно- залежні розширення
- •Налагодження змінних
- •Оверлеї
- •Переривання і системні виклики
- •Доступ до пам'яті і портів
- •Перевизначення переривань
2. Багатомірні масиви
При необхідності можна нумерувати масиви не одним індексом а двома і більше. Двовимірному масиву відповідає матриця в математиці, тобто прямокутна таблиця.
Приклади описів багатомірних масивів:
var Matrix: array[1..4,1..3] of real;
Cube3D: array[1..5,1..5,1..5] of integer;
Розглянемо приклад використання двовимірного масиву.
Приклад 3. Побудувати календар на наступний рік, тобто при введенні номера місяця і числа видавати день тижня.
program Calendar;
type tWeekDay = (Mon,Tue,Wed,Thu,Fri,Sat,Sun,NoDay);
{NoDay - немає дня (наприклад, 30.02)}
tCalendar = array [1..12,1..31] of tWeekDay;
var CL: tCalendar;
m,d: byte; {місяць і число}
wd: tWeekDay; {день тижня}
begin
{Будуємо масив:}
{1. Заповнимо весь календар значеннями "немає дня":}
for m:=1 to 12 do
for d:=1 to 31 do CL[m,d]:=NoDay;
{2. Будуємо масив-календар:}
m:=1; d:=1;
wd:=Mon;
repeat
CL[m,d]:=wd;
case m of
4,6,9,11:if d=30 then begin
m:=m+1;
d:=1;
end
else d:=d+1;
1,3,5,7,8,10,12: if d=31 then begin
m:=m+1;
d:=1;
end
else d:=d+1;
2:if d=28 then begin
m:=m+1;
d:=1;
end
else d:=d+1;
end;
wd:=tWeekDay((ord(wd)+1) mod 7);
until m=13;
{Виводимо на екран:}
repeat
write('Номер місяця > '); readln(m);
write('Число > '); readln(d);
case CL[m,d] of
Mon: writeln('Понедєльник');
Tue: writeln('Вівторок');
Wed: writeln('Середовище');
Thu: writeln('Четвер');
Fri: writeln('П'ятниця');
Sat: writeln('Субота');
Sun: writeln('Неділя');
NoDay: writeln('Такого дня немає в календарі');
end;
until false;
end.
3. Сортування і пошук
У прикладних програмах широко поширені два типи операцій, зв'язаних з масивами:
-
Впорядкування елементів масиву за зростанням чи спаданням (сортування)
-
Пошук елемента в масиві.
Розглянемо найпростіший варіант сортування масиву (сортування вибором). Нехай є масив з n елементів; спочатку знайдемо в ньому самий маленький серед елементів з номерами 2,3,...n і поміняємо місцями з першим елементом, потім серед елементів з номерами 3,4,...n знайдемо найменший і обміняємо з другим, і т.д. У результаті наш масив виявиться відсортованим по зростанню.
program SelectSort;
const n = 10;
var a: array [1..n] of integer;
i,j,jmin,buf: integer;
{jmin - номер найменшого елемента,
buf використовується при обміні значень двох елементів}
begin
for i:=1 to 10 do begin
write('Введіть елемент номер ',i,' -> ');
readln(a[i]);
end;
for i:=1 to n-1 do begin
jmin:=i;
for j:=i+1 to n do
if a[j]<jmin then jmin:=j;
buf:=a[i];
a[i]:=a[jmin];
a[jmin]:=buf;
end;
write('Результат: ');
for i:=1 to 10 do write(a[i],' ');
readln;
end.
Інший спосіб — бульбашкове сортування, він працює трохи швидше, ніж попередній. На першому етапі рухаємося від n-го елемента до 2-го і для кожного з них перевіряємо, чи не менше він попереднього; якщо менше, те змінюємо місцями поточний і попередній. У підсумку перший елемент буде найменшим у масиві. На другому етапі також проходимо елементи від n-го до 3-го, на третьому — від n-го до 4-го, і т.д. У підсумку масив буде відсортований по зростанню.
program BubbleSort;
...
var i,j: integer;
buf: integer;
begin
...
for i:=2 to n do
for j:=n downto i do
if a[j]<a[j-1] then begin
buf:=a[j];
a[j]:=a[j-1];
a[j-1]:=buf;
end;
end.