PS.(Не столько совесть замучила, сколько подсознание вернулось).
Решил проверить насколько дал реальные советы по реальному типу:
"2")оказалось, что локальное приведение типа integer->real в TurboPascal
не работает (в моей голове это глюк- из MatLab'а, др.языков
и общей идеологии компиляции арифметических выражений со смешанными, но совместимыми, типами данных).
"1")с промежуточными переменными- всё в порядке
(как собственно написал ещё вчера Anton Golub (DoVe)):
добавим в начале:
function test(dx,dy: Real): Real;
Begin
test := dx*dx+dy*dy;
End;
и встроим строчку с вызовом:
dy:=y2-y1;
d:= test(dx,dy); {!}
d:= dx*dx+dy*dy;{???}
+)Пример "не сработает" если компилировать с ключами {$Q+,R+}.
До вычисления кв.корня появится ошибка переполнения.
По-видимому, они (ключи) были у Вас сброшены.
Не забывайте и о TurboDebagger'е, он проявит все детали.
При {$Q-,R+}:
PROGRAM.16: d:= dx*dx+dy*dy;{???}
cs:00D1>A15A00 mov ax,[PROGRAM.DY]
cs:00D4 F7265A00 mul word ptr [PROGRAM.DY]
cs:00D8 8BC8 mov cx,ax
cs:00DA A15800 mov ax,[PROGRAM.DX]
cs:00DD F7265800 mul word ptr [PROGRAM.DX]
cs:00E1 03C1 add ax,cx
cs:00E3 99 cwd
cs:00E4 9A3636CC67 call 67CC:3636 ; преобразование к real
cs:00E9 A35C00 mov [PROGRAM.D],ax
cs:00EC 891E5E00 mov [005E],bx
cs:00F0 89166000 mov [0060],dx
PROGRAM.18: d:=sqrt(d);{!!!}
При {$Q+,R+}:
PROGRAM.16: d:= dx*dx+dy*dy;{???}
cs:00DF>A15A00 mov ax,[PROGRAM.DY]
cs:00E2 F72E5A00 imul word ptr [PROGRAM.DY]
cs:00E6 7105 jno 00ED
cs:00E8 9AC702CE67 call 67CE:02C7 ; уход на вопли №215
cs:00ED 8BC8 mov cx,ax
cs:00EF A15800 mov ax,[PROGRAM.DX]
cs:00F2 F72E5800 imul word ptr [PROGRAM.DX]
cs:00F6 7105 jno 00FD
cs:00F8 9AC702CE67 call 67CE:02C7
cs:00FD 03C1 add ax,cx
cs:00FF 7105 jno 0106
cs:0101 9AC702CE67 call 67CE:02C7
cs:0106 99 cwd
cs:0107 9A3636CE67 call 67CE:3636
cs:010C A35C00 mov [PROGRAM.D],ax
cs:010F 891E5E00 mov [005E],bx
cs:0113 89166000 mov [0060],dx
PROGRAM.18: d:=sqrt(d);{!!!}
Паскаль хотя и относится (номинально) к учебным языкам требует
осторожности и чёткого осознания - чего и как программист хочет сделать
(т.е. предполагает скорее профессионального программиста).
(Иначе получается GIGO - "Garbage In Garbage Out").
Пока.