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

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

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

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

И после этого Вы доказываете, что не хамите никому? Я уже сто раз мог бы ответить Вам на призывы писать на Фортране тем же, чем и Вы сейчас ответили мне. Такое чувство, что Вы не переносите даже названия языков, отличных от 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 лайка

У меня во всех компьютерах комментарии свойства в инспектор объектов отражаются на русском языке, но в одном на английском. Как сделать, чтобы был на русском? Переустановил, все равно на английский.

Попробуйте поменять язык системы.

Почему так? То есть если строки это ссылочный тип то понятен первый обмен, но тогда не понятен второй. А если размерный, то наоборот не понятен первый.

begin
  var s1 := 'Hello';
  var s2 := s1;
  Println('s1 =', s1, 's2 =', s2);//s1 = Hello s2 = Hello
  
  Swap(s2[1], s2[2]);
  Println('s1 =', s1, 's2 =', s2);//s1 = eHllo s2 = eHllo
  
  var tmp := s2[1];
  s2[1] := s2[2];
  s2[2] := tmp;
  Println('s1 =', s1, 's2 =', s2);//s1 = eHllo s2 = Hello
end.

Поздравляю, вы сломали .Net :rofl: Даже у меня так ещё не удавалось, со всем моим опытом баготестов паскаля.

Строки - ссылочный тип. Но при попытке изменить строку - всегда должна создаваться новая, чтоб всё работало как будто строки это размерный тип. Это так заморочились для оптимизации.

А вот подтверждение что это таки сломано:

begin
  var s1 := 'Hello';
  
  //тут .Net видит что такая строка объявлена в другом месте
  //и ради оптимизации - не создаёт новую, а присваивает ссылку на старую
  var s2 := 'Hello';
  
  Println('s1 =', s1, 's2 =', s2);//s1 = Hello s2 = Hello
  
  Swap(s2[1], s2[2]);
  Println('s1 =', s1, 's2 =', s2);//s1 = eHllo s2 = eHllo
  
end.