Последовательность цифр l oop не работает с выбранным входом - PullRequest
0 голосов
/ 29 мая 2020

Мне нужно напечатать то же количество раз, что и я ввожу пример (номер переменной): если я поставлю 21, он должен дать мне 21 число для печати. ​​

В настоящее время, если я поставлю 20, он даст мне ровно 20 (все хорошо), но если я поставлю 21, это даст мне еще 3, а не 1 (это то, что он должен мне дать), если я поставлю 23, это ничего мне не даст.

1º = 10 2º = 8

3º Сумма двух предыдущих элементов: (10 + 8 = 18)

4º Элемент дважды перед (8) умножается на 3, делится на 2 и берется вся часть: (8 * 3/2 = 12)

5º Элемент 2 раза раньше делится на 2 и берется вся его часть. (2/18 = 9)

и процесс повторяется с 3-го элемента. y se vuelve a Repetir el processso desde el elemento 3º. Это изображение решенного упражнения

Что у меня есть

for(i = 1; i <= numero/3; i++){
            zenb3 = parseInt(zenb1+zenb2);
            txt = txt + zenb3 + " ; ";
      zenb4 = parseInt((zenb2*3)/2);
            txt = txt + zenb4 + " ; ";
      zenb5 = parseInt(zenb3/2);
            txt = txt + zenb5 + " ; ";
            zenb1 = zenb4;
      zenb2 = zenb5;

        }

Полный код

     <!DOCTYPE html>
        <html lang="en">
        <head>
          <meta http-equiv="content-type" content="text/html;charset=utf-8">
          <title>Serie</title>
         
        <script type="text/javascript" src="https://gc.kis.v2.scr.kaspersky-labs.com/FD126C42-EBFA-4E12-B309-BB3FDD723AC1/main.js?attr=23X8uZ330OPQ79HpztynRIAoQZF-imAD8YOpk46lts2NHXEM390b4AZlQMa9nASo6jEHtmal2hvV_J8GQ3JiGVXNr6UjSxp5Oip2rWtoPrdUplwygmAyaW8cCN7FNvnAb2otSRqseeBGhieACOJwnxxf3qt6W8gzVcKXZK46ePiJ4eCiCJ34ZnjhOqQ8qjNJ" charset="UTF-8"></script></head>
        <body>
          <h1>Serie</h1>
          <fieldset>
            <legend>Serie</legend>
          <form action="" method="get" name="finfo">
            <table>
                <tr><td><label>Ingrese el numero de elementos:</label></td></tr>
                <tr><td><input type="text" id="zenbakia" name="tope" size="10" maxlength="50">
                    <input type="button" value="Erakutsi" onclick="creaMensaje()"/>
                    <input type="reset" value="Garbitu" onclick="iniciar()"/></td>
                </tr>
            </table>
        		
          </form>
        </fieldset>
        
          <p id="mensaje"></p>
        
        
        <script>
        
        function creaMensaje() {
        
            var txt = "";
        	var zenb1 = 10;
        	var zenb2 = 8;
        	var zenb3 = 0;
        	var zenb4 = 0;
          var zenb5 = 0;
            var numero = document.getElementById("zenbakia").value;
        
            if (numero != parseInt(numero)){
        		txt = "Debe ser un numero entre 20 y 40";
        	}else if (numero < 20 || numero > 40 ){
        		txt = "Debe ser un numero entre 20 y 40";
        	}else{
        	
        		txt = zenb1 + " ; " + zenb2 + " ; " ;
        		
              for(i = 1; i <= numero/3; i++){
        			zenb3 = parseInt(zenb1+zenb2);
                    txt = txt + zenb3 + " ; ";
              zenb4 = parseInt((zenb2*3)/2);
                    txt = txt + zenb4 + " ; ";
              zenb5 = parseInt(zenb3/2);
                    txt = txt + zenb5 + " ; ";
        			zenb1 = zenb4;
              zenb2 = zenb5;
          
                }
        
        
        	}
        	
            document.getElementById("mensaje").innerHTML = txt;
        }
        
        function iniciar()
        {
         	document.getElementById("mensaje").innerHTML ='';
        
        }
        
        
        </script>
        
        </body>
        </html>

Ответы [ 2 ]

0 голосов
/ 29 мая 2020

Я сделал адаптацию в вашем коде и объяснил проблему в комментариях:

function creaMensaje() {

        var txt = "";
        // var zenb1 = 10;
        // var zenb2 = 8;
        var zenbs = [10, 8]
        var numero = document.getElementById("zenbakia").value;

        if (numero != parseInt(numero)){
            txt = "Debe ser un numero entre 20 y 40";
        }else if (numero < 20 || numero > 40 ){
            txt = "Debe ser un numero entre 20 y 40";
        }else{

            txt = zenbs[0] + " ; " + zenbs[1] + " ; " ;

            for(let i = 2; i < numero; i++) {
               if((i + 1) % 3 == 0) {
                   zenbs[i] = zenbs[i - 1] + zenbs[i - 2]
               }
               else if((i + 1) % 3 == 1) {
                   zenbs[i] = Math.floor(zenbs[i - 2] * 3/2)
               }
               else if((i + 1) % 3 == 2) {
                   zenbs[i] = Math.floor(zenbs[i - 2]/2)
               }
          
               txt += zenbs[i] + ' ; '
        
            }


        }

        document.getElementById("mensaje").innerHTML = txt;
    }

    function iniciar()
    {
        document.getElementById("mensaje").innerHTML ='';

    }
<h1>Serie</h1>
      <fieldset>
        <legend>Serie</legend>
      <form action="" method="get" name="finfo">
        <table>
            <tr><td><label>Ingrese el numero de elementos:</label></td></tr>
            <tr><td><input type="text" id="zenbakia" name="tope" size="10" maxlength="50">
                <input type="button" value="Erakutsi" onclick="creaMensaje()"/>
                <input type="reset" value="Garbitu" onclick="iniciar()"/></td>
            </tr>
        </table>

      </form>
    </fieldset>

      <p id="mensaje"></p>

Подводя итог:

Я удалил две исходные переменные (zenb1 и zenb2) и создал массив с этими двумя значениями (zenbs ), затем переделал его l oop, в основном он начинается с числа 2 для создания чисел, которые являются суммой предыдущих 2, а затем добавляет это новое число в переменную txt

0 голосов
/ 29 мая 2020

Возможно, вы хотите начать свой l oop с 1 и go для count + 1:

function fibonacci(num){
  if(num < 2){
    return 1;
  }
  return fibonacci(num-1)+fibonacci(num-2);
}
function fabWalk(count, func){
  for(let i=1,l=count+1; i<l; i++){
    func(fibonacci(i));
  }
}
fabWalk(21, console.log);
...