Вы считаете, что я в свои годы не могу отличить "по делу" от прочего. Есть много иных платформ, есть с чем сравнить. Я не собираюсь тут всем вкусам угождать, у меня есть свое мнение, я считаю его обоснованным и пока не увижу серьезных доводов против, останусь при нем. Мне не нравится и даже смешна попытка нынешней публики (ну т.е. когда людей больше, чем один) устроить показательный расстрел вопросами. Пока мне казалось, что имеет место реальное непонимание, я пытался что-то объяснить. Теперь я вижу, что идет просто "навал" вопросов в объеме, который потребует для ответов уйму времени, но при этом лишь породит очередные. Спасибо, но этот номер не пройдет.
Вполне понятен. Не нужен — не пользуйтесь и не меняйте. Вообще-то я все время имел в виду школьную информатику и первый язык программирования для нее, о чем уже не в одном комментарии писал. И возникли эти комментарии как реплика на заявление, что за 30 лет ничего лучше QBasic в качестве языка для приобщения к программированию не нашлось.
Затем, что в .NET-среде написано и функционирует множество прикладных программ. Очевидно, далее последует вопрос, какие именно это программы и требование объяснить, кому и зачем они нужны? Да просто удалите на компьютере все библиотеки .NET и посмотрите, сколько программ перестанет работать.
Ну или почитайте что-нибудь популярное, например https://skillbox.ru/media/code/kak_rabotaet_net_i_zachem_on_nuzhen
Ну что же, зайдите в среду .NET и примите там «меры». Заранее могу сказать, что они кончатся тем, что Вы ее благополучно покинете и будете всем рассказывать, какое это зло. Не проблема. Работайте в Линуксе на FPC и будет Вам счастье.
«Уборщица» в .NET ничего в мусор без Вашей команды не отправит, но она считает себя вправе подвинуть Ваши бумаги, чтобы вытереть пыль и подготовить кабинет к визиту Биг босса. После чего «тут слева вверху была одна бумажка...» станет неактуальным.
Про сборщик мусора я попытался объяснить на примере. Более серьезное объяснение будет целой статьей и такая задача передо мной не стоит.
И, конечно же, у каждого собственное IMHO. Студент студенту рознь. Одно дело студенты-технари, другое — будущие системщики, третье — математики-прикладники… Одним достаточно единственной парадигмы, другие предпочитают смесь многих парадигм, если это позволяет язык.
Хотите про коды — да не вопрос, поставьте задачу и опубликуйте полный код для ее решения, такой чтобы скопировал, запустил — и выполнилось. Тогда и я в ответ код привести могу. А то сейчас получается развод из области (ничего личного, это лишь поговорка!) «Один дурак может задать столько вопросов, что и 99 умных не ответят».
Про сборщик мусора поясню на примере.
Допустим, вы пришли на рынок купить приличного вяленого рыбца. В свете последних распоряжений наших властей сейчас их как бы запрещено ловить и, тем более, продавать. Поэтому продавец аккуратненько раскладывает несколько рыбин (объекты), вы их рассматриваете и показываете на ту, которую хотите взять (вот он, указатель на объект). К несчастью, продавец замечает некоего типа в форме и мгновенно сметает рыбу под прилавок (сборщик мусора). Но вот опасность миновала, продавец снова достает и раскладывает рыбу. Какова вероятность, что выбранная вами рыба окажется на месте, которое вы указали «до того, как...» да и вообще, что на этом месте хоть какая-нибудь рыба окажется? Вот поэтому в системах с автоматической сборкой мусора указатели использовать крайне опасно.
А ссылка — это как если бы вы на выбранную рыбу прилепили ярлычок. Тогда после повторной выкладки все равно, на каком месте она окажется.
Я вот «не умею телевизоры», а когда кнопочку на пульте нажимаю он все что просишь как-то показывает. Наверно потому, что внутри у него какое-то волшебство сидит. Вот так же и в Haskell — наверно у него в библиотеках сидит какой-то Чеширский котик и все обеспечивает…
Мне тут задали вопрос, почему я не публикую материалы на Хабре. Вот в частности потому, что в ответ не на материал, всего лишь на реплики, народ (видимо, поболтать охота) уже несколько дней засыпает меня тривиальными вопросами, за которые студентов уже давно бы отправили «учить матчасть». Представляю, какой бы поток комментариев вызвала статья сколь-нибудь существенного объема!
Я не стану (это просто глупо) приводить тут кодов, обеспечивающих полноценную работу с деревьями. Приводить же отдельные фрагменты еще глупее: они ничего не продемонстрируют. Все это больше похоже на троллинг, чем на попытку действительно разобраться в каком-то вопросе.
И главное. От обсуждения QBasic мы почему-то пошли обсуждать «старый» и «новый» Паскаль. Как-то это неправильно.
Не во всех. А Вы не рассматриваете случай обхода дерева не с вершины, например, бинарного дерева поиска с тем, чтобы получить отсортированные значения из узлов? Или дерева, оставшегося после разбора арифметического выражения с тем, чтобы произвести вычисление его значения?
Вопрос так не ставился: прав Н.Вирт или нет. Н.Вирт в своей книге «Algorithms + Data Structures = Programs», вышедшей в 1976 году, говорил о реализации динамических структур данных при помощи как ссылок, так и указателей. Ныне указатели остались в языке C, как воспоминание об операционных системах с «ручным» управлением оперативной памятью. В современных системах, где царствуют сборщики мусора, указатель очень быстро может начать указывать совсем не туда, куда хотел указать программист. Именно поэтому в ООП-языках только ссылки, которые упрощенно можно считать просто дополнительными именами. В С# оставлена возможность использовать указатели, но она недаром именуется «небезопасный код».
Но вернемся к бинарным деревьям. Удобно создавать такое дерево, чтобы из текущего узла можно было двигаться вверх, влево или вправо. Следовательно, нам понадобится структура, которая будет хранить некоторое значение, связь с предыдущим уровнем, а также связи с левым и правым поддеревом более низких уровней. Итого — три связи. Н.Вирт решает вопрос несколько иначе: он хранит в некоей глобальной переменной указатель на корень дерева с тем, чтобы начать его обход с корня. И два указателя на левое и правое поддеревья. Собственно, вот и вся разница в организации структуры.
Далее, ООП-языки хранят узел дерева (node) в виде объекта. Когда требуется новый объект, он создается конструктором. У Н.Вирта в реализации на Паскале объектов нет, естественно. Поэтому он реализует рекурсивную динамическую структуру.
Никаких серьезных противоречий нет. Есть речь о том, что так, как описывал Н.Вирт, в современном программировании деревья уже не создаются. Но этот вовсе не означает, что он (или мы теперь) описывал деревья неправильно. Вопрос не о принципах, вопрос о реализации современными средствами.
Спасибо за советы, но книги я выкладываю в открытый доступ, так что вопрос их продажи не стоит, а счетчик их скачиваний (разумеется, также свободных) может удовлетворить любое ЧСВ. ))
Как определять информационные структуры типа тех же деревьев — про это уже столько всего везде написано, что там и влезть некуда. По поводу «снисходить» — я вовсе не воспринимаю Хабр, как какое-то «дно», дело в ином: моя тематика — это обучение программированию в школе, а Хабр в части программирования больше ориентирован на уже состоявшихся программистов (а также тех, кто считает, что уже состоялся) и все сведется к религиозным войнам.
Хм… ну если идеосинкразия к автоматической простановке переносов, это отключаемо настройками IDE.
По поводу JS — специалисты в области начального образования горячо протестуют против использования скриптового языка в качестве первого. Причин много, не вижу смысла перечислять известные вещи. Скрипты на JS пишут в основном люди с административными функциями и это не имеет отношения к, например, школьной информатике.
Можете, конечно. Последнее время занялся вопросами школьного образования в части информатики. Все по PascalABC.NET. Если нужны подробности, ссылки — это только в личку, не хочу чтобы тут кто-то счел за рекламу.
Ну, нормально. Я же в данном случае не по поводу QBasic (или даже самого QB) писал, а по поводу реализации рекурсии на массивах.
Сам когда-то работал с Basic, а VBA вообще был «наше всё». Но это дело прошлое, а за прошлое цепляться бессмысленно. Раз уж сама Microsoft отказывается от VB.NET (а других поддерживаемых бейсиков у нее и нет) — тут есть о чем задуматься.
Вы считаете, что я в свои годы не могу отличить "по делу" от прочего. Есть много иных платформ, есть с чем сравнить. Я не собираюсь тут всем вкусам угождать, у меня есть свое мнение, я считаю его обоснованным и пока не увижу серьезных доводов против, останусь при нем. Мне не нравится и даже смешна попытка нынешней публики (ну т.е. когда людей больше, чем один) устроить показательный расстрел вопросами. Пока мне казалось, что имеет место реальное непонимание, я пытался что-то объяснить. Теперь я вижу, что идет просто "навал" вопросов в объеме, который потребует для ответов уйму времени, но при этом лишь породит очередные. Спасибо, но этот номер не пройдет.
Вполне понятен. Не нужен — не пользуйтесь и не меняйте. Вообще-то я все время имел в виду школьную информатику и первый язык программирования для нее, о чем уже не в одном комментарии писал. И возникли эти комментарии как реплика на заявление, что за 30 лет ничего лучше QBasic в качестве языка для приобщения к программированию не нашлось.
По существу — это разбираться, как оно там в Хаскель устроено? Я пока еще в своем уме… несмотря на старания здешней публики.
Затем, что в .NET-среде написано и функционирует множество прикладных программ. Очевидно, далее последует вопрос, какие именно это программы и требование объяснить, кому и зачем они нужны? Да просто удалите на компьютере все библиотеки .NET и посмотрите, сколько программ перестанет работать.
Ну или почитайте что-нибудь популярное, например https://skillbox.ru/media/code/kak_rabotaet_net_i_zachem_on_nuzhen
«Уборщица» в .NET ничего в мусор без Вашей команды не отправит, но она считает себя вправе подвинуть Ваши бумаги, чтобы вытереть пыль и подготовить кабинет к визиту Биг босса. После чего «тут слева вверху была одна бумажка...» станет неактуальным.
И, конечно же, у каждого собственное IMHO. Студент студенту рознь. Одно дело студенты-технари, другое — будущие системщики, третье — математики-прикладники… Одним достаточно единственной парадигмы, другие предпочитают смесь многих парадигм, если это позволяет язык.
Хотите про коды — да не вопрос, поставьте задачу и опубликуйте полный код для ее решения, такой чтобы скопировал, запустил — и выполнилось. Тогда и я в ответ код привести могу. А то сейчас получается развод из области (ничего личного, это лишь поговорка!) «Один дурак может задать столько вопросов, что и 99 умных не ответят».
Допустим, вы пришли на рынок купить приличного вяленого рыбца. В свете последних распоряжений наших властей сейчас их как бы запрещено ловить и, тем более, продавать. Поэтому продавец аккуратненько раскладывает несколько рыбин (объекты), вы их рассматриваете и показываете на ту, которую хотите взять (вот он, указатель на объект). К несчастью, продавец замечает некоего типа в форме и мгновенно сметает рыбу под прилавок (сборщик мусора). Но вот опасность миновала, продавец снова достает и раскладывает рыбу. Какова вероятность, что выбранная вами рыба окажется на месте, которое вы указали «до того, как...» да и вообще, что на этом месте хоть какая-нибудь рыба окажется? Вот поэтому в системах с автоматической сборкой мусора указатели использовать крайне опасно.
А ссылка — это как если бы вы на выбранную рыбу прилепили ярлычок. Тогда после повторной выкладки все равно, на каком месте она окажется.
Я не стану (это просто глупо) приводить тут кодов, обеспечивающих полноценную работу с деревьями. Приводить же отдельные фрагменты еще глупее: они ничего не продемонстрируют. Все это больше похоже на троллинг, чем на попытку действительно разобраться в каком-то вопросе.
И главное. От обсуждения QBasic мы почему-то пошли обсуждать «старый» и «новый» Паскаль. Как-то это неправильно.
Но вернемся к бинарным деревьям. Удобно создавать такое дерево, чтобы из текущего узла можно было двигаться вверх, влево или вправо. Следовательно, нам понадобится структура, которая будет хранить некоторое значение, связь с предыдущим уровнем, а также связи с левым и правым поддеревом более низких уровней. Итого — три связи. Н.Вирт решает вопрос несколько иначе: он хранит в некоей глобальной переменной указатель на корень дерева с тем, чтобы начать его обход с корня. И два указателя на левое и правое поддеревья. Собственно, вот и вся разница в организации структуры.
Далее, ООП-языки хранят узел дерева (node) в виде объекта. Когда требуется новый объект, он создается конструктором. У Н.Вирта в реализации на Паскале объектов нет, естественно. Поэтому он реализует рекурсивную динамическую структуру.
Никаких серьезных противоречий нет. Есть речь о том, что так, как описывал Н.Вирт, в современном программировании деревья уже не создаются. Но этот вовсе не означает, что он (или мы теперь) описывал деревья неправильно. Вопрос не о принципах, вопрос о реализации современными средствами.
Как определять информационные структуры типа тех же деревьев — про это уже столько всего везде написано, что там и влезть некуда. По поводу «снисходить» — я вовсе не воспринимаю Хабр, как какое-то «дно», дело в ином: моя тематика — это обучение программированию в школе, а Хабр в части программирования больше ориентирован на уже состоявшихся программистов (а также тех, кто считает, что уже состоялся) и все сведется к религиозным войнам.
По поводу JS — специалисты в области начального образования горячо протестуют против использования скриптового языка в качестве первого. Причин много, не вижу смысла перечислять известные вещи. Скрипты на JS пишут в основном люди с административными функциями и это не имеет отношения к, например, школьной информатике.
Сам когда-то работал с Basic, а VBA вообще был «наше всё». Но это дело прошлое, а за прошлое цепляться бессмысленно. Раз уж сама Microsoft отказывается от VB.NET (а других поддерживаемых бейсиков у нее и нет) — тут есть о чем задуматься.