LINUX.ORG.RU

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

 , ,


7

3

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

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

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

anonymous

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

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

Коды возврата использовались до юникса в системах пакетной обработки, чтобы знать, на каком шаге прервать цепочку в задании Compile-Link-Go, и что делать, если что-то пойдёт не так, без физического присутствия пользователя и без вмешательства оператора.

//ASMFCLG  PROC MAC='SYS1.MACLIB',MAC1='SYS1.MACLIB'                    00050000
//ASM      EXEC PGM=IFOX00,PARM=OBJ,REGION=128K                         00100000
//SYSLIB   DD   DSN=&MAC,DISP=SHR                                       00150000
//         DD   DSN=&MAC1,DISP=SHR                                      00200000
//SYSUT1   DD   DSN=&&SYSUT1,UNIT=SYSSQ,SPACE=(1700,(600,100)),         00250000
//             SEP=(SYSLIB)                                             00300000
//SYSUT2   DD   DSN=&&SYSUT2,UNIT=SYSSQ,SPACE=(1700,(300,50)),          00350000
//             SEP=(SYSLIB,SYSUT1)                                      00400000
//SYSUT3   DD   DSN=&&SYSUT3,UNIT=SYSSQ,SPACE=(1700,(300,50))           00450000
//SYSPRINT DD   SYSOUT=A,DCB=BLKSIZE=1089                               00500000
//SYSPUNCH DD   SYSOUT=B                                                00550000
//SYSGO    DD   DSN=&&OBJSET,UNIT=SYSSQ,SPACE=(80,(200,50)),            00600000
//             DISP=(MOD,PASS)                                          00650000
//LKED     EXEC PGM=IEWL,PARM=(XREF,LET,LIST,NCAL),REGION=128K,         00700000
//             COND=(8,LT,ASM)                                          00750000
//SYSLIN   DD   DSN=&&OBJSET,DISP=(OLD,DELETE)                          00800000
//         DD   DDNAME=SYSIN                                            00850000
//SYSLMOD  DD   DSN=&&GOSET(GO),UNIT=SYSDA,SPACE=(1024,(50,20,1)),      00900000
//             DISP=(MOD,PASS)                                          00950000
//SYSUT1   DD   DSN=&&SYSUT1,UNIT=(SYSDA,SEP=(SYSLIN,SYSLMOD)),         01000000
//             SPACE=(1024,(50,20))                                     01050000
//SYSPRINT DD   SYSOUT=A                                                01100000
//GO       EXEC PGM=*.LKED.SYSLMOD,COND=((8,LT,ASM),(4,LT,LKED))        01150000

Если интерактивный пользователь физически присутствует и может наблюдать вывод программы, то ему лучше сообщить об ошибке человечьим языком, а не невидимым RC.

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

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

Ну вот например Воеводский смог осилить и не только он. Математик – это тот кто занимается математикой и признаётся другими математиками как математик, а не просто закончил мат факультет. Так-то тогда я тоже математик, но это не так. Математикам объяснять лучше сразу типизированное лямбда исчисление и надо начинать с того, что это бидекартова замкнутая категория.

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

Ну так что мешает сделать просто все функции префиксными, но записывать их так f(arg1, ..., argn), а не (f arg1 ... argn)? Просто первый вариант менее удобный и с ним больше возни и он будет сбивать с толку – в лямбда исчислении все фукнции одного аргумента, а чтобы сделать функцию как бы двух аргументов, одна функция возвращает другую функцию.

Потому в лямбда-исчислении и нет операции сложения.

Как это нет? Вот она: \m. \n. m succ n.

Зато там дохрена унарных функций вида «прибавить 3,14».

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

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

Мандада – массив. С программистской точки зрения – это просто интерфейс с определённым набором функций. Например, список реализуют этот интерфейс. Да вообще много чего.

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

Она даёт просто охрененное понимание всего, потому что всё можно выразить из одних только функций лямбда исчисления: числа, пары, списки, if then else, кортежи, рекурсию, локальные переменные (let x = ...) и т.д.

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

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

А ничего, что лисп – это в том числе и императивный язык? Если лисп - функциоанльный язык, то и rust – это функциональный язык.

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

А давайте Столярова отменим забаним здесь с соответствующей пометочкой?

//Хоббит один из немногих адекватных и доброжелательных регистрантов. И писать такое человеку - дикость.

LongLiveUbuntu ★★★★★
()

А при чём тут раздел «Документация»?

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

Сначала дай определение что ты под этим имеешь в виду.

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

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

Понятно, что это надо объяснять на примерах. Это я просто дал короткое определение чтобы продемонстрировать, что одного лямбда исчисления достаточно для введения этого понятия.

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

