Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Методичка_ОТтаП_Ч2

.pdf
Скачиваний:
14
Добавлен:
12.05.2015
Размер:
1.16 Mб
Скачать

27.Обчислити суму всіх непарних елементів масиву D (30 25), які розміщені в парних рядках.

28.Обчислити суму всіх парних елементів масиву R (25 20), які розміщені в непарних рядках.

29.Визначити середнє арифметичне всіх непарних елементів кожного парного стовпця масиву Х (25 30).

30.Обчислити суми елементів парних рядків масиву Х (20 20), визначити найменше значення цих сум і номер відповідного рядка.

7.8.Контрольні запитання.

1.Як описується масив у мові Паскаль?

2.Які існують типи масивів?

3.Поясніть алгоритм сортування попарним порівнянням і обміном?

4.Поясніть алгоритм сортування вибором і обміном?

5.Що таке список формальних параметрів?

6.Що таке параметри-значення?

7.Що таке параметри-змінні?

30

8. Заняття № 8. Робота з рядками.

Мета роботи – набути навичок роботи із даними у вигляді рядків.

8.1. Тип даних String.

Тип даних String (рядок) в мові Паскаль використовується для роботи з текстовою інформацією. Змінні типу String складаються з послідовності символів, тобто елементів типу Char. Однак, на відміну від масивів символьного типу (array [1..N] of Char), кількість символів в рядку не обов’язково вказувати при оголошенні змінної, при цьому довжина рядка приймається максимально можливою для типу String, а саме 255. Наприклад:

Var

str1: string; {рядок до 255 символів} str2: string [20]; {рядок до 20 символів} str3: string [255];{рядок до 255 символів}

Константи рядкового типу в програмі завжди обмежуються з обох сторін одинарними лапками. Наприклад:

str1:=’abc’; {в рядок str1 записується значення abc}

Також до рядків можна застосовувати операцію «+» – конкатенації, або зчеплення, яка зчіплює декілька рядків в один результуючий рядок. Наприклад:

str1:=’abc’+’defg’; {в рядок str1 запишеться abcdefg}

До кожного елементу рядка можна звернутися, як до елементу масиву, так для str1 з попереднього прикладу str[1]=’a’, str[2]=’b’, … , str[7]=’g’.

31

8.2. Функції та процедури для роботи з рядками.

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

Функції:

Concat(s1 [, s2, … , sN]) – повертає рядок, який є результатом зчеплення рядків-параметрів s1, s2, … , sN.

Var

st1, st2, st3 : string; {...}

s1:=’Turbo’;

s2:=’Pascal’;

s3:=Concat(st1,’ ’,st2); {в рядок s3

записалося ’Turbo Pascal’}

Copy(st,index,count) – копіює з рядка st кількість символів count, починаючи з символу з номером index, і повертає у вигляді нового рядка.

Var

st1 : string; {...}

st1:=Copy(’abcdefg’,2,3); {в st1 – bcd’}

Length(st)– повертає ціле число, яке являє собою довжину рядка st.

Var

st:string;

i:integer; {...} st:=’abcde’;

i:=Length(st); {значення i=5}

Pos(subst,st)– знаходить в рядку st перше входження рядка subst і повертає номер позиції, з якої це входження починається, у вигляді цілого числа.

32

Var

st:string;

i:integer; {...}

st:=’Turbo Pascal’;

i:=Pos(’ Pas’,st); {в i запишеться 7}

Upcase(ch)– на відміну від інших функцій, застосовується лише для одного символу ch. Ця функція для малих літер латинського алфавіту повертає відповідні їм великі літери, для решти символів (в тому числі і для літер кирилиці) повертає символ без зміни.

Var

st:string;

ch:char; {...} st:=’pascal’;

st[1]:=Upcase(st[1]); {в st[1] запишеться ’ P’, а st = ’Pascal’}

ch:=Upcase(’q’); {ch = ’Q’} ch:=Upcase(’я’); {ch = ’я’}

Процедури:

Delete(st, index, count) – видаляє count символів з рядка st, починаючи з символу з номером index.

Var

st:string; {...} st:=’abcdefg’;

Delete(st,2,3); {st = ’aefg’}

Insert(subst, st, index)– вставляє рядок subst в

рядок st, починаючи з символу з номером index.

Var

st:string; {...}

33

st:=’24’;

Insert(’1.1’,st,2); {st = ’21.14’}

Str(x [:width [:decimal]], st)– перетворює ціле або дійсне число x в рядок st і робить це аналогічно процедурі Write, якщо задані параметри width та decimal. Останні вказують скільки позицій в рядку потрібно виділити для відображення числа і скільки вивести цифр після крапки.

Var

st:string;

x:real; {...} x:=12.2;

Str(x:7:3,st); {в st – ’12.20’}

Val(st, x, code) – перетворює рядок st в дійсне або ціле число x, в залежності від типу цієї змінної. Якщо перетворення можливе в code записується нуль, якщо ж ні – то в code записується позиція в рядку st в якій процедура виявила помилковий символ, а значення x не змінюється. Рядок st

може містити пробіли на початку, але наявність пробілів в кінці рядка призведе до помилки (тобто рядок ’ 54.77’ – припустимий, а рядок ’54.77 ’- ні).

Var

x:real;

c:integer; {...}

Val(’43.98’,x,c); {x = 43.98, c=0} Val(’1B23’,x,c); {x = 43.98, c=2}

Зауваження: тут і далі, при опису процедур та функцій в квадратні дужки [ ] – беруться аргументи, використовувати які не обов’язково. В програмі ці дужки використовувати не потрібно.

8.3. Порівняння рядків.

Для рядків можна застосовувати операції порівняння =, <>, >, <, >=, <=. При порівнянні двох рядків спочатку

34

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

0.

’A’<’Z’ {істиний вираз} ’Tur’>’Turbo’ {хибний вираз}

’Паскаль’>’Turbo Pascal’ {істиний вираз}

8.4. Приклад.

За допомогою стандартних функцій та процедур написати програму по заміні всіх пробілів в рядку на два символи підкреслення.

Рішення.

Пошук пробілів будемо виконувати за допомогою функції Pos доти, доки вона не поверне нам значення 0.

Заміну можна організувати за допомогою послідовного виконання процедур Insert та Delete.

Складемо блок-схему алгоритму програми (рис. 8.1):

35

Початок

st := ’Скласти алгоритм i програму’; i := Pos(’ ’, st);

Ні

i>0

Так

Delete(st,i,1); Insert(’__’,st,i); i := Pos(’ ’, st);

s

Кінець

Рисунок 8.1

Program Laba_7; Var

st: string; i:integer;

Begin

st:=’Скласти алгоритм i програму’;

i:= Pos(’ ’,st); {шукаємо перший пробіл} While i>0 do {поки є пробіли i>0}

Begin

Delete(st,i,1); {видаляємо один пробіл в позиції i}

Insert(’__’,st,i); {вставляємо ’__’ в

позицію i}

i:=Pos(’ ’,st); {шукаємо наступний пробіл}

36

End;

Writeln(st); {виводимо результат на екран} End.

Результатjv виконання цієї програми буде наступний напис на екрані:

Скласти__алгоритм__i__програму

8.5.Порядок виконання роботи.

1.Вибрати індивідуальне завдання. Номер варіанту відповідає номеру студента у списку групи.

2.Ознайомитись із теоретичним матеріалом.

3.Скласти алгоритм для розв’язання завдання.

4.Скласти і відлагодити програму на мові Паскаль, яка реалізує введення вихідних даних, відповідну обробку рядкової змінної, виведення результатів у зручній формі на екран.

5.Підготувати звіт по роботі.

8.6.Індивідуальні завдання.

Скласти алгоритм i програму розв’язання задач

1.Вивести рядок довжиною N (N – парне), що складається із символів C1 і C2, що чергуються, починаючи з C1.

2.Задано рядок. Вивести рядок, що містить ті ж символи, але розташовані у зворотному порядку.

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

4.Задано рядок. Вивести коди його першого й останнього символу.

5.Задано рядок. Підрахувати кількість прописних символів, що містяться в ньому.

