
МЕТОДИЧКА_С++_Ч2
.pdf7. Для введення рядків (що набирають на клавіатурі) зручно використовувати функцію cin.getline, яка вводити в масив повний рядок тексту. Функція вимагає три аргументи – масив символів, в якому повинний зберігатися рядок тексту, довжина і символ обмежувач. Третій аргумент функції має ‘ n’ як значення за умовчанням:
cin.getline(array,80); і cin.getline(array,80,’\n’); -
еквівалентні.
Послідовність виконання роботи
1.Уважно ознайомтеся з теоретичним матеріалом щодо виконання практичної роботи.
2.Вивчити :
правила запису символьних даних (констант, змінних, масивів) і їх описання;
способи введення і виведення символьних даних;
способи обробки символьних даних;
використання функцій обробки символьних даних;
правила складання програм з використанням символьних даних.
3.Розробити алгоритм рішення у відповідності з завданням.
4.Скласти програму рішення задачі.
5.Оформити звіт по практичній роботі. Звіт повинен містити: тему, мету,
постановку задачі, алгоритм програми, текст програми і результати роботи програми.
Завдання до практичної роботи
Написати програму обробки символьних даних у відповідності з варіантом
індивідуального завдання (Таблиця 9.2).
31

Таблиця 9.2. Варіанти індивідуальних завдань.
Варіант завдання |
Завдання |
|
1Дано рядок символів. Дано слово. Видалити з рядка це слово.
2Дано рядок символів. Виділити підрядок між першою і другою крапкою.
3Дано рядок символів. Виділити підрядок між першою і останньою крапкою.
Дано рядок символів до крапки. Групи символів в ньому між групами
4пробілів вважаються словами. Підрахувати, скільки слів містить даний рядок.
Дано рядок символів до крапки. Групи символів між групами пробілів
5вважаються словами. Визначити довжину самого короткого і самого довгого слова.
Дано рядок символів до крапки. Групи символів в ньому між групами
6пробілів вважаються словами. Визначити, скільки слів починаються і закінчуються однією і тією ж літерою.
7 |
Дано |
рядок |
символів |
до |
крапки. |
Групи |
символів |
в |
ньому |
вважаються |
словами. Визначити, скільки слів містять хоча б одну букву «е». |
|
|||||||||
|
Дано |
рядок |
символів |
до |
крапки. |
Групи |
символів |
в |
ньому |
вважаються |
8словами. Визначити, скільки слів містять ровно 3 букви «е».
Дано рядок символів до точки. Визначити, чи є він правильним дужковим
9виразом. Розглядаються тільки круглі дужки.
Дано рядок символів до крапки. Визначити, чи є він записом десяткового
10числа, кратного 2.
Дано рядок символів до крапки. Визначити, чи є він записом десяткового
11числа кратного 3.
Дано рядок символів до крапки. Вивести його на екран задом наперед.
12
13 Дано рядок символів до крапки. Визначити, чи є |
вона поліндромом. |
Дано рядок символів. Зашифрувати в ньому |
всі латинські символи за |
14допомогою циклічної підстановки. A=>B=>C…Y=>Z=>A
Дано рядок символів. Видалити з неї всі кратні, які стоять поряд однакові
15символи, залишив по одному. Наприклад, фииииииввваапро=>фивапро Дано рядок символів. Підрахувати, скільки разів в ньому зустрічаються
16підслово АВВА. Зверніть увагу: в рядку АВВАВВА це підслово зустрічається два рази!
32
Приклад виконання роботи:
Дано рядок символів. Виділити з рядка С1 фрагмент заданой довжини (підрядка).
Результат виконання функції – рядок С2[] з k символів, виділених з рядка
C1[], починаючи з символу, що має номер n. При невірному поєднанні значень параметрів повертається порожній рядок, використаний як параметр С2.
Розробка текста програми
//funkciy videleniya i stroki c1 fragment zadanoy dliny (podstroki)
#include <iostream.h> #include<conio.h>
void substr(char *c1,char *c2,int n,int k); main()
{
int rez;
char string1[30]; char string2[30];
cout << "Enter string1 "; cin.getline(string1,20); cout<<"RESULT:"; substr(string1,string2,5,6); cout<<string2;
getch(); return 0; }
void substr(char *c1,char *c2,int n,int k){ //c1-ishodnaya stroka
//c2-videlyaemaya podstroka //n-nachalo videlyaemoy stroki //k-dlina videlyaemoy stroki
int i,m;//m-dlina ishodnoy stroki for(m=0;c1[m]!='\0';m++);
if(n<0 || n>m || k<0 || k>m-n){ c2[0]='\0';
return ;
}
for(i=n;i<k+n;i++) c2[i-n]=c1[i-1]; c2[i-n]='\0'; return;
}
Звіт
1.Тема практичної роботи.
2.Мета практичної роботи.
3.Умови завдання.
33
4.Намалюваний алгоритм у вигляді блок-схеми програми.
5.Текст програми.
6.Відповіді на контрольні питання.
7.Висновки.
Контрольні питання
1.Що таке рядок?
2.Який синтаксис оголошення рядка?
3.Які є способи ініціалізації рядка?
4.Яка функція використовується для виведення рядка?
5.Яка функція використовується для введення рядка?
6.Як рядки використовуються в якості параметру функцій?
34

