Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
3-3278
kinder
2002-08-12 16:53
2002.09.02
Выпадающий список в DBGrid


3-3301
BigVova
2002-08-09 18:15
2002.09.02
Проблема с IB 6.0


3-3296
Leran2002
2002-08-13 07:46
2002.09.02
Физическое сохранение данных


1-3368
SB
2002-08-22 09:38
2002.09.02
Отлов изменений в Clipboard


1-3396
Игорь С.
2002-08-21 14:41
2002.09.02
чтение файла в буфер.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский