У нас: 141825 рефератів
Щойно додані Реферати Тор 100
Скористайтеся пошуком, наприклад Реферат        Грубий пошук Точний пошук
Вхід в абонемент


елемент у векторі і повернути його позицію{}

template<class T>

size_t Vector<T>::find(const T& value)

{

for (size_t i = 0; i < m_array.size(); ++i)

{

if (m_array[i] == value)

{

return i;

}

}

return 0;

}

//accumulate - накопичення суми або добутку{}

// 1(true) = сума 0(false) = добуток

template<class T>

T Vector<T>::accumulate(bool sum)

{

T accum;

if (sum)

{

accum = 0;

vector<T>::const_iterator iter;

for (iter = m_array.begin(); iter != m_array.end(); ++iter)

{

accum += *iter;

}

}

else

{

accum = 1;

vector<T>::const_iterator iter;

for (iter = m_array.begin(); iter != m_array.end(); ++iter)

{

accum *= *iter;

}

}

return accum;

}

//for_each - обробка елементів по наданій процедурі{}

template<class T>

void Vector<T>::for_each()

{

}

//max , min - пошук максимального та мінімального елементів{}

template<class T>

T Vector<T>::maximum()

{

T maxim = 0;

vector<T>::const_iterator iter;

maxim = *m_array.begin();

for (iter = m_array.begin() + 1; iter != m_array.end(); ++iter)

{

maxim = __max(*iter, maxim);

}

return maxim;

}

template<class T>

T Vector<T>::minimum()

{

T minmum = 0;

vector<T>::const_iterator iter;

minmum = *m_array.begin();

for (iter = m_array.begin() + 1; iter != m_array.end(); ++iter)

{

minmum = __min(*iter, minmum);

}

return minmum;

}

template<class T>

static bool UDgreater ( T elem1, T elem2 )

{

return elem1 > elem2;

}

//sort - упорядкування елементів у порядку зростання або зменшення.

template<class T>

void Vector<T>::sort(bool az)

{

if (az)

{

std::sort(m_array.begin(), m_array.end());

}

else

{

std::sort(m_array.begin(), m_array.end(), UDgreater<T>);

}

}

//swap - обмін значеннями з іншим вектором{}

template<class T>

void Vector<T>::swap(Vector& rhs)

{

m_array.swap(rhs.m_array);

}

//доступу до елемента, символ "[]" {}

template<class T>

T& Vector<T>::operator [] (size_t offset)

{

return *(m_array.begin() + offset);

}

template<class T>

const T& Vector<T>::operator [] (size_t offset)const

{

return *(m_array.begin() + offset);

}

//присвоєння, символ "=" {}

template<class T>

Vector<T>& Vector<T>::operator = (const Vector& rhs)

{

if (this == &rhs)

{

return *this;

}

m_array.assign(rhs.m_array.begin(), rhs.m_array.end());

return *this;

}

////конкатенації , символ "+" {}

Vector Vector::operator + (Vector& rhs)

{

Vector temp;

temp.m_array.insert(temp.m_array.begin(), m_array.begin(), m_array.end());

temp.m_array.insert(temp.m_array.begin() + m_array.size(), rhs.m_array.begin(), rhs.m_array.end());

return temp;

}

//конкатенації і присвоєння, символ "+=" {}

template<class T>

void Vector<T>::operator += (const Vector& rhs)

{

Vector temp;

temp.m_array.insert(temp.m_array.begin(), m_array.begin(), m_array.end());

temp.m_array.insert(temp.m_array.begin() + m_array.size(), rhs.m_array.begin(), rhs.m_array.end());

*this = temp;

}

//введення із файлу, символи "<<" {}

template<class T>

ostream & operator << (ostream & output, const Vector<T> & vek)

{

output << "[" << vek.size() << "]( ";

for (size_t i = 0; i < vek.size(); i++)

{

output << vek[i] << " ";

}

output << ")" << endl;

return output;

}

//виведення у файл, символи ">>" {}

template<class T>

istream & operator >> (istream & input, Vector<T> & vek)

{

T inputValue;

input >> inputValue;

vek.push_back(inputValue);

return input;

}

//порівняння, символі "==" , "!=" .

template<class T>

bool Vector<T>::operator == (const Vector& rhs)

{

if (this == &rhs) return true;

if (m_array.size() != rhs.m_array.size())

{

return false;

}

for (size_t i = 0; i < m_array.size(); ++i)

{

if (m_array[i] != rhs.m_array[i]) return false;

}

return true;

}

template<class T>

bool Vector<T>::operator != (const Vector& rhs)

{

return !(operator == (rhs));

}

Лістинг 4. Файл VectorMain.cpp — Головна програма

#include "stdafx.h"

#include <windows.h>

#include <strstream>

#include <fstream>

#include "Vector.h"

#include "Vector.cpp"

typedef int type1;

typedef float type2;

typedef char type3;

enum State {intV, floatV, stringV};

Vector<type1> vek1;

Vector<type2> vek2;

Vector<type3> vek3;

State curState;

void EnterValue();

void Delete();

void Erase();

void Find();

void Insert();

void Max();

void Min();

void Sorting();

void Show();

#define CHOISE_(a1,a2,a3) \

switch(curState) {\

case intV:\

a1;break;\

case floatV:\

a2;break;\

case stringV:\

a3;break; }

int _tmain(int argc, _TCHAR* argv[])

