You are on page 1of 21

Лабораторна робота №8

"Робота зі структурами. Робота з рядками"


Мета роботи: Опрацювати роботу з рядками та структурами

Теоретичні відомості
Частина І. Робота з рядками
У мові С++ розроблена бібліотека функцій string.h, яка містить засоби
для роботи з рядковими масивами. Рядок символів – це одномірний масив
типу char, який закінчується нульовим байтом. Для нульового байту
визначена спеціальна символьна константа «\0». Це необхідно враховувати
при визначенні масиву символів. Якщо символьний рядок вміщує N
символів, то при його визначенні необхідно вказати N+1 елемент.
Наприклад визначення:

char str[11];

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


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

char str [12]={'B','o','r','l','a','n','d','


','C','+','+','\0'};

а можуть і як символьний рядок

char str [12]="Visual C++";

У мові С (С++) при роботі з рядками можна використовувати


оператори введення в потік «>>» і виведення з потоку «<<.» Але оператор
«>>» ігнорує пропуски (пробіли) між символами, що вводяться. Наприклад:

#include <iostream>
void main()
{
char str [80];
cout<<"Введіть рядок < 80 символів:"<<endl;
cin>>str;
cout<<"Ви ввели рядок:"<<endl;
cout<<str<<endl;
cout<<"Введіть ще рядок 80 символів:"<<endl;
cin>>str;
cout<<"Ви ввели рядок: "<<str<<endl;
}

На практиці краще використовувати не оператор введення в


потік «>>», а функцію getline(). Функція getline() має два аргументи.
Перший аргумент вказує на рядок, в який здій снюється введення,
другий – кількість символів, які необхідно ввести. Наприклад:

#include <iostream>
void main()
{
char str [80];
cout<<"Введіть рядок < 80 символів:"<<endl;
cin.getline(str,30);
cout<<"Ви ввели рядок: "<<str<<endl;
cout<<str<<endl;
}

Для роботи з рядками використовується спеціальна бібліотека


функцій, описання якої знаходиться у заголовковому файлі string.h.
char strcpy (s, *st) – виконує операцію копіювання байтів рядка st у
рядок s (включаючи «\0»; повертає s).
strlen(str) – визначає довжину рядка. Вона повертає значення на
одиницю менше ніж довжина рядка.
strcpu(st1, st2) – використовується для копіювання рядка st2 у рядок
st1. Функція виконує побайтне копіювання символів із рядка st2 у рядок st1.
Копіювання закінчується, коли зустрівся нульовий байт. Довжина рядка st1
повинна бути більшою ніж довжина st2.
strncpu(st1, st2, n) – відрізняється від попередньої тим, що в її
параметри додається ще один аргумент, який вказує кількість символів,
котрі будуть копіюватись. n – ціле число без знаку. Якщо довжина рядка st1
менше довжини st2, відбудеться урізання символів.
strcat(st1, st2) – приєднує рядок st2 до рядка st1 і розміщує його в
масив, де знаходиться рядок st1 (конкатенація рядків). При цьому рядок st2
не змінюється. Новий рядок st1 автоматично завершується нульовим
байтом.
strncat(st1, st2, n) – також здійснює конкатенацію рядків, тільки
приєднує вказану у третьому параметрі кількість символів.
strcmp(st1, st2) – порівнює рядки st1 і st2. Після порівняння рядків st1
і st2 функція повертає одне із значень: < 0 – якщо st1 менше ніж st2;
Функції перетворення типу часто використовуються для перетворення
одного типу даних на другий. Прототипи цих функцій знаходяться у
заголовковому файлі stdlib.h.

Приклад. Знайти заданий символ у рядку.

#include<iostream>
#include<string.h>
#include<conio.h>
main()
{const int m=50;
char sim, *pt, str[m];
int n, k=0;
cout<<"Введіть рядок"<<endl;
cin>>sim;
pt=strchr(str, sim);
while(pt)
{k++;
N=pt-str;
cout<<k<<"позиція входження символу ="<<n<<endl;
pt=strchr(++pt, sim);}
cout<<"Кількість входжень="<<k<<endl;
if(k==0) cout<<"Символ не входить в рядок"<<endl;
getch();
}

Приклад
Задача 1. З клавіатури вводяться символи доти, поки не зустрінеться знак
оклику ' ! '. Підрахувати у введеному рядку кількість символів ' о '.
Розв'язання.
Таблиця символічних імен
Математичне Ім'я у Змінна
Смислове значення
ім'я програмі Тип Значення
i i Параметр циклу int Змінне
значення
k k Кількість символів 'о' int Змінне
значення
n n Лічильник, кількість int Змінне
символів, уведених до значення
символу '!'
c[100] c[100] Масив символів із 100 char З'ясовується у
елементів процесі

Текст програми мовою С++

#include <iostream>
#include <string.h>
int main()
{
int i, n, k; n = 0; char c[100];
cout << "Уведіть рядок:" << endl;
cin >> c[n]; // уводиться перший символ рядка
while (c[n]!='!') // умова вводу символів, доки не зустірнеться
'!'
{
n++; // лічильник збільшується на одиницю
cin >> c[n]; // уводиться наступний символ
}
k = 0; // початкове значення кількості символів 'о'
for (i = 0;i < n;i++) // відкриваємо цикл для перебору елементів
{
if (c[i] == 'o') // якщо поточний елемент матриці = 'о',
k++; // кількість збільшується на одиницю
}
// вивід результатів
if ( k == 0 )
cout << "Немає символів 'о' " << endl;
else
cout <<"Кількість символів 'о' = "<< k << endl;
return 0;
}

Задача 2. З клавіатури уводиться ціле число. Виявити, ASCII коду якого


символу воно відповідає та представити цей символ як ціле число.
Розв'язання.
Таблиця символічних імен
Математичне Ім'я у Змінна
Смислове значення
ім'я програмі Тип Значення
int1 int1 Довільне число int Уводиться
з клавіатури
int2 int2 Число int Результат
ch ch Символ char Результат

Текст програми мовою С++

# include <iostream>
# include <string.h>
void main ()
{
char ch;
int int1, int2;
cin>>int1; // уводимо ціле число з проміжка 0 .. 255
ch=char(int1); // конвертуємо число у відповідний символ
cout<<"ch = "<<ch<<endl; // виводимо на екран символ
int2=int(ch); // конвертуємо символ назад у число
cout<<"int2 = "<<int2<<endl; // виводимо число на екран
}

Частина 2. Типи даних, визначувані користувачем


З простих типів даних, масивів і покажчиків можна побудувати тип
даних, мають складнішу структуру.

2.1 Перейменування типів (TYPEDEF)


Для того, щоб зробити програму більш ясною, можна задати типу нове
ім'я за допомогою службового слова typedef.
Формат оператора перейменування типу:
typedef тип нове_ ім'я_типу [розмірність];
Приклад:
typedef double real;
Після такого опису нового типу його можна використовувати для опису
змінних, як і стандартних типів.
Приклад:
real a, b, c;

2.2 Перерахункові типи


Перераховані типи описуються для змінних, що приймають лише певні
значення заданого набору. Вони описуються за допомогою службового слова
enum.
Приклад:
enum day = {sun, mon, tues, weds, thur, fri, sat};
За замовчуванням елементи в перерахуванні нумеруються з 0. Тому,
якщо описати дві змінні d1, d2 створеним типом day:
enum day d1, d2;
ці дві змінні можуть набувати значень від 0 до 6, і у кожного значення буде
своє ім'я: d1 = 2; (tues), d2 = 0; (sun). Тобто в цьому випадку оголошено 7
іменованих констант:
const sun = 0; const mon = 1; const tues = 2;

const sat = 6;

Покажемо, як можна використовувати їх у наступному прикладі.

enum day = {sun, mon, tues, weds, thur, fri, sat};


enum day d1,d2
cin >> d1 >> d2;
switch (d1)
{ case sun:
case sat: cout << вихідні дні"; break;
case mon: cout << "понеділок - важкий день"; break;
default: cout << "Помилка";
}

Можна не за замовчуванням задавати значення елементам


перерахування, явно вказувати значення перерахованого типу. Це
відбувається так:
enum status {success = 1, wait = -1, error = 0};
Далі описуються змінні цього типу:
enum status Proc1_Status, Proc2_Status;

При необхідності можна описати перерахування як новий тип і


використовувати його надалі без слова enum.
typedef enum status {success = 1, wait = -1, error = 0}
name_status;

Тоді тип name_status – нове ім'я створеного типу та його можна


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

name_status Proc1_Status, Proc2_Status;


2.3 Структури
На відміну від масиву, всі елементи якого є однотипними, структура
може містити елементи різних типів. У мові С++ структура є видом класу і має
всі властивості.
Опис структурного шаблону передує опису структурної змінної. Формат
оператора опису структурного шаблону:
struct ім'я_структурного_шаблону
{
тип_1 ім'я_елемента_1;
тип_2 ім'я_елемента_2;
...
тип_N ім'я_елемента_N;
};

Приклад:
struct Automobile
{ int year; // рік випуска автомобіля
int doors; //кількість дверей автомобіля
double horse_Power; // Потужність двигуна (кінські сили)
char model [10]; // Назва моделі
};

Опис структурної змінної відбувається так:


struct Automobile my_Car, yur_Car;
Аналогічно опис структурного масиву чи покажчика на структуру:
struct Automobile Car[10]; // масив інформації про 10
машин;
struct Automobile *taxi; // покажчик на структуру;

Для спрощення опису структурних змінних можна ввести новий тип за


допомогою оператора typedef.
typedef struct Automobile{
int year; doors;
double horse_Power;
char model [10];
} At_Mble;
Тоді опис структурної змінної спрощується до наступного коду:
At_Mble my_Car, yur_Car, Car[10], * taxi;

Ініціалізація структурної змінної відбувається шляхом перерахування


значень елементів структурної змінної у фігурних дужках у порядку їх опису:
struct Automobile my_Car = {2000, 4, 100, "BMV"}
Для доступу до окремих елементів (полів) структури використовується
операція вибору (.) "точка".
Приклад 1:
my_Car. рік = 2000; my_Car. doors = 4;
my_Car. horse_Power = 100;
my_Car. model = "BMV";

Приклад 2:
struct Automobile Car[10]; Car [i] . year = 1997;
Car [i] . doors = 5;
Car [i] . horse_Power = 200; Car [i]. model = "Ford";

Якщо в програмі використовується вказівник на структуру, то для


доступу до окремих елементів (полів) структури замість оператора вибору (.)
"точка" використовується оператор - "стрілка".
At_Mble *taxi;
taxi = (At_Mble *) malloc (n * sizeof (At_Mble));
taxi - > doors = 5;
taxi -> horse_Power = 200;
taxi -> model = "Mersedes";

Структури в якості параметрів функції


Функції можуть мати параметри структурних типів, що передаються за
значенням, посиланням або вказівником. Наведемо приклад функції, до якої
передається структура за значенням, що обчислює вік зазначеної машини
Приклад:
int Age_Car (At_Mble X_Car) // функція, що обчислює
{
int s;
s = 2008 – X_Car.year; // Вік машини на поточний 2008 рік
return(s);
}

void main()
{
At_Mble my_Car = {2000, 4, 100, "BMV"}; /*ініціалізація
структурної змінної*/
int Age_my_Car;
Age_my_Car = Age_Car (my_Car); //виклик функції Age_Car
cout << вік моєї машини = << Age_my_Car ;
}

Наведемо приклад функції, яку передається структурна змінна за


посиланням.
Приклад:
void Pw (At_Mble & X_Car) {
X_Car. horse_Power = random (100) + 100;)

void main () {

Pw (my_Car);
...
}

Наведемо приклад функції, яка обчислює суму потужностей, і яку


передається структурний масив (точніше покажчик з його нульовий елемент).
Приклад:
double Sum_Power(At_Mble *X_Car)
{ double sum = 0;
for (int i; i < n; i++)
sum+ = X_Car[i]. horse_Power;
/* чи другий варіант:
sum+ = X_Car– > horse_Power; X_Car+ +;
*/
return (sum);
}

void main () {
At_Mble Car[10];

double S = Sum_Power (Car);
...
}

Завдання на лабораторну роботу


Завдання. Скласти програму для опрацювання символьної інформації
відповідно до заданого варіанта.

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


Підрахувати кількість уведених символів, букв і цифр, що зустрілися у
введеній фразі.
2. З клавіатури уводяться символи доти, поки не зустрінеться крапка
або кількість уведених символів перевищить 79. Вивести на екран загальну
кількість символів.
3. З клавіатури уводяться символи доти, поки не зустрінеться символ ‘
* ’. На екран виводити код кожного введеного символу.
4. З клавіатури посимвольно вводиться речення. Підрахувати кількість
голосних і приголосних букв у ньому та обчислити їх відсотковий вміст.
5. З клавіатури вводиться послідовність символів доти, поки не
зустрінеться символ, що не є цифрою. Підрахувати кількість уведених
символів.
6. З клавіатури вводиться послідовність символів. Якщо символ - мала
літера алфавіту, то вивести на екран відповідну йому велику літеру. Уведення
символів припинити, якщо зустрінеться символ ‘ # ’.
7. З клавіатури вводиться довільне ціле число від 0 до 255. Вивести на
екран символ, що відповідає цьому коду. Програма повинна припинити роботу
з уведенням числа 256.
8. З клавіатури посимвольно вводиться речення. Визначити, воно
розповідне, питальне чи окличне і вивести відповідне повідомлення на екран.
Кінцем речення вважати знаки: ‘ ? ’, ‘ ! ’, і ‘ . ’.
9. З клавіатури вводяться символи доти, поки речення не закінчиться.
Кінцем речення вважати символи: ‘ ! ’, ‘ ? ’. Підрахувати кількість уведених
символів, відмінних від пропуску.
10. З клавіатури вводиться фраза доти, поки не зустрінеться крапка.
Підрахувати кількість слів у введеній фразі. Вважати, що слова
відокремлюються одне від одного пропусками, комами, двокрапкою, крапкою
з комою, тире.
11. З клавіатури посимвольно вводиться речення, в якому визначити
кількість слів із закінченням на ‘ я ’.
12. З клавіатури посимвольно вводиться речення, де визначити кількість
слів, які не містять букви ‘ у ’.
13. З клавіатури посимвольно вводиться фраза. Визначити, скільки в ній
власних назв, тобто слів з великої літери. Фраза вважається введеною, якщо
подальший уведений символ - крапка.
14. З клавіатури посимвольно вводиться речення. Якщо воно
починається зі слова ‘ Коли ’, вивести випадкове число в діапазоні від 1001 до
1996, а якщо з іншого слова, то вивести на екран повідомлення: ‘Будь ласка,
введіть інше речення ’.
15. З клавіатури посимвольно вводиться фраза. Визначити, із символів
якого алфавіту складається ця фраза, і вивести на екран одне з повідомлень:
‘Ви використали тільки символи латинського алфавіту’ , ‘ Ви використали
тільки символи кирилиці ’, або ‘Ви користувалися символами різних
алфавітів’. Фраза введена, якщо наступний уведений символ - крапка.
16. У введеному рядку замінити всі коми на крапки, а крапки - на знаки
оклику. Підрахувати кількість таких замін.
17. У рядок через пропуск записано не більше 10 окремих слів. Записати
кожне слово в окрему рядкову змінну і вивести на екран кожне слово в
окремому рядку.
18. Записати в сім рядкових змінних стільки ж прислів'їв. Підрахувати,
у кількох з них зустрічається слово ‘робота’ або однокоеневі з ним слова.
19. У кожній з 10 рядкових змінних міститься назва художнього твору і
прізвище автора. Вивести на екран наявні серед них твори Т.Г. Шевченка.
20. У рядкову змінну через пропуск записані марки закордонних
автомобілів. Замінити їх в цьому рядку Mersedes на “Богдан", Opel на “ЛАЗ",
BMW на "Tаврію", Reno на “Шкоду", Fiat на “Балтик", Shkoda на “Волинь".
21. Рядок містить деяке слово. Записати в другий рядок (через пропуск)
коди символів вихідного рядка, а в третій - вихідний рядок, знаки ‘->’ і
отриманий рядок (наприклад, ‘ABBA -> 65 66 66 65’).
22. Записати в 10 рядкових змінних прізвища, імена і по батькові 10
великих письменників. Підрахувати кількість Олександрів у цьому списку і
записати їхні прізвища (через пропуск) в окремий рядок.
23. У введеному рядку замінити всі пропуски на коми, а коми - на
крапки. В утвореному рядку підрахувати кількість ком.
24. Записати в масив 10 рядкових змінних. б'єднати всі його елементи в
один рядок.
25. Записати у вісім рядкових змінних стільки ж рядків з популярними
піснями. Підрахувати, в яких з них зустрічається слово ‘кохання’ або
однокореневі з ним слова.
26. Дано рядок тексту. Відомо, що в ній є один елемент, рівний '*' і один
елемент рівний '#'. Знайти де вони знаходяться, і впорядкувати за алфавітом
символи між ними.
27. Дано рядок тексту. Відомо, що у рядку є лише дві точки. Знайти свої
порядкові номери. Далі впорядкувати за зростанням символи між ними.
28. Дано рядок тексту. Знайти номер першого елемента, що дорівнює
'+'. Впорядкувати за спаданням елементи масиву розташовані за цим
елементом.
29. Дано рядок тексту. Відсортувати символи за абеткою з 4 позиції по
15 позицію в рядку.
30. Дано рядок тексту. Відомо, що в ній є лише літери (великі та
термінові). Переписати в другий рядок лише великі (великі) літери, а потім
відсортувати їх за абеткою.

Завдання 2.

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


організацію текстового меню для роботи з програмою (через switch).
Програма повинна виконувати такі функції:
 введення інформації (заповнення масиву структур);
 виконання умови;
 виведення інформації про результати виконання умови у файл та
консоль.
Обов’язково – масив структур заповнюється через консоль.
Для вищого балу – інформація для масиву структур може вводитися з
файлу та зберігається у файлі.
№ варіанта Зміст програми
Диспетчер аеропорту. Структура має містити наступні поля:
− назва пункту призначення;
− назва повітряної компанії;
− номер рейсу;
− вартість квітка;
− тип літака.
1.
Вивід на дисплей і у файл номерів рейсів і типів літаків, що вилітають в пункт
призначення, назва якого вводиться з клавіатури. Записи мають бути
впорядковані по зростанню вартості квітка. Вивести на дисплей і у файл назву
компанії, що здійснює найдешевший рейс.

Диспетчер залізниці. Структура має містити наступні поля:


− назва пункту призначення;
− номер потяга;
− час відправлення (масив із 2-х елементів) ;
− час прибуття (масив із 2-х елементів).
2.
Вивід на дисплей і у файл всіх номерів потягів, що відправляються з 9:00 до
12:00 до пункту призначення, назва якого вводиться з клавіатури, та їх час в
путі. Записи мають бути впорядковані по зростанню часу відправлення.
− якщо таких ні, вивести відповідне повідомлення.

Розклад потягів. Структура має містити наступні поля:


− назва пункту призначення;
− номер потяга;
− час відправлення (масив із 2-х елементів);
− час в путі (масив із 2-х елементів).
3.
вивід на дисплей і у файл всіх номерів потягів, що відправляються з 21:00 до
23:00 до пункту призначення, назва якого вводиться з клавіатури, та їх час в
путі. Записи мають бути впорядковані по зростанню часу відправлення.
− якщо таких ні, вивести відповідне повідомлення.

Деканат. Структура має містити наступні поля:


− прізвище та ініціали;
− група;
− курс;
− успішність (масив з п'яти елементів).
4. вивід на дисплей і у файл прізвищ і номерів груп для всіх студентів, включених
у масив, якщо середній бал студента більше 4.0;
вивести по групам списки студентів, що мають заборгованість (хоча б одну
двійку)
якщо таких студентів ні, вивести відповідне повідомлення.
№ варіанта Зміст програми
Розрахунок економічності літаків. Структура має містити наступні поля:
− тип літака;
− вантажопідйомність (кг.);
− дальність;
− розхід пального (л.);
5.
Функція, яка повертає кількість пального, що необхідно витратити при
перевезенні одиниці вантажу на одиницю дальності.
вивід на дисплей і у файл дані про всі типи літаків та їх економічність. Записи
мають бути впорядковані по зростанню економічності.

Розрахунок собівартості квітка на літак. Структура має містити наступні поля:


− тип літака;
− кількість пасажирів;
− дальність;
− розхід пального (л.);
− вартість квітка (грн.);
6. Функція, яка повертає кількість пального, що необхідно витратити при
перевезенні одного пасажира на одиницю дальності.
вивід на дисплей і у файл інформації про всі типи літаків, вартість квітка та
собівартість перевезення одного пасажира. Вартість одного літра пального
ввести з клавіатури. Записи мають бути впорядковані по зростанню собівартості
перевезення одного пасажира.

Записна книжка. Структура має містити наступні поля:


− прізвище та ініціали;
− номер телефону;
− дата народження (масив із 3-х елементів);
− функція, яка виводить на дисплей дату народження.
7.
вивід на дисплей і у файл інформації о людях, дні народження яких приходяться
на місяць, значення якого введено з клавіатури. Записи мають бути впорядковані
по алфавіту.
− якщо таких ні, вивести відповідне повідомлення.

Доміно. Визначити комбінований (структурний) тип для подання інформації про


кістки доміно, що складається з лівої та правої половинки. Поля
"ліва" і "права" половинки зберігають інформацію про кількість точок на
половинках. Описати масив із 28 елементів (кісток доміно).
8. Заповнити масив довільними числами або ввести з клавіатури. Визначити, чи
правильно виставлені кістки в даному масиві (Чи дорівнює права цифра чергової
кістки лівій цифрі наступної кістки).
Вивести інформацію про кістки у файл та дисплей, де саме в масиві порушена
послідовність
№ варіанта Зміст програми
Східний календар. , Структура має містити наступні поля:
− прізвище та ініціали;
− рік за східним календарем
− дата народження (масив із 3-х елементів);
Функція, яка присвоює значення рік за східним календарем відповідно дню
народження;
9.
вивід на дисплей і у файл інформації про людину, прізвище якої введено з
клавіатури, а також всіх, хто народився у рік кота (наприклад). Записи мають
бути впорядковані по алфавіту.
− якщо таких ні, вивести відповідне повідомлення.

Компанії – аероперевізники. Структура має містити наступні поля:


− назва пункту призначення;
− назва повітряної компанії;
− дальність рейсу:
− номер рейса;
− вартість квітка;
− тип літака;
10. Функція, яка повертає частку вартість квітка/ дальність рейсу.
Створення динамічного масиву об'єктів Aeroflot, розмірність якого дорівнює
кількості рядків у файлі;
вивід на дисплей і у файл номерів рейсів і типів літаків, що вилітають в пункт
призначення, назва якого вводиться з клавіатури. Записи мають бути
впорядковані по зростанню вартості квітка. Вивести на дисплей і у файл назву
компанії, що здійснює найдешевший рейс відносно дальності.

Прайс-листи. Структура має містити наступні поля:назва товару;


− назва магазину, в якому продається товар;
− ціна товару ($);
− курс долара;
Функція, яка повертає вартість товару в грн.
11.
вивід на дисплей і у файл назву магазинів, в яких продається товар, що
вводиться з клавіатури. Записи мають бути впорядковані по зростанню ціни
товару в грн. Вивести на дисплей і у файл назву магазину, де товар
найдешевший.

Розрахунок зарплати. Структура має містити наступні поля::


− прізвище та ініціали;
− посада;
− рік прийому на роботу;
− зарплата;
12. Функція, яка повертає значення надбавки до зарплати відносно стажу: від 5 до
10 років –5%, від 10 до 15 років – 10%, більше ніж 15 років – 20%.
вивід на дисплей і у файл прізвищ і заробітків робітників, чий стаж роботи
перевищує значення, що введено з клавіатури;
якщо таких немає, вивести відповідне повідомлення.
№ варіанта Зміст програми
Розрахунок ціноутворення в магазинах. Структура має містити наступні поля:
− назва товару;
− назва магазину, в якому продається товар;
− ціна товару ($);
− ціна товару (грн..);
Функція, яка повертає значення курсу долара, по якому розраховують ціну
13. товару в грн. в даному магазині.

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


клавіатури. Записи мають бути впорядковані по зростанню ціни товару в грн.
Вивести на дисплей інформацію, чи є завищеним курс долара відносно курсу
НБУ (наприклад, 43.99 на 23.04.24)

Описання класу на ім'я Library, що містить наступні властивості:


− ціна книги;
− прізвище клієнта;
− пеня;
− дата видачі число, місяць, рік (масив із 3-х елементів) ;
− дата повернення число, місяць, рік (масив із 3-х елементів) ;
Функція, яка повертає 1 якщо книга є прострочена, та 0 в інших випадках, та
встановлює пеню із розрахунку 0.5 грн. за кожен прострочений день, але не
14. більше ніж ціна книги в потрійному розмірі. Параметр функції "сьогодні" є
масив із 3-х елементів.

Створення динамічного масиву об'єктів Library


вивід на дисплей і у файл прізвища тих боржників, чия сума боргу складає
300% від ціни книги. Параметр функції "сьогодні" вводиться з клавіатури.
Записи мають бути впорядковані по алфавіту.
Якщо таких ні, вивести відповідне повідомлення.

Елементи структури:
− вакансія,
− освіта,
− оплата,
15. − кількість робочих годин на тиждень.
Функція, яка повертає погодинну оплату

Вивести у файл та дисплей вакансії з вищою освітою. Сортувати за елементами:


погодинна оплпата.
Елементи структури:
− товар,
− виробник,
− кількість одиниць товару,
16.
− вартість одиниці товару,
− маса одиниці товару.
вивід на дисплей і у файл інформації про товари, чия вартість більша 100 грн.
Сортувати за елементами: товар, кількість одиниць товару.
№ варіанта Зміст програми
Органайзер. Структура має містити наступні поля:
− прізвище та ініціали;
− номер телефону;
− дата народження (масив із 3-х елементів);

Створення динамічного масиву об'єктів Organizer, розмірність якого дорівнює


17.
кількості рядків у файлі;
вивід на дисплей і у файл інформації об іменинниках, чий день, місяць та рік
народження були введені з клавіатури. Записи мають бути впорядковані по
алфавіту;
− якщо таких ні, вивести відповідне повідомлення;
− якщо є ювіляри (вік кратний 10), то вивести для них особливе привітання.

Рекомендації діетолога:
− прізвище та ініціали;
− ріст (см.);
− вага (кг.);
− діагноз;

Функція, яка присвоює значення діагноз: якщо ріст – вага > 120, діагноз –
"дистрофія", якщо ріст – вага < 80, діагноз – "ожиріння", інакше діагноз –
18. "практично здоров".

Створення динамічного масиву об'єктів Pacient


вивід на дисплей і у файл інформації про пацієнтів, що мають зайву вагу а також
о пацієнтах, що страждають на дистрофію. Записи мають бути впорядковані по
алфавіту;
− якщо таких немає, вивести відповідне повідомлення;

Військовий облік:
− прізвище та ініціали;
− ріст (см.);
− вага (кг.);
− рік народження;
− признак "чи годен до служби";
− функція, яка присвоює значення признака "чи годен до служби":
19.
якщо 80<(ріст – вага)<120 і 1992>рік народження>1968, признака=1, інакше
признака=0.

вивід на дисплей і у файл інформації про війсковозобов’язаних , що годні до


служби. Записи мають бути впорядковані по алфавіту;
− якщо таких немає, вивести відповідне повідомлення;
№ варіанта Зміст програми
Надприбутки торговельних центрів:
− назва товару;
− назва магазину, в якому продається товар;
− ціна товару в магазині (грн.);
− середня оптова ціна товару (грн.);
Функція, яка повертає значення "накрутка" магазина (у відсотках).
20. Створення динамічного масиву об'єктів Price
вивід на дисплей і у файл список магазинів, в яких "накрутка" перевищує
значення, що введено з клавіатури. Записи мають бути впорядковані по
алфавіту. Вивести на дисплей інформацію, о магазинах, де "накрутка"
максимальна і мінімальна.

Описання структури на ім'я Zakaz, що містить наступні властивості:


− назва замовлення;
− дата прийому замовлення число, місяць, рік (масив із 3-х елементів) ;
− дата виконання замовлення число, місяць, рік (масив із 3-х елементів) ;
Функція, яка повертає 1 якщо замовлення має бути виконано сьогодні , та 0 в
інших випадках. Параметр функції "сьогодні" є масив із 3-х елементів.
21.
Створення динамічного масиву об'єктів Zakaz
вивід на дисплей і у файл всіх замовлень, що мають бути виконані сьогодні.
Параметр функції "сьогодні" вводиться з клавіатури. Записи мають бути
впорядковані алфавіту.
− Якщо таких немає, вивести відповідне повідомлення.

Описання класу на ім'я Zamovlenya, що містить наступні властивості:


− назва замовлення;
− дата прийому замовлення число, місяць, рік (масив із 3-х елементів) ;
− дата виконання замовлення число, місяць, рік (масив із 3-х елементів) ;

функція, яка повертає 1 якщо замовлення є прострочене, та 0 в інших випадках.


22. Параметр функції "сьогодні" є масив із 3-х елементів.

Створення динамічного масиву об'єктів Zamovlenya


вивід на дисплей і у файл всіх прострочених замовлень. Параметр функції
"сьогодні" вводиться з клавіатури. Записи мають бути впорядковані по алфавіту.
− Якщо таких немає, вивести відповідне повідомлення.

Елементи структури:
вид приміщення,
кількість кімнат,
площа,
рік введення в експлуатацію.
23.
вивід на дисплей і у файл інформації про приміщення, що мають площу більше
100 м2
Сортувати за елементами: вид приміщення, рік введення в експлуатацію.
– якщо такі відсутні, вивести відповідне повідомлення
№ варіанта Зміст програми
Діагностика пацієнтів лікарні
− прізвище та ініціали;
− артеріальний тиск верхній;
− артеріальний тиск ніжній;
− діагноз;
− функція, яка присвоює значення діагноз: якщо артеріальний тиск верхній > 140
і артеріальний тиск ніжній>70, діагноз – "гіпертонія", якщо артеріальний тиск
верхній < 110 і артеріальний тиск ніжній<50, діагноз – "гіпотонія", якщо
24. артеріальний тиск верхній < артеріальний тиск ніжній, виводить повідомлення
"переміряти тиск" діагноз – не встановлено, інакше діагноз – "тиск в нормі".

Створення динамічного масиву об'єктів Pacient


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

Бібліотека, що містить наступні властивості:


− назва книги;
− прізвище клієнта;
− пеня;
− дата видачі число, місяць, рік (масив із 3-х елементів) ;
− дата повернення число, місяць, рік (масив із 3-х елементів) ;
Функція, яка повертає -1 якщо книга є прострочена, та 1 в інших випадках, т. за
25. кожен прострочений день. Параметр функції "сьогодні" є масив із 3-х елементів.

Створення динамічного масиву об'єктів Library


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

Описання класу на ім'я Працівник, що містить наступні властивості та методи:


− прізвище та ініціали;
− від роботи;
− зарплата нарахована;
− зарплата до видачі;
Функція, яка встановлює значення "зарплата до видачі" після того, як
законослухняний роботодавець сплатить всі податки. Хай податки становлять
26. 15% від нарахованої зарплатні.

Створення динамічного масиву об'єктів Shabashnik


вивід на дисплей і у файл прізвищ і заробітків всіх працівників, чия зарплатня
нарахована перевищує значення, що введено з клавіатури. Записи мають бути
впорядковані по алфавіту.
Якщо таких немає, вивести відповідне повідомлення.
№ варіанта Зміст програми
Описання структури на ім'я Paroplav, що містить наступні властивості:
− назва пункту призначення;
− кількість пасажирів;
− назва компанії;
− тоннажність (т.);
Функція, яка повертає 1, якщо пароплав перевантажений (загальна вага всіх
27.
пасажирів перевищує водотоннажність), та 0 в інших випадках. Середня вага
одного пасажира 70 кг.
Створення динамічного масиву об'єктів Paroplav
вивід на дисплей і у файл пункти призначення, куди пароплав не прибуде, тому
що перевантажений, а також назву компанії, що здійснює таку перевозку.
Записи мають бути впорядковані по зростанню вартості квітка.
Описання класу на ім'я Tanker, що містить наступні властивості:
− відстань до пункту призначення км.;
− загальний об‘єм нафтосховищ (л.);
− назва компанії;
− витрати пального на одиницю путі (л/км )
− вартість одного літру пального (грн.).
28. Функція, яка повертає вартість витраченого пального до пункту призначення.
Танкер витрачає теж саме пальне, що і перевозить. Рейс буде прибутковим, якщо
танкер витрачає менше ніж 20% пального, що перевозить.

Створення динамічного масиву об'єктів Tanker


вивід на дисплей і у файл збиткових компаній за алфавітом.

Описання класу на ім'я Suhogruz, що містить наступні властивості:


− назва пункту призначення;
− загальна вага вантажу;
− назва компанії;
− водотоннажність (т.);
функція, яка повертає 1, якщо пароплав не потоне (загальна вага вантажу не
29. перевищує водотоннажність), та 0 в інших випадках.
Створення динамічного масиву об'єктів Suhogruz
вивід на дисплей і у файл пункти призначення, куди сухогруз не прибуде, тому
що не допливе, а також назву компанії, що здійснює таку перевозку. Записи
мають бути впорядковані по алфавіту.

Елементи структури:
− назва цукерок,
− виробник,
− сорт,
− ціна за кілограм.
30.
Створення динамічного масиву
вивід на дисплей і у файл всіх цукерок певного сорту, чия вартість не перевищує
ціни, яка вводиться з клавіатури. Сортувати за елементами: назва цукерок, ціна.
− Якщо таких немає, вивести відповідне повідомлення.
Контрольні питання
1. Що розуміють під символьним рядком?
2. Чим відрізняються рядки від масивів символів?
3. Чим відрізняється запис рядків від запису окремих символів?
4. Яким типом даних представляються рядки в мові C++?
5. Яким чином оголосити рядок у С++?
6. Якою може бути максимальна довжина рядка в С++?
7. Які основні функції надає бібліотека string.h?
8. Яким чином визначити довжину рядка?
9. Яким чином виділити слова з рядка?
10. Для чого необхідні структури?
11. Що таке об’єднання?
12. Яким чином оголосити структуру в програмі мовою С++?
13. Яким чином оголосити об’єднання в програмі мовою С++?
14. Яким чином виконується ініціалізація структури?
15. Яким чином можна звернутися до елементів структури?
16. Чи можна передавати структуру в якості аргументу в функцію та
повертати з функції значення типу структура?
17. Що таке бітове поле?
18. Які дії можна виконувати над бітовими полями?
19. Чи може структура містити в собі структури або об’єднання?
20. Яким чином розподіляється пам’ять для структури?
21. Яким чином розподіляється пам’ять для об’єднання?
22. Що таке перелічення?
23. Яким чином оголосити перелічення в програмі мовою С++?
24. Чим відрізняються об’єднання від структур?

You might also like