Пишу переводчик из разных систем счисления в другие(пока только в 10ю и для целых чисел) и при добавлени 11-16ричных систем вышла ошибочка, которую никак не могу найти не смотря на простоту кода... Вот код: Code: #include<iostream> #include<string> #include<cmath> #include<cstdlib> using namespace std; int main() { string chislo, ex; int length, i, k, chisl[100]; double p, sum(0); do { cout<<"Input data to convert into DEC system!"<<endl<<"Input p: "; do { cin>>p; p=static_cast<int>(p); if ((p>16) || (p<2)) { cerr<<"Error 'p' is bigger than 16, or less than 2!!!"<<endl; cout<<"Input p: "; } } while(p>16 || p<2); cin.ignore(100, '\n'); cout<<"Input number: "; getline(cin, chislo); length=chislo.length(); for (i=0; i<=(length-1); i++) { chisl[i]=static_cast<int>(chislo[i])-static_cast<int>('0'); if (chisl[i]==49) { chisl[i]=10; } else if (chisl[i]==50) { chisl[i]=11; } else if (chisl[i]==51) { chisl[i]=12; } else if (chisl[i]==52) { chisl[i]=13; } else if (chisl[i]==53) { chisl[i]=14; } else if (chisl[i]==54) { chisl[i]=15; } if (!((chisl[i]>=0)&&(chisl[i]<=15))) { cerr<<"Error, incorrect data!"; exit(1); } chisl[i]++; cout<<chisl[i]<<endl; chislo[i]++; } for (i=0, k=(length-1);k>=0, i<=(length-1);k--, i++) { sum+=chisl[i]*pow(p,k); } cout<<"result: "<<sum<<endl<<endl<<"Input 'exit' to quit, or any key to continue: "; sum=0; cin>>ex; cout<<endl; cout<<static_cast<int>('a')-static_cast<int>('0')<<endl; //проверка, выдает 49 cout<<static_cast<int>('1')-static_cast<int>('0'); //выдает 1 }while(ex!="exit"); return 0; } В части кода(который отвечает за перевод строковых данных в целочисленные и заполнение массива целочисленного): Code: for (i=0; i<=(length-1); i++) { chisl[i]=static_cast<int>(chislo[i])-static_cast<int>('0'); if (chisl[i]==49) { chisl[i]=10; } else if (chisl[i]==50) { chisl[i]=11; } else if (chisl[i]==51) { chisl[i]=12; } else if (chisl[i]==52) { chisl[i]=13; } else if (chisl[i]==53) { chisl[i]=14; } else if (chisl[i]==54) { chisl[i]=15; } if (!((chisl[i]>=0)&&(chisl[i]<=15))) { cerr<<"Error, incorrect data!"; exit(1); } chisl[i]++; cout<<chisl[i]<<endl; chislo[i]++; } очевидно есть ошибка, так как при выборе p=16 и числа ааа, в целочисленный массив записывается вместо 10, 10, 10 --> 11, 11, 11. Ну и сответсвенно, к примеру, вместо 6 записывается 7... Если код по переводу убрать, т.е. исключить 11-16 системы и написать: Code: for (i=0, k=(length-1);k>=0, i<=(length-1);k--, i++) { sum+=(static_cast<int>chisl[i]-static_cast<int>('0'))*pow(p,k); } то всё нормально работает... Помогите плиз найти в чём ошибка =\
Ой а теперь можно и вещественные числа переводить? Чтотоя упустил тот момент, когда, например, стало можно переводить 3.14 в 12-ричную систему счисления
Нет. Ты сам на единицу содержимое увеличиваешь. Code: // chisl[i]++; cout<<chisl[i]<<endl; // chislo[i]++; Закомменть увеличение на 1 (выше см.). Я проверила с 0a - получается 10 0aa - 170 0aaa -2730 0aaaa-43690 это верные ответы, я пересчитала далее b - 11 bbb - 3003 сссс - 52428 ab -171 =>теперь все верно В общем дальше не смотрела.... вроде норм считает
Ооо! Спасибо) как же я ступил-то =\ to_Great_ да упустил, можно переводить... например 123.5 в 6тирчиной, в 10ричной будет: 1*6^2+2*6^1+3*6^0+(5*^6^(-1)) вот тебе дробная часть =\ тоже самое для перевода из 10ричной в другие с.ч., только алгоритм немного другой: для целой части мы делим число на порядок с.ч., пока частное не будет меньше порядка и берём остатки от деления, начиная с последнего частного; для дробной же части, мы умножаем дробную часть со значащим нулём в начале на порядок, и берём целые части получившихся результатов до нужной точности...
МГУ ВМиК да ктому же это вполне лоогично, что ты хочешь сказать, что у других систем счисления не может быть дробной части??? тогда бред будет! а если она есть то почему она не может участвовать в переводе??? что мешает, а правило вполне нормальное, стпень уменьшается, и на единицах становится 0, на десятичных -1, всё логично...
ЗЫ. Ну я не говорю про мантиссу дробных представлений. Там такое действиетльно есть. Но больше нигде я не видел применения. ЗЫЫ. Тоже МГУшник?) Я с физфака через дорогу от меня ЗЫЫЫ. Ладно проехали мне просто щас поп*деть охота D
[offtop]МГУ 4евер) у меня пол класса на физфак пошло, а я один на ВМиК, хотя долго выбирал между физфаком и вмк=)[/offtop]