LINUX.ORG.RU

Вышел задачник к учебнику А. В. Столярова

 , ,


7

3

На сайте А.В.Столярова объявлено о выходе сборника задач и этюдов в поддержку трёхтомного учебника «Программирование: введение в профессию».

Задачник объёмом 156 страниц содержит 12 глав по числу частей учебника. Как обычно, электронная версия в формате PDF выложена на сайте в открытом доступе.

>>> Подробности

anonymous

Проверено: hobbit ()
Последнее исправление: hobbit (всего исправлений: 2)
Ответ на: комментарий от mister_VA

Паскаль был СОЗДАН для ОБУЧЕНИЯ программированию

Для ИСПОЛЬЗОВАНИЯ в процессе обучения программированию под управлением системы пакетной обработки на СуперЭВМ CDC.

vM ★★
()
Ответ на: комментарий от BceM_IIpuBeT

Если ты школьник и изучал функции, то для тебя выражаение вида f(x) = 2*x + 5 должно быть понятным и ты понимаешь что такое переменные. Чтобы высчитать чему равно f(5) мы подставляем значение 5 вместо x2*5 + 5 и получаем 15. Запись f(5) называется применение функции f к значению 5.

Нам, на самом деле, не обязательно именовать каждую функцию. Когда мы пишем f(x) = 2*x + 5, мы говорим, что эта функция называется f, но мы можем её назвать как угодно – она от этого не поменяется, т.е. если подставим 5, то мы по-прежнему получим 15. Мы бы могли записать эту функцию не давая ей никакого имени, например, вот так (\x. x*2 + 5). А вместо f(x) мы тогда писали бы (\x. x*2 + 5)(5) и тоже после подставки 5 вместо x получили бы 15.

В основе лямбда исчисления лежит идея записи функций без имени и идея подстановки значения в функцию. В лямбда исчилении есть три вида выражений: переменные, функции и применение. Переменные мы как и раньше записываем с помощью x, y, z и т.д. Функции записываются так (\x. e), где e - это любое выражение лямбда исчисления, т.е. либо какой-то переменная, либо какая-то функция, либо применение.

Например, (\x. x) – это функция, если мы подставим в неё вместо x что-нибудь, то мы обратно получим это же что-нибудь. Применение же записывается так (f e), где f и e – это любое выражение лямбда исчисления. Например, ((\x. x) (\y. y)) – это применение. И если мы попытаемся его высчитать, то нам нужно будет подставить (\y. y) вместо x и мы получим в результате обратно (\y. y).

Почему применение не записывается в лямбда исчислении как обычно через f(e)? Просто потому что когда-то, когда придумывали лямбда исчисление, решили именно записывать применение через (f e).

Всё, я устал, продолжение только за деньги.

fulmar_lor
()
Ответ на: комментарий от Feonis

Beginner’s All-purpose Symbolic Instruction Code — универсальный код символических инструкций для начинающих

Не для обучения, а для самостоятельного использования ЭВМ начинающими непрофессионалами.

vM ★★
()
Ответ на: комментарий от Psychosis

Ну вот у меня тоже только питон в голове.

В третьей версии уже большинство болезней победили. Но функциональщине он не научит. Да и просто технологиям гибких языков типа джаваскрипта или луа.

AVL2 ★★★★★
()
Ответ на: комментарий от AVL2

ну так а по делу?

по делу: схема или хаскелль

туртл если первые классы

anonymous
()
Ответ на: комментарий от Psychosis

Так ты такой же анонимус как и мы. А то что-то я не вижу у тебя в профиле ни адреса, ни имени, ничего.

anonymous
()
Ответ на: комментарий от liksys

Бред. Даже объяснять не буду, почему.

Элементарно. Потому что вы никогда не обучали ничему нулёвок, если вообще хоть когда-то хоть кому-то хоть что-то преподавали.

Откройте любое руководство по языку программирования (не для школьников лучше) и найдите там объяснение, что такое «цикл», «функция», «оператор присваивания», «идентификатор» и пр. Не КАК это РЕАЛИЗОВАНО в конкретном языке, а именно ЧТО это такое?

mister_VA ★★
()
Ответ на: комментарий от fulmar_lor

вот кстати чувак на жс и пальцах за час обьясняет лямбда исчисление

anonymous
()
Ответ на: комментарий от AVL2

Не понимаю, как учить анонимные функции, замыкания, лямбды и прочее через паскаль.

