Главная страница

Неро. НП3_Коваленко. Міністерство освіти і науки України Фаховий коледж ракетнокосмічного машинобудування


Скачать 0.79 Mb.
НазваниеМіністерство освіти і науки України Фаховий коледж ракетнокосмічного машинобудування
Дата14.06.2022
Размер0.79 Mb.
Формат файлаdocx
Имя файлаНП3_Коваленко.docx
ТипДокументы
#590582




Міністерство освіти і науки України

Фаховий коледж ракетно-космічного машинобудування

Дніпровського національного університету імені Олеся Гончара

ЗВІТ

з навчальної практики №3

з дисципліни «Об’єктно-орієнтоване програмування»
Спеціальність 121

Група ПЗ-19-2

Виконав Коваленко О.П.

Перевірила Лазарєва Ю. І.

2021

ЗМІСТ
ЗАВДАННЯ № 1

ЗАВДАННЯ № 2

ЗАВДАННЯ № 3

ЗАВДАННЯ № 4

ЗАВДАННЯ № 5

ЗАВДАННЯ № 1
Проектування структури класу. Розробка класу. Специфікатори доступу
до елементів класу. Правила опису методів класу та порядок роботи
з методами класу. Створення методів класу. Контроль даних класу.
Розробка програми з різним оголошенням об'єктів
Мета: навчитися проектувати структуру класу та розробляти клас, використовувати специфікатори доступу до елементів класу, створювати методи класу, реалізовувати контроль даних класу та розробляти програму з різним оголошенням об'єктів.
Хід роботи
Постановка задачі:

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

Поставлена задача повинна бути реалізована з декількома модифікаціями:

  1. У методі класу повинен відбуватись контроль введених даних.

  2. Поля класу повинні бути описані як змінні вказаного типу або являтися полями структури.

  3. У програмі повинні бути оголошені два об’єкти: один об'єкт за ім’ям, другий об'єкт – через вказівник.

Варіант № 6.

  1. Лінійне рівняння у = Ах + В. Поле first - дробове число, коефіцієнт А; поле second - дробове число, коефіцієнт В. Реалізувати метод function () - обчислення для заданого х значення функції у.

Програмний код програми міститься відповідно у лістингах 1.1 − 1.3.
Програмний код програми міститься відповідно у лістингах 1.1 − 1.3.
Лістинг 1.1 – Код головної функції

#include

#include

#include "qwerty.h"

using namespace std;

int main(void)

{

system("color 04");

SetConsoleOutputCP(1251);

qwerty obj1;

qwerty* obj2 = new qwerty; //Створення вказівника на об'єкт

cout << endl << "Рішення рівняння y = Ax + B " << endl;

cout << endl << "Oб'єкт 1: "; //Оголошення через ім'я

obj1.setX();

obj1.setA();

obj1.setB();

obj1.function();

system("pause"); system("cls");

cout << endl << "Oб'єкт 2: "; //Оголошення через об'єкт

obj2->setX();

obj2->setA();

obj2->setB();

obj2->function();

delete obj2; //Видалення вказівника на об'єкт

return 0;

}
Лістинг 1.2 – Специфікація класу qwerty

#pragma once

class qwerty

{

float x; // x

float y; // y

float first; // A

float second; // B

public:

qwerty(); //Конструктор без параметрів

qwerty(); //Деструктор

void function(); //Метод для рішення

void setX(); //метод для введення x

void setA(); //Метод для введення A

void setB(); //Метод для введення B

int getX() const; //Метод який повертає значення x

float getA() const; //Метод який повертає A

float getB() const; //Метод який повертає B

};
,Лістинг 1.3 – Лістинг 1.3 – Реалізація класу qwerty

#include "qwerty.h"

#include

#include

using namespace std;

qwerty::qwerty() : x(0), first(0), second(0) //конструктор

{

}
qwerty::qwerty()//деструктор

{

}
void qwerty::function()

{

float sum = 0;

sum = first * x + second; //Рішення

cout << endl << "Рішення y = " << sum << endl;

}
void qwerty::setX()

{

double str;

do {

cout << endl << "Введіть x: ";

cin >> str;

// Перевірка на вірність значень

if (str < 0)

{

cout << endl << "Невiрно введені дані!";

continue; //Починає новий цикл

}

else

{

x = str;

break; //Вихід з циклу

}

} while (true);

}
void qwerty::setA()

