Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Pascal.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
3.44 Mб
Скачать

2 Множини

Часто в задачах з обробки символів дуже ефективно застосовувати так звані множинні константи. В Turbo Pascal є тип змінних з назвою set (множини).

Множини – це набір однотипних елементів порядкового типу, номер якого у відповідному типі не виходить за межі діапазону 0...255. Таким чином, номер будь-якого елементу множини в машинному представленні може займати об'єм лише 1 байт. Всі значення множини можна перерахувати, оскільки число елементів в наборі обмежено – воно не може бути більше 256, причому мінімально можливий номер рівний 0, а максимально можливий – 255. Таким чином, наприклад, від’ємні числа не можуть бути елементами множини.

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

Як і у всіх змінних, в множинах є свої константи (множинні константи), вони визначаються шляхом переліку в квадратних дужках через кому або з використанням інтервалу всіх елементів множини. В програмі можна, наприклад, так перевіряти приналежність вибраного елементу даній множині:

if 'Ch' in ['a'..'p','r','s','u','w']

then

...

if x in [9,4..6]

then

...

Тут in — службове слово-оператор.

3 Рядкові змінні

3.1 Оголошення рядкових змінних

Оголошення змінних типу string (рядок):

var

Str_1:string; {Рядок з максимальною довжиною в 255 літер}

Str_2:string[3]; {Створили змінну, в якій може міститися до трьох символів}

Text_Isx:array Str_l; {Початковий текст – масив рядків, кожен з яких може містити до 255 символів}

Після оператора присвоєння

Str_1:= 'Весна!'; {В змінній Str_1 знаходиться слово «Весна!»}

довжина рядка Str_1 автоматично зменшиться з 255 до 6 символів – фактичної довжини рядка. Проте після цього рядку Str_1 можна присвоїти рядок з будь-якою довжиною до 255 символів:

Str_1:='Прийшла весна!' {Прийшла весна!}

В результаті присвоєння

Str_2:='Becнa!' {Весна}

у змінній Str_2 знаходитимуться тільки перші три символи слова Весна, всі символи, номери яких більше за замовлену при оголошенні довжину рядка (в даному випадку вона дорівнює [3], будуть відкинуті.

3.2 Доступ до окремих елементів рядка

Доступ до окремих символів змінних типу string здійснюється так само, як і в масивах:

Str_2[3]:='к';

writeln(Str_2);

До останнього присвоєння в змінній Str_2 знаходилося слово Вес, тому після заміни букви «с» на букву «к» на екран дисплея буде виведено слово Вік.

3.3 Зміна поточної довжини рядка

Довжина рядка визначається функцією Length (довжина). Ця функція підраховує число символів рядка, починаючи з першого символу. Але біля кожного рядка є ще і комірка з номером 0, в ній автоматично оновлюється інформація про довжину рядка при зміні його довжини.

Оскільки в кожній комірці рядка (у тому числі і в нульовій) може зберігатися тільки змінна типу char, то безпосередньо записати в нульову комірку число, яке відповідає довжині рядка (від 0 до 255) неможливо. З цієї причини в нульову комірку рядка записується символ, номер якого в згаданій вище таблиці кодів співпадає з поточною довжиною рядка. Щоб дізнатися про цей номер, слід застосувати функцію Ord. Таким чином, після присвоєння

Str_1:='Привіт!';

очевидна рівність:

Ord(Str_l[0])=Length(Str_1)=7.

В нульову комірку рядка можна (як і в будь-яку іншу) записати (шляхом привласнення) будь-який символ. Його номер в кодовій таблиці може бути як менше, так і більше поточної довжини рядка.

У першому випадку довжина рядка зменшиться. Наприклад, в результаті присвоєння

Str_1[0]:=Str_2[0];

довжина рядка Str_1 буде рівна трьом символам і процедура

writeln(Str_1);

роздрукує «При» – перші три символи початкового рядка. Присвоєння

Str_1:='Холодно';

відновить довжину рядка Str_1 до семи літер.

У другому випадку, коли довжина рядка примусово збільшується до розмірів, що перевищують фактичну довжину рядка, на позиціях після останнього символу початкового рядка можуть з’явитися літери від попередніх записів – це так зване «інформаційне сміття».

Приклад 1:

Str_2:='A';

Str_2[0]:=#3; {еквівалентне «Str_2[0]=Chr(3)»}

writeln(Str_2);

В результаті роботи цього фрагмента програми на екрані після букви «А» можуть з'явитися ще два якісь символи, що є «інформаційним сміттям». Такої ситуації слід завжди уникати.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]