Автор работы: Пользователь скрыл имя, 25 Ноября 2011 в 18:50, курсовая работа
Класс «длинной арифметики» – класс Math – предназначен для выполнения арифметических операций с очень большими числами, которые нельзя описать ни одним из числовых типов языка С++. В данном классе реализованы операции сложения, вычитания и умножения положительных целых чисел. Числа хранятся в виде символьного массива, память для которого выделяется при создании переменной. Так как память выделяется динамически, то ограничений, кроме объёма памяти, для количества символов нет, но ввод строки с консоли ограничен 1024 символами. Операции над числами выполняются столбиком.
1. Введение. 3
2. Описание класса Math. 4
2.1. Закрытые переменные и члены класса. 4
2.2. Конструкторы класса Math. 4
2.3. Оператор присваивания. 5
2.4. Операторы вывода и ввода. 5
2.5. Оператор сложения. 6
2.6. Оператор вычитания. 7
2.7. Оператор умножения. 7
3. Текст класса Math. 8
4. Вывод. 12
if(i==
if (m<0) itoa(m+10,ch,10), j=1;
else itoa(m,ch,10), j=0;
str[i]=
}
str[i]='\0';
delete[] s1;
s1=revers(
Math N(s1);
delete[] s1;//освобождение памяти
delete[] s2;
delete[] ch;
delete[] str;
delete p1;
delete p2;
return N;
}
//оператор
Math operator * (Math& M)
{
Math N("0");
int j=0,m,k,i=0;
int a=(n<M.n)? n-1:M.n-1, b=(n>M.n)? n-1:M.n-1;
k=(n>M.n)? n:M.n;
char *s1,*s2;
char *str1=new char[2*k-1],*str2;
char *p1=new char,*p2=new char, *ch=new char[2];
if(n>=M.n)
else s2=revers(s),s1=revers(M.s);
for(int x=0;x<a;x++)
{
*p2=s2[
for(i=
{
i
s
}
for(int y=0; y<b;y++)
{
*p1=s1[
m=atoi(
if (m>=10) itoa(m%10,ch,10), j=m/10;
else itoa(m,ch,10), j=0;
str1[y+
}
if (j>0) str1[y+i]=*itoa(j,ch,10), str1[++y+i]='\0', j=0;
else str1[y+i]='\0';
str2=
N=N+
delete[
}
delete[] s1;//освобождение памяти
delete[] s2;
delete[] ch;
delete[] str1;
delete p1;
delete p2;
return N;
}
};
Таким образом, данный класс содержит 3 конструктора, деструктор, перегруженные операторы присваивания, ввода и вывода, сложения, вычитания и умножения. При создании класса используются такие методы, как перегрузка оператора, позволяющая переопределить существующие операторы для работы с объектами класса; объявление оператора дружественным, что позволяет перегрузить операторы ввода и вывода; копирующий конструктор, который используется при передаче экземпляра класса по значению, т.к. при этом компилятор делает копию экземпляра в стеке, что применяется при возвращении значения в арифметических операторах (+, –, *). Также в программе используется динамическое выделение и освобождение памяти, что позволяет выделять необходимую память непосредственно при выполнении программы.
Данный
класс может использоваться для
различных вычислений с большими
числами при решении каких-либо
задач. А также на основе данного
класса можно создать другие классы,
функции или программы.