Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.042 c
8-1078606910
Yuri Btr
2004-03-07 00:01
2004.05.23
Проблема с установкой ф-ии через BASS_ChannelSetSync


1-1083670938
klyonov
2004-05-04 15:42
2004.05.23
TControl.Parent


14-1083267173
wisekaa
2004-04-29 23:32
2004.05.23
Успевают ли программисты играть в компьютерные игры?


9-1074104612
Bortel
2004-01-14 21:23
2004.05.23
Помогите с первой игрой


3-1083058475
vas
2004-04-27 13:34
2004.05.23
firebird





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский