Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > pascal-gluk


Автор: anti 16.10.2003, 00:36
такой вот глюк:

const
a=0; b=-3; c=5; d=c+a*b;

выдает сообшение что-то типа в longint нет такого числа 0*(-3) confused.gif

Автор: cot 16.10.2003, 05:08
А в разделе констант разве вычисления производятся? Я что-то не в курсе.

Автор: Dmitry V.Abramov 16.10.2003, 06:32
Цитата(anti @ 16.10.2003, 00:36)
такой вот глюк:

const
a=0;  b=-3;  c=5;    d=c+a*b;

выдает сообшение что-то типа в longint нет такого числа 0*(-3) confused.gif

Delphi6 (CompilerVersion: 14.01)
Код
{$APPTYPE CONSOLE}
program test;

const
 a=0; b=-3; c=5; d=c+a*b;

begin
 writeln(d);
end.

Компилируется
Цитата
Borland Delphi Version 14.0
Copyright © 1983,2001 Borland Software Corporation
test.dpr(1)
test.dpr(2)
test.dpr(2)
test.dpr(9)
10 lines, 0.03 seconds, 5264 bytes code, 1921 bytes data.

Запускается и сообщает:
Цитата
5


Если ошиблись конференцией и речь о pascal, то, все-равно, указание его происхождения и версии не помешало бы.

А еще полезно бывает указывать тип констант:
Код
const
 a = 0; // он и в африке 0
 b = integer(-3);
 c = integer(5);
 d = integer(c+a*b);

Автор: Dmitry V.Abramov 16.10.2003, 06:36
Цитата(cot @ 16.10.2003, 05:08)
А в разделе констант разве вычисления производятся? Я что-то не в курсе.

Конечно. Например вот так:
Код
const
 idEOF  = Cardinal(0); // EOF
 idPRVW = Cardinal(ord('P') or (ord('R') shl 8) or (ord('V') shl 16) or (ord('W') shl 24)); // Preview
 idMAPC = Cardinal(ord('M') or (ord('A') shl 8) or (ord('P') shl 16) or (ord('C') shl 24)); // MapCells

Автор: Fedor 16.10.2003, 08:38
Dmitry V.Abramov
Цитата
Если ошиблись конференцией и речь о pascal

Эта конференция также предназначена и для Pascal
anti
Если честно, то я сомневаюсь в возможности произведения таких операций в разделе констант. Не легче ли записать просто d=5?

Автор: Dmitry V.Abramov 16.10.2003, 09:13
Цитата(Morpheus @ 16.10.2003, 08:38)
Эта конференция также предназначена и для Pascal

Для которого? Object Pascal? Turbo Pascal? TMT Pascal? FreePascal? Pas32? TinyPascal? Pascal ISO? ModulePascal?
Цитата
Если честно, то я сомневаюсь в возможности произведения таких операций в разделе констант.

Напрасно. Не надо сомневаться. Но только в случае Object Pascal и Turbo/Borland Pascal. Все остальные тоже должны поддерживать унарные операции с константами. Но могут засомневаться...

Автор: December 16.10.2003, 16:31
Цитата
Object Pascal? Turbo Pascal? TMT Pascal? FreePascal? Pas32? TinyPascal? Pascal ISO? ModulePascal?
и для Borland Pascal тоже.

Автор: Pakshin A. S. 16.10.2003, 20:12
Возвращаюсь к вопросу... А на кой чёрт записывать в константу d=c+a*b;, если всё енто можно организовать в переменных.
P. S.
А откуда компилятор берёт тип longint??? в разделе констант, если там типы не прописаны?

Автор: Pakshin A. S. 16.10.2003, 20:15
Коряво написал...

* * *
var
d:longint;

(***)

begin
(***)
d:=c+a*b;
(***)
end.


Ведь смысла нет в хранении этой константы! на сколько я понял.

Автор: Dmitry V.Abramov 16.10.2003, 22:46
Цитата(December @ 16.10.2003, 16:31)
Цитата
Object Pascal? Turbo Pascal? TMT Pascal? FreePascal? Pas32? TinyPascal? Pascal ISO? ModulePascal?
и для Borland Pascal тоже.

Ok.

+BorlandPascal.

Итак, о каком из них мы беседуем? С чьей "ошибкой" разбираемся?

Автор: Fedor 17.10.2003, 08:11
anti Ждем твоего слова
Dmitry V.Abramov Согласен с тобой. Мир.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)