You are on page 1of 18

Завдання та методичні рекомендації (ч.

1)
до літньої обчислювальної практики
І курс
спеціальність 122 – «Комп’ютерні науки»
ОП «Алгоритмічне та програмне забезпечення комп’ютерних систем»
Літня обчислювальна практика проводиться згідно з навчальним
планом спеціальності 122 – «Комп’ютерні науки» протягом 2 тижнів після
завершення літньої заліково-екзаменаційної сесії. Форма контролю – залік.
Студент, який вчасно не здав та не захистив обчислювальну практику,
вважається таким, що не виконав навчальний план і може бути відрахований
з університету за не виконання навчального плану.
Обчислювальна практика складається з 3-х частин: практична робота,
самостійна робота і захист практики.
Студенти працюють протягом 2 тижнів згідно з доведеним до них
графіком дистанційно з допомогою обраних викладачами-керівниками
практики платформ дистанційного навчання. Кожний студент одержує від
керівника практики завдання й опрацьовує його. Після підготовки він
захищає кожне завдання перед керівником практики, демонструє
працездатність програмного продукту та відповідає на запитання викладача
по завданню, оформлює звіт із обчислювальної практики і завантажує його
електронний варіант на вказаний керівником практики ресурс. При виконанні
вище наведених умов студент отримує залік.
Звіт із обчислювальної практики має наступну структуру:
- титульна сторінка;
- для кожного завдання:
 постановка задачі;
 програмна реалізація (код програми);
 скріншоти роботи програми (введені дані та результат
виконання програми);
 висновки.

2
Завдання на практику
Завдання №1. Рекурсивні підпрограми.
Мета роботи:
1. Засвоєння принципів організації рекурсивних процесів.
2. Практичні навички розроблення і використання рекурсивних
процедур та функцій.

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

Завдання для самостійної роботи


Задано натуральне число n . Розробити програму для обчислення
заданих сум, використовуючи рекурсивні процедури або функції.
n
a k bk  
a1  1, a k  0.5 bk 1  0.5 a k 1 ,
1. 
k 1 k !
,
b1  1, bk  2a k21  bk 1 .

n
xi x1  1, xi  0.3x i 1 ,
2. 1
i 1 yi
,
y1  1, y i  xi21  y i 1 .

3
n
2k a1  1, a k  3bk 1  2a k 1 ,
3. 
k 1 1  a k  bk 
,
b1  1, bk  a k21  bk 1 .

n
a k bk a1  1, ak  0.3bk 1  0.2ak 1 ,
4.  k  1! ,
k 1 b1  1, bk  ak21  bk21.

n
xi x1  1, x 2  2, x 3  3,
5.  k !! ,
i 1 xi  xi 1  xi  2  xi 3 .

n
ak  1  1   1k  .
6. 
k 1 k  1!
, a k  1   1      1  
 2 !   3!   k  1! 

n
ak 1 1 1 1 1 1 1 1
7. k 1 3k
, ak   
2 1 2 2 2 3
  
2 k
.

n
 1k 1 a , 1
sin 2 a k 1  1 .
8. 
k 1 2k  1!
k a0  1 , ak  5 
3k

n
 1k 1 a sin 2 ak 1  1
9. k 1 k !!
k , a0  2 , ak 
k2
.

k
n
 1k
 ak 
10. 
k m
  ,
k!  2 
a0  1 , ak  4ak 1  2 .

Задано натуральні n і m . Розробити програму для обчислення значень


заданих виразів. При обчисленні виразів використати рекурсивні процедури
або функції.

3m n n  1      1
11. , 12. ,
m !!
1! 2!     n !

um u 0  0 , u1  1,
13. ,
u m  u m 1  u m 2 ,
n ! n  1!     1!

2m m!
14. 15. ,
1
1 1 1 1 1 1 1 1 1
     1
3 1! 3 2 ! 3 3! 3 n! 3

1
1
2n  3 
2n  1

4
m! m!
16. , 17.
2
m2  2 n  2 n 1      21
4
m2 

2n  2
2n
m2  2
m

1, при n  0,
n  i, при n  1,

18.  H n, i  , H n , i   
i 1 2 iH n  1,i   nH n  2, i ,
 при n  1.

