Приклад виконання завдання 1. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Приклад виконання завдання 1.



Варіант 1. Розробити функцію для виводу на екран усіх негативних елементів динамічного масиву і їх суми і кільксті.

Дана програма буде складатися з одного класу, що містить в собі конструктор, деструктор і дві функцій члени класу. Конструктор призначений для виділення динамічної пам’яті під масив, а деструктор – для звільнення динамічної пам’яті. Функція Vvod() призначена для вводу одномірного масиву з клавіатури, а функція Print() призначена для обробки масиву і виводу його на екран.

Клас буде мати наступну структуру:

class CNeg_elem{

float *masiv;

int kol;

int i;

int k,s;

public:

CNeg_elem();

~CNeg_elem();

void Vvod();

void Print();

};

Далі потрібно описати кожну з функцій, конструктор і деструктор. Головна програма буде містити зміну obj, за допомогою якої можна звертатися до функцій класу.

Програма буде мати наступний вигляд:

Лістинг програми:

#include<stdio.h>

#include<iostream.h>

#include<conio.h>

#include<malloc.h>

class CNeg_elem{

float *masiv;

int kol;

int i;

int k,s;

public:

CNeg_elem();

~CNeg_elem();

void Vvod();

void Print();

};

CNeg_elem::CNeg_elem()

{

cout<<"vvedite kilkist elementov masiva\nk= ";

cin>>k;

masiv=(float*)malloc(k*sizeof(float));

}

CNeg_elem::~CNeg_elem()

{

free(masiv);

}

void CNeg_elem::Vvod()

{

cout <<"vvedite element masiva\n";

for(i=0;i<k;i++)

{

cout<<"a["<<i<<"]=";

cin >>masiv[i];

}

}

void CNeg_elem::Print()

{

kol=0; s=0;

cout<<"\nnegativne element\n";

for(i=0;i<k;i++)

if(masiv[i]<0)

{

s=s+masiv[i];

kol++;

cout<<"\na["<<i<<"]="<<masiv[i];

}

cout<<"\n\nsuma="<<s;

cout<<"\nkolichestvo negativnih="<<kol;

}

void main()

{

clrscr();

CNeg_elem obj;

obj.Vvod();

obj.Print();

getch();

}

 

Тестування:

Для перевірки правильності роботи програми введемо в неї дані при введені, яких результат заздалегідь відомий.

Наприклад сформуємо масив з 6 елементів такого виду:

5 -3 -12 0 3 -1

З введених даних наочно видно, що від’ємними є 2,3 і 6 елемент. Сума їх =-16. Кількість 3.

Тепер введемо ці ж дані в програму і перевіримо результат.

vvedite kilkist elementov masiva

k= 6

vvedite element masiva

a[0]=5

a[1]=-3

a[2]=-12

a[3]=0

a[4]=3

a[5]=-1

negativne element

a[1]=-3

a[2]=-12

a[5]=-1

suma=-16

kolichestvo negativnih=3

Приклад виконання завдання 2.

Варіант 2. Розробити функцію для виводу на екран усіх негативних елементів кожного рядка двовимірного динамічного масиву і їх порядкових номерів.

Клас в даному завданні має таку ж структуру, що і клас із Завдання 2, відмінність є те, що тут використовується двомірний динамічний масив.

Клас буде мати наступну структуру:

class CNeg_elem{

int **masiv;

int i,j;

int n,m;

public:

CNeg_elem();

~CNeg_elem();

void Vvod();

void Print();

};

Лістинг програми:

#include<stdio.h>

#include<iostream.h>

#include<conio.h>

#include<malloc.h>

class CNeg_elem{

int **masiv;

int i,j;

int n,m;

public:

CNeg_elem();

~CNeg_elem();

void Vvod();

void Print();

};

CNeg_elem::CNeg_elem()

{

cout<<"vvedite kilkist radkiv\nn= ";

cin>>n;

cout<<"vvedite kilkist stovptsiv\nn= ";

cin>>m;

for(i=0;i<n;i++)

masiv[i]=new int[m];

}

CNeg_elem::~CNeg_elem()

{

free(masiv);

}

void CNeg_elem::Vvod()

{

cout <<"vvedite element masiva\n";

for(i=0;i<n;i++)

for(j=0;j<m;j++)

{

cout<<"a["<<i<<"]["<<j<<"]=";

cin >>masiv[i][j];

}

}

void CNeg_elem::Print()

{

cout<<"\nnegativne element\n";

for(i=0;i<n;i++)

for(j=0;j<m;j++)

if(masiv[i][j]<0)

cout<<"\na["<<i<<"]["<<j<<"]="<<masiv[i][j];

}

void main()

