Pull to refresh

Comments 5

UFO landed and left these words here

Все очень сильно зависит от уровня студента. На начальном уровне действительно есть разница между двумя одинаковыми по смыслу, но разными по оформлению конструкциями.
В конструкции for нужно два раза не потерять ";", еще два раза не написать этот символ зря, а до кучи еще запомнить, что инкремент на самом деле выполняется в конце итерации, хоть и написан в заголовке.
В while команды идут последовательно, без дополнительных абстракций. Поэтому для обучения средних и слабых студентов он лучше.


Про литературу на самом деле сложно оценить. Думаю вы правы, в том, что это слабый аргумент. Впрочем есть два других аргумента.


Haskell преподавать не приходилось, спрос отсутствует, материалы надо готовить и прорешивать. На первый взгляд, там циклы вообще не применяются. Операции над множествами сводятся к map, reduce и т.п.

доброе время суток! классная статья! тема раскрыта легко и понятно. Спасибо!
Здравствуйте! Статья действительно хороша для выявления недостатков в объяснении тем с нуля, сам делал подобные ошибки, пытаясь знакомых учить основам программирования.

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

Если у вас есть идея, как решить эту задачу без цикла каким-то еще способом, напишите, пожалуйста, в комментариях.

Текст задачи:
Пользователь вводит число Х. Вывести в столбик числа от 0 до 9 и поставить знак '+' напротив того числа, которое равно Х.

Исходный код для решения задачи на языке Arc (краткий до невозможности диалект Lisp), как на первом попавшемся под руку языке, ниже:

(def mark-input (num)
     ; Определяем template -- шаблон строки на вывод
     (let template "0 \n1 \n2 \n3 \n4 \n5 \n6 \n7 \n8 \n9 \n"
          (if (and (>= num  0) (<= num 9))
              ; Если число находится в промежутке 0-9, 
              ; то вписываем '+' в template[(num*3) + 1]
              ; (Почему? Посмотрите на template 
              ; и расположение символов в нём).
              (= (template (+ 1 (* num 3))) #\+))
          ; Выводим итоговую строку. Не спрашивайте, откуда nil.
          (pr template) nil))


Результат выполнения:
arc> (mark-input 5)
0 
1 
2 
3 
4 
5+
6 
7 
8 
9 
nil
arc> (mark-input (read))
6
0 
1 
2 
3 
4 
5 
6+
7 
8 
9 
nil

Пользователь вводит число Х. Вывести в столбик числа от 0 до 9 и поставить знак '+' напротив того числа, которое равно Х.

Если у вас есть идея, как решить эту задачу без цикла каким-то еще способом, напишите, пожалуйста, в комментариях.


На python3:
N = '\n0\n1\n2\n3\n4\n5\n6\n7\n8\n9'
X = input()
if int(X) >= 0 and int(X) < 10:
    print(N.replace(X, X+'+'))
else:
    print(N)

Результат
5

0
1
2
3
4
5+
6
7
8
9


1

0
1+
2
3
4
5
6
7
8
9


15

0
1
2
3
4
5
6
7
8
9

Шибко тапками не кидайтесь, я программирование изучаю менее полугода.
Sign up to leave a comment.

Articles