Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

МЕТОДИЧКА_С++_Ч2

.pdf
Скачиваний:
49
Добавлен:
15.02.2015
Размер:
876 Кб
Скачать

7. Для введення рядків (що набирають на клавіатурі) зручно використовувати функцію 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