Расчетно-графическая работа по программированию — страница 3
for (int j=0; j<y; j++) { res.matr[i][j].chisl=number.chisl*matr[i][j].chisl; res.matr[i][j].znamen=number.znamen*matr[i][j].znamen; } return res; } //------------------------------------- matrix matrix::operator* (int num) { matrix res (x,y); for (int i=0; i<x; i++) for (int j=0; j<y; j++) { res.matr[i][j].chisl=num*matr[i][j].chisl; res.matr[i][j].znamen=matr[i][j].znamen; } return res; } //------------------------------------- drob matrix::Determinant () { drob det1; drob det2; if (x!=y) MessageBox(NULL,"Ну кто так делает :)", "ЧАЙНИК!!",MB_ICONEXCLAMATION); if(x==2 && y==2) { det1=matr[0][0]*matr[1][1]; det2=matr[0][1]*matr[1][0]; det=det1-det2; det.videlen(); } if (x==1 && y==1) { det=matr[0][0]; det.videlen(); } return det; } Текст программы: #include <vcl.h> #include <fstream.h> #pragma hdrstop #include "matrix.h" #include "Resultunit.h" #include "Numberunit.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma link "CSPIN" #pragma resource "*.dfm" TMainForm *MainForm; //--------------------------------------------------------------------------- ///КЛАСС ДРОБЕЙ/// class drob { public: int chisl; int znamen; int cel; drob () { chisl=znamen=cel=0; } int videlen () { if (!cel && chisl && znamen && abs(chisl)>=abs(znamen)) { cel=(int)chisl/znamen; chisl=(int)chisl%(int)znamen; } else if (cel && chisl && znamen && abs(chisl)>=abs(znamen)) { cel=cel+((int)chisl/znamen); chisl=(int)chisl%(int)znamen; } return 0; } }; drob operator + (drob &m1, drob &m2) { drob res; if (m1.znamen==m2.znamen && m1.znamen!=0) { res.chisl=m1.chisl+m2.chisl; res.znamen=m1.znamen; } else { res.znamen=m1.znamen*m2.znamen; res.chisl=(m1.chisl*m2.znamen)+ (m2.chisl*m1.znamen); } return res; } drob operator - (drob &m1, drob &m2) { drob res; if (m1.znamen==m2.znamen && m1.znamen!=0) { res.chisl=m1.chisl-m2.chisl; res.znamen=m1.znamen; } else { res.znamen=m1.znamen*m2.znamen; res.chisl=(m1.chisl*m2.znamen)- (m2.chisl*m1.znamen); } return res; } drob operator* (drob &g, drob &h) { drob res; res.chisl=g.chisl*h.chisl; res.znamen=g.znamen*h.znamen; return res; } drob operator/ (drob &g, drob &h) { drob res; res.chisl=g.chisl*h.znamen; res.znamen=g.znamen*h.chisl; return res; } //--------------------------------------------------------------------------- ///АНАЛИЗАТОР/// enum types { DELIM=1,NUMB }; class Analisation { char *ptr; char token [80]; char ttype; drob vrem; //------------------------------------- void Analiz(double &result) { register char op; double temp; Convert(result); while((op=*token)=='/' ) { Get(); Convert(temp); switch (op) { case '/': vrem.chisl=result; vrem.znamen=temp; break; } } } //------------------------------------- void Convert(double &result) { result=(double)atof(token); Get(); return; } //------------------------------------- void Get() { register char *temp; ttype=0; temp=token; *temp='\0'; if(!*ptr)return; while(isspace(*ptr))++ptr; if(strchr("/*",*ptr)) { ttype=DELIM; *temp++=*ptr++; } else if(isdigit(*ptr)) { while(!isdelim(*ptr))*temp++=*ptr++; ttype=NUMB; } *temp='\0'; } //------------------------------------- int isdelim(char c) { if (strchr("/*",c))return 1; else return 0; } //------------------------------------- public: Analisation() { ptr=NULL; } drob MAIN(char*exp) { double result; ptr=exp; Get(); Analiz(result); return vrem; } }; //--------------------------------------------------------------------------- class matrix { protected: int x,y; drob det; public: drob **matr; matrix (int x1, int y1); int Getx () { return x; }; int Gety () { return y; }; void Read (TStringGrid *sg, Analisation &obj); matrix operator* (drob number); matrix operator* (int num); drob Determinant (); }; //------------------------------------- matrix::matrix (int x1, int y1) { x=x1; y=y1; det.chisl=det.znamen=det.cel=0; matr=new drob *[x]; for (int i=0; i<x; i++) matr[i]=new drob [y]; } //------------------------------------- void matrix::Read (TStringGrid *sg, Analisation &obj) { char ***temp; temp=new char **[x]; for (int i=0; i<x; i++) temp[i]=new char *[y]; for (int i=0; i<x; i++) for (int j=0; j<y; j++) temp[i][j]=sg->Cells[j][i].c_str(); for (int i=0; i<x; i++) for (int j=0; j<y; j++) { matr[i][j]=obj.MAIN(temp[i][j]); } for (int i=0; i<x; i++) delete temp[i]; delete [] temp; } //------------------------------------- matrix matrix::operator* (drob number) { matrix
Похожие работы
- Рефераты
- Рефераты