Циклы

Вызыает исполнение кода в области несколько раз

Что такое цикл?

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

цикл while

  • Самый просто и часто используемый тип циклов
  • Содержит условие повторения
    • Так же называется условным циклом
    • Типизируется не только Булквым значением
    • Вызывает true или false
      • 5, 'non-empty', {}, интерпретируется как 'true'
      • 0, '', null, undefined будет интерпретировано как false
while (condition) {
    statements;
}

while цикл. Как это работает?

  • Базовый пример
let counter = 0;
while (counter < 10) {
    console.log('Number : ' + counter);
    counter += 1;
}
  • Вычисляет и печатает сумму первых N натуральных чисел

In [ ]:
var n = 123,
    sum = 0,
    operands = 'Сумма 123';

while(n > 0) {
    sum += n;
    n -= 1;
    operands += '+' + n;
}

console.log(operands + ' = ' + sum);
  • Проверяет является ли число простым или нет.

In [ ]:
var number = Math.floor((Math.random() * 10000));
function onCheckPrime(number) {
        divider = 2,
        maxDivider = Math.sqrt(number),
        isPrime = true;
    
    /*  число X  является простым, если оно больше 1 
    и при этом делится без остатка только на 1 и на X */
    
    while (isPrime && (divider <= maxDivider)) {
        if (number % divider == 0) {
            isPrime = false;
        }
        divider++;
    }
    console.log(`Число ${number}  ${isPrime ? '' : ' не '} простое`);
}

onCheckPrime(number)
  • Вычисляет и печатает сумму первых N натуральных чисел

In [ ]:
function onPrintSum(n) {
        number = 1,
        sum = 1,
        result = 'Сумма 1';

    while (number < n) {
        number += 1;
        sum += number ;
        result += '+' + number;
    }

    result += ' = ' + sum;
   console.log(result);
}
onPrintSum(214)

In [ ]:
listArr = new Array()

while (number % 10) {
    listArr.push(number);
    console.log(number);
    number = Math.floor((Math.random() * 10000));
}

console.log('Найден -> ' + number)

Использование break оператора

  • break прерывает выполнение цикла. И вызывает код следующий далее за циклом.

In [ ]:
function onCalcFact(number) {
    
    var fact = 1,
        factStr = 'n! = ';

    while (number) {
        if (number === 1) {
            break;
        }

        factStr += number + '*';
        fact *= number;
        number -= 1;
    }

    factStr += '1 = ' + fact;
    return factStr;
}

onCalcFact(23)

do-while цикл

  • Имеет другую структуру:
  • Утверждение в блоке выполняется
    • Пока условие выозвращает true
  • Цикл всегда выполняется хотя бы один раз
  • вычислить факториал

In [ ]:
function onCalcFact(number) {
    var fact = 1,
        factStr = 'n! = ';

    do {
        fact *= number;
        factStr += number + '*'
        number--;
    } while (number);

    factStr += ' = ' + fact;
    return factStr;
}

onCalcFact(4)
  • вычислить N^M

In [ ]:
function onPower(n,m) {
    let power = 0,
        product = 1,
        productStr = '';

    do {
        product *= n;
        productStr += n;
        if (power < m - 1) {
            productStr += '*';
        }
        power++;
    } while (power < m);

    productStr += ' = ' + product;
    return productStr
}
onPower(2,5)
  • Конвертиртировать число с десятичного представления до бинарного

In [ ]:
function convertToBin(n) {
    let dec = n,
    result = '';

do {
    result = (dec & 1) + result;
    dec >>= 1;
} while(dec > 0)
    return result
}

convertToBin(21)

Цикл for

  • Обычнно синтаксис цикла for выглядит так:
  • Содержит
    • Проинициализованную переменную - счетчик
    • Проверяет выражение на логическое соответствие
    • Обновляет счетчик
    • Цикл заключается в блоке
for (инициализация; условие; обновление) {
    утверждение;
}

Выражение инициализации

for (let number = 0; number < 10; number += 1) {
    // Можно использовать номер сдесь
}
// Не использовать номер сдесь
  • Вызывается единожды, перед входом в цикл
  • Обычно приименяется декларируется переменная счетчик
    • В выражении инициализапции может быть задекларировано множество переменных

