Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОП Конспект лекций - Паскаль.doc
Скачиваний:
20
Добавлен:
30.11.2018
Размер:
1.46 Mб
Скачать

Тема 19: Символьний тип даних. Упаковані масиви

Дані символьного типу. Символьний тип приймає значення з усієї таблиці ASCII (256 символів).

Символьна константа – це символ, укладений в апострофи, наприклад:

'А', 'у', '?', '+', '', '4'.

Апострофи є ознакою символьної константи.

Щоб представити сам апостроф, його потрібно повторити двічі й укласти в апострофи: ’’’’.

Символьна константа займає один байт пам'яті. Її можна позначити ім'ям і задавати в розділі Соnst, наприклад:

const

simbol_1 = ‘A’

simbol_2 = ‘+’

Символьна змінна приймає значення одного символу, тобто одній змінній можна привласнити значення тільки одного символу. Змінна описується в розділі Var ключовим словом Char (символ), наприклад:

var

simbol : char;

. . . . . .

simbol : 'А';

Кожен символ має код з діапазону 0 – 255 і може бути записаний кодовим представленням з попередньою вказівкою решітки (діеза): #10 – десятковий код, #$A – 16-річний код символу.

Кодом представляють символи, що не мають графічного зображення, наприклад – кінець рядка чи звуковий сигнал комп'ютера та ін.

При виведенні значень символьних даних можна використовувати формат. Наприклад:

writeln (a1, a2:2, a3:2);

Для розділення виведених значень символьних даних можна використовувати пробіл. Наприклад:

writeln (a1, ' ',a2, ' ',a3);

За причини того, що символи мови упорядковані, до символьних даних можна застосовувати операції відношень: <, <=, =, >=, >, <>.

'+' < '-';

'*' > '4'.

Чим далі буква в списку алфавіту, тим вона більше. Тому, 'В' > 'А'; 'OКО'>'ОКА'.

Результатом операції порівняння є логічна константа True чи False. Наприклад, результатом операції 'D' < 'F' є значення True.

До символьних даних застосовні наступні убудовані функції:

Ord (X) – повертає ASCII-код символу X.

Наприклад Ord(‘R’) = 82.

Дізнатися значення можна, виконавши:

begin

writeln (ord(‘R’));

end.

чи в меню Debug виконавши команду Evaluate / Modify... (Ctrl + F4) і в поле Expression ввести Ord(‘R’). У поле Result одержимо 82.

Chr(N) – визначає символ по ASCII-коду N, наприклад, Chr(83) = ‘S’.

Pred(X) – повертає попередній символ ASCII відносно символу Х. Наприклад Рred(‘S’) = ‘R’.

Succ(X) – повертає наступний символ ASCII відносно символу Х. Наприклад Succ(‘R’) = ‘S’.

При використанні функції Pred(X) і Succ(X) повинні бути як попередній, так і наступний символ відносно Х, інакше значення цих функцій буде не визначено.

UpCase(‘X’) – перетворить латинські малі літери в прописні. Інші символи, у тому числі букви кирилиці, не перетворить.

Наприклад:

var

x : char;

begin

x : = UpCase(‘r’)

end. Результат: R

Символьний рядок являє собою послідовність символів, укладених в апострофи. Це фіксований рядок. Наприклад:

‘Summa=’, ‘Гімназія юридичного профілю’, ‘Результат’.

Максимальна довжина рядка 255 символів. Рядок можна позначити ім'ям у розділі констант, наприклад:

const

st1='Обсяг'

. . . . .

begin

. . . . . .

writeln('Обсяг')

. . . . .

end.

або використовувати її явно в розділі операторів, наприклад:

begin

. . . . .

writeln('Обсяг')

. . . . .

end.

При виконанні програми в обох випадках буде виведений рядок 'Обсяг'.

До рядків застосовні операції відношень. Результатом цих операцій є логічні константи True чи False. Порівняння рядків виконується посимвольно зліва направо. Два рядки будуть однаковими, якщо вони мають рівну кількість однакових символів. Наприклад:

'ПРИКЛАД' = 'ПРИКЛАД', але 'ABC' < > 'ACB', тому що при порівнянні других символів 'В' < 'С';

' ПРИКЛАД ' > 'ПРИКЛАД', тому що в першому рядку на один пробіл більше, ніж у другому.

Змінній неможна привласнити значення фіксованого рядка, тому що фіксований рядок – це константа, і запис

var

s : char;

. . . .

s := 'Обсяг'

неприпустимо. Змінній можна привласнити тільки значення одного символу. Але не слід плутати символьний рядок зі строковими типами даних, що розглянемо в наступній лекції.

Приклад. Дано дві строкові константи “ДОН” і “СОН”. Чи рівні вони?

const

s1 = ‘ДОН’;

s2 = ‘СОН’;

var

k1 : integer; {порядковий номер символу “Д”}

k2 : integer; {порядковий номер символу “С”}

l : boolean;

begin

k1 := ord('Д'); k2 := ord('С');

l := s1 < s2; {допустимо, сон менше дон, тобто l=true}

writeln('Порядковий номер символу “Д=”, k1:4);

writeln(‘Порядковий номер символу “С=”, k2:4);

writeln(‘Стіл менше стільця? ‘, 1)

end.

Виконавши програму, переконаємося, що L у результаті порівняння s1<s2 прийме значення True, тобто рядок “ДОН” менше рядка “СОН”, тому що символ “C” більше символу “L”.

Приклад. Визначити порядковий номер введеного символу, а також попередній і наступний символи.

var

s1, s2, s3 : char;

n : integer;

begin

writeln('Введіть будь-який символ');

read(s1);

n := ord(s1);

s2 := pred(s1);

s3 := succ(s1);

writeln('Порядковий номер символу ', S1, '=', n:3);

writeln (‘Попередній символ -’, S2);

writeln (‘Попередній символ -’, S3);

end.

Упаковані масиви.

Один символ у пам'яті ЕОМ займає 2 байти, але для його збереження досить одного байту. Тому використовують поняття упакованого масиву.

Упакований масив символьних змінних можна описувати або в розділі Var:

var ім'я масиву: packed array[t1]of char;

або в розділі Type:

type ім'я типу = packed array[t1] of char;

var ім'я змінної : ім'я типу;

де Packed (упакований) – службове слово, що вказує на те, що масив даних є упакованим; t1 – тип індексу.

Наприклад, рядок символів:

“Ми – студенти електротехнічного коледжу”

будемо вважати масивом, що складається з 39 символів (лапки умовно не враховуємо). Назвемо цей масив ім'ям Stroka, тоді його опис буде наступним:

type str=packed array[1..39] of char;

var stroka : str;

тут Str – тип масиву; Stroka – змінна типу Str.

Один елемент масиву приймає значення одного символу:

Stroka[1] = 'М', Stroka[2] = 'и', Stroka[3] = ' ', ... , Stroka[39] = 'у'.

Символьні константи мають тип упакованих масивів.

Елементи символьних масивів можуть брати участь в операціях присвоювання і порівняння. Так, якщо символьний масив описаний

Type str = packed array[1..39] of char;

Var stroka : str;

то допустим оператор:

Stroka := ’Ми – студенти електротехнічного коледжу';

Введення елементів масиву виконується за допомогою процедури Read, що розташовують усередині циклу, наприклад:

i := 1;

while not eoln do

begin

read(stroka[i]);

i := i+1;

end;

де елементи масиву будуть приймати значення доти, поки не зустрінеться символ кінця рядка “Enter”; чи

for i := 1 to 39 do

read(stroka[i]);

де цикл виконується 39 разів. В обох випадках елементи приймуть наступні значення:

Stroka[1] = ’M’, Stroka[2] = ’и’, Stroka[3] = ’ ’, … Stroka[39] = ’у’.

Виведення масиву символьних елементів виконується за допомогою процедури Write.

Приклад. Дан рядок символів S1: “Я добре знаю Pascal”. Потрібно сформувати новий масив з ім'ям S2, що складається з рядка S1 з додаванням наприкінці знаку питання та знаку оклику.

type stroka = packed array[1..20] of char;

var s1,s2 : stroka; i, k: integer;

begin

writeln(‘Введіть рядок s1:’);

i := 0;

while not eoln do begin

i := i+1;

read(s1[i]);

end;

s2 := s1; s2[i+1] := ’?’; s2[i+2] := ’!’;

writeln(‘новий рядок s2: ’);

for k:=1 to i+2 do

write(s2[k]);

end.

Питання для контролю.

  1. Які значення маже приймати символьний тип?

  2. Що таке символьна константа і що є її ознакою ?

  3. Як використовуються в програмі символьні константи і символьні змінні?

  4. Скільки байт пам'яті займає символьний тип?

  5. Скільки значень приймає символьна змінна?

  6. Кодове представлення символу і коли його потрібно використовувати?

  7. Які операції застосовуються до символьних даних?

  8. Перелічте убудовані функції, застосовувані при обробці символьних даних?

  9. Що таке символьний рядок? Його максимальна довжина.

  10. Як у програмі використовується символьний рядок?

  11. Які операції застосовні до символьних рядків?

  12. Чи можна змінній привласнити символьний рядок?

  13. Дано два символьні рядки: у якому випадку вони рівні; у якому не рівні?

  14. Виведення елементів упакованого масиву.

  15. Поняття упакованого масиву.

  16. Опис упакованого масиву.

  17. Операції над елементами упакованого масиву.

  18. Введення елементів масиву.