заняття 2

Рядок (string) - це послідовність літер. Літерні рядки вже використовувалися нами в якості аргументів операторa write при вивченні теми "Введення-виведення". Тепер познайомимося з ними докладніше.

Тип даних (string) визначає рядки з максимальною довжиною 255 символів. Мінлива цього типу може приймати значення змінної довжини.

Строкова змінна може мати атрибут довжини, що визначає її максимальну довжину.

Поточна довжина строкової змінної може бути визначена за допомогою вбудованої функції Length. для заданого значення типу string ця функція повертає ціле значення, що показує кількість літер в рядку.

Вирази, в яких операндами служать рядки, називаються строковими виразами.

Над рядками визначені дві операції:

1. Операція зчеплення (+) застосовується для зчеплення декількох рядків в одну.

2. Операції відносини (=, <>,>, <,>=, <=) проводят сравнение двух строк слева направо до первого несовпадающего символа, и та строка считается больше, в которой первый несовпадающий символ имеет больший номер в стандартной таблице обмена информацией. Результат выполнения операций отношения над строками всегда имеет булевой тип.

Наприклад. вираз 'MS-DOS'<'MS-Dos' имеет значение True

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

Рядки вважаються рівними. якщо вони збігаються по довжині і містять одні й ті ж символи на відповідних місцях в рядку.

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

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

До окремих символів рядка можна звернутися за номером (індексом) даного символу в рядку.

Наприклад, щоб звернутися до третього символу рядка SumStr треба записати SumStr [3]. Запис SumStr [0] дає значення поточної довжини рядка.

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

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

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

Дуже важливо розуміти, що при доступі до деякого елементу рядка значення її поточної довжини не перевіряється. Це ілюструє наступна програма:

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

for i: = 1 to 26 do

Str [i]: = Chr (Ord ( 'A') + i-1);

Передбачається, що дана програма повинна сформувати рядок з 26 символів, вмістом якої є послідовність заголовних букв латинського алфавіту. Однак виклик процедури writeln показує, що вмістом змінної Str буде рядок з одного символу 'А'. Природа досконалої помилки полягає в тому, що присвоювання значень елементам рядки не впливає не поточну довжину, яка була встановлена ​​рівної 1 при першому присвоєнні. Тому правильною буде наступна програма:

for i: = 'A' to 'Z' do

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

Для обробки строкових даних можна використовувати вбудовані процедури і функції:

1. Delete (Str, Poz, N) - видалення N символів рядка Str, починаючи з позиції Poz.

2. Insert (What, Where, Poz) - вставка рядка What в рядок Where, починаючи з позиції Poz.

4. Concat (Str1, Str2. StrN) - виконує зчеплення рядків в тому порядку, в якому вказані в списку параметрів.

5. Poz (What, Where) - виявляє перша поява підрядка What в рядку Where.

6. UpCase (Ch) - перетворює малу літеру в прописну.

7. Str (Number, Stroka) - перетворює число в рядок.

8. Val (Stroka, Number, Code) - перетворює рядок в число і видає код правильності перетворення.

Завдання для самостійного рішення

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

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

3. Запитайте у користувача рядок, що складається з 5 символів, і перевірте чи є вона прикладом, складаються два однозначних числа, кожне з яких менше п'яти; якщо є, то обчисліть його.

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

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

6. Напишіть алгоритм, який перевіряє, чи є частиною даного слова слово "сік". Якщо відповідь негативна, то додайте до введеного слова слово "ні" в початок і кінець. Якщо відповідь "так", то перевірте, чи не є воно словом «сокіл».

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

8. Запитайте у користувача рядок і символ і виведіть на екран повідомлення, чи є серед символів рядка заданий користувачем символ. Якщо - ні, то додайте в його рядок цей символ за вибором: в початок або в кінець рядка.

9. Згадайте користувачеві дитячу загадку. Дайте йому можливість тричі спробувати відгадати Вашу загадку. Супроводжуйте роботу програми діалогом з користувачем. Застосуйте конкатенацію введених рядків.

10. Примусьте комп'ютер випадковим чином згадати букву латинського (російського) алфавіту. Запропонуйте користувачеві відгадати загадане букву, допомагаючи йому в такий спосіб. Якщо в черговій спробі користувачем введена буква, що стоїть ближче до задуманої, ніж попередня, то виводите користувачеві повідомлення "Гаряче!", А якщо далі - "Найхолодніше!".

11. Примусьте комп'ютер випадковим чином згадати букву латинського (російського) алфавіту. Запропонуйте користувачеві відгадати загадане букву, допомагаючи йому в такий спосіб. Якщо користувачем введена буква, що стоїть зліва від задуманої, то виводите користувачеві повідомлення "Праворуч!", А якщо справа - "Лівіше!".

Завдання для додаткового рішення (на розсуд вчителя)

1. З'ясуйте, яка з букв (перша або остання) зустрічається в заданому слові частіше.

2. Скільки букв "у" в слові стоїть на парних місцях?

3. У тексті, що складається з латинських букв і закінчується точкою, підрахуйте кількість голосних букв.

5. Викресліть i-ую букву слова.

6. Викресліть з слова Х ті букви, які зустрічаються в слові Z.

7. Напишіть програму, яка вводить рядок і виводить її, скорочуючи кожен раз на 1 символ до тих пір, поки в рядку не залишиться 1 символ.

Схожі статті