Урок номер 3

  • Сортировки, в качестве домашнего задания:
    • http://algolist.manual.ru/sort/shell_sort.php - Сортировка Шелла
    • http://algolist.manual.ru/sort/pyramid_sort.php - Пирамидальная сортировка
    • http://algolist.manual.ru/sort/quick_sort.php - Быстрая сортировка

    Решение:

    Анимация реализованна средствами css3. Кадры формируют javascript. Массив создается из десяти элементов с целыми числами до 100 (при желании легко модифицировать). Каждая сортировака в отдельной функции, к которой добавлен функционал перемещения шариков.

    Скрипты находятся по адресу js/main.js

  • Напишите функцию min, принимающую два аргумента, и возвращающую минимальный из них.
    console.log(min(0, 10)); // → 0
    console.log(min(0, -10)); // → -10

    Результат:

    
      function min(a, b) {
        return ( a > b ? b : a );
      }
    
      console.log(min(0, 10)); // → 0
      console.log(min(0, -10)); // → -10
    
      document.write(min(0, 10),' и ',min(0, -10));
          

  • Символ номер N строки можно получить, добавив к ней .charAt(N) ( “строчка”.charAt(5) ) – схожим образом с получением длины строки при помощи .length. Возвращаемое значение будет строковым, состоящим из одного символа (к примеру, “к”). У первого символа строки позиция 0, что означает, что у последнего символа позиция будет string.length – 1. Другими словами, у строки из двух символов длина 2, а позиции её символов будут 0 и 1.Напишите функцию countBs, которая принимает строку в качестве аргумента, и возвращает количество символов “B”, содержащихся в строке.Затем напишите функцию countChar, которая работает примерно как countBs, только принимает второй параметр — символ, который мы будем искать в строке (вместо того, чтобы просто считать количество символов “B”). Для этого переделайте функцию countBs.

    
    function countChar(stroka, a) {
      var count = 0;
    
      for (var i =0 ; i < stroka.length-1; i++) {
    
        if ( stroka.charAt(i) == a )
          count++;
    
      }
    
      return count;
    }
    
    document.write('Число вхождений буквы \"е\" в тексте \"Ноль чётный. Единица нечётная. У любого числа N чётность такая же, как у N-2.Напишите рекурсивную функцию isEven согласно этим правилам.\" равно: ',countChar("Ноль чётный. Единица нечётная. У любого числа N чётность такая же, как у N-2.Напишите рекурсивную функцию isEven согласно этим правилам." , "е") );
     

  • Ноль чётный. Единица нечётная. У любого числа N чётность такая же, как у N-2.Напишите рекурсивную функцию isEven согласно этим правилам. Она должна принимать число и возвращать булевское значение. Потестируйте её на 50 и 75. Попробуйте задать ей -1. Почему она ведёт себя таким образом? Можно ли её как-то исправить?

    
     function isEven(N) {
    
    
    if (N > 0) {
      if( (N-2) == 0 ) {
        return true;
      } else if ( (N-2) == 1) {
        return false;
      } else {
        return isEven( N-2 );
      }
    } else {
      if( (N+2) == 0 ) {
        return true;
      } else if ( (N+2) == 1) {
        return false;
      } else {
        return isEven( N+2 );
      }
    }
     
    
      
    }
    
    document.write('50 ', isEven(50),'<br>');
    document.write('70 ', isEven(75),'<br>');
    document.write('-1 ', isEven(-1));
     

    Для отрицательных чисел можно сделать двумя способами, либо по модулю взять число, либо сделать как я, т. е. прибавлять 2. Иначе будет происходить переполнение стека, т. к. бесконечная рекурсия.

  • Калькулятор.

    Простой калькулятор. Можно последовательно выполнять действия как на обычном калькуляторе. До конца не протестирован, но кажется работает.

    Введите число:

    
            var buff="test";
            var result=0;
            var first=false;
    
            
            function calc(znak) {
    
              var x = + document.getElementById("userEntry").value;
              
              if(buff != znak && buff != "test")
              {
               calc(buff);
               buff = znak;
               return;
              }
    
              buff = znak;
    
              if(first)
              {
    
                switch(znak) {
                  case "+" : result = result + x; break;
                  case "-" : result = result - x; break;
                  case "/" : result = result / x; break;
                  case "*" : result = result * x; break;
                }
    
              }
              else
              {  
                first = true;
                result =  x;
              }
    
              document.getElementById("userEntry").value = String(result); 
            }
    
            function clean() {
              result = 0;
              buff="test";
              first = false;
              document.getElementById("userEntry").value = 0;
            }
    
            function end() {  
              calc(buff);
              result = 0;
              buff="test";
              first = false;
            }