Крім чисел, мови програмування можуть оперувати з окремими словами, наборами слів (реченнями, текстами). При цьому слова та їх набори необов’язково повинні мати смисл з точки зору людини – це можуть бути будь-які послідовності символів.
Під рядковою величиною розуміють значенн
константи (змінної), яке складається з будь-якої послідовності символів кодової таблиці ЕОМ. Для такої величини кількість символів може бути від 0 до 255.
Під символьною величиною розуміють значення константи (змінної), яке складається з будь-якого, але тільки одного символу кодової таблиці комп’ютера.
Над рядковими та символьними величинами можна виконувати такі операції як склеювання, визначення довжини величини, виділення (вирізка) частини символів з цілої послідовності тощо.
Навчальна алгоритмічна мова.
У НАМ комп’ютера.
Над рядковими та символьними величинами можна виконувати такі операції як склеювання, визначення довжини величини, виділення (вирізка) частини символів з цілої послідовності тощо.
Навчальна алгоритмічна мова.
У НАМ рядкові та символьні величини не розрізняються, а використовується лише рядковий тип величин, який позначається службовим словом лит. Тому ще іноді про такі величин у НАМ говорять як про літерні. Рядкові величини беруться у лапки, наприклад: “так”, “ні”, “інформатика”, “12йокCKEBWLKSM=+//$”, “1”, “10_А” тощо.
У тілі програми значення змінних та констант рядкового типу заключають у лапки. Наприклад, y := “вперед”.
У Е-практикумі максимальна кількість символів (довжина), що входять до складу рядк рядкові та символьні величини не розрізняються, а використовується лише рядковий тип величин, який позначається службовим словом лит. Тому ще іноді про такі величин у НАМ говорять як про літерні. Рядкові величини беруться у лапки, наприклад: “так”, “ні”, “інформатика”, “12йокCKEBWLKSM=+//$”, “1”, “10_А” тощо.
У тілі програми значення змінних та констант рядкового типу заключають у лапки. Наприклад, y := “вперед”.
У Е-практикумі максимальна кількість символів (довжина), що входять до складу рядкової величини, рівна 16.
Основні операції:
§ додавання (склеювання):
нехай х := “фіз”, у := “мат”, z := x + y, тоді z набуде значення ”фізмат”
(зауважимо, що на результат впливає порядок доданків);
§ визначення довжини (кількості символів):
нехай y := длин (“університет”), тоді у набуде значення 11;
нехай y := длин (&ld dquo;, “12йокCKEBWLKSM=+//$”, “1”, “10_А” тощо.
У тілі програми значення змінних та констант рядкового типу заключають у лапки. Наприклад, y := “вперед”.
У Е-практикумі максимальна кількість символів (довжина), що входять до складу рядкової величини, рівна 16.
Основні операції:
§ додавання (склеювання):
нехай х := “фіз”, у := “мат”, z := x + y, тоді z набуде значення ”фізмат”
(зауважимо, що на результат впливає порядок доданків);
§ визначення довжини (кількості символів):
нехай y := длин (“університет”), тоді у набуде значення 11;
нехай y := длин (“математика і фізика”), тоді у набуде значення 19;
§ вирізка, за допомогою якої можна виділити частину рядка, вказавши номер першого та останнього символів:
нехай у := ”велосипед”, z := у [7:9], k := у [4:7], тоді z набуде значення ”пед”, а k набуде значення ”осип”.
Basic.
У MSX-Basic рядкові та символьні величини не розрізняються, а використовується лише рядковий тип величин, який для змінної можна оголосити у два способи: дописати до імені змінної символ $ або використати оператор DEFSTR. Наприклад,
А$, B1$, C$ (10), WORD$ ;
DEFSTR A, B1, С (10), WORD.
У програмі значення констант та змінних рядкового типу заключають у лапки. Наприклад, y := “вперед”.
Операції та деякі функції MSX-Basic, що використовуються для роботи з рядковими величинами:
§ + - додавання (склеювання):
нехай Х = “фіз”, Y = “мат”, Z = Х + Y, тоді Z набуде значення ”фізмат”;
§ LEN (A$) - визначає довжину рядкової величини A$ (кількість символів):
нехай Y = LEN (“університет”), тоді Y набуде значення 11;
нехай X$ = “математика і фізика”, Y = LEN (X$), тоді Y набуде значення 19;
нехай Y = LEN (“”), тоді Y набуде значення 0;
§ MID$ (А$, M {, N}) – виділяє з А$ частину рядка довжиною N символів, починаючи з позиції М. За відсутності параметра N виділяється частина рядка, починаючи з позиції М і до кінця рядка:
нехай Y$ = MID$ (“університет”, 9, 3 ), тоді Y$ набуде значення “тет”;
нехай X$ =”123456789”, Y$ = “університет”, MID$ (X$, 4, 3 ) = Y$, тоді X$ набуде значення “123уні789”;
§ LEFT$ (X$, N) – виділяє з Х$ частину рядка довжиною N символів, починаючи з крайнього лівого символу;
§ RIGHT$ (X$, N) – виділяє з Х$ частину рядка довжиною N символів, починаючи з крайнього правого символу;
§ STRING$ (N, X$) – формує рядок довжиною N, утворений першим символом X$. Другим аргументом даної функції може бути ціле число Х (0£Х£255) – код ASCII певного символу; тоді рядок формується з символу, код якого подано вказаним числом;
§ SPACE$ (N, X$) – формує рядок символів-пропусків довжиною N;
§ INSTR ({N,} X$, U$) – дає число, рівне номеру позиції, починаючи з якої частина рядка (U$) входить до всього рядка (X$) (при цьому відлік позицій ведеться з N-ої позиції). За відсутності параметра N відлік позицій починається з першої позиції;
§ STR$ (A) – перетворює десяткове число А у рядок символів, який має форму десяткового числа;
§ VAL (X$) – перетворює символьне подання X$ десяткового числа у числовий тип, тобто значенням цієї функції є десяткове число.
Pascal.
Символьні величини описуються як тип даних char. У програмі значення змінних і констант цього типу мають бути поміщені у апосторофи, наприклад:
Var
Simb : char ;
. . .
Simb := ‘A’ ;
Рядкові величини описуються як тип даних string (див. стор. 18). Рядок по іншому можна розглянути як масив, компоненти якого мають тип char і тип індекса має нижню межу рівну 1, тобто тип string описується як array [1..255] of char. При використанні у програмі значення рядкових констант та змінних поміщаються у апострофи, наприклад
Var
Name: string ;
. . .
Name := ‘ Шевченко Тарас Григорович ‘ ;
Над рядковими даними допустимі операція зчеплення (“склеювання”) та операції відношення. Наприклад,
нехай Х := ’фіз’, Y := ’мат’, Z := Х + Y, тоді Z набуде значення ’фізмат’ ;
умова ‘ стіл ’ <= ‘ стілець ’ є істинна (true) ;
умова ' 12 ' > ' 2 ' є хибна (false) .
Серед усіх можливих значень рядків є порожній рядок. Він зображується двома одинарними лапками, між якими нічого немає.
Для того, щоб символ “апостроф” входив до складу рядка, у запису рядка цей символ повтороють двічі. Наприклад,
Write ( ' ім ’ ’ я ' ) виведе на екран рядок ім’я.
Стандартні функції та процедури для роботи з рядками:
§ Concat (S1, S2, … Sn : string) : string – виконує послідовне зчеплення рядків S1, S2, … Sn. Результуючий рядок не повинен перевищувати 255 символів.
§ Copy (St : string, Poz : integer, N : integer) : string - виділяє з рядка S фрагмент довжиною N символів, починаючи з позиції Poz;
§ Length (St: string) : integer — повертає довжину рядка;
§ Pos (Substr : string, St: string): byte - повертає позицію, з якої рядок Substr перший раз зустрічається в рядку St.
§ Delete (St : string, Poz: integer; N : integer) – з рядка St вилучає N символів, починаючи з позиції Poz;
§ Insert (SubSt : string, S: string, Poz: integer) - вставляє рядок SubSt у рядок S, починаючи з позиції Poz;
Для перетворення чисел у рядок і навпаки служать процедури:
§ Str (X, St) - перетворює числове значення величини X у рядок St. Після Х може записуватися формат, аналогічний формату виводу в операторі Write;
§ Val (St : string, V, Code : integer) - перетворить рядок St у значення числової змінної V. Рядок St повинний бути коректним записом числа. Якщо це не так, V = 0, Code <> 0. У випадку вдалого перетворення Code = 0.
До окремого символу рядка можна звернутися, якщо у квадратних дужках після імені вказати індекс. Наприклад, до п’ятого символу змінної Name можна звернутися так: Name [ 5 ]. Якщо звернутися до нульового індексу рядкової змінної, то одержимо кількість символів у рядку.
Приклад 1. Визначити кількість літер “л”, які містить даний рядок символів.
І етап. Спочатку визначимо довжину (кількість символів) для даного рядка. Довжину рядка використаємо як кінцевий параметр циклу. У циклі послідовно, починаючи з першого, братимемо по одному символу і перевірятимемо: якщо вказаний символ рівний літері “л”, то лічильник кількості літер “л” збільшуємо на одиницю. Зауважимо, що на початку роботи програми лічильнику потрібно присвоїти значення 0 (n := 0).
ІІ етап. Складемо блок-схему алгоритму (мал. 18).
алг Буква ( цел n, лит A)
арг A
рез n
нач цел d, i
d := длин ( А )
n := 0
нц для i от 1 до d шаг 1
если A [ i : i] = “л”
то n := n+1
все
кц
n := n
кон
НАМ-програма 10
|
ІІІ етап. Запишемо текст програми.
початок
А
d := довж (А)
n := 0
i, 1, d, 1
A (i) = “л”
n := n+1
n
кінець
мал. 18
|
10 REM Кількість літер “л”
20 INPUT “Введіть рядок символів” ; A$
30 N=0
40 D=LEN(A$)
50 FOR i = 1 TO D
60 IF MID$ ( A$, i, 1) = ”л” THEN N=N+1
70 NEXT
80 PRINT “Результат” ; N
90 END
Basic-програма 10
|
|
Program Kol_Liter ;
Var
i, n, d : integer ;
A : string ;
Begin
WriteLn ( ‘ Введіть рядок символів ’ ) ;
ReadLn ( A ) ;
d := Length ( A ) ;
n := 0 ;
For i := 1 to d do
If Copy (A, i, 1) = ’ л ’ Then n := n+1 ;
WriteLn ( ‘ Результат ’, n :10)
End.
|
|
Pascal-програма 10
|
IV етап. Тест1. Рядок: “лелека летить”. Результат n=3.
Тест2. Рядок: “інформатика”. Результат n=0. n
Приклад 2. У рядку символів видалити всі пропуски.
початок
А
d := довж (А)
B := “”
i, 1, d, 1
A(i) <> “V”
B:=B+A(i)
B
кінець
мал. 19
|
І етап. Вводимо даний рядок символів як значення змінної А. Результуючий рядок сформуємо як значення нової змінної В. Процес утворення результуючого рядка реалізуємо так: визначимо довжину даного рядка; використаємо цикл, за допомогою якого послідовно братимемо по одному символу і, якщо взятий символ не пропуск, то “приклеїмо” його справа до поточного значення створюваного рядка.
ІІ етап. Блок-схема алгоритму.
ІІІ етап. Запишемо програму.
алг Пропуск (лит A, В)
арг A
рез B
нач цел d, i
d := длин ( А )
B := “” {присвоїти порожній рядок}
нц для i от 1 до d шаг 1
если A [ i : i ] <> “V”
то B := B + A [ i : i ]
все
кц
B := B
кон
НАМ-програма 11
|
10 REM Видалення пропусків
20 INPUT “ Введіть рядок ” ; A$
30 B$ = ”” {присвоїти порожній рядок}
40 D=LEN ( A$ )
50 FOR і = 1 TO D
60 Y$=MID$( A$, i, 1)
70 IF Y$ <> ”V” THEN B$=B$+Y$
80 NEXT
90 PRINT “Результат” ; B$
100 END
Basic-програма 11
|
|
Program Del_Space ;
Var
i, D : integer ;
A, B, Y : string ;
Begin
WriteLn (‘ Введіть рядок ’) ; ReadLn (A) ;
B := ‘ ’ ; {присвоїти порожній рядок}
D := Length ( A ) ;
For i := 1 to D do
begin
Y := Copy (A, i, 1);
If Y <> ’V’ Then B := Concat ( B, Y )
end ;
WriteLn ( ‘ Результат ’, B )
End.
|
|
|
Pascal-програма 11
|
IV етап. Тест1. Рядок: “VфізVматV”. Результат: “фізмат”.
Тест2. Рядок: “фіз.-мат.”. Результат: “фіз.-мат.”.n |