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

AP_RGZ_2015

.pdf
Скачиваний:
9
Добавлен:
07.02.2016
Размер:
1.26 Mб
Скачать

31

Для стандартної роботи з символьними рядками в стилі С призначена бібліотека string.h, яка містить наступні основні функції:

char * strcat(char *dest, const char *src); – дописує рядок src в

кінець dest;

char * strncat(char *dest, const char *src, size_t n); – дописує не більше n початкових символів рядка src (або весь src, якщо його довжина менше) у кінець dest;

char * strchr(const char *str, int ch); – шукає символ ch у рядку str, починаючи з голови, і повертає його адресу, або NULL якщо символ не знайдено;

char * strrchr(const char *str, int ch); – шукає символ ch у рядку str, починаючи з хвоста і повертає його адресу, або NULL якщо символ не знайдено;

int strcmp(const char *str1, const char *str2); – лексикографічне порівняння рядків;

int strncmp(const char *str1, const char *str2, size_t n); –

лексикографічне порівняння перших n байтів рядків;

char * strcpy(char *dest, const char *src); – копіює рядок з src у

dest;

char * strncpy(char *dest, const char *src, size_t n); – копіює до n

байт рядку з src у dest;

– size_t strlen(const char *str); – повертає довжину рядка;

size_t strspn(const char *str, const char *alp); – визначає максимальну довжину початкового підрядка з str, що складається виключно з байтів, перерахованих в alp;

char * strpbrk(const char *str, const char *alp); – знаходить перше входження будь-якого символу, перерахованого в alp, у str;

char * strstr(const char *str, const char *pstr); – знаходить перше входження рядка pstr у str;

char * strtok(char *src, const char *delim); – перетворює рядок у послідовність токенів.

Однак окрім розглянутого вище стандартного способу роботи з символьними рядками в бібліотеці STL С++ є ще одна бібліотека для роботи з рядками. Вона дозволяє легко вирішувати наступні задачі з високою ефективністю:

створювати, присвоювати, копіювати і видаляти рядки;

виконувати перетворення типів символьних змінних;

порівнювати рядки;

32

поєднувати рядки;

визначати довжину рядка;

знаходити і заміщати потрібний фрагмент у рядку.

Для використання даної бібліотеки необхідно підключити заголовний файл <string>. Після цього операція створення нового рядка виявиться настільки ж простою, як і створення змінної будьякого базового типу.

C++

string hi(“hello”); string lo=“greetings”; string es=””;

Рядковим змінним можна присвоювати значення, як і змінним будь-яких інших типів:

C++

string name(“Fred”); name = “Paul”;

При цьому всі операції розподілу пам'яті будуть виконані коректно.

Операції + (конкатенація), операція порівняння (==, > тощо) дозволяють легко виконувати відповідні дії над рядками.

1.3 Завдання до роботи

1.3.1Ознайомитися з основними теоретичними відомостями за темою роботи, використовуючи дані методичні вказівки, лекції, а також рекомендовану літературу.

1.3.2Роз’язати за допомогою програм мовою С++ завдання відповідно до варіанту. Результат виконання завдання повинен виводитись програмою на екран.

33

1.3.2.1 Завдання для варіанта № 1:

а) Виконати дії над двомірним масивом NxN. Параметр N задається користувачем з клавіатури. Заповнити даний масив послідовно даними за спіраллю, починаючи з лівого верхнього кута та рухаючись за годинниковою стрілкою:

1

2

3

4

12

13

14

5

11

16

15

6

10

9

8

7

В якості даних обрати цілі числа з інтервалу [a; b], де a і b задаються користувачем. Отриманий масив вивести на екран, для вирівнювання стовпчиків використати табуляцію (символ ‘\t’).

б) У даному тексті перевірити, чи вірно в ньому розставлені дужки, що відкриваються та закриваються. Відомо, що всередині однієї пари дужок інших дужок немає. Результат вивести на екран у вигляді відповіді: ТАК чи НІ. Якщо дужки розставлено невірно, то якщо є зайві відкриті дужки, вивести на екран повідомлення про кількість таких дужок; якщо є зайві закриті дужки, то вивести повідомлення з зазначенням позиції першої такої дужки. Передбачити два варіанти роботи програми: 1 – рядок задається значенням в програмі, 2 – рядок вводиться з клавіатури

1.3.2.2 Завдання для варіанта № 2:

