Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
samost_pascal_delphi_2012.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
4.33 Mб
Скачать

Задача 28.

Виведення рядка в переверненому вигляді і за окремими словами

var s:string;

i: integer;

begin

write('Введіть рядок); readln(s);

for i:=length(s) downto 1 do write (s[i]);

for i:=l to length(s)-l do

if (s[i])=' ') and (s[i+1]<>' ') then writeln

else write(s[i]);

end.

Операції над рядками

Над рядковими даними допустима операція зчеплення (конкатенації) і операції відношення. Використовуючи рядкові змінні, константи, функції і операцію зчеплення, можна будувати рядкові вирази.

  1. Операція зчеплення (+) застосовується для з'єднання декількох рядків.

Приклад 1. Вираз: ‘Turbo’+ ‘Pascal'+'7.0'

Результат: Turbo Pascal 7.0

Для присвоєння рядкової змінної результату рядкового виразу використовується оператор присвоєння.

str1 := 'Група студентів'; str2 := str1 + ' коледжу';

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

Задача 29.

Доповнення рядка зірочками

Const n=80;

var s:string;

begin

writeln('Введіть рядок:');

readln(s);

while length(s)<n do s:=s+'*';

writeln(s)

end.

  1. Операції відношення

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

Приклад. Вираз: Результат

'Іванов' = 'Іванов І.І.’ false

'Іванов' < 'Іванов І.І.’ true

' program' > 'PROGRAM' true

Найважливішими діями над масивами рядків є:

  • сортування масиву в лексикографічному порядку;

  • швидкий пошук даних у відсортованому масиві;

  • злиття двох відсортованих масивів.

Рядкові процедури і функції

Для спрощення програмування задач обробки текстів Turbo Pascal, як і всі інші мови програмування, містить добре продуманий набір процедур і функцій для виконання типових дій з рядками.

Рядкові процедури функції розташовуються в модулі SYSTEM.

  1. Процедура видалення delete (st,poz,n) — видалення n символів рядка st, починаючи з позиції роz. Якщо значення роz більше, ніж розмір рядка, ніщо не віддаляється. При видаленні символів частина рядка, що залишилася, підтягається до початку.

Приклад.

st:='peкa Волга'; delete(st,1,5); { в результаті st='Волга’ }

while st[l]=' ' do delete(st,1,1); {видаляє всі пропуски з початку рядка st}

while st[length(st)]=' ' do delete(st,length(st),1); {видаляє всі пропуски з кінця рядка st}

  1. Процедура вставки символів insert (str1,str2,poz) — вставка рядка str1 в рядок str2, починаючи з позиції роz. При вставці рядок розсувається і обов'язково потрібно контролювати довжину отриманого рядка.

Приклад.

s1 := 'Я розробляю програми'; s2 := 'гарні ';

insert(s2,s1,16); { в результаті,s1='Я розробляю добрі програми' }

insert('*',s,length(s)+1). {вставка зірочок в кінець рядка }

  1. Функція length (st) — обчислює поточну довжину в символах рядка st. Результат має цілочисельний тип.

Приклад. n:=length ('123456789'); { п=9 }

Функція length повертає вираз ord(s[0]), оскільки сам елемент s[0] має тип char. Можна не використовувати функцію length, звертаючись безпосередньо до нульового байта.

  1. Функція copy (st,poz,n) — виділяє з рядка st підрядок завдовжки n символів, починаючи з позицією роz. Якщо роz більше довжини рядка, то результатом буде порожній рядок.

Приклад.

s1:='Turbo Pascal1; s2:=copy(s1,1,5); s3:=copy(s1,7,3);

{ в результаті s2='Turbo'; s3='Pas' }

  1. Функція concat(str1,str2...,strn) — виконує зчеплення рядків str1, str2 .. strn в тому порядку, в якому вони вказані в списку параметрів.

Приклад.

s:=concat('AA', 'ХХ', 'У'); { в результаті s='AAXXY'; }

Функція concat виконує ті ж дії, що і операція конкатенації.

  1. Функція роs(str1,str2) — знаходить першу появу в рядку str2 підрядка str1. Результат має цілочисельний тип і рівний номеру тієї позиції, де знаходиться перший символ підрядка str1. Якщо в str2 підрядки str1 не знайдені, результат рівний 0.

Приклад 1.

s1:= 'Turbo Pascal';

n1:=pos('Pascal',s1); n2:=pos('pascal', s1);

{в результаті n1=7; n2=0 (pascal і Pascal — це різні рядки}

Приклад 2. Видалити з рядка перше слово разом з наступним за ним пропуском. При цьому передбачається видалення провідних пропусків:

while st[1]=' ' do delete(st,1,1);

delete(st,1,pos(' ', st));

  1. Процедура str (number, st) — перетворення числового значення величини number в рядок st. Після number може записуватися формат, аналогічний формату виведення. Якщо у форматі вказано недостатнє для виведення кількість розрядів, поле виведення розширяється автоматично до потрібної довжини. Наприклад:

Приклад.

var sl,s2,s3,s4 : string; num1: integer; num2:real;

num1:=5; num2:=5.78;

str (num1,s1); str (num1:3, s2); str (num2, s3); str (num2:3:1, s4);

{ в результаті s1='5'; s2=' 5'; s3='5.780000000000E+00'; s4='5.8'; }

  1. Процедура val (st, number, code)перетворить значення st у величину цілочисельного або дійсного типу і поміщає результат в numder. code — цілочисельна змінна. Якщо під час операції перетворення помилки не знайдено, значення code рівно нулю, якщо помилка знайдена (рядкове значення не переводиться в цифрове), code міститиме номер позиції першого помилкового символу, а значення number не визначено

Пример1.

s1:= '5.78'; s2:= '5,78';

val (sl, num1,cod1);

val (s2, num2,cod2);

{ в результаті cod1=0, cod2=2 — другий символ помилковий }

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