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

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

Під рядковою величиною розуміють значенн константи (змінної), яке складається з будь-якої послідовності символів кодової таблиці ЕОМ. Для такої величини кількість символів може бути від 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 ПОЧАТКИ АЛГОРИТМІЗАЦІЇ. ВСТУП ДО ПРОГРАМУВАННЯ

Останні створені тести
28.03.2016 Ахметов Р. Ф. Основи наукових досліджень. Тести. 500 питань
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 Цивільний захист
28.09.2012 Питання для поточного контролю
26.09.2012 Мовнокомунікативна компетентність. Орфографічна складова
Рекомендовані лекції
19.05.2012 Теми лекцій з основ геометрії
27.09.2012 Літературознавство як наука
12.12.2010 ЕОМ як виконавець алгоритму. Мови програмування
09.12.2014 Лекції з ЦЗ для студентів 6-х курсів денної форми навчання
28.09.2014 Лекції з курсу "Диференціальна психологія"
28.03.2016 ОС та СП. Тема 6. Планування. Тези
12.12.2010 Робота з рядковими та символьними величинами
22.02.2016 ОС та СП. Тема 2. Процеси та потоки. Тези
12.12.2010 Використання підпрограм та функцій користувача
12.12.2010 Робота з масивами даних