{

setlocale(LC_ALL, ".1251");

::SetConsoleTitle(OEM(STR::Title));

while (true)

{

cout << "З яким типом Вектора Ви бажаєте працювати ?"

<< "\n\t1 - цiлочисельний (int)"

<< "\n\t2 - з плаваючою комою (float)"

<< "\n\t3 - символьний (char)"

<< "\n\t0 - вихiд" << endl;

char type;

cin >> type;

if (type == '1') { curState = intV; break; }

else if (type == '2') { curState = floatV; break; }

else if (type == '3') { curState = stringV; break; }

else if (type == '0') return -1;

}

try

{

cout << "Введiть одну з можливих команд\n"

<< "\t'+' - додати значення\n\t'-' - видалити значення\n"

<< "\t'e' - видалити всi\n\t'f' - знайти\n\t'i' - вставити на позицiю\n"

<< "\t'>' - знайти максимум\n\t'<' - знайти мiнiмум\n\t's' - сортувати\n"

<< "\t'!' - вихiд" << endl;

char command;

for (;;)

{

cin >> command;

switch (command)

{

case '+':

EnterValue();

break;

case '-':

Delete();

break;

case 'e':

Erase();

break;

case 'f':

Find();

break;

case 'i':

Insert();

break;

case '>':

Max();

break;

case '<':

Min();

break;

case 's':

Sorting();

break;

case '!':

return 0;

default:

Show();

}

command = 0;

}

}

catch (exception& e)

{

std::cout << OEM(MakeError(e.what()));

::MessageBox(0, (LPCSTR)e.what(), LPCSTR("Помилка виконання програми"), MB_ICONERROR);

return -1;

}

return 0;

}

void EnterValue()

{

type1 Val1;

type2 Val2;

type3 Val3;

cout << "Введiть значення" << endl;

CHOISE_(cin >> Val1, cin >> Val2, cin >> Val3);

CHOISE_(vek1.push_back(Val1), vek2.push_back(Val2),vek3.push_back(Val3));

Show();

}

void Delete()

{

CHOISE_(vek1.pop_back(), vek2.pop_back(),vek3.pop_back());

Show();

}

void Erase()

{

CHOISE_(vek1.erase(), vek2.erase(),vek3.erase());

Show();

}

void Find()

{

type1 Val1;

type2 Val2;

type3 Val3;

size_t offset;

cout << "Введiть значення" << endl;

CHOISE_(cin >> Val1, cin >> Val2, cin >> Val3);

CHOISE_(offset = vek1.find(Val1), offset = vek3.find(Val3),offset = vek3.find(Val3));

cout << "Позицiя = " << offset << endl;

Show();

}

void Insert()

{

type1 Val1;

type2 Val2;

type3 Val3;

size_t offset;

cout << "Введiть значення" << endl;

CHOISE_(cin >> Val1, cin >> Val2, cin >> Val3);

cout << "Введiть значення" << endl;

cin >> offset;

CHOISE_(vek1.insert(Val1, offset), vek2.insert(Val2, offset), vek3.insert(Val3, offset));

Show();

}

void Max()

{

type1 Val1;

type2 Val2;

type3 Val3;

CHOISE_(Val1 = vek1.maximum(), Val2 = vek2.maximum(), Val3 = vek3.maximum());

CHOISE_(cout << "Максимум = " << Val1 , cout << "Максимум = " << Val2, cout << "Максимум = " << Val3);

}

void Min()

{

type1 Val1;

type2 Val2;

type3 Val3;

CHOISE_(Val1 = vek1.minimum(), Val2 = vek2.minimum(), Val3 = vek3.minimum());

CHOISE_(cout << "Мiнiмум = " << Val1 , cout << "Мiнiмум = " << Val2, cout << "Мiнiмум = " << Val3);

}

void Sorting()

{

CHOISE_(vek1.sort(), vek2.sort(), vek3.sort());

Show();

}

void Show()

{

CHOISE_(cout << vek1, cout << vek2, cout << vek3);

}

Додаток Б

Основна програма (консольна версія)

// diplom.cpp : Створення класів для роботи з числовими векторами

// і матрицями

#include "classes.h" //класи вектор і матриця

#include <iostream>

#include <locale.h> //задання кодової таблиці

#include <conio.h> //робота з консоллю

using namespace std;

int main(void)

{

int n,m,p,q; //висота і ширина матриці

int action; //подія

int vsize; //розмір вектора

int pos, elem;

//Задання кодової таблиці для виводу тексту

setlocale(LC_ALL,".1251");

//Вибір необхідної операції

cout<<"Виберiть необхiдну операцiю: \n 1- робота з векторами;\n 2- робота з матрицями;\n 3- множення вектора на матрицю"<<endl;

cin>>action;

switch (action)

{

case 1:

{

//Задання розміру вектора

cout<<"Введiть розмiр вектора: ";

cin>>vsize;

//Створення об'єкта класу vector

vector v1(vsize);

//Введення елементів вектора

v1.InputVector(v1);

//Отриманий вектор

v1.PrintVector();

//Копія вектора

cout<<"Копiя вектора"<<endl;

vector v2=v1;

v1=v2;

v2.PrintVector();

cout<<"Розмiр вектора "<<v1.GetSize();

cout<<endl;

cout<<"Введiть елемент, який необхiдно додати до вектора";

cin>>elem;

v1.AddItem(elem);//Додавання елементу до вектора

v1.PrintVector();

cout<<"Розмiр вектора - "<<v1.GetSize()<<endl;

cout<<"Введiть номер елемента,


Сторінки: 1 2 3 4 5 6 7 8 9 10 11 12