який необхiдно видалити з вектора";
cin>>elem;
v1.DelItem(elem);//Видалення елементу з вектора
v1.PrintVector();
cout<<"Розмiр вектора - "<<v1.GetSize()<<endl;
cout<<"Введiть позицію на яку необхідно вставити елемент";
cin>>pos;
cout<<"Введiть елемент, який необхiдно додати до вектора";
cin>>elem;
v1.InsertItem(pos,elem);//Вставка елемента на позицію
v1.PrintVector();
cout<<"Розмiр вектора - "<<v1.GetSize()<<endl;
cout<<"min="<<v1.MinItem(v1)<<"max="<<v1.MaxItem(v1)<<endl;
break;}
case 2:
{
cout<<"Введiть висоту матрицi ";
cin>>n;
cout<<"Введiть ширину матрицi ";
cin>>m;
matrix m1(n,m);
m1.InputMatrix(m1);
m1.PrintMatrix(m1);
m1.Determinant(m1);
cout<<"Введiть висоту матрицi ";
cin>>p;
cout<<"Введiть ширину матрицi ";
cin>>q;
matrix m2(p,q);
m2.InputMatrix(m2);
m2.PrintMatrix(m2);
//Сума матриць
cout<<"Сума матриць"<<endl;
matrix m3(n,m);
m3.SumMatrix(m1,m2,m3);
m3.PrintMatrix(m3);
//Множення числа на матрицю
cout<<"Множення числа на матрицю"<<endl;
matrix m4(n,m);
m4.Number2Matrix(m1,2,m4);
m4.PrintMatrix(m4);
//Транспонування матриці
cout<<"Транспонування матрицi"<<endl;
matrix mt(m,n);
mt.Transpon(m1,mt);
mt.PrintMatrix(mt);
//Множення матриць
cout<<"Множення матриць"<<endl;
matrix mm(n,q);
mm.mmulti(m1,m2,mm);
mm.PrintMatrix(mm);
break;}
case 3:
{
//Множення матриці на вектор
cout<<"Введiть розмiр вектора: ";
cin>>vsize;
vector v2(vsize);
v2.InputVector(v2);
cout<<"Введiть висоту матрицi ";
cin>>n;
cout<<"Введiть ширину матрицi ";
cin>>m;
matrix m1(n,m);
m1.InputMatrix(m1);
m1.PrintMatrix(m1);
v2=multiply(m1,v2);
v2.PrintVector();
break;}
default: cout<<"Не вiрно введено операцiю"<<endl;
}
_getch();//чекаємо натиснення клавіші і виходимо з програми
return 0;
}
ДОДОТОК В
Опис класів вектор і матриця
#pragma once
class matrix;
//опис класу вектор
class vector
{
private:
int iSize; //розмір масиву
int* v;
public:
//vector();//конструктор без параметрів
vector(int Size); //конструктор з параметром
virtual ~vector(void); //деструктор
vector (const vector &);//ініціалізація вектора значенням іншого вектора (копіювання вектора)
void operator=(const vector &);//присвоювання елементів вектора
// Задання і-го елемента масиву
void SetItem(int Number, int Item);
// Задання розміру вектора
void SetSize(int Size);
// Отримання розміру вектору
int GetSize(void);
//Операція доступу до елемента вектора(з перевіркою границь)
int& operator[](int);
//Доступ до елементу без перевірки індексу
int& elem(int i);
// Додавання нового елементу до вектора
void AddItem(int Item);
// Видалення елемента вектора
void DelItem(int Number);
// Вставка елемента до вектора
void InsertItem(int Number, int Item);
//максимальний елемент
int MaxItem(vector &v);
//мінімальний елемент
int MinItem(vector &v);
//Друк вектора
void PrintVector(void);
//множення вектора на матрицю
friend vector multiply(matrix& m, vector& v);
//введення вектора
vector InputVector(vector &v);
};
//Опис класу матриця
class matrix
{
private:
int iWidth;
int iHeight;
vector* m; //оголошення матриці як масиву векторів
public:
//пустий конструктор
matrix();
//декструктор
~matrix();
//конструктор класу матриця
matrix(int Width, int Height);
//Задання елемента матриці
void SetItem(int wIndex, int hIndex, int Item);
// отримання ширини матриці
int GetWidth(void);
// отримання висоти матриці
int GetHeight(void);
//Доступ до елемента матриці
int& elem(int i,int j);
// Виведення матриці
void PrintMatrix(matrix &);
//множення матриці на вектор
friend vector multiply( matrix&, vector& );
//додавання матриць
matrix& SumMatrix(matrix & , matrix & , matrix &);
//множення матриці на число
matrix& Number2Matrix( matrix&, int Number, matrix &);
//транспонування
matrix& Transpon(matrix &, matrix &);
//множення матриць
matrix& mmulti(matrix &, matrix &, matrix &);
//введення матриці
matrix& InputMatrix(matrix &);
//визначення детермінанта матриці
int Determinant(matrix &m);
};
Реалізація класів вектор і матриці
#include "classes.h"
#include <iostream>
using namespace std;
//Реалізація класів вектор і матриця//
//Описання класу вектор
//пустий конструктор
/*vector::vector():iSize(0)
{
}*/
//конструктор класу вектор
vector::vector(int Size)
{
if (Size<=0) cout<<"Невiрний розмір вектора"<<endl;
else {
iSize = Size;
v = new int[iSize];
}
}
//ініціалізація вектора значенням іншого вектора
vector::vector(const vector & a)
{
iSize=a.iSize;
v = new int [iSize];
for (int i=0; i<iSize; i++) v[i]=a.v[i];
}
//присвоювання елементів вектора
void vector::operator =(const vector & a)
{
int i;
if (iSize!=a.iSize) cout<<"Недопустимий розмiр вектора"<<endl;
for (i=0; i<iSize; i++) v[i]=a.v[i];
}
//деструктор класу вектор
vector::~vector(void)
{
delete v;
}
// Задання і-го елемента масиву
void vector::SetItem(int Number, int Item)
{
v[Number]=Item;
}
// Задання розміру вектора
void vector::SetSize(int Size)
{
if (Size<=0) cout<<"Невірний розмiр вектора"<<endl;
else {
iSize = Size;
v = new int[iSize];
}
}
// Отримання розміру вектору
int vector::GetSize(void)
{
return iSize;
}
//Операція доступу до елемента вектора(з перевіркою границь)
int& vector::operator[](int i)
{
if(i<0 || iSize<=i) cout<<"Iндекс виходить за границі"<<endl;
return v[i];
}
//Операція доступу до елемента вектора(без перевірки границь)
int& vector::elem(int i)
{
return v[i];
}
// Додавання нового елементу до вектора
void vector::AddItem(int Item)
{
iSize++;
v[iSize-1] = Item;
cout<<"Додано елемент "<<Item<<endl;
}
// Видалення елемента вектора
void vector::DelItem(int Number)
{
for (int i=0;i<Number;i++) v[i]=v[i];
for (int i=Number+1;i<iSize;i++) v[i-1]=v[i];
iSize=iSize-1;
cout<<"Видалено елемент "<<Number<<endl;
}
// Вставка елемента до вектора
void vector::InsertItem(int Number, int Item)
{
if (Number<0||iSize<Number)
cout<<"Не правильно введена позицiя Розмiр вектора"<<GetSize()<<endl;
else
{
for (int i=0;i<Number;i++) v[i]=v[i];
for (int i=Number+1;i<iSize+1;i++) v[i]=v[i-1];
v[Number]=Item;
iSize=iSize+1;
cout<<"Вставлено елемент - "<<Item<<" на позицiю "<<Number<<endl;
}
}
//Друк вектора
void vector::PrintVector(void)
{
cout<<"Вектор: ";
for (int i=0;i<GetSize();i++) cout<<elem(i)<<" ";
}
//Описання класу матриця
//конструктор класу матриця
//пустий конструктор
matrix::matrix():iWidth(0),iHeight(0)
{
}
//конструктор з параметрами
matrix::matrix(int Width, int Height)
{
iWidth=Width;
iHeight=Height;
m = new vector[iWidth];
for (int i=0;i<iWidth;i++)
m[i].SetSize(iHeight);
}
//деструктор
matrix::~matrix(void)
{
delete m;
}
// отримання ширини матриці
int matrix::GetWidth(void)
{
return iWidth;
}
// отримання висоти матриці
int matrix::GetHeight(void)
{
return iHeight;
}
//Задання елемента матриці
void matrix::SetItem(int wIndex, int hIndex, int Item)
{
m[wIndex].SetItem(hIndex,Item);
}
//доступ до елементів матриці
int& matrix::elem(int i,int j)
{
return m[i].elem(j);
}
//друк матриці
void matrix::PrintMatrix(matrix& m)
{
cout<<"Вихiдна матриця: "<<endl;
for (int i=0;i<m.GetWidth();i++)
{
for (int j=0;j<m.GetHeight();j++)
cout<<m.elem(i,j)<<" ";
cout<<endl;
}
}
//множення вектора на матрицю
vector multiply(matrix& m, vector& v)
{
vector r(v.GetSize());
for (int i=0;i<v.GetSize();i++)
{
r.elem(i)=0;
for (int j=0;j<v.GetSize();j++)
r.elem(i)+=m.elem(i,j)*v.elem(j);
}
return r;
}
//сума матриць
matrix& matrix::SumMatrix(matrix & m1, matrix & m2, matrix & res)
{
res.iWidth=m1.GetWidth();
res.iHeight=m1.GetHeight();
if ((m1.GetWidth()==m2.GetWidth())||(m1.GetHeight()==m2.GetHeight()))
{
for (int i=0;i<m1.GetWidth();i++)
for (int j=0;j<m1.GetHeight();j++)
res.elem(i,j) = m1.elem(i,j)+m2.elem(i,j);
}
else
{
cout<<"Не однаковий розмiр матриць"<<endl;
res.iWidth=m1.GetWidth();
res.iHeight=m1.GetHeight();
for (int i=0;i<m1.GetWidth();i++)
for (int j=0;j<m1.GetHeight();j++)
res.elem(i,j) = 0;
}
return res;
}
//множення матриці на число
matrix& matrix::Number2Matrix(matrix & m1, int Number ,matrix & res)
{
res.iWidth=m1.GetWidth();
res.iHeight=m1.GetHeight();
for (int i=0;i<m1.GetWidth();i++)
for (int j=0;j<m1.GetHeight();j++)
res.elem(i,j) = m1.elem(i,j)*Number;
return res;
}
//транспонування матриці
matrix& matrix::Transpon(matrix & m1, matrix & res)
{
res.iWidth=m1.GetHeight();
res.iHeight=m1.GetWidth();
for (int i=0;i<res.iWidth;i++)
for (int j=0;j<res.iHeight;j++)
res.elem(i,j) = m1.elem(j,i);
return res;
}
//множення матриць
matrix& matrix::mmulti(matrix & m1, matrix & m2, matrix & res)
{
res.iWidth=m1.GetWidth();
res.iHeight=m2.GetHeight();
if (m1.GetHeight()==m2.GetWidth())
{
for (int i=0;res.iWidth;i++)
for (int j=0;res.iHeight;j++)
{
res.elem(i,j)=0;
for (int k=0;k<res.iWidth;k++)
res.elem(i,j)+=m1.elem(i,k)*m2.elem(k,j);
}
}
else {
cout<<"Невірний розмір матриць, що множаться";
for (int i=0;res.iWidth;i++)
for (int j=0;res.iHeight;j++) res.elem(i,j)=0;
}
return res;
}
//введення вектора
vector vector::InputVector(vector& v)
{
int item;
for (int i=0;i<v.GetSize();i++)
{ cout<<"Введiть "<<i<<"-ий елемент вектора: ";
cin>>item;
v.SetItem(i,item);
}
return v;
}
int vector::MaxItem(vector &v)
{
int max;
max=v[0];
for (int i=1;i<v.GetSize();i++)
if (v[i]>max) max=v[i];
return max;
}
int vector::MinItem(vector &v)
{
int min;
min=v[0];
for (int i=1;i<v.GetSize();i++)
if (v[i]<min) min=v[i];
return min;
}
//введення матриці
matrix& matrix::InputMatrix(matrix& m)
{
int item;
for (int i=0;i<m.GetWidth();i++)
for (int j=0;j<m.GetHeight();j++)
{
cout<<"Введiть елемент матрицi ("<<i<<","<<j<<")= ";
cin>>item;
m.SetItem(i,j,item);
};
return m;
}
//визначення детермінанта матриці
int matrix::Determinant(matrix &md)
{
int x=0,c,d=1;
x=md.iWidth-1;
for (int k=0;k<x-1;k++)
{
c=md.elem(k,k);
for (int l=0;l<x+1;l++)
md.elem(k,l)=md.elem(k,l)/c;
for (int i=k+1;i<x;i++)
{
c=md.elem(i,k);
for (int j=0;j<x+1;j++)
md.elem(i,j)=md.elem(i,j)-c*md.elem(k,j)/md.elem(k,k);
}
}
c=md.elem(x,x);
for (int l=0;l<x+1;l++)
md.elem(x,l)=md.elem(x,l)/c;
md.PrintMatrix(md);
return d;
}
ДОДАТОК Г
Опис класу форми (діалогу)
// DiplomMFCDlg.h : header file
//
#pragma once
// CDiplomMFCDlg dialog
class CDiplomMFCDlg : public CDialog
{
// Construction
public:
CDiplomMFCDlg(CWnd* pParent = NULL); // standard constructor
// Dialog Data
enum { IDD = IDD_DIPLOMMFC_DIALOG };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
// Implementation
protected:
HICON m_hIcon;
// Generated message map functions
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
public:
int m_Elem;
int m_IndexElem;
CString m_Size;
CString m_MaxElem;
CString m_MinElem;
CListBox m_Vector;
afx_msg void OnBnClickedButton1();
afx_msg void OnBnClickedButton2();
afx_msg void OnBnClickedButton3();
afx_msg void OnBnClickedButton4();
afx_msg void OnBnClickedButton5();
afx_msg void OnBnClickedButton6();
};
Реалізація класу форми
// DiplomMFCDlg.cpp : implementation file
//
#include "stdafx.h"
#include "DiplomMFC.h"
#include "DiplomMFCDlg.h"
#include "classes.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
vector vect(1);
using namespace std;
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
enum { IDD = IDD_ABOUTBOX };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
// Implementation
protected:
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()
// CDiplomMFCDlg dialog
CDiplomMFCDlg::CDiplomMFCDlg(CWnd* pParent /*=NULL*/)
: