Главная страница
    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.037 c
1-1083749914
Alkmas
2004-05-05 13:38
2004.05.23
Создание TButton из DLL


1-1083865549
MAXHO-1
2004-05-06 21:45
2004.05.23
Как можно сделать следующее:


6-1081233195
KJ
2004-04-06 10:33
2004.05.23
attachment


14-1083853190
Lamer-13
2004-05-06 18:19
2004.05.23
Голупый вопрос, но все же...


14-1083237452
SPeller
2004-04-29 15:17
2004.05.23
Как заработать денег?





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