Лабораторна робота №10
Тема: Структури та масиви структур в мові С++.
Мета роботи: Оволодіння практичними навичками в роботі з
інтегрованими типами даних – структурами і масивами
структур мови С++.
Теоретичні відомості
Загальні відомості про структури.
У мовах С/С++ поняття структури аналогічно поняттю запису (record) в
Паскалі. Це структурований тип даних, що є іменованою сукупністю різнотипних елементів. Тип структура зазвичай використовується при розробці інформаційних систем, баз даних.
Відомості про виплату студентам стипендії потрібно організувати у вигляді,
показаному на рисунку 10.1
СТУДЕНТ
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Прізвище |
|
Курс |
|
|
Група |
|
Стипендія |
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Елементи такої структури (прізвище, курс, група, стипендія) називаються полями. Кожному полю повинно бути поставлено у відповідність ім'я і тип.
Формат опису структурного типу наступний:
struct ім’я_типу
{визначення_елементів};
В кінці обов'язкового ставиться крапка з комою (це оператор).
Для розглянутого прикладу визначення відповідного структурного типу може бути наступним:
35
struct student {
char fam[30]; int kurs; char grup[3]; float stip;
};
Після цього student стає ім'ям структурного типу, який може бути призначений деяким змінним. У відповідність із стандартом С це потрібно робити так:
struct student stud1, stud2;
Правила С++ дозволяють в цьому випадку службове слово struct опускати і писати
student stud1, stud2;
Тут stud1 і stud2 — змінні структурного типу.
Допускаються і інші варіанти опису структурних змінних. Можна взагалі не задавати ім'я типу, а описувати відразу змінні:
struct {
char fam[30];
int kurs;
char grup[3];
float stip; } stud1, stud2, *pst;
В даному прикладі окрім двох змінних структурного типу оголошений покажчик pst на таку структуру. У даному описі можна було зберегти ім'я структурного типу student.
Звернення до елементів (полів) структурної величини проводиться за допомогою
уточненого імені наступного формату:
ім'я_структури.ім’я_елемента
Знову все схоже на Паскаль. Приклади уточнених імен для описаних вище змінних:
stud1.fam;
stud1.stip
36
Значення елементів структури можуть визначатися введенням, привласненням,
ініціалізацією. Приклад ініціалізації в описі:
student stud1={"Кротов", 3, "Ф32", 350};
Хай в програмі визначений покажчик на структуру
student *pst, stud1;
Тоді після виконання оператора привласнення
pst=&stud1;
до кожного елементу структурної змінної stud1 можна звертатися трьома способами. Наприклад, для поля fam
stud1.fam або (*pst).fam або pst->fam
У останньому варіанті використовується знак операції доступу до елементу структури: —>. Аналогічно можна звертатися і до інших елементів цієї змінної:
pst->FIO, pst->grup, pst->stip.
Поля структури можуть самі мати структурний тип. Такі величини представляють багаторівневі дерева.
Допускається використання масивів структур. Наприклад, відомості про 100
студентів можуть зберігатися в масиві, описаному таким чином:
student stud[100];
Тоді відомості про окремих студентів позначатимуться, наприклад, так: stud [1].fam, stud[5].kurs і тому подібне Якщо потрібно узяти першу букву прізвища 25-го студента, то слід писати: stud[25].fam[0].
Приклад 10.1. Ввести відомості про N студентів. Визначити прізвища студентів,
що отримують найвищу стипендію.
#include <stdio.h>
#include <conio.h>
void main() {
const N=5;
int i;
float maxs;
37
struct student { char fam[15]; int kurs; char grup[3];
float stip; } ; student stud[N] ; clrscr(); for(i=0;i<N;i++)
{ printf("%d-y student", i);
printf("\n Prizvishe:");scanf("%s",&stud[i].fam); printf("Kurs:"); scanf("%d",&stud[i].kurs); printf("Grupa:"); scanf("%s",&stud[i].grup); printf("Stupendiya:"); scanf("%f",&stud[i].stip);
}
maxs=0;
for(i=0;i<N;i++)
if(stud[i].stip>maxs) maxs=stud[i].stip;
printf("\n Student, sho otrimuyut maximalnu stipendiyu.",maxs);
for(i=0; i<N; i++)
if(stud[i].stip==maxs) printf("\n%s",stud[i].fam); getch();
}
Елемент структури типу поля бітів.
Використання структури в програмі на С дозволяє працювати з окремими бітами,
тобто з розрядами двійкового коду. Для цього використовуються елементи структури типу поля бітів. Формат структури, що містить поля бітів, наступний:
struct ім’я_структури
{тип ім’я_поля_1: довжина_ в_бітах;
тип ім’я_поля_2: довжина_ в_бітах;
. . .
тип ім’я_поля_N: довжина_в_бітах; } ;
38
Як тип полів можуть використовуватися специфікатори int, unsigned, signed. Мінімальною величиной такого типу може бути структура, що складається всього з одного бітового поля. Приклад опису такої структури:
struct onebit
{ unsigned bit:1;
} cod;
Звичайно, для змінної cod в пам'яті буде виділено 8 біт (1 байт), але використовуватися буде тільки один перший біт.
Об'єднання.
Об'єднання — це ще один структурований тип даних. Об'єднання схоже на структуру і в своєму описі відрізняється від структури тим, що замість ключового слова struct використовується слово union
union ім’я_типу
{ визначення_елементів};
Об'єднання відрізняється від структури способом організації у внутрішній пам'яті. Всі елементи об'єднання в пам'яті починаються з одного байта.
Хай в програмі описана структура:
struct S
{ int i;
char ch;
long int L;};
Розташування її елементів в пам'яті буде наступним:
байт |
байт |
байт |
байт |
байт |
байт |
байт |
|
|
|
|
|
|
|
і |
|
ch |
|
L |
Елементи структури займають послідовні елементи пам'яті з розміром,
відповідним типу. Загальний розмір структури рівний сумі довжин полів.
А зараз розглянемо об'єднання з наступним описом:
union S
{ int i;
char ch;
39

long int L;
};
Величина з таким типом в пам'яті буде розташована таким чином:
байт байт байт байт
ch
і
L
Поля об'єднання накладаються один на одного. Загальний об'єм займаної пам'яті рівний розміру найбільшого поля.
Зміна значення будь-якого поля об'єднання міняє значення інших полів.
Послідовність виконання роботи
1.Уважно ознайомтеся з теоретичним матеріалом щодо виконання практичної роботи.
2.Вивчити :
формат опису структурного типу даних;
способи звернення до елементів (полів) структурного типу даних;
формат опису структури, що містить поля бітів;
формат опису об’єднання;
правила складання програм з використанням структурованих типів даних.
3.Розробити алгоритм рішення у відповідності з завданням.
4.Скласти програму рішення задачі.
5.Оформити звіт по практичній роботі. Звіт повинен містити: тему, мету,
постановку задачі, алгоритм програми, текст програми і результати роботи програми.
Завдання до практичної роботи
Написати програму, відповідно до вашого варіанту (Таблиця 10.1), з
використанням структур для побудови своєї бази даних. Програма повинна містити
40