Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.134.95.222] |
|
Сообщ.
#1
,
|
|
|
Здравствуйте,
В VP, кажется, нет 32-битных целых беззнаковых (LongWord компилятор не знает, а тип Cardinal имеет диапазон 0 — $FFFFFF). Мне надо переменную для накопления натуральных значений максимально допустимого размера. Кто-нибудь может посоветовать как поступить в данной ситуаци? |
Сообщ.
#2
,
|
|
|
Используй Use32 и (по уверению хелпа) будет тебе счастье:
Цитата Use32 also redefines Word to be 32 bit. |
Сообщ.
#3
,
|
|
|
Нет в жизне щастия
Не компилируется, загаза… uses Use32; var C:cardinal; begin C:=4294967294; end. pS. Спасибо за ответ |
Сообщ.
#4
,
|
|
|
Если тебе только в качестве счетчика - то воспользуйся старым проверенным трюком:
uses Use32; var C: comp; begin C := 4294967294.0; C := C + 1; WriteLn(C:0:0); end. Цитата . Но, естественно, это не полноценный integer type, поэтому его нельзя использовать, скажем, как переменную цикла:The Comp type is a 64-bit integer capable of holdin an integer value between-2x1063 +1 and 2x1063-1. Цитата It is regarded as a floating point type since it can not be used in contexts where integer and ordinal types are accepted. |
Сообщ.
#5
,
|
|
|
AGRY-DILETANT, может стоило объявлять С как word, если после Use32 он имеет размерность 32 бита, и забыть про cardinal?
|
Сообщ.
#6
,
|
|
|
Цитата Vesper @ Не имеет. Заявлено, что имеет, но этого не происходит. С беззнаковыми типами в VP вообще что-то непонятное творится после подключения Use32:если после Use32 он имеет размерность 32 бита var C:word; begin writeln(high(C), ' ', low(C)); end. выдает: 65535 0 Все логично. Однако: uses Use32; var C:word; begin writeln(high(C), ' ', low(C)); end. , и логика уже отдыхает: 2147483647 -2147483648 P.S. Хм... В контекстной помощи написано Цитата , и согласно информации из этого файла (Ctrl+F1) в VP действительно нет возможности работать с беззнаковым целым размером 32 байта. Кстати, Cardinal изначально заявлен, как 31-битный ( ) тип с интервалом значений 0 .. 2147483647, так что в него в любом случае не запихать 4294967294.* In Use32+ state word is currently equivalent to LongInt and thus actually a signed 32 bit integer. AGRY-DILETANT, зачем тебе VP понадобился, расскажи? Проект не поддерживается уже давно, может лучше на другой компилятор пересесть, на FPC, скажем? Там таких проблем с типами я что-то не припоминаю. Хоть DWord, хоть QWord - и тот и тот беззнаковый, и размер - как и был заявлен. |
Сообщ.
#7
,
|
|
|
Цитата volvo877 @ AGRY-DILETANT, зачем тебе VP понадобился, расскажи? Проект не поддерживается уже давно, может лучше на другой компилятор пересесть, на FPC, скажем? Там таких проблем с типами я что-то не припоминаю. Хоть DWord, хоть QWord - и тот и тот беззнаковый, и размер - как и был заявлен. Большое всем спасибо, я понял что, надо использовать Word вместо Cardinal, а SmallWord вместо Word, когда Интернет был уже недоступен. Пойду попробую переделать. Цитата AGRY-DILETANT, зачем тебе VP понадобился, расскажи? Проект не поддерживается уже давно, может лучше на другой компилятор пересесть, на FPC, скажем? Там таких проблем с типами я что-то не припоминаю. Хоть DWord, хоть QWord - и тот и тот беззнаковый, и размер - как и был заявлен. У VP — меньший размер дистрибютива, пользовательский интерфейс "по-дружелюбнее": прилагаемая IDE с поддержкой буффера обмена, документация в виде двух красиво оформеленных pdf-файлов, исходники юнитов. Отсутсвие служебной информации в консоле программы при запуске из IDE. Проще синтаксис и благодаря этому большая вероятность перекомпилировать код на других 32-битных компилятрах с поддержкой синтаксиса Delphi. |
Сообщ.
#8
,
|
|
|
Цитата AGRY-DILETANT @ Проще синтаксис и благодаря этому большая вероятность перекомпилировать код на других 32-битных компилятрах с поддержкой синтаксиса Delphi. FreePascal совместим с Delphi. А в качестве IDE можешь взять Dev Pascal. |
Сообщ.
#9
,
|
|
|
Цитата AGRY-DILETANT @ У FPC - тоже, если что.прилагаемая IDE с поддержкой буффера обмена Цитата AGRY-DILETANT @ Угу, удивил. У FPC - семь файлов. Тоже PDF. И тоже оформленных красиво документация в виде двух красиво оформеленных pdf-файлов Цитата AGRY-DILETANT @ И чего? Скачал я себе исходники FPC - у меня тоже теперь исходники всех юнитов есть. Так что все вышеприведенное - не выигрывает у FPC.исходники юнитов Цитата AGRY-DILETANT @ Ага. Но сначала помучаться, пытаясь имитировать поведение, скажем, DWord, или еще какого типа. Ты ,кажется, уже имеешь такое счастье? Чего с FPC в принципе не бывает.Проще синтаксис и благодаря этому большая вероятность перекомпилировать код на других 32-битных компилятрах с поддержкой синтаксиса Delphi. Цитата AGRY-DILETANT @ Неизменяющегося дистрибутива, заметь Как "завис" проект 13 мая 2004 года, так на том же уровне и висит. "В то время, как космические корабли бороздят просторы Большого Театра" (С).У VP — меньший размер дистрибютива Хотя чего это я. Ты свой выбор сделал, пользуйся VP. Не буду тебя переубеждать. Все вышесказанное - только для тех, кто зайдет почитать тему, и действительно может подумать, что в IDE FPC нет возможности работы с буфером обмена, и хелпа нормального нет, и еще там много чего ты написал. |
Сообщ.
#10
,
|
|
|
Цитата Хотя чего это я. Ты свой выбор сделал, пользуйся VP. Не буду тебя переубеждать. Все вышесказанное - только для тех, кто зайдет почитать тему, и действительно может подумать, что в IDE FPC нет возможности работы с буфером обмена, и хелпа нормального нет, и еще там много чего ты написал. Ну знаете, на сегодняшний день, убеждать в удобстве пользования подглючиващей фрипаскалевсой средой разработки, в которую невозможно скопировать данные из буффера обмена Виндовс, и ограниченным по объему руководством, разбросанным по 6 файлам — это уже откровенное фарисейство. Как крайний вариант, после завершения прожекта может перекомпилирую и отлажу его еще и на FPC (хотя проектик небольшой, а после компиляции на фриипаскале, как и на Дельфи, размер экзешника получается в 4 раза больше и работает пока непредсказуемо), чтобы использовать нормальный Cardinal. Конкретно вопрос, код более-менее на FPC компилируется, за исключением невозможности изменить в цикле счетчик этого цикла. Может кто подскажет, предусмотрена ли на этот случай какая-то деректива процессора? Зы. Цитата Это — намек на то, что по-немецки "счатье" звучит как "дас Глюк"? Используй Use32 и (по уверению хелпа) будет тебе счастье: |
Сообщ.
#11
,
|
|
|
Цитата AGRY-DILETANT @ Конкретно вопрос, код более-менее на FPC компилируется, за исключением невозможности изменить в цикле счетчик этого цикла. Может кто подскажет, предусмотрена ли на этот случай какая-то деректива процессора? Нет, такой возможности нет. Мне кажется, что менять счётчик цикла в теле цикла - моветон. Цитата из Руководство по языку B.Pascal 7 & Objects/LR: "Если оператор, содержащийся в теле оператора for, изменяет значение управляющей переменной, то это является ошибкой. После выполнения оператора for значение управляющей переменной становится неопределенным, если только выполнение оператора for не было прервано с помощью оператора перехода." Если нужно выйти из цикла - используй оператор Break, если на следующую итерацию (т.е. i:=i+1) - оператор Continue. Если твой случай иной - или пересмотри подход к организации цикла (алгоритм) или воспользуйся другим циклом (repeat или while). |
Сообщ.
#12
,
|
|
|
Цитата AGRY-DILETANT @ Ну знаете, на сегодняшний день, убеждать в удобстве пользования подглючиващей фрипаскалевсой средой разработки, в которую невозможно скопировать данные из буффера обмена Виндовс, Да что ты говоришь? Я похоже, неправильно делаю, что пользуюсь последней версией IDE, а не версией четырехлетней давности, которая не умела работать с буфером обмена. А потом - я не навязывал никому стандартную IDE, хотя и она тоже кое-что умеет (см. аттач №1). А есть еще и альтернативные способы работы с этим компилятором (см. аттач №2)... Цитата AGRY-DILETANT @ То есть, скомканное непонятно как в два файла руководство - это прекрасно, а разложенное по 6-ти - это плохо? Если я хочу описание RTL или FCL - то открываю соответствующий файл, но если мне надо работу с IDE - на фига мне открывать какой-то файл, в котором все скомкано, начиная от синтаксиса языка, и невнятного описания типов (которое кстати, с реальным положением дел в VP не совпадает ни на йоту, в чем ты уже имел возможность убедиться)? Я открываю user.PDF и смотрю то, что мне нужно. Так что ты сначала инструмент со всех сторон рассмотри, и поработай с ним, а потом будешь что-то о нем высказывать. "Не читал, но осуждаю" (С) мы уже проходили. Разговор с тобой в этой теме окончен. Удачно тебе отладить проект в твоем распрекрасном VP... А мы уж как-нибудь в FPC, куда нам до вас...и ограниченным по объему руководством, разбросанным по 6 файлам Ограниченное по объему? Это ты мне будешь говорить, после того, как я посмотрел это жалкое полуторамегабайтное VP-шное подобие хелпа? А в FPC как-то раз в 8 больше (почти 13 Мб, если что). Так где после этого руководство-то ограниченное? Ась? Цитата AGRY-DILETANT @ Это намек на то, что я процитировал Хелп, который тебе настолько нравится (файл vp21user.pdf, стр. 81). Он все еще тебе нравится? Лови счастье (a.k.a. Glück) дальше.Это — намек на то, что по-немецки "счатье" звучит как "дас Глюк"? Прикреплённый файлfp_ide.PNG (23,2 Кбайт, скачиваний: 511) Прикреплённый файлother.PNG (31,01 Кбайт, скачиваний: 495) |
Сообщ.
#13
,
|
|
|
Цитата Федосеев Павел @ Цитата AGRY-DILETANT @ Конкретно вопрос, код более-менее на FPC компилируется, за исключением невозможности изменить в цикле счетчик этого цикла. Может кто подскажет, предусмотрена ли на этот случай какая-то деректива процессора? Нет, такой возможности нет. Мне кажется, что менять счётчик цикла в теле цикла - моветон. Цитата из Руководство по языку B.Pascal 7 & Objects/LR: "Если оператор, содержащийся в теле оператора for, изменяет значение управляющей переменной, то это является ошибкой. После выполнения оператора for значение управляющей переменной становится неопределенным, если только выполнение оператора for не было прервано с помощью оператора перехода." Если нужно выйти из цикла - используй оператор Break, если на следующую итерацию (т.е. i:=i+1) - оператор Continue. Если твой случай иной - или пересмотри подход к организации цикла (алгоритм) или воспользуйся другим циклом (repeat или while). А в FPC? Если так, то данная проблема толко прихоть создателей компилятора , поскольку итератор можно легко изменить с помощью ассемблерной вставки (компилируется и работает). zB var i:word; begin for i:=0 to 1000 do if i=12 then begin asm INC i end; break; end; end. volvo877 В у меня в About среды написано Version 1.0.10 2007.09.09, она с Виндовским буффером обмена не работает…, а у тебя какая? Зы. Сорри за задержку. Строил, строил и наконец построил Бета-версию, теперь можно будет попробовать перекомпилировать на FPC. |
Сообщ.
#14
,
|
|
|
Цитата Если так, то данная проблема толко прихоть создателей компилятора , поскольку итератор можно легко изменить с помощью ассемблерной вставки (компилируется и работает). На самом деле всё делается куда проще: создаётся указатель на итератор, с которым можно делать совершенно всё. var i:integer; pi:pinteger; begin pi:=@i; for i:=1 to 15 do begin if i=3 then pi^:=9; writeln(i); end; readln; end. Проблема может возникнуть при оптимизации, но не в данном случае. 1 2 9 10 11 12 13 14 15 |