0, при i  n,
n
i 
i
19. C n , C  1,
n при i  0 або n  i,
i 1 C i  C i 1 , при n  i .
 n 1 n 1

n
i  1, при n  0,

20.  An, i  , An, i    An  1,1, при i  0 , n  0,
i 1  An  1, An, i  1, при n  0, i  0 .

Задано масиви чисел An , Bn , n  100 . Розробити програму для


обчислення заданої суми, де ai , bi – відповідні елементи масивів A і B . При
обчисленні сум використати рекурсивні процедури або функції.
n
a1 n
a i2
21. i 1 a2
. 22. 
i 1 a i21
.
b1  bi 
a3 ai22
b2  bi 1 
 
ai 1 a 22
a
bi 1  i a12
bi b2 
b1

n
ai n
bi
23 i 1
24. 
i 1
b1  b2      bi 1 1 1
   
ai a i 1 a1

n ai  bi
25. i 1 ui
, u 0  0, u1  1, u n  u n1  u n  2 .

5
Завдання №2. Динамічні структури даних.
Мета роботи:

1. Засвоєння принципів роботи з динамічними структурами даних.


2. Практичні навички розроблення алгоритмів і програм для роботи зі
списками, чергами, стеками і деревами.

Теоретичні відомості
Дані, які використовуються у програмі, поділяються на статичні й
динамічні.
Статичні структури даних розміщуються у статичній пам’яті,
виділеній компілятором у процесі компіляції програми. Їх взаєморозміщення,
взаємозв’язки елементів і кількість завжди залишаються сталими в процесі
виконання програми.
Динамічні структури даних розміщуються у динамічній пам’яті, яка
виділяється на етапі виконання програми. Їх внутрішня побудова формується
за деяким законом, а їх взаєморозміщення, взаємозв’язки елементів і
кількість можуть динамічно змінюватися в процесі виконання програми. Для
роботи з динамічними даними використовуються вказівники.
Вказівник – це статична змінна, значенням якої є адреса пам’яті. За
допомогою вказівників можна розміщувати в динамічній пам’яті будь-які
типи даних (цілі, дійсні, логічні, символьні, символьні рядки, масиви, записи
та інші). Такі вказівники називаються типізованими. Для опису типізованого
вказівника використовується знак ^, який записується перед відповідним
типом.
Під час роботи довільної програми значення деякої статичної змінної
може змінюватися, але власне кількість оголошених статичних змінних не
змінюється. Це не завжди зручно. Зручно використовувати структури в яких
кількість елементів може змінюватися.

6
Такі структури можна побудувати використовуючи динамічні змінні.
Динамічні змінні можна створювати під час роботи програми («на ходу») за
допомогою так званих змінних-вказівників.
1. Вказівники. Змінну-вказівник можна уявити як звичайну статичну
змінну, але таку, в якій зберігається не деяке конкретне значення наприклад
типу integer, real, …, а адрес іншої змінної.
1. Статична змінна має назву.
2. Динамічна змінна назви не має.
3. До статичної змінної можна звернутися по її назві.
4. До динамічної змінної – по її адресі (тобто по вказівнику, де ця адреса
знаходиться)
5. Змінна-вказівник може вказувати лише на динамічну змінну. І не може
вказувати на статичну.
Оскільки динамічна змінна не має імені (а отже не описується в блоці
var), то на початку роботи програми пам’ять під дану змінну не виділяється.
А відповідна змінна-вказівник ні нащо не вказує. Коли змінна-вказівник ні
нащо не вказує, то говорять, що вона вказує на nil.
Щоб виділити пам’ять, необхідно виконати процедуру new(x), де х –
змінна-вказівник.
Після виконання даної процедури (new(x)) вказівник x буде вказувати
на комірку пам’яті відповідного типу.
2. Списки. Зв'язаний список — одна з найважливіших структур даних,
в якій елементи лінійно впорядковані, але порядок визначається не номерами
елементів, а вказівниками, які входять в склад елементів списку та вказують
на наступний за даним елемент або на наступний та попередній елементи.
Зв'язані списки мають серію переваг порівняно з масивами. Зокрема, в
них набагато ефективніше виконуються процедури додавання та вилучення
елементів. Натомість, масиви набагато кращі в операціях, які потребують
безпосереднього доступу до кожного елементу, що у випадку зі зв'язаними

