Символьні масиви 2
Масив - це впорядкована сукупність однотипних даних. Кожному елементу масиву відповідає один або кілька індексів, що визначають положення елемента в масиві. Індекси утворюють впорядковані послідовності.
Тип індексу визначає його допустимі значення. В якості типу індексу може бути вказаний будь порядковий тип (boolean, char, integer, що перераховується тип, а також діапазони цих типів), крім типу longint і його похідних.
Залежно від кількості типів індексів розрізняють: одномірні, двовимірні, тривимірні і n-мірні масиви. Двовимірні масиви зазвичай називають матрицями, вважаючи перший індекс - номером рядка, а другий -Номери стовпчика.
Тип елементів масиву - будь-який допустимий в Borland Pascal тип (в тому числі і масив), крім файлу.
Обмеження на кількість індексів в Borland Pascal немає. Однак сумарна довжина масиву не повинна перевищувати 65537 байт.
Значення елементів масиву в програмі можна визначити трьома способами. По-перше, масив може бути инициализирован з використанням типізованих констант або просто привласненням значень елементам. По-друге, елементи масиву можуть бути введені з клавіатури або з файлу. По-третє, елементи масиву можуть бути обчислені, наприклад, згенеровані з використанням датчика випадкових чисел, розраховані по заданих формулах і закономірностям, а також скопійовані з іншого масиву.
Дана тема є актуальною, так як зручність масивів не в способі зберігання, а в способі їх обробки.
Метою роботи є вивчення поняття «Символьний масив».
Основними завданнями дослідження є: розгляд поняття символьного масиву, символьного рядка та операцій над ними.
1. Символьні масиви.
Операції над масивами. Над масивом в цілому визначена єдина операція - операція присвоювання.
Присвоєння масивів полягає в копіюванні елементів одного масиву в інший. Цю операцію можна виконувати тільки над масивами одного типу. Масиви вважаються співпадаючими по типу, якщо вони оголошені через кому в одному рядку або, якщо спочатку оголошений тип масиву, а потім масиви цього типу.
Доступ до елементів масиву. Робота з масивом, як правило, зводиться до дій над його елементами. Для звернення до конкретного елементу масиву необхідно вказати ім'я масиву та значення індексів елемента в квадратних дужках через кому.
Значення індексів можна вказати безпосередньо літералом, наприклад а [3], або побічно, вказавши ідентифікатор змінної, яка містить, значення індексу.
Примітка. З багатовимірних масивів допускається виділяти подмассіви, відкидаючи індекси, записані праворуч, і залишаючи індекси, що визначають даний подмассів. Так, з матриці можна виділити рядок, але не можна - стовпець.
Введення-виведення масивів. Введення-виведення масивів виконують поелементно, використовуючи цикли з заданим числом повторень.
Значення елементів масиву вводять в порядку звернення до них з циклу, наприклад для циклу, показаного вище: aj, а2, а3, а4, а5. Ці значення можуть задаватися в одному рядку через пропуск або з натисканням клавіші Enter після введення одного або декількох чисел.
При виконанні операцій введення-виведення матриць і масивів великої розмірності доцільно вводити і виводити значення за рядком.
Символьні масиви. Символьними називають масиви, елементами яких є символи. Такі масиви традиційно використовувалися для подання символьної інформації, наприклад різних текстів. Обробка символьних масивів в Borland Pascal має деякі особливості.
1. Оголошуючи символьний масив як типізовану константу, значення символів можна вказувати поелементно:
Const d: array [1..10] of char = ( '0 \' 1 \ '2 \' 3 \ '4 \' 5 \ '6' / Ђ7 \ '8 \' 9 ');
або цілком, використовуючи строкову константу, довжина якої повинна строго відповідати розміру масиву:
Const d: array [1..10] of char = '0123456789' ;.
2. Присвоїти значення символьному масиву також можна цілком, використовуючи строкову константу, довжина якої повинна збігатися з довжиною масиву:
Var S: array [1..11] of char ;. S: = 'Приклад один';
3. При введенні елементи символьного масиву не можна розділяти пробілами, так як пропуск буде сприйматися як символ:
Var S: array [1..10] of char;
4. Символьний масив можна виводити поелементно в циклі, як звичайний одновимірний масив, а можна - цілком, одним оператором Write або WriteLn:
5. В операторі виведення допускається використання операції конкатенації (злиття) символьних масивів, що позначається символом «+». Результатом цієї операції буде новий символьний масив, число елементів якого дорівнює сумі розмірів вихідних масивів, а значеннями елементів -елементи вихідних масивів, послідовно записані один за одним:
Робота з одновимірними символьними масивами здійснюється поелементно, як зі звичайними масивами.
На сьогоднішній день значні потужності обчислювальної техніки і величезна кількість різноманітного програмного забезпечення використовується для роботи з текстовою інформацією. З цієї причини в програмуванні створюються спеціальні засоби для роботи з текстом, розробляються відповідні прийоми і методи програмування.
Дана робота присвячена вивченню засобів системи програмування, призначених для обробки фрагментів тексту - рядків.
Найбільш простим способом для роботи з текстом є застосування символьних змінних і лінійних масивів, що містять дані символьного типу (Char).
A: array [0..63] of Char;
Завдяки оператору присвоювання P тепер вказує на перший елемент масиву A, тому PrintStr викликається двічі з одним і тим же значенням.
Ви можете форматувати тіпізованную константу, що має тип символьного масиву з нульовою базою, за допомогою строкового літерала, що має меншу довжину, ніж розмір масиву. Решта символи встановлюються в значення NULL (# 0), і масив буде містити рядок із завершальним нулем.
Крім безпосереднього використання рядків у виразах, рядок можна помістити в символьний (типу char) масив з ви-лайливим ім'ям і надалі звертатися до неї по імені масиву. Найчастіше для розміщення строкової константи в масиві использу-ється його ініціалізація. Наступна програма виконує зазначені дії:
//Р2-07.СРР - ініціалізація масиву строкової константою
#include
char stroka [] = "REPETITIO EST MATER STUDIORUM";
cout «" \ nsizeof stroka = "" sizeof stroka;
Результат виконання програми:
sizeof stroka = 30
stroka = REPETITIO EST MATER STUDIORUM
Зверніть увагу, що при визначенні масиву charпосле його іменіstroka в дужках [] не вказано кількість елементів. Розмір масиву підраховується автоматично під час ініціалізації і дорівнює кількості символів в строковою инициализирующей Констан-ті (в нашому випадку 29) плюс один елемент для завершальним символом '\ о'.
Лапки не входять до рядок, а служать її обмежувачами при за-писи в програмі. У рядку може бути один символ, наприклад, "А" - рядок з одного символу. Однак на відміну від символьного Констан-ти 'А' довжина внутрішнього представлення рядка "А" дорівнює 2. Рядок може бути порожньою ії. при цьому її довжина дорівнює 1. Однак символьна константа не може бути порожньою, тобто запис '' в більшості реалі-зацій неприпустима.
2. Символьні рядки
Символьні рядки зберігають таку інформацію, як імена файлів, назви книг, імена службовців та інші символьні поєднання. Більшість програм на C ++ широко використовують символьні рядки. Далі ви дізнаєтеся, що в C ++ символьні рядки зберігаються в масиві типу char, який закінчується символом NULL (або ASCII 0). В даному уроці символьні рядки розглядаються більш докладно. Ви дізнаєтеся, як зберігати і обробляти символьні рядки, а також як використовувати функції бібліотеки етапу виконання, які маніпулюють символьними рядками. До кінця цього уроку ви освоїте наступні основні концепції:
· Щоб оголосити символьний рядок, ви повинні оголосити масив типу char,
· Щоб привласнити символи символьної рядку, ваші програми просто привласнюють символи елементів масиву символьних рядків.
· Програми C ++ використовують символ NULL (ASCII 0), щоб відзначити останній символ рядка.
· Програми можуть передавати символьні рядки в функцію, як і будь-який масив.
· Більшість бібліотек етапу виконання C ++ забезпечують набір функцій, які керують символьними рядками.
Програми на C ++ зберігають символьні рядки як масив типу char. Більшість програм широко використовують символьні рядки. Експериментуйте з кожною програмою, представленою в цьому уроці, щоб освоїтися з символьними рядками.
Програмісти на C ++ широко використовують символьні рядки для зберігання імен користувачів, імен файлів та іншої символьної інформації.

Мал. 17.1. C ++ трактує символьний рядок як масив типу char.
Головна відмінність між символьними рядками і іншими типами масивів полягає в тому, як C ++ вказує останній елемент масиву, Як ви вже знаєте, програми на C ++ представляють кінець символьного рядка за допомогою символу NULL, який в C ++ зображується як спеціальний символ '\ 0'. Коли ви привласнюєте символи символьної рядку, ви повинні помістити символ NULL ( '\ 0') після останнього символу в рядку. Наприклад, наступна програма ALPHABET. CPP привласнює букви від А до Я змінної alphabet, використовуючи цикл for. Потім програма додає символ NULL в цю змінну і виводить її за допомогою cout.
char alphabet [34]; // 33 буквиплюс NULL char letter;
for (letter = 'A', index = 0; letter <= 'Я';
letter ++, index ++) alphabet [index] = letter;
cout <<"Буквы " < Як бачите, програма присвоює рядку символ NULL, щоб вказати останній символ рядка: Коли вихідний потік cout виводить символьний рядок, він по одному виводить символи рядка, поки не зустріне символ NULL. Коротше кажучи, Cимвол NULL вказує програмі останній символ в рядку. Зверніть увагу на цикл for, який з'являється в попередній програмі. Як бачите, цикл инициализирует і збільшує дві змінні (letter і index). Коли цикл for инициализирует або збільшує кілька змінних, розділяйте операції коми (кома теж є оператором C ++): for (letter = 'A', index = 0; letter <= 'Я'; letter++, index++) C ++ автоматично додає NULL до строкових констант Всі створені вами програми використовували символьні рядкові константи, укладені всередині подвійних лапок, як показано нижче: "Це строкова константа" При створенні символьної строкової константи компілятор C ++ автоматично додає символ NULL, як показано на рис. 17.2. Мал. 17.2. Компілятор C ++ автоматично додає символ NULL до строкових констант. Коли ваші програми виводять символьні рядкові константи за допомогою вихідного потоку cout, cout використовує символ NULL (який компілятор додає до рядка) для визначення останнього символу виведення. 3.1 Використання символу NULL Якщо ви використовуєте рядкові константи, укладені в подвійні лапки, компілятор C ++ автоматично додає символ NULL. Більшість функцій C ++ використовують символ NULL для визначення ланцюжка довжиною. Наступна програма LOOPNULL.CPP злегка змінює попередню програму, використовуючи цикл for для виведення вмісту рядка: char alphabet [34]; // 33 сімволаплюс NULL char letter; for (letter = 'A', index = 0; letter <= 'Я'; letter++, index++) alphabet[index] = letter; for (index = 0; alphabet [index] 1 = NULL; index ++) cout < Як бачите, цикл for по одному досліджує символи рядка. Якщо символ НЕ NULL (не останній символ рядка), цикл виводить символ, збільшує індекс, і процес триває. Як 'А' відрізняється від "А" При розгляді програм на C ++ ви можете зустріти символи, укладені в одинарні лапки (наприклад, 'А') і символи, укладені в Мал. 17.3. Як компілятор C ++ зберігає символьну константу 'А' і строкову константу "А". подвійні лапки ( "А"). Символ всередині одинарних лапок є символьне константу. Компілятор C ++ виділяє тільки один байт пам'яті для зберігання символьної константи. Однак символ в подвійних лапках є строкову константу - цей символ і символ NULL (додається компілятором). Таким чином, компілятор буде виділяти два байта для символьного рядка. Малюнок 17.3 ілюструє, як компілятор C ++ зберігає символьну константу 'А' і строкову константу "А". 4. Ініціалізація символьного рядка char title [64] = "Вчимося програмувати на мові C ++"; char title [] = "Вчимося програмувати на мові C ++"; char title [64] = "Вчимося програмувати на мові C ++"; char lesson [64] = "Сімвольниестрокі"; cout <<"Книга: " < cout <<"Урок: " < Деякі програми, представлені в решти книги, будуть ініціювати символьні рядки подібним способом. Знайдіть час для експерименту з цією програмою, змінюючи символи, що привласнюються кожному рядку. 5. Передача рядків у функції Передача символьного рядка в функцію подібна передачі будь-якого масиву як параметр. Усередині функції вам потрібно просто вказати тип масиву (char) і ліву і праву дужки масиву. Вам не треба вказувати розмір рядка. Наприклад, наступна програма SHOW_STR.CPP використовує функцію show_ string для виведення символьного рядка на екран: void show_string (char string []) cout < show_string ( "Вчуся програмувати на C ++"); Як бачите, функція show_string трактує параметр символьного рядка як масив: void show_string (char string []) Так як символ NULL вказує кінець рядка, функція не вимагає параметр, який задає кількість елементів в масиві. Замість цього функція може визначити останній елемент, просто знайшовши в масиві символ NULL. Як ви вже знаєте, функції C ++ часто використовують символ NULL для визначення кінця рядка. Наступна програма STR_LEN.CPP створює функцію з ім'ям string_length, яка шукає символ NULL в рядку для визначення кількості символів, що містяться в рядку. Далі функція використовує оператор return для повернення довжини рядка викликала функції. Програма передає кілька різних символьних рядків в функцію, відображаючи довжину кожної з них на екрані: int string_length (char string []) for (i = 0; string []! = '\ 0'; i ++); // Нічого не робити, але перейти до // наступного символу return (i); довжина рядка char title [] = "Вчимося програмувати на мові C ++"; char lesson [] = "Символьні рядки"; cout <<"Строка " < cout <<"Строка " < Як бачите, функція запускається з першого символу рядка (елемент 0) і потім досліджує кожний елемент до тих пір, поки не зустріне NULL. Розглядаючи програми на C ++, ви зустрінете цілий ряд функцій, які подібним чином переглядають символьні рядки в пошуках символу NULL. 1. Символьна рядок являє собою масив символів, що завершується 0 (символом NULL). 2. Ви створюєте символьний рядок, оголошуючи масив типу char. 3. Ваша програма відповідальна за розміщення символу NULL за останнім символом рядка. 4. Якщо програма використовує рядкові константи, укладені в 5. подвійні лапки, компілятор C ++ автоматично додає символ NULL. 7. Більшість компіляторів C ++ в своїх бібліотеках етапу виконання забезпечують широкий набір функцій для маніпулювання рядками. Слід пам'ятати, що в C ++ немає принципової різниці між масивом масивів довільної розмірності і звичайним одновимірним масивом. 2. "Мова програмування Сі." Б.В. Керниган, Д. Рітчі, А. Фьюер. український переклад: Київ: Фінанси і Статистика. 1985 р 4. "Мови програмування високого рівня", Хротко Г. 1982 р 5. "Мови програмування", Малютін Е.А. Малютіна Л.В. 1982 р 6. "Нові мови програмування та тенденції їх розвитку", Ушкова В. 1982 р 7. "Мови програмування: розробка та реалізація", П. Терренс, 1979 г.