Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

OT_METOD_KP_ONOEOT

.pdf
Скачиваний:
18
Добавлен:
12.05.2015
Размер:
845.28 Кб
Скачать

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

оголошення змінної спеціального структурованого типу даних string;

оголошення змінної типу символьного масиву;

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

Уразі оголошення рядка як змінної типу символьного масиву його поточна довжина фіксується спеціальним символом, розташованим після останнього інформаційного символу рядка. Цей спеціальний символ називається символом кінця рядка або нуль-символом (NULL-символом), його ASCII-код дорівнює 0, а позначається цей символ лексемою #0.

Зазначимо, що лише до тих рядків, які є змінними типу string, можуть бути

50

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

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

Приклад змінної типу string:

<ім'я змінної>:string[<загальна довжина рядка>;

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

<ім'я змінної>:string;

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

51

const length=50;

var str:string;

name:string[15];

address:string[length];

Як і елементи будь-якого масиву, символи рядка зберігаються у поряд розташованих комірках оперативної пам'яті.

Крім змінних рядкового типу використовуються рядкові константи, які записуються в одиночних лапках, наприклад: 'Turbo Pascal'. Довжина рядкової константи визначається за допомогою функції length (див. табл. 4.1.

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

<ім'я змінної рядкового типу>[<індекс символу>]

Отже, розглянемо означені в мові Pascal операції над даними рядкового типу. Це такі операції, як присвоєння, об'єднання та порівняння рядків.

Присвоєння рядків

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

52

означена як 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 операції порівняння: =, <>, <, >, <=, >=. Щоб зрозуміти принцип дії цих операцій, нагадаємо спочатку правило порівняння даних символьного типу. Кожному символу відповідає унікальний код у таблиці символів ASCII. З двох символів більшим вважається той, код якого більший. Рядки - це послідовності символів, і порівняння рядків виконується як серія порівнянь тих символів рядків, що мають однакові індекси. Інакше кажучи, при порівнянні рядків враховується їх лексикографічний, або алфавітний, порядок. А саме, спочатку порівнюються перші символи рядків (символи з індексами 1). Якщо ці символи відмінні, то більшим вважається той рядок, перший символ якого більший. В іншому разі порівнюються другі символи рядків. Якщо і другі символи рядків виявляються однаковими, то порівнюються треті символи рядків тощо. Отже, якщо а і b — деякі рядки, а і - це такий найменший індекс, що а[і] <> b[і], то рядок а вважається більшим у тому разі, коли а [і] => b[і], і навпаки. Постає питання: а коли такого індекса і, що а [і] <> b[і], не існує? Тоді можливі два варіанти: коли довжина рядків однакова, то рядки вважаються рівними, а коли довжина рядків різна, то

53

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

'Borland' < 'Turbo' 'Borland Pascal' < 'Turbo' 'Turbo Pascal' > 'Turbo' 'Borland' > 'Borisov' 'Borland' < 'borland' 'borland' < 'борланд'

Істинність цих тверджень випливає зокрема з того, що ASCII-коди великих літер менші за ASCII-коди маленьких літер, коди літер латиниці менші за коди літер кирилиці, а літери того самого регістру з тієї самої абетки розташовані в таблиці ASCII-кодів у алфавітному порядку.

Процедури та функції обробки рядків

Потужна бібліотека процедур і функцій, призначених для роботи з рядками в мові Pascal, значно полегшує розв'язання задач, пов'язаних з обробкою текстів. У цьому розділі розглянуто синтаксис і семантику рядкових процедур і функцій, а також розв'язано за їх допомогою практичну задачу. Одразу зазначимо, що для введення та виведення рядків застосовують стандартні процедури введення-виведення даних. Наприклад, для рядкової змінної s можна виконувати процедури readln(s) та writeln(s). Процедури обробки рядків наведені в табл. 4.1.

54

 

 

Таблиця 4.1 - Процедури та функції для роботи з рядками

 

 

Опис

Назва

Тип

 

 

Повертає підрядок довжиною c символів, починаючи з позиції

copy(s,i,c)

функція

 

 

i в рядку s.

 

 

Видаляє підрядок довжиною c символів, починаючи з позиції i

delete(s,i,c)

процедура

 

 

в рядку s

 

 

Вставляє рядок src у рядок s, починаючи з позиції i.

insert(src,s,i)

процедура

 

 

Повертає кількість символів у рядку.

length(s)

функція

 

 

Відшукує рядок substr у рядку s. Повертає позицію першого

pos(substr,s)

функція

 

 

символу рядку substr у рядку s. Якщо рядок не знайдено, то

 

 

повертає 0.

 

 

виконує об’єднання двох рядків s1 та s2. Тип функції string

Concat(s1,s2)

функція

 

 

перетворення малих літер у великі. Тип функції Char

Upcase(ch)

функція

 

 

перетворення чисельних значень x в рядок st

Str(x,st)

процедура

 

 

перетворення значення рядка st в чисельне значення x типу

Val(st,x,cod )

процедура

 

 

integer або real. cod: integer, визначає номер позиції першого

 

 

помилкового символу.

 

 

 

Контрольні питання

1.Що таке рядковий тип даних?

2.Яка максимальна довжина текстового рядка?

3.Що таке операція конкатенації?

4.Чи можна працювати з текстовим рядком, як з масивом символів?

5.Як видалити під рядок з рядка?

6.Як знайти підрядок в рядку?

7.Як визначити довжину рядка?

8.Як вставити підрядок у рядок?

9.Як перетворити чисельне значення у текстовий рядок?

10.Як перетворити рядкове значення у чисельне?

55

Комп’ютерний практикум №5. Частина 1 Типізовані файли

Мета

Засвоїти поняття файлу. Засвоїти поняття типізованого файлу. Засвоїти роботи операторів читання з фалу та запису у файл.

Робоче завдання

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

Хід роботи

Написати програму для вирішення поставленого завдання.

Варіанти завдань

1.Створити файл цілих чисел. Перемістити цілі додатні , парні числа до другого файлу, від’ємні та непарні у третій файл. Шляхом читання другого та третього файлів створити четвертий файл, у якому парні та непарні числа чергуються.

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

3.Створити файл цілих та дробових чисел, вводячи дані з клавіатури. Переписати дробові числа до другого файлу, підрахувати їх кількість. Число кількості дописати в файл з дробовими числами. Визначити розмір файлу з дробовими числами.

4.Створити файл цілих та дробових чисел, вводячи дані з

клавіатури. Попарно скласти два числа, що знаходяться поруч

56

(перше + друге, третє + четверте). Якщо сума ціле число то переписати такі числа в вихідний файл. Підрахувати кількість таких сум.

5.Створити файл записів з полями: прізвище, телефон, плата. Вилучити з файлу абонентів, що не сплатили. Переписати прізвища в алфавітному порядку. Заборонено використовувати додаткові файли та масиви.

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

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

8.Заданий файл цілих чисел в межах від 1 до 50. Створити два вихідні файли. Один з яких містить числа однозначні, а другий двозначні.

9.Заданий файл записів з полями: прізвище, телефон, не відсортований (номера телефону може не бути). Вилучити з файлу абонентів у яких немає номеру телефону. Вихідний файл відсортувати за номером телефону. Заборонено використовувати додаткові файли та масиви.

10.Заданий файл записів з полями Прізвище та прохідний бал. Відсортувати заданий файл за балом. В цьому ж файлі видалити ті записи, в яких не набрано прохідного балу. Заборонено використовувати додаткові файли та масиви.

57

11.В заданому файлі, який складається з цілих чисел. Знайти добуток всіх компонентів та з отриманого результату добути корінь квадратний.

12.Заданий файл цілих чисел. Записати в вихідний файл всі числа, що діляться на 3 та не діляться на 9.

13.Заданий файл цілих чисел. В вихідний файл переписати всі від'ємні числа без повторень, дописати кількість повторів чисел.

14.Пряма на площині задається рівнянням Ах+Ву+С=0, А та В не дорівнюють 0. Якийсь файл містить коефіцієнти декількох прямих. Переписати в вихідний файл всі коефіцієнти тих прямих, які є паралельними до даної

15.Створити два файли даних з полями прізвище та ціна за деяку послугу. Якщо прізвища повторюються, то просумувати ціну послуг, переписати дані в вихідний файл

16.Згенерувати файл дійсних чисел за допомогою генератора випадкових чисел. Випадкові дійсні числа повинні бути в межах від 0 до 100 і мати не більше ніж два знаки після коми. Кількість записів у файли від 20 до 100. Розрахувати суму дробових частин, результат сумування дописати у вхідний файл.

17.Задано два відсортованих за зростанням файли цілих чисел. Утворити третій файл, шляхом об’єднання двох вхідних файлів таким чином, щоб вихідний файл також був відсортований за зростанням. Вхідні файли можуть бути різної довжини. Заборонено використання додаткових масивів та файлів.

18.Задано файл цілих чисел. Утворити вихідний файл, який містить суми цифр відповідних записів вхідного файлу.

58

19.Задано файл дійсних чисел. Відсортувати файл за спаданням абсолютних значень дробових частин записів файлу. Заборонено використання додаткових масивів та файлів.

20.Задано файл цілих чисел. Переписати у вихідний файл всі числа, які кратні семи або не кратні 3 або є від’ємними. Розрахувати кількість таких чисел для кожної умови окремо.

21.Створити файл цілих чисел. Перемістити цілі додатні , парні числа, що діляться без остачі на введене число Х до другого файлу. Кількість цих чисел записати першим елементом файлу. Заборонено використовувати додаткові файли та масиви.

22.В заданому файлі цілих чисел знайти середнє арифметичне всіх чисел, які знаходяться на позиціях кратних 3.

23.Задано файл цілих чисел. Утворити файл дійсних чисел, шляхом ділення числа з вхідного файлу на його позицію в файлі. Записи у вихідний файл повинні додаватися у порядку зростання чисел у вхідному файлі. Заборонено використовувати додаткові файли та масиви.

24.Задано файл цілих чисел. Розрядність чисел не відома. Створити файли цілих чисел, які будуть містити числа однакової розрядності.

25.Задано файл записів з полями прізвище, оцінка з математики, оцінка з фізики, оцінка з хімії. Утворити вихідний файл, який містить прізвище, середній бал (з точністю до двох знаків після коми), та стипендія. Розмір стипендії визначається таким чином: якщо середній бал нижче 4, то стипендії не має, якщо в межах від 4 то 4,5 не включно то 500, якщо в межах від 4,5 до 5 не включно то надбавка 20%, якщо 5 то надбавка 50%.

59

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]