7
списками неможливо та потребує послідовного перебору усіх елементів, які
передують даному.
Застосування списків. Списки інтенсивно застосовуються в
програмуванні як самостійні структури. Також на їх основі можуть
будуватись більш складні структури даних, такі як дерева. На базі списків
також можуть бути реалізовані стеки та черги.
Переваги та недоліки. В загальному випадку, якщо необхідно
оперувати з динамічними множинами, де присутні інтенсивні операції з
додавання або видалення елементів, існують досить переконливі аргументи
для використання саме зв'язаних списків.
3. Стеки. Стек — різновид лінійного списку, структура даних, яка
працює за принципом «останнім прийшов — першим пішов» (LIFO, англ. last
in, first out). Всі операції (наприклад, видалення елементу) в стеку можна
проводити тільки з одним елементом, який знаходиться на верхівці стеку та
був введений в стек останнім.
Операції зі стеком:
* push ("заштовхнути елемент"): елемент додається в стек та
розміщується в його верхівці. Розмір стеку збільшується на одиницю. При
перевищенні розміру стека граничної величини, відбувається переповнення
стека
* pop ("виштовхнути елемент"): отримує елемент з верхівки стеку. При
цьому він видаляється зі стеку і його місце в верхівці стеку займає наступний
за ним відповідно до правила LIFO, а розмір стеку зменшується на одиницю.
При намаганні "виштовхнути" елемент з вже пустого стеку, відбувається
ситуація "незаповнення" стеку.
4. Черги. Черга — динамічна структура даних, що працює за
принципом "перший прийшов - перший пішов" (англ. FIFO — first in, first
out). У черги є голова (англ. head) та хвіст (англ. tail). Елемент, що додається
до черги, опиняється в її хвості. Елемент, що видаляється з черги,
знаходиться в її голові.
8
Основні операції з чергою
* "поставити в чергу". Операція додавання елемента в "хвіст" черги.
При цьому довжина черги збільшується на одиницю. Якщо відбувається
намагання додати елемент у вже заповнену чергу, відбувається її
переповнення
* "отримання з черги". Операція, яка повертає елемент з голови та
видаляє його з черги, таким чином встановлюючи голову на наступний за
видаленим елемент та зменшуючи довжину на одиницю. При намаганні
видалити елемент з пустої черги, виникає ситуація "незаповнення".

Завдання для самостійної роботи


1. Задано текст, в якому є круглі дужки. Розробити програму, яка перевіряє
збалансованість дужок у заданому тексті. Якщо дужки збалансовані, то для
кожної пари друкує їх номери позицій у тексті за зростанням номерів дужок,
що закриваються. Якщо дужки не збалансовані, то виводить повідомлення
про це.
2. Розробити програму, яка створює список L , елементами якого є цілі числа.
Розміщує в оберненому порядку всі елементи між першим і останнім
входженням заданого елемента E , якщо E входить у L не менше двох разів,
інакше список залишається без змін. Друкує модифікований список по п’ять
елементів у рядку.
3. Розробити програму, яка створює список L , елементами якого є цілі числа.
Вилучає із списку L всі від’ємні елементи і розміщує їх у кінець списку в
оберненому порядку до їх розміщення. Друкує модифікований список по
п’ять елементів у рядку.
4. Розробити програму, яка створює списки L1 і L 2 , елементами яких є слова
із великих латинських літер. Знаходить всі слова списку L1 , що не містяться
у L 2 , і друкує їх, розділюючи пробілами, в оберненому порядку до їх
розміщення.
5. Розробити програму, яка створює список L , елементами якого є цілі числа

9
і дописує в кінець цього списку всі елементи в оберненому порядку до їх
розміщення в L (тобто будується симетричний список, наприклад,
1,2,3,3,2,1). Друкує отриманий список по сім елементів у рядку.
6. Розробити програму, яка створює список L , елементами якого є цілі числа.
Для заданих чисел a , b a  b  друкує в порядку розміщення всі числа списку
L менші від a , потім всі числа з діапазону a, b і, нарешті, всі числа більші