6.Задано рядок. Перетворити всі рядкові латинські букви в прописні.

7.Задано ціле число. Вивести набір символів, що містить цифри цього числа у зворотному порядку.

37

8.Скласти програму, що кодує текст в числах, що відповідають довжині слів, які складають цей текст.

9.Задано рядок S, що зображує дійсне число у форматі із плаваючою крапкою, і ціле додатне число N. Вивести набір символів, що зображують перші N цифр дробової частини цього речовинного числа (без округлення).

10.Задано рядок, що зображує ціле число. Вивести суму цифр цього числа.

11.Задано рядок S і число N. Перетворити рядок S у рядок довжиною N у такий спосіб: якщо довжина рядка S більша за N, то відкинути перші символи, якщо довжина рядка S менша за N, то в її початок додати символи «.» (крапка).

12.Задано два числа: N1 і N2, і два рядки: S1 і S2. Одержати із цих рядків новий рядок, об'єднавши N1 перших символів рядка S1 і N2 останніх символів рядка S2.

13.Задано рядок S і символ C. Подвоїти кожне входження символу C у рядок S.

14.Задано рядки S1, S2 і символ C. Перед кожним входження символу C у рядок S1 вставити рядок S2.

15.Задано два рядки: S1 і S2. Видалити з рядка S1 перший підрядок, що збігається з S2. Якщо такого підрядку немає, то вивести S1 без змін.

16.Задано три рядки: S1, S2, S3. Замінити в рядку S1 останнє входження рядка S2 на S3.

17.Задано рядок, що складається з російських слів, розділених пробілами (одним або декількома). Вивести рядок, що містить всі слова цього рядка, але розділені одним символом «.» (крапка). Наприкінці крапку не ставити.

18.Задано рядок-речення російською мовою. Підрахувати кількість розділових знаків, що містяться у рядку.

19.Задано рядок, що містить повне ім'я файлу, тобто ім'я диска, список каталогів (шлях), ім'я й розширення. Виділити із цього рядка ім'я файлу.

38

20.Задано рядок, що містить повне ім'я файлу. Виділити з рядка назву останнього каталогу (без символів «\»). Якщо файл міститься в кореневому каталозі, то вивести символ «\».

21.Задано рядок-речення російською мовою. Зашифрувати його, виконуючи циклічну заміну кожної літери на наступну за нею в абетці, зберігаючи при цьому регістр літер («А» перейде в «Б», «а» – «б», «Б» – «В», «я» – «а» тощо). Літеру «ё» в абетці не враховувати («е» повинна переходити в «ж»). Розділові знаки та пробіли не змінювати.

22.Задано рядок, що містить кілька круглих дужок. Якщо дужки розставлені правильно (тобто кожній одній відкриваючій відповідає одна закриваюча), то вивести число 0. У противному випадку вивести або номер позиції, у якій розташована перша помилкова закриваюча дужка, або, якщо закриваючих дужок не вистачає, число -1.

23.Вишикувати слова у тексті за зростанням їх довжини.

24.Задано рядок символів. Визначити, чи є в цьому рядку символи А и Е, а також кількість кожного із цих символів.

25.Задано рядок символів. Визначити, чи є в ньому всі букви, що входять у слово «шина».

26.Задано рядок символів, що містить круглі дужки. Перевірити правильність розміщення дужок.

27.У заданому рядку символів встановити пробіли замість символів, номера позицій яких при діленні на 4 дають у залишку 3.

28.Задано рядок символів, що складається з нулів, одиниць і пробілів. Групи нулів і одиниць, розділені пробілами (одним або декількома), а якщо пробілів усередині нема, то такі групи будемо називати словами. Потрібно підрахувати кількість слів у цьому рядку.

29.Задано рядок символів, що містить деякий текст. Розробити програму, що визначає, чи є цей текст поліндромом, тобто чи читається він зліва направо так само, як і справа наліво (наприклад, «А роза упала на лапу Азора»).

30.Задано рядок символів, що складається з нулів, одиниць і пробілів. Групи нулів і одиниць, розділені пробілами (одним

39