5. Розробити програму формування стека, що містить цілі числа, і упорядочивания по зростанню елементів у цьому стеці. У процесі упорядочивания елементи стека переміщатися не повинні.
6. Розробити програму формування стека, куди міститься послідовність символів у вигляді окремих слів, що вводять із клавіатури. Кожне слово, поміщене в стек, варто вивести на екран термінала; при цьому порядок висновку символів у кожнім слові повинен бути зворотним у порівнянні з послідовністю їхнього уведення.
7. Розробити програму формування й виводу на печатку двунаправленного списку. Двунаправленный список є динамічною структурою даних і відрізняється від односпрямованого списку тим, що каждый його елемент зберігає не одне посилання (покажчик на наступний елемент), а два. З них один вказує на попередній елемент, а інший - на наступний елемент списку.
8. Розробити програму формування стека, що містить цілі позитивні числа, і його перетворення шляхом видалення з нього всіх парних чисел (у процесі перетворення стека його елементи в оперативній пам'яті переміщатися не повинні).
9. Розробити програму, що формує динамічну структуру даних для зберігання генеалогічного дерева. Кожна вершина дерева повинна містити наступну інформацію: ім'я та рік народження.
10. Розробити програму обчислення суми елементів масиву, що складає зцілих чисел. Масив повинен бути розміщений у пам'яті динамічно, а значеннявводитися із клавіатури.
Контрольні питання
1. Дайте визначення вказівника?
2. Перелічите причини без яких неможливо написати гарну програму на С++ без вказівників?
3. Приведіть загальну форму оголошення вказівника?
4. Перелічите оператори для роботи з вказівниками?
5. Що таке адресна арифметика?
6. Приведіть приклад операції порівняння вказівників?
7. Які засоби в С++ існують для звертання до елементів масиву?
8. Що таке масиви вказівників. Приведіть приклад.
9. Що таке непряма адресація?
10. Які проблеми виникають при роботі з вказівниками?
Масиви
1. Даний масив цілих. Оформити функцію count_if, що обчислює кількість елементів в масиві, що задовольняють даній умові, передаваній як параметр (умова має бути функцією, що приймає параметр типа int і що повертає значення логічного типа).
2. Даний масив цілих. Заповнити його, передаючи як параметр функцію, задаючу алгоритм генерації наступного значення, вигляду int f(). Для генерації дана функція може запам'ятовувати значення, що згенерували на попередньому кроці, або в глобальних змінних, або в статичних локальних змінних.
3. Даний масив цілих, відсортований за збільшенням. Видалити з нього дублікати.
4. Даний масив цілих. Скласти функцію remove_if, що видаляє з нього всі елементи, що задовольняють умові, передаваній як параметр.
5. Даний масив чисел і число а. Переставити елементи, менші а, в початок, міняючи їх місцями з попередніми. Порядок елементів, менших а, а також порядок елементів, великих а, не міняти.
6. Даний масив цілих. Знайти в нім пару чисел а і b з мінімальним значенням f(а,b), де f передається як параметр.
7. Даний масив цілих. Скласти функцію accumulate, що застосовує функцію f(s,a), передавану як параметр, до кожного елементу а масиву і що записує результат в змінну s. З її допомогою знайти мінімальний елемент в масиві, суму і твір елементів масиву.
8. Даний масив цілих. Сформувати по ньому масив, що містить довжини всіх серій (підряд однакових елементів, що йдуть). Одиночні елементи вважати серіями довжини 1.
9. Даний масив цілих. З кожної серії видалити один елемент.
10. Даний масив цілих. Видалити всі серії, довжина яких менше до.
11. Злити n масивів цілих, впорядкованих за збільшенням, в один, впорядкований за збільшенням.
12.Вказівка 1. Для спрощення алгоритму слід записати в кінець кожного масиву бар'єр - найбільше число відповідного типа. Бар'єр, зокрема, визначатиме, де закінчуються дані в масиві.
13.Вказівка 2. Скласти функцію, в яку передати динамічний двовимірний масив (масив одновимірних масивів чисел) і число n одновимірних масивів. Рекомендується в зовнішньому циклі завести лічильник одновимірних масивів, в яких досягнутий бар'єр. В той момент, коли він стає рівним n, злиття закінчене. Інший варіант: при записі в результуючий масив перевіряти значення елементу; якщо воно дорівнює значенню бар'єру, то злиття закінчене.
14.Даний масив чисел. Оформити функцію partition, що перетягує його елементи, що задовольняють даній умові, в початок, міняючи їх місцями з попередніми. Порядок елементів, що задовольняють умові, не міняти. Умову передавати як параметр-функцію. Наприклад, числовий масив
6 2 9 4 7 3 1 8 5 після застосування до нього функції partition з умовою «елемент > 5» виглядатиме так: 6 9 7 8 2 4 3 1 5.
15. Даний масив чисел. По ньому сконструювати масив сум сусідніх елементів, по ньому - ще один масив сум і так далі - до масиву з одного елементу. Результат повинен зберігатися в масиві вказівників на одновимірні масиви.
Рядки
1. Вводиться рядок слів, розділених пропусками (можливі зайві пропуски на початку і в кінці рядка і між словами). Циклічно зрушити всі слова вліво на до слів, видаливши при цьому зайві пропуски (до свідомо менше кількості слів).
2. Вводиться рядок слів, розділених пропусками (можливі зайві пропуски на початку і в кінці рядка і між словами). Циклічно зрушити всі слова управо на до слів, видаливши при цьому зайві пропуски (до свідомо менше кількості слів).
3. Вводиться рядок слів, розділених пропусками (можливі зайві пропуски на початку і в кінці рядка і між словами). Скопіювати в новий рядок два найкоротші слова вихідного рядка. Алгоритм перегляду вихідного рядка має бути однопрохідним.
4. Вводиться рядок слів, розділених пропусками (можливі зайві пропуски на початку, в кінці рядка і між словами). Сформувати новий рядок, в якому містяться всі слова-перевертыши (палиндромы) вихідного рядка. Алгоритм перегляду вихідного рядка має бути півторапрохідним (півпроходу на перевірку того, чи є слово перевертышем).
5. Вводиться рядок слів, розділених пропусками (можливі зайві пропуски на початку і в кінці рядка і між словами), а також цілочисельний масив перестановок слів. По даному рядку і масиву перестановок сформувати новий рядок, видаливши при цьому зайві пропуски. Наприклад, якщо заданий рядок ” aabbb з dd eeee” і масивом перестановок 5 2 4 3 1, то підсумковий рядок повинен мати вигляд: ”eeee bbb dd з aa”.
6. Вказівка: спочатку сформувати масив вказівників на початки слів.
7. Вводиться рядок слів, розділених пропусками (можливі зайві пропуски на початку і в кінці рядка і між словами). Сформувати рядок, в якому слова з вихідного рядка впорядковані за абеткою, видаливши при цьому зайві пропуски.
8. Вказівка: для порівняння рядків можна скористатися бібліотечною функцією strcmp(s,s1).
9. Вводиться рядок слів, розділених пропусками (можливі зайві пропуски на початку, в кінці рядка і між словами). Сформувати рядок, в якому слова з вихідного рядка впорядковані по довжині (а при рівній довжині порядок їх дотримання залишається таким же, як і у вихідному рядку), видаливши при цьому зайві пропуски.
10. Вводиться рядок слів, розділених пропусками (можливі зайві пропуски на початку, в кінці рядка і між словами). Сформувати рядок, в якому слова з вихідного рядка впорядковані по кількості голосних (а при рівній кількості голосних порядок їх дотримання залишається таким же, як і у вихідному рядку), видаливши при цьому зайві пропуски.
11. Вводиться рядок слів, розділених пропусками (можливі зайві пропуски на початку і в кінці рядка і між словами). Сформувати рядок, в якому видалені зайві пропуски і слова, що повторювалися раніше. Порядок слів не міняти.
12. Вводиться рядок слів, розділених пропусками (можливі зайві пропуски на початку і в кінці рядка і між словами). Сформувати рядок, в якому слова впорядковані по повторюваності. Дублікати слів слід видалити. При однаковій повторюваності першим повинне слідувати слово, перше входження якого зустрічається раніше у вихідному рядку.
13. Вводиться рядок слів, розділених пропусками (можливі зайві пропуски на початку і в кінці рядка і між словами). Видати таблицю слів і кількість їх повторень в рядку. Дублікати слів не видавати.
14. Вводиться рядок. Замінити в ній всі цифри їх словесними позначеннями: ”0” на ”zero”, ”1” на ”one”, ”2” на ”two” і так далі
15. Видалити з рядка s кожне входження підрядка s1.
16. Замінити в рядку s кожне входження підрядка s1 на підрядок s2.
17. Дано два рядки. Знайти індекси (їх може бути декілька) і довжину щонайдовшої однакової ділянки в обох масивах. Наприклад, в рядках “abracadabra” і “sobrat” щонайдовшою однаковою ділянкою буде “bra”.
18. Даний масив рядків. Сформувати по ньому масив підрядків, що задовольняють умові, передаваній як параметр (умова має бути функцією, що приймає параметр char* і що повертає значення логічного типа).
19. Реалізувати функцію
20.char *mystrstr(const char *p, const char *q);
21.що повертає перше входження підрядка q в рядок p (або 0, якщо підрядок не знайдений).
22.Реалізувати функцію
23.char *mystrpbrk(const char *p, const char *q);
24.що повертає вказівник на перше входження в рядок p якого-небудь символу з рядка q (або 0, якщо збігів не виявлено).
25.Реалізувати функцію
26.size_t mystrspn(const char *p, const char *q);
27.що повертає число початкових символів в рядку p, які не збігаються ні з одним з символів з рядка q.
28.Реалізувати функцію
29.size_t mystrcspn(const char *p, const char *q);
30.що повертає число початкових символів в рядку p, які збігаються з одним з символів з рядка q.
31.Реалізувати функцію
32.char* mystrtok(const char *p, const char *q, char* t);
33.проникну символи роздільників, що зберігаються в рядку q, що прочитує першу лексему в рядку p в рядок t (до наступного символу роздільника або до кінця рядка) і що повертає вказівник на перший непроглянутий символ.