- •Основи програмування та алгоритмічні мови Програмування мовою borland Pаscаl v7.0 для пеом Процедурне та модульне програмування
- •2.2.1. Теоретичні відомості
- •1. Основи алгоритмізації та програмування
- •1.1. Послідовність рішення задачі з допомогою еом
- •1.2.Середовище turbo Pаscаl
- •1.3.Типи даних turbo Pаscаl
- •1.4.Основні поняття мови програмування turbo Pаscаl
- •1.4.1.Синтаксис мови Програмування turbo Pаscаl
- •1.4.2. Основні дії в мові програмування
- •1.4.3. Умовні оператори
- •1.4.4. Методи організації циклів
- •1.4.5. Оператор вибору
- •1.4.6. Масиви.
- •1.4.7. Робота з рядками, масиви символів
- •1.4.8. Робота з типом string
- •1.4.9. Тестові завдання
- •1.4.10. Варіанти завдань для самостійного розгляду
- •2. Програмування в мові Pascal
- •2.1 Процедурний підхід до програмування
- •2.1.1 Теоретичні відомості
- •2.1.2.Приклад програми
- •2.1.3. Варіанти завдань для лабораторної роботи
- •2.2. Записи з фіксованою частиною
- •2.2.1. Теоретичні відомості
- •2.2.2. Приклад програми
- •2.2.3. Варіанти завдань для лабораторної роботи
- •2.3. Записи з варіантами
- •2.3.1. Теоретичні відомості
- •2.3.2. Приклад програми
- •2.3.3. Варіанти завдань для лабораторної роботи
- •2.4. Типізовані файли
- •2.4.1. Теоретичні відомості
- •2.4.2. Приклад програми
- •2.4.3. Варіанти завдань лабораторної роботи
- •2.5. Текстові файли
- •2.5.1. Теоретичні відомості
- •2.5.2. Приклад програми
- •2.5.3. Варіанти завдань Лабораторної роботи
- •2.6. Множини
- •2.6.1. Теоретичні вказівки
- •2.6.2. Приклад програми
- •Алгоритм
- •2.6.3. Варіанти завдань лабораторної роботи
- •2.7. Черги та стеки
- •27.1. Теоретичні вказівки
- •Алгоритм побудови стека:
- •2.7.2. Приклад програми
- •2.7.3. Варіанти завдань лабораторної роботи
- •2.8. Дерева
- •2.8.1. Теоретичні вказівки
- •2.8.2. Приклад програми
- •2.8.3. Варіанти завдань лабораторної роботи
- •2.9. Графіка
- •2.9.1. Теоретичні вказівки
- •2.9.2 Приклад програми
- •2.9.3 Варіанти завдань
- •2.10.Програмування інтерфейсу користувача. Розробка меню
- •2.10.1. Теоретичні вказівки
- •2.10.2. Приклад програми
- •2.10.3. Варіанти завдань
- •4 Створити меню такої структури: Головне меню
- •3. Основні принципи модульного програмування
- •3.1. Приклад програми
1.4.7. Робота з рядками, масиви символів
Рядки символів в turbo Pаscаl обробляються як масиви символів (точніше символьні вектори). Рядок, що вміщує один символ, є константа стандартного типу Char. Рядок із n символів (n > 1) вважається константою типу ARRAY [1..n] of char. При цьому кожний символ є елементом масиву, до якого можна одержати доступ за допомогою індексу. Якщо літерна змінна позначена, наприклад, як
x : array [1 .. 12] of char;
то в програмі такій змінній можна присвоїти рядок символів:
x := 'мова Паскаль';
Довжина рядка не може змінюватися в процесі виконання програми. Тобто, якщо знадобиться просвоїти оголошеній змінній x рядок - 'мова Бейсік', то цей рядок прийдеться розширити на один пробіл, щоб йоо довжина стала рівної 12:
x := 'мова Бейсік';
Як і окремі символи, рядки символів можна порівнювати один з одним. Основні співвідношення для порівняння настіпні:
'A' < 'B' < ... < 'Y' < 'Z'
'0' < '1' < ... < '8' < '9'
'A' < 'Z' < 'a' < 'z'
Більш детально необхідно уточнити положення символів в міжнародній таблиці символів ASCII
Два рядки символів порівнюються так: перший зліва символ першого рядка порівнюється з першим зліва символом другого рядка. Якщо він більше, то перший рядок вважається більше другого рядка (або навпаки). Якщо ж вони рівні, то аналогічно порівнюються другі символи обох рядків і т.д. Це зручно для сортування рядків за алфавітом. Рядки вважаються рівними, якщо всі символи одного рядка і їхня кількість цілком ідентичні іншою.
'BASIC' < 'PASCAL' ,
'25' > '200' , 'PASCAL' <> 'Pascal' , 'ab' < 'abc' істина, а
'ABC' = ' ABC' - хибно (у другій константі є пробіл).
Майже всі операції з рядками, так само, як і з усіма масивами, виконуються поэлементно, за винятком оператора write (writeln). Для виводу всього рядка можна просто зазначити ім'я рядковою змінної:
writeln(x);
Максимальна кількість символів в символьному масиві може досягати 65521
1.4.8. Робота з типом string
На зорі своєї появи ЕОМ в основному використовувалися для математичних розрахунків. Після того, як комп'ютери одержали можливість розпізнавати символи (текст) і працювати з ними, сфера використання ЕОМ для обробки інформації значно розширилася. Тому для забезпечення роботи і розширення можливостей в цій сфері в turbo Pаscаl був уведений ще один стандартний тип даних - STRING (рядок). Ця структура дуже схожа на масив символів, але дозволяє працювати з рядками перемінної або невідомої довжини. При оголошенні рядкової змінної типу STRING необхідно тільки зазначити максимальну її довжину, що не повинна перевищувати 255. Наприклад:
VAR s1,s2 : string[40];
line : string[255];
Змінні s1 і s2 можуть мати довжину від 0 до 40, а line - від 0 до 255. в пам'яті змінні типу string займають на один байт більше, ніж її максимальна довжина. Звертання до елементів рядка таке ж, як і в масивах символів,- по індексу. Індекс змінюється від 0 до максимальної довжини. в нульовому елементі зберігається символ, код якого дорівнює поточній довжині рядка. А з першого по максимальний елемент можуть розташовуватися символи самого рядка. Наприклад, якщо s1:='оператор', то ord(s1[0]) буде дорівнює 8.
З даними типу string (стрінгами) визначено декілька операцій, функцій і процедур, що значно полегшують їхню обробку:
1) + операція конкатенации ( склеювання ). Якщо а='транс', b='форма', із='тор', то після s:=a+b+c s буде дорівнює 'трансформатор';
2) функція length(s) повертає довжину (ціле число) стрінга s. Length(s)
еквівалентно ord(s[0]), але наглядніше;
3) функція concat(s1,s2,...) повертає рядок, що є конкатенацією рядків s1,s2,..., тобто s:=concat(s1,s2,...) еквівалентно s:=s1+s2+...;
4) функція pos(s1,s2) повертає позицію (індекс), із якої підрядок s1 входить в рядок s2. Наприклад, якщо s2='трансформатор',
а s1='форма', то pos(s1,s2)=6;
інший приклад: pos('а','інформатика')=7;
якщо рядок s1 не міститься в s2, то функція pos поверне 0;
5) функція copy(s,i,k) повертає підрядок стрингу s, що утворюється з рядка s копіюванням, починаючи з i-го k символів. Наприклад:
copy('визначення',5,3)='справ';
6) процедура delete(s,i,k) видаляє зі стрингу s, починаючи з i-го k символів. Результат присоюється змінній s. Наприклад: якщо s='значення', то після delete(s,4,2) s стане дорівнює 'знання';
7) процедура insert(s1,s2,i) вставляє рядок s1 в рядок s2 перед символом s2[i]. Приклад: якщо s1='че', s2='знання', то після операції insert(s1,s2,4) s2 стане дорівнювати 'значення';
8) процедура str(x,s) переводить числове значення x в відповідне строковое значення і поміщає його в стринг s. Наприклад, якщо a=1993,
то після str(a,st) st буде дорівнювати '1993';
9) процедура val(s,v,c) переводить строковое значення s в ціле або дійсне значення (залежить від типу змінної v), що присвоюється змінній v. c - це код (цілий) результату операції.
Якщо операція пройшла успішно, то c=0, якщо ж ні, - то c = номеру першого помилкового символу. Приклади:
якщо s='125',то після val(s,x,code) x=125, code=0;
якщо s='3R5', то після val(s,x,code) x невизначено, а code=2.
Процедури на відміну від функцій не повертають ніяких значень, а просто виконують деякі дії зі своїми аргументами. В результаті деякі аргументи можуть змінюватися (докладніше про це в темі "Процедури і функції").
Вивід стрингів, так само, як і символьних масивів, здійснюється операторами write і writeln, а введення можна виконати оператором readln (але не read).
Стринги (тип string) зручніше звичайних символьних масивів при обробці, але не дозволяють працювати з рядками більш 255 символів. Однак можна вийти з положення так: великий текст зберігається в символьному масиві, із яких копіюються порції в окремі стринги, обробляються і повертаються в масив. Ще можна скористатися масивом стрингів ( array [1..n] of string[m] ), але при цьому неекономно витрачається пам'ять ЕОМ.