{

double str;

do {

cout << endl << "Введіть коефіцієнт А ";

cin >> str;

// Перевірка на вірність значень

if (str == (long long)str || str < 0)

{

cout << endl << "Невiрна введені дані!";

continue; //Починає новий цикл

}

else

{

first = str;

break; //Вихід з циклу

}

} while (true);

}

void qwerty::setB()

{

double str;

do {

cout << endl << "Введіть коефіцієнт B ";

cin >> str;

// Перевірка на вірність значень

if (str == (long long)str || str < 0)

{

cout << endl << "Невiрна введені дані!";

continue; //Починає новий цикл

}

else

{

second = str;

break; //Вихід з циклу

}

} while (true);

}
int qwerty::getX() const

{

return x; //Повертає значення поля x

}
float qwerty::getA() const

{

return first; //Повертає значення поля first

}

float qwerty::getB() const

{

return second; //Повертає значення поля second

}


Вікна виконання програми представлені на рисунках 1.1 – 1.2.

Рисунок 1.1 – Введення значень та перевірка на коректність


Рисунок 1.2 – Введення та виконання для другого об'єкту
Висновок: в ході виконання завдання я навчився проектувати структуру класу та розробляти клас, використовувати специфікатори доступу до елементів  класу, враховувати правила опису методів класу та порядок роботи з методами класу, створювати методи класу, реалізовувати контроль даних класу та розробляти програму з різним оголошенням об'єктів.

ЗАВДАННЯ № 2
Перевірки даних на допустимість. Проектування конструкторів та деструктора. Конструктор за замовчанням. Розробка класу з елементом-масивом  та його  конструкторів. Розробка методів класу для  одномірного елементу-масиву.

 

Мета: закріпити навички з реалізації перевірок даних на допустимість в класі, навчитись проектувати конструктори, в тому числі за замовчуванням, та деструктор, розробляти клас з членом класу одномірним масивом  та відповідні методи для роботи з ним.
Хід роботи
Постановка задачі

 

В завданні необхідно виконати наступне. Користувальницький клас Array повинен працювати з одновимірним числовим масивом і містити поля , одне з яких - значення розмірності масиву, друге поле задає масив. Поля повинні бути закритими. Масив створюється в пам'яті динамічно. Клас містить методи : конструктори за замовчуванням та з параметрами, де створюється динамічний масив (операція new для створення), деструктор, в якому виконується звільнення пам'яті. Крім цього, клас містить також методи :

  • виведення на екран поточного стану масиву: void print (...) ;

  • установлення (переустановлення) поточного стану та кiлькості елементiв масиву: void set (... ) ;

  • методи, які виконують дії з масивами, зазначені для кожного варіанта (якщо завдання вирішити не можна, то повідомте програмно про це).

Запропонувати користувачу можливість повторного виконання програми з іншою розмірністю масиву.

У звіті продемонструвати роботу програми у випадку, якщо є відповідні елементи в масиві, якщо є один, якщо немає, тощо.

Варіант № 6

Обчислити:

1. Добуток елементів масиву з номерами, кратними трьом.

2. Суму елементів масиву, розташованих між першим і останнім максимальними за модулем елементами.

 

Програмний код програми міститься відповідно у лістингах 2.1 − 2.3.

Лістинг 2.1 – Код головної функції

#include "function.h"

#include

#include

#include

#include

using namespace std;

int main()

{

system("color 04");

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

function A;

int razm, g[50], f, h, i = 0, p = 1, data;

do {
system("cls");

p = 1;

while (p) {

cout << endl << "\t\tЗавдання 2" << endl;

cout << endl << " Введіть розмір масиву: ";

cin >> h;

cout << endl;

if (h > 0) p = 0;

else cout << endl << " Невірно,ви ввели не коректне число!";

}

razm = h;

A.CreateArr(razm);//створення масиву
for (int a = 0; a < razm; a++)

{

cout << " Введіть " << a + 1 << "-й елемент масиву: ";

cin >> g[i];

data = g[i];

A.SetArr(a, data);

i++;

}
A.print();//виведення масиву

A.Krat();//виконання першого завдання

A.Sum();//виконання другого завдання

cout << endl << " Запустити програму знову? (1 - так)";

cin >> f;

} while (f == 1);

cout << endl << " Кінець роботи!";

return 0;

}

Лістинг 2.2 – Специфікація класу function

#ifndef function_H

#define function_H

class function

{

private:

int* mas;

int size;

public:

function();//конструктор

virtual function();//деструктор

void CreateArr(int razm);//створення масива

void SetArr(int i, int Data);//присвоєння елементів

void print();//вивід масиву

void Krat();//находження кратного 3

void Sum();//находження суми

};

