Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Лекція 7 Рядковий тип даних

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 10.6.2024

Лекція №7

Рядковий тип даних.

Досі ми розглядали програми, в яких проводилася обробка тільки числових даних. Але сучасний комп’ютер, як відомо, є пристроєм, здатним працювати не тільки з числовою інформацією, але і з іншими її видами: текстовою, графічною, аудіо- і відеоінформацією. У мові Паскаль також передбачена можливість обробки текстових даних. Для роботи з ними використовуються типи char (символьний тип) і string (рядковий тип).

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

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

Символьні константи і змінні

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

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

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

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

ASCII – це абревіатура від American Standart Code For Information Interchange, що в перекладі означає «американський стандартний код для обміну інформацією». Це використовувана у всьому світі таблиця для кодування текстової інформації, що вводиться в комп’ютер. Дана таблиця містить букви латинського алфавіту (прописні і рядкові), цифри від 0 до 9, символи арифметичних операцій і розділові знаки, а також різні спеціальні символи. Кожному з наявних в таблиці символів відповідає свій числовий код. Наприклад, прописній букві N латинського алфавіту відповідає числовий код 78, рядковій букві n – код 110 (рядкові і прописні букви мають різні коди).

Цифрі 6 відповідає код 54, пропуску – код 32, комі – код 44 і т.д. Крім того, кодова таблиця містить так звані керуючі символи, які при введенні не відображаються безпосередньо на екрані комп’ютера, але при цьому виконують певні дії, наприклад, виконують переведення курсору на наступний рядок при роботі з текстом або видають звуковий сигнал. Кожному з керуючих символів також відповідає числовий код в таблиці вони закодовані до 32). Всього ця таблиця містить 128 символів. Вона є єдиною для всіх IBM-PC сумісних комп’ютерів.

До основної таблиці ASCII існує доповнення, що також містить 128 символів. Ця друга половина таблиці зарезервована для символів національних алфавітів і, відповідно, для різних країн виглядає по-різному. У Росії в другій половині містяться, зазвичай прописні і рядкові букви кирилиці (російського алфавіту). Крім символів кирилиці, в цій частині таблиці містяться так звані псевдографічні символи, які не мають відповідних їм клавіш на клавіатурі комп’ютера, але можуть бути виведені на екран шляхом набору їх числового коду при натиснутій клавіші Alt.

Містить ця частина таблиці і деякі спеціальні символи, відсутні в першій, міжнародній частині таблиці. До їх числа відноситься, наприклад, радикал (знак квадратного кореня).

Отже, вся розширена таблиця, що складається з міжнародної і національної частини, містить 256 символів.

Символьні константи, які використовуються в програмі, записуються так: ‘А’, ‘у’, ‘?’, ‘щ’, тобто запис символьної константи складається з символу, поміщеного в апострофи.

Опис символьних змінних

var < ім’я_змінної >:char;

char – службове слово, що позначає тип даної змінної (char – це скорочення від англійського слова character, що означає в перекладі «символ»).

Наприклад, var  sim, bukv: char;

Якщо змінній символьного типа присвоюється яке-небудь значення, то його також потрібно помістити в апострофи. Наприклад: Sim: = ‘ш’; означає що змінній sim було присвоєне значення букви ш. Можливий в програмі і такий оператор присвоєння: cfr:=‘7’; Наявність в програмі такого запису говорить про те, що змінній cfr присвоюється значення символу 7 (а не числа 7, як було б у випадку з числовою змінною). Різниця в тому, що символ 7 не може брати участь в арифметичних і інших операціях, які можливі над числом 7.

Порівняння символьних змінних

Подібно до звичайних чисел символьні величини можна порівнювати. При цьому фактично порівнюються не самі ці величини, а відповідні їм числові коди. Наприклад, можна записати таку операцію порівняння:  ‘л’<‘н’ результат цієї операції буде істинним (рівний true), оскільки код символу ‘л’ рівний 171, а код символу ‘н’ рівний 173. А якщо ми запишемо наступне співвідношення: ‘к’>‘т’ то таке співвідношення буде помилковим (false), оскільки код символу ‘к’ рівний 170, а символу ‘т’ – 226. Можна перевіряти символьні величини також на рівність або нерівність один одному. Знаки для операцій порівняння символьних величин використовуються ті ж, що і для числових величин.

Функції перетворення chr і ord

У мові Паскаль для роботи з символьними змінними використовуються спеціальні стандартні функції chr і ord. Як вхідне значення (аргументу) функції chr указується десятковий код символу, а як результат видається відповідний коду символ. Загальний вид функції: chr(к), де k – десятковий числовий код символу. Наприклад, значення chr(33) буде рівне ‘!’, chr(233) – ‘щ’ і т.д.