Условие цикла

  • Вызывается перед каждой итерацией
    • Если возвращается true, происходит переходт в тело цикла
    • Если возвращается false, цикл завершается
for (let number = 0; number < 10; number += 1) {
    // Можно использовать номер сдесь
}

// Не использовать номер сдесь

Выражение обновления

for (let number = 0; number < 10; number += 1) {
    // Можно использовать номер сдесь
}

// Не использовать номер сдесь
  • Вызывается в каждой итерации после завершения выполнения операций в теле цикла
  • Обычно используется для обновления счетчика
    • for цик поддерживает список декларированных переменных, разделенным символов , (запятая) operator
  • вычислить N^M

In [ ]:
function onPower(N,M) {
    var	product = 1,
        productStr = "";

    for (let power = 0; power < M; power+=1) {
        product *= N;
        productStr += N;
        if (power != M - 1) {
            productStr += '*';
        }
    }

    productStr += ' = ' + product;
    return productStr;
}
onPower(3,6)
  • вычислить факториал

In [ ]:
function fact(n){
    let factorial = 1;
    const N = n;

    for (let i = 1; i <= N; i += 1) {
        factorial *= i;
    }
    return factorial
}

fact(10)
  • полный прмимер

In [ ]:
for (let i = 1, sum = 1, N = 128; i <= N; i *= 2, sum += i) {
    console.log('i=' + i + ', sum=' +sum);
}

Вложенные циклы?

  • комопозиция циклов называется вложенными циклами

    • Цикл находится внутри другого цикла
    for (let i = 0; i < 10; i += 2) {
         for (let j = 0; j < 20; j += 1) {
             while(i !== j) {
                 console.log(i);
                 j += 1;
             }
         }
     }
    

In [ ]:
function onDrawTriangle(n) {

    for (let row = 1; row <= n; row += 1) {
        for (let column = 1; column <= row; column += 1) {
            process.stdout.write(column + ' ');
        }
        console.log("\n")
    }
}

onDrawTriangle(6)
  • Простые числа

In [ ]:
function onFindPrimes(start,end) {
   
    for (let number = start; number <= end; number+=1) {
        const maxDivider = Math.sqrt(number);

        let isPrime = true,
            divider = 2;

        while (divider <= maxDivider) {
            if (number % divider === 0) {
                isPrime = false;
                break;
            }

            divider += 1;
        }

        if (isPrime) {
            process.stdout.write(number + ', ');
        }
    }
}

onFindPrimes(3,34)

цикл for-in

  • for-in цикл перебирает все параметры объекта

    • Когда объект является массивом, nodeList - коллекция узлов or liveNodeList - живая коллекция узлов, for-in прохводит по всем элементам
    • Если объект не является коллекцией, for-in итерация происходит по его свойствам
  • Итерация по листу параметров в документе

// propName это строка - имя параметра
for (const propName in document) {
    console.log(document[propName]);
}
  • распечатать все

In [ ]:
function printAll(obj) {
    console.log('--------------------------');

    for (const propertyName in obj) {
        console.log('obj[' + propertyName + '] = ' + obj[propertyName]);
    }

    console.log('--------------------------');
}

var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];


var obj = {
    firstName: 'Вася',
    lastName: 'Пупкин',
    age: 23,
    fullName: function () {
        return this.firstName + " " + this.lastName
    },
    toString: function () {
        return 'Name: ' + this.fullName() + '\nAge: ' + this.age
    }
};


printAll(arr);
printAll(obj);

In [ ]:
function printObject(obj) {
    console.log('--------------------------');

    for (const propertyName in obj) {
        if ((typeof obj[propertyName]) != 'function') {
            console.log('obj[' + propertyName + '] = ' + obj[propertyName]);
        } else{
            console.log('obj[' + propertyName + '] = ' + obj[propertyName]());
        }
    }

    console.log('--------------------------');
}
printObject(obj);

for-of loop

  • for-of цикл перебирает элементы в массиве
    • Может использоваться только в массивах, и массиво-подобных обьектах

In [ ]:
var arr = ['One', 'Two', 'Three', 'Four'];
    for (const n of arr) {
        console.log(n);
    }

In [ ]: