Here you need to write a program for an engineering calculator. Wrote while the functions of multiplication and transfer to another ss. The problem is that after I entered the numbers and chose 3 point (multiplication), it gives an access violation when reading at 0x68D8FB46.
What is the error please tell me.
#include <iostream> #include <string> #include <math.h> using namespace std; string ToBin1(string st1, int ss11); string ToBin2(string st1, int ss12); int ToDec(string r); //int Summ(string bin1, string bin2); //int Diff(string bin1, string bin2); void Mult(string bin1, string bin2); //int Chas(string bin1, string bin2); //int Comp(string bin1, string bin2); int main(string bin1, string bin2) { int ss11, ss12; string st1, st2; setlocale(LC_ALL,"Russian");//руссификатор int N,action=0;//Переменные целого типа cout << "Введите первое число и его систему счисления: " << endl; cin >> st1 >> ss11; cout << ToBin1(st1,ss11) << endl; cout << "Введите второе число: " << endl; cin >> st2 >> ss12; cout << ToBin2(st2,ss12) << endl; cout<<"------------------------Menu--------------------------"<<endl; cout<<"Выберите действие: "<<endl; cout<<"1)Сложить числа "<<endl; cout<<"2)Вычесть числа "<<endl; cout<<"3)Умножить числа "<<endl; cout<<"4)Разделить числа "<<endl; cout<<"5)Сравнить числа "<<endl; cout<<"6)Выход из программы"<<endl; cout<<"------------------------------------------------------"<<endl; cout<<"Ваш выбор :";//Запрос выбора пункта меню cin>>action;//Ввод выбора system ("cls");//очистка консоли switch (action) { //case 1: Summ(bin1, bin2); break; //case 2: Diff(bin1, bin2); break; case 3: Mult(bin1, bin2); break; //case 4: Chas(bin1, bin2); break; //case 5: Comp(bin1, bin2); break; case 6: exit(0); break; } return 0; } string ToBin1(string st1, int ss11) { int i, k, p, dec; string bin1; string digits[16] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F" }; string digits1 = "0123456789abcdefghijklmnopqrstuvwxyz"; for (size_t i = 0; i < st1.length(); i++) { size_t pos = digits1.find(tolower(st1[i])); if (pos == string::npos || pos >= ss11) { cerr << "Wrong symbol in value " << st1 << endl; system("pause"); return 0; } } dec = 0; p = st1.length() - 1; for (i = 0; p >= 0; i++, p--) { k = toupper(st1[i]); dec += ( (k>='A') ? 10+k-'A' : k-'0') * pow(ss11,p); } do { bin1.insert(0, digits[dec % 2]); dec /= 2; } while (dec != 0); return bin1; } string ToBin2(string st2, int ss12) { int i, k, p, dec; string bin2; string digits[16] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F" }; string digits1 = "0123456789abcdefghijklmnopqrstuvwxyz"; for (size_t i = 0; i < st2.length(); i++) { size_t pos = digits1.find(tolower(st2[i])); if (pos == string::npos || pos >= ss12) { cerr << "Wrong symbol in value " << st2 << endl; system("pause"); return 0; } } dec = 0; p = st2.length() - 1; for (i = 0; p >= 0; i++, p--) { k = toupper(st2[i]); dec += ( (k>='A') ? 10+k-'A' : k-'0') * pow(ss12,p); } do { bin2.insert(0, digits[dec % 2]); dec /= 2; } while (dec != 0); return bin2; } int ToDec(string r) { int dec, p, k; dec = 0; p = r.length() - 1; for (int i = 0; p >= 0; i++, p--) { k = toupper(r[i]); dec += ( (k>='A') ? 10+k-'A' : k-'0') * pow(2,p); } return dec; } void Mult(string bin1, string bin2) { int p, k; string r(bin1.length()+bin2.length()-1,'0'); for (int i = bin1.length()-1; i >= 0; i--) { for (int j = bin2.length()-1; j >= 0; j--) { r[i+j] += (bin1[i] != '0' && bin2[j] != '0'); } } for (int i = r.length()-1; i > 0; i--) { r[i-1] += (r[i]-'0')/2; r[i] = (r[i]-'0')%2 + '0'; } while(r[0] > '1') { r = "0" + r; r[0] += (r[1]-'0')/2; r[1] = (r[1]-'0')%2 + '0'; } cout << endl << "The multiplication of these numbers is: " << ToDec(r) << endl; }