mozok.click » Інформатика » Символьні та рядкові величини
Інформація про новину
  • Переглядів: 7884
  • Автор: admin
  • Дата: 18-09-2017, 10:49
18-09-2017, 10:49

Символьні та рядкові величини

Категорія: Інформатика

10.1. Загальні відомості про символьні та рядкові величини

Пригадайте, за допомогою яких кодів подаються символи в комп'ютері. Чи можуть символи бути значеннями елементів масиву? Що, на ваш погляд, називають рядком у мовах програмування?

Символ — це цифра, літера або інший знак клавіатури. Кожний символ має свій унікальний двійковий код. Нині для кодування символів найчастіше застосовують кодові таблиці ASCII і Unicode. Латинські літери розташовані у першій половині таблиці ASCII. Їхні коди збігаються з кодами цих літер у таблиці Unicode і є обов’язковими для всіх країн світу. Для кодування національних символів використовується друга половина таблиці ASCII (коди від 128 до 256), а також таблиця Unicode, у якій кожний символ кодується двома байтами.

Для роботи із символами у середовищі Lazarus використовується тип даних char. Символьні змінні оголошуються в розділі оголошення змінних, наприклад var z, a_1: char.

Рядок — це набір символів. Кількість символів у рядку називають його довжиною. Основним типом для роботи з рядками є тип даних string. Порядок оголошення рядкових змінних принципово не відрізняється від порядку оголошення інших типів даних, наприклад var bas, b_1: string;.

Робота із символами кодової таблиці Unicode у середовищі Lazarus реалізована не повною мірою. Приміром, функція визначення кількості національних символів у рядку насправді визначає кількість байтів, які займає рядок. Тобто в процесі визначення кількості символів у рядку результат буде збільшено вдвічі. Тому далі в процесі опрацювання рядків і символів будемо використовувати переважно латинські літери.

Рядкові й символьні константи беруться в одинарні лапки, наприклад 'а', 'Символ' '21'. Значення символьним і рядковим змінним присвоюються за допомогою оператора присвоювання, наприклад a_1:='K; bJI—'Інформатика'. Довжина символьного рядка може бути обмежена. У цьому випадку під час оголошення змінної у квадратних дужках вказується максимальна кількість символів, які може містити ця змінна, наприклад var str1: string [25]; (змінна str1 може містити до 25 символів). Якщо довжина змінних типу string під час їх оголошення не вказана, максимальна кількість символів може сягати 255.

Однією з основних операцій над рядковими даними є їх об'єднання. Ця операція позначається символом «+» (приклад 1).

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

Приклад 3. Два учні грають у таку гру. Один учень каже: «Назви четверту літеру у назві найулюбленішої в усьому світі спортивної гри». Другий учень називає відповідну

літеру. У будь-якому випадку повідомляється про правильність відповіді, а також загадане слово — футбол. На рис. 1 наведено код моделювання цієї гри у консольному режимі.

Рис. 1. Програма моделювання гри учнів

Приклад 4. Розробити програму, за допомогою якої з літер слова facilities створюється слово file. Для цього необхідно зі слова facilities вибрати першу, четверту, п’яту і дев’яту літери

і виконати над ними операцію об’єднання. Код реалізації цього завдання наведено на рис. 2.

Результат виконання програмного коду подано на рис. 3.

Рис. 2. Програмний код створення слова із літер іншого слова

Запитання для перевірки знань

Яку назву має тип даних для роботи із символами?

Яку назву має тип даних для роботи з рядками?

Наведіть приклад оголошення рядкових змінних.

Як присвоюються змінним символьні й рядкові константи?

Завдання для самостійного виконання

Розробіть програму, за допомогою якої слова Динамо, Шахтар і 2 : 2 об'єднуються в одну конструкцію Динамо — Шахтар 2:2.

Розробіть програму для виведення на екран другої і восьмої літер у слові calculate.

Розробіть програму, за допомогою якої з літер слова vertorization створюється слово var.



10.2. Функції опрацювання рядків і символів

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

Середовище Lazarus має спеціальні функції для роботи з рядками і символами, основні з яких наведено у таблиці.

Таблиця. ОСНОВНІ ФУНКЦІЇ ОПРАЦЮВАННЯ РЯДКІВ І СИМВОЛІВ

Нині більшість програм створюється командами. Але тільки один програміст відповідає за її архітектуру, інші — лише кодери.

