
- •Базовий курс програмування у середовищі 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 Головна та побічна діагоналі
Матриці, у яких число рядків дорівнює числу стовпців, називаються квадратними, у таких матриць є головна й побічна діагоналі. Ці поняття широко використовуються при обробці матриць.
Головна діагональ – це елементи, розташовані на діагоналі, що проходить із лівого верхнього кута в нижній правий кут матриці.
Рисунок 1 – Головна діагональ матриці
В елементах матриці, що належать головній діагоналі, номер рядка і збігається з номером стовпця j. Таким чином, умовою знаходження елемента матриці на її головній діагоналі є виконання рівності i=j. При i>j елементи знаходяться під, а при i<j – над головною діагоналлю.
До побічної діагоналі квадратної матриці належать елементи, розташовані на діагоналі, що проходить із її верхнього правого кута в лівий нижній кут.
Рисунок 2 – Побічна діагональ
Припустимо, що число стовпців і число рядків матриці дорівнює n. Тоді для елементів матриці, розташованих на її побічній діагоналі, справедливі наступні рівності:
i=1, j=n;
i=2, j=n-1;
i=3, j=n-2;
…
i=n, j=1.
Аналіз цих рівностей дозволяє одержати співвідношення, що зв'язує номери рядка й стовпця елемента побічної діагоналі: 1=n-j+1.
При i>n-j+1 елементи лежать під, а при i<n-j+1 – над побічною діагоналлю.
6 Ввід матриці
Матриця – це таблиця чисел, розташованих на перетині заданого числа рядків і стовпців. Тому зручніше за всі її елементи вводити в пам’ять комп'ютера (і виводити на екран) елемент за елементом кожного рядка.
При такому введенні даних кожний елемент рядка повинен відділятися від сусіднього одним або більшим числом пробілів, а наприкінці кожного рядка (у тому числі й останнього), коли набрані всі її елементи, варто натиснути клавішу Enter. Остання операція переносить набрані значення поточного рядка в оперативну пам'ять комп'ютера й переводить курсор у початок наступного рядка.
Нижче наведений фрагмент програми, яка реалізує ввід матриці М, що складається з n_st рядків і n_cl стовпців (колонок):
for i:=1 to n_st do
for j:=1 to n_cl do
read(M[i,j]); {зчитування елемента матриці}
Якщо уважно вводити дані, тобто щоб в результаті в кожному рядку виявилося б не більше n_st елементів, то введення всіх елементів матриці було б правильним. Однак, якщо в якому-небудь рядку після n_cl елемента помилково ввести одне або більше чисел, то вони будуть введені як відповідні елементи наступного рядка, відбудеться зсув всіх наступних елементів, і в підсумку матриця буде введена неправильно.
Для зменшення впливу таких помилок необхідно, щоб програма після введення n_cl елемента кожного рядка переводила покажчик екрана на початок наступного рядка. Це можливо здійснити оператором readln.
for i:=1 to n_st do
begin
for j:=1 to n_cl do
read(M[i,j]); {зчитування елемента матриці}
readln; {встановлення вказівника на початок нового рядка після зчитування елемента в стовпці з номером n_cl}
end; {for_i}
7 Виведення матриці
Для виведення елементів матриці у вигляді рядків і стовпців рекомендується застосовувати наступний блок програми:
for i:=1 to n_st do
begin
for j:=1 to n_cl do
write(M[i,j]:4); {виведення елемента матриці}
writeln; {встановлення вказівника на початок наступного рядка після виведення елемента в стовпці з номером n_cl}
end; {for_i}
Цей фрагмент здійснює виведення матриці за рядками: спочатку виводиться перший рядок, під ним виводиться другий й так далі. Можна, звичайно, здійснити виведення матриці й за стовпцями. Однак у цьому випадку відповідна частина програми буде більше складною:
for j:=n_cl downto 1 do
begin
for i:=1 to n_st do
begin
writeln(M[i,j]:4*j);
GoToXY(WhereX-j*4, WhereY+1);
end; {for_i}
GoToXY(WhereX, WhereY-n_st);
end; {for_j}
GoToXY(whereX, WhereY+n_st);
У цьому фрагменті функції WhereX, WhereY визначають координати поточного положення курсору, а процедура GoToXY встановлює курсор у позицію із заданими координатами.
Приклад 1:
Задано двовимірний масив (матриця) розмірності m×n, елементами якої є цілі числа. Виконати «дзеркальне відображення» елементів матриці відносно вертикальної осі симетрії (поміняти місцями елементи першого стовпця з останнім, другого з передостаннім тощо).
program VertMirrow;
uses Crt;
const m=10; {число рядків}
n=15; {число стовпців}
type
TMatr=array[1..m,1..n] of integer;
var
Matr: TMatr; {вихідна матриця}
B:integer;
i,j: integer;
beign
clrscr;
writeln('Введіть поелементно матрицю');
for i:=1 to m do
begin
for j:=1 to n do
read(Matr[i,j]); {зчитування елемента матриці}
readln; {встановлення вказівника на початок нового рядка після зчитування елемента в стовпці з номером n}
end; {for_i}
{“Дзеркальне” відображення матриці відносно вертикальної осі симетрії}
for j:=1 to n div 2 do {беремо стовпці від 1-го до середнього}
for i:=1 to m do {міняємо місцями симетричні стовпці}
begin
B:=Matr[i,j];
Matr[i,j]:=Matr[i,n-j+1];
Matr[i,n-j+1]:=B;
end;
writeln('Перетворена матриця');
for i:=1 to m do
begin
for j:=1 to n do
write(Matr[i,j]:4); {виведення елемента матриці}
writeln; {встановлення вказівника на початок наступного рядка після виведення елемента в стовпці з номером n}
end; {for_i}
end.
Приклад 2:
Задана квадратна матриця порядку n, елементами якої є цілі числа. Вивести значення елементів на друк, зробивши обхід за «спіраллю», як показано на рисунку:
Розглянемо схему, яка відображає закономірності змінення індексів для виконання обходу за «спіраллю».
Програма, що відповідає наведеній схемі буде мати наступний вигляд:
program VertMirrow;
uses Crt;
const n=10; {порядок квадратної матриці}
type
TMatr=array[1..n,1..n] of integer;
var
Matr: TMatr; {вихідна матриця}
p:integer;
i,j: integer;
beign
clrscr;
writeln('Введіть поелементно матрицю');
for i:=1 to n do
begin
for j:=1 to n do
read(Matr[i,j]); {зчитування елемента матриці}
readln; {встановлення вказівника на початок нового рядка після зчитування елемента в стовпці з номером n}
end; {for_i}
{запис елементів матриці за “спіраллю”}
for p:=1 to (n+1) div 2 do
begin
{запис елементів верхнього рядка р-го “витка”}
for j:=p to n-p+1 do write(Matr[p,j]:4);
{запис елементів правого стовпця р-го “витка”}
for i:=p+1 to n-p+1 do write(Matr[i,n-p+1]:4);
{запис елементів нижнього рядка р-го “витка”}
for j:=n-p downto p do write(Matr[n-p+1,j]:4);
{запис елементів лівого стовпця р-го “витка”}
for i:=n-p downto p+1 do write(Matr[i,p]:4);
end;
writeln('Перетворена матриця');
for i:=1 to n do
begin
for j:=1 to n do
write(Matr[i,j]:4); {виведення елемента матриці}
writeln; {встановлення вказівника на початок наступного рядка після виведення елемента в стовпці з номером n}
end; {for_i}
end.