Калькулятор для перевода чисел из любой системы счисления в любую через десятичную... на С#; Уже долгое время не могу придумать, как осуществить это, поэтому прошу помощи. Даже не представляю. В просторах Интернета не могу найти ничего подходящего. Помогите, пожалуйста...
Сообщение отредактировал Уайльд - Пятница, 12 Декабря 2014, 19:21
вот первая попавшаяся ссылка в интернете: http://inf.e-alekseev.ru/text/Schisl_perevod.html сначала разберись как это без программирования делать (на листике вручную), а потом все довольно просто.
Сообщение отредактировал Xakep - Пятница, 12 Декабря 2014, 19:40
Xakep, у меня есть идеи, но я не могу их осуществить в силу того, что ещё не до конца разобрался с char, string, этими символами, как их отделять, я вообще в этом плане полный 0; а завтра уже сдавать... думал, что сумею самостоятельно разобраться... и вот вам...
ну тебе наверное просто для лабораторной работы, так можешь тогда просто записать все числа в массив char* который вводится с клавиатуры, чтобы получить число из массива: in_date[index] -= '0'; таким образом можно перевести символ в число, т.к. каждый символ это по сути число от 0 до 255, только этими числами кодируются символы, а отняв '0' мы отнимем код, которым кодируется символ '0', и тем самым получим число. Чтобы определить размер массива, который ты ввел с клавиатуры, можно воспользоваться этим макросом: #define ARRAYSIZE(a) ((sizeof(a) / sizeof(*(a))) / static_cast<size_t>(!(sizeof(a) % sizeof(*(a)))))
либо фиксировано задать максимальную длину массива, например 256, и считать с массива каждый символ, пока не встретишь '\0'. Ну а дальше все просто, простейшие арифметические процедуры, как в статье, которую я тебе скинул.
вот нашел: http://www.cyberforum.ru/cpp-beginners/thread909281.html в примере как я понял из 10ричную системы в 36рисную систему исчисления перевели число, которое находится в массиве s;
Код
#include <iostream.h> #include <cstring> #define DIG "0123456789ABCDEFGHIGKLMNOPQRSTUVWXYZ" using namespace std;
int Atoi(char *s, int p){ int i, a, digit[256] = {0}; for(i = 0; DIG[i]; i++) digit[DIG[i]] = i; for(i = a = 0; s[i]; i++) a = a * p + digit[s[i]]; return a; }
void Itoa(int a, int p, char *s) { static int i = 0, n; if (a) { ++i; Itoa(a / p, p, s); s[n - i--] = DIG[a % p]; } else s[n = i] = '\0'; }
int main(){ char s[1024] = "29234652"; Itoa(Atoi(s, 10), 36, s); cout << s << endl; return 0; }
Сообщение отредактировал Xakep - Пятница, 12 Декабря 2014, 21:02
тут же система исчисления может быть не только 10ричной , а если больше 10ричной то там уже идут буквы, например в 16ричной системе, так что я не совсем понял... ну а то что не на C# то это да, как-то я упустил этот момент )) но все равно, мне кажется не так сложно перевести этот код на C#