Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Двой цикл FOR 
:(
    Опции темы
denisalekss
Дата 17.12.2020, 00:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 7.12.2020

Репутация: нет
Всего: нет



Есть задача:

Код

Вывести простые числа
важность: 3

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

Другими словами, n > 1 – простое, если при его делении на любое число кроме 1 и n есть остаток.

Например, 5 это простое число, оно не может быть разделено без остатка на 2, 3 и 4.

Напишите код, который выводит все простые числа из интервала от 2 до n.

Для n = 10 результат должен быть 2,3,5,7.

P.S. Код также должен легко модифицироваться для любых других интервалов.



Вот решение задачи вложенным циклом FOR

Код

let n = 10;

nextPrime:
for (let i = 2; i <= n; i++) { // Для всех i...

  for (let j = 2; j < i; j++) { // проверить, делится ли число..
    if (i % j == 0) continue nextPrime; // не подходит, берём следующее
  }

  alert( i ); // простое число
}


Правильно я понимаю? Речь про строку
  if (i % j == 0) continue nextPrime;

За первой итерацией будет проверяться остаток от деления 3/2?
i до того как дойдет до второго внутреннего for из-за i++ станет 3, хотя он стартовал с 2 и затем будет в If проверяться остаток от деления 3/2 (три на два за первым прогоном цикла)?

Это сообщение отредактировал(а) denisalekss - 17.12.2020, 00:09
PM MAIL   Вверх
bars80080
Дата 17.12.2020, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 44
Всего: 315



Код

<div>
    <input id="digit" />
    <input type="button" onclick="calc();" value="run" />
</div>
<div>
    result: <span id="result"></span>
</div>
<script>
    function calc() {
        let d = document.getElementById('digit').value;
        
        let res = 'error';
        if(!isNaN(d)) {
            let arr = [];
            let fin = Math.floor(d / 2);
            for(let i = 2; i <= fin; i++) {
                if(!(d % i)) {
                    arr.push(i);
                }
            }
            if(arr.length) {
                res = d + ' - не простое число. множители: ' + arr.join(', ');
            } else {
                res = d + ' - простое число';
            }
        }
        
        document.getElementById('result').innerHTML = res;
    }
</script>

PM MAIL WWW   Вверх
denisalekss
Дата 17.12.2020, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 7.12.2020

Репутация: нет
Всего: нет



Натуральное число, большее 1, называется простым,
если оно ни на что не делится, кроме себя и 1. 
Как я понял, например если взять число 4,
 оно не простое, оно делится и на себя и на 1 и на четное 2.

Теперь если глянуть на код как он работает.

1-ая итерация цикла:
Идет проверка на остаток числа 3/2= есть остаток от деления.
Алерт должен вывести 3 а не 2, но почему вывод вначале двйоки произошел? 
Ведь i = 3 за первым прогоном после i++ он стал 3
2-ая итерация цикла:
Метка перешла на начало цикла и пошла проверка 4/3? 

Объясните, как происходит первая и вторая итерация в этом коде цифрами, что на что делится и как выводится очередность?
Я модернизировал код с кнопкой, для удобности, но как происходит проверка при итерациях не понял.

Код

<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title>Тест</title>
  <script>
  function fanta(){
    let rez =  one.elements.number.value;
        nextPrime:
     for(let i = 2; i<=rez; i++){
        for( let j = 2; j < i; j++){
            if(i%j ==0) continue nextPrime;
       }
    document.write(i+"<br>");       
    }
}
  
  </script>
 </head>
 <body>   
<form id="one">
    <input type="text" name="number" >
    <input type="submit" onClick="fanta()" value="Жми">
</form>

<p id='result'></p>

 </body>
</html>



Это сообщение отредактировал(а) denisalekss - 17.12.2020, 20:39
PM MAIL   Вверх
denisalekss
Дата 18.12.2020, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 7.12.2020

Репутация: нет
Всего: нет



Вроде разобрался, гляньте, правильно ли я понял?

[code=javascript]
1. В самом начале во Внутренним цикле for идет сравнение 2<2?
  (i=2, j=2) нет 2 не меньше двух, Внутренний цикл for не выполняется, так 
как условие ложь и идёт переход со внутреннего во внешний цикл for где
 выполняется инструкция с выводом document.write(i+"<br>");  Выводим в конечный
результат  Первую цифру 2 на экран.

<-------------------------------------------------------------------------------------------------->

2. i увеличивается на один во внешнем цикле for, i =3, Далее во внутреннем 
цикле for идёт сравнение 2<3?  (j=2, i=3) Да, 2 меньше трех и выполняется
 условие if Во внутреннем цикле. 3/2 дает остаток 0? Нет, не дает, Идёт возврат снова
 во внутренний цикл где (j=3, i=3), 3<3? Нет, не меньше, Внутренний Цикл for 
не выполняется Идёт переход во внешний цикл For в котором выполняется инструкция

document.write(i+"<br>");   Выводим в конечный результат цифру 3 на экран.

<-------------------------------------------------------------------------------------------------->

3.i увеличивается на один во внешнем цикле for, i =4, Далее во внутреннем
 цикле for идёт сравнение 2<4?  (j=2, i=4) Да, 2 меньше 4 и выполняется условие
 if Во внутреннем цикле. 4/2 дает остаток 0 -это истинна и идет переход
 к метке nextPrimе.  Запускается внешний цикл снова,  увеличивается i на один 
во внешнем цикле for и i =5.  Далее во внутреннем цикле for идёт сравнение 2<5?  
(j=2, i=5), Да, меньше, выполняем if во внутреннем цикле, if дает ложь. Идёт переход
 снова во внутренний цикл for, j увеличивается на 1 (j=3, i=5). 

        3<5? Да, снова выполняется условие if, 

5/3 дает ложь, идет снова возврат во внутренний цикл for, (j=4, i=5), 

Выполняется снова if, 5/4 дает ложь, снова возврат во внутренний цикл

(j=5, i=5) 5<5, Нет не меньше идёт переход во внешний
 цикл for где выводится через  document.write(i+"<br>");

результат на экран Имеем уже на данный момент 2,3, 5 на выводе.

<-------------------------------------------------------------------------------------------------->

4. i увеличивается на один во внешнем цикле for, i =6, Далее во внутреннем цикле for 
идёт сравнение 2<6?  (j=2, i=6) Да, 2 меньше 6 и выполняется условие if Во внутреннем 
цикле. 6/2 дает остаток 0, идете переход к метке. Снова запускается внешний цикл for, 
уже  i=7. Во внутреннем цикле for Идёт сравнение 2<7, да. Условие иф дает ложь
 при 7/2, происходит возврат во внутренний цикл for (j=3, i=7) Условие иф дает ложь
 при 7/3, происходит возврат во внутренний цикл for (j=4, i=7) Условие иф дает ложь
 при 7/4, происходит возврат во внутренний цикл for (j=5, i=7) , Условие иф дает ложь
 при 7/5, происходит возврат во внутренний цикл for (j=6, i=7) Условие иф дает ложь 
при 7/6, происходит возврат во внутренний цикл for (j=7, i=7). 7<7? Нет, Идет переход
 во внешний цикл for в котором document.write выводит на экран цифру семь.
<-------------------------------------------------------------------------------------------------->

[/JS]

Это сообщение отредактировал(а) denisalekss - 18.12.2020, 21:11
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1050 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.