{

clrscr();

CNeg_elem obj;

obj.Vvod();

obj.Print();

getch();

}

Тестування:

Для перевірки правильності роботи програми введемо в неї дані при введені, яких результат заздалегідь відомий.

Наприклад сформуємо двомірний масив 4*3 такого виду:

-4 -7 0

3 7 -14

5 -5 10

17 19 20

З введених даних наочно видно, що від’ємними є [0][0],[0][1],[1][2] і [2][1] елемент.

Тепер введемо ці ж дані в програму і перевіримо результат.

vvedite kilkist radkiv

n= 4

vvedite kilkist stovptsiv

n= 3

vvedite element masiva

a[0][0]=-4

a[0][1]=-7

a[0][2]=0

a[1][0]=3

a[1][1]=7

a[1][2]=-14

a[2][0]=5

a[2][1]=-5

a[2][2]=10

a[3][0]=17

a[3][1]=19

a[3][2]=20

negativne element

a[0][0]=-4

a[0][1]=-7

a[1][2]=-14

a[2][1]=-5

Приклад виконання завдання 3.

Варіант 2. Розробити метод (функцію) визначення члена кратного 7 і метод, що використовує цю функцію для визначення кількості і суми елементів даного одномірного динамічного масиву, кратних 7.

Дана програма буде складатися з одного класу, що містить конструктор – для виділення пам’яті під масив, деструктора – для звільнення пам'яті, функцію вводу даних, функцію для знаходження елементів кратних 7 і функцію для виводу результатів на екран.

Клас буде мати наступну структуру:

class CKratn_7{

float *masiv;

int kol;

int i,j;

int k,s;

public:

CKratn_7();

~CKratn_7();

void Vvod();

void Kratn_7();

void Print();

};

 

Лістинг програми:

#include<stdio.h>

#include<iostream.h>

#include<conio.h>

#include<malloc.h>

#include<math.h>

class CKratn_7{

float *masiv;

int kol;

int i,j;

int k,s;

public:

CKratn_7();

~CKratn_7();

void Vvod();

void Kratn_7();

void Print();

};

CKratn_7::CKratn_7()

{

cout<<"vvedite kilkist elementov masiva\nk= ";

cin>>k;

masiv=new float[k];

}

CKratn_7::~CKratn_7()

{

free(masiv);

}

void CKratn_7::Vvod()

{

cout <<"vvedite element masiva\n";

for(i=0;i<k;i++)

{

cout<<"a["<<i<<"]=";

cin >>masiv[i];

}

}

void CKratn_7::Kratn_7()

{

j=0;

for(i=0;i<k;i++)

if(fmod(masiv[i],7)==0)

{

masiv[j]=masiv[i];

j++;

}

}

void CKratn_7::Print()

{

s=0;

cout<<"\nelement kratny 7\n";

for(i=0;i<j;i++)

{

s=s+masiv[i];

cout<<"\na["<<i<<"]="<<masiv[i];

}

cout<<"\n\nsuma="<<s;

cout<<"\nkolichestvo elementov kratnih 7="<<j;

}

void main()

{

clrscr();

CKratn_7 obj;

obj.Vvod();

obj.Kratn_7();

obj.Print();

getch();

}

Тестування:

Для перевірки правильності роботи програми введемо в неї дані при введені, яких результат заздалегідь відомий.

Наприклад сформуємо масив з 8 елементів такого виду:

21 -63 1 5 15 7 49 40

З введених даних наочно видно, що кратними 7 є 1,2,6 і 7 елемент.

Сума їх =14. Кількість 4.

Тепер введемо ці ж дані в програму і перевіримо результат.

vvedite kilkist elementov masiva

k= 8

vvedite element masiva

a[0]=21

a[1]=-63

a[2]=1

a[3]=5

a[4]=15

a[5]=7

a[6]=49

a[7]=40

element kratny 7

a[0]=21

a[1]=-63

a[2]=7

a[3]=49

suma=14

kolichestvo elementov kratnih 7= 4

Контрольні запитання

1. Що таке клас?

2. Формат типу CLASS.

3. Для чого використовують інкапсуляцію?

4. Специфікатори доступу.

5. Як описуються функції-члени класу?

6. Що таке екземпляр класу?

7. Що відносять до даних-членів класу?

8. Як здійснюється ініціалізація даних-членів класу?

9. Які специфікатори доступу використовують для даних-членів класу?

10. Що таке об’єкт класу?

11. Наведіть приклад об’єкту класу.

12. Вкажіть способи опису класів.

13. Що таке закриті члени класу?

14. Що таке відкриті члени класу?

15. Як організувати доступ до закритих членів класу?

16. Як задати початкові значення даним-членам класу (всі способи)?