Лол. А ничего, что почти все популярные высокоуровневые (хотя не только выскоуровневые) языки поддерживают функциональную парадигму и последние десятилетия практически единственный вектор развития языков – это перенимать фичи из функциональщины?

Всерьез этим не занимаются.

Tell me more.

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

У вас коллективное заблуждение.

А что у тебя? Каков ТВОЙ стаж преподавания в МАССЫ? Ты пытался когда-либо объяснить, что write – это команда КОМПЬЮТЕРУ напечатать что-то, а не пользователю, сидящему за компом? С read то же самое.

Я сказал, что это де-факто стандарт.

Де-факто это sh, под который и пишут сценарии «для всех».

Есть sh, который должны уметь все.

Это ты, как я уже указал, о ПРОГРАММИРОВАНИИ для sh. Теперь объясни, как учить программировать шелл людей, не умеющих программировать? Шелл, имеющий чуждый человеческому разуму синтаксис?

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

Нет, для этот достаточно инструкции в тетрадную страничку вида «ls выводит список файлов и каталогов, остальное см. man ls». При этом, какой именно шелл совершенно без разницы.

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

Паскаль живее всех живых в себе и своих наследниках: Go и Java.

Да в них больше наследия от C, чем от Pascal. Сейчас, ниша Pascal - старые системы, которые писались в начале 2000-х и до сих пор устраивают. Что-то свежее найти на Pascal сложно. Но есть и исключения, например, Double Commander или Transmission Remote GUI. На Deplhi наверно перестали писать для массового пользователя с выходом Delphi 8, потому что там прикрутили то ли дотнет, толи что-то подобное. В результате программы обросли зависимостями, которые нужно установить, чтобы программа заработала, сами программы выросли в размерах и стали не очень быстро работать, особенно на старом железе.

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

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

Именно про это я и говорил. Не «прибавить к пять три», а «применить функцию +5 к 3-м».

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

А ничего, что лисп – это в том числе и императивный язык?

А ничо, что я и не утверждал, что это чистой воды функциональщина?

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

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

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

А что у тебя?

У меня объективная и обоснованная точка зрения.

Каков ТВОЙ стаж преподавания в МАССЫ?

Сапог-на-голове.жпг

Ты пытался когда-либо объяснить, что write – это команда КОМПЬЮТЕРУ напечатать что-то, а не пользователю, сидящему за компом?

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

Де-факто это sh, под который и пишут сценарии «для всех».

Читаем внимательно еще раз. Sh есть везде, баш - на большинстве.

как учить программировать шелл людей, не умеющих программировать?

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

Нет, для этот достаточно инструкции в тетрадную страничку вида «ls выводит список файлов и каталогов, остальное см. man ls». При этом, какой именно шелл совершенно без разницы.

Это и есть курс по CLI. Первый его урок.

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

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

А вообще, как ни жонглируй, а вне академических и учебных целей лисп не нужен.

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

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

Машина Тьюринга входит в школьную программу 11 класса. И, внезапно, задачи на написание программ на ней есть в конце соответствующего параграфа учебника. Не надо школьников за идиотов держать, в среднем соображают они лучше чем типичный java-синьор с 10-летнем опытом.

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

А мне кажется, это как раз основы.

Человеку с паскальным мышлением очень трудно отойти от постоянного применения циклов к мапам, редьюсам и лямбдам. Про замыкания и вовсе молчу, с точки зоения паскаля это чистый харам. В итоге свежеиспеченного программера приходится сразу тащить на обряд экзорцизма. Зачем?

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

Про замыкания и вовсе молчу, с точки зрения паскаля это чистый харам

Процедурный тип.

Type TFunction1 = function(var x: integer): integer; например.

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

Указатели на функции и в си есть. А замыкания ещё захватывают переменные из функции в которой определены.

PolarFox ★★★★★
()
Ответ на: комментарий от PolarFox
procedure MyCoolProcedure;
var ...
begin
  MySlaveProcedure;
  ....
  procedure MySlaveProcedure;
  begin
   var ...
  end;
 ...
end;
LongLiveUbuntu ★★★★★
()
Последнее исправление: LongLiveUbuntu (всего исправлений: 2)
Ответ на: комментарий от liksys

У меня объективная и обоснованная точка зрения.

Нет, у тебя личная, не проверенная практикой, неправильная точка зрения.

Объяснить это очень легко, если у человека был курс по CLI/UNIX и ему объяснили, что такое стандартные ввод и выводы, и почему это файлы.

Ты только что в очередной раз подтвердил НАШУ т.з.: для Си необходим солидный багаж знаний. Для Паскаля этого не требуется. Что дальше? Прозрение, что чел в дальннйшем ни разу не напишет ни строчки на Си?

автоматизации не нужно писать

…обработку кодов возврата.

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

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