Дія функції ord протилежна функції chr. Аргументом даної функції є символ, а значенням – десятковий код даного символу. Загальний вид даної функції: ord(‘s’) де s – символ, код якого ми визначаємо.

Зверніть увагу, що оброблюваний функцією символ повинен бути обов’язково поміщений в лапки, інакше при компіляції програми з використанням даної функції буде видане повідомлення про помилку. Тому запис функції повинен виглядати в програмі таким чином ord (‘ж’), ord "(‘ф’) і т.д. Для символу ‘ж’ функція видасть код 166, для символу ‘ф’ – 228.

Робота з рядками

Опис рядкових змінних

Природно, що для ефективної роботи з текстом необхідно уміти обробляти не тільки окремі символи, але і слова, фрази, рядки, тобто групи символів. Для обробки таких груп символів в Паскалі використовується рядковий тип даних. Для опису рядкових змінних використовується службове слово string. Опис рядкової змінної в загальному вигляді виглядає таким чином: var <ім’я_зміної> :  string[довжина]; після слова string вказується довжина описуваної змінної, тобто максимальна кількість символів, яка може містити дана змінна. Наприклад: var stroka:string[25];

Параметр, поміщений в квадратні дужки, не є обов’язковим і використовується в тому випадку, якщо існують причини, по яких необхідно жорстко обмежити максимальну довжину рядкової змінної. Якщо ж після імені змінної її довжина не указується, то за замовчуванням вона вважається рівною 255 символам. В цьому випадку опис символьної змінної виглядатиме так: var stroka:string;

Значення символьних змінних так само, як і вже знайомі нам символьні константи (до текстових констант відносяться, зокрема, повідомлення, що виводяться оператором Writeln), повинні обов’язково полягати в апострофи. Таким чином, оператор присвоєння рядкової змінної stroka значення ‘набір символів’ виглядатиме таким чином:

stroka:=‘набір_символів’;

Операція зчеплення (конкатенації) (+) застосовується для з’єднання кількох рядків в один результуючий рядок. Наприклад, ‘П’+’Е’+’О’+’М’=‘ПЕОМ’

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

Операції відношення (=, <, >, <>, <=, >=) здійснюють порівняння двох рядкових операндів і мають пріоритет нижчий, ніж операції зчеплення (склеювання).

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

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

Так значення функції length, аргументом якої є розглянута вище змінна stroka, буде рівне 14, а не 25, як вказано в розділі описів, оскільки фраза ‘набір символів’ містить 14 символів.

Якщо є необхідність працювати не зі всім рядком цілком, а з яким-небудь окремим символом, що міститься в ній, то до цього символу можна звернутися в програмі безпосередньо. При цьому необхідно вказати поряд з ім’ям рядкової змінної порядковий номер символу в рядку. Номер символу вказується в квадратних дужках. Наприклад, якщо ми напишемо в основній частині програми (а не в розділі описів) stroka[5], то працювати ми будемо з буквою «р», яка є п’ятим по черзі символом в даному рядку.

Номер символу в рядку, взятий в квадратні дужки, може вказуватися не тільки у вигляді числової константи, але і за допомогою змінної цілого типа. В цьому випадку номер символу, що «викликається», буде рівний значенню даної цілочислової змінної. Наприклад, якщо ми присвоїмо цілочисловій змінній i значення 10, а потім вкажемо в програмі stroka[i], то в результаті буде «викликана» буква ‘в’, яка є в рядку десятою по черзі.

Крім того для роботи з рядками використовують:

Процедури

Delete(Str,Poz,N) – вилучення N символів з рядка Str, починаючи з позиції Poz. Якщо Poz>255, виникає програмне переривання. N, Poz :integer

Insert(Str1,Str2,Poz)–вставка рядка Str1 у Str2, починаючи з позиції Poz (має бути значенням типу integer).

Str(Number,St) – перетворення числового значення величини Number і занесення результату в рядок St. Після Number може записуватися формат, аналогічний формату виведення. Якщо у форматі зазначена недостатня кількість розрядів, поле виведення розширюється до потрібної довжини.

Значення Number

Вираз

Результат

1500

Str(Number:6, St)

‘__1500’

4.8Е+03

Str(Number:10, St)

‘______4800’

76854

Str(-Number:3, St)

‘-76854’

Val(St,Number,Cod) – перетворює значення St у величину цілого або дійсного типу і розміщує результат у Number. Значення St не повинно містити зайвих пробілів на початку і наприкінці рядка. Cod – ціла змінна, значення якої не дорівнює нулю, якщо під час перетворення виявлена помилка. Cod буде містити номер позиції першого помилкового символу, a Number не буде визначено.

