Курсовая по длинной арифметике

Автор работы: Пользователь скрыл имя, 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

Прикрепленные файлы: 1 файл

Курсовая по длинной арифметике.doc

— 78.00 Кб (Скачать документ)

                       if(i==k-2 && m==0) break;

                       if (m<0)  itoa(m+10,ch,10), j=1;

                       else itoa(m,ch,10), j=0;

                       str[i]=*ch;

                 }           

                 str[i]='\0';

                 delete[] s1;

                 s1=revers(str);

                 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) s1=revers(s),s2=revers(M.s);

                 else s2=revers(s),s1=revers(M.s);

                 for(int x=0;x<a;x++)

                 {

                       *p2=s2[x];

                       for(i=0;i<x;i++)

                       {

                             itoa(0,ch,10);

                             str1[i]=*ch;

                       }

                       for(int y=0; y<b;y++)

                       {

                       *p1=s1[y];

                       m=atoi(p1)*atoi(p2)+j;

                       if (m>=10)  itoa(m%10,ch,10), j=m/10;

                       else itoa(m,ch,10), j=0;

                       str1[y+i]=*ch;

                       

                       if (j>0) str1[y+i]=*itoa(j,ch,10), str1[++y+i]='\0', j=0;

                       else str1[y+i]='\0';

                       str2=revers(str1);

                       N=N+Math(str2);

                       delete[] str2;

                 }

                 delete[] s1;//освобождение памяти

                 delete[] s2;

                 delete[] ch;

                 delete[] str1;

                 delete p1; 

                 delete p2;

                 return N;

           } 

     };

 

  1. Вывод.

     Таким образом, данный класс содержит 3 конструктора, деструктор, перегруженные операторы присваивания, ввода и вывода, сложения, вычитания и умножения. При создании класса используются такие методы, как перегрузка оператора, позволяющая переопределить существующие операторы для работы с объектами класса; объявление оператора дружественным, что позволяет перегрузить операторы ввода и вывода; копирующий конструктор, который используется при передаче экземпляра класса по значению, т.к. при этом компилятор делает копию экземпляра в стеке, что применяется при возвращении значения в арифметических операторах (+, –, *). Также в программе используется динамическое выделение и освобождение памяти, что позволяет выделять необходимую память непосредственно при выполнении программы.  

     Данный  класс может использоваться для  различных вычислений с большими числами при решении каких-либо задач. А также на основе данного  класса можно создать другие классы, функции или программы. 

Информация о работе Курсовая по длинной арифметике