Никак. Но это уже вовсе не основы программирования и к изучению этого подходят, имея основательную базу как в собственно программировании, так и в сопутствующих областях. Уже умея при этом программировать на паре-тройке языков минимум.

mister_VA ★★
()
Ответ на: комментарий от BceM_IIpuBeT

Вообще это термин из лиспов. В лямбда исчислении функция для создания пары определяется так:

(\x. (\y. (\f. ((f x) y))))

Если обозначить эту функцию через pair, то например ((pair 1) 2) – это пара чисел 1 и 2 (числа тоже определяются через функции, если что).

fulmar_lor
()
Последнее исправление: fulmar_lor (всего исправлений: 4)
Ответ на: комментарий от vM

Это тоже легче объяснить непонятливому новичку?

Легче. Когда были необходимы input,output, мы были в курсе, что есть для ввода не только клавиатура, но и перфокарты, а выводить можно и на принтер, и на те же перфокарты. В объяснениях, что input – команда, связывающая ввод данных в программу с клавиатурой, а output – с монитором, нет магии. Нет забегания вперёд, поскольку устройство ЭВМ и её периферийные устройства изучаются ДО курса программирования.

А вот разъяснения концепции разбиения программы на функции ДО изучения процедурного стиля тот ещё цирк.

mister_VA ★★
()
Ответ на: комментарий от AVL2

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

racket + ракетные dsl?

anonymous
()
Ответ на: комментарий от Odalist

не надо тут на анонов гнать. Я сам делетнулся.

anonymous
()
Ответ на: комментарий от fulmar_lor

Вообще это термин из лиспов

А ты на бумажке собрался программировать? А ввод-вывод ты как собрался объяснять? Как ты собрался объяснять замыкания? Такие как ты только отталкивают и запутывают людей. Ты что собрался програмировать? Компьютер. А компьютер какой? Архитектуры Фон Неймана. Ну так и начинать нужно с таких же языков. Это так сложно понять? От простого к сложному, какая млять функциональщина!? Ты адекватный?

BceM_IIpuBeT ★★☆☆☆
()
Ответ на: комментарий от fulmar_lor

В основе лямбда исчисления лежит идея записи функций без имени и идея подстановки значения в функцию.

Лямбда-исчисление выносит даже привычный ко всяким извращениям выражениям мозг математиков.

Почему применение не записывается в лямбда исчислении как обычно через f(e)?

Потому что требовалась единообразная запись и для тех же арифметических операций, которые изначально двуместные функции. Потому в лямбда-исчислении и нет операции сложения. Зато там дохрена унарных функций вида «прибавить 3,14».

mister_VA ★★
()
Ответ на: комментарий от BceM_IIpuBeT

А компьютер какой? Архитектуры Фон Неймана. Ну так и начинать нужно с таких же языков.

Кому на это не насрать? Хочешь начинай с этого, не хочешь - не начиная. Проблем?

Надеюсь тебя уже поскорее забанят.

anonymous
()
Ответ на: комментарий от BceM_IIpuBeT

чтобы уметь в функциональщину знания о всяких

Компьютер. А компьютер какой? Архитектуры Фон Неймана

вообще нахер не сдались.

Функциональщине глубоко посрать на чём её запускают. Хочешь на тапке запускать? Пожалуйста, запускай, главное чтоб твой тапок был тьюринг полным.

А всё из-за того, что совсем другой уровень абстракции.

anonymous
()
Ответ на: комментарий от BceM_IIpuBeT

А компьютер какой? Архитектуры Фон Неймана.

Архитектура фон Неймана вроде немного о другом. Программят машину Поста/Тьюринга, не в таких командах, но именно машина П/Т и реализована в кремнии центрального процессора.

Так что вы правы, у функциональщины есть 2 неизлечимые болячки: работают они на «императивной» технике и без имеративщины написанные на функциональщине программы бесполезны.

Лисп, как писал один умный человек – это вершина программирования, на которую надо подняться, пройдя все ступени. Чтобы потом просто знать, что есть лучший ЯП. Хотя и прогить оставшуюся жизнь на Джаве.

mister_VA ★★
()
Ответ на: комментарий от anonymous

Так ты такой же анонимус как и мы. А то что-то я не вижу у тебя в профиле ни адреса, ни имени, ничего.

