• Страница 1 из 1
  • 1
Для опытных: Проблема с циклом
Ilyas74
Дата: Понедельник, 04.07.2011, 09:06 | Сообщение # 1
молчун
Группа: Пользователи
Пользователь №: 3785
Сообщений: 8
Привет!
У меня такая проблема: Необходимо в цикле перевести число с основанием 10 в любую другую СС.
Я попытался и вот что получилось:
В примере нужно число "10" из десятичной СС перекодировать в восьмеричную, т.е. должно получиться "12"
Code

//...
value = "10"; // число, передаваемое в аргументах функции
originSS = 10; // СС числа, тоже передаваемое в аргументах
finalSS = 8;  // СС в которое надо перекодировать число

var valueParse = parseFloat( value ),
     valueArray,
     valueOld;

// ...

valueOld = valueParse;
valueArray = [];

for ( var i = 0; valueOld > finalSS - 1; i++ )
{
     valueArray[ i ] = ( valueOld % finalSS > finalSS - 1 ) ?                  ( valueOld % finalSSParse ) : valueOld;
     valueOld = valueOld - ( valueOld % finalSSParse );
}

// ...

valueArray.reverse();
newValue = valueArray.push( "" );

// ...
return newValue;


Поясняю:
Передаем в аргументах функции число, начальную СС, конечную СС.
По правилу перевода десятичных чисел в восьмеричную систему его нужно последовательно делить на 8 до тех пор, пока не останется остаток, меньший или равный 7,
например: 10/8 = 1, остаток 2. значит получится 12 (по правилу), дак вот
1 и есть ValueOld или должно получиться после 1 прохода по циклу, и если ValueOld меньше 7, то оно присваивается к последнему члену массива. А дальше все должно быть понятно.
В общем ничего не получается. Помогите, пожалуйста.
  
Ilyas74
Дата: Понедельник, 04.07.2011, 16:55 | Сообщение # 2
молчун
Группа: Пользователи
Пользователь №: 3785
Сообщений: 8
Все, проблема решена, если кому надо, то вот:
Code

//...
value = "10";
originSS = 10;
finalSS = 8;

var valueParse = parseFloat( value ),
      valueArray,
      valueOld;

// ...

valueOld = valueParse;
valueArray = [];

for ( i = 0;; i++ )
{
     if ( valueOld > finalSSParse - 1 )
     {
  valueArray[ i ] = ( valueOld > finalSSParse - 1 ) ?
          ( valueOld % finalSSParse ) : valueOld;
  valueOld = ~~( valueOld / finalSSParse );
     }
     else
     {
  valueArray[ i ] = valueOld;
         break;
     }
}
// ...

valueArray.reverse();
newValue = valueArray.join( "" );

// ...
return newValue;
  
Aleko
Дата: Четверг, 07.07.2011, 08:11 | Сообщение # 3
Watching you
Группа: Администраторы
Пользователь №: 2
Сообщений: 1621
Получено оценок: 167
Ёперный театр. Я же уже выкладывал функции.

Code
<script>
// десятичную в любую
function customFromDec(f,e){var d='',h,g=e.length;while(true){h=Math.floor(f/g);if(h==0){d=e[f]+d;break}else{d=e[f%g]+d;f=h}}return d};

// любую в десятичную
function decFromCustom(f,e){var d=0,h=0,g=e.length;f=f.split('').reverse();do{h+=e.indexOf(f[d])*Math.pow(g,d)}while(f[++d]);return h};

// пример применения
customFromDec(586,"01") // => 1001001010 — десятичную в двоичную

</script>


Бесплатные обои.
  
Ilyas74
Дата: Четверг, 07.07.2011, 15:36 | Сообщение # 4
молчун
Группа: Пользователи
Пользователь №: 3785
Сообщений: 8
Aleko, я хотел написать функции сам, без помощи других. Единственное, у меня возникла вот эта проблема и я ее решил. Скрипт получился, хотя и объемом больше вашего.
  
  • Страница 1 из 1
  • 1
Поиск:
© Studioad.ru 2006 · 2010. Использование материалов форума на сторонних ресурсах без прямой обратной ссылки строго запрещено. Хостинг от uCoz.