а) Елемент двомірного масиву називають локальним максимумом, якщо він має значення, яке перевищує значення всіх його сусідів (елементів, кожен індекс якого дорівнює відповідному індексу даного елемента або відрізняється від нього на одиницю). Обчислити кількість локальних максимумів у квадратній матриці, заданій користувачем з клавіатури, та отримати мінімальне значення серед всіх локальних максимумів даної матриці.

б) Написати програму шифрування та дешифрування текстового повідомлення. Шифрування виконується в наступний спосіб. Шифрувальник задає ключ шифрування – ціле число, що визначає величину зсуву літер англійського алфавіту за абеткою (наприклад: ключ дорівнює 3, тоді в тексті літера “ а” замінюється на “d”, “b” – на “e”, …, “z” – на “c” тощо). Ключ шифрування задається з клавіатури. У процесі роботи програма повинна запропонувати вибрати режим (1

– шифрування, 2 – дешифрування, 3 – вихід). Дані дії повторювати, поки не буде обрано вихід.

34

1.3.2.3 Завдання для варіанта № 3:

a) Ввести дані про результати роботи магазинів за рік. Кількість магазинів задається користувачем з клавіатури. Дані про результати роботи представляють сумарну вартість проданих товарів у відповідному магазині за кожним з 12 місяців за рік і є дійсними числами. Передбачити, що сумарна вартість не може бути від’ємною. Якщо введено від’ємне значення, то запитати користувача заново. Якщо від’ємне значення введено повторно, то зберегти абсолютне значення. Округлити введене значення до сотих, якщо дробова частина даного числа містить більше двох цифр.

За результатами роботи отриманий масив вивести на екран, для вирівнювання стовпчиків використати табуляцію (символ ‘\t’).

б) Програма містить масив рядків, кожний з яких представляє собою запис про обліковий запис користувача, а кожне поле відділяється від іншого двокрапкою. Відомо, що перше поле зберігає логін, друге – тип користувача, п’яте – прізвище та ім’я користувача, а шосте – пароль. Розглянути наступні типи користувачів: user, manager, administrator.

Запросити логін користувача. Якщо логін знайдено в масиві, то вивести вітання з зазначенням прізвища й ім’я та попросити ввести пароль. За результатами перевірки пароля привітати користувача та, використовуючи результати виконання першого завдання (для цього розпочати роботу з даною програмою з введення даних аналогічно тому, як це було виконано в першій задачі), вивести результати роботи магазинів, якщо тип облікового запису – “user”, результати роботи магазинів і максимальні значення за кожним зі стовпчиків, якщо тип облікового запису – “administrator”, результати роботи магазинів та середні значення за кожним рядком, якщо тип облікового запису – “manager”.

Повторювати даний набір дій, поки користувач не вибере вихід

зпрограми за допомогою наданого меню.

1.3.2.4Завдання для варіанта № 4:

a) Результати проведення футбольного турніру зведено в двомірний масив, який разом з кількістю команд задається користувачем. Елементи масиву представляють собою кількість очок, набрану командою, що розташована у відповідному рядку, під час гри з командою, що розташована у відповідному стовпці. Користувач послідовно (відповідно до розташування в масиві) вводить назви

35

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

б) Користувач вказує кількість рядків, після чого послідовно їх вводить. Кожний рядок складається з одного або більше арифметичних виразів виду «число арифметична_операція число;», включаючи тільки пробіли, цифри, символи арифметичних операцій та крапки з комами. Вирази відділені одне від одного крапками з комою. Арифметичні операції включають: додавання (+), віднімання (-), множення (*), ділення (/). Розглядаються тільки натуральні числа. Обчислити значення кожного виразу та вивести їх такими самими рядками («число арифметична_операція число = результат;»).

1.3.2.5 Завдання для варіанта № 5:

а) Елемент двомірного масиву називають локальним мінімумом, якщо він має значення, менше значень всіх своїх сусідів (елементів, кожен індекс якого дорівнює відповідному індексу даного елемента або відрізняється від нього на одиницю). Обчислити кількість локальних мінімумів у матриці NxN, заданій користувачем з клавіатури, та отримати максимум серед всіх локальних мінімумів даної матриці.

б) Відомо, що у заданому тексті можуть зустрічатися дужки, а всередині однієї пари дужок інших дужок немає.

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

Повідомити, якщо хоча б одна дужка не закрита або не відкрита вчасно. У першому випадку вивести позицію відкритої дужки, для якої немає парної.

36

1.3.2.6 Завдання для варіанта № 6:

а) Масив A [N × M ] містить дійсні числа та задається користувачем з клавіатури разом з розмірністю. Користувач задає ціле число k. Необхідно обчислити суму елементів a[i][ j] таких, що для них виконується умова i + j = k . Якщо таке рішення не може бути знайдено, то вивести на екран відповідне повідомлення.

б) Написати програму шифрування та дешифрування текстового повідомлення. Шифрування виконати за допомогою двомірного масиву символів, у першому стовпчику якого задано символ вхідного повідомлення, а у другому – символ, на який його необхідно перетворити в результаті шифрування. Під час шифрування будь-який символ, який зустрічається в першому стовпчику масиву, перетворити на символ з другого стовпчика.

Реалізувати роботу користувача з програмою таким чином: запропонувати ввести повідомлення, після чого запропонувати обрати режим: шифрування, дешифрування, введення нового повідомлення та вихід. Меню виводити після виконання кожної операції, поки не буде обрано вихід з програми.

Дії з шифрування та дешифрування виконувати над останнім введеним користувачем повідомленням.

1.3.2.7 Завдання для варіанта № 7:

а) Відбувається шахова партія. Шахівниця має розмір 8x8. При цьому координати фігури задаються в шаховій нотації, тобто складаються з літери, що позначає номер стовпця (від a до h), та цифри, що позначає номер рядка (наприклад, «е2»).

Користувач задає з клавіатури позиції декількох фігур. Передбачити можливість введення даних про такі фігури: кінь, пішак, тура. Тип фігури задається відповідно літерами: К, П, Т.

Після введення даних про кожну з фігур вивести на екран шахову дошку, позначаючи на ній відповідними літерами позиції заданих фігур, символом ‘*’ – позиції, на які може бути переміщено останню введену фігуру, а символом ‘.’ всі інші клітинки.

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

37

б) Загальнорозповсюдженими є помилки під час набору тексту, які виражаються у використанні невірної розкладки.

Розробити програму, яка дозволяє перетворити символи англійської розкладки на символи української розкладки та навпаки (наприклад, “vfvf” на “ мама”).

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

1.3.2.8 Завдання для варіанта № 8:

а) Масив даних A розмірністю MxN задано користувачем з клавіатури разом з параметрами M та N. Окрім того задано одномірний масив P розмірністю N. Сформувати двомірний масив B з масиву A, розташовуючи у ньому стовпці масиву А у порядку, заданому масивом P, при цьому порядок елементів у стовпцях замінити на протилежний, тобто перший елемент повинен стати останнім, другий – передостаннім тощо.

б) Рядок складається з символів, серед яких зокрема можуть бути цифри. Послідовність цифр (що можливо включає плаваючу кому), відділену будь-якими іншими символами, слід вважати числами. Рядок задається користувачем з клавіатури.

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

Передбачити вилучення з цілої частини зайвих нулів. Зайвими вважати нулі, розташовані на початку числа (0010 перетворити на 10).

Вивести на екран рядок, утворений з введеного користувачем шляхом виконання вказаних дій.

1.3.2.9 Завдання для варіанта № 9:

а) Користувач задає з клавіатури кількість рядків M і стовпців N двомірної матриці та інтервал [a; b]. Програма заповнює матрицю заданих розмірів випадковим чином цілими числами з діапазону [-5; 4] та обчислює середнє арифметичне значень елементів масиву. Якщо

38

середнє арифметичне належить заданому інтервалу [a; b], то вивести масив на екран. Якщо обчислене значення даному інтервалу не належить, то заповнювати матрицю випадковими числами, поки значення середнього арифметичного не потрапить у заданий інтервал. Якщо середнє арифметичне не може потрапити у заданий інтервал у

будь-якому випадку, то вивести відповідне повідомлення.

 

б) Розв’язати біквадратне

рівняння

f (x) = 0

та

виконати

перевірку отриманого рішення. Функція

f (x) задається

під час

роботи програми користувачем

у вигляді

рядка, що

має формат

ax ^ 4 + bx ^ 2 + c , включаючи цілі числа, арифметичні операції, форми змінної x та пробіли. Наприклад: «2 x^4 - 3x^2+4».

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

1.3.2.10 Завдання для варіанта № 10:

