Во-первых, как я уже заметил, так писать никто не требует, но если хочется - почему нет? Во-вторых, современному стилю программирования нужно учиться и как раз по этой причине PascalАВС.NЕТ удобен: он позволяет писать код в любой парадигме и произвольно их смешивать при желании. Вот что и как проходим сейчас - так и пишем. А потом оставляем в памяти наиболее удобное.
А давайте рассмотрим вот такой код новичка на Питоне:
n = int(input())
m = n / 2
a = []
for i in range(n):
a.append(int(input()))
a.sort
print(m, a[m])
Допустим, у нас 25 значений. Вводим 25, затем эти 25 значений... и потом Питон нас радует сообщением "List indices must be integers or slices, not float", после чего школьник обычно лезет в телефон за переводом. Да блин же, зачем было 26 чисел тогда вводить!
Аналогичный код на современном Паскале (специально написан максимально близко к питоновскому)
##
var n := ReadInteger;
var m := n / 2;
var a := new List<integer>;
foreach var i in n.Times do
a.Add(ReadInteger);
a.Sort;
Print(a[m])
При попытке откомпилировать код сразу получим сообщение: "Нельзя преобразовать тип real к integer" с подсветкой места ошибки.
Вот этим Паскаль для школьника лучше Питона. У меня есть и с динамической типизаций примеры... просто они длиннее.
Указатели умерли вместе с ТурбоПаскаль. В современном Паскале ссылочная модель данных. Лишь для сложных объектов требуется отличать var a := b от var a := Copy(b). Но и только.
Так и в PascalАВС.NЕТ автоформатирование (если не отключать) работает автоматически при вводе. А если вставить в окно редактора неформатированный текст, есть опция меню (и кнопка на панели), выполняющая форматирование. Насчет "падений" - хотите верьте, хотите нет, Паскаль последний раз падал у меня года четыре назад. Хотя, по слухам, можно заронить программу, если пытаться работать с указателями - в .NET-среде это смертельный номер из-за сборщика мусора.
А в Питере DL Club учит на PascalАВС.NЕТ детей в 1-3 классе (можете на их сайте убедиться). А с 4 класса они на С++ переходят, ибо там олимпиадников готовят. Но что эта организация, что физ-мат лицей - это не массовое явление в школьной информатике, по ним нельзя равняться.
Про "современное". Школа учит не языку программирования, она должна учить конструировать алгоритмы (хотя и этому она не учит). От того, каким будет первый язык, зависит мышление ученика. Приучат на Пайтоне к динамической типизации - так и будет таращить глаза в вузе, услышав про С/С++ и ныть, что это все "дешманские языки". Я как-то попросил питонщика написать алгоритм обращения матрицы методом Гаусса. Бог мой, что это было... Гаусс бы сто раз перевернулся в могиле, увидев такую реализацию.
Вынужден Вас разочаровать. Во-первых, точечная нотация (в C# она называется fluent-interface) пришла из Unix-конвейеров и ООП. Во-вторых, лямбды пришли из функционального программирования, которому ого-го сколько лет. Так что это взято вовсе не из Питона. А что Вы называете "cтилем Perl" ? Фигурные скобки нельзя, потому что когда-то решили, что в Паскале они обрамляют комментарии. Четыре пробела отступать? Ну так пробелы в Паскале вне строковых литералов незначимы, пишите где и сколько хотите.
Если Вам знаком тот же Питон, то Вы понимаете, что это повторение. Только не константы, а объекта. В данном случае - массива из одного элемента со значением -1. Но Паскаль - это не Питон, где те же "лямбды" ущербны, ибо реализованы не полностью. В Паскале, как и в Хаскель, функция - объект первого класса, т.е. ее имя может встречаться в выражении в качестве операнда. Так что |х| - функция, возвращающая массив из своих аргументов х. Синтаксический сахар для функции Arr(a1, a2, ...), просто тут мне понадобился только один элемент.
По поводу Вашего "|Random|" - да, выведет 5 раз повторенное случайное вещественное число из интервала [0, 1). Забавно, да? Не зная языка, Вы написали на нем работающую конструкцию, да еще и угадали, что она сделает. Что же тут неочевидного? С точки зрения функционального программирования - ничего. Но ведь так никто писать не заставляет, можно писать и иначе, и даже как на ТурбоПаскаль.
Поищите там Ваши претензии на уровне ""слишком много слов ради слов (end, begin и прочее)", переменные в начале или поддержания его (в некоторых версиях) по-факту для школы "
Что ж, вот Вам современный паскаль, пробуйте фишку.
## (1..1000).Where(A -> (1..5000)
.All(x -> (x and 30 <> 4) or ((x and 35 = 1) <=
(x and A = 0)))).Last.Print
Это решение пробника для ЕГЭ-2021. В одну строку. Вот условие задачи: Определите наибольшее натуральное число A, при котором выражение ( x & 30 ≠ 4) ∨ ((x & 35 = 1) → (x & A = 0)) тождественно истинно (то есть принимает значение 1 при любом натуральном значении переменной x)?
Лазарус ("Делфи для бедных") - это идол украинских учителей информатики. И немного - казахских. В России Лазарус совершенно непопулярен, обучающие на нем - они типа сектантов.
И как, кроме C/C++ много современных языков программирования работают с указателями? Практически ни одного. Они работают со ссылками, а это совсем не одно и то же. Все ООП-языки строятся на основе ссылочной модели данных. Кроме крайне неудобной "размерной" модели в С++, за что его кто только не ругал.
А зачем? Если продолжать учить в PascalABC.NET, можно работать со статическими массивами (для закостенелых учителей), с динамическими, а также со списками List (если хочется делать частые добавления / удаления). Причем делать это куда проще и понятнее в записи, чем на С++ с STL.
Это именно в Турбопаскаль. В PascalABC.NET можно а качестве множества использовать стандартную обобщенную коллекцию HashSet, причем работать с ней и как с коллекцией, и как с классическим множеством языка Паскаль. Турбопаскаль давно умер, зачем вспоминать, как там все было устроено?
Это Вы так о Паскале, потому что Ваши сведения о нем застыли на уровне максимум 2000 года.
Указатели - да, сейчас они не нужны. Совсем.
Списки Вам на C# хочется? LINQ? Итераторы? Сортировку? Ну получите на Паскаль
Во-первых, как я уже заметил, так писать никто не требует, но если хочется - почему нет? Во-вторых, современному стилю программирования нужно учиться и как раз по этой причине PascalАВС.NЕТ удобен: он позволяет писать код в любой парадигме и произвольно их смешивать при желании. Вот что и как проходим сейчас - так и пишем. А потом оставляем в памяти наиболее удобное.
А давайте рассмотрим вот такой код новичка на Питоне:
Допустим, у нас 25 значений. Вводим 25, затем эти 25 значений... и потом Питон нас радует сообщением "List indices must be integers or slices, not float", после чего школьник обычно лезет в телефон за переводом. Да блин же, зачем было 26 чисел тогда вводить!
Аналогичный код на современном Паскале (специально написан максимально близко к питоновскому)
При попытке откомпилировать код сразу получим сообщение: "Нельзя преобразовать тип real к integer" с подсветкой места ошибки.
Вот этим Паскаль для школьника лучше Питона. У меня есть и с динамической типизаций примеры... просто они длиннее.
Почему же нельзя?
Указатели умерли вместе с ТурбоПаскаль. В современном Паскале ссылочная модель данных. Лишь для сложных объектов требуется отличать var a := b от var a := Copy(b). Но и только.
Зайдите на сайт питерского DL Club. Там дети в 1-3 классе на современном паскале такие вещи в графике вытворяют...
Так и в PascalАВС.NЕТ автоформатирование (если не отключать) работает автоматически при вводе. А если вставить в окно редактора неформатированный текст, есть опция меню (и кнопка на панели), выполняющая форматирование. Насчет "падений" - хотите верьте, хотите нет, Паскаль последний раз падал у меня года четыре назад. Хотя, по слухам, можно заронить программу, если пытаться работать с указателями - в .NET-среде это смертельный номер из-за сборщика мусора.
А в Питере DL Club учит на PascalАВС.NЕТ детей в 1-3 классе (можете на их сайте убедиться). А с 4 класса они на С++ переходят, ибо там олимпиадников готовят. Но что эта организация, что физ-мат лицей - это не массовое явление в школьной информатике, по ним нельзя равняться.
Про "современное". Школа учит не языку программирования, она должна учить конструировать алгоритмы (хотя и этому она не учит). От того, каким будет первый язык, зависит мышление ученика. Приучат на Пайтоне к динамической типизации - так и будет таращить глаза в вузе, услышав про С/С++ и ныть, что это все "дешманские языки". Я как-то попросил питонщика написать алгоритм обращения матрицы методом Гаусса. Бог мой, что это было... Гаусс бы сто раз перевернулся в могиле, увидев такую реализацию.
Вынужден Вас разочаровать. Во-первых, точечная нотация (в C# она называется fluent-interface) пришла из Unix-конвейеров и ООП. Во-вторых, лямбды пришли из функционального программирования, которому ого-го сколько лет. Так что это взято вовсе не из Питона. А что Вы называете "cтилем Perl" ? Фигурные скобки нельзя, потому что когда-то решили, что в Паскале они обрамляют комментарии. Четыре пробела отступать? Ну так пробелы в Паскале вне строковых литералов незначимы, пишите где и сколько хотите.
Если Вам знаком тот же Питон, то Вы понимаете, что это повторение. Только не константы, а объекта. В данном случае - массива из одного элемента со значением -1. Но Паскаль - это не Питон, где те же "лямбды" ущербны, ибо реализованы не полностью. В Паскале, как и в Хаскель, функция - объект первого класса, т.е. ее имя может встречаться в выражении в качестве операнда. Так что |х| - функция, возвращающая массив из своих аргументов х. Синтаксический сахар для функции Arr(a1, a2, ...), просто тут мне понадобился только один элемент.
По поводу Вашего "|Random|" - да, выведет 5 раз повторенное случайное вещественное число из интервала [0, 1). Забавно, да? Не зная языка, Вы написали на нем работающую конструкцию, да еще и угадали, что она сделает. Что же тут неочевидного? С точки зрения функционального программирования - ничего. Но ведь так никто писать не заставляет, можно писать и иначе, и даже как на ТурбоПаскаль.
Ненавижу Паскаль, потому что он Паскаль. Это как объяснение Портоса: "А я дерусь.... потому что дерусь!"
В современном Паскале мы просто пишем программу:
Все коротко понятно и читаемо (ну или почти все). В С++ на уровне школьника код будет намного менее нагляден. А ведь это примитивный пример.
Я вот тут ниже в комментарии пример кода написал https://habr.com/ru/post/569362/comments/#comment_23307170
Поищите там Ваши претензии на уровне ""слишком много слов ради слов (end, begin и прочее)", переменные в начале или поддержания его (в некоторых версиях) по-факту для школы "
Что ж, вот Вам современный паскаль, пробуйте фишку.
Это решение пробника для ЕГЭ-2021. В одну строку.
Вот условие задачи: Определите наибольшее натуральное число A, при котором выражение
( x & 30 ≠ 4) ∨ ((x & 35 = 1) → (x & A = 0))
тождественно истинно (то есть принимает значение 1 при любом натуральном значении переменной x)?
Лазарус ("Делфи для бедных") - это идол украинских учителей информатики. И немного - казахских. В России Лазарус совершенно непопулярен, обучающие на нем - они типа сектантов.
Это в какой стране "изучают в среде TP7" ? У Вас есть статистика или это как у М. Жванецкого "Я тоже видел у одного японский транзистор!" ?
Хаскель - язык с функциональной парадигмой, зачем его сравнивать с языками, разработанными для процедурно-ориентированного кода?
И как, кроме C/C++ много современных языков программирования работают с указателями? Практически ни одного. Они работают со ссылками, а это совсем не одно и то же. Все ООП-языки строятся на основе ссылочной модели данных. Кроме крайне неудобной "размерной" модели в С++, за что его кто только не ругал.
Тем временем PascalАВС.NЕТ (полный работающий код):
А зачем? Если продолжать учить в PascalABC.NET, можно работать со статическими массивами (для закостенелых учителей), с динамическими, а также со списками List (если хочется делать частые добавления / удаления). Причем делать это куда проще и понятнее в записи, чем на С++ с STL.
Это именно в Турбопаскаль. В PascalABC.NET можно а качестве множества использовать стандартную обобщенную коллекцию HashSet, причем работать с ней и как с коллекцией, и как с классическим множеством языка Паскаль. Турбопаскаль давно умер, зачем вспоминать, как там все было устроено?