Болталка PascalABC.NET

Если память к тому времени не отшибёт.

1 лайк

Товарищ курсант, если ты такой тупой, что ничего не помнишь, то заведи себе записную книжку и всё туда записывай… Ну или две, как у меня. (с)

Не надо. Лучше от этого не станет. Кое-кто тут к PABC имеет уже очень косвенное отношение, или никогда не имел, а тогда и этих не станет.

Преподавателей не затянешь, никто моложе не становится, а времени становится все меньше и меньше, а дел - все больше и больше. А также новые перспективы. Да и новые формы появляются.

Тут может и грустно стать от всего этого, но смысла нет - все течет и меняется.

P.S. Вот пример с польской конференцией по теории оболочек. Сначала была, проводилась себе, народ ездил. Потом организаторы поумирали или потеряли интерес. Долго ничего не было. Потом один пан “подобрал” валяющийся на дороге бренд и начал организовывать, с 90х. Кажется с 1998 началось, и проводились каждые 4 года - 2002, 2007, …, 2017. Вот @Kam участвовал постоянно. Теперь пану - 81 год, и трудно, а “новых буйных мало”. А раньше до эпохи разгула феминизма пан профессор приглашал студенток, чтобы танцы устроить с участниками. А я уже и не помню, когда тут танцы были последний раз. Будет ли следующая - вопрос, пока что перенесли с 2021 на 2022 из-за вируса. Но это - формальная причина, делать просто никому не хочется.

2 лайка

У меня все ходы записаны!

6kAAAgEk5uA-960

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

1 лайк

Стареют не только люди, стареет мир в целом.

1 лайк

Конечно первый. Даже с модифицации и var a:Array of … foreach var k in a do Writeln(a[k]);

