Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <conio.h>
- using namespace std;
- char *operation(char *&mass_1, char *&mass_2, char oper);
- void Invert(char *&mass);
- char *Plus(char *&mass_1, char *&mass_2);
- char *Minus(char *&mass_1, char *&mass_2);
- char *operation(char *&mass_1, char *&mass_2, char oper) {
- char simbol_1 = mass_1[0];
- char simbol_2 = mass_2[0];
- Invert(mass_1);
- Invert(mass_2);
- char *result;
- bool minus = 0;
- if (simbol_1 == '-') {
- if (simbol_2 == '-') {
- if (oper == '-')
- {
- result = Minus(mass_2, mass_1);
- }
- else
- {
- result = Plus(mass_1, mass_2);
- minus = 1;
- }
- }
- else {
- if (oper == '-') {
- result = Plus(mass_2, mass_1);
- minus = 1;
- }
- else {
- result = Minus(mass_2, mass_1);
- }
- }
- }
- else {
- if (simbol_2 == '-') {
- if (oper == '-') {
- result = Plus(mass_2, mass_1);
- }
- else {
- result = Minus(mass_1, mass_2);
- }
- }
- else {
- if (oper == '-') {
- result = Minus(mass_1, mass_2);
- }
- else {
- result = Plus(mass_2, mass_1);
- }
- }
- }
- if (minus) {
- int i = 1;
- for (; result[i]; i++) {
- }
- for (i--; i >= 0; i--) {
- result[i + 1] = result[i];
- }
- result[0] = '-';
- }
- return result;
- }
- char *Plus(char *&mass_1, char *&mass_2) {
- char *result = new char[10];
- short ind_1 = 1, ind_2 = 1;
- for (; mass_1[ind_1]; ind_1++) {
- }
- for (; mass_2[ind_2]; ind_2++) {
- }
- if (ind_2 > ind_1) {
- for (int i = ind_1; i != ind_2; i++) {
- mass_1[i] = '0';
- }
- for (short delta = ind_2 - ind_1, i = ind_1 - 1; i >= 0; i--) {
- mass_1[i + delta] = mass_1[i];
- mass_1[i] = '0';
- }
- ind_1 = ind_2;
- }
- if (ind_1 > ind_2) {
- for (int i = ind_2; i != ind_1; i++) {
- mass_2[i] = '0';
- }
- for (short delta = ind_1 - ind_2, i = ind_2 - 1; i >= 0; i--) {
- mass_2[i + delta] = mass_2[i];
- mass_2[i] = '0';
- }
- }
- int k = 0;
- for (int i = ind_1 - 1; i >= 0; i--) {
- result[i] = mass_1[i] + mass_2[i] - '0' + k;
- if (result[i] > 'A' - 6) {
- k = 1;
- result[i] = result[i] - 11;
- }
- else k = 0;
- }
- if (k) {
- for (int i = ind_1 - 1; i >= 0; i--) {
- result[i + 1] = result[i];
- }
- result[0] = '1';
- }
- return result;
- }
- char *Minus(char *&mass_1, char *&mass_2) {
- char *result = new char[10];
- short ind_1 = 1, ind_2 = 1;
- for (; mass_1[ind_1]; ind_1++) {
- }
- for (; mass_2[ind_2]; ind_2++) {
- }
- if (ind_2 > ind_1) {
- for (int i = ind_1; i != ind_2; i++) {
- mass_1[i] = '0';
- }
- for (short delta = ind_2 - ind_1, i = ind_1 - 1; i >= 0; i--) {
- mass_1[i + delta] = mass_1[i];
- mass_1[i] = '0';
- }
- ind_1 = ind_2;
- }
- if (ind_1 > ind_2) {
- for (int i = ind_2; i != ind_1; i++) {
- mass_2[i] = '0';
- }
- for (short delta = ind_1 - ind_2, i = ind_2 - 1; i >= 0; i--) {
- mass_2[i + delta] = mass_2[i];
- mass_2[i] = '0';
- }
- }
- bool normal = 1;
- for (int i = 0; mass_1[i]; i++) {
- if (mass_1[i] != mass_2[i]) {
- if (mass_1[i] < mass_2[i]) {
- normal = 0;
- }
- break;
- }
- }
- if (normal) {
- int k = 0;
- for (int i = ind_1 - 1; i >= 0; i--) {
- result[i] = mass_1[i] - mass_2[i] + '0' - k;
- if (result[i] < '0') {
- k = 1;
- result[i] = result[i] + 12;
- }
- else k = 0;
- }
- }
- else {
- int k = 0;
- for (int i = ind_1 - 1; i >= 0; i--) {
- result[i + 1] = mass_2[i] - mass_1[i] + '0' - k;
- if (result[i + 1] < '0') {
- k = 1;
- result[i + 1] = result[i + 1] + 12;
- }
- else k = 0;
- }
- result[0] = '-';
- }
- return result;
- }
- void Invert(char *&mass) {
- if (mass[0] == '-') {
- short i;
- for (i = 1; mass[i]; i++) {
- mass[i - 1] = mass[i];
- }
- mass[i - 1] = '\0';
- }
- }
- int main()
- {
- setlocale(LC_ALL, "Rus");
- char *mass_1 = new char[9];
- char *mass_2 = new char[9];
- char oper;
- cout << "Input the operation" << endl;
- cin >> mass_1; cin >> oper; cin >> mass_2;
- cout << mass_1 << " " << oper << " " << mass_2 << " = ";
- for (short i = 0; mass_1[i]; i++) {
- if (mass_1[i] > '9' && mass_1[i] < 'C') {
- mass_1[i] -= 7;
- }
- }
- for (short i = 0; mass_2[i]; i++) {
- if (mass_2[i] > '9' && mass_2[i] < 'C') {
- mass_2[i] -= 7;
- }
- }
- char *result = operation(mass_1, mass_2, oper);
- for (short i = 0; result[i]; i++) {
- if (result[i] > '9' && result[i] < 'C' - 7) {
- result[i] += 7;
- }
- }
- cout << result;
- system("pause");
- delete[] result;
- delete[] mass_1;
- delete[] mass_2;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement