Скачать презентацию Рядки Один з різновидів одновимірних масивів масив Скачать презентацию Рядки Один з різновидів одновимірних масивів масив

Рядки.ppt

  • Количество слайдов: 33

Рядки Один з різновидів одновимірних масивів — масив символів, або рядок, — посідає особливе Рядки Один з різновидів одновимірних масивів — масив символів, або рядок, — посідає особливе місце у багатьох мовах програмування.

Алгоритми перетворення рядків застосовуються для вирішення широкого кола задач : • редагування та перекладу Алгоритми перетворення рядків застосовуються для вирішення широкого кола задач : • редагування та перекладу текстів • алгебричних перетворень формул • криптоаналізу • в інформаційно-пошукових системах • електронних словниках, тощо.

Рядок - це скінченна послідовність символів, яку можна розглядати як особливу форму одновимірного масиву. Рядок - це скінченна послідовність символів, яку можна розглядати як особливу форму одновимірного масиву. • Рядок як масив символів характеризується довжиною, тобто кількістю символів. • Для рядка розрізняють поняття загальної та поточної довжини. • Загальна довжина рядка визначається об'ємом оперативної пам'яті, що була надана рядку під час його оголошення. • Поточна довжина рядка визначається кількістю символів у ньому в конкретний момент виконання програми, вона ніколи не перевищує загальної довжини.

Оголошення рядків • У разі оголошення рядка як змінної типу string його поточна довжина Оголошення рядків • У разі оголошення рядка як змінної типу string його поточна довжина зберігається в елементі з нульовим індексом. • У цей елемент записується символ, код якого дорівнює значенню довжини. • При виведенні рядка користувач не побачить цього символу, але у програмі можна прочитати або змінити його значення. • Нульовий елемент рядка — це символ, а не число, і тому для отримання числового значення довжини рядка слід застосовувати вбудовану функцію оrd(<символ>), а для запису довжини - вбудовану функцію chr(<число>).

Синтаксис оголошення змінної типу string: • <ім'я змінної>: string[n], де n– ціла константа, можливо Синтаксис оголошення змінної типу string: • <ім'я змінної>: string[n], де n– ціла константа, можливо іменована, що не перевищує 255 • Скорочений синтаксис оголошення змінної рядкового типу: <ім'я змінної>: string, при цьому оголошується рядок довжиною 255 символів, за замовчуванням

 • Максимальне значення довжини рядка становить 255 символів • Будь-який символ займає один • Максимальне значення довжини рядка становить 255 символів • Будь-який символ займає один байт пам'яті • Обсяг пам'яті, що виділяється для збереження значення рядкової змінної, буде на один байт більшим від вказаної в оголошенні загальної довжини рядка, оскільки для збереження значення його поточної довжини потрібний додатковий байт пам'яті

Приклади оголошень змінних рядкового типу. • const len=50; var str: string; name: string[15]; address: Приклади оголошень змінних рядкового типу. • const len=50; var str: string; name: string[15]; address: string[len]; • Як і елементи будь-якого масиву, символи рядка зберігаються у поряд розташованих комірках оперативної пам'яті.

 • Змінна s: string[n] являє собою масив символів з індексами від 0 до • Змінна s: string[n] являє собою масив символів з індексами від 0 до n. • Значенням L=ord(s[0]) може бути число від 0 до n – довжина рядка, що є значенням s. Сам рядок-значення представлено з індексами від 1 до L. • Якщо змінна s має тип string[5], то такі послідовності байтів #3 #5 #0 ‘A’ ‘ 1’ ? ‘B’ ‘ 2’ ? ‘C’ ‘ 3’ ? ? ‘ 4’ ? ? ‘ 5’ ? Представляють її значення відповідно ‘ABC’, ‘ 12345’ та ‘’.

 • Елементи масиву-рядка з індексами від L+1 до n невизначені; спроба їх використання • Елементи масиву-рядка з індексами від L+1 до n невизначені; спроба їх використання може призвести до неочікуваних наслідків. • Їх значення варто розглядати як “сміття”, що позначено у наведених байтах знаком ? . • Крім змінних рядкового типу використовуються рядкові константи, які записуються в одинарних лапках, наприклад: 'Turbo Pascal'. • Довжина рядкової константи визначається за допомогою функції length(S).

Операції над рядками та рядкові вирази • Змінні типу string можна обробляти двома способами. Операції над рядками та рядкові вирази • Змінні типу string можна обробляти двома способами. • Перший спосіб дає можливість розглядати рядок як цілісний об'єкт, другий — обробляти його як об'єкт, що складається з окремих символів, тобто з елементів типу char. • Перший спосіб надає можливість за одну операцію присвоювати рядковій змінній значення рядка символів, виконувати об'єднання декількох рядків тощо. • Другий спосіб забезпечує доступ до окремих символів рядка за їх індексами. • Для доступу до символу рядка застосовують операцію індексування: <ім'я змінної рядкового типу>[<індекс символу>]

