Автор работы: Пользователь скрыл имя, 25 Июля 2011 в 11:43, лабораторная работа
Цель работы. Реализовать вычисления, считая, что a, b и x - одномерные динамические векторы, содержащие целочисленные элементы, длиной N. Эти векторы должны быть объектами класса. В классе должны быть предусмотрены несколько конструкторов и деструктор, а также переопределены нужные операции для вычисления логических и арифметических выражений, согласно постановке задачи своего варианта. Декларация класса должна быть оформлена в виде h–файла, а дефиниция – в виде cpp–файла.
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
Національний
аерокосмічний університет ім. М.Є.
Жуковського “ХАІ”
Кафедра
603
Лабораторна робота № 2
з
дисципліни «Об'ектно- орієнтоване
програмування»
ХАІ.603.621п.10О.050103.
Цель работы. Реализовать вычисления, считая, что a, b и x - одномерные динамические векторы, содержащие целочисленные элементы, длиной N. Эти векторы должны быть объектами класса. В классе должны быть предусмотрены несколько конструкторов и деструктор, а также переопределены нужные операции для вычисления логических и арифметических выражений, согласно постановке задачи своего варианта. Декларация класса должна быть оформлена в виде h–файла, а дефиниция – в виде cpp–файла. Предусмотреть корректный потоковый ввод информации, а также понятный потоковый вывод информации.
UML-диаграмма
Листинг программы:
Файл Headers.h:
#pragma once
#include "tchar.h"
#include <stdio.h>
#include <iostream>
#include "windows.h"
#include <fstream>
#include <conio.h>
#include <math.h>
using namespace std;
Файл Class.h:
#pragma once
#include "Headers.h"
class ClassArray
{
int * iArray;
char Name;
public :
int SizeArray;
ClassArray(int size, char nName);
~ClassArray();
void InputValue (char Array);
void OutputValue(ClassArray &X);
double Mean();
int operator>( ClassArray & right);
int operator<(ClassArray & right);
int operator==(ClassArray & right);
ClassArray& operator=(ClassArray & right);
ClassArray& operator=(const int right);
ClassArray& operator/(const ClassArray &right);
ClassArray& operator-(const int right);
ClassArray& operator-(const ClassArray &right);
ClassArray& operator+(const int right);
};
Файл Class.cpp:
#include "Class.h"
#include "Headers.h"
char * ArraySizeErr = "Размеры массивов не совпадают!";
char * ZeroErr = "Деление
на ноль!";
ClassArray ::ClassArray(int size, char nName)
{
Name = nName;
SizeArray = size;
iArray = new int[size];
}
ClassArray ::~ClassArray()
{
delete[] iArray;
}
void ClassArray :: InputValue (char Array)
{
int var;
for(int x =0; x < SizeArray; x++)
{
int i = 1;
do
{
ifstre
cout << "Введите целое число " << x+ 1 <<" массива "<< Array <<": ";
my_inp >> var;
if(my_
{
}
else
}
while(i);
iArray[x] = var;
}
}
void ClassArray::OutputValue(
{
for(int x = 0; x < X.SizeArray; x++)
cout <<"X["<<x<<"] = "<< X.iArray[x] << "\t";
}
double ClassArray :: Mean()
{
double Mean = 0;
for(int x = 0 ; x < SizeArray; x++)
Mean += iArray[x];
Mean /= SizeArray;
return Mean;
}
int ClassArray :: operator>(ClassArray & right)
{
return (this->Mean() > right.Mean());
}
int ClassArray :: operator<( ClassArray & right)
{
return (this->Mean() < right.Mean());
}
int ClassArray :: operator==( ClassArray & right)
{
return this->Mean() == right.Mean();
}
ClassArray& ClassArray ::operator=(ClassArray & right)
{
if(this->SizeArray != right.SizeArray)
{
if(SizeArray != 0)
delete[] iArray;
SizeArray = right.SizeArray;
iArray = new int[SizeArray];
}
for(int x = 0; x < SizeArray; x++)
iArray[x] = right.iArray[x];
return *this;
}
ClassArray& ClassArray :: operator/(const ClassArray &right)
{
if(this->SizeArray != right.SizeArray)
throw ArraySizeErr;
for(int x = 0; x < SizeArray; x++)
{
if(right.iArray[x] == 0)
throw ZeroErr;
iArray[x] = iArray[x] / right.iArray[x];
}
return *this;
}
ClassArray& ClassArray ::operator=(const int right)
{
for(int x = 0; x< this->SizeArray; x++)
this->iArray[x] = right;
return *this;
}
ClassArray& ClassArray ::operator+(const int right)
{
for(int x = 0; x < SizeArray; x++)
iArray[x] = iArray[x] + right;
return *this;
}
ClassArray& ClassArray ::operator-(const int right)
{
for(int x = 0; x < SizeArray; x++)
iArray[x] = iArray[x] - right;
return *this;
}
ClassArray& ClassArray ::operator-(const ClassArray &right)
{
for(int x = 0; x < SizeArray; x++)
iArray[x] = iArray[x] - right.iArray[x];
return *this;
}
Файл Main.cpp:
#include "Headers.h"
#include "Class.h"
int InputSize ()
{
int i = 1;
int Size;
while(i)
{
ifstream my_inp("CON");
cout << "Введите размер массивов всех обьектов (1 - 10): ";
my_inp >> Size;
if(my_inp.rdstate(
{
cout << "Вводите верные данные! Повторим ввод...\n";
i = 1;
}
else
i = 0;
}
return Size;
}
int _tmain(int argc, _TCHAR* argv[])
{
char key;
SetConsoleOutputCP(1251)
do{
try{
cout << "\t \t if(a>b) \t x = (a-b)/a+1" << endl;
cout << "\t \t if(a==b)\t x = 25" << endl;
cout << "\t \t if(a<b) \t x = (a-5)/b" << endl;
cout << "\n";
int Size = InputSize();
ClassArray a(Size, 'a');
ClassArray b(Size, 'b');
a.InputValue('a');
b.InputValue('b');
ClassArray X(Size, 'X');
if(a>b)
X = (a-b)/(a+1);
else if(a==b)
X = 25;
else if(a<b)
{
X = (a-5)/b;
}
X.OutputValue(X);
}
catch(char * e)
{
cout << e;
}
cout << "\n Чтобы повторить нажмите 'y' ! \n\n";
key = _getch();
}while(key == 'y');
return 0;
}
Функциональные тесты:
if(a>b) x = (a-b)/a+1
if(a==b) x = 25
if(a<b) x = (a-5)/b
Введите размер массивов всех обьектов (1 - 10): 1
Введите целое число 1 массива a: 2
Введите целое число 1 массива b: 1
X[0] = 1