SlideShare a Scribd company logo
1 of 86
Програмування на
мові Паскаль
Частина II
Тема 1. Масиви
Масиви
Масив – це група однотипних елементів, які мають
спільне ім’я і розміщені в пам’яті поряд.
Особливості:
• всі елементи мають один тип
• весь масив має одне ім’я
• всі елементи розміщені в пам’яті поряд
Приклади:
• список учнів в класі
• квартири в будинку
• школи в місті
• дані про температуру повітря за рік
Масиви
5 10 15 20 25
1 2 3 4 5
A масив
3
15
НОМЕР
елемента масиву
(ІНДЕКС)
A[1] A[2] A[3] A[4] A[5]ЗНАЧЕННЯ
елемента масиву
A[2]
НОМЕР (ІНДЕКС)
елемента масиву: 2
ЗНАЧЕННЯ
елемента масиву: 10
Оголошення масивів
Для чого оголошувати?
• визначити ім’я масиву
• визначити тип масиву
• визначити кількість елементів
• виділити місце в пам’яті
Масив цілих чисел:
Розмір через константу:
ім’я
початковий
індекс
кінцевий
індекс
тип
елементів
var A: array[1.. ] of integer;
const N=5;
N
var A : array[ 1 .. 5 ] of integer ;
Оголошення масивів
Масиви інших типів:
Інший діапазон індексів:
Індекси інших типів:
var X, Y: array [1..10] of real;
C: array [1..20] of char;
var Q: array [0..9] of real;
C: array [-5..13] of char;
var A: array ['A'..'Z'] of real;
B: array [False..True] of integer;
...
A['C'] := 3.14259*A['B'];
B[False] := B[False] + 1;
Що неправильно?
var a: array[10..1] of integer;
...
A[5] := 4.5;
[1..10]
var a: array ['z'..'a'] of integer;
...
A['B'] := 15;A['b']
['a'..'z']
var a: array [0..9] of integer;
...
A[10] := 'X';
Масиви
Оголошення:
Введення з клавіатури:
Поелементні операції:
Виведення на екран:
const N = 5;
var a: array[1..N] of integer;
i: integer;
for i:=1 to N do begin
write('a[', i, ']=');
read ( a[i] );
end;
a[1] =
a[2] =
a[3] =
a[4] =
a[5] =
5
12
34
56
13
Чому
write?
?
for i:=1 to N do a[i]:=a[i]*2;
writeln('Масив A:');
for i:=1 to N do
write(a[i]:4);
Масив A:
10 24 68 112 26
Завдання
"4": Ввести з клавіатури масив з 5 елементів, знайти
середнє арифметичне всіх елементів масиву.
Приклад:
Введіть п’ять чисел:
4 15 3 10 14
середнє арифметичне 9.200
"5": Ввести з клавіатури масив з 5 елементів, знайти
мінімальний з них.
Приклад:
Введіть п’ять чисел:
4 15 3 10 14
мінімальний елемент 3
При зміні N решта програми не повинна
змінюватися!
!
Програмування на
мові Паскаль
Частина II
Тема 2. Максимальний
елемент масиву
Максимальний елемент
Задача: знайти в масиві максимальний елемент.
Алгоритм:
Псевдокод:
{ вважаємо, що перший елемент – максимальний }
for i:=2 to N do
if a[i] > { максимального } then
{ запам’ятати новий максимальний елемент a[i] }
Чому цикл від i=2??
Максимальний елемент
max := a[1]; { вважаємо, що перший – максимальний }
iMax := 1;
for i:=2 to N do { перевіряємо всі решта }
if a[i] > max then { знайшли новий максимальний }
begin
max := a[i]; { запам’ятати a[i] }
iMax := i; { запам’ятати i }
end;
Додатково: як знайти номер максимального елемента?
Як спростити??
По номеру елемента iMax завжди можна знайти його
значення a[iMax]. Тому всюди замінюємо max на a[iMax]
і забираємо змінну max.
a[iMax]
Програма
program qq;
const N = 5;
var a: array [1..N] of integer;
i, iMax: integer;
begin
writeln(‘Вихідний масив:');
for i:=1 to N do begin
a[i] := random(100) + 50;
write(a[i]:4);
end;
iMax := 1; { вважаємо, що перший – максимальний }
for i:=2 to N do { перевіряємо всі решта }
if a[i] > a[iMax] then { новий максимальний }
iMax := i; { запам’ятати i }
writeln; {перейти на новий рядок}
writeln('Максимальний елемент a[', iMax, ']=', a[iMax]);
end;
випадкові числа в
інтервалі [50,150)
пошук
максимального
Завдання
"4": Заповнити масив з 10 елементів випадковими числами з
інтервалу [-10..10] і знайти в ньому максимальний і
мінімальний елементи та їх номери.
Приклад:
Вихідний масив:
4 -5 3 10 -4 -6 8 -10 1 0
максимальний a[4]=10
мінімальний a[8]=-10
"5": Заповнити масив з 10 елементів випадковими числами з
інтервалу [-10..10] і знайти в ньому два максимальних
елементи та їх номери.
Пример:
Вихідний масив:
4 -5 3 10 -4 -6 8 -10 1 0
максимальний a[4]=10, a[7]=8
Програмування на
мові Паскаль
Частина II
Тема 3. Опрацювання
масивів
Інверсія масиву
Задача: переставити елементи масиву в зворотному
порядку.
Алгоритм:
поміняти місцями A[1] і A[N], A[2] і A[N-1], …
Псевдокод:
3 5 … 9 7 7 9 … 5 3
1 2 … N-1 N 1 2 … N-1 N
for i:=1 to N do
{ поміняти місцями A[i] і A[N+1-i] }
сума індексів N+1
Що неправильно??
N div 2 do
Як переставити елементи?
2
3
1
Задача: поміняти місцями
вміст двох чашок.
Задача: поміняти місцями вміст двох комірок пам’яті.
4 6
?4
6 4
x y
c
c := x;
x := y;
y := c;
x := y;
y := x;
3
2
1
Чи можна обійтися без c??
Програма
program qq;
const N = 10;
var A: array[1..N] of integer;
i, c: integer;
begin
{ заповнити масив }
{ вивести вихідний масив }
for i:=1 to N div 2 do begin
c:=A[i]; A[i]:=A[N+1-i]; A[N+1-i]:=c;
end;
{ вивести одержаний масив }
end;
Завдання
"4": Заповнити масив з 10 елементів випадковими числами з
інтервалу [-10..10] і виконати інверсію окремо для 1-ї і 2-ї
половини масиву.
Приклад:
Вихідний масив:
4 -5 3 10 -4 -6 8 -10 1 0
Результат:
-4 10 3 -5 4 0 1 -10 8 -6
"5": Заповнити масив з 12 елементів випадковими числами з
інтервалу [-12..12] і виконати інверсію для кожної третини
масиву.
Приклад:
Вихідний масив:
4 -5 3 10 -4 -6 8 -10 1 0 5 7
Результат:
10 3 -5 4 -10 8 -6 -4 7 5 0 1
Циклічний зсув
Задача: зсунути елементи масиву на 1 комірку, перший
елемент стає на місце останнього.
Алгоритм:
A[1]:=A[2]; A[2]:=A[3];… A[N-1]:=A[N];
Цикл:
3 5 8 1 … 9 7
1 2 3 4 … N-1 N
5 8 1 … 9 7 3
for i:=1 to N-1 do
A[i]:=A[i+1]; Що неправильно??
чому не N?
Програма
program qq;
const N = 10;
var A: array[1..N] of integer;
i, c: integer;
begin
{ заповнити масив }
{ вивести вихідний масив }
c := A[1];
for i:=1 to N-1 do A[i]:=A[i+1];
A[N] := c;
{ вивести одержаний масив }
end;
Завдання
"4": Заповнити масив з 10 елементів випадковими числами з
інтервалу [-10..10] і виконати циклічний зсув ВПРАВО.
Приклад:
Вихідний масив:
4 -5 3 10 -4 -6 8 -10 1 0
Результат:
0 4 -5 3 10 -4 -6 8 -10 1
"5": Заповнити масив з 12 елементів випадковими числами з
інтервалу [-12..12] і виконати циклічний зсув ВПРАВО на 4
елементи.
Приклад:
Вихідний масив:
4 -5 3 10 -4 -6 8 -10 1 0 5 7
Результат:
-4 -6 8 -10 1 0 5 7 4 -5 3 10
Програмування на
мові Паскаль
Частина II
Тема 4. Сортування масивів
Сортування
Сортування – це розстановка елементів масиву в
заданому порядку ( по зростанню, спаданню, останній
цифрі, сумі дільників, …).
Задача: переставити елементи масиву в порядку
зростання.
Алгоритми:
• прості і зрозумілі, проте неефективні для переважної більшості
масивів
 метод бульбашки
 метод вибору
• складні, проте ефективні
 “швидке сортування" (Quick Sort)
 сортування “купою" (Heap Sort)
 сортування злиттям
 пірамідальне сортування
складність O(N2
)
складність O(N·logN)
час
N
O(N2
)
O(N·logN)
Метод бульбашки
Ідея – бульбашка повітря в стакані води піднімається з дна вверх.
Для масивів – самий маленький ("легкий") елемент переміщується
вверх ("спливає").
5
2
1
3
5
2
1
3
5
1
2
3
1
5
2
3
• починаємо знизу, порівнюємо два
сусідніх елементи; вони стоять
“неправильно”, міняємо їх місцями
• за 1 прохід по масиву один
елемент (самий маленький) стає на
своє місце
1
5
2
3
1
5
2
3
1
2
5
3
1-ий прохід
2-ий прохід 3-ій прохід
1
2
5
3
1
2
3
5
Для сортування масиву з
N елементів потрібен
N-1 прохід (достатньо
поставить на свої місця
N-1 елемент).
Програма
1-ий прохід:
5
2
…
6
3
1
2
…
N-1
N
порівнюються пари
A[N-1] і A[N], A[N-2] і A[N-1]
…
A[1] і A[2]
A[j] і A[j+1]
2-ий прохід
A[1] вже на своєму місці!!
for j:=N-1 downto 2 do
if A[j] > A[j+1] then begin
c:=A[j]; A[j]:=A[j+1]; A[j+1]:=c;
end;
2
for j:=N-1 downto 1 do
if A[j] > A[j+1] then begin
c:=A[j]; A[j]:=A[j+1]; A[j+1]:=c;
end;
1
i-ий прохід for j:=N-1 downto i do
...
i
1
5
…
3
6
1
2
…
N-1
N
Програма
program qq;
const N = 10;
var A: array[1..N] of integer;
i, j, c: integer;
begin
{ заповнити масив }
{ вивести вихідний масив }
for i:=1 to N-1 do begin
for j:=N-1 downto i do
if A[j] > A[j+1] then begin
с := A[j];
A[j] := A[j+1];
A[j+1] := с;
end;
end;
{ вивести одержаний масив }
end;
Чому цикл по i до N-1??
i
елементи вище A[i]
вже поставлені
Метод бульбашки з прапором
Ідея – якщо при виконанні методу бульбашки не
було обмінів, масив вже посортований і решта
проходів не потрібні.
Реалізація: змінна-прапор, показує, був чи ні
обмін; якщо вона дорівнює False, то вихід.
repeat
flag := False; { скинути прапор }
for j:=N-1 downto 1 do
if A[j] > A[j+1] then begin
с := A[j];
A[j] := A[j+1];
A[j+1] := с;
flag := True; { підняти прапор }
end;
until not flag; { вихід при flag=False }
flag := False;
flag := True;
not flag;
var flag: boolean;
2
1
4
3
1
2
3
4
Як покращити??
Метод бульбашки з прапором
i := 0;
repeat
i := i + 1;
flag := False; { скинути прапор }
for j:=N-1 downto 1 do
if A[j] > A[j+1] then begin
с := A[j];
A[j] := A[j+1];
A[j+1] := с;
flag := True; { підняти прапор }
end;
until not flag; { вихід при flag=False }
i := 0;
i
i := i + 1;
Метод вибору
Ідея:
• знайти мінімальний елемент і поставити на місце
першого (помінять місцями з A[1])
• із решти знайти мінімальний елемент і поставити на
друге місце (поміняти місцями з A[2]), і т.д.
4
3
1
2
1
3
4
2
1
2
4
3
1
2
4
3
Метод вибору
for i := 1 to N-1 do begin
nMin = i ;
for j:= i+1 to N do
if A[j] < A[nMin] then nMin:=j;
if nMin <> i then begin
c:=A[i];
A[i]:=A[nMin];
A[nMin]:=c;
end;
end;
N-1
N
потрібен N-1 прохід
пошук мінімального
від A[i] до A[N]
якщо потрібно,
переставляємо
Чи можна забрати if??
i+1
i
Завдання
"4": Заповнити масив з 10 елементів випадковими числами з
інтервалу [0..100] і відсортувати його за останньою
цифрою.
Приклад:
Вихідний масив:
14 25 13 30 76 58 32 11 41 97
Результат:
30 11 41 32 13 14 25 76 97 58
"5": Заповнити масив з 10 елементів випадковими числами з
інтервалу [0..100] і відсортувати першу половину по
зростанню, а другу – по спаданню.
Приклад:
Вихідний масив:
14 25 13 30 76 58 32 11 41 97
Результат:
13 14 25 30 76 97 58 41 32 11
Програмування на
мові Паскаль
Частина II
Тема 5. Пошук в масиві
Пошук в масиві
Задача – знайти в масиві елемент, рівний X, або
встановити, що його немає.
Розв’язання: для довільного масиву: лінійний
пошук (перебір)
недостаток: низька швидкість
Як спростити? – завчасно підготувати масив для
пошуку
• як саме підготувати?
• як використовувати “підготовлений масив"?
Лінійний пошук
nX := 0;
for i:=1 to N do
if A[i] = X then begin
nX := i;
break; {вихід з циклу}
end;
nX := 0; { поки не знайшли ...}
for i:=1 to N do { цикл по всіх елементах }
if A[i] = X then { якщо знайшли, то ... }
nX := i; { ... запам’ятати номер}
if nX < 1 then writeln('Не нашли...')
else writeln('A[', nX, ']=', X);
nX – номер потрібного
елемента в масиві
Що погано??Покращення: після того, як знайшли X,
виходимо з циклу.
nX := 0; i := 1;
while i <= N do begin
if A[i] = X then begin
nX := i; i := N;
end;
i := i + 1;
end;
break;
i := N;
Двійковий пошук
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
X = 7
X < 8 8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
4X > 4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
6X > 6
1. Вибрати середній елемент A[c]
і порівняти з X.
2. Якщо X = A[c], знайшли (вихід).
3. Якщо X < A[c], шукати дальше в
першій половині.
4. Якщо X > A[c], шукати дальше в
другій половині.
Двійковий пошук
nX := 0;
L := 1; R := N; {межі: шукаємо від A[1] до A[N] }
while R >= L do begin
c := (R + L) div 2;
if X = A[c] then begin
nX := c;
R := L - 1; { break; }
end;
if x < A[c] then R := c - 1;
if x > A[c] then L := c + 1;
end;
if nX < 1 then writeln(‘Не знайшли...')
else writeln('A[', nX, ']=', X);
номер середнього
елемента
знайшли
Чому не можна while R > L do begin … end; ?
?
вийти з
циклу
зсуваємо
межі
1 L c R N
Порівняння методів пошуку
Лінійний Двійковий
підготовка ні відсортувати
кількість кроків
N = 2 2 2
N = 16 16 5
N = 1024 1024 11
N= 1048576 1048576 21
N ≤ N ≤ log2N+1
Завдання
"4": Написати програму, яка сортує масив ПО
СПАДАННЮ і шукає в ньому елемент, рівний X
(це число вводиться з клавіатури). Використати
двійковий пошук.
"5": Написати програму, яка рахує середню
кількість кроків в двійковому пошуку для
масиву з 32 елементів з інтервалу [0,100]. Для
пошуку використати 1000 випадкових чисел в
цьому ж інтервалі.
Програмування на
мові Паскаль
Частина II
Тема 6. Символьні рядки
Чим поганий масив символів?
var B: array[1..N] of char;
Це масив символів:
• кожен символ – окремий об’єкт;
• масив має довжину N, яка задана при
оголошенні
Що потрібно:
• опрацьовувати послідовність символів як єдине
ціле
• рядок повинен мати змінну довжину
Символьні рядки
П р и в і т ! ¤ ¤ ¤ … ¤ ¤ ¤6
1 255
довжина рядка
робоча частина
s[1]
s[2]
s[3] s[4]
var s: string;
var s: string[20];
201
Довжина рядка:
n := length ( s );
var i: integer;
В Delphi це
обмеження знято!
!
Символьні рядки
Задача: ввести рядок з клавіатури і замінити всі букви "а"
на букви "б".
program qq;
var s: string;
i: integer;
begin
writeln(‘Введіть рядок');
readln(s);
for i:=1 to Length(s) do
if s[i] = 'а' then s[i] := 'б';
writeln(s);
end.
readln(s);
writeln(s);
Length(s)
введення рядка
довжина рядка
виведення рядка
Завдання
"4": Ввести символьний рядок і замінити всі букви "а" на
букви "б" і навпаки, як великі, так і маленькі.
Приклад:
Ввести рядок:
ааббссААББСС
Результат:
ббаассББААСС
"5": Ввести символьний рядок і перевірити, чи є він
паліндромом (паліндром читається однаково в обох
напрямках).
Приклад: Приклад:
Введіть рядок: Введіть рядок:
АБВГДЕ КОРОК
Результат: Результат:
Не паліндром. Паліндром.
Операції з рядками
Об’єднання: додати один рядок в кінець другого.
Запис нового значення:
var s, s1, s2: string;
s := 'Вася';
s1 := 'Привіт';
s2 := 'Вася';
s := s1 + ', ' + s2 + '!'; 'Привіт, Вася!'
Підрядок: повернути частину рядка з іншого рядка.
s := '123456789';
s1 := Copy ( s, 3, 6 );
s2 := Copy ( s1, 2, 3 );
'345678'
'456'
з 3-го символу
6 штук
Знищення і вставка
Знищення частини рядка:
Вставка в рядок:
s := '123456789';
Delete ( s, 3, 6 );
з 3-го символу
6 штук
рядок
міняється!
'123456789'
'129'
s := '123456789';
Insert ( 'ABC', s, 3 );
Insert ( 'Q', s, 5 );
куди
вставляєм
о
що
вставляємо
починаючи з 3-го символу
'12ABC3456789'
'12ABQC3456789'
Пошук в рядку
Пошук в рядку:
s := ‘Тут був Вася.';
n := Pos ( ‘у', s );
if n > 0 then
writeln(‘Буква у - це s[', n, ']')
else writeln(‘Не знайшли');
n := Pos ( 'Вася', s );
s1 := Copy ( s, n, 4 );
var n: integer;
s[3]
3
n = 11
Особливості:
• функція повертає номер символу, з якого
починається зразок в рядку
• якщо слова немає, повертається 0
• пошук з початку (знаходиться перше слово)
Приклади
s := 'Вася Петя Мітя';
n := Pos ( 'Петя', s );
Delete ( s, n, 4 );
Insert ( ‘Катя', s, n ); 'Вася Катя Митя'
s := 'Вася Петя Мітя';
n := length ( s );
s1 := Copy ( s, 1, 4 );
s2 := Copy ( s, 11, 4 );
s3 := Copy ( s, 6, 4 );
s := s3 + s1 + s2;
n := length ( s );
'Вася Митя'
14
'Вася'
'Мітя'
'Петя'
'ПетяВасяМітя'
12
6
Приклад розв’язання задачі
Задача: Ввести ім’я, по батькові і прізвище. Перетворити їх до
формату “прізвище-ініціали".
Приклад:
Введіть ім’я, по батькові і прізвище:
Василь Алібабаєвич Хрюндіков
Результат:
Хрюндіков В.А.
Алгоритм:
• знайти перший пропуск і виділити ім’я
• знищити ім’я з пропуском із основного рядка
• знайти перший пропуск і виділити по батькові
• знищити по батькові з пропуском із основного рядка
• “склеїти" прізвище, перші букви імені і фамілії, крапки,
пропуски…
Програма
program qq;
var s, name, otch: string;
n: integer;
begin
writeln(‘Введіть ім’я, по батькові і прізвище');
readln(s);
n := Pos(' ', s);
name := Copy(s, 1, n-1); { вирізати ім’я }
Delete(s, 1, n);
n := Pos(' ', s);
otch := Copy(s, 1, n-1); { вирізати по батькові }
Delete(s, 1, n); { залишилось прізвище }
s := s + ' ' + name[1] + '.' + otch[1] + '.';
writeln(s);
end.
Завдання
"4": Ввести ім’я файлу (можливо, без розширення) і змінити його
розширення на ".exe".
Приклад:
Ввести ім’я файлу: Ввести ім’я файлу:
qqq qqq.com
Результат: Результат:
qqq.exe qqq.exe
"5": Ввести шлях до файлу і "розібрати" його, виводячи кожну
вкладену папку з нового рядка
Приклад:
Ввести шлях до файлу:
C:Мої документи10-БВасяqq.exe
Результат:
C:
Мої документи
10-Б
Вася
qq.exe
Програмування на
мові Паскаль
Частина II
Тема 7. Рекурсивний перебір
Рекурсивний перебір
Задача: Алфавіт мови племені "тумба-юмба" складається з
букв И, Ц, Щ і О. Вивести на екран всі слова із К букв, які
можна скласти в цій мові, і підрахувати їх кількість. Число
K вводиться з клавіатури.
1 K
в кожній комірці може бути будь-яка з 4-х букв
4 варіанти
4 варіанти
4 варіанти 4 варіанти
Кількість варіантів:
K
N 44444 =⋅⋅⋅⋅= 
Рекурсивний перебір
И
1 K
Рекурсія: Розв’язання задачі для слів з К букв зводиться до 4-
х задач для слів з K-1 букви.
Щ
1 K
О
1 K
Ц
1 K
перебираємо
всі варіанти
перебираємо
всі варіанти
перебираємо
всі варіанти
перебираємо
всі варіанти
Процедура
procedure Rec(p: integer);
begin
if p > K then begin
writeln(s);
count := count+1;
end
else begin
s[p]:='Ы'; Rec ( p+1 );
s[p]:='Ц'; Rec ( p+1 );
s[p]:='Щ'; Rec ( p+1 );
s[p]:='О'; Rec ( p+1 );
end;
end;
● ● ● ? ? ? ?
1 Kp
Глобальні змінні:
var s: string;
count, K:
integer;
s
p+1
рекурсивні виклики
А якщо букв багато??
закінчення рекурсії
Процедура
procedure Rec(p: integer);
const letters = 'ЫЦЩО';
var i: integer;
begin
if p > k then begin
writeln(s);
count := count+1;
end
else begin
for i:=1 to length(letters) do begin
s[p] := letters[i];
Rec(p+1);
end;
end;
end;
const letters = ‘ИЦЩО';
for i:=1 to length(letters) do begin
s[p] := letters[i];
Rec(p+1);
end;
всі букви
цикл по всіх буквах
локальна змінна
Програма
program qq;
var s: string;
K, i, count: integer;
begin
writeln(‘Введіть довжину слова:');
read ( K );
s := '';
for i:=1 to K do s := s + ' ';
count := 0;
Rec ( 1 );
writeln(‘Всього ', count, ' слів');
end.
procedure Rec(p: integer);
...
end;
процедура
s := '';
for i:=1 to K do s := s + ' ';
рядок з K пропусків
глобальні змінні
Завдання
Алфавіт мови племені "тумба-юмба" складається з букв И, Ц, Щ
і О. Число K вводиться з клавіатури.
"4": Вивести на екран всі слова з К букв, в яких буква И
зустрічається більше 1 разу, і підрахувати їх кількість.
"5": Вивести на екран всі слова з К букв, в яких є однакові
букви, що стоять поряд (наприклад, ИЩЩО), і підрахувати
їх кількість.
Програмування на
мові Паскаль
Частина II
Тема 8. Матриці
Матриці
Задача: запам’ятати розміщення фігур на шаховій дошці.
1 2 3 4 5 6
a b c d e f g h
8
7
6
5
4
3
2
1
0 0 0 0 2 0 0 0
0 0 0 0 0 0 0 0
0 0 3 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 4 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
8
7
6
5
4
3
2
1
1 2 3 4 5 6 7 8
c6 A[6,3]
Матриці
Матриця – це прямокутна таблиця чисел.
Матриця – це масив, в якому кожний елемент має два індекси
(номер рядка і номер стовпця).
1 4 7 3 6
2 -5 0 15 10
8 9 11 12 20
1
2
3
1 2 3 4 5A
7
0
11
2 -5 0 15 10
12
рядок 2
стовбець 3
комірка A[3,4]
Матриці
Оголошення:
const N = 3;
M = 4;
var A: array[1..N,1..M] of integer;
B: array[-3..0,-8..M] of integer;
Q: array['a'..'d',False..True] of real;
Введення з клавіатури:
for i:=1 to N do
for j:=1 to M do begin
write('A[',i,',',j,']=');
read ( A[i,j] );
end;
Якщо переставити цикли??
A[1,1]= 25
A[1,2]= 14
A[1,3]= 14
...
A[3,4]= 54
i jfor j:=1 to M do
for i:=1 to N do begin
Матриці
Заповнення випадковими числами
for i:=1 to N do
for j:=1 to M do
A[i,j] := random(25) - 10;
Який інтервал??цикл по рядках
цикл по стовпцях
Вывод на экран
for i:=1 to N do begin
for j:=1 to M do
write ( A[i,j]:5 );
writeln;
end; в тому ж рядку
перейти на
новий рядок
виведення рядка
12 25 1 13
156 1 12 447
1 456 222 23
Якщо переставити цикли??
Опрацювання всіх елементів матриці
Задача: заповнити матрицю з 3 рядків і 4 стовпців випадковими
числами і вивести її на екран. Знайти суму елементів
матриці.
program qq;
const N = 3; M = 4;
var A: array[1..N,1..M] of integer;
i, j, S: integer;
begin
... { заповнення матриці і виведення на екран}
S := 0;
for i:=1 to N do
for j:=1 to M do
S := S + A[i,j];
writeln(‘Сума елементів матриці ', S);
end;
Завдання
Заповнити матрицю з 8 рядків і 5 стовпців випадковими
числами з інтервалу [-10,10] і вивести її на екран.
"4": Знайти мінімальний і максимальний елемент в матриці і їх
номера. Формат виведення:
Мінімальний елемент A[3,4]=-6
Максимальний елемент A[2,2]=10
"5": Вивести на екран рядок, сума елементів якого
максимальна. Формат виведення:
Рядок 2: 3 5 8 9 8
Операції з матрицями
Задача 1. Вивести на екран головну діагональ квадратної
матриці з N рядків і N стовпців.
A[1,N]
A[2,2]
A[3,3]
A[N,N]
for i:=1 to N do
write ( A[i,i]:5 );
Задача 2. Вивести на екран другу діагональ.
A[N,1]
A[N-1,2]
A[2,N-1] for i:=1 to N do
write ( A[i, ]:5 );N+1-i
сума номерів рядка в стовпця N+1
A[1,1]
Операції з матрицями
Задача 3. Знайти суму елементів, які стоять на головній
діагоналі і нижче її.
Одиночний цикл чи вкладений??
рядок 1: A[1,1]
рядок 2: A[2,1]+A[2,2]
...
рядок N: A[N,1]+A[N,2]+...+A[N,N]
S := 0;
for i:= 1 to N do
for j:= 1 to i do
S := S + A[i,j];
цикл по всіх рядках
додаємо потрібні
елементи рядка i
Операції з матрицями
Задача 4. Перестановка рядків або стовпців. В матриці з N
рядків і M стовпців переставити 2-й і 4-й рядок.
1 2 5 2 1
7 3 1 3 7
2
4
j A[2,j]
A[4,j]
for j:=1 to M do begin
c := A[2,j];
A[2,j] := A[4,j];
A[4,j] := c;
end;
Задача 5. До третього стовпця додати шостий.
for i:=1 to N do
A[i,3] := A[i,3] + A[i,6];
Завдання
Заповнити матрицю з 7 рядків і 7 стовпців випадковими
числами з інтервалу [-10,10] і вивести її на екран. Обнулити
елементи, відмічені зеленим фоном, і вивести одержану
матрицю на екран.
"4": "5":
Програмування на
мові Паскаль
Частина II
Тема 9. Файли
Файли
Файл – це область на диску, яка має ім’я.
Файли
тільки текст без оформлення,
не містить керівних символів (з
кодами < 32)
ACSII (1 байт на символ)
UNICODE (2 байта на символ)
*.txt, *.log,
*.htm, *.html
може містити будь-які
символи кодової таблиці
*.doc, *.exe,
*.bmp, *.jpg,
*.wav, *.mp3,
*.avi, *.mpg
Текстові Двійкові Папки
(каталоги)
Принцип сендвіча
I етап. відкрити файл :
• зв’язати змінну f з файлом
• відкрити файл (зробити його
активним, приготувати до роботи)
assign(f, 'qq.dat');
reset(f); {для читання}
rewrite(f); {для запису}
II етап: робота з файлом
Змінна типу
«текстовий файл":
var f: text;
III етап: закрити файл
close(f);
read ( f, n ); { ввести значення n }
write ( f, n ); { записати значення n }
writeln ( f, n );{з переходом на новий рядок}
Робота з файлами
Особливості:
• ім’я файлу згадується тільки в команді assign,
звернення до файлу іде через файлову змінну
• файл, який відкривається для читання, повинен
існувати
• якщо файл, який відкривається на запис, існує, то
старий вміст знищується
• дані записуються в файл у текстовому вигляді
• при завершенні програми всі файли закриваються
автоматично
• після закриття файлу змінну f можна
використовувати ще раз для роботи з іншим файлом
Послідовний доступ
• при відкритті файлу курсор встановлюється в початок
• читання виконується з тієї позиції, де стоїть курсор
• після читання курсор зміщується на перший непрочитаний
символ
12 5 45 67 56●
кінець файлу
(end of file, EOF)
12 5 45 67 56●
assign ( f, 'qq.dat' );
reset ( f );
read ( f, x );
• читання до кінця рядка
• як повернутися назад?
Послідовний доступ
close ( f );
reset ( f ); { почати з початку }
readln ( f, x );
12 5 45¤ 36 67¤ 56●
кінець рядка
(end of line, EOL)
Приклад
Задача: в файлі input.txt записані числа (в стовпчик),
скільки їх – невідомо. Записати в файл output.txt їх
суму.
Алгоритм:
1. Відкрити файл input.txt для читання.
2. S := 0;
3. Якщо чисел не залишилося, перейти до кроку 7.
4. Прочитати наступне число в змінну x.
5. S := S + x;
6. Перейти до кроку 3.
7. Закрити файл input.txt.
8. Відкрити файл output.txt для запису.
9. Записати в файл значення S.
10.Закрити файл output.txt.
Чи можна обійтися без масиву??
цикл з умовою
«поки є дані"
Програма
program qq;
var s, x: integer;
f: text;
begin
assign(f, 'input.txt');
reset(f);
s := 0;
while not eof(f) do begin
readln(f, x);
s := s + x;
end;
close(f);
assign(f, 'output.txt');
rewrite(f);
writeln(f, 'Сума чисел ', s);
close(f);
end.
f: text;
eof(f)
логічна функція,
повертає True, якщо
досягнуто кінець файлу
запис результату у
файл output.txt
Завдання
В файлі input.txt записані числа, скільки їх –
невідомо.
"4": Знайти середнє арифметичне всіх чисел і
записати його в файл output.txt.
"5": Знайти мінімальне і максимальне число і
записати їх в файл output.txt.
Опрацювання масивів
Задача: в файлі input.txt записані числа (в стовпчик),
скільки їх – невідомо, але не більше 100. Переставити їх в
порядку зростання і записати в файл output.txt.
Проблеми:
1. для сортування потрібно утримувати в пам’яті всі
числа одночасно (масив);
2. скільки чисел – невідомо.
Розв’язання:
1. виділяємо в пам’яті масив з 100 елементів;
2. записуємо прочитані числа в масив і рахуємо їх в
змінній N;
3. сортуємо перші N елементів масиву;
4. записуємо їх в файл.
Чи можна обійтися без масиву??
Читання даних в масив
var A: array[1..100] of integer;
f: text;
function ReadArray: integer;
var i: integer;
begin
assign(f, 'input.txt');
reset(f);
i := 0;
while (not eof(f)) and (i < 100) do begin
i := i + 1;
readln(f, A[i]);
end;
close(f);
ReadArray := i;
end;
Глобальні змінні:
Функція: вводить масив, повертає кількість елементів
ReadArray := i;
цикл закінчується, якщо
досягнутий кінець файлу
або прочитано 100 чисел
Програма
program qq;
var A: array[1..100] of integer;
f: text;
N: integer;
Begin
N := ReadArray;
... { сортування перших N елементів }
assign(f, 'output.dat');
rewrite(f);
for i:=1 to N do
writeln(f, A[i]);
close(f);
end.
function ReadArray: integer;
...
end;
вивід відсортованого
масиву у файл
Завдання
В файлі input.txt записані числа (в стовпчик),
відомо, що їх не більше 100.
"4": Відсортувати масив по спаданню останньої
цифри і записати його в файл output.txt.
"5": Відсортувати масив по зростанню суми цифр і
записати його в файл output.txt.
Опрацювання текстових даних
Задача: в файлі input.txt записані рядки, в яких є слово-
паразит "коротше". Очистити текст від мусора і записати в
файл output.txt.
Файл input.txt :
Мама, коротше, мила, коротше, раму.
Декан, коротше, пропив, коротше, бутан.
А роза, коротше, упала на лапу, коротше, Азора.
Кожний, коротше, мисливець бажає, коротше, знати,
де ...
Результат - файл output.txt :
Мама мила раму.
Декан пропив бутан.
А роза упала на лапу Азора.
Кожний мисливець бажає знати, де сидить фазан.
Обробка текстових даних
Алгоритм:
1. Прочитати рядок з файлу (readln).
2. Знищити всі слова ", коротше," (Pos, Delete).
3. Перейти до кроку 1.
Опрацювання рядка s:
Особливості:
потрібно одночасно тримати відкритими два файли
(один в режимі читання, другий – в режимі запису).
поки не закінчилися дані
repeat
i := Pos(', коротше,', s);
if i <> 0 then Delete(s, i, 9);
until i = 0;
шукати ", коротше,"
знищити 9 символів
Робота з файлами
program qq;
var s: string;
i: integer;
fIn, fOut: text;
begin
assign(fIn, 'instr.txt');
reset(fIn);
assign(fOut, 'outstr.txt');
rewrite(fOut);
... { опрацювати файл }
close(fIn);
close(fOut);
end.
fIn, fOut: text;
файлові змінні
відкрити файл для читання
відкрити файл
для запису
Повний цикл опрацювання файлів
while not eof(fIn) do begin
readln(fIn, s);
writeln(fOut, s);
end;
repeat
i := Pos(', коротше,', s);
if i <> 0 then
Delete(s, i, 9);
until i = 0;
поки не досягнутий кінець файла
опрацювання рядка
запис "очищеного"
рядка
Завдання
В файлі input.txt записані рядки, скільки їх –
невідомо.
"4": Замінити всі слова "коротше" на "в загальному" і
записати результат у файл output.txt.
"5": Вивести в файл output.txt тільки ті рядки, в
яких більше 5 слів (слова розділені одним
пропуском).

More Related Content

What's hot

Презентація:Рівняння х2=а. Основна тотожність квадратного кореня.
Презентація:Рівняння х2=а. Основна тотожність квадратного кореня.Презентація:Рівняння х2=а. Основна тотожність квадратного кореня.
Презентація:Рівняння х2=а. Основна тотожність квадратного кореня.sveta7940
 
задачі на відсотки
задачі на відсоткизадачі на відсотки
задачі на відсоткиViktoria Mikolaenko
 
Презентація на тему: Комп'ютерна графіка
Презентація на тему: Комп'ютерна графікаПрезентація на тему: Комп'ютерна графіка
Презентація на тему: Комп'ютерна графікаmishakarpovets1999
 
задачі на відсотки
задачі на відсоткизадачі на відсотки
задачі на відсоткиgoycveta
 
рівн кола1
рівн кола1рівн кола1
рівн кола1dubovenko
 
презентація використання ікт на уроках математики
презентація використання ікт на уроках математикипрезентація використання ікт на уроках математики
презентація використання ікт на уроках математикиСветлана Брюховецкая
 
пожежна безпека тест
пожежна безпека тестпожежна безпека тест
пожежна безпека тест38050556551213051986
 
діагностична контрольна робота для 6 класу
діагностична контрольна робота для 6 класудіагностична контрольна робота для 6 класу
діагностична контрольна робота для 6 класуГергель Ольга
 
9092 урок № 3 синус,косинус і тангенс кутів від 0 до 180.
9092 урок № 3 синус,косинус і тангенс кутів від 0 до 180.9092 урок № 3 синус,косинус і тангенс кутів від 0 до 180.
9092 урок № 3 синус,косинус і тангенс кутів від 0 до 180.jasperwtf
 
логіко математичний розвиток дітей дошкільного віку»
логіко  математичний розвиток дітей дошкільного віку»логіко  математичний розвиток дітей дошкільного віку»
логіко математичний розвиток дітей дошкільного віку»Методичний кабінет
 
Презентація:Графічні об"єкти та їх властивості
Презентація:Графічні об"єкти та їх властивостіПрезентація:Графічні об"єкти та їх властивості
Презентація:Графічні об"єкти та їх властивостіsveta7940
 
Урок 15. Опрацювання об’єктів мультимедіа
Урок 15. Опрацювання об’єктів мультимедіаУрок 15. Опрацювання об’єктів мультимедіа
Урок 15. Опрацювання об’єктів мультимедіаВасиль Тереховський
 
Презентація:Множення і ділення раціональних чисел (повторення)
Презентація:Множення і ділення раціональних чисел (повторення)Презентація:Множення і ділення раціональних чисел (повторення)
Презентація:Множення і ділення раціональних чисел (повторення)sveta7940
 
Знаходження дробу від числа
Знаходження дробу від числаЗнаходження дробу від числа
Знаходження дробу від числаsergey_strizhak
 
Урок № 1. Вирази зі змінними. Цілі раціональні вирази
Урок № 1. Вирази зі змінними. Цілі раціональні виразиУрок № 1. Вирази зі змінними. Цілі раціональні вирази
Урок № 1. Вирази зі змінними. Цілі раціональні виразиOleksandr Sheljak
 
ПАЛИЧКИ КЮЇЗЕНЕРА
ПАЛИЧКИ КЮЇЗЕНЕРАПАЛИЧКИ КЮЇЗЕНЕРА
ПАЛИЧКИ КЮЇЗЕНЕРАanisimovruslan
 
Етапи побудови інформаційної моделі
Етапи побудови інформаційної моделіЕтапи побудови інформаційної моделі
Етапи побудови інформаційної моделіal12309
 
Поняття мови програмування. Складові мови програмування (інформатика 8 клас)
Поняття мови програмування. Складові мови програмування (інформатика 8 клас)Поняття мови програмування. Складові мови програмування (інформатика 8 клас)
Поняття мови програмування. Складові мови програмування (інформатика 8 клас)Igor igorvolinec
 
Презентація на тему :"Первісна та невизначений інтеграл"
Презентація на тему :"Первісна та невизначений інтеграл"Презентація на тему :"Первісна та невизначений інтеграл"
Презентація на тему :"Первісна та невизначений інтеграл"Антонина Антонина
 

What's hot (20)

Презентація:Рівняння х2=а. Основна тотожність квадратного кореня.
Презентація:Рівняння х2=а. Основна тотожність квадратного кореня.Презентація:Рівняння х2=а. Основна тотожність квадратного кореня.
Презентація:Рівняння х2=а. Основна тотожність квадратного кореня.
 
задачі на відсотки
задачі на відсоткизадачі на відсотки
задачі на відсотки
 
Презентація на тему: Комп'ютерна графіка
Презентація на тему: Комп'ютерна графікаПрезентація на тему: Комп'ютерна графіка
Презентація на тему: Комп'ютерна графіка
 
задачі на відсотки
задачі на відсоткизадачі на відсотки
задачі на відсотки
 
рівн кола1
рівн кола1рівн кола1
рівн кола1
 
6 клас урок 6
6 клас урок 66 клас урок 6
6 клас урок 6
 
презентація використання ікт на уроках математики
презентація використання ікт на уроках математикипрезентація використання ікт на уроках математики
презентація використання ікт на уроках математики
 
пожежна безпека тест
пожежна безпека тестпожежна безпека тест
пожежна безпека тест
 
діагностична контрольна робота для 6 класу
діагностична контрольна робота для 6 класудіагностична контрольна робота для 6 класу
діагностична контрольна робота для 6 класу
 
9092 урок № 3 синус,косинус і тангенс кутів від 0 до 180.
9092 урок № 3 синус,косинус і тангенс кутів від 0 до 180.9092 урок № 3 синус,косинус і тангенс кутів від 0 до 180.
9092 урок № 3 синус,косинус і тангенс кутів від 0 до 180.
 
логіко математичний розвиток дітей дошкільного віку»
логіко  математичний розвиток дітей дошкільного віку»логіко  математичний розвиток дітей дошкільного віку»
логіко математичний розвиток дітей дошкільного віку»
 
Презентація:Графічні об"єкти та їх властивості
Презентація:Графічні об"єкти та їх властивостіПрезентація:Графічні об"єкти та їх властивості
Презентація:Графічні об"єкти та їх властивості
 
Урок 15. Опрацювання об’єктів мультимедіа
Урок 15. Опрацювання об’єктів мультимедіаУрок 15. Опрацювання об’єктів мультимедіа
Урок 15. Опрацювання об’єктів мультимедіа
 
Презентація:Множення і ділення раціональних чисел (повторення)
Презентація:Множення і ділення раціональних чисел (повторення)Презентація:Множення і ділення раціональних чисел (повторення)
Презентація:Множення і ділення раціональних чисел (повторення)
 
Знаходження дробу від числа
Знаходження дробу від числаЗнаходження дробу від числа
Знаходження дробу від числа
 
Урок № 1. Вирази зі змінними. Цілі раціональні вирази
Урок № 1. Вирази зі змінними. Цілі раціональні виразиУрок № 1. Вирази зі змінними. Цілі раціональні вирази
Урок № 1. Вирази зі змінними. Цілі раціональні вирази
 
ПАЛИЧКИ КЮЇЗЕНЕРА
ПАЛИЧКИ КЮЇЗЕНЕРАПАЛИЧКИ КЮЇЗЕНЕРА
ПАЛИЧКИ КЮЇЗЕНЕРА
 
Етапи побудови інформаційної моделі
Етапи побудови інформаційної моделіЕтапи побудови інформаційної моделі
Етапи побудови інформаційної моделі
 
Поняття мови програмування. Складові мови програмування (інформатика 8 клас)
Поняття мови програмування. Складові мови програмування (інформатика 8 клас)Поняття мови програмування. Складові мови програмування (інформатика 8 клас)
Поняття мови програмування. Складові мови програмування (інформатика 8 клас)
 
Презентація на тему :"Первісна та невизначений інтеграл"
Презентація на тему :"Первісна та невизначений інтеграл"Презентація на тему :"Первісна та невизначений інтеграл"
Презентація на тему :"Первісна та невизначений інтеграл"
 

Similar to Оснви програмування . Паскаль ч.2

Pascal osnovu2
Pascal osnovu2Pascal osnovu2
Pascal osnovu2Escuela
 
Масиви Структури даних (1).ppt
Масиви Структури даних (1).pptМасиви Структури даних (1).ppt
Масиви Структури даних (1).pptDarkUmaru
 
одновимірні масиви
одновимірні масивиодновимірні масиви
одновимірні масиви1cana1
 
Завдання олімпіади
Завдання олімпіадиЗавдання олімпіади
Завдання олімпіадиoksana oksana
 
лекції 7
лекції 7лекції 7
лекції 7cit-cit
 
зиза
зизазиза
зизаurvlan
 
урок 1.Упорядковані множини. Перестановки
урок 1.Упорядковані множини. Перестановкиурок 1.Упорядковані множини. Перестановки
урок 1.Упорядковані множини. Перестановкивіта майданник
 
Учень, як вчений
Учень, як вченийУчень, як вчений
Учень, як вченийCveldulf
 
рацIонал нi числа,_6_клас_презентацiя
рацIонал нi числа,_6_клас_презентацiярацIонал нi числа,_6_клас_презентацiя
рацIонал нi числа,_6_клас_презентацiяAndy Levkovich
 
Урок 45. Складання циклічних алгоритмів опрацювання величин
Урок 45. Складання циклічних алгоритмів опрацювання величинУрок 45. Складання циклічних алгоритмів опрацювання величин
Урок 45. Складання циклічних алгоритмів опрацювання величинВасиль Тереховський
 
5288 математика 6 клас
5288 математика 6 клас5288 математика 6 клас
5288 математика 6 класurvlan
 
8056 математика 5 клас
8056 математика 5 клас8056 математика 5 клас
8056 математика 5 класurvlan
 
Уроки 42-45 (цикли) - вправи
Уроки 42-45 (цикли) -  вправиУроки 42-45 (цикли) -  вправи
Уроки 42-45 (цикли) - вправиЮлія Артюх
 
Опрацювання одновимірних масивів
Опрацювання одновимірних масивівОпрацювання одновимірних масивів
Опрацювання одновимірних масивівinnaivy
 

Similar to Оснви програмування . Паскаль ч.2 (20)

Масиви
МасивиМасиви
Масиви
 
Pascal основи програмування частина 2
Pascal основи програмування частина 2Pascal основи програмування частина 2
Pascal основи програмування частина 2
 
Pascal osnovu2
Pascal osnovu2Pascal osnovu2
Pascal osnovu2
 
Масиви Структури даних (1).ppt
Масиви Структури даних (1).pptМасиви Структури даних (1).ppt
Масиви Структури даних (1).ppt
 
одновимірні масиви
одновимірні масивиодновимірні масиви
одновимірні масиви
 
Завдання олімпіади
Завдання олімпіадиЗавдання олімпіади
Завдання олімпіади
 
лекції 7
лекції 7лекції 7
лекції 7
 
Div mod for_7kl
Div mod for_7klDiv mod for_7kl
Div mod for_7kl
 
На допомогу учням.pdf
На допомогу учням.pdfНа допомогу учням.pdf
На допомогу учням.pdf
 
зиза
зизазиза
зиза
 
урок 1.Упорядковані множини. Перестановки
урок 1.Упорядковані множини. Перестановкиурок 1.Упорядковані множини. Перестановки
урок 1.Упорядковані множини. Перестановки
 
Учень, як вчений
Учень, як вченийУчень, як вчений
Учень, як вчений
 
для
длядля
для
 
Pascal (динамічні структури даних)
Pascal (динамічні структури даних)Pascal (динамічні структури даних)
Pascal (динамічні структури даних)
 
рацIонал нi числа,_6_клас_презентацiя
рацIонал нi числа,_6_клас_презентацiярацIонал нi числа,_6_клас_презентацiя
рацIонал нi числа,_6_клас_презентацiя
 
Урок 45. Складання циклічних алгоритмів опрацювання величин
Урок 45. Складання циклічних алгоритмів опрацювання величинУрок 45. Складання циклічних алгоритмів опрацювання величин
Урок 45. Складання циклічних алгоритмів опрацювання величин
 
5288 математика 6 клас
5288 математика 6 клас5288 математика 6 клас
5288 математика 6 клас
 
8056 математика 5 клас
8056 математика 5 клас8056 математика 5 клас
8056 математика 5 клас
 
Уроки 42-45 (цикли) - вправи
Уроки 42-45 (цикли) -  вправиУроки 42-45 (цикли) -  вправи
Уроки 42-45 (цикли) - вправи
 
Опрацювання одновимірних масивів
Опрацювання одновимірних масивівОпрацювання одновимірних масивів
Опрацювання одновимірних масивів
 

More from rznz

Labirint1
Labirint1Labirint1
Labirint1rznz
 
Dialog
DialogDialog
Dialogrznz
 
Cat
CatCat
Catrznz
 
Cat
CatCat
Catrznz
 
39
3939
39rznz
 
Різниця
РізницяРізниця
Різницяrznz
 
№26(777 задач)
№26(777 задач)№26(777 задач)
№26(777 задач)rznz
 
вибір підручників
вибір підручниківвибір підручників
вибір підручниківrznz
 
777 задач.№89
777 задач.№89777 задач.№89
777 задач.№89rznz
 
чебурашка
чебурашкачебурашка
чебурашкаrznz
 
цикли
циклицикли
циклиrznz
 
бази даних1
бази даних1бази даних1
бази даних1rznz
 
2 140908032345-phpapp01
2 140908032345-phpapp012 140908032345-phpapp01
2 140908032345-phpapp01rznz
 

More from rznz (13)

Labirint1
Labirint1Labirint1
Labirint1
 
Dialog
DialogDialog
Dialog
 
Cat
CatCat
Cat
 
Cat
CatCat
Cat
 
39
3939
39
 
Різниця
РізницяРізниця
Різниця
 
№26(777 задач)
№26(777 задач)№26(777 задач)
№26(777 задач)
 
вибір підручників
вибір підручниківвибір підручників
вибір підручників
 
777 задач.№89
777 задач.№89777 задач.№89
777 задач.№89
 
чебурашка
чебурашкачебурашка
чебурашка
 
цикли
циклицикли
цикли
 
бази даних1
бази даних1бази даних1
бази даних1
 
2 140908032345-phpapp01
2 140908032345-phpapp012 140908032345-phpapp01
2 140908032345-phpapp01
 

Recently uploaded

Відкрита лекція на тему «Біологічний захист рослин у теплицях»
Відкрита лекція на тему «Біологічний захист рослин у теплицях»Відкрита лекція на тему «Біологічний захист рослин у теплицях»
Відкрита лекція на тему «Біологічний захист рослин у теплицях»tetiana1958
 
О.Духнович - пророк народної правди. Біографія
О.Духнович - пророк народної правди. БіографіяО.Духнович - пророк народної правди. Біографія
О.Духнович - пророк народної правди. БіографіяAdriana Himinets
 
upd.18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23_FINAL.pdf
upd.18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23_FINAL.pdfupd.18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23_FINAL.pdf
upd.18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23_FINAL.pdfssuser54595a
 
Автомат.звука с.інтегровані ігри для дітейpptx
Автомат.звука с.інтегровані ігри для дітейpptxАвтомат.звука с.інтегровані ігри для дітейpptx
Автомат.звука с.інтегровані ігри для дітейpptxvitalina6709
 

Recently uploaded (6)

Відкрита лекція на тему «Біологічний захист рослин у теплицях»
Відкрита лекція на тему «Біологічний захист рослин у теплицях»Відкрита лекція на тему «Біологічний захист рослин у теплицях»
Відкрита лекція на тему «Біологічний захист рослин у теплицях»
 
О.Духнович - пророк народної правди. Біографія
О.Духнович - пророк народної правди. БіографіяО.Духнович - пророк народної правди. Біографія
О.Духнович - пророк народної правди. Біографія
 
Її величність - українська книга презентація-огляд 2024.pptx
Її величність - українська книга презентація-огляд 2024.pptxЇї величність - українська книга презентація-огляд 2024.pptx
Її величність - українська книга презентація-огляд 2024.pptx
 
upd.18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23_FINAL.pdf
upd.18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23_FINAL.pdfupd.18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23_FINAL.pdf
upd.18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23_FINAL.pdf
 
Автомат.звука с.інтегровані ігри для дітейpptx
Автомат.звука с.інтегровані ігри для дітейpptxАвтомат.звука с.інтегровані ігри для дітейpptx
Автомат.звука с.інтегровані ігри для дітейpptx
 
Віртуальна виставка «Аграрна наука України у виданнях: історичний аспект»
Віртуальна виставка «Аграрна наука України у виданнях: історичний аспект»Віртуальна виставка «Аграрна наука України у виданнях: історичний аспект»
Віртуальна виставка «Аграрна наука України у виданнях: історичний аспект»
 

Оснви програмування . Паскаль ч.2

  • 2. Масиви Масив – це група однотипних елементів, які мають спільне ім’я і розміщені в пам’яті поряд. Особливості: • всі елементи мають один тип • весь масив має одне ім’я • всі елементи розміщені в пам’яті поряд Приклади: • список учнів в класі • квартири в будинку • школи в місті • дані про температуру повітря за рік
  • 3. Масиви 5 10 15 20 25 1 2 3 4 5 A масив 3 15 НОМЕР елемента масиву (ІНДЕКС) A[1] A[2] A[3] A[4] A[5]ЗНАЧЕННЯ елемента масиву A[2] НОМЕР (ІНДЕКС) елемента масиву: 2 ЗНАЧЕННЯ елемента масиву: 10
  • 4. Оголошення масивів Для чого оголошувати? • визначити ім’я масиву • визначити тип масиву • визначити кількість елементів • виділити місце в пам’яті Масив цілих чисел: Розмір через константу: ім’я початковий індекс кінцевий індекс тип елементів var A: array[1.. ] of integer; const N=5; N var A : array[ 1 .. 5 ] of integer ;
  • 5. Оголошення масивів Масиви інших типів: Інший діапазон індексів: Індекси інших типів: var X, Y: array [1..10] of real; C: array [1..20] of char; var Q: array [0..9] of real; C: array [-5..13] of char; var A: array ['A'..'Z'] of real; B: array [False..True] of integer; ... A['C'] := 3.14259*A['B']; B[False] := B[False] + 1;
  • 6. Що неправильно? var a: array[10..1] of integer; ... A[5] := 4.5; [1..10] var a: array ['z'..'a'] of integer; ... A['B'] := 15;A['b'] ['a'..'z'] var a: array [0..9] of integer; ... A[10] := 'X';
  • 7. Масиви Оголошення: Введення з клавіатури: Поелементні операції: Виведення на екран: const N = 5; var a: array[1..N] of integer; i: integer; for i:=1 to N do begin write('a[', i, ']='); read ( a[i] ); end; a[1] = a[2] = a[3] = a[4] = a[5] = 5 12 34 56 13 Чому write? ? for i:=1 to N do a[i]:=a[i]*2; writeln('Масив A:'); for i:=1 to N do write(a[i]:4); Масив A: 10 24 68 112 26
  • 8. Завдання "4": Ввести з клавіатури масив з 5 елементів, знайти середнє арифметичне всіх елементів масиву. Приклад: Введіть п’ять чисел: 4 15 3 10 14 середнє арифметичне 9.200 "5": Ввести з клавіатури масив з 5 елементів, знайти мінімальний з них. Приклад: Введіть п’ять чисел: 4 15 3 10 14 мінімальний елемент 3 При зміні N решта програми не повинна змінюватися! !
  • 9. Програмування на мові Паскаль Частина II Тема 2. Максимальний елемент масиву
  • 10. Максимальний елемент Задача: знайти в масиві максимальний елемент. Алгоритм: Псевдокод: { вважаємо, що перший елемент – максимальний } for i:=2 to N do if a[i] > { максимального } then { запам’ятати новий максимальний елемент a[i] } Чому цикл від i=2??
  • 11. Максимальний елемент max := a[1]; { вважаємо, що перший – максимальний } iMax := 1; for i:=2 to N do { перевіряємо всі решта } if a[i] > max then { знайшли новий максимальний } begin max := a[i]; { запам’ятати a[i] } iMax := i; { запам’ятати i } end; Додатково: як знайти номер максимального елемента? Як спростити?? По номеру елемента iMax завжди можна знайти його значення a[iMax]. Тому всюди замінюємо max на a[iMax] і забираємо змінну max. a[iMax]
  • 12. Програма program qq; const N = 5; var a: array [1..N] of integer; i, iMax: integer; begin writeln(‘Вихідний масив:'); for i:=1 to N do begin a[i] := random(100) + 50; write(a[i]:4); end; iMax := 1; { вважаємо, що перший – максимальний } for i:=2 to N do { перевіряємо всі решта } if a[i] > a[iMax] then { новий максимальний } iMax := i; { запам’ятати i } writeln; {перейти на новий рядок} writeln('Максимальний елемент a[', iMax, ']=', a[iMax]); end; випадкові числа в інтервалі [50,150) пошук максимального
  • 13. Завдання "4": Заповнити масив з 10 елементів випадковими числами з інтервалу [-10..10] і знайти в ньому максимальний і мінімальний елементи та їх номери. Приклад: Вихідний масив: 4 -5 3 10 -4 -6 8 -10 1 0 максимальний a[4]=10 мінімальний a[8]=-10 "5": Заповнити масив з 10 елементів випадковими числами з інтервалу [-10..10] і знайти в ньому два максимальних елементи та їх номери. Пример: Вихідний масив: 4 -5 3 10 -4 -6 8 -10 1 0 максимальний a[4]=10, a[7]=8
  • 14. Програмування на мові Паскаль Частина II Тема 3. Опрацювання масивів
  • 15. Інверсія масиву Задача: переставити елементи масиву в зворотному порядку. Алгоритм: поміняти місцями A[1] і A[N], A[2] і A[N-1], … Псевдокод: 3 5 … 9 7 7 9 … 5 3 1 2 … N-1 N 1 2 … N-1 N for i:=1 to N do { поміняти місцями A[i] і A[N+1-i] } сума індексів N+1 Що неправильно?? N div 2 do
  • 16. Як переставити елементи? 2 3 1 Задача: поміняти місцями вміст двох чашок. Задача: поміняти місцями вміст двох комірок пам’яті. 4 6 ?4 6 4 x y c c := x; x := y; y := c; x := y; y := x; 3 2 1 Чи можна обійтися без c??
  • 17. Програма program qq; const N = 10; var A: array[1..N] of integer; i, c: integer; begin { заповнити масив } { вивести вихідний масив } for i:=1 to N div 2 do begin c:=A[i]; A[i]:=A[N+1-i]; A[N+1-i]:=c; end; { вивести одержаний масив } end;
  • 18. Завдання "4": Заповнити масив з 10 елементів випадковими числами з інтервалу [-10..10] і виконати інверсію окремо для 1-ї і 2-ї половини масиву. Приклад: Вихідний масив: 4 -5 3 10 -4 -6 8 -10 1 0 Результат: -4 10 3 -5 4 0 1 -10 8 -6 "5": Заповнити масив з 12 елементів випадковими числами з інтервалу [-12..12] і виконати інверсію для кожної третини масиву. Приклад: Вихідний масив: 4 -5 3 10 -4 -6 8 -10 1 0 5 7 Результат: 10 3 -5 4 -10 8 -6 -4 7 5 0 1
  • 19. Циклічний зсув Задача: зсунути елементи масиву на 1 комірку, перший елемент стає на місце останнього. Алгоритм: A[1]:=A[2]; A[2]:=A[3];… A[N-1]:=A[N]; Цикл: 3 5 8 1 … 9 7 1 2 3 4 … N-1 N 5 8 1 … 9 7 3 for i:=1 to N-1 do A[i]:=A[i+1]; Що неправильно?? чому не N?
  • 20. Програма program qq; const N = 10; var A: array[1..N] of integer; i, c: integer; begin { заповнити масив } { вивести вихідний масив } c := A[1]; for i:=1 to N-1 do A[i]:=A[i+1]; A[N] := c; { вивести одержаний масив } end;
  • 21. Завдання "4": Заповнити масив з 10 елементів випадковими числами з інтервалу [-10..10] і виконати циклічний зсув ВПРАВО. Приклад: Вихідний масив: 4 -5 3 10 -4 -6 8 -10 1 0 Результат: 0 4 -5 3 10 -4 -6 8 -10 1 "5": Заповнити масив з 12 елементів випадковими числами з інтервалу [-12..12] і виконати циклічний зсув ВПРАВО на 4 елементи. Приклад: Вихідний масив: 4 -5 3 10 -4 -6 8 -10 1 0 5 7 Результат: -4 -6 8 -10 1 0 5 7 4 -5 3 10
  • 22. Програмування на мові Паскаль Частина II Тема 4. Сортування масивів
  • 23. Сортування Сортування – це розстановка елементів масиву в заданому порядку ( по зростанню, спаданню, останній цифрі, сумі дільників, …). Задача: переставити елементи масиву в порядку зростання. Алгоритми: • прості і зрозумілі, проте неефективні для переважної більшості масивів  метод бульбашки  метод вибору • складні, проте ефективні  “швидке сортування" (Quick Sort)  сортування “купою" (Heap Sort)  сортування злиттям  пірамідальне сортування складність O(N2 ) складність O(N·logN) час N O(N2 ) O(N·logN)
  • 24. Метод бульбашки Ідея – бульбашка повітря в стакані води піднімається з дна вверх. Для масивів – самий маленький ("легкий") елемент переміщується вверх ("спливає"). 5 2 1 3 5 2 1 3 5 1 2 3 1 5 2 3 • починаємо знизу, порівнюємо два сусідніх елементи; вони стоять “неправильно”, міняємо їх місцями • за 1 прохід по масиву один елемент (самий маленький) стає на своє місце 1 5 2 3 1 5 2 3 1 2 5 3 1-ий прохід 2-ий прохід 3-ій прохід 1 2 5 3 1 2 3 5 Для сортування масиву з N елементів потрібен N-1 прохід (достатньо поставить на свої місця N-1 елемент).
  • 25. Програма 1-ий прохід: 5 2 … 6 3 1 2 … N-1 N порівнюються пари A[N-1] і A[N], A[N-2] і A[N-1] … A[1] і A[2] A[j] і A[j+1] 2-ий прохід A[1] вже на своєму місці!! for j:=N-1 downto 2 do if A[j] > A[j+1] then begin c:=A[j]; A[j]:=A[j+1]; A[j+1]:=c; end; 2 for j:=N-1 downto 1 do if A[j] > A[j+1] then begin c:=A[j]; A[j]:=A[j+1]; A[j+1]:=c; end; 1 i-ий прохід for j:=N-1 downto i do ... i 1 5 … 3 6 1 2 … N-1 N
  • 26. Програма program qq; const N = 10; var A: array[1..N] of integer; i, j, c: integer; begin { заповнити масив } { вивести вихідний масив } for i:=1 to N-1 do begin for j:=N-1 downto i do if A[j] > A[j+1] then begin с := A[j]; A[j] := A[j+1]; A[j+1] := с; end; end; { вивести одержаний масив } end; Чому цикл по i до N-1?? i елементи вище A[i] вже поставлені
  • 27. Метод бульбашки з прапором Ідея – якщо при виконанні методу бульбашки не було обмінів, масив вже посортований і решта проходів не потрібні. Реалізація: змінна-прапор, показує, був чи ні обмін; якщо вона дорівнює False, то вихід. repeat flag := False; { скинути прапор } for j:=N-1 downto 1 do if A[j] > A[j+1] then begin с := A[j]; A[j] := A[j+1]; A[j+1] := с; flag := True; { підняти прапор } end; until not flag; { вихід при flag=False } flag := False; flag := True; not flag; var flag: boolean; 2 1 4 3 1 2 3 4 Як покращити??
  • 28. Метод бульбашки з прапором i := 0; repeat i := i + 1; flag := False; { скинути прапор } for j:=N-1 downto 1 do if A[j] > A[j+1] then begin с := A[j]; A[j] := A[j+1]; A[j+1] := с; flag := True; { підняти прапор } end; until not flag; { вихід при flag=False } i := 0; i i := i + 1;
  • 29. Метод вибору Ідея: • знайти мінімальний елемент і поставити на місце першого (помінять місцями з A[1]) • із решти знайти мінімальний елемент і поставити на друге місце (поміняти місцями з A[2]), і т.д. 4 3 1 2 1 3 4 2 1 2 4 3 1 2 4 3
  • 30. Метод вибору for i := 1 to N-1 do begin nMin = i ; for j:= i+1 to N do if A[j] < A[nMin] then nMin:=j; if nMin <> i then begin c:=A[i]; A[i]:=A[nMin]; A[nMin]:=c; end; end; N-1 N потрібен N-1 прохід пошук мінімального від A[i] до A[N] якщо потрібно, переставляємо Чи можна забрати if?? i+1 i
  • 31. Завдання "4": Заповнити масив з 10 елементів випадковими числами з інтервалу [0..100] і відсортувати його за останньою цифрою. Приклад: Вихідний масив: 14 25 13 30 76 58 32 11 41 97 Результат: 30 11 41 32 13 14 25 76 97 58 "5": Заповнити масив з 10 елементів випадковими числами з інтервалу [0..100] і відсортувати першу половину по зростанню, а другу – по спаданню. Приклад: Вихідний масив: 14 25 13 30 76 58 32 11 41 97 Результат: 13 14 25 30 76 97 58 41 32 11
  • 33. Пошук в масиві Задача – знайти в масиві елемент, рівний X, або встановити, що його немає. Розв’язання: для довільного масиву: лінійний пошук (перебір) недостаток: низька швидкість Як спростити? – завчасно підготувати масив для пошуку • як саме підготувати? • як використовувати “підготовлений масив"?
  • 34. Лінійний пошук nX := 0; for i:=1 to N do if A[i] = X then begin nX := i; break; {вихід з циклу} end; nX := 0; { поки не знайшли ...} for i:=1 to N do { цикл по всіх елементах } if A[i] = X then { якщо знайшли, то ... } nX := i; { ... запам’ятати номер} if nX < 1 then writeln('Не нашли...') else writeln('A[', nX, ']=', X); nX – номер потрібного елемента в масиві Що погано??Покращення: після того, як знайшли X, виходимо з циклу. nX := 0; i := 1; while i <= N do begin if A[i] = X then begin nX := i; i := N; end; i := i + 1; end; break; i := N;
  • 35. Двійковий пошук 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 X = 7 X < 8 8 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 4X > 4 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 6X > 6 1. Вибрати середній елемент A[c] і порівняти з X. 2. Якщо X = A[c], знайшли (вихід). 3. Якщо X < A[c], шукати дальше в першій половині. 4. Якщо X > A[c], шукати дальше в другій половині.
  • 36. Двійковий пошук nX := 0; L := 1; R := N; {межі: шукаємо від A[1] до A[N] } while R >= L do begin c := (R + L) div 2; if X = A[c] then begin nX := c; R := L - 1; { break; } end; if x < A[c] then R := c - 1; if x > A[c] then L := c + 1; end; if nX < 1 then writeln(‘Не знайшли...') else writeln('A[', nX, ']=', X); номер середнього елемента знайшли Чому не можна while R > L do begin … end; ? ? вийти з циклу зсуваємо межі 1 L c R N
  • 37. Порівняння методів пошуку Лінійний Двійковий підготовка ні відсортувати кількість кроків N = 2 2 2 N = 16 16 5 N = 1024 1024 11 N= 1048576 1048576 21 N ≤ N ≤ log2N+1
  • 38. Завдання "4": Написати програму, яка сортує масив ПО СПАДАННЮ і шукає в ньому елемент, рівний X (це число вводиться з клавіатури). Використати двійковий пошук. "5": Написати програму, яка рахує середню кількість кроків в двійковому пошуку для масиву з 32 елементів з інтервалу [0,100]. Для пошуку використати 1000 випадкових чисел в цьому ж інтервалі.
  • 39. Програмування на мові Паскаль Частина II Тема 6. Символьні рядки
  • 40. Чим поганий масив символів? var B: array[1..N] of char; Це масив символів: • кожен символ – окремий об’єкт; • масив має довжину N, яка задана при оголошенні Що потрібно: • опрацьовувати послідовність символів як єдине ціле • рядок повинен мати змінну довжину
  • 41. Символьні рядки П р и в і т ! ¤ ¤ ¤ … ¤ ¤ ¤6 1 255 довжина рядка робоча частина s[1] s[2] s[3] s[4] var s: string; var s: string[20]; 201 Довжина рядка: n := length ( s ); var i: integer; В Delphi це обмеження знято! !
  • 42. Символьні рядки Задача: ввести рядок з клавіатури і замінити всі букви "а" на букви "б". program qq; var s: string; i: integer; begin writeln(‘Введіть рядок'); readln(s); for i:=1 to Length(s) do if s[i] = 'а' then s[i] := 'б'; writeln(s); end. readln(s); writeln(s); Length(s) введення рядка довжина рядка виведення рядка
  • 43. Завдання "4": Ввести символьний рядок і замінити всі букви "а" на букви "б" і навпаки, як великі, так і маленькі. Приклад: Ввести рядок: ааббссААББСС Результат: ббаассББААСС "5": Ввести символьний рядок і перевірити, чи є він паліндромом (паліндром читається однаково в обох напрямках). Приклад: Приклад: Введіть рядок: Введіть рядок: АБВГДЕ КОРОК Результат: Результат: Не паліндром. Паліндром.
  • 44. Операції з рядками Об’єднання: додати один рядок в кінець другого. Запис нового значення: var s, s1, s2: string; s := 'Вася'; s1 := 'Привіт'; s2 := 'Вася'; s := s1 + ', ' + s2 + '!'; 'Привіт, Вася!' Підрядок: повернути частину рядка з іншого рядка. s := '123456789'; s1 := Copy ( s, 3, 6 ); s2 := Copy ( s1, 2, 3 ); '345678' '456' з 3-го символу 6 штук
  • 45. Знищення і вставка Знищення частини рядка: Вставка в рядок: s := '123456789'; Delete ( s, 3, 6 ); з 3-го символу 6 штук рядок міняється! '123456789' '129' s := '123456789'; Insert ( 'ABC', s, 3 ); Insert ( 'Q', s, 5 ); куди вставляєм о що вставляємо починаючи з 3-го символу '12ABC3456789' '12ABQC3456789'
  • 46. Пошук в рядку Пошук в рядку: s := ‘Тут був Вася.'; n := Pos ( ‘у', s ); if n > 0 then writeln(‘Буква у - це s[', n, ']') else writeln(‘Не знайшли'); n := Pos ( 'Вася', s ); s1 := Copy ( s, n, 4 ); var n: integer; s[3] 3 n = 11 Особливості: • функція повертає номер символу, з якого починається зразок в рядку • якщо слова немає, повертається 0 • пошук з початку (знаходиться перше слово)
  • 47. Приклади s := 'Вася Петя Мітя'; n := Pos ( 'Петя', s ); Delete ( s, n, 4 ); Insert ( ‘Катя', s, n ); 'Вася Катя Митя' s := 'Вася Петя Мітя'; n := length ( s ); s1 := Copy ( s, 1, 4 ); s2 := Copy ( s, 11, 4 ); s3 := Copy ( s, 6, 4 ); s := s3 + s1 + s2; n := length ( s ); 'Вася Митя' 14 'Вася' 'Мітя' 'Петя' 'ПетяВасяМітя' 12 6
  • 48. Приклад розв’язання задачі Задача: Ввести ім’я, по батькові і прізвище. Перетворити їх до формату “прізвище-ініціали". Приклад: Введіть ім’я, по батькові і прізвище: Василь Алібабаєвич Хрюндіков Результат: Хрюндіков В.А. Алгоритм: • знайти перший пропуск і виділити ім’я • знищити ім’я з пропуском із основного рядка • знайти перший пропуск і виділити по батькові • знищити по батькові з пропуском із основного рядка • “склеїти" прізвище, перші букви імені і фамілії, крапки, пропуски…
  • 49. Програма program qq; var s, name, otch: string; n: integer; begin writeln(‘Введіть ім’я, по батькові і прізвище'); readln(s); n := Pos(' ', s); name := Copy(s, 1, n-1); { вирізати ім’я } Delete(s, 1, n); n := Pos(' ', s); otch := Copy(s, 1, n-1); { вирізати по батькові } Delete(s, 1, n); { залишилось прізвище } s := s + ' ' + name[1] + '.' + otch[1] + '.'; writeln(s); end.
  • 50. Завдання "4": Ввести ім’я файлу (можливо, без розширення) і змінити його розширення на ".exe". Приклад: Ввести ім’я файлу: Ввести ім’я файлу: qqq qqq.com Результат: Результат: qqq.exe qqq.exe "5": Ввести шлях до файлу і "розібрати" його, виводячи кожну вкладену папку з нового рядка Приклад: Ввести шлях до файлу: C:Мої документи10-БВасяqq.exe Результат: C: Мої документи 10-Б Вася qq.exe
  • 51. Програмування на мові Паскаль Частина II Тема 7. Рекурсивний перебір
  • 52. Рекурсивний перебір Задача: Алфавіт мови племені "тумба-юмба" складається з букв И, Ц, Щ і О. Вивести на екран всі слова із К букв, які можна скласти в цій мові, і підрахувати їх кількість. Число K вводиться з клавіатури. 1 K в кожній комірці може бути будь-яка з 4-х букв 4 варіанти 4 варіанти 4 варіанти 4 варіанти Кількість варіантів: K N 44444 =⋅⋅⋅⋅= 
  • 53. Рекурсивний перебір И 1 K Рекурсія: Розв’язання задачі для слів з К букв зводиться до 4- х задач для слів з K-1 букви. Щ 1 K О 1 K Ц 1 K перебираємо всі варіанти перебираємо всі варіанти перебираємо всі варіанти перебираємо всі варіанти
  • 54. Процедура procedure Rec(p: integer); begin if p > K then begin writeln(s); count := count+1; end else begin s[p]:='Ы'; Rec ( p+1 ); s[p]:='Ц'; Rec ( p+1 ); s[p]:='Щ'; Rec ( p+1 ); s[p]:='О'; Rec ( p+1 ); end; end; ● ● ● ? ? ? ? 1 Kp Глобальні змінні: var s: string; count, K: integer; s p+1 рекурсивні виклики А якщо букв багато?? закінчення рекурсії
  • 55. Процедура procedure Rec(p: integer); const letters = 'ЫЦЩО'; var i: integer; begin if p > k then begin writeln(s); count := count+1; end else begin for i:=1 to length(letters) do begin s[p] := letters[i]; Rec(p+1); end; end; end; const letters = ‘ИЦЩО'; for i:=1 to length(letters) do begin s[p] := letters[i]; Rec(p+1); end; всі букви цикл по всіх буквах локальна змінна
  • 56. Програма program qq; var s: string; K, i, count: integer; begin writeln(‘Введіть довжину слова:'); read ( K ); s := ''; for i:=1 to K do s := s + ' '; count := 0; Rec ( 1 ); writeln(‘Всього ', count, ' слів'); end. procedure Rec(p: integer); ... end; процедура s := ''; for i:=1 to K do s := s + ' '; рядок з K пропусків глобальні змінні
  • 57. Завдання Алфавіт мови племені "тумба-юмба" складається з букв И, Ц, Щ і О. Число K вводиться з клавіатури. "4": Вивести на екран всі слова з К букв, в яких буква И зустрічається більше 1 разу, і підрахувати їх кількість. "5": Вивести на екран всі слова з К букв, в яких є однакові букви, що стоять поряд (наприклад, ИЩЩО), і підрахувати їх кількість.
  • 59. Матриці Задача: запам’ятати розміщення фігур на шаховій дошці. 1 2 3 4 5 6 a b c d e f g h 8 7 6 5 4 3 2 1 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 c6 A[6,3]
  • 60. Матриці Матриця – це прямокутна таблиця чисел. Матриця – це масив, в якому кожний елемент має два індекси (номер рядка і номер стовпця). 1 4 7 3 6 2 -5 0 15 10 8 9 11 12 20 1 2 3 1 2 3 4 5A 7 0 11 2 -5 0 15 10 12 рядок 2 стовбець 3 комірка A[3,4]
  • 61. Матриці Оголошення: const N = 3; M = 4; var A: array[1..N,1..M] of integer; B: array[-3..0,-8..M] of integer; Q: array['a'..'d',False..True] of real; Введення з клавіатури: for i:=1 to N do for j:=1 to M do begin write('A[',i,',',j,']='); read ( A[i,j] ); end; Якщо переставити цикли?? A[1,1]= 25 A[1,2]= 14 A[1,3]= 14 ... A[3,4]= 54 i jfor j:=1 to M do for i:=1 to N do begin
  • 62. Матриці Заповнення випадковими числами for i:=1 to N do for j:=1 to M do A[i,j] := random(25) - 10; Який інтервал??цикл по рядках цикл по стовпцях Вывод на экран for i:=1 to N do begin for j:=1 to M do write ( A[i,j]:5 ); writeln; end; в тому ж рядку перейти на новий рядок виведення рядка 12 25 1 13 156 1 12 447 1 456 222 23 Якщо переставити цикли??
  • 63. Опрацювання всіх елементів матриці Задача: заповнити матрицю з 3 рядків і 4 стовпців випадковими числами і вивести її на екран. Знайти суму елементів матриці. program qq; const N = 3; M = 4; var A: array[1..N,1..M] of integer; i, j, S: integer; begin ... { заповнення матриці і виведення на екран} S := 0; for i:=1 to N do for j:=1 to M do S := S + A[i,j]; writeln(‘Сума елементів матриці ', S); end;
  • 64. Завдання Заповнити матрицю з 8 рядків і 5 стовпців випадковими числами з інтервалу [-10,10] і вивести її на екран. "4": Знайти мінімальний і максимальний елемент в матриці і їх номера. Формат виведення: Мінімальний елемент A[3,4]=-6 Максимальний елемент A[2,2]=10 "5": Вивести на екран рядок, сума елементів якого максимальна. Формат виведення: Рядок 2: 3 5 8 9 8
  • 65. Операції з матрицями Задача 1. Вивести на екран головну діагональ квадратної матриці з N рядків і N стовпців. A[1,N] A[2,2] A[3,3] A[N,N] for i:=1 to N do write ( A[i,i]:5 ); Задача 2. Вивести на екран другу діагональ. A[N,1] A[N-1,2] A[2,N-1] for i:=1 to N do write ( A[i, ]:5 );N+1-i сума номерів рядка в стовпця N+1 A[1,1]
  • 66. Операції з матрицями Задача 3. Знайти суму елементів, які стоять на головній діагоналі і нижче її. Одиночний цикл чи вкладений?? рядок 1: A[1,1] рядок 2: A[2,1]+A[2,2] ... рядок N: A[N,1]+A[N,2]+...+A[N,N] S := 0; for i:= 1 to N do for j:= 1 to i do S := S + A[i,j]; цикл по всіх рядках додаємо потрібні елементи рядка i
  • 67. Операції з матрицями Задача 4. Перестановка рядків або стовпців. В матриці з N рядків і M стовпців переставити 2-й і 4-й рядок. 1 2 5 2 1 7 3 1 3 7 2 4 j A[2,j] A[4,j] for j:=1 to M do begin c := A[2,j]; A[2,j] := A[4,j]; A[4,j] := c; end; Задача 5. До третього стовпця додати шостий. for i:=1 to N do A[i,3] := A[i,3] + A[i,6];
  • 68. Завдання Заповнити матрицю з 7 рядків і 7 стовпців випадковими числами з інтервалу [-10,10] і вивести її на екран. Обнулити елементи, відмічені зеленим фоном, і вивести одержану матрицю на екран. "4": "5":
  • 70. Файли Файл – це область на диску, яка має ім’я. Файли тільки текст без оформлення, не містить керівних символів (з кодами < 32) ACSII (1 байт на символ) UNICODE (2 байта на символ) *.txt, *.log, *.htm, *.html може містити будь-які символи кодової таблиці *.doc, *.exe, *.bmp, *.jpg, *.wav, *.mp3, *.avi, *.mpg Текстові Двійкові Папки (каталоги)
  • 71. Принцип сендвіча I етап. відкрити файл : • зв’язати змінну f з файлом • відкрити файл (зробити його активним, приготувати до роботи) assign(f, 'qq.dat'); reset(f); {для читання} rewrite(f); {для запису} II етап: робота з файлом Змінна типу «текстовий файл": var f: text; III етап: закрити файл close(f); read ( f, n ); { ввести значення n } write ( f, n ); { записати значення n } writeln ( f, n );{з переходом на новий рядок}
  • 72. Робота з файлами Особливості: • ім’я файлу згадується тільки в команді assign, звернення до файлу іде через файлову змінну • файл, який відкривається для читання, повинен існувати • якщо файл, який відкривається на запис, існує, то старий вміст знищується • дані записуються в файл у текстовому вигляді • при завершенні програми всі файли закриваються автоматично • після закриття файлу змінну f можна використовувати ще раз для роботи з іншим файлом
  • 73. Послідовний доступ • при відкритті файлу курсор встановлюється в початок • читання виконується з тієї позиції, де стоїть курсор • після читання курсор зміщується на перший непрочитаний символ 12 5 45 67 56● кінець файлу (end of file, EOF) 12 5 45 67 56● assign ( f, 'qq.dat' ); reset ( f ); read ( f, x );
  • 74. • читання до кінця рядка • як повернутися назад? Послідовний доступ close ( f ); reset ( f ); { почати з початку } readln ( f, x ); 12 5 45¤ 36 67¤ 56● кінець рядка (end of line, EOL)
  • 75. Приклад Задача: в файлі input.txt записані числа (в стовпчик), скільки їх – невідомо. Записати в файл output.txt їх суму. Алгоритм: 1. Відкрити файл input.txt для читання. 2. S := 0; 3. Якщо чисел не залишилося, перейти до кроку 7. 4. Прочитати наступне число в змінну x. 5. S := S + x; 6. Перейти до кроку 3. 7. Закрити файл input.txt. 8. Відкрити файл output.txt для запису. 9. Записати в файл значення S. 10.Закрити файл output.txt. Чи можна обійтися без масиву?? цикл з умовою «поки є дані"
  • 76. Програма program qq; var s, x: integer; f: text; begin assign(f, 'input.txt'); reset(f); s := 0; while not eof(f) do begin readln(f, x); s := s + x; end; close(f); assign(f, 'output.txt'); rewrite(f); writeln(f, 'Сума чисел ', s); close(f); end. f: text; eof(f) логічна функція, повертає True, якщо досягнуто кінець файлу запис результату у файл output.txt
  • 77. Завдання В файлі input.txt записані числа, скільки їх – невідомо. "4": Знайти середнє арифметичне всіх чисел і записати його в файл output.txt. "5": Знайти мінімальне і максимальне число і записати їх в файл output.txt.
  • 78. Опрацювання масивів Задача: в файлі input.txt записані числа (в стовпчик), скільки їх – невідомо, але не більше 100. Переставити їх в порядку зростання і записати в файл output.txt. Проблеми: 1. для сортування потрібно утримувати в пам’яті всі числа одночасно (масив); 2. скільки чисел – невідомо. Розв’язання: 1. виділяємо в пам’яті масив з 100 елементів; 2. записуємо прочитані числа в масив і рахуємо їх в змінній N; 3. сортуємо перші N елементів масиву; 4. записуємо їх в файл. Чи можна обійтися без масиву??
  • 79. Читання даних в масив var A: array[1..100] of integer; f: text; function ReadArray: integer; var i: integer; begin assign(f, 'input.txt'); reset(f); i := 0; while (not eof(f)) and (i < 100) do begin i := i + 1; readln(f, A[i]); end; close(f); ReadArray := i; end; Глобальні змінні: Функція: вводить масив, повертає кількість елементів ReadArray := i; цикл закінчується, якщо досягнутий кінець файлу або прочитано 100 чисел
  • 80. Програма program qq; var A: array[1..100] of integer; f: text; N: integer; Begin N := ReadArray; ... { сортування перших N елементів } assign(f, 'output.dat'); rewrite(f); for i:=1 to N do writeln(f, A[i]); close(f); end. function ReadArray: integer; ... end; вивід відсортованого масиву у файл
  • 81. Завдання В файлі input.txt записані числа (в стовпчик), відомо, що їх не більше 100. "4": Відсортувати масив по спаданню останньої цифри і записати його в файл output.txt. "5": Відсортувати масив по зростанню суми цифр і записати його в файл output.txt.
  • 82. Опрацювання текстових даних Задача: в файлі input.txt записані рядки, в яких є слово- паразит "коротше". Очистити текст від мусора і записати в файл output.txt. Файл input.txt : Мама, коротше, мила, коротше, раму. Декан, коротше, пропив, коротше, бутан. А роза, коротше, упала на лапу, коротше, Азора. Кожний, коротше, мисливець бажає, коротше, знати, де ... Результат - файл output.txt : Мама мила раму. Декан пропив бутан. А роза упала на лапу Азора. Кожний мисливець бажає знати, де сидить фазан.
  • 83. Обробка текстових даних Алгоритм: 1. Прочитати рядок з файлу (readln). 2. Знищити всі слова ", коротше," (Pos, Delete). 3. Перейти до кроку 1. Опрацювання рядка s: Особливості: потрібно одночасно тримати відкритими два файли (один в режимі читання, другий – в режимі запису). поки не закінчилися дані repeat i := Pos(', коротше,', s); if i <> 0 then Delete(s, i, 9); until i = 0; шукати ", коротше," знищити 9 символів
  • 84. Робота з файлами program qq; var s: string; i: integer; fIn, fOut: text; begin assign(fIn, 'instr.txt'); reset(fIn); assign(fOut, 'outstr.txt'); rewrite(fOut); ... { опрацювати файл } close(fIn); close(fOut); end. fIn, fOut: text; файлові змінні відкрити файл для читання відкрити файл для запису
  • 85. Повний цикл опрацювання файлів while not eof(fIn) do begin readln(fIn, s); writeln(fOut, s); end; repeat i := Pos(', коротше,', s); if i <> 0 then Delete(s, i, 9); until i = 0; поки не досягнутий кінець файла опрацювання рядка запис "очищеного" рядка
  • 86. Завдання В файлі input.txt записані рядки, скільки їх – невідомо. "4": Замінити всі слова "коротше" на "в загальному" і записати результат у файл output.txt. "5": Вивести в файл output.txt тільки ті рядки, в яких більше 5 слів (слова розділені одним пропуском).