від b . (Список переглядається тільки один раз).


7. Розробити програму, яка створює список L , елементами якого є дійсні
числа. Перетворює список L так, щоб спочатку розміщувалися всі
невід’ємні елементи зі збереженням порядку їх розміщення, а потім всі
від’ємні в оберненому порядку. Друкує модифікований список по п’ять
елементів у рядку.
8. Розробити програму, яка створює списки L1 , L 2 , L3 , елементами яких є
цілі числа. Замінює перше входження списку L 2 в список L1 (якщо таке є) на
список L3 . Друкує модифікований список L1 по десять елементів у рядку.
9. Розробити програму, яка створює список L , елементами якого є дійсні
числа. Перетворює список L за правилом: якщо числа упорядковані за
неспаданням  x1  x 2      x n  , то список залишається без зміни, інакше
елементи у списку розміщуються в оберненому порядку  x n , x n 1 , ... , x1  .
Друкує модифікований список по п’ять елементів у рядку.
10. Розробити програму, яка створює список L , елементами якого є дійсні
числа. Обчислює добуток  x1  x n  x 2  x n 1      x n  x1  і друкує значення
добутку та всі елементи списку L . (Для розв’язування задачі доцільно
використати двозв’язний список).
11. Розробити програму, яка створює список L , елементами якого є дійсні
числа r1 , r2 , ..., rn . Будує список, елементами якого є числа rn , rn1 , ..., r1 , r1 , r2 , ..., rn .
Друкує одержаний список по п’ять елементів у рядку.
12. Розробити програму, яка створює списки L1 і L 2 , елементами яких є цілі
числа (елементи у списку L1 упорядковані за неспаданням, а у списку L 2

10
розміщені довільно). Вставляє елементи списку L 2 у L1 так, щоб L1
залишився упорядкованим. Друкує модифікований список L1 по десять
елементів у рядку.
13. Розробити програму, яка створює список L , елементами якого є малі
латинські літери. Друкує в алфавітному порядку всі літери, що входять у
список L по одному разу, по декілька разів і не входять жодного разу.
14. Розробити програму, яка створює список L , елементами якого є символи.
Вилучає із списку L всі повторні входження кожного символу. Друкує
модифікований список по п’ять елементів у рядку.
15. Розробити програму, яка створює списки L1 і L 2 , елементами яких є слова
із великих латинських літер. Знаходить всі слова списку L1 , що містяться в
L 2 , і друкує, розділюючи їх пробілами, в оберненому порядку до їх

розміщення.

Завдання №3. Обробка файлових даних.


Мета роботи:
1. Ознайомлення з поняттям файла та методами доступу до файлів.
2. Засвоєння принципів організації текстових файлів.
3. Практичні навички роботи з текстовими файлами.
Теоретичні відомості
Файли. Файлом називають спосіб зберігання інформації на
фізичному пристрої. Файл - це поняття, яке застосовується до всього - від
файлу на диску до терміналу. В C + + відсутні оператори для роботи з
файлами. Всі необхідні дії виконуються за допомогою функцій,
включених в стандартну бібліотеку. Вони дозволяють працювати з
різними пристроями, такими, як диски, принтер, комунікаційні канали і
т.д. Ці пристрої сильно відрізняються один від одного. Однак файлова
система перетворює їх в єдине абстрактне логічне пристрій, який
називається потоком.

11
Текстовий потік - це послідовність символів. При передачі символів з
потоку на екран, частина з них не виводиться (наприклад, символ повернення
каретки, переведення рядка).
Двійковий потік - це послідовність байтів, які однозначно відповідають
тому, що знаходиться на зовнішньому пристрої.
Організація роботи з файлами засобами C
Для організація роботи з файлами необхідно визначити вказівник на
файловий тип.
FILE * ідентифікатор;
Файл відкривається за допомогою fopen, яка повертає через вказівник
інформацію про потік введення-виведення, прикріпленого до зазначеного
файлу або іншого пристрою, з якого йде читання (або в який йде запис). У
разі невдачі функція повертає нульовий вказівник.
Схожа функція freopen бібліотеки Сі виконує аналогічну операцію
після першого закриття будь-якого відкритого потоку, пов'язаного з її
параметрами.
Вони визначаються як
FILE* fopen (const char * path, const char * mode);
FILE* freopen (const char * path, const char * mode, FILE * fp);
Ім’я та шлях розташування файлу передається в path. Режим доступу
(mode) - рядок, що вказує режим відкриття файлу файлу і тип файлу
Типи файлу: бінарний (b); текстовий (t). При відкритому файлі в
режимі відновлення ('+' в якості другого або третього символу аргументу
позначення режиму) і введення і виведення можуть виконуватися в одному
потоці.
Режим опис запис з …

