Файл: ОП Конспект лекций - Паскаль.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 28.06.2020

Просмотров: 1638

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

СОДЕРЖАНИЕ

Тема 13: Складні типи. Масиви

Тема 14: Багатомірні масиви

Тема 15: Пошук і сортування елементів масиву. Класи алгоритмів сортування

Тема 16: Динамічна пам'ять. Адреси і покажчики

Тема 17: Оголошення покажчиків, виділення та звільнення динамічної пам’яті

Тема 18: Процедури та функції для роботи з динамічною пам’яттю

Тема 19: Символьний тип даних. Упаковані масиви

Тема 20: Процедури та функції для обробки рядків

Тема 21: Структурований тип даних - безліч

Тема 22: Структурований тип даних – записи

Тема 23: Опис файлових змінних. Обробка типізованих файлів

Тема 24: Послідовний та прямий доступ до файлів

Тема 25: Обробка не типізованих файлів

Тема 26: Робота з текстовими файлами

Тема 27: Типізовані константи

Тема 28: Поняття та робота з процедурами та функціями

Тема 29: Використання модуля CRT. Програмування клавіатури

Тема 30: Використання модуля CRT. Текстове виведення на екран. Програмування звукового генератора

Тема 31: Графічні можливості TP 7.0. Використання бібліотеки Graph

PointType = record

Тема 32: Бібліотечні модулі користувача

Тема 33: Основні принципи ООП. Створення об’єктів. Використання об’єктів

Список літератури

Додаток А

Основні алгоритми обробки масивів

Додаток Б

Питання перевірки знань з теорії

Додаток В

Поширені коди клавіш

Додаток Д

Коди сканування клавіатури

write(s:3:1,’ ’:2);

end;

end.


  1. Транспонування матриці.

Транспонуванням матриці називається таке її перетворення, при якому i-й стовпець стає i-й рядком, тобто необхідно обчислити b[i,j]:=a[i,j]; i=1,2,...,n; j=1,2,…,m...

Наприклад транспонування


матриці дає матрицю


Приклад програми:


{транспонування матриці А(nXm) заміною рядків матриці її стовпцями}


const

n = 3;

type massiv = array[1..n, 1..m] of real;

var

a : massiv; i,j : integer; s : real;

begin

writeln(‘Введіть матрицю А розміром’,n,’X’,n,’:’);

for i:= 1 to n do

for j:= 1 to m do

read(a[i,j]);

writeln(‘транспонована матриця В:’);

for i:= 1 to n do

begin

for j:= 1 to n do

begin

b[i,j] := a [j,i];{заміна рядка відповідним стовпцем}

write(b[i,j]:3:1,’ ‘,:2);

end;

writeln;

end;

end.


Транспоновану матрицю можна одержати у вихідній матриці, помінявши місцями елементи верхнього трикутника з відповідними елементами нижнього трикутника, розташованих щодо головної діагоналі.

На приведеній нижче матриці елементи верхнього і нижнього трикутника виділені жирним шрифтом, а елементи головної діагоналі – звичайним шрифтом.












Відповідні елементи трикутників замінюємо місцями за допомогою допоміжної змінної В, тимчасово поміщаючи в неї один з елементів, що переставляються, щоб не втратити його значення.

Приклад програми:


{Транспонування квадратної матриці перестановкою відповідних елементів верхнього і нижнього трикутників щодо головної діагоналі}

const

n = 3;

type massiv = array[1..n,1..n] of integer;

var

a : massiv; i, j : integer;

b : integer; {допоміжна змінна}

begin

writeln(‘Введіть матрицю розміром ‘,n,’X’,n,’:’);

for i :=1 to n do

for j :=1 to n do

read(a[i,j]);

{змінюємо місцями елементи верхнього трикутника з відповідними}
{елементами нижнього трикутника}

for i := 1 to n do

begin

for j := i+1 to n do

begin

b := a[i,j]; {за допомогою змінної b}

a[i,j] :=a[j,i]; {змінюємо елементи місцями}

a[j,i] := b;

end;

end;

writeln(‘транспонована матриця:’);

for i :=1 to n do

begin

for j :=1 to n do write(a[i,j],’ ‘);

writeln;

end;

end.


  1. Множення матриці на вектор.

Обчислити добуток P матриці A(nXm) та вектору B(m), тобто виконати p:=a[і,j]*b[j];