17. Скільки об'єктів класу може бути використано в програмі, яка застосовує клас?

 

 

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

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

Мета: Набуття навиків в проектуванні найпростіших класів, розробка найпростіших програм їх використання.

Порядок виконання роботи

1. Ознайомитися з теоретичними основами розробки та правилами використання конструктора і деструктора.

2. Розробити клас для роботи з текстовими файлами з декількома конструкторами та деструктором, з функціями наповнення файлу, визначення його розміру, функцією виведення змісту файлу та функцією відповідно до завдання 1.

3. Розробити програму для використання класу з пункту 2, для роботи з двома об’єктами (різними текстовими файлами).

4. Розробити клас для роботи з бінарними файлами з декількома конструкторами, деструктором, функціями наповнення файлу, визначення його розміру, функцією виведення змісту файлу та функцією відповідно до завдання 2.

5. Розробити програму для використання класу з пункту 4 для роботи з трьома об’єктами (різними бінарними файлами).

6. Розробити 2-3 теста для перевірки правильності роботи розроблених програм з п. 3, 5.

7. Оформити звіт до лабораторної роботи.

Завдання 1

Варіант 1. Розробити метод-член класу для підрахування кількості рядків в текстовому файлі.

Варіант 2. Розробити метод-член класу для підрахування кількості слів в текстовому файлі.

Варіант 3. Розробити метод-член класу для порівняння двох текстових файлів та виведення номеру рядка та позиції символу, де вони відрізняються.

Варіант 4. Розробити метод-член класу для підрахування кількості разів появи заданого слова в текстовому файлі.

Варіант 5. Розробити метод-член класу для до запису рядка в початок текстового файлу.

Варіант 6. Розробити метод-член класу для до запису рядка в кінець текстового файлу.

Варіант 7. Розробити метод-член класу для до запису рядка в середину текстового файлу.

Варіант 8. Розробити метод-член класу для видалення рядка в середині текстового файлу (новий файл складається не менше ніж з трьох рядків).

Варіант 9. Розробити метод-член класу для видалення рядка з початку текстового файлу (новий файл складається не менше ніж з трьох рядків).

Варіант 10. Розробити метод-член класу для до запису слова в початковий рядок текстового файлу (новий файл складається не менше ніж з трьох рядків)

Завдання 2

Варіант 1. Розробити метод-член класу для дозапису заданої кількості даних у початок бінарного файлу (файл повинен складатися не менше ніж з п’яти компонентів).

Варіант 2. Розробити метод-член класу для дозапису заданої кількості даних у середину бінарного файлу (файл повинен складатися не менше ніж з п’яти компонентів).

Варіант 3. Розробити метод-член класу для дозапису заданої кількості даних у кінець бінарного файлу (файл повинен складатися не менше ніж з п’яти компонентів).

Варіант 4. Розробити метод-член класу для видалення заданої кількості даних з початку бінарного файлу.

Варіант 5. Розробити метод-член класу для видалення заданої кількості даних з середини бінарного файлу з заданої позиції.

Варіант 6. Розробити метод-член класу для видалення заданої кількості даних з кінця бінарного файлу.

Варіант 7. Розробити метод-член класу для копіювання заданої кількості даних з заданої позиції бінарного файлу.

Варіант 8. Розробити метод-член класу для видалення заданої кількості даних з заданої позиції бінарного файлу і вставки їх з заданої позиції у новий файл.

Варіант 9. Розробити метод-член класу для перезапису змісту бінарного файлу з кінця в початок в оберненому порядку.

Варіант 10. Розробити метод-член класу для створення нового файлу, який містить цілі дані з заданого файлу, кратні одинадцяти.

Теоретичні відомості

Конструктори і деструктори

У найпростіших програмах існує два способи визначення цілочисельної змінної:

1) можна визначити змінну, а потім присвоїти її деяке значення, наприклад:

іnt weіght;

weіght = 5;

2) можна визначити змінну і негайно її ініціалізувати, наприклад:

іnt w = 7;

при цьому операція ініціалізації сполучить у собі визначення змінної з присвоєнням початкового значення.

Як же ініціалізувати змінні-члени класу?

Для цього в ООП використовуються дві спеціальні функції:

1) Конструктор - це метод класу, ім'я якого збігається з ім'ям класу, призначений для створення й ініціалізації - класу.

2) Деструктор - це метод класу, ім'я якого складається з (~)- тільди й імені класу, призначений для видалення з пам'яті об'єкти класу, що відробили, і звільнення виділеної для них пам'яті.

Наприклад, для класу CTіme ім'я деструктора ~ CTіme ();



Поделиться:


Последнее изменение этой страницы: 2016-04-18; просмотров: 582; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.19.31.73 (0.173 с.)