Кто знает английский и что := - это присвоение в левую сторону , а ( - параметры функции для него программа выглядит как

Начать Объявить переменную a как массив целых. Присвоить переменной а результат функции ArrRandom со входными параметрами. Для каждого к выполнить функцию Writeln c параметром a[k] Обьявить переменную s как целую. Присвоить переменной s значение 0 Для каждого k в массиве a делать если (k > 0) или (k mod 10 = 7) то присвоить s значение s+k; Выпонить функцию Print с аргуметном s.

Даже уже первый вариант требует дополнительного обучение.

  1. Оператору +=
  2. Классам.
  3. Объявлению переменных с одновременным присвоение.

То есть вы вместо того, чтобы химику решить локальную задачу, посылаете его учить 3 вещи, причём вторая из них, классы - это весьма непростая концепция в программировании.

Во втором варианте вы вводите ещё одну концепцию что function Good(t: integer) := это значит , что результатом функции будет логический тип, причём он автоматически определиться.

В третей части нужно изучить концепцию , что фунции могут передаваться как параметры, причём без явного объявления функции как переменной. А также , что к результату фунции можно обращаться как классу.

Если я “керзон” - то у вас получается “троянский подход” в обучении, чтобы человек не решал конкретную задачу, а учил некие “соглашения”(то есть вещи , которые меняются от языка к языку). Результат троянского подхода - будет гораздо выше порог вхождения. И меньше программ.

Sun_Serega

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

Как ну значит ваши мозги слишком к нему восприимчивы. Я и за полчаса не запомню. Тем более, на том уровне , чтобы этим оперировать.

Как раз он противоположен тому , что я говорю. Т.к. коротким сиволом там закодировано относительно сложное действие. Типа -> в лямбда функциях. Наоборот, чтобы знать конструкцию типа if then в Паскале фактически не нужно проходить какого-то дополнительного обучения, особенно для англоговорящего. Также оператор + все знают.

Уважаемые коллеги, после объяснения про лямбда-выражения, я не могу не спросить: В чём принципиальная разница между процедурой и функцией?

Ни в чём . Процедура - это функция которая не возвращает значений. Разделение “процедура/функция” - это чиста паскалевская история. Я лично в своём курсе всё называю “функция”.

В противном случае так ли важен этот современный стиль написания программ? Кому нужна эта “чистота крови”, если код никому после не виден?

А как же иначе один программист будет перед другим “выщёлкиваться”? По стилю кода - один из лучших способов.

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

Я лично в своём курсе функции, не возвращающие значения. называю процедурами. Потому что разница есть. Их нельзя использовать в выражениях. А ваш подход - это C-шная история

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

Видите - у вас - агрессивная вкусовщина. Это когда вы всех пытаетесь перестроить под себя и не принимаете альтернативных точек зрения.

Есть много разных подходов - в образовании и в обучении в том числе.

Кстати, ваш большой пост я совсем не понял. Прежде всего, я не понял, к какому посту он относится - вы его не цитируете. Я просмотрел несколько постов выше и убедился, что явно не к ним.

По тому что написано:

школьники воспринимают сразу оператор += (увеличить НА). Тут никакого дополнительного обучения не надо - лишь здравый смысл.

Объявление переменной с присваиванием - это базовый примитив:

var a := 0;

Он не требует дополнительного обучения - только здравый смысл.

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

Конечно, можно учить по-всякому.

2 лайка

И где агрессивная? Это из вашенской микросекты постоянно говорят , что “вам с здесь на рады " и " ваш ответ керзнону” . С таким подходом любой будет отвечать , а большинство просто свалит с форума и микросекта останется микросектой.

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

  • Ненадо своих тараканов на меня валить . Я говорил о преимуществах своего подхода но не говорил, что нужно всем забывать про лямбда -фунции. Вы придумываете как обычно. Это меня тут сразу во враги-керзоны записали за инакомыслие. И так в каждом сообщении ваши микросектанты занимаются разнузданной травлей.

школьники воспринимают сразу оператор += Он не требует дополнительного обучения - только здравый смысл. Ага-ага, так и воспринимают без обучения. Что-то не видел.

Я вот впервые это читаю. И я здесь ни с кем не в объединении. У разработчиков языка есть свой взгляд на проблемы, пользователи форума же могут предлагать какие-то свои вещи.

Ещё раз - в этом топике специалист по химии обсуждает, как ему лучше применить PascalABC.NET для решения своей задачи. Обсуждение стало немного шире - как использовать PascalABC.NET взрослому специалисту в какой-то области, как обеспечить ему порог быстрого вхождения, какие темы надо рассматривать.

Так что давайте не отвлекаться от темы топика.

1 лайк

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

Пришлось мне как-то на днях вспоминать этот ваш “новый” условный оператор и, знаете, я его не вспомнил. Написал

var min := x if x<y else y;

Да, это вариант, как в Питоне. Зато люди привыкнут, будут изучать Питон встретят такое и скажут: “о, я это уже знаю”. Разве это плохо? И пусть это мое оценочное мнение, но я считаю, что этот вариант читается лучше, потому что сразу видно, что min присваивается x, а не if. Ну или можно взять какой-нибудь другой вариант написания, из любого другого современного и популярного языка, если у вас, вдруг, неприязнь к Питону. Никакого хейтерства, ваш паскаль весьма интересен в плане новшеств. Но я считаю вы его сами же тут же и портите, в том числе и синтаксическим сахаром, который вы почему-то хотите привязать к синтаксису старого паскаля и/или дельфи.

Пожалуйста, вот современный язык Котлин, пробуйте:

fun main(args: Array<String>) {
    val x = 5
    val y = 7
    var min = if (x < y) x else y
    println(min)
}

Или это тоже “дурацкий” язык - причуда авторов? Запомните, пожалуйста, что кроме Питона ни в одном языке нет идиотической для понимания людьми, привыкшими к логике русского языка, конструкции вида "х если x < y иначе y". Так зачем Вы нам рассказываете, как она “хороша и удобна”?

Я полагаю, что Котлин — это не совсем популярный язык. Во-вторых: он не совсем для начинающих, даже если у этих начинающих первым языком был паскаль абц точка нет. В третьих: такую конструкцию там можно расширить блоками, чего нельзя сделать в здешней

val a = 10
val b = 20
val c = if (a > b){
    println("a = $a")
    a
} else {
    println("b = $b")
    b
}

В четвертых: Питон можно легко преподавать даже в средних школах, что и практикуется, а Котлин вы видели, чтоб где-нибудь в школах преподавали? В пятых: слово “дурацкий” это вы так говорите, я нигде такого не писал. И, наконец, лично мне, конечно, больше импонирует вариант Руби с короткой веткой:

a = 0
a += 1 if a.zero?
p a

вот еще пример с выходом по условию:

a = 0
while true do
  p a
  a += 1
  break if a < 10
end
p a

А вашу условную операцию в каких других случаях можно использовать, кроме как присвоить по условию?

Наверное поэтому ваш язык в школах и не изучают. А если и изучают, то в стиле старого паскаля - три операции и два оператора.

Ну, школы - не единственная цель и не самоцель.

Бронислав, а с какой целью вы пришли на форум PascalABC.NET? Вот сейчас я имею в виду - после долгого перерыва?

Руби - замечательный язык кстати.

Котлин - язык, из которого мы берем многие идеи. Он сейчас очень активно развивается и является одним из основных языков разработки под Андроид.

Я считаю, что знаю с какой. Да и Вы тоже знаете. Практически - риторический вопрос.

Я вас понял. Желаю вам всего самого наилучшего и успехов вам с вашим паскалем.

1 лайк

Компилятор всего 1, поэтому пока нет смысла его проверять.

И платформа - тоже всего 1, это .Net . Одна из основных идей .Net - генерировать одинаковые бинарники под все ОС и битности процессора. А уже JIT компилятор, запускаемый прямо перед запуском самого кода - решит как оптимизировать код под конкретную платформу.

Ну, хоть это и не работает с $ifdef, потому что он выполняется до создания бинарников - JIT проводит не только самые поверхностные оптимизации. Он так же хорош, к примеру, в обрубании не нужных веток if. То есть в таком коде:

begin
  if System.Environment.OSVersion.Platform = System.PlatformID.MacOSX then
  begin
    //ToDo код для MacOSX
  end else
  begin
    //ToDo код для других ОС
  end;
end.

System.Environment.OSVersion.Platform вряд ли изменит своё значение после запуска .exe, а значит JIT может считать его константой. Хотя вообще я не проверял.

Выделяйте код так:

```
код
```

А то не читабельно.

По коду - вырежте cdecl и всё будет работать.

Вы не правы. Без указателей невозможно работать с external подпрограммами. Особенно если подпрограмма возвращает адрес.

Хотя оставлять такие подпрограммы “голыми” - тоже не правильно. У них всегда должна быть подпрограмма - оболочка, вызывающая external подпрограмму и затем преобразующая тип во что то человеческое.

И, если принимается/возвращается не адрес, а дескриптор объекта - правильнее использовать или IntPtr, или вообще свой тип записи-дескриптора, как то так:

  cl_mem = record
    public val: IntPtr;
    public constructor(val: IntPtr) := self.val := val;
    public static property Zero: cl_mem read default(cl_mem);
    public static property Size: integer read Marshal.SizeOf&<IntPtr>;
  end;
1 лайк