Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Работа с текстом (https://javascript.ru/forum/misc/52373-rabota-s-tekstom.html)

ОмаЭль 16.12.2014 16:57

Работа с текстом
 
Есть код: Требуемая задача: Если число не палиндром, то перевернем его и сложим с исходным числом. Далее если опять не полендром, то все по кругу. Я уже запутался, в функции perevernytb() строка возвращается с пробелом в начале и ни какой метод её не берет (для отображения этого в 13 строке стоит вывод), + ко всему функция прорабатывается 1 раз потом переменная обнуляется , ПОЧЕМУ то???? Помогите

Натуральное число называется палиндромом, если оно читается одинаково с обеих сторон (например, 191).

<HTML><HEAD><TITLE>Таблица на Javascript</TITLE>
<SCRIPT type="text/javascript">
<!--
  function perevernytb() {
    //hisl=document.all.hislo.value;
	kolvo=hisl.length;
 	pereven=" ";
			for(var i=0;i<kolvo;i++){
     		 pereven+=hisl.charAt(kolvo-(i+1));
     			  
     
                             }
    document.write("-"+pereven+"-");
    pereven=pereven.replace(/\s+/g,'');
    return pereven 
  						}
  
  
function primer(){
  hisl=document.all.hislo.value;perevernytb();
var chethik=1; 

 perevernytb();
  while(pereven!=hisl){hisl=Number(hisl)+Number(pereven);
   alert(hisl);perevernytb();chethik++;
                    if(chethik==10){break}}

  if(pereven==hisl){document.write("число полиндром : "+hisl);}
  if(pereven!=hisl){document.write("число не полиндром : "+hisl);}
}




//-->
</SCRIPT>

</HEAD>
<body>

<input type="text" value="171" name="hislo"><br>
<input type="button" value="активация" OnClick="primer()" >


</body>
</HTML>




LoL, ни чего не меняя полиндромы начало находить, но что hisl не увеличивается после 1 раза пробела

рони 16.12.2014 17:16

ОмаЭль,
document.write -- это ненадо использовать, это надо убрать и забыть что такое существует.

ОмаЭль 16.12.2014 18:28

Цитата:

Сообщение от рони (Сообщение 346759)
ОмаЭль,
document.write -- это ненадо использовать, это надо убрать и забыть что такое существует.

Почему в разных местах кода для отладки самое то. А для таких заданий для отображения. Лучше с реальной задачей подскажите....

рони 16.12.2014 18:49

ОмаЭль,
когда уберёте из вашего кода document.write -- всё автоматом заработает. давайте я вам код рабочий , а вы 10 ссылок с форума с вопросами, как у вас.

ОмаЭль 16.12.2014 19:18

Цитата:

Сообщение от рони (Сообщение 346772)
ОмаЭль,
когда уберёте из вашего кода document.write -- всё автоматом заработает. давайте я вам код рабочий , а вы 10 ссылок с форума с вопросами, как у вас.

Ахаха официально признаю что я ЛОШАРА хД
Напроч забыл что d.w полностью переписывает страницу хД
Еще подскажи тогда чем лучше смотреть переменные? Кроме как в консоле браузера... и alert...

рони 16.12.2014 19:35

ОмаЭль,
ok )))
function primer(a) {
     for (a = ("" + a).split(""); 1 < a.length;)
         if (a.pop() != a.shift()) return false;
     return true
 };
 alert([primer(191),primer(2002),primer(20022)])

рони 16.12.2014 19:44

ОмаЭль, если очень хочется с document.write
<!DOCTYPE HTML>
<HTML><HEAD><TITLE>Таблица на Javascript</TITLE>
<meta charset="utf-8">
<SCRIPT type="text/javascript">
 document.write = function(a) {
     document.body.appendChild(document.createTextNode(a));
 }

 function perevernytb() {
     //hisl=document.all.hislo.value;
     kolvo = hisl.length;
     pereven = " ";
     for (var i = 0; i < kolvo; i++) {
         pereven += hisl.charAt(kolvo - (i + 1));


     }
     // document.write("-"+pereven+"-");
     pereven = pereven.replace(/\s+/g, '');
     return pereven
 }


 function primer() {
     hisl = document.all.hislo.value;
     perevernytb();
     var chethik = 1;

     // perevernytb();
     while (pereven != hisl) {
         hisl = Number(hisl) + Number(pereven);
         // alert(hisl);
         perevernytb();
         chethik++;
         if (chethik == 10) {
             break
         }
     }

     if (pereven == hisl) {
         document.write("число полиндром : " + document.all.hislo.value);
     }
     if (pereven != hisl) {
         document.write("число не полиндром : " + document.all.hislo.value);
     }
 }
</SCRIPT>

</HEAD>
<body>
<input type="text" value="171" name="hislo"><br>
<input type="button" value="активация" OnClick="primer()" >
</body>
</HTML>

ОмаЭль 16.12.2014 19:50

Видишь ли в задании не просто определить число полиндром или нет, надо что бы оно увеличивалось на перевернутое число и опять проверялось, для этого есть счетчик что бы не зависал хД Дак это как не работало так и не работает, переменная hisl не увеличивается

рони 16.12.2014 20:01

Цитата:

Сообщение от ОмаЭль
переменная hisl не увеличивается

а вы проверяли?

рони 16.12.2014 20:02

ОмаЭль,
верните строку 44 как у вас -- убрал вывод так как не понял зачем 10 раз складывать

ОмаЭль 16.12.2014 20:07

Цитата:

Сообщение от рони (Сообщение 346788)
а вы проверяли?

Да, через alert - можно отследить, какую 44?????

рони 16.12.2014 20:18

ОмаЭль,
так ?
function test(a) {
     for (a = ("" + a).split(""); 1 < a.length;)
         if (a.pop() != a.shift()) return !1;
     return !0
 }

 function primer(a) {
     for (var b = 0; 10 > b && !test(a); b++) a += +("" + a).split("").reverse().join("");
     return [a, test(a)]
 };
 alert([primer(1),primer(2002),primer(18)])

ОмаЭль 16.12.2014 20:25

Да, твой код работает, но для меня это еще сложноватая структура (Имеется ввиду понимаю как ты реализовал, но сам бы так не написал) , как бы смешно тебе это не казалось , мне интересно почему у меня не складывает...

рони 16.12.2014 20:37

ОмаЭль,
потому что -- вы хотите перевернуть строку а сложить числа

ОмаЭль 16.12.2014 20:39

Цитата:

Сообщение от рони (Сообщение 346796)
ОмаЭль,
потому что -- вы хотите перевернуть строку а сложить числа

Дак я типы меняю в ручную, перед действием, кстати если бы происходила конкатенация строк то это бы тоже было заметно, дело в том что она ваще не работает и я хоть убей не могу понять в чем причина

рони 16.12.2014 20:46

ОмаЭль, смотрите медитируйте ... var нехватает ...for нерационален ... document.write ненужен ... но работает.
<!DOCTYPE html>

<html>
<head>
  <title>Таблица на Javascript</title>
  <meta charset="utf-8">
  <script type="text/javascript">
  	document.write = function(a) {
  	  document.body.appendChild(document.createTextNode(a));
  	}
  	function perevernytb() {
  	  kolvo = (''+hisl).length; //преобразуем в строку
  	  pereven = " ";
  	  for(var i = 0; i < kolvo; i++) {
  	    pereven += (''+hisl).charAt(kolvo -(i + 1)); //преобразуем в строку
  	  }
  	  pereven = pereven.replace(/\s+/g, '');
  	  return +pereven    //возвращаем число
  	}
  	function primer() {
  	  hisl = +document.all.hislo.value;  //преобразуем в число
  	  var chethik = 1;
  	  while(perevernytb()!=hisl) {
  	    hisl += perevernytb();
  	    chethik++;
  	    if(chethik==10) {
  	      break
  	    }
  	  }
  	  if(perevernytb()==hisl) {
  	    document.write("число полиндром : " + hisl);
  	  }
  	  if(perevernytb()!=hisl) {
  	    document.write("число не полиндром : " + hisl);
  	  }
  	}
  </script>
</head>

<body>
  <form>
    <input type="text" value="171" name="hislo"><br>
    <input type="button" value="активация" onclick="primer()">
  </form>
</body>
</html>

ОмаЭль 16.12.2014 20:55

про for и document согласен, а вот про var его там и не надо, если его указать то функция к которой обращаются не увидит переменную. P.s. Области видимости =)
Спасибо за помощь!

Aetae 17.12.2014 12:17

Добавлю, что транслит - последнее дело. Хочешь писать по-русски - пиши по-русски, js позволяет:
<html>
<head>
  <title>Таблица на Javascript</title>
  <meta charset="utf-8">
  <script type="text/javascript">
    document.write = function(a) {
        document.body.appendChild(document.createTextNode(a));
    }
    function перевернуть() {
        количество = (''+число).length; //преобразуем в строку
        перевёрн = " ";
        for(var i = 0; i < количество; i++) {
            перевёрн += (''+число).charAt(количество -(i + 1)); //преобразуем в строку
        }
        перевёрн = перевёрн.replace(/\s+/g, '');
        return +перевёрн    //возвращаем число
    }
    function пример() {
        число = +document.all.число.value;  //преобразуем в число
        var счётчик = 1;
        while(перевернуть() != число) {
            число += перевернуть();
            счётчик++;
            if( счётчик == 10 ) {
                break
            }
        }
        if(перевернуть() == число) {
            document.write("число полиндром : " + число);
        }
        if(перевернуть() != число) {
            document.write("число не полиндром : " + число);
        }
    }
  </script>
</head>
 
<body>
  <form>
    <input type="text" value="171" name="число"><br>
    <input type="button" value="активация" onclick="пример()">
  </form>
</body>
</html>
Всё равно это лучше чем транслит.


Часовой пояс GMT +3, время: 14:52.