Помощь новичкам

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

Вы правы. Нет, не буду. Иначе бы их не было.

PascalABC.Net - смесь нескольких языков, на мой взгляд, которая весьма неплохо получилась. :slight_smile: Хотя, опять же, если смешивать языки бездумно, то да, ничего хорошего не выйдет.

Да, именно так. У Фортрана корявый синтаксис и убогая реализация ООП, но зато он умеет работать даже с n-мерными непрямоугольными массивами, как с простыми переменными, делая их объектами первого класса. У языка PL/1 были исключительно удобные средства для описания сложной иерархии данных, которые в Паскале и С# описываются с большой натугой а уж чтобы с ними было работать удобно - это вообще мечты. A PL/1 с такими структурами работал “на раз-два”, тоже зачастую, как с простыми переменными. А как PL/1 работал с файлами! Но PL/1 умер из-за других недостатков. В Алгол-60 был экзотический, но временами позволяющий красиво и наглядно записывать формулы - и это без каких-либо ухищрений - способ передачи параметров по наименованию, больше напоминающий макроподстановку. Но Алгол-60 тоже умер, оказавшись несовременным спустя какой-то период времени. И так далее. Но я же не прошу вставлять в Паскаль все эти вкусности лишь потому, что они есть (или были) в других языках и их использование позволило бы писать программы красивее, удобнее и быстрее.

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

2 лайка

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

“Дух языка” не может быть объективным понятием. Оно у каждого своё, субьективное.
Это, конечно, поможет отбросить какие то предложения, но на него одного нельзя полагаться.

Не пользуйтесь. Используйте остальные два понятия.

И после этого Вы доказываете, что не хамите никому? Я уже сто раз мог бы ответить Вам на призывы писать на Фортране тем же, чем и Вы сейчас ответили мне. Такое чувство, что Вы не переносите даже названия языков, отличных от PascalABC.NET и Фортран. Но сами при этом не раз говорили, что “хороший программист должен знать несколько языков”.

В самих дискуссиях нет ничего плохого. Но, только с учётом того, что это конструктивные дискуссии и ведутся с применением аргументации.

Дух языка - это менее весомый аргумент в дискуссии, чем, например, пример кода или ссылка на авторитетный источник. Хотел бы услышать что конкретно Вы подразумевайте под этим понятием.

Когда я попросил жить дружно и в согласии, я вовсе не шутил. Не очень хорошо это у нас получается.

1 лайк

Попадался рабочий пример нечёткой логики (fuzzy logic), а может есть на PABC?

Да, было бы занятно взглянуть. Пока из четко работающего я встречал только интервальную арифметику, да и то не паскалевские процедуры. а на Algol-60. Конечно, они в Паскаль переводятся очень легко, но все же не хочется время тратить, чтобы просто полюбопытствовать. И потом, это все же не fuzzy logic, так, кусок для ее основ.

Алекс, как считаете, это вызвано скорее незнанием, непопулярностью или просто не имением особо средств/преимуществ в .NET?

И к чему примечание об Algol-60, чище код алгоритма Мамдани по сравнению с тем же си?

Есть модуль для MatLab и других расчётных систем, насколько реально подключить?

Согласен, нельзя всё охватить, да и не нужно: хотя НЛ = логика Лукасевича + Гёделя + вероятностная логика, достаточно самого каркаса – сути решения задачи, а примеров именно на Pascal.почему-то не особо…

Немного порывшись нашёл немецкий пример от 91 года -FUZZY.PAS (14,3 КБ) fuzzy_demo.pas (8,8 КБ)

Я не занимаюсь работами в области fuzzi logic, мне просто любопытно. Интервальную арифметику применял давно, рассчитывали размерные цепи и допуски-посадки. Тогда иного источника, кроме публикации на Алгол не было, вот и вспомнил этот агеевский сборник. Как подключать Матлаб - понятия не имею, не доводилось озабочиваться.

В AForge.NET вроде было

1 лайк

заменил на

Graph3D.OnMouseUP += procedure (x, y, mb) -> begin
        объект3Д := FindNearestObject(x, y);                
        if объект3Д = шарик then ....

и значительно уменьшил заходы в этот опрос , 4 раза в сек, стало сносно. по-видимому если сделать сработку не по отжатию, а по нажатию кнопки, то оно очень часто запускает опрос местоположения объектов, это очень томозит программу.

Подскажите пожалуйста, как в 3д сделать такое: есть массив например а[1…до_много] как отрисовать вариабельное количество шариков, но дать им свое имя? чтоб срабатывал опрос по нажатию?

Т.е. например у меня в массиве 3 входа, в 3д я их должен изобразить шариками и при клике на эти шарики должно появиться на экране значение в массиве а[куда_кликнули]

Хотя описание мутноватое, используя хэши можно задать уникальное значение (название) хоть по (x+y+z), а количество – через стек или список. Или вы про “глубину”, как кликать в 3D?

А я пока снова задумался насчёт защиты от ArtMoney и CheatEngine: обычно просто множат на выбранную дробную константу, ксорят значения [вроде Z:=x xor (key1 xor key2)] или гоняют по адресам через указатели, а есть ли более универсальное решение, чтобы все важные значения криптовались с переменным/плавающим ключом?

Также хотел загнать популярные API в удобную псевдо-библиотечку, насколько полезно хотя бы для начинающих? Win32API.txt (686,8 КБ)

А она правда удобная? Я этого что-то не заметил. И потом? VB не все знают, наверно? А кто вообще что-то пишет в Паскале с упором налегая на API ?

Если коротко - я вполне могу сойти в 3D за начинающего. Не понял в этом огромном файле нечегошеньки)))

Вот псевдокод:

type
  ШарикСИменемИЗначением = class
    
    СамШарик: ТипШарика;
    Имя, значение: string;
    
    constructor;
    begin
      //ToDo инициализировать СамШарик
      Сцена.КогдаКликнули += (x, y, mb)->
      if Кликнули_на_этот_шарик then
      begin
        writeln(self.Имя, ' : ', self.значение);
      end;
    end;
    
  end;

Можете от него отталкиваться. Основной смысл в том - что каждый объект шарика должен сам следить когда на него кликнули. Чтоб не вызывать FindNearestObject для каждого шарика - можно вызывать его перед всеми остальными обработками клика и присваивать глобальной переменной. А в if Кликнули_на_этот_шарик then проверять на равенство ту глобальную переменную и себя.

2 лайка