BceM_IIpuBeT ★★☆☆☆
()
Последнее исправление: BceM_IIpuBeT (всего исправлений: 3)
Ответ на: комментарий от AVL2

Человеку с паскальным мышлением очень трудно отойти от постоянного применения циклов к мапам, редьюсам и лямбдам.

А в той же 1С каждый второй оператор – лямбда и работают только с мапами….

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

Человеку с паскальным мышлением очень трудно отойти от постоянного применения циклов к мапам, редьюсам и лямбдам

Автор книг, которого обвиняют в поцкале головного моска как раз таки и дает все это, объясняя, что полноценный программист должен быть знаком со всеми парадигмами. О чем тут срач, а понять не могу?!

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

Int и bool. Во-первых, на практике это вообще не имеет значения, а во-вторых, в сях в бородатые времена не было булей, поэтому сравнивать вообще нет никакого смысла. Смотрим на синтаксис.

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

Нет

Да.

у тебя личная

Нет.

не проверенная практикой

Проверенная. Я знаю вузы, где в качестве первого языка преподают си или плюсы, и как-то люди всё прекрасно понимают (хотя с плюсами я не совсем согласен). Так что извини, но это не проблемы языка, а тех, кто не умеет преподавать.

неправильная точка зрения

Вот с этого и надо было начинать. Любая точка зрения, отличная от паскалефанбойской, является неправильной. Мы поняли, спасибо %)

Ты только что в очередной раз подтвердил НАШУ т.з.

Нет.

для Си необходим солидный багаж знаний

И снова нет. Багаж знаний необходим для тех вещей, которые ты упоминал здесь, вроде write(), предлагая херовые лживые объяснения, а потом спрашивая у меня, что с этим делать. Если ты хочешь научить писать алгоритмы на языке, сишке не нужен солидный бекграунд. Покажи printf() и int main(void), отложив возвращаемое значение на потом. Никому от этого хуже не станет.

А если ты пытаешься объяснить людям write(), но при этом у них нет понимания, что такое файловый дескриптор - вот это уже действительно путь вникуда.

…обработку кодов возврата.

Про set -e мне не надо рассказывать, я надеюсь?

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

Проверенная. Я знаю вузы, где в качестве первого языка преподают си или плюсы,

И чо? Я знаю вузы, в которых первыми шли схема или лисп, или джава, или некогда (известен мне вуз, где до сих пор это фортран и вызов виндового айпи из него ассемблерными вставками. т.е. это современный фортран, но зачем это всё бухгалтерам?) вообще фортран или бэйсик. Вопрос в удобстве и затрачиваемых преподом и студентами усилиях.

И как ты сам указал, си требует внушительной начальной базы.

отложив возвращаемое значение на потом

Как вводить в прогу данные в диалоговом режиме?

Использовать write даже для чтения файлов можно вообще не зная слов «файловый дескриптор».

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

Смотрим на синтаксис.

Смотрим на семантику, а то так любой ЯП, где есть оператор if, можно к семейству C причислить.

Int и bool

Поэтому в C можно написать while (1) что-то там, а в Паскале и Java - нельзя. Ну и нельзя сделать ошибку типа if (boolvar = someone).

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

Про историческую справку спасибо, познавательно.

В выживших системах мало что изменилось в этом плане за почти 60 лет: https://www.ibm.com/docs/en/zos/2.5.0?topic=parameter-examples-cond

Только у операторов теперь попсовые CLI https://docs.zowe.org/stable/web_help/index.html?p=zowe_jclcheck_check_data-set , веб-консоли, и всё это добро – в VSCode и Git.

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

И чо?

И всё. Это прекрасно работает.

Вопрос в удобстве и затрачиваемых преподом и студентами усилиях.

А еще нужности для студентов. Учить целый учебный язык, или сразу учить нормальный боевой.

И как ты сам указал, си требует внушительной начальной базы.

Не ври. Не внушительной, а всего лишь CLI. Курс которого, вообще-то, и так должен быть пройден. О каком программировании вообще может идти речь, если у тебя студент не знает, с какой стороны к ОС подходить?

виндового айпи

Виндового ЧЕГО, простите?

Использовать write даже для чтения файлов

Что-что-что?

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

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

Смотрим на семантику

По семантике одно, по синтаксису другое. У жавы сильная типизация, от того так всё и сделано.

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

В выживших системах мало что изменилось в этом плане за почти 60 лет

Мощно.

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

У жавы сильная типизация

И у языков семейства Вирта тоже.

По семантике одно, по синтаксису другое

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

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

Товарищ банально не осилил в преподавание сишки, поэтому решил, что дело в сишке, а не в нем самом.

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

Я вот в принципе согласен, что видимо сишка не лучший вариант первого ЯП.

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

Я считаю, что проблема сильно преувеличена, вот и всё.

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