
9.Список используемой литературы
Б.Страуструп «Введение в язык C++».1995
Липпман «С++ для начинающих»
10.Листинг программы
Logarithm.h
#include <iostream.h>
#include <iomanip.h>
class logarithm
{
float osn;
float number;
float rez;
float Calculate();
public:
logarithm();
logarithm(float OSN, float NUMBER);
logarithm(const logarithm &op1);
void SetOsn(float OSN);
void SetNumber(float NUMBER);
float GetRezult();
float GetOsn();
float GetNumber();
void Print();
float operator +(logarithm&);
float operator -(logarithm&);
float operator *(logarithm&);
float operator /(logarithm&);
float operator ^(float st);
};
Logarithm.cpp
#include <math.h>
#include "logarithm.h"
#include <iostream.h>
#include <ctype.h>
float logarithm::Calculate()
{
if(number==1) return 0;
if(osn==1) return 1;
if(number==osn) return 1;
return log(number)/log(osn);
}
logarithm::logarithm()
{
osn=1;
number=1;
rez=0;
};
logarithm::logarithm(float OSN,float NUMBER)
{
if(NUMBER==0)
{
cout<<"Нельзя вводить 0 в качестве основания. Основание установлено в 1";
number=1;
}
else
number=NUMBER;
if(OSN==0)
{
cout<<"Нельзя вводить 0 в качестве числа. Число установлено в 1";
osn=1;
}
else
osn=OSN;
rez=Calculate();
};
logarithm::logarithm(const logarithm &op1)
{
osn=op1.osn;
number=op1.number;
rez=op1.rez;
}
float logarithm::GetRezult()
{
return rez;
};
void logarithm::SetOsn(float OSN)
{
if(OSN==0)
{
cout<<" Нельзя вводить 0 в качестве основания. Основание установлено в 1
osn=1;
}
else
osn=OSN;
rez=Calculate();
};
void logarithm::SetNumber(float NUMBER)
{
if(NUMBER==0)
{
cout<<" Нельзя вводить 0 в качестве числа. Число установлено в 1";
number=1;
}
else
number=NUMBER;
rez=Calculate();
};
float logarithm::operator +(logarithm &op1)
{
return rez+op1.GetRezult();
};
float logarithm::operator -(logarithm &op1)
{
return rez-op1.GetRezult();
};
float logarithm::operator *(logarithm &op1)
{
return rez*op1.GetRezult();
};
float logarithm::operator /(logarithm &op1)
{
if(op1.GetRezult()!=0)
return rez/op1.GetRezult();
cout<<"!!!Деление_на_0!!!"<<endl;
return -1;
};
float logarithm::operator ^(float st)
{
return pow(rez,st);
};
void logarithm::Print()
{
cout<<"log"<<osn<<"_"<<number<<"="<<rez<<endl;
};
float logarithm::GetOsn()
{
return osn;
};
float logarithm::GetNumber()
{
return number;
};
Calc.h
#include "logarithm.h"
class calc
{
char* acop;
char operation;
float rezult;
float st;
public:
logarithm op1;
logarithm op2;
calc();
calc(logarithm OP1,logarithm OP2,char OPERATION);
void Calculate();
void InputLog(int i);
float GetSt();
float GetRezult();
char GetOperation();
bool SetOperation(char OPERATION);
void ChangeOsn(float OSN);
void Print();
};
Calc.cpp
#include "calc.h"
#include <iostream.h>
void calc::Calculate()
{
if(operation=='+')rezult=op1+op2;
if(operation=='-')rezult=op1-op2;
if(operation=='*')rezult=op1*op2;
if(operation=='/')rezult=op1/op2;
if(operation=='^')rezult=op1^st;
};
calc::calc()
{
acop="+-*^/";
logarithm op1;
logarithm op2;
operation='+';
st=1;
Calculate();
};
calc::calc(logarithm OP1,logarithm OP2,char OPERATION)
{
acop="+-*^/";
op1=OP1;
op2=OP2;
st=1;
operation=OPERATION;
Calculate();
};
bool calc::SetOperation(char OPERATION)
{
bool ok=false;
for(int i=0;i<=sizeof(acop);i++)
if(OPERATION==acop[i]) ok=true;
if(ok==false)
{
cout<<"Недопустимая_операция"<<endl;
return false;
}
else
{
if(OPERATION=='^')
{
cout<<"введите_степень";
cin>>st;
};
operation=OPERATION;
Calculate();
return true;
};
};
void calc::Print()
{
if(operation=='^')
cout<<"log"<<op1.GetOsn()<<"_"
<<op1.GetNumber()<<operation<<st<<"="<<rezult<<endl;
else
cout<<"log"<<op1.GetOsn()<<"_"
<<op1.GetNumber()<<operation<<"log"<<op2.GetOsn()
<<"_"<<op2.GetNumber()<<"="<<rezult<<endl;
};
void calc::InputLog(int i)
{
float OSN;
float NUMBER;
cout<<"введите основание:";cin>>OSN;
if(i==1)
op1.SetOsn(OSN);
else
op2.SetOsn(OSN);
cout<<"введите число:";cin>>NUMBER;
if(i==1)
op1.SetNumber(NUMBER);
else
op2.SetNumber(NUMBER);
Calculate();
};
void calc::ChangeOsn(float OSN)
{
float i;
i=op1.GetOsn();
op1.SetOsn(OSN);
op2.SetOsn(OSN);
op2.SetNumber(i);
operation='/';
Calculate();
};
char calc::GetOperation()
{
return operation;
};
float calc::GetRezult()
{
return rezult;
};
float calc::GetSt()
{
return st;
};
Dialog.h
#include "calc.h"
class dialog
{
calc c;
void WriteLog(int i);
void ReadLog();
public:
bool menu();
};
Dialog.cpp
#include "dialog.h"
#include <iostream.h>
#include <fstream.h>
#include <string.h>
void dialog::WriteLog(int i)
{
ofstream stream("log",ios::app);
if(i==1)
{stream<<"Ввод_первого_оператора: log"<<c.op1.GetOsn()<<"_" <<c.op1.GetNumber()<<"="<<c.op1.GetRezult()<<endl;
};
if(i==2)
{stream<<" Ввод_первого_оператора: log"<<c.op2.GetOsn()<<'_'<<c.op2.GetNumber() <<"="<<c.op2.GetRezult()<<endl;
};
if(i==3)
{
if(c.GetOperation()=='^')
stream<<"Вывод_результата:log"<<c.op1.GetOsn() <<'_'<<c.op1.GetNumber()
<<c.GetOperation()<<c.GetSt()<<"="<<c.GetRezult()<<endl;
else
stream<<"Вывод_результата:log"<<c.op1.GetOsn()<< _'<<c.op1.GetNumber()
<<c.GetOperation()<<"log"<<c.op2.GetOsn()<<'_'<<c.op2.GetNumber()
<<"="<<c.GetRezult()<<endl;
};
if(i==4)
{
stream<<"Выбор_операции:"<<c.GetOperation()<<endl;
if(c.GetRezult()==-1)
stream<<"!!!Деление_на_0!!!"<<endl;
};
if(i==41)
{
stream<<"Выбор_операции:Недопустимая операция"<<endl;
};
if(i==5)
{
stream<<"Переход_к_другому_основанию:"<<c.op1.GetOsn()<<endl;
};
};
void dialog::ReadLog()
{
char s[50];
ifstream stream("log");
while(stream>>s)
cout<<s<<endl;
};
bool dialog::menu()
{
int pm;
int OSN;
char op;
bool ok=false;
cout<<"1: ввести первый оператор"<<endl;
cout<<"2: показать первый оператор "<<endl;
cout<<"3: ввести второй оператор "<<endl;
cout<<"4: показать второй оператор "<<endl;
cout<<"5: ввести вид операции"<<endl;
cout<<"6: выполнить переход оператора 1 к заданному основанию "<<endl;
cout<<"7: вывести результат операции"<<endl;
cout<<"8: показать лог-файл"<<endl;
cout<<"9: выход"<<endl;
while((pm>9)|(pm<1))
cin>>pm;
if(pm==1) {c.InputLog(1);WriteLog(1);return false;};
if(pm==2) {c.op1.Print();return false;};
if(pm==3) {c.InputLog(2);WriteLog(2);return false;};
if(pm==4) {c.op2.Print();return false;};
if(pm==5)
while(ok==false)
{
cout<<"введите операцию:";
cin>>op;
ok=c.SetOperation(op);
if(ok==true)WriteLog(4);
else WriteLog(41);
return false;
};
if(pm==6)
{
cout<<"введите основание";
cin>>OSN;
c.ChangeOsn(OSN);
WriteLog(5);
return false;
};
if(pm==7) {c.Print();WriteLog(3);return false;};
if(pm==8) {ReadLog();return false;};
if(pm==9) {return true;};
};