r rb відкриває для читання початку

відкриває для запису (створює файл в разі його відсутності). Видаляє


w wb вміст і перезаписує файл. початку

a ab відкриває для додавання (додає в разі існування файлу) кінця

12
r+ rb+ r+b відкриває для читання і запису початку

w+ wb+ w+b відкриває для читання і запису. Видаляє вміст і перезаписує файл. початку

a+ ab+ a+b відкриває для читання і запису (додає в разі існування файлу). кінця

Для введення–виведення в текстових файлах використовуються


функції : fscanf(), fgets(), fgetс(),fputs(),fprintf(). Для введення – виведення в
бінарні - fread(), fwrite().
Закриття потоку здійснюється за допомогою функції fclose приймає
один аргумент: покажчик на структуру FILE потоку для закриття.
int fclose (FILE * fp);
Приклад
FILE *fp;
//Відкриття файлів з перевіркою результатів відкриття
if( (fp =fopen("mytext.dat","r"))==NULL)
{ printf("Файл даних не відкритий"); return -1; }
fscanf(fp,"%c\n",&let);
fclose (fp);

Приклад обробки рядків. Завдання. Заданий текст. Роздрукувати


слова, що починаються із заданої букви. Уточнення. Нехай текст - набір
рядків довжини не більш 80 символів. Обмеження необхідне, тому що до
введення рядка її довжина невідома, а поле пам'яті під рядок повинне бути
зарезервоване до введення. Нехай число рядків заздалегідь невідомо. Слова в
рядках будемо розділяти пробілами. Перший символ рядка - не пробіл. Нехай
переносів у словах немає.
Вхідні дані. Представимо в найбільш загальному виді.
Нехай символьна let - задана буква.
Нехай всі дані записані в одному файлі. Ім'я цього файлу передамо як
перший параметр програми.

13
Вхідна форма:
ФАЙЛ ім’я якого передається у
<let> <argv[1]>;
<рядок 1>
<рядок 2>
......
<рядок k>
......

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


вихідного файлу задамо як другий параметр програми.
Для ідентифікації програми виведемо її ім'я (нульовий параметр
програми).
Вихідна форма: ІМ’Я ПРОГРАМИ

Програми <argv[0]>
Пошук слів, що починаються з букви <let>
1 рядок: <рядок 1>
Знайдені слова: ФАЙЛ
<cлово 1> або < слова відсутні >
<argv[2]>;
<cлово 2>
....
2 рядок: <рядок 2>
Знайдені слова:
<cлово 1> або < слова відсутні >
<cлово 2>
....
і рядок: <рядок і>
Знайдені слова:
<cлово 1> або < слова відсутні >
<cлово 2>
....

Функціональний тест
let='s';
№ Досліджуваний текст Очікуваний результат: знайдені слова
рядка

1 Mr. Priestley has Відсутні


2 Some students at his house Some
students
3 For lessons. Відсутні
4 There are six of them in all. Six