Значення Str

Вираз

Результат

‘1450’

val (Str, Number, Cod)

1450   Cod=0

‘14.2Е+02’

val (Str, Number, Cod)

1420   Cod=0

‘14.5А+01’

val (Str, Number, Cod)

?         Cod=5

Функції

Copy(St,Poz,N) – копіює (запам’ятовує) зі змінної St підрядок довжиною N символів, починаючи з позиції Poz. Якщо Poz > Lenght(Sf), то результатом буде пробіл; якщо Poz > 255, то виникне помилка при виконанні.

Pos(St1,St2) – виявляє номер першої появи в рядку St2 рядка St1. Результат має цілий тип і дорівнює номеру тієї позиції, де знаходиться перший символ рядка Stl. Якщо в St2 рядок Stl не знайдений, результат дорівнює 0.

UpCase(Ch) – перетворює малу літеру на велику. Параметр і результат мають літерний тип. Обробляються тільки літери латинського алфавіту.

Concat(A, В, ...) – з’єднує рядки в один рядок.

Рядком нульової довжини називається вираз ‘ ‘. Розглянемо задачу, що зумовлює застосування такого даного.


Тотожні й сумісні типи

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

Тотожність типів

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

Два типи, скажімо T1 і T2, є тотожними, якщо є істинним одне з наступних тверджень:

  •  T1 і T2 являють собою той самий ідентифікатор типу;
  •  T1 описаний як еквівалентний типу, тотожному T2.

Друга умова означає, що T1 не обов'язково повинен бути описаний як безпосередньо еквівалентний T2. Наступні описи типів:

T1 = integer; T2 = T1; T3 = integer; T4 = T2;

означають, що T1, T2, T3, T4 і integer є тотожними типами.

Наступні описи типів: T5 = set of integer;  T6 = set of integer; – не визначають T5 і T6 як тотожні, оскільки set of integer не є ідентифікатором типу. Дві змінні, описані в тому самому описі, наприклад: V1, V2: set of integer; мають тотожні типи, оскільки їх описи не роздільні. Опис:V1: set of integer; V2: set of integer; V3: integer; V4: integer; означають, що V3 і V4 мають тотожний тип, а V1 і V2 – ні.

Сумісність типів

Іноді, наприклад, у виразах і операціях порівняння, потрібна сумісність типів. Сумісність типів, крім того, є важливою передумовою для сумісності по присвоюванню.

Сумісність типів має місце, якщо виконується принаймні одна з наступних умов:

  •  Обидва типи є тотожними.
  •  Обидва типи є дійсними типами.
  •  Обидва типи є цілочисловими.
  •  Один тип є піддіапазоном іншого.
  •  Обидва типи є відрізками того самого основного типу.
  •  Обидва типи є множинними типами із сумісними базовими типами.
  •  Один тип є рядковим, а інший тип є або рядковим типом, або символьним типом.
  •  Один тип є вказівником (Pointer), а інший є будь-яким типом вказівників.
  •  Обидва типи є процедурними з ідентичними типами результатів, однаковим числом параметрів і відповідністю між параметрами.

Сумісність в операціях присвоювання

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

Значення типу T1 є сумісним по присвоюванню з типом T2 (тобто допустимо оператор T1:=T2), якщо виконується одна з наступних умов:

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

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




1. Мы переходим к пещерному здравоохранению 26 декабря 20-38 Анализ состояния российского здравоох
2. 3 АИ ПРИГОЖИН Организационные управленческие патологии Наши успехи и неудачи в деле реформирования
3. По теме - Вышивание крючком
4. 1000рублей Замена барабана тормозного заднего 200 рублей Замен
5. Зелёная дверца
6. Научиться составлять план профессиональной карьеры
7. Партнерство во имя укрепления здоровья населения
8. тема
9. тема материальных точек абсолютно твердое тело сплошная среда.
10. а с продавцом не является новшеством на рынке недвижимости
11. Podolski Towrystw Szkoly Ludowey Музей Подільський Товариства Народної школи
12. асреднюю классические гимназии реальные училища и высшую университеты институты
13. Договор займа в Гражданском кодексе республики Молдова
14. ой на будущее кадр
15. была Девица Да замужем она была за славным Богатырем
16. Введение в онтологию языка
17. 715695 Айман Х
18. іменникових сполучень
19. Бетононасосы Putzmeister стопроцентная надежность Модель Putzmeister M284 рассчитана на небольшие и среднемасштабн
20. Развитие педагогической мысли и школьной практики в России в 40-60 гг XVIII в