Форум: "Основная";
Текущий архив: 2002.09.02;
Скачать: [xml.tar.bz2];
ВнизГлюк компилятора? Найти похожие ветки
← →
Yuri Btr (2002-08-20 17:53) [0]Что то в конце дня случилось то ли со мной, то ли с Delphi - пишу:
procedure TForm1.Button1Click(Sender: TObject);
var
k:integer;
begin
for k:=1 to 16
do ;
end;
ставлю breakpoint на for k:=1 to 16 и пари первом вхождении получаю k=16 - что за глюк????
У меня из за этого процедура не работает! Помогите!!!
← →
Digitman (2002-08-20 17:58) [1]Никакого "глюка".
Результат работы оптимизатора для "бестолковых" for-циклов, ничего полезного не делающих
← →
Yuri Btr (2002-08-20 18:03) [2]Ничего себе оптимизатор - а вот и кусок моего кода
for k:=1 to 16
do
if captions[i]=captions[k]
then
break
else
is_there:=false;
← →
Ученик (2002-08-20 18:09) [3]>Yuri Btr © (20.08.02 18:03)
В первом варианте k не используется, во втором должно быть с 1
← →
Anatoly Podgoretsky (2002-08-20 18:16) [4]Какая разница в каком порядке искать и даже во втором варианте
← →
Yuri Btr (2002-08-21 09:41) [5]Хорошо, приведу код процедуры полностью. Задача - заполнить массив из 16 Integer случайными неповторяющимися значениями от 1 до 15 (одна ячейка равна 0). При первом вхождении в цикл for k:=1 to 16 - k - становится равной 16 и не уменьшается. Процедура зацикливается...
procedure Initilize;
var
i, k, blank:integer;
is_there:boolean;
captions: Array [1..16] of Integer;
begin
FillChar(captions,SizeOf(captions),0);
blank:=RandomRange(1,16);
for i:=1 to 16
do
if not (blank=i)
then
begin
is_there:=true;
repeat
captions[i]:=RandomRange(1,15);
for k:=1 to 16
do
if captions[i]=captions[k]
then
break
else
is_there:=false;
until is_there=false;
end;
end;
← →
MBo (2002-08-21 09:50) [6]procedure TForm1.Button1Click(Sender: TObject);
var i,k:integer;
l:tlist;
a:array[1..16] of integer;
begin
l:=tlist.create;
for i:=0 to 15 do
l.add(pointer(i));
randomize;
for i:=1 to 16 do begin
k:=random(l.count);
a[i]:=integer(l[k]);
l.delete(k);
end;
for i:=1 to 16 do
memo1.lines.add(inttostr(a[i]));
end;
← →
Wild Wizard (2002-08-21 10:00) [7]а нельзя сначала вставить в массив числа по порядку, а потому случайные ячейки менять местами Н раз? :))
*это к слову о извращениях*
← →
Yuri Btr (2002-08-21 10:08) [8]Всем большое спасибо...
Теперь я понял корявость своего кода.
Дело в том, что когда я свои алгоритмы пишу, у меня получается уж очень нестандартный код, т.к. я к сожалению нигде не читал и не видел примеры похожих алгоритмов, вот и приходится изобретать велосипед.. Извините.
← →
Digitman (2002-08-21 10:17) [9]Зацикливается она у тебя по иной причине - ошибке в алгоритме.
А почему не поступить проще ?
var SrcList,
DstList: TList; // результирующий список
...
SrcList.Clear;
DstList.Clear;
for i:= 0 to 15 do
SrcList.Add(Pointer(i));
while DstList.Count > 0 do
begin
i:= Random(DstList.Count);
DstList.Add(SrcList[i]);
SrcList.Delete(i);
end;
← →
Digitman (2002-08-21 10:28) [10]>MBo
))) ...Как будто с одного букваря "сдули" мы с тобой код)
← →
Yuri Btr (2002-08-21 10:57) [11]to Digitman, MBo
я тут подумал.... Так помоему изящнее.
procedure Initilize;
var
i, k, t:integer;
captions: Array [1..16] of Integer;
begin
for i:=0 to 15
do
captions[i+1]:=i;
for i:=1 to 16
do
begin
k:=captions[i];
t:=RandomRange(1,16);
captions[i]:=captions[t];
captions[t]:=k;
end;
end;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.09.02;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.006 c