Professional Documents
Culture Documents
Lab 1 Prog Done
Lab 1 Prog Done
Вико
нав студент групи ІР-22
Музика Марк Сергійович
Викладач : к.ф.-м.н., ас. Пономарнеко Роман
Миколайович
Київ – 2021
ЗМІСТ
1. Постановка завдання 3
2. Аналітичні викладки 3
3. UML діаграма класу 4
4. Алгоритм вирішення розрахункової частини 5
5. Код програми 5
6. Тестування програми 11
7. Висновок 11
Лабораторна робота №1
Тема: Класи С++.
Мета: вивчити основні концепції об'єктно-орієнтованого програмування.
Вивчити особливості використання класів і об'єктів, а також особливості
застосування конструкторів і деструкторів.
Етапи виконання завдання:
Розробити покроковий алгоритм вирішення розрахункової частини завдання
і підзадач (при необхідності). Розробити UML діаграму класів. Виконати
програмну реалізацію завдання відповідно до варіанту. Прототипи класів
повинні містяться в окремому * .h- файлі. У програмі обов'язково передбачити
висновок інформації про виконавця роботи (ПІБ), номер варіанта, обраному
рівні складності і завданні. Передбачити можливість повторного запуску
програми (запит про бажання вийти з програми, або продовжити роботу).
Ключові моменти програми обов'язково повинні містити коментарі.
Завдання 1
Аналітичні викладки:
Клас - різновид абстрактного типу даних в об'єктно-орієнтованому
програмуванні, що характеризується способом свого побудови. Поряд з
поняттям «об'єкта» клас є ключовим поняттям в ООП.
Клас - це визначений користувачем тип. Клас повинен бути оголошений до
того, як буде оголошено хоча б и одна змінна цього класу.
Формат опису класу включає в себе:
типи даних, які є елементами-даними класу (атрибутами);
специфікаціями доступу до даних;
функції, що визначають методи обробки елементів-даних;
конструктори і деструктор.
Конструктор ініціалізації - в тілі конструктора елементам даних
присвоюються значення, ініціалізація можлива через введення,
присвоювання, список ініціалізації.
Конструктор копіювання - створює новий об'єкт на основі існуючого
(фактично копію) . Як параметр такий конструктор використовує константну
посилання на існуючий об'єкт.
Функції-елементи класу - це функції, які мають доступ до будь-яких інших
функцій-елементів та до будь-яких елементів-даними. Найбільш часто
використовуються функції, що реалізують арифметичні методи, методи
відображення і порівняння даних. Особливим видом функцій-елементів є
конструктори і деструктори.
Деструкція - це спеціальна функція-елемент, що спрацьовує при знищенні
об'єкта класу і звільняє займану ним пам'ять. Ім'я деструктора збігається з ім'ям
класу, але перед ним записують символ ~.
Якщо пряма проходить через дві точки A(x1, y1) і B(x2, y2), такі що x1 ≠ x2 і y1 ≠
y2, то рівняння прямої можна знайти, використовуючи наступну формулу
x - x1 y - y1
=
x2 - x1 y2 - y1
Вираховуємо положення
точок, які потрібно
розподілити на підмножини,
відносно проведеної прямої
Код програми:
Lab1.cpp:
#include "pch.h"
#include "Point.h"
#include <iostream>
#include <string>
#include <ctime>
int main()
{
setlocale(0, "rus");
char p = 'y';
char flag;
int N, M;
int temp_x, temp_y;
while (p == 'y')
{
cout << "Введiть розмiр площини: ";
cin >> M;
if (flag == 's')
{
cout << "Введiть координати точки, спочатку x потiм y через
Enter: " << endl;
cin >> temp_x;
cin >> temp_y;
while ((temp_x > plane->getM()) || (temp_x < 0) || (temp_y >
plane->getM()) || (temp_y < 0))
{
cout << "Повторiть спробу: ";
cin >> temp_x;
cin >> temp_y;
}
plane->setPoint(temp_x, temp_y);
plane->print();
cout << endl;
}
else if (flag == 'd')
{
cout << "Введiть координати точки, спочатку x потiм y через
Enter: " << endl;
cin >> temp_x;
cin >> temp_y;
while ((temp_x > plane->getM()) || (temp_x < 0) || (temp_y >
plane->getM()) || (temp_y < 0))
{
cout << "Повторiть спробу: ";
cin >> temp_x;
cin >> temp_y;
}
plane->delPoint(temp_x, temp_y);
plane->print();
cout << endl;
}
plane->~Point();
plane_copy->~Point();
return 0;
}
Point.h:
#pragma once
#include <string>
class Point
{
private:
int Max_Points_Number = 1000; //number of points
int n; //number of points
int m; //array size
int** mas; //array
int* x_array; //array of point's x-axis
int* y_array; //array of point's y-axis
void random(void); //void for points random creating
int findPoint(int x, int y) const; //function for find point by it's cordinates
public:
Point(int N, int M);
Point(const Point& obj);
~Point(void);
Point.cpp:
#include "pch.h"
#include "Point.h"
#include <iostream>
#include <ctime>
#include <string>
Point::~Point(void)
{
for (int i = 0; i < m; i++)
if (mas)
delete[] mas[i];
if (mas)
delete[] mas;
if (x_array)
delete[] x_array;
if (y_array)
delete[] y_array;
}
void Point::random(void)
{
srand(static_cast<unsigned int>(time(0)));
int i, j;
bool p;
if (temp_index != -1)
{
mas[y][x] = 0;
x_array[temp_index] = -1;
y_array[temp_index] = -1;
n--;
}
}
void Point::getPoint(void)
{
for (int count = 0; count < n; count++)
cout << "Точка №" << count + 1 << " має координати: " << "х = " <<
x_array[count] << ", y = " << y_array[count] << endl;
}
string Point::lines(void)
{
// I calculate a line by using formula of two points
// I choose pair of points (0 and 1) and drawing a line
// After that I calculate a location of poits (1) relatively to drawn line
// If value of points in both parts are equal then I make the equation
double left, right;
int points_left, points_right;
string solution;
if (temp_var >= 0)
solution = solution + " + " +
to_string(temp_var);
else
solution = solution +
to_string(temp_var);