Именно. Какой-то он неумный. На простейшей терминологии вязнет, какой из него айтишник.

anonymous
()
Ответ на: комментарий от BceM_IIpuBeT

ну и как на них влияет хранятся данные вместе с командами или нет?

anonymous
()
Ответ на: комментарий от mister_VA

Мне незачем открывать руководство по языкам, чтобы опровергать бредни паскалефанбоев. Вы не просто не можете нормально учить, вы еще и вредите, потому что у вас каша в голове. Программирование без языка программирования - это нонсенс, который могли придумать только кретины с регалиями.

Ты свалил в кучу базовые понятия информатики и термины конкретного языка. Обучению базовым концепциям занимается информатика, где должны объяснять, что такое алгоритмы, как они строятся, из чего состоят и так далее. Для обучения на базовом, примитивном уровне отлично подойдут блок-схемы. Здесь же имеет смысл проводить вводный курс по пользованию ОС на уровне CLI. И после этих двух курсов давать нормальный язык. Тут уже будет сразу понятно, что такое возвращаемое значение в main(), что делают его аргументы и прочее, прочее.

liksys ★★★★
()
Ответ на: комментарий от mister_VA

Лисп, как писал один умный человек – это вершина программирования, на которую надо подняться, пройдя все ступени. Чтобы потом просто знать, что есть лучший ЯП.

Это очень смешной тезис. Функциональные языки не нужны как самостоятельные инструменты, только в качестве дополнений к императивным. Они сложны в использовании, неэффективны и абсолютно чужды по отношению к машинам, на которых исполняются.

liksys ★★★★
()
Ответ на: комментарий от liksys

Они сложны в использовании, неэффективны и абсолютно чужды по отношению к машинам, на которых исполняются.

нет. да. да.

anonymous
()
Ответ на: комментарий от anonymous

Сложны, сложны. Концепция простая, в применении - сложная. Большую поддерживаемую архитектуру на них соорудить - это надо очень заморочиться.

Есть смешная история, которую фанбои лиспа всегда вытаскивали, когда надо было показать успех их язычка. Был в США один успешный сервис продажи авиабилетов, написанный на лиспе, и гугл его купил. Типа, работает, держит нагрузку, успех, красота. Да вот только есть один инсайдерский нюанс: к сожалению, это скобчатое говно абсолютно неподдерживаемо и нерасширяемо, и как только гугловцам надо было внести какие-то изменения туда, его просто кусками переписывали на плюсах.

liksys ★★★★
()
Ответ на: комментарий от liksys

Обучению базовым концепциям занимается информатика

Информатика вообще не занимается обучением, тем паче основам компьютерной грамотности. Информатика разрабатывает системы «человек-программируемая машина», работающих в опять же единой системе. Создать АСУВ – это информатика. Создать рабочее место кассира и объединить его с рабочим местом кладовщика и товароведа – это информатика.

Те, так сказать, учебнички, с надписью «Информатика» на обложке нужно сжечь.

Для обучения на базовом, примитивном уровне отлично подойдут блок-схемы.

Блок-схемы я упоминал. Их разумно использовать на 5ти уроках, причём на пятом дать проверочную и на 6м перейти к программированию на чём-то реальном.

И после этих двух курсов давать нормальный язык. Тут уже будет сразу понятно, что такое возвращаемое значение в main(), что делают его аргументы и прочее, прочее.

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

Так же какой шелл вы предлагаете? И сразу спрошу, а почему не … ? (подставить любой, окромя названного вами).

mister_VA ★★
()
Ответ на: комментарий от mister_VA

Те, так сказать, учебнички, с надписью «Информатика» на обложке нужно сжечь.

Идем на википедию и читаем о том, чем занимается информатика, чтобы больше так не бредить.

на 6м перейти к программированию на чём-то реальном

Например на сишечке.

Сомнительно

Нет.

Фактически вы предлагаете дать пропедевтический курс программирования через CLI, ибо всё удобство CLI раскрывается через удобство автоматизации операций скриптами.

CLI необходим для того чтобы работать с простыми программами. Это более честный подход, чем волшебные IDE для паскаля, которые что-то где-то запускают.

Так же какой шелл вы предлагаете?

Очевидно, sh и bash. Первое - как то, что есть на всех юниксах, второе - как то, что есть почти на всех линуксах и является стандартом де-факто. Дополнительно следует рассмотреть cmd.exe как пример умственной инвалидности разработчиков M$ альтернативных оболочек в других ОС, которые, тем не менее, тоже используют концепцию кодов возврата и аргументов.