операції над даними рядкового типу операції над даними рядкового типу

Присвоєння рядків • Вираз рядкового типу можна присвоїти змінній рядкового типу. • Символи рядка, Присвоєння рядків • Вираз рядкового типу можна присвоїти змінній рядкового типу. • Символи рядка, що є значенням рядкового виразу, присвоюються відповідним елементам змінної. • Якщо довжина рядкового виразу більше загальної довжини змінної, присвоюються лише перші символи в межах означеної кількості. • Під час операції присвоєння неявно модифікується нульовий елемент змінної, що набуває нового значення.

Приклад • Нехай змінна str оголошена як string[5]. • Після присвоєння str: ='Kiyv' значення Приклад • Нехай змінна str оголошена як string[5]. • Після присвоєння str: ='Kiyv' значення символів рядка стануть такими: str[0]=chr(4), str[l]='K', str[2]='i', str[3]='y', str[4]=' v'. • Якщо згодом виконати оператор присвоєння str: =' Ukraine‘ , то символи 'nе' в рядку str будуть втрачені.

Об'єднання рядків • Над рядковими змінними означена операція об'єднання, або конкатенації, яка дозволяє дописати Об'єднання рядків • Над рядковими змінними означена операція об'єднання, або конкатенації, яка дозволяє дописати один рядок в кінець іншого. • Ця операція позначається символом «+» . • Під час конкатенації рядків поточна довжина рядка, до якого приєднується інший рядок, збільшується на довжину рядка, що додається. • Збільшення довжини об'єднаного рядка здійснюється тільки у заданих під час оголошення межах.

Порівняння рядків • Для даних рядкових типів означено всі наявні в мові Pascal операції Порівняння рядків • Для даних рядкових типів означено всі наявні в мові Pascal операції порівняння: =, <>, <, >, <=, >=. • Правило порівняння даних символьного типу. Кожному символу відповідає унікальний код у таблиці символів ASCII. З двох символів більшим вважається той, код якого більший. • Рядки — це послідовності символів, і порівняння рядків виконується як серія порівнянь тих символів рядків, що мають однакові індекси.

 • Якщо довжина рядків однакова, і в її межах відповідні символи рядків збігаються, • Якщо довжина рядків однакова, і в її межах відповідні символи рядків збігаються, то рядки вважаються рівними, інакше рядки не рівні. • Порівняння рядків. Спочатку порівнюються перші символи рядків (символи з індексами 1). Якщо ці символи відмінні, то більшим вважається той рядок, перший символ якого більший. Якщо символи рівні, то порівнюються другі символи рядків. Якщо і другі символи рядків виявляються однаковими, то порівнюються треті символи рядків і т. д. • Крім того, s 1

Приклади • ‘AAA’<‘AZ’ • ‘ 12’<‘ 9’ • ‘ZZZ’<‘Za’ • ’ 12’<‘ 123’ • Приклади • ‘AAA’<‘AZ’ • ‘ 12’<‘ 9’ • ‘ZZZ’<‘Za’ • ’ 12’<‘ 123’ • 'Borland' < 'Turbo' • 'Borland Pascal' < 'Turbo‘ • 'Turbo Pascal' > 'Turbo' • 'Borland' > 'Borisov' • 'Borland' < 'borland‘ • 'borland' < 'борланд'

Введення та виведення рядків • Не рекомендується введення рядка з файлу або з клавіатури Введення та виведення рядків • Не рекомендується введення рядка з файлу або з клавіатури за допомогою процедури READ! • Введення рядків з клавіатури або з файлів процедурою READLN надійніше. • Виведення рядків не має особливостей (WRITE чи WRITELN)

Процедури обробки рядків Процедури обробки рядків

Процедура видалення • Дає можливість видалити певну кількість символів з рядка, починаючи із заданої Процедура видалення • Дає можливість видалити певну кількість символів з рядка, починаючи із заданої позиції. Delete(var s: string; Index: integer; count: integer); • Вказана процедура має три параметри: s — рядок, з якого видаляються символи; Index — індекс символа, з якого починається видалення; Count — кількість символів, що мають бути видалені. • Під час видалення довжина рядка автоматично зменшується на кількість видалених символів. • Символи, що містилися в рядку праворуч від зони видалення, автоматично переставляються на позиції видалених символів, тобто здійснюється серія операцій присвоєння s[i] : =s[i+c], де s — змінна рядкового типу; с - кількість символів, що видаляються; і - лічильник.

Приклад var str: string; begin str: ='children'; Delete(str, 6, 3); Writeln(str); end. Приклад var str: string; begin str: ='children'; Delete(str, 6, 3); Writeln(str); end.

Процедура вставки символів у рядок Insert(source: string; var s: string; index: integer); • Зміст Процедура вставки символів у рядок Insert(source: string; var s: string; index: integer); • Зміст параметрів процедури є таким: Source — рядок, що вставляється в інший рядок; s — рядок, куди здійснюється вставка; Index — номер позиції, з якої вставка починається. • Після виконання вставки символів довжина рядка автоматично збільшується в межах заданої в оглошенні довжини. Якщо вставка здійснюється всередину рядка, то місце для підрядка вивільняється за рахунок зсуву символів рядка вправо, тобто виконується серія присвоєнь вигляду s[i+c] : =s[i].

Приклад var str 1, str 2: string; begin str 1: ='frnd'; str 2: ='ie'; Приклад var str 1, str 2: string; begin str 1: ='frnd'; str 2: ='ie'; insert(str 2, str 1, 3); Writeln(str 1); end.

Рядки, що складаються із символів цифр, можна перетворити на числа Val(s: string; var v; Рядки, що складаються із символів цифр, можна перетворити на числа Val(s: string; var v; var code: integer); • Процедура має такі параметри: s — рядок, що перетворюється на число; v - змінна типу integer або real, до якої число буде записано; Code — змінна цілочислового типу, яка визначає успішність перетворення (Code = 0) або містить код помилки (Code<>0). Помилка виникає тоді, коли рядок s не є символьним записом числа. У такому разі значення змінної Code дорівнює номеру першого помилкового символу.

Приклад • const st='150'; var num, code: integer; begin Val(st, num, code); Writeln(num); end. Приклад • const st='150'; var num, code: integer; begin Val(st, num, code); Writeln(num); end.

Числа, можна перетворити на рядки • Str(x [: Width [: Decimals ]]; var s: Числа, можна перетворити на рядки • Str(x [: Width [: Decimals ]]; var s: string); • У процедурі означено такі параметри: х — змінна цілого або дійсного типу, значення якої перетворюватиметься на рядок; Width — необов'язковий параметр, що визначає кількість символів у створюваному рядку; Decimals — необов'язковий параметр, що визначає кількість символів після десяткової точки; s — рядок, який утворюється.

Приклад • var N: real; st: string; begin n: =160. 236; str(n: 5: 2, Приклад • var N: real; st: string; begin n: =160. 236; str(n: 5: 2, st); Writeln(st); end.

Функції обробки рядків Функції обробки рядків

Копіювання підрядка в новий рядок • Copy(s: string; Index: integer; cout: integer): string; • Копіювання підрядка в новий рядок • Copy(s: string; Index: integer; cout: integer): string; • Параметри функції: s — рядок, який копіюють; Index — позиція, з якої розпочинається копіювання; Count — кількість символів, що копіюються. Якщо загальна довжина рядка, який утворюється, є меншою за кількість символів, що копіюються, то у вихідному рядку будуть тільки перші символи з числа тих, які треба скопіювати.

Приклад • var s: string; begin s: ='Turbo Pascal'; s: =Copy(s, 7, 6); Writeln(st); Приклад • var s: string; begin s: ='Turbo Pascal'; s: =Copy(s, 7, 6); Writeln(st); end.

Функція, що повертає номер позиції першого входження символу або підрядка в рядок Pos(Substr: string; Функція, що повертає номер позиції першого входження символу або підрядка в рядок Pos(Substr: string; s: string): byte; • У функції означено два параметри: Substr — підрядок, позицію першого входження якого необхідно повернути; s — рядок, до складу якого має входити підрядок. Якщо потрібного підрядка в рядку немає, то функція повертає нуль.

Алгоритм заміни в рядку кожного слова 'child' словом 'children' • Ввести рядок. • Створити Алгоритм заміни в рядку кожного слова 'child' словом 'children' • Ввести рядок. • Створити новий порожній рядок • Поки у вхідному рядку міститься підрядок ' child', повторювати дії, зазначені у пунктах 3. 13. 4. 3. 1. Визначити позицію поточного слова 'child'. 3. 2. Вставити підрядок ' rеn' у вхідний рядок на визначену позицію. 3. 3. Приєднати до нового рядка копію вхідного рядка, починаючи з першого символа до слова 'children' включно. 3. 4. Видалити із вхідного рядка скопійований підрядок • Після завершення циклу приєднати до нового рядка символи вхідного рядка, що залишилися після видалення.

Program ch; var s: string; n: integer; snew: string; begin writeln('To replace Program ch; var s: string; n: integer; snew: string; begin writeln('To replace "child" width "children" '); writeln('input string'); readln(s); snew: =''; while pos('child', s)<>0 do begin n: =pos('child', s); insert('ren', s, n+5); snew: =snew+copy(s, 1, n+5); delete(s, 1, n+5); end; snew: =snew+s; writeln('output string'); writeln(snew); end.