- •Інформація та інформаційні процеси Поняття інформації.
- •Одиниці вимірювання інформації.
- •Подання інформації та типи комп'ютерів.
- •Способи пересилання інформації.
- •Будова комп'ютера
- •Пристрої введення-виведення інформації.
- •Процесор
- •Принципи функціонування комп'ютера Фізичні принципи
- •Програмний принцип
- •Поняття про середовища програмування
- •Загальна характеристика мови паскаль
- •Поняття інтегрованого середовища
- •Команда New
- •Команда Open
- •Основи алгоритмізації Алгоритми та їх властивості
- •Блок-схеми
- •Загальна характеристика Паскаль-програми
- •Структура Паскаль-програми
- •Елементи мови Паскаль
- •Прості типи даних
- •Стандартні типи даних
- •Дійсний тип
- •Логічний тип
- •Символьний тип
- •Конструйовані типи
- •Перелічуваний тип
- •Оператори надання значень змінним Оператор присвоєння
- •Уведення-виведення
- •Порядок виконання операцій
- •Складений оператор
- •Стиль запису програми
- •Структури керування
- •Структура послідовного виконання
- •Структура розгалуження
- •Умовний оператор
- •Оператор варіанта
- •Оператор безумовного переходу
- •Структура повторення
- •Цикл з параметром
- •Цикл з передумовою
- •Цикл з післяумовою
- •Ітераційні цикли
- •Обчислення суми знакозмінного ряду із заданою точністю
- •Процедури і функції
- •Процедури з параметрами. Параметри-значення
- •Одномірні масиви
- •Поняття масиву. Одномірний масив та його опис в програмі
- •Обчислення скалярного добутку двох векторів
- •Знаходження найбільшого (найменшого) значень серед елементів масиву
- •Обчислення суми та добутку елементів масиву
- •Перетворення масиву по заданому закону
- •Впорядкування одномірних масивів
- •Впорядкування шляхом вибору
- •Впорядкування обмінами
- •Впорядкування вставками
- •Зливання впорядкованих масивів
- •Двомірні масиви Поняття двомірного масиву та його опис у програмі
- •Ввід та вивід значень елементів двомірного масиву Ввід значень елементів двомірного масиву
- •Вивід значень елементів двомірного масиву a[m,n]
- •Рядковий тип (string)
- •Комбіновані типи Організація комбінованих типів у Паскалі
- •Оператор приєднання
- •Множинні типи Організація множин
- •Файлові типи Організація файлів
- •Підготовчі та завершальні операції
- •Операції уведення-виведення
- •Стандартні файли input і output
- •Модулі Модуль і його структура
- •Стандартні модулі
- •Наближене знаходження коренів рівнянь Дослідження рівняння. Відокремлення коренів
- •Метод поділу проміжку пополам
- •Метод хорд
- •Метод дотичних
- •Чисельне інтегрування
- •Квадратурні формули прямокутників
- •Загальні формули прямокутників
- •Квадратурна формула трапецій
- •Практичні оцінки точності квадратурних формул. Вибір кроку інтегрування
- •Список літератури
Оператор приєднання
У програмах, пов'язаних з опрацюванням записів, доводиться зазначати в операторах селектори запису, що є складеними іменами. Це приводить до збільшення програм, зайвої їх громіздкості. В мові Паскаль цей недолік усунуто за допомогою оператора приєднання, який забезпечує доступ до компонентів запису так, ніби вони є прості змінні.
Загальний вигляд оператора приєднання такий:
with <ім'я_запису> do
<оператор S>
Застосувавши такий оператор, до компонентів запису всередині оператора S можна звертатися вже тільки за іменем поля, не називаючи імені запису. Наприклад, оператор уведення масиву PZ11 можна записати
for i:=1 to M do
with PZ11[i] do
read(FAM, В1,В2, ВЗ, В4);
Уся програма обчислення середнього бала і сортування масиву записів за спаданням середнього бала матиме вигляд
program sbal;
const M=24;
type STD=record
FAM: string [15];
B1, B2, B3, B4:2..5;
SB: real
end;
var
PZ11: array [1..M] of STD;
Y: STD;
X: real;
i, j, k: integer;
begin
{Введення вхідних даних}
for i:=1 to M do
with PZ11[i] do
readln(FAM, B1, B2, ВЗ, В4);
{Обчислення середнього бала}
for i:=1 to M do
with PZ11 do
SB:=(B1+B2+B3+B4)/4;
{Сортування списку групи студентів}
for i:=1 to M-1 do
begin
k:=i;
X:=PZ11[i].SB;
for j:=i to M do
if PZ11[j].SB>X then
begin
X:=PZ11[D].SB;
k:=j;
end;
Y:=PZ11[k];
PZ11[k]:=PZ11[i];
PZ11[i]:=Y
end;
{Виведення результатів}
for i:=1 to M do
with PZ11[i] do
writeln(FAM, SB)
end.
Множинні типи Організація множин
Множина - це невпорядкований набір різних об'єктів однакового типу. У мові Паскаль використовують тільки скінченні множини, причому всі елементи множини повинні бути однакового типу, визначеного в Паскалі. Тип елементів множини називається базовим. Як базовий може бути довільний ординальний тип (тобто будь-який простий, за винятком real). Цілого типу застосовують тільки діапазон, для якого зазначають мінімальне і максимальне значення.
Змінні чи сталі множинного типу набувають значення, які є множиною. Для задання множини використовують так званий конструктор множини, який має вигляд списку елементів множини, взятого в квадратні дужки. Елементами множини можуть бути сталі базового типу або вирази цього ж типу. Множина може не мати елементів, тоді вона є порожньою і її описує конструкція [].
Приклади задання множин: [4,6,9,12] - множина, елементами якої є цілі числа; ['i', 'm', 'р', 'q', 'r'] - множина, елементами якої є символи; [m, 10] - множина, що містить значення змінної цілого типу т і цілого числа 10.
Якщо елементи множини утворюють діапазон значень базового типу, то їх можна задавати скорочено, як і елементи діапазонного типу. Наприклад, множину [3, 4, 5, 6, 7] можна записати [3..7]. Частину елементів можна перелічувати, а частину - задавати як діапазон: [3, 4, 5..100].
[ n..2*n] - множина цілих чисел від п до виразу 2п.
[пн, вт, чт] - множина елементів деякого перелічуваного типу, який потрібно описати.
Якщо в діапазоні А..С, яким задана множина, А=С, то ця множина містить один елемент, що дорівнює А. Якщо С<А, то множина порожня. Наприклад: [3..1], ['r'..'b'] - порожні множини.
Якщо якийсь елемент повторюється, то вважають, що є тільки один такий елемент. Наприклад: [2, 3, 7, 2, 3] те ж саме, що [2, 3, 7].
З наведених прикладів зрозуміло, що для задания множинного типу треба задати деякий базовий тип. Відповідний множинний тип (змінна) може набувати значень, що є множинами, одержаними довільними комбінаціями базового типу.
Загальний вигляд опису множинного типу такий:
type <ім'я_типу>= set of <ординальний_тип>;
Опишемо тип
type
р=1..3;
b=set of p;
var
x:b;
Тоді х може набувати значень, якими є всі множини, що можуть бути складені з цілих чисел 1, 2 і 3. Змінна х може мати такі значення: [ ] - порожня множина, [1], [2], [3], [1,2], [1,3], [2,3] і [1,2,3]. Усі ці множини можуть бути значеннями змінної х множинного типу, заданого як set of p. Інші приклади:
type
day=(pn, vt, sr, ct, pt, sb, nd);
den=set of day;
var
roboch: den;
sezon: set of (lito, osin, zyma, vesna);
logic: set of boolean;
У цьому прикладі тип den описаний явно, як множинний, що має базовим перелічуваний тип day. Решта типів задано неявно в описі змінних sezon і logic. Змінна roboch може набувати значень [], [pn], [vt],..., [pn, vt], [pn, sr],..., [sb, nd], [pn, vt, sr],..., [pn, vt, sr, ct, pt, sb, nd].
Змінна sezon: [ ], [lito],..., [lito, osin, zyma, vesna].
Змінна logic: [ ], [true], [false], [true, false].
Для присвоєння значень змінним множинного типу використовують оператор присвоєння
v:=s,
де v - змінна множинного типу; s - вираз цього типу. Елементи s належать до того ж базового типу. Як вираз s може бути змінна множинного типу або саме значення - стала множинного типу. Наприклад, для описаних вище змінних правильними є оператори присвоєння
roboch:=[vt, ct, pt]; logic:=[true];
Тут як вирази використані сталі.
Операції над множинами
Операції над множинами в мові Паскаль практично збігаються з операціями в теорії множин. Це передусім операції об'єднання, перерізу і різниці множин. Нехай А і В - вирази однакового множинного типу, тобто це множини, елементи яких належать до одного і того ж базового типу. Тоді:
об'єднанням А +В множин А і В є множина, елементи якої належать хоча б до однієї множини А чи В. Наприклад, А = [1, З, 6, 7], а В - [2, 4, 6, 7], то А+В дорівнює [1, 2, 3, 4, 6, 7];
перерізом А *В множин А і В є множина, елементи якої одночасно належать до множини А і множини В. Для тих же А і В переріз А *В буде [6, 7];
різницею А-В множин А і В є множина, що складається з елементів множини А, які не належать до множини В. Якщо як множини А і В взяти використані раніше, то А-В дає множину
[1,3].
За допомогою операцій з множинами можна будувати вирази множинного типу. Пріоритетність виконання операцій така сама, як і під час обчислення арифметичних виразів: у дужках, '*', '+' і '-'.
Операції відношення
Крім описаних операцій, над множинами виконують ще операції відношення (порівняння). Нехай А і В - множини однакового множинного типу, х - вираз базового типу, до якого належать елементи А і В. У табл. 8.1 наведені операції відношення над множинами і результати, які одержують для відповідних значень А і В.
Таблиця 8.1. Операції відношення над множинами.
Запис мовою Паскаль
|
Запис у теорії множин
|
Результат |
|
true |
false |
||
А=В |
А=В |
Множини А і В збігаються |
у протилежному випадку |
А<>В |
А В |
А і В не збігаються |
|
А<=В |
А В |
Усі елементи А належать до В |
-“- |
А>=В |
А В |
Усі елементи В належать до А |
-“- |
x in A |
х А |
Елемент х належить до А |
-“- |
Остання з наведених у табл. 8.1 операцій відрізняється тим, що перший операнд належить до базового типу, а другий - до множинного, побудованого на основі цього базового.
Зазначимо, що операції порівняння ">" і "<" над операндами множинного типу не використовують.
Наведемо приклади використання операцій відношення. Нехай R:=[4, 7, 9,11]. Тоді
5 in R дорівнює false
[7,11]<=R дорівнює true
[4, 7, 8,11]=R дає false
[ ]<=R дає true
Бажано, щоб усі операції з множинами виконувались швидко. Тому в більшості трансляторів максимальний розмір множин обмежений розміром слова відповідного комп'ютера. Зокрема, в Турбо Паскалі допустимий як базовий тип будь-який дискретний (ординальний), кількість елементів якого не перевищує 256, причому значення елементів для цілих типів повинні бути в діапазоні від 0 до 255. Такі вимоги задовольняють тільки типи byte, char, перелічувані типи, а також діапазони (обмежені типи). Тоді кожен елемент множини подають одним розрядом (О означає відсутність, а 1 - наявність елемента в множині).
Як приклад використання змінних множинного типу розглянемо такий алгоритм. Треба визначити всі прості числа в діапазоні 2..n, де n>=2, і вивести їх у порядку спадання. Ефективнішим для розв'язування цієї задачі є алгоритм з назвою "решето Ератосфена", оскільки він не використовує так званих довгих операцій - множення і ділення. Суть цього алгоритму така:
Помістимо всі числа від 2 до п в "решето".
Виберемо з "решета" найменше з чисел, що є в ньому.
Помістимо це число серед "простих" чисел.
Виберемо з "решета" всі числа, кратні йому.
Якщо "решето" не порожнє, то повторити кроки 2-5.
Нехай n=101. Введемо дві множини: Р - множина аналізованих чисел, тобто "решето", і S - множина простих чисел. Початкові значення цих множин такі:
Р=[2, 3, 4..101];
s=[ ]
Візьмемо перше число - 2 і введемо в множину S, одержимо 5=[2]. З множини Р заберемо 2 і всі кратні йому. Одержимо Р=[3, 5, 7, 9, 11,..., 101]. Так продовжуємо доти, доки з Р не будуть забрані всі елементи.
Зазначимо, що вилучення з множини Р деякого числа k виконується за допомогою оператора P:=P-[k]. Аналогічно, додавання числа k до множини 5 виконує оператор S:=S+[k]. Ситуацію, чи "решето" порожнє, перевіряють, задаючи значення відношення Р=[ ]. Якщо це значення дорівнює true, то Р - порожня множина.
(Одержання множини простих чисел з діапазону 2..101 з використанням множинного типу}
program PROST (output);
const
N=101;
type
chysla=set of 2..N;
var
P, S: chysla;
r, k:2..101;
begin {ініціалізація}
P:=[2..N];
S:=[]; r:=2;
repeat {відшукання чергового простого числа}
while not (r in P) do
r:=r+1;
{введення простого числа в S}
S:=S+[r];
{вилучення з Р числа r і кратних йому}
k:=r;
repeat
P:=P-[k];
k:=k+r ;
until k>N;
until P=[ ];
{виведення простих чисел у зворотному порядку}
for k:=n downto 2 do
if k in S
then write(k);
writeln
end.