Процедура insert.
Begin
Val(Edit1.Text,о,cd);
value (y,о);
str (y,s1);
Edit2.Text:=s1;
end;
a) Метод перетворення рядкового типу у дійсний;
b) Функція для отримання числових значень типу real чи integer;
c) Процедура з трьома параметрами;
d) Стандартна процедура трьох параметрів;
e) Стандартна , вкладена процедура трьох параметрів, яка призначена для для отрмання цілочисельного чи дійсного результату;
f) Це вкладена у підпрограму Button1Click стандарта процедура, завдяки якій отримують цілочисельне значення змінної о, після введення цифрових символів у поле редагування Edit1.
Лекція 3
Підпрограми опрацювання рядкових змінних
1. Дії над рядковими змінним
2. Функціїопрацювання рядкових змінних.
3. Процедуриопрацювання рядкових змінних.
3.1 Дії над рядковими даними (дані типу String)
Дане типу String (рядок символів) – це послідовність довільних символів (тобто послідовність елементів типу char). Константи рядкового типу записують за допомогою двох штрих - символів, які охоплюють текст. Штрих - код це або символ апострофу, або символ лапок. Наприклад рядкові дані можуть мати такі значення: ‘1A616’, “ верстат “, “FIFO”, ‘Україна’… Рядок може містити від 0 до 255 символів. Рядок, котрий не містить жодного символу – ‘’, називається порожнім рядком, або інакше рядком нульової довжини.
Увага! Не слід плутати рядок нульової довжини– ‘’ (між апострофами немає жодного символу) з рядком, що містить символ-пропуск – ‘ ‘ (між апострофами міститься пробіл).
3.1.1 Оголошення рядкових змінних і констант
Змінну типу «рядок» оголошують за допомогою зарезервованого слова String у такий спосіб:
var R: string[n];
де n - довжина рядка (тобто кількість символів у ньому), n < 256. Довжину рядка можна не вказувати.
Приклад 3.1 Оголошення сталої verstat і змінної freza.
cоnst verstat =’Tokarnyi’;
var freza: string[23];
Увага! Не слід плутати між собою типи char (cимвол) і string (послідовність символів). Отже рядок це масив символів (array[0..255] of char), де кожний член масиву має свій порядковий номер. Наприклад якщо оголосити рядкову сталу:
сonst data=’ІНСТРУМЕНТ’;
то змінна data[і]:сhar має значення і-го символу слова «ІНСТРУМЕНТ», тобто якщо скажімо і=3 тоді змінна приймає значення символу «С». На рисунку 3.1 відображена прикладна програма, яка ілюструє задачу знаходження і-го символу у рядку і операцю зєднання рядків..
3.1.2.Операції над рядками
Над даними типу рядок визначені операції зєднання (+) та порівняння (< (менше), > (більше), <= (менше-дорівнює), >= (більше-дорівнює), <> (не дорівнює), = (дорівнює)).
Приклад 3.2 Надання значення змінній G типу string шляхом здійснення операції зєднання двох сталих ‘токарний’ і ’верстат’:
G:= ‘токарний’+’ верстат’;
У результаті змінна G набуде значення ‘токарний верстат’.
Задача 3.1 Задача знаходження і-го символу у рядку (Рисунок 3.1)
Коментар до ілюстрації прикладної програми.
У результаті клацання по кнопці Button1 у поле редагування Edit1 записується слово «ІНСТРУМЕНТ», (воно є константою data1), правіше від нього записується символ «І» (це значення присвоєне змінній b оскільки ідентифікатор data1[1] означає перший сивол слова«ІНСТРУМЕНТ»,), і ще правіше третій символ цієї ж сталої «ІНСТРУМЕНТ»,) - «С» (рисунок 3.1). Разом слово «ІНСТРУМЕНТІС».
Рисунок 3.1 Ілюстрація прикладної програми для знаходження і- го символу у рядку
Для здійснення операцій порівняння слід використовувати індивідуальні коди символів. Вони представлені у таблиці кодів ASCII (American Standart Code for Information Interchange), яка складається з двох частин: базової з кодами від 0 до 127 і розширеної від 128 до 255. З них коди від 128 до 175 і від 224 до 255 для національної графіки. «Більшим» вважається символ у котрого більший номер у таблиці кодів. Частина кодів ASCII представлена у таблиці 3.1.
Таблиця 3.1 Коди ASCII (витяг)
символ | код | символ | код | символ | код | символ | код | символ | код |
: | D | N | a | ||||||
; | E | O | b | ||||||
< | F | P | c | ||||||
= | G | Q | d | ||||||
> | H | R | e | ||||||
? | I | S | f | ||||||
& | J | T | g | ||||||
A | K | U | Г | ||||||
B | L | V | Д | ||||||
C | M | W | Ж |
Наприклад 77 є кодом великої латинської літери М, а 134 є кодом великої української літери Ж. Отже ‘Ж’ > ’М’.
Нижче представлений код (рисунок 3.2), вікно форми (рисунок 3.3) і ілюстрація виконання прикладної програми (рисунок 3.4) призначеної для порівняння рядкових величин. У ній порівнюються односимвольні величиниa і b.
Задача 3.2 Створення коду прикладної програми порівняння двох одно символьних рядкових змінних
Рисунок 3.2 Програмний код для задачі порівняння рядкових змінних
Рисунок 3.3 Форма для задачі порівняння рядкових змінних
Рисунок 3.4 Ілюстрація виконання прикладної програми порівняння рядкових змінних
У випадку, якщо порівнюються багато символьні рядки, то порівняння їх здійснюється зліва направо до перших різних символів, порядковий номер яких за таблицею і визначатиме «більшість» чи «меншість» рядка.
Приклад 3 Дано два рядки : ‘Edit1’ та ‘Edit2’. Слід визначити котрий із них більший.
Відповідь: більший є рядок «Edit2», оскільки при порівнянні зліва направо виявлено, що різними є символи «1» і «2», а згідно з таблицею кодів ASCII символ «2» має значення 50, тоді, як символ «1» - 49.
На цю ж тему нижче проілюстрована прикладна задача 3.3
Задача 3.3Створення коду прикладної програми порівняння двох багато символьних рядкових змінних.
Рисунок 3.5 Програмний код до задачі 3.3 порівняння двох рядкових змінних.
Початково у поле редагування Edit1 занесений текст Edit3, а у поле редагування Edit2 занесений текст Edit2. Оскільки Edit3 відрізняється віл Edit2 символом «3» який згідно з таблицею кодів є більшим від символу «2» то й в цілому вміст поля Edit1 є більшим аніж вміст Edit2. Тому при першому натисканні на кнопку, згідно з програмою, у поле Edit1 замість тексту Edit3 запишеться символ “<”.
Рисунок 3.6 Результат першого клацання по кнопці у прикладній програмі порівняння рядкових змінних
При другому клацанні знову відбувається порівняння вмісту Edit1 і Edit2. Ось тільки поле редагування Edit1 містить уже символ “<”, а не «Edit3». Згідно із таблицею кодів символ “<” є меншим аніж символ «Е». Тому Edit2.Text> Edit1.Text і згідно із програмою у полі редагування Edit2 появляється символ “>”.
.
Рисунок 3.7 Результат другого клацання по кнопці у прикладній програмі порівняння рядкових змінних.
3.2 Функції опрацювання рядкових змінних
Над даними типу рядок визначені певні стандартні функції. До таких функцій відносяться :
length – визначає кількість символів у рядку;
copy – дає певну кількість символів із даного рядка;
concat – з’єднує кілька рядків у один спільний рядок;
pos– вказує номер символу, де один рядок входить у інший.
3.2.1 Функція length .
Сигнатура функції length містить одини парметр рядкового типу. Цей параметр є рядком, у якому функція визначає кількість символів. Ця кількість і є результатом функції.
Function length(a:string):integer;
Приклад 3.3 Визначення кількості символів слова «верстат».
Застосування функції: length(«верстат») повинно видати результат – число 7.
3.2.2 Функція copy
Cиґнатура функції містить три параметри:
function copy( R: string; m,n:integer):string; Функція дає рядок, що містить n символів, які скопійовані із рядка R починаючи із символу за номером m.
Приклад 3.4 Визначення рядка із 6 символів, що скопійовані починаючи із другого символу слова «фрезерний».
Застосування функції:copy(«фрезерний»,2,6) повинно видати результат – «резерн».
3.2.3 Функція concat
Cиґнатура функції містить перелік параметрів типу string,які в результаті з’єднуються у один рядок.
function concat ( R1,К2,sw: string): string;
Приклад 3.5 Визначення рядка, що утвориться в результаті зєднання двох рядкових змінних: S:=’шпиндель’, D:=’ передньої бабки’.
Застосування функції concat(S,D)видасть такий рядковий результат – «шпиндель передньої бабки’».
3.2.4 Функція pos
Сиґнатура функції містить два параметри рядкового типу:
functionpos(r1,r2:string):integer; Функція визначає номер символу r1, з якого починається входження рядка у рядок r2.
Приклад 3.6. Нехай змінна L:string отримала значення «металорізальний верстат». Потрібно визначити номер символу, з якого у змінній починається рядок ‘різальний’.
Застосування функції pos(‘різальний’,L)видасть цілочисельний результат – 7.
Задача 3.4 Дано набір із 10 відкритих складів: ма, бра, я, ко, ти, о, ку, па, ля, і. Потрібно створити гру-посібник для складання із вказаних складів трискладового слова.
Вирішення задачі: на рисунку 3.8 зображена форма прикладної програми «БУКВАРИК» до цієї задачі. На формі представлена група перемикачів із указаним переліком складів. Установлені три кнопки – кожна для свого за порядком складу : «склад1», «склад2», «склад3» і поле редагування Edit1 для розміщення у ньому зібраного трискладового слова.
Правила гри: гравець у радіо - групі вибирає потрібний йому склад і клацає по ньому. А далі підтверджує свій вибір клацанням по номерній кнопці складу. І так може продовжуватися ще двічі –тобто гравець знову вибиратиме із групи перемикачів склад і підтверджуватиме вибір клацаючи по кнопці наступного складу..
Наприклад: склад - бра (кнопка1 у радіо-групі). Якщо гравець хоче, що б це був перший склад слова то клацає по кнопці «склад 1». У результаті в полі Edit1 зявиться рядок «бра». Для отримання у полі Edit1 слова «брама» гравець має у радіогрупі вибрати склад «МА» і потім натиснути кнопку «склад2».
Рисунок 3.8 Ілюстрація проекту форми до задачі 3.4
Для реалізації цієї програми можна:
1. Здійснити оголошення глобальних змінних r1, r,2, r3 : string (рисунок3.9), яким будуть надаватися значення відповідних складів слова : першого, другого, третього.
Рисунок 3.9 Оголошення глобальних рядкових змінних – складів слова.
2. Застосувати оператор вибору, щодо присвоєння складуr1 одного із значень групи перемикачів і вписати цей оператор у процедуру опрацювання події клацання по кнопці «Склад1» (Рисунок3.10). В кінець процедури ввести рядок: Edit1.Text:=r1;
Рисунок 3.10 Створення процедури для події клацання по кнопці «Склад1»
3. Аналогічну процедуру слід зробити для події клацання по кнопці «Склад2» (Рисунок 3.11). Тільки в операторі вибору повинен застосовуватися не склад r1, а склад r2. В кінець процедури ввести рядок: Edit1.Text:=r1+r2;
Рисунок 3.11 Створення процедури , що опрацьовує подію клацання по кнопці «Склад2»
4. Аналогічну процедуру слід зробити і для події клацання по кнопці «Склад3» тільки в операторі вибору повинен застосовуватися не склад r2, а склад r3. В кінець процедури потрібно ввести рядок:
Edit1.Text:=r1 +r2+r3;
Для прикладу набране слово «якути» (рисунок 3.13), що складалося зі складів: я – ку – ти. Якщо ж після цього натискати на кнопку КО і відразу кнопку «склад1», а далі ПА і відразу - «склад2» і нарешті ТИ і відразу - «склад3», то отримаємо замість «якути» інше слово: «копати».
Рисунок 3.13 Шляхом вибору складів я-ку-ти отримане у прикладній програмі відповідне слово.
На рисунку 3.14 дана задача при тому ж інтерфейсі, що на рисунку 3.8 , представлена дещо інакшим програмним кодом. Цей код відрізняється від попереднього за такими пунктами:
1. У розділі глобальних оголошень окрім змінних r1, r,2, r3 : string є ще й декларація процедури procedure vybir( var r:string);
2. Ця процедура описана у частині implementation . У її тілі бачимо такий самий оператор вибору, що і у попередній програмі, окрім того, що змінною у ньому є локальна змінна цієї процедури – rТобто r є формальною змінною.
3. Далі прописані тіла наступних трьох процедур, які опрацьовують події клацання по відповідних кнопках: «склад1», «склад2», «склад3», тільки у кожній із цих процедур використовується як вкладена процедура vybir із фактичним значенням параметра. Тобто у першій процедурі (Button1Click) цим параметром є r1,у другій (Button2Click) – r2і утретій (Button3Click) –r3.
4. У кожну з процедур вписаний однаковий програмний рядокEdit1.Text:=concat(r1,r2,r3);
Рисунок 3.14 Інший програмний код до задачі 3.4
3.3 Процедури опрацювання рядкових змінних
Над даними типу рядок визначені певні стандартні процедури. До таких процедур відносяться :
insert – вставляє один рядок у інший;
delete – вилучає частину рядка;
str – переволить числове дане у дане типу рядок;
val – засилає у числову змінну числовий образ рядка.
Сиґнатура процедури містить три параметри, один із яких є параметром-змінною, а інші два – параметри-аргументи.
Procedure insert (r: string; var s:string; n:integer) – вставляє рядок r у рядок заданий змінною s , починаючи з позиції n .
Приклад 3.7 Нехай змінна Р рядкового типу має значення ‘Фрезерний верстат’. Слід у кінець цієї змінної дописати «з ЧПК» (з числовим програмним керуванням). Для цього можна скористатися іншою рядковою даною, наприклад g:=’ з ЧПК’ і вкупі з цілочисельним параметром а:=18 та змінною Р вписати у фактичні параметри процедури insert(g,P,a).На рисунку 3.15 цей приклад програмно і візуально проілюстрований.
Рисунок 3.15 Програмна і візуальна реалізація прикладу 3.7