а) Результати проведення футбольного турніру зведено в двомірний масив, який разом з кількістю команд задається користувачем. Елементи масиву представляють собою кількість м’ячів, забиту командою, що розташована у відповідному рядку, у ворота команди, що розташована у відповідному стовпці. Користувач вводить назви кожної команди, що бере участь у турнірі. Вивести на екран результати проведення всіх матчів (наприклад, «Реал Мадрид - Атлетико 4-1»).

б) Паліндромом вважається будь-який набір символів, симетричний відносно своєї середини.

Рядок задається користувачем з клавіатури або програмно (якщо користувач ввів порожній рядок).

Даний рядок перетворити на паліндром двома способами, дозволивши користувачу вибрати один з них:

довжина утвореного рядка, який є паліндромом, повинна бути мінімальною;

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

рядка.

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

39

1.3.2.11 Завдання для варіанта № 11:

а) Шахівниця розглядається у вигляді квадратного символьного масиву розміром 8x8. З клавіатури вводяться натуральні числа v1 та g1, що позначають номери вертикалі (за рахунком зліва направо) та горизонталі (за рахунком знизу вгору) для поля, на якому стоїть біла шахова фігура, та числа v2 та g2, що позначають відповідні координати другої, чорної, фігури. Визначити поля, на які може піти перша фігура таким чином, щоб не потрапити під удар другої. Передбачити можливість введення даних про такі фігури: тура, ферзь, кінь. Тип фігури задається користувачем відповідно літерами: Т, Ф, К.

Після введення даних про кожну з фігур вивести на екран шахову дошку, позначаючи на ній відповідними літерами позиції заданих фігур, символом ‘*’ – позиції, на які може бути переміщено першу фігуру, символом ‘x’ – позиції першої фігури, які знаходяться під ударом, а символом ‘.’ всі інші клітинки.

Передбачити можливість розгляду декількох ситуацій у процесі роботи програми.

б) Користувач вводить текст програми мовою програмування С++ з клавіатури. Програма повинна дозволяти виділяти цикли з заданого тексту (for, while, do while), виводячи їх повністю (разом з тілом циклу).

1.3.2.12 Завдання для варіанта № 12:

а) Виконати дії над двомірним масивом MxN. Параметри M та N задаються користувачем з клавіатури. Заповнити даний масив даними за діагоналями, починаючи з лівого верхнього кута, наприклад:

1

2

4

7

3

5

8

11

6

9

12

14

10

13

15

16

В якості даних обрати цілі числа з інтервалу [a; b], де a і b задаються користувачем.

Отриманий масив вивести на екран у вигляді таблиці, для вирівнювання стовпчиків використати табуляцію (символ ‘\t’).

б) Програма повинна дозволяти виконувати перевірку справедливості рівностей. Рівність задається у вигляді рядка та має формат «<число><операція><число>=<число><операція><число>».

Рядок може містити дійсні числа, операції додавання, віднімання, множення та ділення, а також знак «дорівнює». Рівність вважати

40

справедливою, якщо результат виконання арифметичної операції зліва від знака «дорівнює» дорівнює результату арифметичної операції справа від знака дорівнює.

Передбачити можливість (за необхідності) перевірки декількох рівностей у процесі одного запуску програми.

1.3.2.13 Завдання для варіанта № 13:

а) Елементи двомірного масиву є дійсними числами. Значення елементів задано користувачем. Розмірність масиву визначити автоматично під час введення значень елементів користувачем. Обчислити суму додатних елементів двох діагоналей масиву. Визначити, чи є отримане значення суми простим числом, якщо його округлити до цілого.

б) Написати програму шифрування та дешифрування текстового повідомлення. Шифрування виконати наступним чином: розташувати спочатку всі символи, розташовані на непарних позиціях, а потім у зворотному порядку всі символи, розташовані на парних позиціях.

Реалізувати меню для вибору режиму роботи програми: шифрування, дешифрування та вихід. Передбачити можливість шифрування та дешифрування програмно заданого рядка, якщо користувачем задано порожній рядок.

1.3.2.14 Завдання для варіанта № 14:

а) Глядацький зал кінотеатру представлено двомірним масивом, розмірність якого задається користувачем з клавіатури. Інформація щодо проданих квитків зберігається у даному масиві, значення елементів якого дорівнюють 1, якщо квиток на дане місце продано, і 0

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

б) Користувач вводить з клавіатури рядок. Замінити у ньому будь-які послідовності повторюваних символів на запис вигляду

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