Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.09.02;
Скачать: CL | DM;

Вниз

Глюк компилятора?   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.022 c
3-3262
Mike N. Radoman
2002-08-08 18:30
2002.09.02
Как программно добавить вторичный индекс?


1-3393
JC
2002-08-19 00:15
2002.09.02
Как отсортировать эл-ты в TStringGrid ???


6-3551
Aleksandr
2002-06-25 12:01
2002.09.02
Какой компонентой можно забрать с почтового сервера почту?


3-3316
Nameless
2002-08-13 11:08
2002.09.02
Можете поделиться опытом написания 3-х уровневых приложений?


1-3491
BOBAH
2002-08-20 12:26
2002.09.02
Вопрос по испоьзованию TThread