Лабораторная работа №1 «классы» Дисциплина: Объектно-ориентированное программирование



Скачать 66.19 Kb.
Дата09.10.2019
Размер66.19 Kb.
Название файлалаба1.docx
Учебное заведениеПетербургский государственный университет
ТипЛабораторная работа

Федеральное государственное образовательное бюджетное учреждение высшего образования “Санкт-Петербургский государственный университет телекоммуникаций имени профессора Михаила Александровича Бонч-Бруевича”

Факультет “Инфокоммуникационных сетей и систем”.

Кафедра “Программной инженерии и вычислительной техники”.

Лабораторная работа №1

«КЛАССЫ»

Дисциплина:

Объектно-ориентированное программирование

Вариант: 8-14



Выполнил:

Студент 2-го курса

Гр. ИКПИ-84

Подковыров Денис Евгеньевич



Принял:

Петрова Ольга Борисовна

_________________
Санкт-Петербург

2019 г.


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

Цель настоящей лабораторной работы состоит в ознакомлении с правилами организации классов, принятыми при программировании на языке С++. В процессе выполнения настоящей работы студент должен разработать два класса и написать тестовые программы для демонстрации их работоспособности.

Задача 8


В задачах настоящего раздела необходимо разработать класс, который может рассматриваться как улучшенный одномерный массив. Одним из “улучшений”, которые должны быть предусмотрены в разрабатываемых классах, является наличие так называемого “счетного” режима. При работе в счетном режиме производится подсчет количества элементов, которые хранятся в массиве. Для реализации такого режима в классе следует предусмотреть специальное поле.
Разрабатываемый класс должен предусматривать выполнение следующих операций:

  1. копирование массивов,

  2. ввод элементов массива с клавиатуры,

  3. вывод элементов массива на экран дисплея,

  4. добавка элемента в конец занятой части массива,

  5. удаление части массивов; удаляемые элементы задаются значением индекса, с которого необходимо начать удаление и количеством удаляемых элементов,

  6. вычисление произведения элементов массива.




  1. Реализация

//myArray.h//


class myArray { 
private: 
int size; 
int maxSize; 
int* array; 
void alloc_new(); 

public: 
myArray(); 
myArray(int); 
myArray(const myArray&); 
~myArray(); 

void push_back(int); 
int getSize(); 
int operator[](int); 
void print(); 
void del(int from, int count); 
void input(); 
int multiply(); 

}; 

//myArray.cpp//



using namespace std; 

myArray::myArray() { 
maxSize = 20; 
size = 0; 
array = new int[maxSize]; 


myArray::myArray(int i) { 
maxSize = i; 
array = new int[maxSize]; 
size = 0; 


myArray::myArray(const myArray& a) { 
maxSize=a.maxSize; 
size = a.size; 
array = new int[maxSize]; 


for(int i=0; i array[i] = a.array[i]; 



myArray::~myArray() { 
delete[] array; 


void myArray::push_back(int i) { 
if(size+1>maxSize){ 
alloc_new(); 

array[size] = i; 
size++; 


int myArray::operator[](int i){ 
return array[i]; 



void myArray::alloc_new() { 
maxSize = size*2; 
int* tmp = new int[maxSize]; 

for(int i=0; i tmp[i] = array[i]; 


delete[] array; 
array=tmp; 


int myArray::getSize() { 
return size; 


void myArray::print() { 
for(int i=0; i cout<
cout<

int myArray::multiply() { 
int res=1; 
for(int i=0; i res*=array[i]; 

return res; 


void myArray::del(int from, int count) { 
int* temp = array; 
array = new int[maxSize]; 
int t=0; 
for(int i=0; i if (i < from || i > from + count - 1) { 
cout< array[t] = temp[i]; 
t++; 


size=t; 


void myArray::input() { 
int tmp; 
while(1){ 
cin>>tmp; 
if(tmp == -1)  break; 
this->push_back(tmp); 

Задача 14

Рациональные числа – это множество частных вида P / Q, где P и Q – целые числа, причем Q != 0. Число P называется числителем, а Q – знаменателем.

Такое представление чисел не является однозначным. Например,

2 / 5 == 4 / 10 == 12 / 30.

Обычно результат вычислений с рациональными числами приводят к так называемой редуцированной форме, когда числитель и знаменатель не имеют общего знаменателя. Чтобы выполнить преобразование рационального числа к редуцированной форме, числитель и знаменатель необходимо разделить на их наибольший делитель(GCD, greatest common denominator).

Разработанный класс(Rational) должен обеспечить выполнение следующих операций:


  1. конструктор умолчания.

  2. конструктор с параметрами.

  3. сложение,

  4. вычитание,

  5. умножение,

  6. деление,

  7. сравнения на равенство и неравенство.

  8. отношения.

вывод рационального числа на экран дисплея.

1Реализация

//rational.h//

class rational {

private:

int p;


int q;

int gcd(int a, int b);

int lcm(int a, int b);

public:


rational();

rational(int p, int q);

rational operator+(rational& r);

rational operator-(rational& r);

rational operator*(rational& r);

rational operator/(rational& r);

bool operator==(rational r);

friend std::ostream &operator<<(std::ostream &os, const rational &rational);

};

//rational.cpp//



#include
#include "headers/rational.h"
#include

using namespace std;

int rational::gcd(int a, int b) {
if (b == 0)
return a;
else
return gcd (b, a % b);
}

int rational::lcm(int a, int b) {


return abs(a*b)/gcd(a,b);
}

rational::rational() {


p=1;
q=1;
}

rational::rational(int p, int q) {


int thisGcd = gcd(p,q);
this->q = q/thisGcd;
this->p = p/thisGcd;
}

rational rational::operator+(rational &r) {


int t = lcm(this->q, r.q);
int newP;
newP = p*(t/q) + r.p*(t/r.q) ;

return rational(newP,t);


}

rational rational::operator-(rational &r) {


int t = lcm(this->q, r.q);
int newP;
newP = p*(t/q) - r.p*(t/r.q) ;

return rational(newP,t);


}

rational rational::operator*(rational &r) {


return rational(p*r.p, q*r.q);
}

rational rational::operator/(rational &r) {


return rational(p*r.q,q*r.p);
}

ostream &operator<<(ostream &os, const rational &rational) {


if(rational.q==1){
os<}else {
os << rational.p << "/" << rational.q;
}
return os;
}

bool rational::operator==(rational r) {


if(this->p==r.p){
return true;
}
return false;
}


Поделитесь с Вашими друзьями:


База данных защищена авторским правом ©genew.ru 2017
обратиться к администрации

    Главная страница
Контрольная работа
Курсовая работа
Лабораторная работа
Рабочая программа
Методические указания
Теоретические основы
Практическая работа
Методические рекомендации
Пояснительная записка
Общая характеристика
Учебное пособие
Общие сведения
История развития
Федеральное государственное
Теоретическая часть
Практическое задание
Физическая культура
Теоретические аспекты
Направление подготовки
Дипломная работа
государственное бюджетное
Образовательная программа
Техническое задание
Техническое обслуживание
Общие положения
квалификационная работа
Выпускная квалификационная
учебная программа
Методическая разработка
Общие требования
Самостоятельная работа
Рабочая учебная
Общая часть
Технологическая карта
Решение задач
История возникновения
Краткая характеристика
История создания
Организация работы
Исследовательская работа
Внеклассное мероприятие
Метрология стандартизация
Основная часть
Информационная безопасность
Рабочая тетрадь
Государственное регулирование
Методическое пособие
Техническая эксплуатация
образовательная организация
государственное автономное
Название дисциплины