1. Видалити|знищити,віддалити| зайві пропуски|прогалини| у введеному|запровадженому| рядку символів.
2. Порахувати|полічити| частоту появи букв|літер| в рядку, якщо вважати|лічити| рівними букви|літери| у верхньому і нижньому регістрах|реєстрі|.
3. У рядку слів всі слова, що складаються з чотирьох букв|літер|, видалити|знищити,віддалити|, а слова, що складаються з п'яти букв|літер|, замінити словом “комп’ютер”.
4. Ввести|запровадити| рядок символів і перетворити, якщо можна, на число типу int або float за наступним|слідуючим| правилом: рядок “123.45” перетвориться на число 123.45; рядок 123 - в число 123.
5. Задано масив рядків, що складаються з трьох символів. Відсортувати рядки за першою буквою|літері| у спадному порядку|ладі|.
6. Вводити|запроваджувати| масив рядків, довжина яких не більше певного числа. Знайти рядок найменшої довжини і вирівняти всі рядки до довжини найменшого рядка.
7. Уводять|запроваджується| рядок символів. Символи, які оточені пропусками|прогалинами|, називаються словами. Необхідно знайти в рядку слова, які починаються з однієї і тієї ж самої букви|літери|, і поміняти їх місцями.
8. Вводять|запроваджується| рядок слів (слово - рядок символів, які оточені пропусками|прогалинами|). Відсортувати слова за першою буквою|літері|.
9. Вводитять|запроваджується| рядок символів, в якому можуть бути символи верхнього і нижнього регістрів|реєстру|. Необхідно символи верхнього регістра|реєстру| замінити символом " * ".
10. Вводять|запроваджується| масив рядків символів. Необхідно знайти рядок найбільшої довжини і збільшити всю решту рядків в масиві до довжини найбільшого рядка, використовуючи символ " ! ".
11. У рядку слів з|із| букв|літер| латинського алфавіту знайти слова, в яких немає букв|літер|, що повторюються.
12. У рядку слів з|із| букв|літер| латинського алфавіту знайти слова, в яких перша буква|літера| слова входить ще хоча б раз.
13. У рядку слів з|із| букв|літер| латинського алфавіту знайти найкоротше симетричне слово.
14. Уводять|запроваджується| рядок символів, серед яких є хоча б один символ " : ". Необхідно записати в зворотному порядку|ладі| символи, які зустрінуться до першого " : " і підрахувати|підсумувати| кількість символів між символами " :", якщо таких декілька.
15. Уводять|запроваджується| рядок слів (слово - рядок символів, які оточено пропусками|прогалинами|). Необхідно знайти слова, що складаються тільки|лише| з букв|літер| і лише з|із| цифр.
16. Уводять|запроваджується| масив рядків довільної довжини (не більше заданого числа). Необхідно відсортувати слова в неспадному порядку|ладі| за останнім символом в рядках і за довжиною рядків.
17. Використовуючи послідовність рядків (кожний рядок – деяке число в двійковій системі числення|обчислення|), скласти рядок з|із| чисел десяткової системи числення|обчислення| (і-е число відповідає і-му рядку початкової|вихідної| послідовності).
18. Написати рекурсивну функцію визначення довжини рядка.
19. Задано словник слів. Необхідно визначити, чи можна у введеній|запровадженій| послідовності символів виділити слова із|із| словника.
20. У вигляді рядка символів задано арифметичний вираз|вираження|. Обчислити|обчисляти,вичислити| його, задавши значення відповідних змінних.
21. Написати функції додавання|добавки| підрядка і видалення|віддалення| підрядка в будь-якому вказаному місці заданого рядка.
22. Задано два рядки слів. Перетворити їх на один за принципом:
Задано: рядок1слово1 слово2 слово3 ..
рядок2слово1 слово2 слово3 ..
Одержати|отримати|: ряд1слово1 ряд2слово1 ряд1слово2 ряд2слово2 ….
23. Задано словник-перекладач у вигляді двовимірного масиву рядків. Написати програму, що дозволяє одержати|отримати| переклад|переведення,переказ| уведеного|запровадженого| рядка.
24. Скласти програму, яка підраховує|підсумовує| частоту повторення двобуквених поєднань в заданому тексті. Вивести тільки|лише| ті з|із| них, частота повторення яких не менше ніж 10%.
25. Задано масив рядків довільної довжини. Визначити, чи є|з'являється,являється| симетричною матриця символів, побудованих|споруджених| з|із| рядків.
26. Написати програму “демовірус|”: уводять|запроваджується| рядок символів,|розпочинаючи,зачинаючи| з|із| середини рядка букви|літери| починають|розпочинають,зачинають| “падати вниз” - спочатку одна, потім дві й т.д. При цьому рядок, поступово стискаючись|стискуючись|, в кінці|у кінці,наприкінці| зовсім зникає.
27. Задано масив слів – словник. Користувач вводить|запроваджує| слово пошуку по одній букві|літері|. Після|потім| кожної введеної|запровадженої| букви|літери| слова на екрані відображається|відображується| список всіх можливих слів продовжень зі|із| словника, або з'являється|появляється| повідомлення|сполучення| про відсутність даного слова.
28. Задано рядок слів довільної довжини. Сформувати динамічний масив рядків слів певної довжини. Упорядкувати одержаний|отриманий| масив.
29. Задано масив рядків довільної довжини. Відформатувати даний масив рядків за шириною поля і посторінково.
30. Задано масив рядків і словник. Визначити входження слів словника до заданого масиву як по вертикалі, так і по горизонталі.
ЛАБОРАТОРНА РОБОТА № 5
РОБОТА З|ІЗ| АБСТРАКТНИМИ ТИПАМИ ДАНИХ(АТД|): STRUCT, UNION, ENUM
Мета. Отримати тримати практичні навички навички побудови та застосування абстрактних типів даних на С++
Короткі теоретичні відомості
Структуру використовують для об'єднання різнотипних даних в одиночну іменовану змінну. Компоненти структури мають індивідуальні імена.
Загальний|спільний| синтаксис визначення структурного типу даних (шаблона АТД|):
struct таг _ структури
{
список членів структури, які можуть мати будь-який стандартний або абстрактний тип даних
};
В описі обов'язковий оператор «;» після|потім| «}». Далі як тип виступає|вирушає| таг_структури, тобто, щоб оголосити змінну, яка має організацію даних як шаблон структури, необхідно написати:
таг_структури ідентифікатор;
або таг_структури* ідентифікатор;
, якщо змінна повинна містити|утримувати| адресу змінної структурного типу.
Звернення до членів структури відбувається|походить| по імені, яке складається з імені змінно структурного типу та імені члена з|із| шаблону структури.
Приклад. Задати масив структур, кожна з яких містить|утримує| поля: ім’я_клієнта і сума_виплат.
# include < iostream. h>
void main ()
{ struct client {
char name [15];
int sum;
} ; //визначенняструктурного типу client
client mas [10]; //виділення пам’яті під 10 елементів типу client
int i, num; // кількість осіб
cin >> num;
for (i = 0; i < num; i++)
{ cout << ¢¢ \ n введіть ім’я ¢¢
cin >> mas [i].name; //звернення до поля name
cout << “ суму виплат”;
cin >> mas [i].sum; //звернення до поля sum
} }
З|із| прикладу|зразка| видно|показно|, що для звернення до члена структури використовують оператор ¢¢.¢¢ (прямого доступу до членів абстрактного типу даних).
Якщо змінна є|з'являється,являється| покажчиком на структуру (містить|утримує| адресу структури), то до члена структури можна звернутися|обернутися| за допомогою оператора непрямого доступу до члена структури
Покажчик_на_структуру –> ім’я_члена_структури
або за допомогою оператора прямого доступу з використанням оператора переходу за адресою «*»:
|(*Покажчик_на_структуру). ім’я_члена_структури
Організація даних у формі списку дозволяє зберігати елементи списку в різних|перебувають| ділянках пам'яті, які, на відміну від масивів, не |поруч| знаходяться поряд. Для створення|створіння| елемента списку використовують структурний тип даних. При цьому одним з членів структури є|з'являється,являється| покажчик на створений структурний тип. Фактично цей покажчик містить|утримує| адресу |наступного| або попередній елемент списку.
Приклад.Написати програму створення|створіння|, перегляду|проглядання| і видалення|віддалення| елементів списку, організованого за принципом LIFO(«last input, first output» – «останній прийшов,- перший пішов»).
#include <iostream.h>
#include <process.h>
#include <conio.h>
//визначення перелічуваного типукористувача boolean
enum boolean{true, false};
//визначення шаблону елемента списку за допомогою типу struct
struct stack{
char s;
stack* p;
};
//оператор typedef дозволяє створити тип користувача Stk, який є
//аналогом стандартного типу stack*
typedef stack* Stk;
Stk stk;
//функція reset() повертає порожній покажчик (адресу) вершини стеку,
//тобто відбувається “скидання” стеку
Stk reset()
{
return NULL;
}
//функція push(char c, Stk top) заносить символ с, що введено, на вершину //стеку, утворюючи новий елемент списку типу stack и повертає його //адресу як адресу першого елемента в списку
Stk push(char c, Stk top)
{ stk=new stack;
if(stk==NULL){ cout<<"\n Помилка під час розподілу пам’яті";
exit(1);}
stk->s=c;
if(top!=NULL) stk->p=top;
return stk;
}
/*функція pop( Stk top) виштовхує елемент вершини, видає символ , що зберігається в вершині, на екран, замінює адресу попередньої вершини адресою вершини, що йде за нею, а місце, що було розподілено під попередню вершину, звільняється (повертається до “купи” вільної пам’яті)*/
Stk pop( Stk top)
{ cout<<top->s;
stk=top;
top=top->p;
delete stk;
return top->p;
}
//функція empty( const Stk top) перевіряє, чи є стек порожнім, повертає
// константу false, якщо це так
boolean empty( const Stk top)
{ return (boolean)(top==NULL);
}
void main()
{ clrscr();
Stk top;
char str[]="fghg hfgt dtdt dtyd dtyf";
int i=0;
cout<<str<<endl;
top=reset();
while(str[i])
top=push(str[i++],top);
while(!empty(top))
top=pop(top);
getch();
}
Об'єднання (union) – це похідний тип від типу struct. Синтаксис визначення об’єднання такий же самий, як і у|в,біля| структур, за винятком того, що ключове|джерельне| слово union замінюється struct. Ці типи відмінні|розрізняти| за способом зберігання членів АТД|. Члени об'єднання сумісно| використовують пам'ять, тобто їх значення перекриваються. При цьому під об'єднання виділяється об'єм|обсяг| пам'яті, достатній для зберігання найбільшого члена об'єднання. Члени структур зберігаються подібно до масивів (послідовно у вигляді лінійної структури відповідно до їх оголошення всередині шаблону структури).
Ключове|джерельне| слово| enum використовують для оголошення особливого типу з|із| набором іменованих цілих констант, названих константами перелічуваного типу, або константами переліку|перерахування| (enumerators). Перелічуваний тип даних має структуру оголошення таку ж саму, як struct, або union. Перелічувані константи за умовчанням нумерують значеннями, починаючи|розпочинаючи,зачинаючи| з|із| нуля. Допускається явне призначення|присвоєння| цілого значення в перелічуваному наборі|перерахування| у вигляді|виді|:
перелічувана_константа=значення.