Приклад програми:


const

n = 3; m = 4;

type massiv = array[1..n,1..m] of real;

vector = array[1..m] of real;

var

a : massiv; b : vector; i, j, : integer; p :real;

begin

writeln(‘Введіть матрицю розміром ‘,n,’X’,m,’:’);

for i := 1 to n do

for j := 1 to m do

read(a[i,j]);

writeln(‘Введіть вектор розміром ‘,m,’:’);

for j :=1 to m do read (b[j]);

(обчислення добутку)

write(‘Добуток матриці А на вектор В =’);

for i := 1 to n do

begin

for j:= 1 to m do

begin

p := p+a[i,j]*b[j];

end;

end;

write(p:3:1);

end.


  1. Множення матриці на матрицю.

Множити можна матриці, що відповідають одне одному за розміром, тобто число стовпців першої матриці повинне дорівнювати числу рядків другої матриці. Для множення матриці A(nXm) на матрицю B(kXm) необхідно обчислити p:=a[і,l]*b[l,j], при і := 1,...,n; j := 1,…m; l:=1,…k

Приклад програми:


const

n = 2; m = 3; k = 3;

type massiv1 = array[1..n,1..k] of real;

massiv2 = array[1..k,1..m] of real;

var

a : massiv1; b : massiv2; i, j, l : integer; p : real;

begin

writeln(‘Введіть матрицю А розміром ‘,n,’X’,k,’:’);

for i := 1 to n do

for j := 1 to k do

read(a[i,j]);

writeln(‘Введіть матрицю B розміром ‘,k,’X’,m,’:’);


for i := 1 to n do

for j := 1 to m do

read(b[i, j]);

write(‘добуток матриць A на B = ’);

for i := 1 to n do

begin

for j :=1 to m do

begin

for l :=1 to k do p := p+a[i,l]*b[l,j];

end;

end;

write(p:3:1)

end.


  1. Видалення елемента з вектора.

Видалити k-й елемент із вектора A(n) можна, зрушивши весь “хвіст” вектора, починаючи з (k+1)-го елемента, на одну позицію вліво, тобто виконуючи операції a[i]:=a[i+1]; при i := k, k+1,...,n-1.

Приклад програми:


const

n = 5;

type

massiv = array[1..n] of integer;

var

a : massiv; I,k :integer;

begin

writeln(‘Введіть вектор з ‘,n,’ цілих чисел:’);

for i := 1 to n do read(a[i]);

writeln(‘Введіть номер елемента, що видаляється, (від 1 до',n,'):');

read(k);

for i:= k to n-1 do a[i] :=a[i+1];

writeln (‘Вектор без ‘,k,’-го елемента:’);

for i := k to n-1 do write(a[i],’ ‘);

end.


  1. Видалення елемента з матриці.

Видалити k-й елемент у i-му рядку матриці A(nXm) можна, зрушивши весь “хвіст” i-й рядка, починаючи з (k+1)-го елемента, на одну позицію вліво, тобто виконуючи операції a[i,j] := a[i,j+1]; при j :=k,k+1,...m-1;

Після зрушення значення елемента в останньому рядку стане рівним нулю тобто a[і,j]:=0 при j := m;

Приклад програми:


const

n = 3; m = 3;

var

a := array[1..n,1..m] of integer; i, j, k : integer;

begin

writeln(‘Введіть матрицю розміром ‘,n,’X’,m,’=’,n*m,’цілих чисел:’);

for i :=1 to n do

for j :=1 to m do

read (a[i,j]);

writeln(‘Задайте номер рядка елемента, що видаляється:');

readln(i);

writeln(‘Задайте позицію елемента, що видаляється:');

readln(k);

for j := k to m-1 do {видалення елемента}

a[i,j] := a[i,j+1];

j := m; a[i,j] := 0;

writeln(‘Матриця, з якої вилучений елемент a[‘,i,’,’,k,’]:’);

for i := 1 to n do

begin

for j := 1 to m do write(a[i,j],’ ‘);

writeln;

end;

end.


  1. Включення елемента в заданую позицію вектора.

Для включення елемента в i-у позицію вектора необхідно пересунути його “хвіст” вправо на одну позицію, виконуючи операцію a[i+1] :=a[i], при
i:=n, n-1,…,i... Переміщення виконують з кінця, інакше весь “хвіст” буде заповнений елементом a[і]. Далі, a[і]-му елементу привласнюється задане значення b. Розмір масиву збільшується на 1.

Приклад програм:


{Варіант рішення з використанням циклу For}

const

n = 5;

var

a : array[1..n+1] of integer; i, b :integer;

begin

writeln(‘Введіть’,n,’ цілих чисел вектора:’);

for i :=1 to n do read(a[i])

writeln(‘Задайте позицію включення нового елемента:’);

readln(i);

writeln(‘Задайте ціле значение елемента, що включається:');

readln(b);

for i := n downto i do {включення елемента}

a[i+1] := a[i];

a[i] := b;

writeln(‘Вектор із включеним елементом:’);

for i := 1 to n+1 do write(a[i],’ ‘)

end.


{Варіант рішення з використанням стандартної процедури move}

const

n = 5;

var

a : array[1..n+1] of integer; i, b : integer;

begin

writeln(‘Введіть ‘,n,’ цілих чисел вектора:’);

for i :=1 to n do read(a[i]);

writeln(‘Задайте позицію включення нового елемента:’);

readln(i);

writeln(‘Задайте ціле значение елемента, що включається:');

readln(b);

{включення елемента}

{помноженого на 2, тому що тип integer займає 2 байти}

move(a[i],a[i+1],(n+1-i)*2);

a[i]:=b;

writeln(‘Вектор із включеним елементом:’);

for i := 1 to n+1 do write(a[i],’ ‘)

end.


Застосування процедури Move, що відразу пересилає вміст основної пам'яті, починаючи з першого байта змінної a[i], в область, яка починається з першого байта змінної a[i+1], вигідно відрізняється швидкістю виконання від змінної циклу For, у якому проглядаються всі елементи вектора.



  1. Включення елемента в визначену позицію матриці.

Для включення елемента в j-у позицію i-го рядка скористаємося стандартною процедурою Move, потім привласнимо a[i,j] значення елемента, що включається, b.

Приклад програми:


{Включення елемента в визначену позицію квадратної матриці}

const

n = 3; m = 4;

var

a : array[1..n,1..m] of integer; i, j, b : integer;

begin

writeln(‘Введіть матрицю розміром ‘,n,’X’,n,’=’,n*n,’цілих чисел:’);

for i := 1 to n do

for j := 1 to n do

read(a[i,j]);;

writeln(‘задайте номер i рядка для елемента, що включається:');

readln(i);

writeln(‘задайте позицію j у рядку для елемента, що включається:');

readln(j);

{включення елемента}

writeln(‘Введіть значення елемента, що включається:');

readln(b);

move(a[i,j],a[i,j+1],(m-j)*2);

a[i,j] := b;

writeln(‘матриця з включеним елементом:’);

for i := 1 to n do

begin

for j := 1 to m do write(a[i,j], ‘ ‘);

writeln;

end;

end.


Для матриці, що складає з елементів типу Real, у програмі в процедурі Move існує параметр, що визначає довжину області, помножений на 6 (стільки байт необхідно для типу Real):


Move(a[i,j],a[i,j+1],(m-j)*6);


  1. Включення елемента в упорядкований за зростанням вектор зі збереженням упорядкованості.

Приклад програми:


const

n = 5;

var

a : array[0..n] of integer; i,b : integer;

control : Boolean;

begin

writeln(‘Введіть впорядкований за зростанням вектор з ‘,n, ‘цілих
‘чисел:’);

for i := 0 to n-1 do

read(a[i]);

writeln(‘Задайте ціле значение елемента, що включається:');

readln(b);

{включення елемента}

for i := 0 to n-1 do if b < a[i] then

begin

move(a[i], a[i+1],(n-1)*2);

a[i] := b;

control := true;

break;

end;

if not control then a[n] := b;

writeln(‘Вектор із включеним елементом:’);

for i := 0 to n do write(a[i],’ ‘);

end.


  1. Видалення рядка з матриці.

Для видалення k-й рядка потрібно всі рядки, починаючи з (k+1)-го, перемістити нагору, а їхнє число зменшити на 1.

Приклад програми:


const

n = 3; m = 4;

type

massiv = array[1..n,1..m] of integer;

var

a : massiv; i, j, k : integer;

begin

writeln(‘Введіть матрицю розміром’,n,’х',m,’:’);

for i := 1 to n do

for j := 1 to m do

read(a[i,j]);

writeln(‘Введіть номер рядка, що видаляється, (від 1 до ',n,'):');

read(k);

for i := k to n-1 do

for j := 1 to m do

a[i,j] := a[i+1,j];

writeln(‘матриця без ‘,k,’-го рядка:’);

for i:=1 to n-1 do

begin

for j:= 1 to m do

begin

write(a[i,j],’ ‘);

end;

writeln;

end;

end.


  1. Включення вектора у вектор.

Для включення вектора В до вектора А з позиції i потрібно зрушити елементи вектора А праворуч, починаючи з позиції i, на довжину вектора, що включається.

Приклад програми:


const n = 8; {довжина вектора А}

m = 4; {довжина вектора, що включається, У}

var

a : array[1..n+m] of integer;

b : array[1..m] of integer;

i : integer;

begin

writeln(‘Введіть ’,n,’ цілих чисел вектора А:’);

for i := 1 to n do read(a[i]);

writeln(‘Введіть ’,m,’ цілих чисел вектора, що включається, В:');

for i := 1 to m do read(b[i]);

writeln(‘Задайте позицію у векторі А для включення вектора В:’);

readln(i);

{включення вектора}

move(a[i],a[i+m].(n-i+1)*2);

move(b,a[i],m*2);

writeln(‘Вектор А з включеним вектором В:’);

for i := 1 to n+m do write(a[i],’ ‘);

end.


  1. Включення стовпця в матрицю

Для включення стовпця в матрицю потрібно зрушити її стовпці вправо, збільшуючи їхню кількість на 1.

Приклад програми:



const

n = 3; m = 4;

var

a : array[1..n,1..m] of integer; i, j : integer;

begin

writeln (‘Введіть матрицю ’,n,’X’,m-1,’=’,n*(m-1),’ цілих чисел:’);

for i := 1 to n do

for j := 1 to m-1 do

read(a[i,j]);

writeln(‘Введіть номер стовпця матриці (від 1 до ‘,m-1,’), куди потрібно’,
‘вставити новий стовпець:’);

read(j);

for i := 1 to n do move(a[i,j],a[i,j+1],(m-j)*2);

writeln(‘Введіть дані стовпця, що вставляється, з ',n,' цілих чисел:');

for i := 1 to n do read(a[i,j]);

writeln(‘Матриця з включеним стовпцем:’);

for i := 1 to n do

begin

for j := 1 to m do write(a[i,j],’ ‘);

writeln;

end;

end.



  1. Перестановка елементів у матриці виконується за допомогою допоміжної змінної.

Приклад програми:


const

n = 3; m = 3;

type massiv = array[1..n,1..m] of integer;

var

a : massiv; i, j, k, l : integer;

x : integer; {допоміжна змінна}

begin

writeln(‘Введіть ‘,n,’X’,m,’=’,n*m,’ значень елементів матриці:’);

for i := 1 to n do

for j := 1 to m do

read(a[i,j]);

writeln(‘Введіть індекси i,j елемента, що переставляється:');

read(i,j);

writeln(‘Введіть індекси k,l елемента, що переставляється:');

read(k,l);

{перестановка заданих елементів}

x := a[i,j];

a[i,j] := a[k,l];

a[k,l] := x;

writeln(‘Матриця з переставленими елементами:’);

for i := 1 to n do

begin

for j := 1 to m do write(a[i,j],’ ‘);

writeln;

end;

end.



  1. Перестановка рядків матриці виконується за допомогою допоміжної змінної.

Приклад програми:


const

n = 3; m = 3;

type massiv = array[1..n,1..m] of integer;

var

a : massiv; i, j, k, x : integer;

begin

writeln(‘Введіть ‘,n,’X’,m,’=’,n*m,’ значень елементів матриці:’);

for i := 1 to n do

for j := 1 to m do

read(a[i,j]);

writeln(‘Введіть номер i-й рядка, що переставляється:');

read(i);

writeln(‘Введіть номер k-й рядка, що переставляється:');

read(k);

{перестановка рядків матриці}

for j := 1 to m do

begin

x := a[i,j];

a[i,j] := a[k,j];

a[k,j] := x;

end;

writeln(‘Матриця з переставленими ‘,i,’ і ‘,k,’ рядками:’);

for i := 1 to n do

begin

for j := 1 to m do write(a[i,j],’ ‘);

writeln;

end;

end.


20. Множення рядка матриці на число.

Приклад програми:


const

n = 3; m = 3;

type massiv = array[1..n,1..m] of integer;

var

a : massiv; i, j, k : integer;

begin

writeln(‘Введіть ‘,n,’X’,m,’=’,n*m, ‘значень елементів матриці:’);

for i := 1 to n do

for j:= 1 to m do

read(a[i,j]);

writeln(‘Введіть номер i-го рядка:’);

read(i);

writeln(‘Введіть число K на яке потрібно ‘ ,

‘помножити рядок:’);

read(k);

{множення рядка на число}

for j:=1 to m do

begin

a[i,j]:=a[i,j]*k;

end;

writeln(‘матриця з рядком ‘,i,’,помноженим на ‘,k,’:’);

for i:=1 to n do

begin

for j:=1 to m do write(a[i,j],’ ’);

writeln;

end;

end.


21.Множення стовпця матриці на число. Приклад програми:


const

n = 3; m = 3;

type massiv=array[1..n,1..m] of integer;

var

a : massiv; i, j, k : integer;

begin

writeln(‘Введіть’,n,’X’,m,’=’,n*m,‘ значень елементів матриці:’);

for i:=1 to n do

for j:=1 to m do

read(a[i,j]);

writeln(‘Введіть номер j-го стовпця:’);

read(j);

writeln(‘Введіть число K на яке потрібно помножити стовпець:’);

read(k);

for i:=1 to n do{множення стовпця на число}

begin

a[i,j]:=a[i,j]*k;

end;

writeln(‘матриця зі стовпцем ‘,j,’,помноженим на ‘,K,’:’);

for i:=1 to n do

begin

for j:=1 to m do write(a[i,j],’’);

writeln;

end;

end.



22.Додавання рядків матриці

Приклад програми:


const

n = 3; m = 3;

type massiv = array[1..n,1..m] of integer;

var

a : massiv; i, j, k : integer;

begin

writeln(‘Введіть ‘,n,’X’,m,’=’,n*m, ‘ значень елементів матриці:’);

for i:=1 to n do

for j:=1 to m do

read(a[i,j]);


writeln(‘Введіть номер i-го рядка:’);

read(i);

writeln(‘Введіть номер k-го рядка:’);

read(k);

{додавання рядків}

for j:=1 to m do a[i,j]:=a[i,j]+a[k,j];

writeln(‘матриця з рядком ‘,i,‘ , елементи якого є сумою ‘,

рядків ‘,i,’та’,k,’:’);

for i:=1 to n do

begin

for j:=1 to m do write(a[i,j],’’);

writeln;

end;

end.


23.Додавання стовпців матриці.

Приклад програми:


const

n = 3; m = 3;

type massiv = array[1..n,1..m] of integer;

var

a : massiv; i, j, k : integer;

begin

writeln(‘Введіть’,n,’X’,m,’=’,n*m,‘ значень елементів матриці:’);

for i:=1 to n do

for j:=1 to m do

read(a[i,j]);

writeln(‘Введіть номер j-го стовпця:’);

read(j);

writeln(‘Введіть номер k-го стовпця:’);

read(k);

{додавання стовпців}

for i:=1 to n do a[i,j]:=a[i,j]+a[i,k];

writeln(‘матриця зі стовпцем ‘,j,’, елементи якого є сумою’,
‘стовпців ‘,j,’та’,k,’:’);

for i:=1 to n do

begin

for j:=1 to m do write(a[i,j],’’);

writeln;

end;

end.



24. Перетворення матриці на вектор.

Швидкість обробки вектора набагато вище швидкості обробки матриці, тому часто приходяться елементи матриці пересилати у вектор того ж розміру. Наприклад, потрібно переслати елементи матриці A(nXm) у вектор B того ж розміру по рядках зі збереженням порядку проходження елементів. Приклад програми:


const

n = 3; m = 4;

type

matriza = array[1..n,1..m] of integer;

var

a : matriza; i, j : integer;

begin

writeln(‘Введіть матрицю розміром ‘,n,’X’,m,’:’);

for i:=1 to n do

for j:=1 to m do

read(a[i,j]);

writeln(‘Виведення матриці, перетвореної у вектор:’);

write(‘вектор B(‘,n*m,’)=’);

for i:=1 to n do

for j:=1 to m do

write(a[i,j],’ ’);

end.