Шутите что ли? Идентификатор не может начинаться с цифры, и так в любом ЯП.
Числа можно описывать несколькими способами, в том числе и теми, что включают в себя буквы:
begin
var r := 123e4;
writeln(r);
end.
Но ни 1 из способов описания чисел не начинается с буквы, и этим свойством компилятор отличает числа от названий переменных.
Вы про самораскрытие когда вставляешь/удаляешь строчки? Известная проблема, но разработчики отказались исправлять потому что слишком сложно, надо всё переделывать. Могу только порекомендовать разбивать файл на много модулей, потому что эти глюки начинаются только в больших файлах.
Ну теперь то знаю, но хорошо бы сделать такую возможность, не вижу ничего страшного
жааааль
Еще бы добавить чтоб разные блоки бегин энд - выделялись цветами или как-то иным способом, особенно вложенные елки палки 2 дня пытался найти баг, 1000 раз пересмотрел , в упор не видел, что случайно вложил строку в другой цикл :(.
Я же вам в предыдущем сообщении объяснил что в этом плохого.
Поэтому надо разделять код на подпрограммы. Если у вас получается слишком много вложенных begin end
-ов - вы будете часто так запутываться и по несколько дней искать ошибку.
Язык ObjectPascal устарел. Как, собственно, и его стиль. Не могу сказать, что код на TP читабельнее, чем на PascalABC.NET или C#. Пример - объявление переменных: ObjectPascal
Var a, b, c: integer;
d, e: real;
f, g: single;
Begin
End.
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% а когда зависание уходит проц опять загружается.
а так инструмент просто великолепный! !!!
Что именно не компилировалось? Покажите описание функции которая не компилировалась.
- Сколько ядер у вашего процессора.
- Скиньте простейшую программу вызывающую такое поведение.
сам не пойму, банально цикл
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 может нарисовать десятки тысяч полигонов ко вашем компе - на супер компьютере он тоже даст больше нарисовать)) Конечно, на нём всё не так удобно, но по моему оно того стоит.