#endif

Лістинг 2.3 – Реалізація класу function
#include "function.h"

#include

#include

#include

using namespace std;

function::function() :size(0)//конструктор

{

mas = NULL;

}
void function::CreateArr(int razm)//введення розмірності масиву

{

mas = new int[razm];

size = razm;

}
void function::print()//виведення масиву

{
cout << endl << "\t\tВведений масив: " << endl;

for (int i = 0; i < size; i++)

cout << "\t" << mas[i];

cout << endl;

}
void function::SetArr(int i, int Data)

{

mas[i] = Data;

}
function::function()//деструктор

{

delete mas;

}
void function::Krat()//пошук номерів кратних 3.

{

system("pause");

system("cls");

print();

cout << endl << "\n\t\t1. Мінімальний елемент масиву за модулем \n" << endl;

int min = 0;

int j = 0;

min = mas[0];

int su = 0;

for (int i = 0; i < size; i++)

{

j++;

if (((j % 3 == 0)))

{

min = mas[i];

cout << "Число -> ";

cout << min <<" ";

cout < ";
for (int i = 0; i < size; i++)

{

if (abs(mas[i]) == min) cout << "\t" << i + 1;

}
su += mas[i];

cout << endl << "Сумма = "<< su;

}

cout << endl;

}
system("pause");

system("cls");

}
void function::Sum()//пошук суми елементів

{

print();

int prov = 0, sum = 0, negative = 0, k = 0, neg;

cout << endl << "\n 2. Сума елементів масиву, розташованих після першого негативного.\n\n";

if (size == 1)

{

cout << endl << " Не можливо підрахувати. Розмір масиву 1 елемент.";

return;

}
for (int i = 0; i < size; i++)

{

if (mas[i] < 0)

{

prov++;

}

}


for (int i = 0; i < size; i++)

{

if (abs(mas[i]) > negative)

{

negative = abs(mas[i]);

neg = i;

}

}

int i = 0;

k = 0;

for (i = neg + 1; i < size; i++)

{

sum += mas[i];

}

cout << "Максимальний елемент в масиві -> " << negative << endl << "Знаходитться на позиції -> (" << neg + 1 << ")" << endl;

cout << endl << "Сума елементів масиву розташованих між першим максимальним та останнім елементом масиву -> " << sum;

return;

}

Вікна виконання програми представлені на рисунках 2.1 – 2.4.



Рисунок 2.1 – введення та перевірка на корректність

,

Рисунок 2.2 – добуток елементів масиву з номерами, кратними трьом



Рисунок 2.3 – Пошук cуми елементів масиву, розташованих між першим і останнім максимальними за модулем елементами.


Рисунок 2.3 – Виконання програми коли введено 1 елемент масиву



Рисунок 2.4 – Завершення програми
Висновок: в ході виконання завдання я закріпив навички з реалізації перевірок даних на допустимість в класі, навчився проектувати конструктори, в тому числі за замовчуванням, та деструктор, розробляти клас з членом класу одномірним масивом  та відповідні методи для роботи з ним.

ЗАВДАННЯ № 3
Розробка програми з елементом класу – двомірним масивом. Розробка конструктору з параметрами.

 

Мета: навчитись розробляти програми з елементом класу двомірним масивом, використовувати конструктор з параметрами.
Хід роботи
Постановка задачі

 В завданні необхідно виконати наступне.  Користувальницький клас Array повинен містити конструктор з параметрами для створення динамічних масивів (операція new або інша) і установки початкових значень їх елементів: Array ( ...) ( реальні розміри масиву - кількість рядків і стовпців передається в конструктор через параметри).

Передбачити реалізацію конструктору за замовчуванням та конструктору копіювання.

Метод друку поточного стану масиву: void print (... ) ; Виконати з виведенням в табличному вигляді, надписами, межами та ін., використати форматоване виведення.

Метод перевстановлення поточного стану масиву: void set (... ), значення елементів вводяться користувачем. Передбачити використання перевірочних функцій, оформлених у вигляді власної бібліотеки (функцій в файлі *.h).

Метод, який вирішує поставлене завдання: void Run (... );

Скласти функцію (метод) Run(), яка дозволить виконати наступні дії з двомірними масивами (якщо завдання вирішити не можна, то повідомить про це). Передбачити дружню функцію для виведення результатів.

Варіант 6: Дана дійсна квадратна матриця. Сусідами елемента Aij є елементи Akl, де i-1<=k<=i+1, j-1<=l<=j+1 (k,l)!=(i,j). Елемент матриці називається локальним мінімумом, якщо він менший, ніж всі його сусіди. Вивести локальні мінімуми матриці.

Програмний код програми міститься відповідно у лістингах 3.1 − 3.5.

 

Лістинг 3.1 – Код головної функції

#include "Matrix.h"

#include
int main()

{

using namespace std;

Matrix mat;

mat.set();

mat.print();

mat.run();

return 0;



Лістинг 3.2 – Реалізація класу Arrei

#pragma once

#include

class Matrix

{

private:

float** arr;

int size;

public:

Matrix();

Matrix(int);

Matrix(const Matrix& c);

Matrix();

Matrix& operator = (const Matrix& c);

void print()const;

void set();

void run();

}; 

Лістинг 3.3 – Специфікація класу Arrei

#include "Matrix.h"
Matrix::Matrix()

{

arr = nullptr;

}
Matrix::Matrix(int i)

{

size = i;

arr = new float* [size];

for (int i = 0; i < size; i++)

{

arr[i] = new float[size];

}

}
Matrix::Matrix(const Matrix& c)

{

size = c.size;

if (c.arr)

{

arr = new float* [size];

for (int i = 0; i < size; i++)

{

arr[i] = new float[size];

}

for (int i = 0; i < size; i++)

{

for (int j = 0; j < size; j++)

{

arr[i][j] = c.arr[i][j];

}

}

}

else

{

size = 0;

}

}
Matrix::Matrix()

{

for (int i = 0; i < size; i++)

{

delete arr[i];

}

delete arr;

}
Matrix& Matrix::operator=(const Matrix& c)

{

if (this == &c)

return *this;
for (int i = 0; i < size; i++)

{

delete arr[i];

}

delete arr;
size = c.size;
if (c.arr)

{

arr = new float* [size];

for (int i = 0; i < size; i++)

{

arr[i] = new float[size];

}

for (int i = 0; i < size; i++)

{

for (int j = 0; j < size; j++)

{

arr[i][j] = c.arr[i][j];

}

}

}

else

{

size = 0;

}
return *this;

}
void Matrix::print() const

{

using namespace std;

for (int i = 0; i < size; i++)

{

for (int j = 0; j < size; j++)

{

cout << arr[i][j] << " ";

}

cout << endl;

}

}
void Matrix::set()

{

using namespace std;

setlocale(LC_ALL, "Rus");

while(size == 0)

{

cout << "Введите размер квадратной матрицы"<
cin >> size;

cout << "Введите матрицу" << endl;

}

if (arr==nullptr)

{

arr = new float* [size];

for (int i = 0; i < size; i++)

{

arr[i] = new float[size];

}

}

for (int i = 0; i < size; i++)

{

for (int j = 0; j < size; j++)

{

cin >> arr[i][j];

}

}

}
void Matrix::run()

{

using namespace std;

cout << "Локальные минимумы матрицы = " << endl;

for (int i = 0; i < size; i++)

{

for (int j = 0; j < size; j++)

{

if (i - 1 >= 0)

{

if (arr[i][j] >= arr[i - 1][j])

continue;

}

if (i + 1 < size)

{

if (arr[i][j] >= arr[i + 1][j])

continue;

}

if (j - 1 >= 0)

{

if (arr[i][j] >= arr[i][j-1])

continue;

}

if (j + 1 < size)

{

if (arr[i][j] >= arr[i][j + 1])

continue;

}

std::cout << arr[i][j]<<" ";

}

}

}
 

 

Вікна виконання програми представлені на рисунках 3.1.


Рисунок 3.1 – Виведення меню програми
Висновок: в ході виконання завдання я закріпив навички з розробкою програми з елементом класу двомірним масивом, використовувати конструктор з параметрами.
ЗАВДАННЯ № 4

Розробка методів класу у відповідності з завданням. Розробка програми, яка працює з об’єктами класу у відповідності з завданням.

Мета: закріпити навички з розробки та використання методів класу, розробити програму, яка працює з об’єктами класу у відповідності з завданням.

Хід роботи

Постановка задачі.

Повинні бути реалізовані наступні методи:

– метод ініціалізації

– введення з клавіатури

– виведення на екран

Всі завдання повинні бути реалізовані таким чином: тип даних представляється як клас із закритими полями, де функціональність класу реалізується як методи класу.

У класі повинен бути реалізований програмний код, який дозволяє, наприклад, «складати» об’єкти, тобто отримувати третій об’єкт, дані якого відповідають «сумі» об’єктів, або «віднімати» об’єкти, тобто отримувати третій об’єкт, дані якого відповідають «різниці» об’єктів, тощо.

Використати метод класу для виведення стану об’єкту.

Варіант № 6.

Створити клас vector3D для роботи з двома векторами, кожен з яких задається трійкою координат. Програма повинна виконувати для об’єктів:

додавання (Сума векторів - це вектор з координатами , рівними сумі однойменних координат першого і другого векторів).

Програмний код програми міститься відповідно у лістингах 4.1 – 4.5.

Лістинг 4.1 – Proverka.h файл заголовок классу, в якому містяться методи для перевірки даних що будуть введені

#pragma once

#include

#include

#include

#include

using namespace std;

class Proverka//Класс в котором находятся статические методы которые не требуют создания обьекта для использоввания

{

public:

static int VvodInt();//Метод для контроля вводимых цэлочисленных данных

static float VvodFloat();//Метод для контроля вводимых данных с плавающей точкой(возможна запись экспонентного вида)

static size_t VvodSize_t();//Метод для контроля вводимых цэлочисленых данных польше нуля

};

Лістинг 4.2 – Proverka.cpp файл реалізації класу з перевірками

#include "Proverka.h"

int Proverka::VvodInt()

{

string s;

while (true)

{

cin >> s;

size_t dlinna = 0;

if (s[dlinna] == '-')

++dlinna;

if (s[dlinna] == '\0' || (s.find_first_not_of("0123456789", dlinna) == string::npos) == 0)

{

cout << endl << "Некоректные данные. Попробуйте еще раз : ";

}

else

{

break;

}

}

return stoi(s);

}

float Proverka::VvodFloat()

{

string str;

while (true)

{

cin >> str;

int k = 0;

int s1 = 0;

bool proverka1 = 0, proverka2 = 0;

size_t dlinna = 0;

size_t dlinna1 = 0;

size_t dlinna2 = 0;

if (str[dlinna] == '-')

++dlinna;

for (int i = 0; i < str.length(); i++)

{

if ((str[i] == 'e') || (str[i] == 'E')) { s1 = i; break; }

}

if (s1 != 0)

{

string r1 = str.substr(0, s1);

string r2 = str.substr(s1);

for (int i = 0; i < r2.length(); i++)

{

if (r1[i] == ',') k++;

}

if ((k > 1) || (r1[dlinna] == '\0') || (r1[dlinna] == ',') || (r2.find_first_not_of("0123456789,", dlinna) == string::npos) == 0)

{

cout << endl << "Некоректные данные. Попробуйте еще раз : ";

}

else

{

proverka1 = 1;

}

int m = 0;

if (r2[dlinna2] == 'e' || r2[dlinna2] == 'E')

++dlinna2;

for (int i = 0; i < r2.length(); i++)

{

if ((r2[i] == '-') || (r2[i] == '+')) m++;

}

if ((m >= 2) || (r2[dlinna2] == '\0') || (r2[dlinna2] == 'E') || (r2[dlinna2] == 'e') || (r2.find_first_not_of("0123456789-+", dlinna2) == string::npos) == 0)

{

cout << endl << "Некоректные данные2. Попробуйте еще раз : ";

}

else

{

proverka2 = 1;

}

if ((proverka1 == 1) && (proverka2 == 1))break;

}

else

{

for (int i = 0; i < str.length(); i++)

{

if (str[i] == ',') k++;

}

if ((k > 1) || (str[dlinna] == '\0') || (str[dlinna] == ',') || (str.find_first_not_of("0123456789,", dlinna) == string::npos) == 0)

{

cout << endl << "Некоректные данные. Попробуйте еще раз : ";

}

else

{

break;

}

}

}

return stof(str);

}

size_t Proverka::VvodSize_t()

{

string s;

while (true)

{

cin >> s;

if ((s.find_first_not_of("0123456789") == 0))

{

cout << endl << "Некоректные данные. Попробуйте еще раз : ";

}

else if (s.size() == 1 && s[0] == '0')

{

cout << endl << "Некоректные данные. Попробуйте еще раз : ";

}

else

{

break;

}

}

return stoi(s);

}

Лістинг 4.3 – Vector3D.h файл заголовок основного класу що потрібен за завданням

#pragma once

#include "Proverka.h"

class Vector3D

{

static int sum;// обьщее поле которое означает скалярное произведение векторов

int x, y, z;//координаты которыми задается вектор

public:

Vector3D();//Конструктор по умолчанию в котором реализован ввод данных в поля обьекта

Vector3D(int, int, int);//Конструктор который принимает 3 параметра Следовательно х, у, z

Vector3D(const Vector3D&);//Конструктор который принимает как параметр другой обьект и создает его копию

Vector3D();//Деструктор для освобждения памяти

void SetterVectora();//Метод для перезаписи данных про вектор

void Print();//Метод вывода координат вектора

Vector3D& operator * (const Vector3D&);// НЕ НАДО ДЕЛАТЬ ПРИСВОЕНИЕ УМНОЖЕНИЕ ПОЛНОСТЬЮ АВТОНОМНО ПРИМЕР: "Vector1 * Vector2"

static void SetSum(int);//Статический метод в котором данные переданые как параметр записываются в статическую переменную скаляр

static int GetSum();//Вывод статической переменной скаляр

};

Лістинг 2.4 – Vector3D.cpp файл реалізації основного класу що потрібен за завданням

#include "Vector3D.h"

#include "Proverka.h"

Vector3D::Vector3D() : x(0), y(0), z(0)

{

cout << endl << "Введите значение х : ";

x = Proverka::VvodInt();

cout << endl << "Введите значение у : ";

y = Proverka::VvodInt();

cout << endl << "Введите значение z : ";

z = Proverka::VvodInt();

}

Vector3D::Vector3D(int xx, int yy, int zz) : x(xx), y(yy), z(zz)

{

}

Vector3D::Vector3D(const Vector3D& coper) : x(coper.x), y(coper.y), z(coper.z)

{

}

Vector3D::Vector3D()

{

}

void Vector3D::SetterVectora()

{

cout << endl << "Введите значение х : ";

x = Proverka::VvodInt();

cout << endl << "Введите значение у : ";

y = Proverka::VvodInt();

cout << endl << "Введите значение z : ";

z = Proverka::VvodInt();

}

void Vector3D::Print()

{

cout << endl << "Координаты задающие вектор : x = " << x << ", y = " << y << ", z = " << z;

}

Vector3D& Vector3D::operator * (const Vector3D& right)

{

int summ = (x + right.x) + (y + right.y) + (z + right.z);

SetSum(summ);

return *this;

}

void Vector3D::SetSum(int s)

{

sum = s;

}

int Vector3D::GetSum()

{

return sum;

}

Лістинг 2.5 – Головна функція

#include

#include "Proverka.h"

#include "Vector3D.h"

using namespace std;

int Vector3D::sum;

int main()

{

int z;

setlocale(0, "");

do

{

cout << endl << "Процесс создания первого вектора!";

Vector3D vector1;

cout << endl << "Процесс создания второго вектора!";

Vector3D vector2;

cout << endl << "Для первого вектора : ";

vector1.Print();

cout << endl << "Для второго вектора : ";

vector2.Print();

vector1* vector2;

cout << endl << "Сума этих двух векторов = " << Vector3D::GetSum() << "\t\t((x1+x2)+(y1+y2)+(z1+z2))";

Vector3D::SetSum(0);

vector1.Vector3D();

vector2.Vector3D();

cout << endl << "Продолжить выполнение программы?(1 - да, 0 - нет) : ";

for (; true;)

{

z = Proverka::VvodInt();

if (z != 1 && z != 2)

{

cout << endl << "Некоректные данные!! Попробуйте еще раз : ";

continue;

}

break;

}

} while (z);

}

Вікна виконання програми представлені на рисунках 4.1 – 4.7.



Рисунок 4.1 – Результат роботи перевірки на коректність введення даних про координати вектора



Рисунок 4.2 – Результат введення даних про два вектори які потрібні за завданням



Рисунок 4.3 – Виведення даних про два вектори



Рисунок 4.4 – Результат розрахунку суми



Рисунок 4.5 – Результат розрахунку суми



Рисунок 4.6 – Результат розрахунку суми

Висновок: в ході виконання завдання я закріпив навички з розробки та використання методів класу, розробив програму, яка працює з об’єктами класу у відповідності з завданням.
ЗАВДАННЯ № 5
Конструктор копіювання. Розробка класу для завдання з масивом об’єктів. Розробка конструкторів класу для завдання з масивом об’єктів. Розробка методів класу для завдання з масивом об’єктів
Мета: закріпити навички з використання конструктора копіювання, проектування та розробки методів класу відповідно до завдання, навчитись використовувати масиви об’єктів в програмі.
Постановка задачі
В завданні необхідно виконати наступне. Масив повинен бути оголошений як через ім’я, так і через вказівник. Елементами класу повинні бути в тому числі текстові дані. Об’єкти класу повинні створюватись в тому числі і динамічно, під час виконання програми.

У завданні, обов'язково повинні бути реалізовані наступні методи:

– метод ініціалізації;

– введення даних з клавіатури;

– виведення даних на екран.

Завдання повинне бути реалізовано таким способом: тип даних представляється як клас із закритими полями, де функціональність класу реалізується як методи класу.

Використати метод класу для виведення стану об’єкту.

Варіант № 3

Завдання:

1 Оголосити клас з ім'ям STUDENT, що містить наступні поля:

  • прізвище та ініціали;

  • номер групи;

  • успішність (масив з п'яти елементів).

2. Написати програму, що виконує наступні дії:

  • введення з клавіатури даних в масив, що складається з вказаної кількості об'єктів типу STUDENT; записи мають бути впорядковані але алфавітом;

  • виведення на екран прізвищ і номерів груп для всіх студентів, які мають хоча б одну оцінку 2;

  • якщо таких студентів немає, вивести відповідне повідомлення.


ХІД РОБОТИ
Програмний код програми міститься відповідно у лістингах 5.1 − 5.4.
Лістинг 5.1 – Код головної функції

#include "WRKER.h"

#include "Check.h"

#include

#include

using namespace std;
int main()

{

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

Check temp;

int am(0), count(0);

cout << "Введите количество роботников: ";

am = temp.LilCheck(0);

WRKER* Stud = new WRKER[am];

for (int a = 0; a < am; a++)

{

cout << endl << "Введите информацию о роботнике №" << a + 1;

Stud[a].Enter();

cout << endl << "Данные введены!" << endl;

system("pause");

system("cls");
for (int a = 0; a < am - 1; a++)

{

for (int b = a + 1; b < am; b++)

{

if (Stud[a].get_Name() > Stud[b].get_Name())

{

Stud[a].swap(Stud[b]);

}

}

}

for (int a = 0; a < am; a++)

{

cout << endl;

cout << endl << "Роботник №" << a + 1;

Stud[a].Show();

}

cout << endl << "\nДанные о роботниках которые имеют стаж роботы больше чем: ";

for (int a = 0; a < am; a++)

{

cout << endl;

count += Stud[a].Losers();

}

if (count == 0)

{

cout << endl << "Небыло роботников с таким стажем ";

}

delete[]Stud;

}
Лістинг 5.2 – Клас WRKER

#pragma once

#include

class WRKER

{

std::string Name;

std::string group;

int* grades;

public:

WRKER();

WRKER(const WRKER&);

WRKER();

void Enter();

void Show();

int Losers();

void swap(WRKER&);

std::string get_Name();

void set_Name();

void set_group();

void set_grades();

};

Лістинг 5.3 – Реалізація класу WRKER

#include "WRKER.h"

#include "Check.h"

#include

using namespace std;

WRKER::WRKER() : Name(""), group("")

{

grades = new int[1];

for (int a = 0; a < 1; a++)

{

grades[a] = 0;

}

}

WRKER::WRKER(const WRKER& copy) : Name(copy.Name), group(copy.group)

{

for (int a = 0; a < 5; a++)

{

this->grades[a] = copy.grades[a];

}

}

WRKER::WRKER()

{

delete[]grades; //Очистка памяти

}

void WRKER::Enter()

{

std::cin.ignore();

std::cout << std::endl << "Введите Фамилию и инициалы роботника: ";

set_Name();

std::cout << std::endl << "Введите должность: ";

set_group();

std::cout << std::endl << "Введите год поступления на работу: ";

set_grades();

}
void WRKER::Show()

{

std::cout << std::endl << "Фамилия:\t" << Name;

std::cout << std::endl << "Должность: \t" << group;

std::cout << std::endl << "Год поступления: \t " << *grades;
}

int WRKER::Losers()

{

int b;

cin >> b;

for (int a = 0; a < 2022; a++)

{

if (grades[a] + b < 2022)

{

std::cout << std::endl << "Фамилия:\t" << Name;

std::cout << std::endl << "Должность: \t" << group;

return 1;

}

}

return 0;

}

void WRKER::swap(WRKER& right)

{

WRKER temp;

temp.Name = this->Name;

temp.group = this->group;

for (int a = 0; a < 5; a++)

{

temp.grades[a] = this->grades[a];

}

this->Name = right.Name;

this->group = right.group;

for (int a = 0; a < 5; a++)

{

this->grades[a] = right.grades[a];

}

right.Name = temp.Name;

right.group = temp.group;

for (int a = 0; a < 5; a++)

{

right.grades[a] = temp.grades[a];

}

}

std::string WRKER::get_Name()

{

return Name;

}

void WRKER::set_Name()

{

do {

getline(std::cin, Name);

if (Name.length() == 0)

{

std::cout << std::endl << "Введите данные: ";

std::cin.clear();

std::cin.ignore(10000, '\n');

}

else break;

} while (true);

}

void WRKER::set_group()

{

do {

getline(std::cin, group);

if (group.length() == 0)

{

std::cout << std::endl << "Введите данные: ";

std::cin.clear();

std::cin.ignore(10000, '\n');

}

else break;

} while (true);

}
void WRKER::set_grades()

{

Check temp;

for (int a = 0; a < 1; a++)

{

std::cout << std::endl << a << ". ";

do {

grades[a] = temp.LilCheck(0);

if (grades[a] > 0 && grades[a] <= 2022) break;

else std::cout << std::endl << "Введите коректную дату(до 2022): ";

} while (true);

}

}


Лістинг 5.4 – клас Check

#pragma once

#include

#include
class Check

{

public:

bool isUint(const std::string s)

{

size_t offset = 0;

if (s[offset] == '-')

++offset;

return s.find_first_not_of("0123456789", offset) == std::string::npos;

}
bool isUflo(std::string s)

{

int dot = 0, expo = 0, g = 0;

bool IsExp = 0;

size_t offset = 0;

if (s[offset] == '-') {

++offset; g++;

}

if (s[0] == '.') return 0;

for (int a = 0; a < s.length(); a++)

{

if (s[a] == '.') { dot++; s.erase(a, 1); }

if (s[a] == 'e') { expo = a; IsExp = 1; break; }

if (s[a] == 'E') { expo = a; IsExp = 1; break; }

}

if (s[s.length() - 1] == '.' || s[s.length() - 1] == '-' || s[s.length() - 1] == 'e' || s[s.length() - 1] == 'E') return 0;

if (s[g] == '.' || s[g] == 'e' || s[g] == 'E') return 0;

if (dot > 1) return 0;

if (IsExp == 1)

{

if (s[expo + 1] == '-') s.erase(expo + 1, 1);

else if (s[expo + 1] == '+') s.erase(expo + 1, 1);

s.erase(expo, 1);

}

return s.find_first_not_of("0123456789", offset) == std::string::npos;

}
char isUSmart(const std::string s)

{

return s.find_first_not_of("0123456789") == std::string::npos;

}
int check()

{

std::string s;

int cho;

do

{

std::cin >> s;

bool prov = isUint(s);

if (s.length() == 1 && s[0] == '-')

{

prov = 0;

}

if (prov != 0)

{

cho = stoi(s);

break;

}

else std::cout << std::endl << "Неверный ответ, попробуйте снова: ";

std::cin.clear();

std::cin.ignore(10000, '\n');

} while (true);

return cho;

}
int LilCheck(bool Z)

{

std::string s;

int cho;

do {

std::cin >> s;

bool prov = isUSmart(s);

if (Z == 0)

{

if (s.length() == 1 && s[0] == '0')

{

prov = 0;

}

}

if (prov != 0)

{

cho = stoi(s);

break;

}

else std::cout << std::endl << "Неверный ответ, попробуйте снова: ";

std::cin.clear();

std::cin.ignore(10000, '\n');

} while (true);

return cho;

}
float checkFlo()

{

std::string s;

float cho;

do

{

std::cin >> s;

bool prov = isUflo(s);

if (s.length() == 1 && s[0] == '-')

{

prov = 0;

}

if (prov != 0)

{

cho = stof(s);

break;

}

else std::cout << std::endl << "Неверный ответ, попробуйте снова: ";

std::cin.clear();

std::cin.ignore(10000, '\n');

} while (true);

return cho;

}

};
Вікна виконання програми представлені на рисунках 5.1 – 5.4.


Рисунок 5.1 – Виведення відсортованих за алфавітом даних (Результат роботи методу Show)



Рисунок 5.2 – Виведення даних про студентів які мають хочаб одну двійку (Результат роботи методу Losers)



Рисунок 5.3 – Результат роботи методу Losers якщо небуло студентів з оцінкою 2



Рисунок 5.4 – Результат роботи методу LilCheck класу Check

Висновок: в ході виконання завдання я закріпив навички з використання конструктора копіювання, проектування та розробки методів класу відповідно до завдання, навчився використовувати масиви об’єктів в програмі.


написать администратору сайта