Лекції >> Програмування, комп’ютери і кібернетика >> Робота з рядковими та символьними величинами

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

Під рядковою величиною розуміють значенн константи (змінної), яке складається з будь-якої послідовності символів кодової таблиці ЕОМ. Для такої величини кількість символів може бути від 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

Схожі матеріали
05.10.2012 Введення та виведення даних, розробки та опису лінійних програм.
20.12.2011 Pascal - лабораторні роботи - для студентів III-го курсу (лекції Ляшенко Б.М.)
12.12.2010 Робота з підпрограмами
12.12.2010 Робота з рядковими та символьними величинами.
12.12.2010 Робота з циклічними програмами
12.12.2010 Робота з масивами даних.
12.12.2010 Розробка та описання програм з розгалуженнями
12.12.2010 Початки програмування
12.12.2010 Етапи розв’язання задач з використанням ЕОМ
12.12.2010 Поняття про алгоритм

Тести даної категорії
12.12.2010 ПОЧАТКИ АЛГОРИТМІЗАЦІЇ. ВСТУП ДО ПРОГРАМУВАННЯ

Останні створені тести
16.03.2021 Границя, неперервність, похідна
17.04.2020 Методика проведення природознавчої розповіді з дітьми дошкільного віку
08.04.2019 Нова історія країн Азії та Африки
16.11.2015 Олімпійські ігри Стародавньої Греції. Відродження олімпійських ігор. Олімпійський рух сучасності.
28.10.2015 British Writers. Тест для студентів 4 курсу ННІ педагогіки
27.10.2015 The Passive Voice. Тест для студентів 2 курсу ННІ педагогіки
27.10.2015 Articles. Тест для студентів 1 курсу неспеціальних факультетів
27.10.2015 The Active Voice. Тест для студентів 2 курсу ННІ педагогіки
08.10.2014 INTEL
22.10.2012 Цивільний захист
Рекомендовані лекції
15.09.2020 Вступ до курсу "Політичні трансформації в ЦСЄ"
22.03.2016 ОС та СП. Тема 5. Безпека. Слайди
28.08.2020 Тези лекції Тема 1 з ОК "Конституціоналізм і правова політика"
05.04.2016 ОС та СП. Тема 7. Міжпроцесова та міжпотокова взаємодія. Слайди
24.04.2020 Практичні методи ознайомлення дітей з природою (праця дітей у природі)
15.03.2016 ОС та СП. Тема 4. Файлові системи. Слайди
28.08.2020 Руйнація імперій та їх наслідки
19.05.2012 Теми лекцій з основ геометрії
28.08.2020 Матеріали лекційнго заняття 1
12.12.2010 Програми з розгалуженнями