liksys ★★★★
()
Последнее исправление: liksys (всего исправлений: 1)
Ответ на: комментарий от liksys

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

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

bool d = int c = int a = 5 + int b = 6 < int f = int q = 3 + int g = 4;

писать проги нельзя, если компилятор говорит, можно?

И сколько часов вы потратите, проверяя вот так написанные ответы?

P.S. Знатоки Си, это реально откомпилится?

mister_VA ★★
()
Ответ на: комментарий от liksys

Идем на википедию и читаем

Читаю:

Информа́тика (фр. Informatique; англ. Computer science) — наука о методах и процессах сбора, хранения, обработки, передачи, анализа и оценки информации с применением компьютерных технологий, обеспечивающих возможность её использования для принятия решений[1] .

Можете мне процитировать, где там об обучении программированию?

чем волшебные IDE для паскаля

За них никто не агитирует, не говоря уже про то, что сишечку в тех же IDE изучают.

Очевидно, sh и bash.

А почему не zsh? ПауэрШелл? sh часто просто симлинк на bash. Ещё есть dsh и т.д. Тот же срачь, что и с ЯП. И вообще, зачем sh, когда есть gui?!

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

Программам не всегда нужны аргументы. И коды, если прога отработала успешно, она на экран не выводит.

mister_VA ★★
()
Ответ на: комментарий от mister_VA

Читаю

Попробуй прочитать дальше оглавления…

где там об обучении программированию

… И сделать соответствующие выводы.

За них никто не агитирует, не говоря уже про то, что сишечку в тех же IDE изучают.

Консоль, текстовый редактор и GCC.

А почему не…

Я объяснил. Перечитываем еще раз.

Программам не всегда нужны аргументы.

void.

И коды, если прога отработала успешно, она на экран не выводит.

Коды всегда выводятся, но не на экран. Именно поэтому нужен курс по CLI.

liksys ★★★★
()
Ответ на: комментарий от liksys

на 6м перейти к программированию на чём-то реальном Например на сишечке.

Хочешь травмировать сознание детей? Вообще не понимаю почему ты так норовишся всунуть бедным детям профессиональный язык, думаешь после пары уроков с учителем они начнут пилить драйвера (знаменитое «побыстрее бы в прод»)? Если что школьные учителя даже не знают, что такое указатели, а консоли боятся просто до усрачки. Ты ими хотел учить детей сишечке? Пардон, школьники просто проскочат этот материал (подозреваю при помощи учителя, который сам ничего толком не знает).

А студентам на первом семестре показать паскаль это вообще даже никакое не преступление (дальше асм, си). Те, кто учится на программиста на паскале не собираются останавливатся. А как первый язык он прекрасно заходит большему количеству студентов чем сишечка. Я после 1го тома Столярова сишечку освоил за 2 дня, в упор не вижу в паскале вообще ничего плохого.

Ты продолжай хейтить паскальчик, продолжай…

CLI необходим для того чтобы работать с простыми программами.

Как раз математика консольных программ позволяет написать полезную программу, пусть даже совсем простую. У меня здесь есть программа на 200 строк, она умеет одну вещь: она выдаёт в stdout изменнённый последний аргумент своей командной строки двумя способами. Изменение командной строки программируется первыми аргументами: изменить регистр и вставить строку по найденным совпадения regexp’у (например, так ’ =_’ /* вместо пробелов вставили подчёркивания / ’()=’ /* удалили вхождения (*) */). Применяю везде где только можно и надеюсь добавить ещё больше возможностей. Я молчу про возможность написания игры в терминале (будущим программистам сносит голову, когда ты им показываешь модуль crt).

Это более честный подход, чем волшебные IDE для паскаля, которые что-то где-то запускают.

Столяров нигде не предлагает работать в IDE’шках для паскаля. Тем более он их хейтит, не только, а IDE в целом (просто как идею). Я до сих пор не могу выйти из vim’а, уж слишком удобна эта штука. Плагины штука сомнительная, работать в консольном режиме они не умеют (я про команду :sh), в топку в общем :).

Очевидно, sh и bash.

Командные-скриптовые языки не подходят для обучения, значит берём паскаль - Си рано.

anonymous
()
Ответ на: комментарий от liksys

Чтобы просигнализировать о неуспешном выполнении достаточно красного светодиода, а чтобы похвастаться успехом – зелёного.

anonymous
()
Ответ на: комментарий от BceM_IIpuBeT

А ты на бумажке собрался программировать?

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

А ввод-вывод ты как собрался объяснять?

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

Как ты собрался объяснять замыкания?

Замыкание функции f – это значение (значение – это функция без свободных переменных), которое получается в результате подстановки вместо свободных переменных функции f каких-либо значений.

Ты что собрался програмировать? Компьютер. А компьютер какой? Архитектуры Фон Неймана.

При чём здесь архитектура фон неймана? Про архитектуры, как устроен современный быдлокомпьютер, как работает транзистор и т.д. – это отдельно рассказывать надо, отдельным курсом.

От простого к сложному, какая млять функциональщина!?

Функциональщина – это и есть от простого. Попробуй школьнику машину тьюринга объяснить и что-то заставить напрогать на ней – он повесится.

fulmar_lor
()
Ответ на: комментарий от liksys

Я объяснил. Перечитываем еще раз.

Про Паскаль тебе тоже много раз объяснили. Многие люди.

Единственно, что имеем от тебя в пользу bash – он есть везде. Но это неправда. А «чистый sh» уже не так удобен. Если же говорить о взаимодействии пользователя с компом через CLI, то здесь вообще без разницы, bash или zsh, ls везде работает одинаково, если не в Винде, там надо dir. Различия начинаются, когда скрипты писать. А это уже обучение использованию конкретному языку сценариев.

Консоль, текстовый редактор и GCC.

Консоль, текстовый редактор и fpc.

mister_VA ★★
()

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

Infra_HDC ★★★★★
()
Ответ на: комментарий от fulmar_lor

Замыкание функции f – это значение (значение – это функция без свободных переменных), которое получается в результате подстановки вместо свободных переменных функции f каких-либо значений.

Вот я с высшим математическим образованием, но ничего не понял. Такое «объяснение» требует расшифровки, неоднократного перечитывания, примеров и собственноручно решённых заданий.

Мля, вы все хоть понимаете, что со времён возникновения жреческих школ (это где-то 6 тысяч лет назад), человеки искали эффективные методы обучения? Методика преподавания – она не просто важнейшая дисциплина в педвузах. Она ещё и предметозависимая.

Создать один УМК, по которому средний учитель будет способен обучить среднего ученика средним ЗУН, это задача не на одно ДЕСЯТИЛЕТИЕ. С ДЕСЯТКОМ экспериментов и сотнями корректировок.

А вы ту с ходу! Си! Лямбды!! Млять, вы хоть знаете, что учебник Колмогорова по геометрии в итоге зарубили из-за ЕДИНСТВЕННОГО термина!!! Хотя учебник прошёл апробацию, экспертизы и пр. Был выпущен и по нему несколько лет учили в общеобразовательных школах.

Единственный термин «конгруэнтность» и детишки в массовых школах стали «вешаться». Колмогорова отменили, пришёл посредственный Атанасян и столь же посредственный Погорелов.

Для ВУЗов ситуация не лучше, а, может, в чём-то и хуже. Ибо студент – он, вроде как взрослый, должен уже сам учиться. А то, что учебник, по которому препод хочет принять экзамен, понимает только этот самый препод, его написавший, и единственный студент с потока, являющийся математическим гением с феноменальной памятью, это не считается, да?

mister_VA ★★
()
Ответ на: комментарий от mister_VA

Про Паскаль тебе тоже много раз объяснили. Многие люди.

И дальше что? У вас коллективное заблуждение. У кого-то - из-за синдрома утенка, у кого-то - от некомпетентности. От того, что вы хором несете бред, меньшим бредом оно быть не перестанет.

bash – он есть везде

Не ври, я этого не говорил. Я сказал, что это де-факто стандарт.

обучение использованию конкретному языку сценариев

Есть sh, который должны уметь все. Всё остальное - уже надстройки и фантазии отдельных дистрибутивов.

Консоль, текстовый редактор и fpc.

И вот мы снова возвращаемся к необходимости давать курс по CLI.

liksys ★★★★
()
Последнее исправление: liksys (всего исправлений: 1)
Ответ на: комментарий от mister_VA

И правильно, что зарубили. Конгруэнтность ничего школьнику не даст.

sergey3000
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.