ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 28.06.2020
Просмотров: 1684
Скачиваний: 3
СОДЕРЖАНИЕ
Тема 15: Пошук і сортування елементів масиву. Класи алгоритмів сортування
Тема 16: Динамічна пам'ять. Адреси і покажчики
Тема 17: Оголошення покажчиків, виділення та звільнення динамічної пам’яті
Тема 18: Процедури та функції для роботи з динамічною пам’яттю
Тема 19: Символьний тип даних. Упаковані масиви
Тема 20: Процедури та функції для обробки рядків
Тема 21: Структурований тип даних - безліч
Тема 22: Структурований тип даних – записи
Тема 23: Опис файлових змінних. Обробка типізованих файлів
Тема 24: Послідовний та прямий доступ до файлів
Тема 25: Обробка не типізованих файлів
Тема 26: Робота з текстовими файлами
Тема 28: Поняття та робота з процедурами та функціями
Тема 29: Використання модуля CRT. Програмування клавіатури
Тема 30: Використання модуля CRT. Текстове виведення на екран. Програмування звукового генератора
Тема 31: Графічні можливості TP 7.0. Використання бібліотеки Graph
Тема 32: Бібліотечні модулі користувача
Тема 33: Основні принципи ООП. Створення об’єктів. Використання об’єктів
Основні алгоритми обробки масивів
write(s:3:1,’ ’:2);
end;
end.
-
Транспонування матриці.
Транспонуванням матриці називається таке її перетворення, при якому 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.
-
Множення матриці на вектор.
Обчислити добуток 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.
-
Множення матриці на матрицю.
Множити можна матриці, що відповідають одне одному за розміром, тобто число стовпців першої матриці повинне дорівнювати числу рядків другої матриці. Для множення матриці 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.
-
Видалення елемента з вектора.
Видалити 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.
-
Видалення елемента з матриці.
Видалити 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.
-
Включення елемента в заданую позицію вектора.
Для включення
елемента в 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, у якому проглядаються всі елементи вектора.
-
Включення елемента в визначену позицію матриці.
Для включення елемента в 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);
-
Включення елемента в упорядкований за зростанням вектор зі збереженням упорядкованості.
Приклад програми:
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.
-
Видалення рядка з матриці.
Для видалення 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.
-
Включення вектора у вектор.
Для включення вектора В до вектора А з позиції 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.
Приклад програми:
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.
-
Перестановка елементів у матриці виконується за допомогою допоміжної змінної.
Приклад програми:
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.
-
Перестановка рядків матриці виконується за допомогою допоміжної змінної.
Приклад програми:
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.