Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Нужна помощь
|
|||
|---|---|---|---|
|
#18+
объясните пожалуйста строчку for (int i = in.length() - 1, k = 0; i >= 0; i--) (почему length() - 1) #include <cstdlib.h> #include <cstdio.h> #include <iostream.h> #include <string.h> #include <cmath.h> using namespace std; string symbols = "0123456789ABCDEFGHJKLMNOPQRSTUVWXYZ"; bool check_num(string, int); int input_sys(bool); string input_num(int); double anyToDec(string, int); string DecToAny(double, int); int main() { setlocale(LC_ALL,""); int first_sys = 0, second_sys = 0; string in_num; first_sys = input_sys(true); in_num = input_num(first_sys); second_sys = input_sys(false); cout<<"Число "<<in_num<<" в "<<second_sys<<" системе счисления"<< " будет представлено в виде: "<< DecToAny(anyToDec(in_num, first_sys), second_sys) <<endl; getchar(); getchar(); return 0; } bool check_num(string str_num, int base) { for (int i = 0, k = 0, num; i < str_num.length(); i++) { if (str_num.at(i) != '.') num = symbols.find(str_num.at(i)); else k++; if ((num>=base) || k>=2 || num==-1) return false; } return true; } int input_sys(bool f1st) { int sys = 0; string hello; if (f1st) hello = " в которой записано число: "; else hello = " в которую переводить число: "; cout<<"Введите основание системы счисления,"<<hello; cin>>sys; cout<<endl; while (sys<2 || sys>36) { cout<<"Проверьте правильность ввода,"<<endl<< "основание системы счисления должно быть не меньше 2 и не больше 36 !"<<endl; cout<<"Введите основание системы счисления,"<<hello; cin>>sys; cout<<endl; } return sys; } string input_num(int sys) { string num; cout<<"Введите число, которое желаете перевести"<<endl<< "(в качестве разделителя целой и дробной части используйте"<<endl<< "символ '.'. Буквы вводите в верхнем регистре и латинницей): "; cin>>num; cout<<endl; while (!check_num(num,sys)) { cout<<"Вы ввели некорректное число!"<<endl; cout<<"Проверьте правильность написания и повторите ввод: "; cin>>num; cout<<endl; } return num; } double anyToDec(string in, int base) { double temp = 0; int dot = in.find('.'); if (dot == -1) for (int i = in.length() - 1, k = 0; i >= 0; i--) temp += symbols.find(in.at(i))*pow((double)base,(double)k++); else { for (int i = dot-1, k = 0; i >= 0; i--) temp += symbols.find(in.at(i))*pow((double)base,(double)k++); for (int i = dot+1, k = -1; i < in.length(); i++) temp += symbols.find(in.at(i))*pow((double)base,(double)k--); } return temp; } string DecToAny(double in, int base) { string temp; int divresult; int tempNum = (int)in; in = in - (int)in; do { divresult = tempNum % base; tempNum = tempNum / base; temp.insert(0,symbols,divresult,1); if (tempNum<base && tempNum!=0) temp.insert(0,symbols,tempNum,1); } while (tempNum>=base); temp += "."; tempNum = 0; do { in *= base; temp += symbols.at((int)in); in -= (int)in; tempNum++; } while (in!=0 && tempNum<=7); return temp; } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2013, 18:58 |
|
||
|
Нужна помощь
|
|||
|---|---|---|---|
|
#18+
объясните пожалуйста строчку for (int i = in.length() - 1, k = 0; i >= 0; i--) (почему length() - 1) цикл по всем индексам элементов массива in , в обратном порядке, от хвоста к голове. обычно индексы в с начинаются с нуля и через один идут до длины массива минус один. а тут наоборот. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2013, 19:51 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38512499&tid=2019790]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
72ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
2ms |
| others: | 13ms |
| total: | 179ms |

| 0 / 0 |
