Как стать автором
Обновить
1
0

Пользователь

Отправить сообщение
Рад, что у Вас от меня «балдеж». Я не знаю, как с Вами разговаривать, если Вы считаете, что ссылочная модель данных в языке программирования определяется некоей матрицей смежности. Почитайте в Интернет, что такое ссылочная модель данных, что ли…
Лет мне 69 без двух недель и 51 год из них я отдал вычислительной технике. Из нуля публикаций на Хабре следует лишь то, что я не вижу смысла тут что-то публиковать. Вот у Вас аж целых 19 публикаций — и что? «Программист», не понимающий что такое модель данных в ЯП. У меня только за последние два с половиной года опубликованы 4 интернет-книги по программированию с общим объемом более 1000 страниц и пятая на выходе, функционирует интерактивный обучающий курс весьма большого объема, видео и презентации с выступлений на коференциях и т.д. Так что продолжайте балдеть по поводу моих 0 публикаций на Хабре.
А в чем проблема-то? В PascalABС.NET отступы автоматически расставляются. А если что-то не так — есть кнопочка и HotKey для форматирования. про минусы Пайтона я сразу написал, что обосновано изложить их в комментариях не получится, да и не нужно это, потому что изложено не раз и только фанаты этого языка делают вид, что у Пайтона минусов нет.
Мне все окончательно стало понятно. Вы не отвечаете прямо на поставленные вопросы, а приводите какие-то фрагменты коды, якобы имеющие некое отношение к общей теме. Так обычно взрослые люди не поступают: это еще простительно для подростков. А во взрослом мире подобные попытки уйти в сторону свидетельствует о том, что человек, скажем так, не совсем в теме. Печально, что Вы считаете, будто «Другие обходы возможны, но пользы от них нет». Например, прямой обход дерева используется при сортировках, обратный — при динамическом программировании. Пользы от Вашего варианта построения дерева я не увидел. В нем и элементы сложно размещать для поиска (к примеру), и сам поиск производить. У Вас абстрактное дерево ради самого дерева, но не более того. И еще раз, указатели — это прошлый век. Современные языки программирования используют ссылочную модель данных.
Отлично, хочу список вещественного типа написать, это как будет? И сборщик мусора Вы как-то тихонько и аккуратно стороной обошли, видимо, чтобы не зацепило ))))
А еще, я не понял, где у Вас связь с предшественником? Вы как такое дерево собираетесь обходить, скажем, в ширину?
Возможно это было познавательно — ковыряться в подобном коде, а сейчас на PascalABC.NET это все занимает десяток строк и понимается очень легко.
procedure Ханой(Дисков, Откуда, Куда, Рабочий: integer);
begin
  if Дисков = 0 then
    exit;
  Ханой(Дисков - 1, Откуда, Рабочий, Куда);
  $'Переложить диск с {Откуда} на {Куда}'.Println;
  Ханой(Дисков - 1, Рабочий, Куда, Откуда)
end;

begin
  Ханой(4, 1, 3, 2) // четыре кольца с 1-го стержня на 3-й через 2-й
end.
И что следует из этого дельфийского кода? Бинарное дерево без хранения данных, состряпанное на указателях, как в книге у Н.Вирта в 1980 году? Приходите с таким кодом в .NET, Вас там сборщик мусора быстро поставит на надлежащее место ))
Можете не верить. НО… бывает и достаточно часто. Когда пишется код, в котором есть ввод/вывод текста с кириллицей. Люди просто забывают сменить регистр. Вот простой пример — смотрите этапы последовательного набора оператора:
Print($'{}, {}, {}');
Print($'Длина{}, ширина{}, периметр{}');
Print($'Длина{а}, ширина{б}, периметр{}');
Print($'Длина{а}, ширина{b}, периметр{2 * (a + b)}');

Введя имя переменной б, увидели ошибку, b поправили, но в спешке к а не вернулись и имя осталось на кириллице.
Отсюда могу только сделать вывод, что либо Вам не доводилось заниматься обучением в массовой аудитории, либо, в противном случае, эта аудитория Вас тихо ненавидела.
Вы действительно не понимаете или делаете вид? Речь о первом/втором языке программирования для новичка, причем о языке для массового обучения, а не будущих победителей международных олимпиад. Речь о том, что понимание алгоритмов закладывается именно на этом этапе и от языка программирования зависит очень многое.
Одного человека, ну там группку небольшую энтузиастов можно с горшка учить писать код на С/С++, но для масс, которые нынче в девятом классе не знают таблицы умножения, вот для таких это не работает.
Это да, это какие-то глупые придирки.

Это не глупые придирки, это реальная история новичка, который после школьного КУМир'а попытался освоить Пайтон. Речь-то о том, на чем учиться программированию, а не какой язык учить, чтобы стать профессиональным программистом и писать в production.
На мой взгляд, учебный язык должен быть регистронезависимым. Детям и так непросто, а тут еще регистры запоминать.
А это от цели зависит. Насчет «можно сделать» — так давно доказано, что три структуры — следование, выбор и повторение позволяют запрограммировать любой алгоритм. Что Вы подразумеваете под «учебником ООП» я не знаю. Язык изучают поэтапно. Особенно, если он мультипарадигменный. И в этом случае ООП — просто один из этапов изучения. Например, .NET-языки — они изначально ООП-ориентированные, в них любые типы данных — это классы. И запись 2.Sqrt эквивалентна записи Sqrt(2).
Проверка на этапе компиляции позволяет найти «сюрпризы», поскольку статическая типизация позволяет проверить операнды на совместимость. Как минимум, это существенно повышает надежность кода и страхует начинающего от грубых ошибок. Здесь же сразу будут выявлены ошибки в написании имен. Почему Вам надо объяснять такие азы?
Подключать библиотеки — это означает, что новичок должен изначально знать и помнить, что где хранится. С каких пор это считается достоинством первого изучаемого языка?
Неправильное имя метода в том же PascalABC.NET написать практически невозможно (по точке сразу же раскрывается контекстно-зависимое меню со списком полей и методов).
В целом Ваше «везде» — либо попытка замылить недостатки Пайтона, либо незнание возможностей того же PascalABC.NET. В последнем случае не нужно делать утверждения про это самое «везде», выглядит несерьезно.

P.S. А JS в качестве первого языка не критиковали только ленивые.
Прекрасный язык для обучения. В детстве, у бабушки в деревне, часто доставал тетрадку и писал программы на бейсике в ней (компьютера в деревне не было).
И в 90х на бейсике сдавал вступительный экзамен по информатике в ВУЗ (тоже на бумажке).

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

Есть ли в этой программе ошибки? Если есть, то какие и где?
a = int(input())  # Так в Python оформляется ввод данных
c = a/3
if c < 3:
    print(a,3*c,sep=' ')
    b = 12
else:
    print(а,c-1,sep=' ')
    b = 'abcd'
print(b/2)

Запускаем, вводим значение 5:
==== RESTART: C:/Python/Python38-32/tmp.py ===
5
5 5.0
6.0

Уфф… отработала. Значит, ошибок нет? Но не спешите так, это же не какой-нибудь плебейский паскаль, это крутой Python! И ошибки на самом деле есть. Две. Одна в той ветке, которая по else и куда можно попасть, введя значение 9 и больше. Там переменная а набрана кириллицей. Но об этом пользователь программы узнает лишь тогда, когда будет предпринята попытка эту строку выполнить. А пока это просто мина, ждущая своего часа. Вторая ошибка немного похитрее. Переменной b в этой ветке присваивается значение строки, содержащей буквы. Последний оператор программы вычисляет и выводит значение b/2, считая что b должно быть числом. Программа отработала лишь потому, что она пошла по первой ветке, где b получило значение 12 и действительно стало числового типа.

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

Ах да, может вы думаете, что извлечь квадратный корень из числа в Python так же просто, как в каком-нибудь КуМир или Паскаль? Радостно написать одну строчку print(Sqrt(2)), еще раз подумав: «а эти, со своими дурацкими паскалями все еще begin … end пишут», и увидеть результат? Спешу разочаровать: получите сразу две ошибки. Во-первых, Python не знает, что такое Sqrt. Функция извлечения квадратного корня хранится у него в библиотеке Math, имя которой надо указать перед функцией и отделить от нее точкой. Значит, print(Math.Sqrt(2))? Снова не угадали: библиотеку сначала надо подключить оператором import:
import Math
print(Math.Sqrt(2))

Но нет! Нет, пишет такого модуля. И правда, его нет. Потому что Python – язык регистрозависимый и библиотеку зовут на самом деле math.
import math
print(math.Sqrt(2))

Третий акт мерлезонского балета тоже оказывается неуспешным:
print(math.Sqrt(2))
AttributeError: module 'math' has no attribute 'Sqrt'

В переводе на русский язык: модуль math не имеет атрибута Sqrt. Не будем выяснять, что это за атрибут такой и почему его модуль не имеет. На самом деле, в библиотеке math не нашлось Sqrt. Потому что там – sqrt! И что, вы сейчас подумали, если везде писать маленькие буквы, наступит полное счастье? Попытайтесь, конечно, если будете изучать Python.
Ну и? Вот PascalANC.NET:
## uses GraphWPF;
DrawCircle(150, 210, 80)
Вот описание класса для бинарных деревьев, причем в обобщенном типе. В узле дерева данные хранятся в виде списка. На PascalABC.NET. Хотелось бы увидеть, как это выглядит на волшебном «живом» QBasic…
type
  node<T> = class
  private
    left, right: node<T>;
    up: node<T>;
    lst: List<T>;
  
  public
    data: T;
    
    constructor(p: T);
    begin
      left := nil;
      right := nil;
      up := nil;
      lst := new List<T>;
      data := p
    end;
end;
В PascalABC.NET есть и Черепашка, и Робот.
У Вас старые сведения. Сейчас в PascalABC.NET нужна только одна строка:
## uses GraphWPF // ну или GraphABC, если нужно старье
А кому он нужен? Кроме того, все современные языки давно уже перешли «на ноль» и лучше привыкать сразу.
Чего только люди не напишут… QBasic. Посмотрите лучше, какие вещи творят первоклассники из питерского DL Club на PascalABC.NET. В том числе, с графикой, потому что есть необходимые библиотеки. И все это напрямую под Windows, а не с костылями типа DOSBox.

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность