TransWikia.com

Ввод данных с формы, js

Stack Overflow на русском Asked on November 24, 2021

Код выполняет такую задачу:

Напишите программу, которая получает на вход три целых числа a, b ,c,
после чего выводит список чисел x, которые находятся между a и b и
делятся на c без остатка. Гарантируется, что числа a, b, c – целые

У меня вот такие вопросы:

  1. Сам код – работает, но я обнаружила такую проблему, что он будет работать если a и b – имеют одинаковое количество чисел (например: 5-9 или 10-20 будет работать, а уже 5-10 – нет). С чем это связано и можно ли как-то исправить?
  2. Я проверяю числа в диапазоне по циклу, а можно как то исправить, чтобы задание выполнялось, если я напишу не a=10, b=20, а наоборот a=20, b=10?

код

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
    <script>
        function Complete()
        {
            let a, b, c;
            a = document.Sel1.a.value;
            b = document.Sel1.b.value;
            c = document.Sel1.c.value;

            var step;
            for (step = a; step <= b; step++) {
                result = step%c;
                if (result == 0)
                    console.log (step + ' ');
            }   
        }

    </script>
</head>
<body>
<h1>Введите значения:</h1>
<form name="Sel1">
    <p> a: <input name="a" onblur="this.value=this.value.toUpperCase()"></p>
    <p> b: <input name="b" onblur="this.value=this.value.toUpperCase()"></p>
    <p> c: <input name="c" onblur="this.value=this.value.toUpperCase()"></p>
    <!-- Кнопки готовности и сброса -->
    <input type="button" value="Готово" onClick="Complete();">
    <input type="reset" value="Сброс">
</form>
</body>
</html>

4 Answers

  1. В JS строки кодируются в UTF-16 и сравниваются посимвольно (кодовую таблицу символов можно найти в интернете). Для ваших примеров:

    (например: 5-9 или 10-20 будет работать, а уже 5-10 - нет)

    сравнение кодов будет выглядеть следующим образом: 53 <= 57 (для 5-9); 49 <= 50 (для 10-20) и 53 <=49 (для 5-10).

  2. Для поиска мин/макс значений можете воспользоваться методами стандартного встроенного объекта Math:

    let a, b, c;
    a = Number(document.Sel1.a.value);
    b = Number(document.Sel1.b.value);
    c = Number(document.Sel1.c.value);
    
    let mxValue = Math.max(a, b);
    let mnValue = Math.min(a, b);
    

    а в цикле уже

    for (let step = mnValue; step <= mxValue; step++) {...}
    

Answered by azlov on November 24, 2021

function Complete() {
  let a, b, c;
  a = +document.Sel1.a.value;
  b = +document.Sel1.b.value;
  c = +document.Sel1.c.value;

  let arr = [a,b].sort( (a,b) => a - b );
  for (let step = arr[0]; step <= arr[1]; step++) {
      let result = step % c;
      if(result === 0) console.log(step);
  }
}

Answered by fortavey on November 24, 2021

  1. Это связано с тем, что в step <= b сравниваются строки.

    a = +document.Sel1.a.value;
    b = +document.Sel1.b.value;
    c = +document.Sel1.c.value;
    
  2. if (b < a) {
      a = +document.Sel1.b.value;
      b = +document.Sel1.a.value;
    }
    

Answered by Igor on November 24, 2021

Я решил это так:

function complete(e) {
    e.stopPropagation();
    e.preventDefault();

    let sel = document.getElementById('Sel1'),
        a = sel.elements.a,
        b = sel.elements.b,
        c = sel.elements.c,
        res = [];

    for (let i = +a.value + 1; i < b.value; i++) {
        if (i % c.value === 0) {
            res.push(i);
        }
    }

    console.log(res);
}

document.getElementById('e').addEventListener('click', complete);
<!DOCTYPE html>
<html lang="ru">

<head>
    <meta charset="UTF-8">
    <title>test</title>
</head>

<body>
    <form id="Sel1">
        <input type="text" name="a" placeholder="a">
        <input type="text" name="b" placeholder="b">
        <input type="text" name="c" placeholder="c">
        <input type="submit" id="e" value="Подсчитать">
        <input type="reset" value="очистить">
    </form>
</body>

</html>

Answered by Voprositel on November 24, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP