Форум: "Основная";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];
ВнизКак работать с кардиналами ? Найти похожие ветки
← →
Алекс А (2004-05-10 04:56) [0]Почему не работает цикл :
var
i : Cardinal;
begin
for i := 0 to 3600000000 -1 do begin
...
end;
end;
В чём ошибка ? Число больше чем Integer, но меньше чем Cardinal. Значит должно работать, но не работает. Тоже самое происходит при попытке использовать циклы repeat и while, а также при сравнениях. Как быть ?
← →
_Alanjuk (2004-05-10 07:26) [1]И что конкретно пишет?
← →
Beglec (2004-05-10 07:35) [2]покажи внутренность цикла
← →
Alex Konshin © (2004-05-10 07:35) [3]Замени на LongWord
← →
Beglec (2004-05-10 07:36) [4]у меня все оки работает данный цикл - смотри внутренности
← →
Anatoly Podgoretsky © (2004-05-10 07:40) [5]Видимо старая ошибка - литералы не более MaxInt
← →
MBo © (2004-05-10 07:47) [6]procedure TForm1.Button1Click(Sender: TObject);
var
ic,card,j:Cardinal;
begin
card:=3600000000 -1;
for ic:=0 to Card do
j:=ic;
Caption:=inttostr(j);
end;
← →
Alex Konshin © (2004-05-10 07:55) [7]Ты уверен, что проблема возникает на D7?
← →
default © (2004-05-10 09:20) [8]давно я этот баг видел...ещё по-моему на Delphi 5(щас на 6-ой смотрел)
вместо for можешь что-то навроде этого использовать
var
i: Cardinal;
while i < 3600000000 do begin
<your code>
Inc(i);
end;
← →
_Alanjuk © (2004-05-10 09:45) [9]>Алекс А
Молчит партизан :)
← →
default © (2004-05-10 09:56) [10]да ничего не пишет - этот код просто не включается в конечный файл
← →
Алекс А (2004-05-11 01:36) [11]Например :
procedure TForm1.Button1Click(Sender: TObject);
var
i, j : Cardinal;
begin
j := 0;
for i := 0 to 3600000000 -1 do begin
Inc(j);
end;
Caption := IntToStr(j);
end;
Результат выдаёт нулевой. Но если число уменьшить до диапазона Integer, то всё работает.
← →
Alex Konshin © (2004-05-11 01:46) [12]Ну так ты попробовал LongWord?
И действительно ли дело происходит на Delphi7?
← →
Алекс А (2004-05-11 01:47) [13]
> Alex Konshin © (10.05.04 07:55) [7]
Уверен. У меня Дельфи 7. А как вообще в этом вопросе можно ошибиться ?
> MBo © (10.05.04 07:47) [6]
Так работает. Только хотелось бы обходиться без трюков. Либо чтобы Дельфи ошибку выдавала, когда неможет правильно выполнить цикл.
← →
Alex Konshin © (2004-05-11 01:57) [14]Алекс А (11.05.04 01:47) [13]
> Alex Konshin © (10.05.04 07:55) [7]
Уверен. У меня Дельфи 7. А как вообще в этом вопросе можно ошибиться ?
Тут народ разный бывает. Напишут одно, потом выясняется другое. Просто для данного вопроса это принципиально. Cardinal раньше был 31-битный, хотя и беззнаковый.
> MBo © (10.05.04 07:47) [6]
Так работает. Только хотелось бы обходиться без трюков. Либо чтобы Дельфи ошибку выдавала, когда неможет правильно выполнить цикл.
А warningов про расширение не дает?
Тогда очевидно, что так тоже будет работать:
i : LongWord
for i := 0 to LongWord(3600000000-1) do begin
Я все-таки порекомендовал бы не использовать Cardinal, т.к. этот тип менялся, и в других версиях Delphi это работать не будет, а так хоть сразу получите сообщение, что нет типа LongWord.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.037 c