Tuesday, July 16, 2013

Lesson 3.

1. Course 2667. Module 3. IF, relational operators, logfical operators. 2. problems: - max of 3 (4,5,6...) - max or min - age - gender age

62 comments:

  1. Отличная подборка сайтов для самостоятельной учебы
    http://habrahabr.ru/post/156241/
    Ссылка на торрент для Microsoft Visual Studio Ultimate 2012. Версия взломанная так что на ваш выбор
    http://zalil.ru/34639689

    ReplyDelete
    Replies
    1. Спасибо!
      Хочется отметить сайт intuit.ru, на котором выложена тьма бесплатных курсов на всевозможные темы, связанные с околокомпьютерными дисциплинами, включая программирование. Правда, на русском.

      Delete
    2. Ссылка на torrent. INTUIT.ru: Локальная версия курсов (2011) - 370 курсов (DVD) [2011] [ISO].Локальная версия сайта. Намного удобнее, доступны все курсы и не требует регистрации http://nnm-club.ru/forum/viewtopic.php?t=287586

      Delete
  2. Сфотографировал и отправил (тем кто записался, разумеется) на email список телефонов и email нашей группы. Если кто-то вдруг не получил список напишите письмо мне на email alexzubc(собака)gmail(точка)com.

    ReplyDelete
  3. Если кому-то будет вдруг интересно, я выложил полностью решение всех задач из первого домашнего задания (того, что задавали на втором занятии). Вот ссылка для скачивания: http://yadi.sk/d/_SIGsSoM6uhPE
    P.S. А это очень простой и удобный (полностью бесплатный) редактор блок-схем, которым я пользуюсь. Ссылка для скачивания: http://www.downloadbestsoft.com/Diagram-Designer.html

    ReplyDelete
  4. Ссылка на 80+ гигабайт разных кусов правда все на англ языке. http://nnm-club.ru/forum/viewtopic.php?t=406519 Единственный минус это то, что они не используют Visual Studio но важен то код а не компилятор.

    ReplyDelete
    Replies
    1. Спасибо! Замечу, что по этой ссылке необязательно качать все 80+ гигибайт, можно выбрать и скачать только то что нужно (например только уроки по C#).

      Delete
  5. alert("Adding five numbers");



    // input
    var num1 = parseInt(prompt("Enter the 1 number"));
    var num2 = parseInt(prompt("Enter the 2 number"));
    var num3 = parseInt(prompt("Enter the 3 number"));
    var num4 = parseInt(prompt("Enter the 4 number"));
    var num5 = parseInt(prompt("Enter the 5 number"));

    var nummax = num1; //flag

    //Process
    if (num2 > num1)
    {
    nummax == num2
    };

    if (num3 > num2) {
    nummax == num3
    };

    if (num4 > num3) {
    nummax == num4
    };

    if (num5 > num4) {
    nummax == num5
    };

    //output

    alert("max number is " + nummax);



    почему не работает

    и огромное спасибо за всю предаставленую информацию

    ReplyDelete
    Replies
    1. ндрей ты везде пишешь после if (num2 > num1) следующий код:
      {
      nummax == num2
      }


      А должно быть так:
      {
      nummax = num2
      }

      Нужно ПРИСВАИВАТЬ переменной nummax значение которое лежит в num2, а ты СРАВНИВАЕШЬ.
      "==" - это оператор СРАВНЕНИЯ (логический true/false),
      а должно быть "равно".
      "=" - оперататор ПРИСВОЕНИЯ значения переменной.
      P.S. Прошу прощения, если объяснил излишне подробно привычка после работы в helpdesk :)

      Delete
    2. Только сейчас заметил вторую важную ошибку в твоем тексте программы - в условии оператора if.
      Нужно сравнивать num2 > nummax, а не num2 > num1. И так везде.
      Вот рабочий код, только рекомендую не делать "копи-паст", а разобраться в каждой строчке:
      // input
      var num1 = parseInt(prompt("Enter the 1 number"));
      var num2 = parseInt(prompt("Enter the 2 number"));
      var num3 = parseInt(prompt("Enter the 3 number"));
      var num4 = parseInt(prompt("Enter the 4 number"));
      var num5 = parseInt(prompt("Enter the 5 number"));

      var nummax = num1; //flag

      //Process
      if (num2 > nummax) {
      nummax = num2;
      }

      if (num3 > nummax) {
      nummax = num3;
      }

      if (num4 > nummax) {
      nummax = num4
      }

      if (num5 > nummax) {
      nummax = num5;
      }

      //output

      alert("max number is " + nummax);

      Delete
    3. Ещё один момент: правильно расставлять ";". Точку с запятой нужно ставить после каждой отдельной инструкции. Например, после закрывающей фигурной скобки точка с запятой не требуется, фигурные скобки обозначают отдельный блок (список) инструкций.

      Delete
    4. Если блок после if содержит только одну инструкцию, то фигруные скобки не обязательны. Фигрурные скобки требуются лишь когда инструкций (т.е. операторов, вычислений, вызовов функций) больше чем одна.
      Пример if без фигурных скобок:
      if (num2 > nummax)
      nummax = num2; //одна инструкция, фигурные скобки не обязательны.

      if (num3 > nummax) //одна инструкция, фигурные скобки не обязательны.
      nummax = num3;


      Пример if с нескольколькими инстукциями и фигурными скобками:
      if(num2 > nummax) {
      nummax = num2; //первая инструкция
      alert('Now nummax is ' + nummax); //вторая инструкция
      }

      Delete
  6. This comment has been removed by the author.

    ReplyDelete
  7. Думаю вы обратили внимание, на третьем занятии Сергей показал нам интересную "фишку" языка javascript.
    Чтобы в программе можно было вводить и обратывать дробные числа ("5.2", "1.9", "0.5"). Преобразование строки в число делаем с помощью команды Number:
    var num1 = Number(prompt("Enter the 1 number"));

    ReplyDelete
    Replies
    1. Можно также пользоваться parceFloat преобразует в дробное число. Но тогда при выводе он будет выдавать число в виде дроби, даже если оно было целым.

      Delete
  8. Привет ребята не знала что вы так быстро организуетесь. вчера лично пришла и вырубилась. Текст домашнего задания тем кому собственно нужно.

    Д/з.

    Написать программу которая с клавиатуры принимает три числа и определяет минимальное из них.

    с клавиатуры вводятся три числа а также слово min или max. В зависимости от введенного слова выводится или максимальное или минимальное значение.

    Вводится число которое обозначает возраст. Если возраст попадает в диапазон от 21 одного года до 45 включая границы тогда выводить на экран Success. В противном случае n0

    с клавиатуры вводится целое число это возраст. А также буковка обозначающая пол. м - мужской ж - женский. Для мужчин 21 - 45, для женщин с 18 - 38, включая границы. да или нет. Программа проверяет попадание возраста в диапазон в зависимости от возраста и пола.

    ReplyDelete
    Replies
    1. Маленькая поправка-дополнение.
      1) В том задании, которое дал Сергей, в 4й задаче для указания пола пользователь вводит английские буквы m и f, а также M и F. То есть программа должна принимать как ответ буквы как Заглавного, так и строчного регистра.

      2) В 3й и 4й задачах в случае не попадания возраста в заданый интервал пишется слово "Denied!".

      Delete
  9. Решение 1-го дом. задания 3-го урока с небольшим изменением условия: количество вводимых чисел ограничено упрямством пользователя и системными ресурсами. Для определения максимального числа использовался разъяснённый на уроке Сергеем флаг-метод:

    http://a1111exe.com/mcsd/maxnum.html

    При составлении кода гуглил и использовал следующие референс-источники:

    http://www.webdeveloper.com/forum/showthread.php?146858-store-prompt-input-in-array-display-array-help
    http://www.w3schools.com/jsref/jsref_obj_regexp.asp
    http://www.w3schools.com/jsref/met_win_prompt.asp
    http://www.w3schools.com/js/js_obj_array.asp

    ReplyDelete
    Replies
    1. Алексей, посмотрел код, хорошее решение =). Вопрос: где можно почитать про символы которые ты использовал для инициализации переменной pattern. Если я правильно понял, ты использовал escape-последовательности?

      Delete
    2. Разобрался я с этим pattern (блин заняло время!).
      Но на мой взгляд следующее решение несколько проще и понятнее в плане кода. Названия переменных, текст prompt использовал почти те же:
      var txtNumS = new Array(); //text array for input data
      //input and check if input is number
      do {
      var txtNum = prompt('Enter a number.\n' +
      'Entering an empty field ' +
      'stops the prompt and begins calculations',"");
      if(!(isNaN(Number(txtNum)))) {
      txtNumS.push(txtNum);
      }
      }
      while(txtNum != "");

      //processing
      maxNum = Number(txtNumS[0]);
      for(var i = 1; i < txtNumS.length; i++) {
      if(Number(txtNumS[i] > maxNum)) {
      maxNum = Number(txtNumS[i]);
      }
      }

      //output
      alert('The entered numbers are: ' +
      txtNumS.join() +
      '\nThe maximal of them is ' +
      maxNum);

      Delete
    3. слишком не понятно для начинаюших

      Delete
    4. Потребуется некоторое время, чтобы разобраться в коде. Вот несколько хинтов:
      - для ввода и хранения данных в программе использован массив строк txtNumS (массив - это грубо говоря много переменных под одним именем) ;
      - при вводе каждого элемента txtNum (т.е. строки) в этот массив проверяется можно ли преобразовать этот элемент в число.
      - Если преобразование в число возможно, то новая строка вносится в массив.
      - Если преобразование невозможно, то этот элемент нам не нужен, ти он не вносится в массив.
      - размер массива увеличивается в зависимости от количества вводимых чисел;
      - преобразование из текста в число производится с помощью функции Number;
      - ввод данных заканчивается при нажатии Enter (введена "пустая строка");
      - переменная maxNum используется в качестве флага;
      - чтобы найти максимальное число перебираются последовательно все элементы массива;
      - i - это переменная цикла. она увеличивается на 1 при каждом новом цикле (т.е. повторении) программы.
      Вот как-то так. Если будут вопросы, готов ответить.

      Delete
    5. Александр,

      Я изначально ориентировался только на целые числа, поэтому использовал regex, не особо заморачиваясь. Спасибо за твой вариант, надо будет его потестировать.

      Delete
    6. Потестировал. Проблема в том, что функция Number() возвращает 0 для пустой строки. Проверка: alert(Number(""));
      Для проверки максимума это куда ни шло, но если есть проверка минимума, то если все числа положительны - объявляется не введённый явно ноль и заявляет, что он минимальное число. Так что пока я оставляю валидацию на regex.

      Delete
    7. Алексей, ты совершенно прав на счет функции Number. Чтобы решить задачу с минимум я слегка подправил свой код из задачи с максимумом.
      Получилось вот так:
      do {
      var txtNum = prompt('Enter a number.\n' +
      'Entering an empty field ' +
      'stops the prompt and begins calculations', "");
      if ( !(isNaN(Number(txtNum))) && (txtNum != "") ) {
      txtNumS.push(txtNum);
      }
      }
      while (txtNum != "");

      Delete
    8. Выглядит логично, должно работать! С другой стороны, я модифицировал regex, так что можно вводить и десятичные дроби, а вместо parseInt() ввёл Number(), так что теперь второе решение ищет максимум или минимум не только по целым числам. Кроме того, я уже написал комментарий, подробно объясняющий regex, так что в этом месте модифицировать код уже не буду. Тем более, что на самом деле знание regex это MUST в программировании. Научившись пользоваться регулярными выражениями, програмисты и сисадмины, как наркоманы, уже без них не могут ^)
      http://a1111exe.com/mcsd/maxminnum.html

      Delete
  10. Решение 2-го задания с аналогичным изменением условия. Собственно, это модификация решения 1-го задания:

    http://a1111exe.com/mcsd/maxminnum.html

    Дополнительный использованный референс:

    http://www.w3schools.com/js/js_switch.asp

    Постараюсь на досуге добавить в код комментарии, подробно объясняющие работу программ.

    ReplyDelete
  11. Кто-то из группы говорил, что HTML5 требует наличия атрибута type в теге script. Внесу ясность.
    В HTML5 атрибут type НЕ является необязательным, в отличие от предыдущих версий HTML4, HTML4.1 где писать type было обязательно.
    Практически все современные броузеры поддерживают HTML5, и форма записи script type="text/javascript" является избыточной.
    Источник:
    http://www.w3schools.com/tags/tag_script.asp

    ReplyDelete
  12. Решение всех задач из второго домашнего задания (кроме последней задачи, сейчас цейтнот на работе, выложу ее вечером):
    http://yadi.sk/d/oivY-Tlu6xw6f

    ReplyDelete
    Replies
    1. Добавил решение четвертой задачи. Теперь доступно решение всех четырех задач из второго домашнего задания.
      Ссылка прежняя: http://yadi.sk/d/oivY-Tlu6xw6f

      Delete
  13. Если учесть что мы еще не изучали ни массивы (array) ни циклы (loop while for ...) и кроме того, судя по записанному проверять ввод никто не просил, все это лишнее. И кстати проверку ввода можно делать и с помощью флага примерно таким образом:
    var boolnum=true;
    var txtNum=new array();
    var i=0;
    while (bullnum=true)
    {
    var txtNum[i] =prompt("please enter number\n, if you input is not a number the script will proceed calculations");
    if (Number(txtNum[i])==NaN)
    {
    bullnum=false
    }
    i++
    }
    и далее вычисления.
    Дело в том, что нам сказали, что если задача не поставлена, выполнять ее не надо, а тем более придумывать.
    А так как нам ни сказали делать проверку ввода, все это на самом деле лишнее.

    ReplyDelete
    Replies
    1. если кому что непонятно объясню. Могут быть небольшие ошибки в коде, я не компилировал =)

      Delete
    2. Насколько я помню, Сергей говорил о справедливой точке зрения работодателя. Мы же пока учимся на курсе, и Сергей наш учитель, но не работодатель.

      Кроме того, как ни крути, мы все пришли на этот курс с разными подготовкой, опытом и знаниями. Это естественно. Но и тем более естественно брать задачи своего уровня, чтобы чему-то учиться и на начальных этапах. Я решал задачу для произвольного количества чисел с примитивной валидацией не от праздности, а ради экспириенса. Ну и интересно же... :)

      У кого не было такого опыта с Javascript - может посмотреть код, который я постараюсь подробно прокомментировать (на английском), включив референс-материалы - а может и не смотреть, довольствуясь темпом курса. Я не планирую пока удалять эти странички из онлайна, так что они могут оказаться полезны, когда мы-таки да дойдём до циклов и валидации регулярными выражениями.

      Delete
    3. >> Если учесть что мы еще не изучали ни массивы (array) ни циклы (loop while for ...) и кроме того, судя по записанному проверять ввод никто не просил, все это лишнее
      >>
      Безусловно можно сделать все задачи намного проще чем это сделал я или Алексей. Но образовательный эффект от такого упрощения будет стремиться к нулю. Здесь я согласен с Алексеем. Я тоже помню, что Сергей говорил о справедливой точке зрения работодателя.

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

      И потом никто не мешает "забегать вперед". Ничего архисложного предложено не было. Пользуясь референсами которые указал Алексей можно понять все листинги программ. Пусть не все и сразу, но постепенно придет понимаение и массив, и циклов, и проверок ввода. Это важные по моему мнению моменты и я не считаю разумным удалять листинги.

      Delete
    4. Целиком и полностью согласен с Александром!

      Delete
  14. блин народ пытаюсь делать по проще а вы куда то летите что просто слов нет
    и опять не работает N2

    alert("Adding five numbers");


    // input
    var num1 = parseInt(prompt("Enter the 1 number"));
    var num2 = parseInt(prompt("Enter the 2 number"));
    var num3 = parseInt(prompt("Enter the 3 number"));
    var min = ("min");
    var max = ("max");
    var check = (prompt("Insert our choice"));
    var nummax = num1; //flag max
    var nummin = num3; //flag min
    //Process

    if ( check = max );

    //max
    if (num2 > nummax)
    {
    nummax = num2
    };

    if (num3 > nummax) {
    nummax = num3
    };
    alert( nummax );


    //min
    else

    if (num1 < nummin)
    {
    nummin = num1
    };

    if (num2 < nummin) {
    nummin = num2
    };
    alert( nummin );

    ReplyDelete
    Replies
    1. if ( check = max ) неправильно, если ты хочешь сравнить текст, то нужно заключать его в кавычки то есть
      if ((check="max")||(check="MAX"))
      так как было особо подчеркнуть, что нужно учитывать регистр
      кроме того не нужно ставить ; после }
      ; это окончание команды, что то акцента, говорящего компилятору - вот конец команды
      } это окончание блока то есть когда ты делаешь }; это и синтаксически (правила написания на комп языке) неправильно, кроме того, это может неправильно компилироватьзя, и использует лишнюю память, чего следует избегать.

      Delete
    2. Андрей,

      "if ( check = max );"

      1. Оператор "=" в большинстве языков программирования (если не во всех) - оператор присваивания, а не проверки равенства. Т.е., в этой инструкции ты не проверяешь, является ли содержимое переменной "check" равным значению переменной "max", а присваиваешь переменной "check" значение переменной "max" И проверяешь, что результат (значение "check") определён и не является пустой строкой ("").
      2. Но даже если в этом была твоя задумка, то оператор "if" всё равно использован синтаксически неправильно. После того, как закрывается скобка условия, должен быть блок инструкций в фигурных скобках, или хотя бы одна инструкция, и вот она-то и должна завершаться точкой с запятой.

      Все остальные операторы выбора "if" записаны у тебя в такой форме:
      "if (...) { instruction };"
      Это также синтаксически неверно. Вот правильная форма:
      "if (...) { instruction; }"
      С нашей точки зрения отличие небольшое, но для парсера (интерпретатора) Javascript его достаточно, чтобы не понять твой код.

      Также неверно использован оператор "else": он всегда должен следовать после инструкций блока "if". Очевидно, тебя на этом этапе сильно путает синтаксис. В этом случае хорошей практикой, которая поможет привыкнуть к синтаксису и пользоваться им свободней, является намеренный отказ от использования любых сокращений и упрощений, допускаемых правилами синтаксиса изучаемого языка. Например, следующий код должен работать (разумеется, нужно убрать открывающую и закрывающую кавычки, которые я использую не как часть кода, а для обозначения цитирования):
      "if(myvar = "") alert("WOW"); else alert("MEOW");"
      Но тебе даже такой код лучше писать в форме, включающей фигурные скобки:
      "if(myvar = "") {alert("WOW");} else {alert("MEOW");}"
      И совсем хорошо вот так:
      "
      if(myvar = "") {
      alert("WOW");
      } else {
      alert("MEOW");
      }
      "

      Кстати, ты можешь попробовать использовать встроенный во многие браузеры диспетчер сообщений и ошибок для Javascript. Он, по крайней мере в Firefox и Chrome вызывается нажатием клавиш: ctrl + shift + j

      Delete
  15. This comment has been removed by the author.

    ReplyDelete
    Replies
    1. This comment has been removed by the author.

      Delete
  16. This comment has been removed by the author.

    ReplyDelete
  17. Андрей вот наипростейший вариант (который смогла выдать моя голова)с подробными коментариями. Проверил - все работает.
    alert("Finding minimal or maximal number");
    // input
    var num1 = parseInt(prompt("Enter the 1 number"));
    var num2 = parseInt(prompt("Enter the 2 number"));
    var num3 = parseInt(prompt("Enter the 3 number"));

    //variables for switch opertor
    var txtmin = ("min");
    var txtmax = ("max");

    //ask user what to do: to find minimal number or maximal number
    var check = prompt("Enter action (min or max)");

    //Processing
    var nummin = num1; //flag max. Usually we put as flag the first element of data.
    var nummax = num1; //flag min. Usually we put as flag the first element of data.

    /* #######################################################################################
    # Switch statement.
    # The switch statement is used to perform different action based on different conditions.
    # This is how it works: First we have a single expression n (most often a variable),
    # that is evaluated once. The value of the expression is then compared with the values
    # for each case in the structure.
    # If there is a match, the block of code associated with that case is executed.
    # Use break to prevent the code
    # from running into the next case automatically.
    # More information can be found here: http://www.w3schools.com/js/js_switch.asp
    ####################################################################################### */
    switch (check) {
    case txtmin: //user entered "min"
    if (num2 < nummin) {
    nummin = num2;
    }
    if (num3 < nummin) {
    nummin = num3;
    }
    //output minimal number
    alert("Minimal number is " + nummin);
    break;
    case txtmax: //user entered "max"
    if (num2 > nummax) {
    nummax = num2;
    }
    if (num3 > nummax) {
    nummax = num3;
    }
    //output maximal number
    alert("Maximal number is " + nummax);
    break;
    default:
    alert("Wrong input!");
    }
    Ссылка на рабочий файл с этим кодом: http://yadi.sk/d/k6tr0CCm70yNj

    ReplyDelete
    Replies
    1. лучше учитывать оба регистра то есть
      if ((check="min")||check="MIN"))

      Delete
    2. Я же указал что это наипростейший вариант. Он написан для иллюстрации решения задачи и помощи тем, у кого пока небольшой опыт в программировании. Вариант с проверкой ввода, дробными числами и учитывающий оба регистра (а также вариант mIN, mIn, miN и т.п.) был представлен мной выше.

      Delete
  18. Как же неудобно что в этом блоге нельзя редактировать коментаррии. Сейчас обнажуил у себя опечатку, пришлось удалять все добавлять заново

    ReplyDelete
  19. Всем привет. Согласна с александром. Здесь как в музыке. Если ты придешь в музыкальную школу со знанием уже клавиатуры всеравно тебя заставят играть гаммы. Потому что без них никуда. Так что целиком и полностью +10

    ReplyDelete
  20. неудобно не то слово. редактировать нельзя. Добавлять коммент... это просто трендец. Айда может скайп конфу создадим? а? ребята добавляйтесь там хоть пообщаться можно а тут как то стыдновато рассказывать о том как где и что вроде учебное место. Не для флуда. Мой скайп niyana2

    ReplyDelete
  21. Скайп-конфа отличная идея. Я сейчас онлайн (ник alexzubc).
    Еще идея - поднять форум (например phpBB или joomla)на бесплатном хостинге. Как вам? Если будет достаточно желащих переехать на форум, я сегодня займусь этой задачей. Пишите свое мнение

    ReplyDelete
    Replies
    1. Если будут проблемы с хостингом, могу разместить CMS на своём сервере.

      Delete
  22. класс
    делай Саша

    ReplyDelete
    Replies
    1. Готово дело. Форум поднял, заходим регистируемся.
      http://mcpd2014.x10.mx/forum/

      Delete
  23. Решения для всех 4-х заданий:
    1.
    http://a1111exe.com/mcsd/maxnum.html
    2. Скрипт довольно подробно прокомментирован.
    http://a1111exe.com/mcsd/maxminnum.html
    3.
    http://a1111exe.com/mcsd/succage.html
    4. Сила логических констант: достаточно одного "if...else..." для проверки.
    http://a1111exe.com/mcsd/succagefm.html

    ReplyDelete
  24. Теперь у нашей группы есть свой выделеный сайт:
    http://mcpd2014.x10.mx/forum/index.php

    Чтобы увидеть все материалы форума необходимо зарегистирроваться по ссылке:
    http://mcpd2014.x10.mx/forum/ucp.php?mode=register

    ReplyDelete
    Replies
    1. Спасибо! Жду активации.

      Delete
    2. Всех зарегистрировавшихся на данный момент активировал.

      Delete
  25. Всем привет. Ребят намного лучше задачи по поиску минимального / максимального числа решать так с помощью функции:

    Math.max и Math.min соответственно)

    удачи.

    ReplyDelete
  26. Функции Math.max и Math.min имеют фикисированное число аргументов, то есть при изменении количества вводимых чисел придется переписывать код. Плюс ехотя бы один из аргументов не может быть приведен к числу, то функция возвращает NaN, соответственно нужно водить дополнительные проверки.

    ReplyDelete
  27. Народ! На какой адресс отправлять задачи Сергею ?

    ReplyDelete
    Replies
    1. Я тоже этого не понял. Поэтом позвонил в контоору в который мы учимся мне там дали такой адрес: nemetzsoft(собака)gmail(точка)com. На него я и выслал решение задач.

      Delete