Рядкові змінні, константи і вирази можна порівнювати за допомогою операцій =, <, <=, >, >=, <>. У процесі порівняння рядків послідовно здійснюється порівнювання символів зліва направо. Рядки вважаються рівними, якщо вони мають однакову довжину й усі символи в них однакові. Меншим вважається той рядок, у якого менший код першого незбіжного символу. Наприклад, істинними є співвідношення: 'масив'<'маска', 'рядками'<'рядок'. Якщо один рядок повністю збігається з початком іншого, то більшим буде довший рядок. Наприклад, істинними є співвідношення: 'стовп'<'стовпець', 'багаторядковий'>'багато'.

Нижче розглянемо приклади використання функцій опрацювання даних рядкового і символьного типів.

• Функція length (S).

Ця функція визначає довжину рядка S.

Приклад 1. Два слова вводять в поля об’єктів Edit! і Edit2. Властивість Text об’єкта Edit! набуває значення amplification, а властивість Text об’єкта Edit2 — значення access. Потрібно визначити, наскільки перше слово довше за друге. Результат вивести у поле об’єкта Edit3.

Код реалізації цього завдання зображено на рис. 1.

Результат виконання програмного коду подано на рис. 2.

Рис. 1. Програмний код визначення різниці довжин слів

Функція concat (S1, S2, ...).

Ця функція об’єднує декілька рядків в один.

Приклад 2. Розробити код, за допомогою якого зі слів події, Код, OnCreate, опрацювання створюється речення: Код опрацювання події OnCreate.

Будемо вважати, що кожне слово окремо зберігається в полях об’єктів: слово події — у полі об’єкта Label!; слово Код — у полі

об’єкта Label2; слово OnCreate — у полі об’єкта Label3; слово опрацювання — у полі об’єкта Label4. Код створення речення подано на рис. 3.

Результат виконання коду зображено на рис. 4.

Рис. 3. Код створення речення з окремих слів

Функція copy (S, n, m). Ця функція призначена для копі

ювання m символів із рядка S, починаючи із символу n.

Приклад 3. У поле об’єкта Labell уводиться рядок. Потрібно скопіювати з нього m символів, починаючи із символу п, і присвоїти їх властивості Text об’єкта Edit!. На рис. 5 наведено програмний код реалізації цього завдання. До початку розробки коду властивості Caption

об’єкта Labell присвоюється речення 'application binary interface1, у якому виділяються 6 символів, починаючи з позиції 13.

Результат виконання програмного коду зображено на рис. 6.

Рис. 5. Програмний код копіювання символів із рядка

Функція delete (S, n, m). За допомогою цієї функції з рядка S вилучається m символів, починаючи з позиції n. Після вилучення результат залишається у рядку S.

Приклад 4. Вилучити слово аІТор з оголошення type TAIign = (alNone, аІТор, alBottom, а I Left). Вміст цього оголошення будемо зберігати у полі об’єкта Labell, а результат після

вилучення слова — у полі об’єкта Label2. Код реалізації цього завдання зображено на рис. 7.

На рис. 8 подано результат виконання цього програмного коду.

Рис. 7. Програмний код вилучення слова з рядка

Функція insert (S1, S2, n). Ця функція забезпечує встав

лення рядка S1 у рядок S2, починаючи з позиції п.

Приклад 5. У текст Actions speak louder вставити слова than words так, щоб було створено речення: Actions speak lounder than words.

Для розв’язування завдання використаємо 6 компонентів TEdit і компонент TButton. До розробки програмного коду надамо властивості Text об’єкта Edit! значення Текст до вставлення, властивості Text об’єкта Edit2 — значення Actions speak louder, властивості Text об’єкта

Edit3 — значення Текст, що вставляється, властивості Text об’єкта Edit4 — значення than words, властивості Text об’єкта Edit5 — значення Текст після вставлення. Програмний код реалізації сформульованого завдання подано на рис. 9.

Результат виконання програмного коду зображено на рис. 10.

Рис. 9. Програмний код вставлення слів у речення

Функція pos (S1, S2). Ця функція визначає номер позиції, починаючи з якої текст S2 входить до тексту S1.

Приклад 6. Розробити код, за допомогою якого у реченні The Dnipro's plunging shore відшукується номер позиції, починаючи з якої міститься слово plunging.

Для розробки програмного коду використаємо 5 компонентів TLabel і компонент TButton. На початку розробки програмного коду надамо властивості Caption об’єкта Labell значення Текст, у якому відшукується інший текст,

і властивості Caption об’єкта Label3 — значення Текст, що відшукується. Властивості Caption об’єкта Label2 надамо значення The Dnipro's plunging shore, а властивості Caption об’єкта Label4 — значення plunging. Програмний код реалізації поставленого завдання зображено на рис. 11.

Результат виконання програмного коду подано на рис. 12.

Рис. 11. Програмний код визначення позиції, з якої починається текст

Функція chr (x). Ця функія повертає символ, код якого дорівнює х.

Функція ord (c). Ця функція повертає код символу с.

Приклад 7. Розробити програмний код для визначення коду будь-якого латинського символу і визначення символу за відомим його кодом.

Розмістимо на формі 2 компоненти TEdit і компонент TButton. Властивості Text об’єкта Editl у програмі присвоїмо значення коду

англійського символу а. Властивості Text компонента Edit2 присвоїмо символ, код якого дорівнює 97. Для об’єкта Buttonl встановимо подію onclick. Програмний код реалізації цього завдання подано на рис. 13.

Результат виконання цього коду зображено на рис. 14.

Рис. 13. Програмний код визначення символу й коду символу

Запитання для перевірки знань

Для чого призначена функція chr (х)?

Поясніть призначення аргументів функції copy (S, n, m)?

Яке призначення функції concat (SI, S2,...)?

Які дії виконує функція insert (SI, S2, n)?

Поясніть порядок виконання функції delete (S, n, m).

Наведіть приклад використання функції ord (c).

Наведіть приклад використання функції copy (S, n, m).

Завдання для самостійного виконання

Розробіть код обчислення кількості символів у рядку, не враховуючи символ пробілу. Перевірте роботу програми на прикладі рядка: memory expansion card.

І Розробіть код, за допомогою якого після третього символу рядка вставляються два інші символи. Вставте, наприклад, символи or після третього символу рядка infmation system.

Розробіть алгоритм і код, за допомогою якого з рядка вилучаються всі слова, у яких є задана літера. Перевірте роботу програми на прикладі вилучення з рядка multiple document interface слів, у яких є літера о.

Розробіть код, за допомогою якого із окремо введених у довільному порядку слів створюється речення: Алгоритм упорядкування рядків.

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

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

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

• Пошук заданого символу в рядку.

Найпростіше здійснити пошук символу в рядку можна за допомогою функції pos (S1, S2). Якщо після виконання цієї функції її значення дорівнює нулю, це означає, що символ у рядку відсутній. Приклад використання функції pos (S1, S2) для пошуку символу в рядку вже розглядався в попередньому параграфі. Можливий і такий варіант пошуку.

Рядок — це фактично масив символів. Кожний символ можна розглядати як елемент цього масиву. Це означає, що пошук заданого символу в рядку принципово не відрізняється, наприклад, від пошуку заданого числа в числовому масиві.

Нижче наведено в словесній формі алгоритм пошуку символу в рядку (де n — довжина рядка).

У світі існує близько 8500 мов програмування, але кількість мов, на яких пишуть програми професійні програмісти, не перевищує 10.


10.3. Класичні алгоритми опрацювання рядків

Приклад 1. Прослідкуйте динаміку виконання алгоритму на прикладі пошуку в рядку East or West — home is best символу w. На рис. 1 зображено програмний код пошуку символу в рядку. У властивості Caption об’єкта Labell зберігається текст: East or West — home is best. Властивість Caption об’єкта Label2 використовується

для виведення результату. Зверніть увагу на те, що пошук символу в тексті завершується одразу після знайдення потрібного символу (у даному випадку символу w) або після аналізу всіх символів тексту.

На рис. 2 подано результат пошуку символу w у наведеному вище рядку.

Рис. 1. Програмний код пошуку заданого символу в рядку

Пошук заданого підрядка.

Пошук заданого підрядка в рядку можна виконати різними способами. Найпростіший із них — використання функції pos (S1, S2), яка фактично для цього і призначена. Результатом виконання цієї функції є номер позиції, починаючи з якої міститься підрядок у рядку. Якщо значення функції дорівнює нулю, то це свідчить про відсутність під-рядка в рядку.

Розглянемо алгоритм пошуку заданого підрядка.

Приклад 2. На рис. З зображено програмний код пошуку підрядка в рядку. На формі розташовано такі об’єкти: Edit!, Edit2, Labell, Label2, Label3 і Buttonl. До розробки програмного коду властивості Text об’єкта Edit! надано значення Рядок, у якому відшукується підря-док, властивості Text об’єкта Edit2 — значення Підрядок, що відшукується, властивості Caption

об’єкта Labell — значення Every country has its customs і властивості Caption об’єкта Label2 — значення country has. Нагадаємо, що у випадку відсутності підрядка в рядку функція pos набуває нульового значення.

Результат виконання програмного коду подано на рис. 4.

Рис. 3. Програмний код пошуку підрядка в рядку

Упорядкування символів у рядку.

Раніше вже зазначалося, що в середовищі Lazarus існують деякі проблеми з використанням функцій опрацювання рядків і символів національних алфавітів. Тому будемо використовувати в основному латинські символи, для кодування яких застосовується перша половина кодової таблиці ASCII (символи з кодом від 0 до 127). Латинські символи (так само як і національні символи) кодуються в алфавітному порядку за зростанням (рис. 5). Це означає, що, наприклад, символ а має менший код, ніж символ b, а символ b — менший код, ніж символ с. Тому впорядкування символів рядка в алфавітному порядку не викликає труднощів, оскільки воно зводиться до простого порівняння їхніх кодів.

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


Приклад 3. На рис. 6 зображено код упорядкування символів у рядку методом вибору. На формі розташовано об’єкти: Editl, Edit2, Label!, Label2, Buttonl. Властивості Text об’єкта Editl присвоєно значення Рядок до упорядкування символів, властивості Text об’єкта Edit2 — значення Рядок після упорядкування символів, властивості Caption об’єкта Label! — значення copyleft media text. Виведення рядка

з упорядкованими символами здійснюється за допомогою властивості Caption об’єкта La be 12.

Результат виконання програмного коду подано на рис. 7. Зверніть увагу на те, що у рядку впорядкованих символів відсутні пробіли. Насправді вони є і розташовані на початку цього рядка, тому що код пробілу має найменше значення серед усіх латинських символів.

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

Запитання для перевірки знань

Визначте, яке значення набуде змінна n після виконання фрагмента коду:

Сформулюйте алгоритм пошуку символу в рядку.

У чому полягає сутність алгоритму визначення кількості слів у рядку?

Сформулюйте сутність алгоритму виділення слів у рядку.

Завдання для самостійного виконання

Розробіть алгоритм заміни у рядку одного символу іншим заданим символом.

Наприклад, у рядку game замініть літеру g літерою n.

Задано послідовність латинських символів. Упорядкуйте їх в алфавітному порядку. Якщо в послідовності цих символів є символ f, після нього вставте два пробіли.

Рядок містить назви українських міст, записані англійськими літерами. Розробіть алгоритм і програмний код їх упорядкування за алфавітом. Перевірте роботу програми на прикладі назв міст: Poltava, Sumy, Chernivtsi, Uzhhorod, Kyiv, Ternopil. Розробіть код упорядкування в алфавітному порядку назв п'яти найбільших країн світу за кількістю населення.

Практична робота № 19

Тема. Розробка алгоритмів з обробкою символьних та рядкових величин, їх реалізація у вигляді програм.

Завдання: розробити алгоритм і програму для реалізації одного із завдань варіантів 1-3.

Варіант 1. Чотири латинські літери розташовані в алфавітному порядку: d, e, m, o. Отримайте з них слово modem.

Варіант 2. Виправте помилки в рядку: Current localtime inUkraine так, щоб отримати рядок: Current local time in Ukraine.

Варіант 3. Вставте у рядок A little is a dangerous thing слово knowledge після слова little.

Обладнання: комп'ютер із встановленою програмою — середовищем програмування.

Хід роботи

Під час роботи з комп’ютером дотримуйтесь правил безпеки.

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

Проаналізуйте умову задачі.

Розробіть алгоритм і реалізуйте його в середовищі програмування.

Виконайте програму. Проаналізуйте отриманий результат.

Зробіть висновок: які функції опрацювання рядків і символів доцільно застосовувати у цій роботі.

Практична робота № 20

Тема. Класичні алгоритми для роботи з рядками та їх реалізація у вигляді програм.

Завдання: розробити алгоритм і програму для реалізації одного із завдань варіантів 1-3.

Варіант 1. На скільки символів відрізняється найдовше слово від найкоротшого у заданому рядку, наприклад у такому: We live in Ukraine?

Варіант 2. Упорядкуйте слова рядка в алфавітному порядку. Проаналізуйте порядок виконання алгоритму на прикладі такого рядка: resistor, library, raster, host, double.

Варіант 3. Вилучте з рядка всі слова, які починаються з літери b, наприклад з рядка: macro, bit, sampler, bar, save, basic Обладнання: комп'ютер із встановленою програмою — середовищем програмування.

Хід роботи

Під час роботи з комп’ютером дотримуйтесь правил безпеки.

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

Проаналізуйте умову задачі.

Розробіть алгоритм і реалізуйте його у середовищі програмування.

Виконайте програму. Проаналізуйте отриманий результат.

Зробіть висновок: які компоненти доцільно використовувати у цій роботі.

 

Це матеріал з підручника Інформатика 9 клас Руденко (поглиблений рівень)

 






^