Форум: "Основная";
Текущий архив: 2005.03.27;
Скачать: [xml.tar.bz2];
ВнизСамооптимизация Найти похожие ветки
← →
Green_Templar © (2005-03-09 15:55) [0]Намучался я с этой проблемой 3 часа :)
Смысл был перегнать значения из unit2.stringgrid1 в массив unit1.bara специальным алгоритмом. Алгоритм был абсолютно правильный, но часть массива оно заполняло, а часть нет. Решилась проблема удивительно глупо - я перенёс алгоритм чуть дальше, и весь массив стал заполняться. Это при том, что unit2 и bara упоминаются только в этом алгоритме переноса! %| Что вообще с такими "глюками" делать?
В ходе моих поисков меня также удивила строка примерно такого содержания: отказано в доступе к unit2.stringgrid1.cells[a,b] due to optimization. Это что же, Дэлфи само решает к каким переменным мне иметь доступ, а к каким нет? >:( Как это отключить?
А вчера тоже абсолютно правильным алгоритмом у меня загружался спрайт с мусором. Долго ломал голову, в итоге оказывается нужно было просто перезагрузить.
Ну нужно ж с кем-то горем поделиться :)
← →
Antonn © (2005-03-09 15:57) [1]ни че не понял...
← →
Green_Templar © (2005-03-09 16:02) [2]Вот и я ничего не понял!!!
← →
Ольга (2005-03-09 16:10) [3]
> Как это отключить?
Если речь об оптимизации, то
Project Options ->Compiler ->Code Generation ->Optimization
← →
Erik1 © (2005-03-09 17:17) [4]А я понял, глюки при отладке наложились на глюки в "абсолютно правильном алгоритме", а незнание опртимизации переменых компилятором, породило увереность в мистических явлениях. А офицально заявляю, что это слухи и суевения!
Наверника неинацианализируеш все переменые, напрасно надесь на копилятор.
← →
Плохиш © (2005-03-09 17:33) [5]Почему описание этого горя сделано не в "Потрепаться"?
← →
MU © (2005-03-09 18:02) [6]
> Плохиш © (09.03.05 17:33) [5]
> Почему описание этого горя сделано не в "Потрепаться"?
Надо завести "Поплакаться"
← →
Virgo_Style © (2005-03-09 20:08) [7]Просто кое-кому надо все же заняться сабжем (самооптимизацией), я полагаю...
← →
Green_Templar © (2005-03-09 23:56) [8]Ольга, сэнкс.
Эрик1, что можно неинициализировать в алгоритме
var bara:array[0..1,1..3] of trect;
for a:=1 to form2.StringGrid1.RowCount-1 do for b:=1 to 8 do
case b mod 4 of
1:val(form2.StringGrid1.Cells[b,a],unit1.bara[b div 4,a].Left,i);
2:val(form2.StringGrid1.Cells[b,a],unit1.bara[b div 4,a].Top,i);
3:val(form2.StringGrid1.Cells[b,a],unit1.bara[b div 4,a].Right,i);
0:val(form2.StringGrid1.Cells[b,a],unit1.bara[b div 4-1,a].Bottom,i);
end;
???
Вроде только stringgrid. Все значения стринггрида-числа, заносились как раз перед этим алгоритмом. Я отодвинул алгоритм дальше - всё стало работать, до этого все поля bara[0,1] и bara[0,2] имели нулевые значения! Может ли такое быть, что программа просто не успевает инициализировать стринггрид полностью?
Плохишь, ваше заявление уже само по себе трёп.
Му, спасибо за сострадание ;)
Virgo_Style, "мы все знаем кто это и не будем тыкать пальцем (чтобы не замацать монитор)"?
← →
Shaman_Naydak (2005-03-10 01:18) [9]1. А если RowCount будет больше 4... что тогда?
2. нулевой столбец - фиксированный чтоль?
3. стринггрид работает синхронно, а вот успели или нет - это тебе виднее исходя из алгоритма
4. поставил бы ты нулевой case 1м в список, либо заменил на else
а лучше бы переписал бы код... уж больно некрасивый
← →
Erik1 © (2005-03-10 12:01) [10]А что в bara записано, как заполняется? И обращайся нармально к переменым. unit1 точно ненужен, а где у тебя form2 определен я незнаю, но думаю, что тоже в unit1. Тогда можно form2 опустить, StringGrid1.Cells[b,a] вынести из case. Что за переменая i вобще непонятно. Вобщем, рядом с этем алгоритмом нельзя ставить слово "абсолютно".
← →
Green_Templar © (2005-03-11 00:24) [11]Хорошо, алгоритм изменил до
for a:=1 to form2.StringGrid1.RowCount-1 do for b:=1 to 8 do begin
case b mod 4 of
0:val(form2.StringGrid1.Cells[b,a],unit1.bara[b div 4-1,a].Bottom,i);
1:val(form2.StringGrid1.Cells[b,a],unit1.bara[b div 4,a].Left,i);
2:val(form2.StringGrid1.Cells[b,a],unit1.bara[b div 4,a].Top,i);
3:val(form2.StringGrid1.Cells[b,a],unit1.bara[b div 4,a].Right,i);
end;
if i<>0 then showmessage("form2.Stringgrid1.cells["+inttostr(b)+","+inttostr(a)+"] invalid value. ("+form2.StringGrid1.Cells[b,a]+")");
end;
Заносятся данные в стринггрид for b:=1 to form2.StringGrid1.RowCount-1 do for a:=1 to 8 do begin read(playerfile,c);form2.stringgrid1.cells[a,b]:=inttostr(c);end;
Если алгоритм писать сразу после этой строчки, будет то, что я говорил. С - интегер.
Юнит2 юзэс юнит1. Юнит1 и форм2 из разных юнитов :) Я не обрезал юнит1 бо точно такой же алгоритм используется в обработчике нажатий кнопки в юните2. Раз такое дело, то я наверно вообще его в отдельную библиотеку запихну :)
Моя оценка сего алгоритма есть моим субъективным мнением и не претендует на истинность, впрочем, как и ваша :)
Если роукаунт>4, то массив я увеличиваю в размерах :)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.03.27;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.043 c