powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Нужна помощь
3 сообщений из 3, страница 1 из 1
Нужна помощь
    #38512461
motop9307
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
объясните пожалуйста строчку 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;
}
...
Рейтинг: 0 / 0
Нужна помощь
    #38512493
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
объясните пожалуйста строчку

for (int i = in.length() - 1, k = 0; i >= 0; i--)

(почему length() - 1)

цикл по всем индексам элементов массива in , в обратном порядке, от хвоста к голове.

обычно индексы в с начинаются с нуля и через один идут до длины массива минус один. а тут наоборот.
...
Рейтинг: 0 / 0
Нужна помощь
    #38512499
motop9307
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за помощь!!!!
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Нужна помощь
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]