Это тестовый сайт, предназначенный для бета-тестирования новой версии программного обеспечения. Все зарегистрированные здесь учётные записи, а также оставленные комментарии время от времени просто исчезают. Настоящий (рабочий) сайт расположен по адресу http://www.stolyarov.info
Программирование: введение в профессию. Задачи и этюдыАннотацияСборник задач, упражнений и программистских этюдов в поддержку учебника «Программирование: введение в профессию»; содержит 12 глав, соответствующих 12 частям учебника. Публикация в бумажном вариантеОпубликован издательством МАКС Пресс в 2022 году. ISBN 978-5-317-06732-8. Мягкая обложка. Электронная версияЭлектронная версия, идентичная печатному изданию, доступна здесь: http://www.stolyarov.info/books/pdf/progintro_taskbook.pdf Errata
|
Программирование: введение в профессиюпояснениеВы находитесь на официальном сайте Андрея Викторовича Столярова, автора учебных пособий по программированию и информационным технологиям. Если вы искали сайт замечательного писателя-фантаста Андрея Михайловича Столярова, то вам, к сожалению, не сюда. Андрей Михайлович Столяров в библиотеке Мошкова |
☞ From admin Fri Dec 23 14:23:00 2022
стр.149, ответ задачи 3.04
Комбинация флагов 0001 (т.е. взведён только CF) в действительности получается не так, как указано в таблице: например, сумму 381 (так что в результате из-за потери старшего бита получится 125) можно получить как 255+126 или 254+127, и взведён будет действительно только CF, но можно и как 253+128, 252+129 и т.д., в этих случаях будут взведены CF и OF (поскольку, если эти числа рассматривать как знаковые, мы сложением двух отрицательных получаем положительное).
По-видимому, правильный "комментарий" для случая 0001 будет такой: <<сумма операнда от 128 до 255 с операндом от 1 до 127, "истинным" результатом которой является число, превосходящее 256>>.
А для комбинации 0011 (взведены CF и OF) правильный комментарий такой: <<сумма двух беззнаковых операндов, один из которых превосходит 128, а другой — не меньше, чем 128>>.
ответить
☞ From Anonymous (unverified) Thu Feb 24 21:31:00 2022
страница 19 задача 2.09
Здравствуйте! Там два варианта f?
ответить
⮴ From admin Thu Nov 3 10:51:09 2022
Ага
Да, дрогнула рука при вставке пункта в середину задачи. Ответы правильно перенумеровал, а тут вот, видимо, отвлёкся.
ответить
☞ From Anonymous (unverified) Thu Feb 17 15:29:00 2022
Вопрос по задаче 2.22
Добрый день, Андрей Викторович!
В задаче 2.22, пункт b, под "не содержат повторяющихся букв" подразумевается "не содержат повторяющихся латинских букв, идущих друг за другом" или в любых позициях не должно быть повторяющихся латинских буквы? Оба варианта пишутся достаточно просто, но возможно в следующем издании этот момент стоит конкретизировать?
ответить
⮴ From admin Thu Feb 17 17:43:08 2022
Извините, я не
Извините, я не вижу. что здесь нужно конкретизировать. В тексте задачи нет ни слова про "друг за другом", "рядом", "подряд" или ещё чего подобного.
ответить
⮴ From Anonymous (unverified) Thu Feb 17 21:20:00 2022
Действительно,
Действительно, что-то меня понесло не туда :)
ответить
☞ From Alejandro Thu Feb 17 04:23:00 2022
errata
с. 139, задача 6.09, 2 строка и
с. 140, задача 6.11, предпоследняя строка — "дескриптор 1" вместо "дескриптор 0"
с. 140, 2 строка — предлагается первым открывать файл, предназначенный для записи, а не для чтения
ответить
⮴ From admin Thu Nov 3 10:55:00 2022
ах ты ж :(
> "дескриптор 0"
даже интересно, под каким воздействием я пребывал, чтобы дважды допустить такой феерический косяк
Что касается файла, то в неблокирующем режиме лучше открывать именно тот канал, который на запись. Его ведь всё равно желательно перевести в non-blocking, ну то есть для чата это, конечно, не критично (объёмы не те), но если уж совсем правильно всё делать, то нужно.
ответить
☞ From Ворон (unverified) Tue Feb 15 19:51:00 2022
Опечатка
Стр. 153, ответ к 8.01:"три" написано с маленькой буквы, дожно быть с большой.
ответить
⮴ From admin Thu Nov 3 10:49:47 2022
Факт, спасибо!
.
ответить
☞ From prog_prog (unverified) Tue Feb 15 13:21:00 2022
Ошибка
В задаче 2.09(стр. 19) написано два примера подряд под буквой f)
ответить
⮴ From admin Thu Nov 3 10:36:47 2022
Да, факт
дрогнула рука при вставке примера в середину задачи
ответить
☞ From prog_prog (unverified) Tue Feb 15 11:40:00 2022
Ошибка
Ответ к примеру 2.06(C) дан неверно. Слово abrakadabra будет выведено один раз. Если в цикле было бы написано i
ответить
⮴ From admin Thu Nov 3 10:11:16 2022
Вы абсолютно правы
спасибо!
ответить
☞ From fluorine Sat Feb 12 05:02:00 2022
Кринжанул
Вышел задачник к учебнику А. В. Столярова
https://www.linux.org.ru/news/doc/16779232
Хотел ради прикола прочитать ветку, 8/10 комментов про копирование с книжек. Закрыл. Блин объясните этим людям, что DRM это (вредоносное) программное обеспечение, и что GPL тоже изменять нелязя, блин!
ответить
⮴ From admin Sat Feb 12 10:54:08 2022
опять в интернете кто-то неправ
Бугага.
Там не на содержание надо смотреть, а на количество комментов. Фигак — и за первые сутки полтыщи. Знатно у людей полыхает.
ответить
☞ From Alejandro (unverified) Sat Feb 12 04:21:00 2022
104, задача 11.19, 4
104, задача 11.19, 4 строка — "вставления", лучше "подстановки" или что-то вроде этого
127, пример кода — лишний перевод строки
127, предпоследняя строка — "т.;е."
137, задача 5.34, 3 абзац, 5 строка — 'b' вместо '\b'
139, 6 строка снизу — "FIFO", шрифт
140, задача 6.13, 10 строка — "— -"
------------------------------
И ещё три момента :)
127 — почему в примере используется (void*)0 вместо NULL?
136 — вместо того, чтобы убирать один из cat'ов, не лучше ли сократить название файла (например, до prog.c); просто 2 cat'а без параметров подряд смотрятся симпотично :)
Задача 11.23 — на эту задачу, кстати, есть одна интересная вариация: поставить четырех ферзей на доску 8x8 так, чтобы небитыми остались только 2 поля, при этом поля, занятые ферзями, считаются битыми.
ответить
⮴ From admin Sat Feb 12 18:02:35 2022
> 104, задача 11.19, 4
> 104, задача 11.19, 4 строка — "вставления",
формально не ошибка, так что поправил "прямо там"
Остальное да, факт. Спасибо.
> 127 — почему в примере используется (void*)0 вместо NULL?
а чёрт меня знает :-) почему-то написалось так. Вообще там ведь не про это пример.
> 136 — вместо того, чтобы убирать один из cat'ов
да нет, там имя файла много где, это надо внимательно смотреть, чтобы не разъехалось. Два cat'а рядом трогать не буду, уберу тот, что между следующими grep'ами :)
Про ферзей — интересно, раньше не попадалось.
ответить
☞ From Bohdan K._ (unverified) Tue Feb 8 20:52:00 2022
Страница 150, п.
Страница 150, п. 4.01, h) 0;
Ответ должен быть 1 , так как: 17 / 15 = 1.
ответить
⮴ From admin Wed Feb 9 14:01:02 2022
Вы совершенно
Вы совершенно правы, но опечатка тут, как ни странно, в условии, а не в ответе :-)
ответить
☞ From Alejandro (unverified) Tue Feb 8 16:31:00 2022
17, 3 строка
17, 3 строка снизу - "7", шрифт
22 - вероятно, лишние "решетки" у кодов
38 - "символ с кодом 10", 10 шрифт (дважды)
41 - "всё тот же EAX", EAX, шрифт
Там же - CDECL, шрифт
42 - 1 и 2 (значения eax), шрифты
53, задача 4.28 - после пункта 'e' есть тоска с запятой, после других - нет
53-54 - лишние точки с запятой
56, 9 строка снизу - "содержать" вместо "получены"
56 - отступы для полей структуры
59 - "и печатает" лучше отодвинуть чуть дальше, а то можно подумать, что печать требуется lseek'ом делать
77 - "textttunknown command", судя по всему, пропущен слеш у команды \texttt
79 - "#, % ^ v" пропущено 2 запятые
89, 90 - main, шрифт (трижды)
90 - "Ваши классы" вместо "Ваш класс"
90 - main, скобки
94 - Volume и Mass, скобки
99 - название игры "13" набрано моноширинным вместо обычного
101, последняя задача - #f и #F, единообразие
103, 104 - шрифт у прототипов предикатов (скобок и запятых)
107 - Join1 вместо Twist
И на всякий случай
72 - "так и должно быть", возможно, должно быть "как" вместо "так"
78, 6.15, 7 строка - smtp набрано строчными буквами
P.S.: Боюсь, Вам всё же придётся завести отдельную страничку :D
ответить
⮴ From admin Wed Feb 9 11:51:00 2022
Thanks!
Тяжело ваши простыни разгребать, честно говоря. Это же не на один час работы, а одним махом такое количество времени есть не всегда.
> 22 - вероятно, лишние "решетки" у кодов
с чего бы? речь идёт о Паскале, там это обозначение символа с заданным кодом
> 53, задача 4.28
"не грузи, да не грузим будешь" (tm)
везде там есть точки с запятой, просто в остальных пунктах они являются частью куска кода
> 59 - "и печатает"
это не ошибка, так что поправил прямо там, в таблицу не буду выносить
> 90 - "Ваши классы" вместо "Ваш класс"
чуть не купился. Между тем в задаче предполагается использование двух классов -- M и I.
> 103, 104 - шрифт у прототипов предикатов (скобок и запятых)
плюс и минус математические, остальное (в том числе скобки и запятые) моноширинное, в упор не вижу, где тут что-то не так
> 72 - "так и должно быть", возможно, должно быть "как" вместо "так"
Ну уж точно это не имелось в виду, там тогда придётся вместо двух отдельных предложений сделать одно сложноподчинённое, то есть это вообще совсем другое.
> 78, 6.15, 7 строка - smtp набрано строчными буквами
в этом контексте (в составе слова "smtp-сервер") мне так больше нравится
Спасибо :-)
ответить
⮴ From Alejandro (unverified) Wed Feb 9 17:40:00 2022
Ну да,
Ну да, накопительство — вещь не самая лучшая.
> просто в остальных пунктах они являются частью куска кода
Но ведь код и перечисления — это разные веши :)
> предполагается использование двух классов -- M и I
Чёрт, и куда я смотрел?!
> шрифт у прототипов предикатов
Посмотрел третий том и понял, что это уже моя память надо мной издевается.
PS: если честно, мне уже интересно, сколько я с декабря успел простыней отправить :D
ответить
⮴ From admin Wed Feb 9 18:26:33 2022
Сколько-сколько...
на странице эрраты ко второму изданию в очереди дожидаются своего часа девять комментов от вас и ещё десятка полтора от других участников
ответить
⮴ From Alejandro (unverified) Thu Feb 10 04:34:00 2022
Совсем забыл
Задача 6.11 — "FIFO", шрифт
ответить
☞ From Anonymous (unverified) Mon Feb 7 06:14:00 2022
Почему при sub 1a
Почему при sub 1a 1c флаг overflow не выставляется в 1, хотя старший бит изменился?
ответить
⮴ From admin Mon Feb 7 10:49:31 2022
Флаг OF -- это
Флаг OF -- это знаковое переполнение. Где вы тут видите переполнение, объясните хотя бы себе, а? Результат вполне представим знаковым целым данной разрядности (это разнесчастное минус-два, а в 8 бит лезет аж до минус-128), кто тут кого переполнил?
ответить
☞ From Василий (unverified) Sun Feb 6 22:02:00 2022
Опечатки
Добрый день, спасибо вам за труды!
Обнаружил две опечатки, а страницу с опечатками, посвящённую этой книге, не нашёл, поэтому оставлю их здесь.
Страница 91 целочисленнцю
Страница 99 неразличими
ответить
☞ From Anonymous (unverified) Sun Feb 6 20:54:00 2022
Задачник
Доброго времени. Какое минимальное пожертвование необходимо перевести, чтобы получить задачник?
ответить
⮴ From admin Tue Feb 8 13:51:13 2022
Сейчас я
Сейчас я предлагаю задачник в качестве "плюшки" всем, кто жертвует от 600 рублей. Вроде на соответствующей странице это написано.
ответить
☞ From Anonymous (unverified) Wed Jan 26 15:05:00 2022
Стр 112
Не то, что бы прямо ошибка, но небольшая придирка. В англоязычных странах элементарные функции принято обозначать немного по-другому, например тангенс как tan, логарифм по основанию e как log, арксинус как sin^-1 и тд.
Если предполагается не использовать не-ASCII символов в коде и писать только по-английски, то что насчёт математических обозначений в тех местах, где они отличаются?
ответить
⮴ From admin Mon Feb 7 11:18:36 2022
В англоязычных
В англоязычных странах элементарные функции принято обозначать
А ещё там первый абзац после заголовка не имеет отступа, а ещё там титульный лист, оглавление и предисловия не входят в общую нумерацию страниц, а ещё там тире пробелами не выделяют, а ещё там пунктуация совершенно другая, да и вообще язык там английский, а не русский. Так вот, как по-английски говорят, and so fucking what? Книга вроде пока ещё не на английском издана и не в англоязычной стране.
Если предполагается не использовать не-ASCII символов в коде
Есть целый ряд ограничений, которые совершенно очевидны в применении к программному коду, то есть к тексту на языке программирования. Если те же ограничения попытаться распространить на текст книги, то вообще-то эту книгу пришлось бы сначала на английский перевести, а потом уж издавать. И, кстати, печатать моноширинным шрифтом, нехай читатель глаза сломает (ненуачо, с программным кодом реально невозможно работать, если шрифт не моноширинный, давайте всё сделаем моноширинным).
Вы вообще, гм... откуда такие идеи берёте, а? Отсыпьте мне такой травы.
ответить
⮴ From Anonymous (unverified) Tue Feb 8 04:27:00 2022
> А ещё там
> А ещё там первый абзац...
Вы, пожалуйста обратите внимание на заголовок сообщения: Страница 112. Там речь идёт о программе-калькуляторе. Вы утверждете, что программа по умолчанию должна общаться с пользователем на английском языке, так? Значит и обозначения функций она должна использовать принятые в англоязычной литературе. Если бы речь была о другой странице, где задачи именно по чистой математике и обсуждается их решение — вопросов бы не было. Но там речь шла о том, какие строки должны использоваться при задании математического выражения на входе программы. О том, как оформлять основной текст книги никаких комментариев не было.
Это те же соглашения, как и точка vs запятая для разделения целой и дробной части числа. Как думаете, программа-калькулятор должна принимать десятичную точку, десятичную запятую, и то и другое или смотреть на настройки?
Нормально, если консольная программа-калькулятор, написанная русскоязычным программистом, общаться будет с пользователем на английском, но использовать соглашения из России (запятая для отделения дробной части, принятые в России обозначения элементарных функций)?
> Если те же ограничения попытаться распространить на текст книги
Речь шла об ограничениях и обозначениях не для текста книги, а для языка входных выражений для программы-калькулятора, который читателю предлагается написать.
ответить
⮴ From admin Tue Feb 8 12:14:47 2022
Ну вы бы сразу
Ну вы бы сразу сказали, к чему относится замечание, было бы проще. Да, пожалуй, на эту тему можно подумать.
ответить
⮴ From Anonymous (unverified) Tue Feb 8 17:12:00 2022
Знаете, вот
Знаете, вот есть такой эффект: когда пишешь и говоришь что-то кому-то, то кажется, что всё понятно и однозначно. А потом перечитаешь своё сообщение — и нифига подобного.
ответить
⮴ From admin Tue Feb 8 17:20:00 2022
Знаю, есть
Знаю, есть такой эффект. Сам неоднократно напарывался.
ответить
⮴ From Anonymous (unverified) Fri Feb 11 17:34:00 2022
Это только на
Это только на калькуляторах так пишут. Арксинус нигде как sin^{-1} не обозначают, а только как arcsin. Так как sin^{-1} это прообраз функции sin, что совершенно другое. Так же и с логарифмом. Log скорее использую там, где основание не имеет значения.
ответить
⮴ From Anonymous (unverified) Sat Feb 12 05:13:00 2022
Элементарные функции
Вот кстати да, если sin²x = (sin(x))^2, то по идее sin¯¹ должен означать косеканс.
И с логарифмами, ln вроде используют в англоязычной литературе тоже. А вот с что там с тангенсом? tan или tg?
В общем автору прежде чем исправлять что-то или не исправлять стоит куда-нибудь посмотреть, как в каких странах обозначают функции.
А почему на калькуляторах всё-таки ^-1? Экономия места, чтобы 6 букв не писать?
ответить
⮴ From Kakapo (unverified) Tue Feb 15 06:00:00 2022
За
За калькуляторы не скажу, а вот в статьях/учебниках, библиотеках софта и прочих различных средах, где все эти математические функции присутствуют, этого страшного ^-1 не видел ни разу. Обратные тригонометрические функции: asin, acos, atan. Тангенс: tan, котангенс: сot. Натуральный логарифм через ln бывает, но редко и именно в текстах, такого чтобы подобное было в софте - не видел.
На калькуляторах же скорее всего тупо есть место по вертикали, но по горизонтали - нет.
ответить
☞ From Anonymous (unverified) Mon Jan 24 08:02:00 2022
Задачник, ошибки
Стр 146
1.07b
По-моему ответ в ответах не полный. Я так понимаю, что если установлены и suid и sguid биты, то они будут действовать на всех, в том числе на группу и на владельца, разве нет?
Хотя тут скорее дело в неоднозначности формулировки.
1.08d
Какие-то сомнительные права. Может лучше взять бит t?
Стр 147
Ответы на задачи 1.23 и 1.24 не по порядку.
Стр 148
1.44j ваш ответ неверный
1.45d можно упростить до одной импликации
1.52b ваш ответ отрицательный 4-3log2 3 ≈ −0.755, т.е. неверный
1.52c преобразование логарифов неверное
За часть 2 пока не брался.
ответить
⮴ From admin Wed Feb 9 09:47:38 2022
thanks
> 1.07b
тут, очевидно, дело в неоднозначности структуры предложения
> 1.08d
что значит "лучше", кому лучше, для чего лучше?! это совершенно другая задача
> 1.44j
не так чтоб ответ неверный, это дефект вёрстки -- "сросшиеся" верхние чёрточки
> 1.45d
я не сказал бы, что импликация вместо ДНФ -- это "упрощение". Скорее наоборот.
> 1.52
да, полный швах — видимо, меня что-то сильно отвлекло
ответить
☞ From пользователем (не проверено) (не проверено) (unverified) Fri Jan 21 21:53:00 2022
Методика
Интересно, а при решении задач разрешается пользоваться мануалами и поисковиками?
Например, я не помнил наизусть порядок suid, sgid и sticky битов в первой цифре восьмеричного кода chmod и потому пришлось посмотреть man chmod. А что делают suid/sgid биты на каталогах пришлось искать в интернете, так как при беглом просмотре man chmod я это не увидел.
В задачах на скрипты на bash, есть ли какие-то ограничения на внешние команды?
Например, если в скрипте на bash будет единственная команда с вызовом интерпретатора perl, python, awk, tclsh или sed с кодом, решающим задачу, это всё ещё считается скриптом на bash?
В задачах на программирование, вы говорите, что проверить правильность решения можно самостоятельно путём тестирования.
Но ведь существует множество ошибок, которые путём тестирования так запросто не обнаружить — например, те самые bash pitfalls. Некоторые скрипты будут правильно работать почти всегда, но если в каталоге окажется файл содержащий переводы строк, пробелы и/или дефисы в начале имени или пробелы в его конце и что-то подобное, может сломаться.
Не все ваши читатели догадаются, что файлы с переводом строк в имени вообще возможно создать.
В 1.14 я всё сделал, кроме правильной проверки тождественности файла и заданного каталога. Надо применить что-то вроде
[file normalize]
из Tcl, но я не нашел аналог этой штуки в баше.А без этого пользователь может выполнить команду вроде
./symlinker ././../$(basename $PWD)/./foo//
и тогдаfoo
, куда предполагается складывать симлинки, будет в текущем каталоге, но как это проверить хоть сколько-нибудь элегантно я не представляю, вызывать tclsh только ради командыfile normalize
как-то не очень.ответить
⮴ From admin Sat Jan 22 00:42:42 2022
Интересно, а
Интересно, а при решении задач разрешается пользоваться мануалами и поисковиками?
Что значит "разрешается"? Вам что, кто-то оценку ставит? Или выгоняет за списывание? Или что? Вообще какой-то гнилой подход.
Например, если в скрипте на bash будет единственная команда с вызовом интерпретатора perl, python, awk, tclsh или sed с кодом, решающим задачу, это всё ещё считается скриптом на bash?
Нет, не считается. Впрочем, если хотите — считайте, мне-то что? Хотя, конечно, крайне странно. Если вы не хотите знать Bourne Shell, нафига пытаться решать на него задачи? Времени свободного слишком много?
множество ошибок, которые путём тестирования так запросто не обнаружить
Welcome to the real world, Neo
Не все ваши читатели догадаются, что файлы с переводом строк в имени вообще возможно создать.
Ну и что? Какое вообще это имеет отношение к задачам из задачника?
кроме правильной проверки тождественности файла и заданного каталога.
Это не требуется. Вообще. Нужно просто сначала запомнить имена файлов, а потом уже создавать директорию.
ответить
⮴ From кем-то (unverified) Sat Jan 22 06:34:00 2022
realpath и readlink
> Что значит "разрешается"?
Ну, неточная формулировка. Правильнее было использовать слово "предполагается".
> Если вы не хотите знать Bourne Shell, нафига пытаться решать на него задачи?
ОК, значит будем считать, что следует постараться вызывать как можно меньше внешних команд или как минимум минимизировать кол-во запускаемых процессов. Например в одной задаче у меня два варианта решения: в одном используется sed, а в другом всё сделано с помощью самого баша. Видимо, второй вариант лучше, хотя он немного длиннее.
Кстати в задачнике в задачнике ещё и не сказано, требуется ли стараться сделать решение портабельным для любых юникс-подобных ОС или достаточно, дабы оно работало на bash + gnu coreutils, а если не будет работать на чём-то вроде alpine linux с busybox — пофиг. Но, мне кажется, что не требуется, раз написано, что оно именно на bash, а не на sh.
> Какое вообще это имеет отношение к задачам из задачника?
Самое простое решение 1.11, которое мне приходит в голову, даст неверное количество собак, если в текущем каталоге содержатся файлы с переводами строк в имени.
> Нужно просто сначала запомнить имена файлов, а потом уже создавать директорию.
А вот это хитро. Без подсказки я бы даже не подумал, что так можно сделать.
Видимо, надо записать в свою мысленную записную книжку: "Если что-то сложно сделать — подумай, как получить результат, если это не делать". Кстати, мне это правило и раньше помогало решать с виду трудные задачи, но в данном случае я про него забыл.
Хотя, как оказалось, можно применить команды readlink -f или realpath и оставить мой прежний подход к решению.
ответить
⮴ From admin Sat Jan 22 10:41:00 2022
Про переводы
Про переводы строк внутри имён файлов — я не предполагал учитывать возможность этого. Впрочем, то решение, которое я предполагал для задачи 1.11, а равно и любое, какое приходит в голову, если решать на Shell'е, никак от этой возможности не страдает, ибо и команду ls, и сам sh писали всё-таки не идиоты.
А bash в задачнике не упоминается нигде. Напротив, везде говорится про Bourne Shell, это входной язык того самого /bin/sh (в линуксе он обычно синоним bash, но во FreeBSD — нет).
ответить