14
Алгоритм
1. Відкриваємо файл з іменем <argv[1]> для читання, а файл з іменем
<argv[2]> для запису.
2. Якщо хоча б один файл не відривається виходимо з програми.
3. Записуємо у вихідний файл заголовок.
4. По рядках обробляємо файл, поки він не вичерпаний.
5. Записуємо у вихідний файл прочитаний рядок.
6. Виводимо шукані слова в міру знаходження.
7. Закриваємо файли та виходимо з програми.
Текст програми
#include<stdio.h>
#include<malloc.h>
#include<process.h>
#include<string.h>
const int lenmax=81; //типізована стала - границя масиву
int main(int argc, char* argv[])
{
char let,str[lenmax], *word;
FILE *dat,*res;
int k;
int len,l,wy,i,j;
//Відкриття файлів з перевіркою результатів відкриття
if((dat=fopen(argv[1],"r"))==NULL)
{ printf("Файл даних не відкритий"); return 1; }
if((res=fopen(argv[2],"w"))==NULL)
{ printf("Файл результату не відкритий"); return 1; }
//Вивід заголовків і введення let
fprintf(res,"Програма %s \n",argv[0]); // argv[0] - заголовок програми
fscanf(dat,"%c\n",&let); //не забувайте про &!
fprintf(res,"Пошук слів, що починаються з букви %c \n",let);

// Порядкова обробка файлу


k=1;
while(!feof(dat))
15
{
fgets(str,81,dat); //неформатироване введення рядка; вводить
//усі символи до '\n';
//fscanf cо специфікатором %s уводить до першого ' ' або '\n'
fprintf(res," %d рядок: %s ",k,str); // форматирований вивід - виводить
//усі символи до '\0', тобто як треба
fprintf(res,"Знайдені слова: \n");
//
len=strlen(str); //пошук довжини вихідного рядка
word=(char*)malloc(len+1); //пам'яті на 1 більше під '\0'
for(wy=0,l=i=0;i<len;l=++i) //l=++i те ж, що i=i+1,l=i
{
for(;str[i]==' '&&str[i]!='\0'; i++); //пошук початку слова
if(str[i]==let && str[i]!='\0') // слово шукане
{
wy=1; //фіксуємо, що знайшли, і далі перепишемо в word
for(j=0; str[i]!=' '&&str[i]!='\0'; j++,i++)
word[j]=str[i];
word[j]='\0'; //додамо нуль-термінатор
fprintf(res," %s \n",word); //виведемо
}
else
for(;str[i]!=' '&&str[i]!='\0'; i++); // пропускаємо слово }

if(!wy) // жодного потрібного слова так і не знайшли


fprintf(res,"слова відсутні \n");
k++;
free(word);
}
fclose(res);
fclose(dat);
return 0;
// Alt+F7 or Project->project_name Properties...->Configuration Properties->Debugging
--- Commands Arguments : filein fileout
}
16
Завдання для самостійної роботи
Розробити програму для розв’язання задачі згідно варіанту.
Створюємо текстовий файл текстовим редактором. Зчитуємо дані з
вхідного файлу, здійснюємо обробку даних, результати зберігаємо в іншому
текстовому файлі. Назви вхідного і вихідного файлу вводяться як текстові
рядки.
1. Задано текст, слова в якому розділені пробілами і розділовими знаками.
Розробити програму, яка вилучає з цього тексту всі слова з подвоєнням літер
і записує їх в окремий рядок, розділяючи пробілами. Друкує окремо вилучені
слова і текст, що залишився після вилучення слів.

2. Задано текст, слова в якому розділені пробілами і розділовими знаками.


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

3. Задано текст, слова в якому розділені пробілами і розділовими знаками.


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

4. Задано два тексти, слова в яких розділені пробілами і розділовими


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

5. Задано текст, слова в якому розділені пробілами і розділовими знаками.


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

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


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

17
7. Задано текст, слова в якому розділені пробілами і розділовими знаками.
Розробити програму, яка вилучає з цього тексту всі повторні входження слів.

8. Задано текст, слова в якому розділені пробілами і розділовими знаками.


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

9. Задано текст, слова в якому розділені пробілами і розділовими знаками.


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

10. Задано текст, слова в якому розділені пробілами і розділовими знаками.


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

11. Задано текст, слова в якому розділені пробілами і розділовими знаками,


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

12. Задано два тексти, слова в яких розділені пробілами і розділовими


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

13. Задано два тексти, слова в яких розділені пробілами і розділовими


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

14. Задано два тексти, слова в яких розділені пробілами і розділовими


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

15. Задано символ і текст, слова в якому розділені пробілами і розділовими


знаками. Розробити програму, яка знаходить і друкує всі слова, що містять
заданий символ найбільшу кількість разів.
18

You might also like