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

Шутите что ли? Идентификатор не может начинаться с цифры, и так в любом ЯП.

Числа можно описывать несколькими способами, в том числе и теми, что включают в себя буквы:

begin
  var r := 123e4;
  writeln(r);
end.

Но ни 1 из способов описания чисел не начинается с буквы, и этим свойством компилятор отличает числа от названий переменных.

Вы про самораскрытие когда вставляешь/удаляешь строчки? Известная проблема, но разработчики отказались исправлять потому что слишком сложно, надо всё переделывать. Могу только порекомендовать разбивать файл на много модулей, потому что эти глюки начинаются только в больших файлах.

Ну теперь то знаю, но хорошо бы сделать такую возможность, не вижу ничего страшного :slight_smile:

жааааль :frowning:

Еще бы добавить чтоб разные блоки бегин энд - выделялись цветами или как-то иным способом, особенно вложенные елки палки 2 дня пытался найти баг, 1000 раз пересмотрел , в упор не видел, что случайно вложил строку в другой цикл :(.

Я же вам в предыдущем сообщении объяснил что в этом плохого.

Поэтому надо разделять код на подпрограммы. Если у вас получается слишком много вложенных begin end-ов - вы будете часто так запутываться и по несколько дней искать ошибку.

1 лайк

Язык ObjectPascal устарел. Как, собственно, и его стиль. Не могу сказать, что код на TP читабельнее, чем на PascalABC.NET или C#. Пример - объявление переменных: ObjectPascal

Var a, b, c: integer;
d, e: real;
f, g: single;
Begin
End.

PascalABC.NET

Begin
Var a: Int32;
Var b: Int32;
Var c: Int32;
...
Var d: Double;
...

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

neyron_prog := new Smallint[максимальное_количество_нейронов, макс_уровень_программы, макс_количество_программ, макс_размер_программы];
//не работает

  neyron_prog: array [1..максимальное_количество_нейронов, 0..макс_уровень_программы, 0..макс_количество_программ, 0..макс_размер_программы] of Smallint; 
//работает

еще. с Graph3D какие-то непонятки, при выводе текста бывает просто подвисает на 5…10 сек, подробно смотрел динамику ресурсов компа , ОЗУ и проц - таки нагружены только на 50% а когда зависание уходит проц опять загружается.

а так инструмент просто великолепный! !!!

Что именно не компилировалось? Покажите описание функции которая не компилировалась.

  1. Сколько ядер у вашего процессора.
  2. Скиньте простейшую программу вызывающую такое поведение.

сам не пойму, банально цикл

procedure Синтез_ген(с_номер_нейрона, с_уровень_гена: Smallint );
begin
  var сг_номер_гена: Smallint;
  сг_номер_гена := 1;
  с_уровень_гена:=1;
  while neyron_prog[с_номер_нейрона, с_уровень_гена, сг_номер_гена, 1] <> 0 do //ищем свободное место под размещение гена
  begin
    if(сг_номер_гена < макс_количество_программ) then сг_номер_гена += 1
    else begin нехватка_места_на_уровне:=true; break;end;
  end;
 for var сг_счетчик := 1 to макс_размер_программы do //!!!!!!!!!!!! вот тут выдавало ошибку
  begin
    neyron_prog[с_номер_нейрона, с_уровень_гена, сг_номер_гена, сг_счетчик] := обучение_ген[сг_счетчик];
  end;
end;

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

комп конечно уже устаревший ему лет 10 наверно, 2 ядра атлон 2.7, 6Гиг ОЗУ, видяха Радеон какой-то по тем временам довольно шустрая была.

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

Значит, скорее всего, 50% (1 ядро) тратилось на перерисовку, а на эвент клика вы поставили процедуру которая подвисает (значит тратит второе ядро, всего 100%) и списали это на вывод текста. Или вывели текст как то по особому, не так как вы попытались когда делали простейшую программу.
Если не получается сходу сделать простейшую программу - сделайте копию основной и по 1 убирайте элементы из копии, пока не останется только то - что вызывает неправильное поведение.

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

вот как вывожу: (заходит в это место с интервалом в 50милисек, из-за этого стало шустрее, но все равно).

    begin
    var _3д_показать_нейрон,_3д_показать_программу,_3д_номер_строки_программы,_3д_код_строки_программы:Smallint;
    _3д_показать_нейрон:=3;
    _3д_показать_программу:=1;

      View3D.Title := 'фибрилярный потоковый процессор';
      var шарик := Sphere((_3д_показать_программу * 2), 0, 0, 1);                
      Graph3D.OnMouseDown += procedure (x, y, mb) -> begin
        объект3Д := FindNearestObject(x, y);                
          if объект3Д = шарик then
          begin
            _3д_номер_строки_программы := 1;
            _3д_код_строки_программы := neyron_prog[_3д_показать_нейрон, 1, _3д_показать_программу, 1]; 
            while _3д_код_строки_программы <> 32600 do//пробежка по программе  
            begin
              _3д_код_строки_программы := neyron_prog[_3д_показать_нейрон, 1, _3д_показать_программу, _3д_номер_строки_программы];
              Text3D(7, 7, -(1 * _3д_номер_строки_программы), (_3д_код_строки_программы.ToString), 1);
              _3д_номер_строки_программы += 1; if _3д_номер_строки_программы > 5 then _3д_код_строки_программы := 32600;
            end;
          end;
        объект3Д := nil; 
      end;
      
    end;

Переустановите паскаль. Так не должно быть. И - без нормальных ошибок невозможно понять что не так.

Не, я пытался - но всё же не могу понять ваш код до конца. Да и с чего я должен за вас всё делать - искать что в коде вызывает неправильное поведение это дело того, кто написал код. Как искать - я написал:

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

Так что не лагало 3D - можно конечно попробовать сделать чтоб пока окно перерисовывается, чтоб основной поток приостанавливался. Что такое:

uses GraphWPF;

var
  main_thread: System.Threading.Thread;

procedure Redrawing;
begin
  main_thread.Suspend;//останавливаем всё остальное пока что
  
  //ToDo рисуем
  
  main_thread.Resume;//возобновляем, пока ожидаем время на перерисовку
end;

begin
  main_thread := System.Threading.Thread.CurrentThread;
  BeginFrameBasedAnimation(Redrawing);
end.

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

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

а какая машина нужна, чтоб без проблем тащила? Может проц на 4 ядра купить? Или там все в куче нужно материнку… память… ? (сейчас у меня 2 ядра на 2.7 Гц атлон)

Всё ясно…

да понятно же, что опечатка ГГц, что вы цепляетесь к каждой букве не пойму??

Просто хочу понять, можно ли обойтись новым процом, т.к. программе тоже нужны будут ресурсы. 3д графика паскаля, на основном проце работает? не использует процы видеокарты (имею в виду на полную)?

Ну, может, если вы купите супер компьютер - 200 полигонов и потянет. Но если OpenGL может нарисовать десятки тысяч полигонов ко вашем компе - на супер компьютере он тоже даст больше нарисовать)) Конечно, на нём всё не так удобно, но по моему оно того стоит.

1 лайк