Приходится мне тут последнее время переводить некоторые вычислительые прораммы (написанные не мной) с бейсика на делфи, и вот в одной возникла заминка, не могу найти ошибку, где-то в алгоритме ... Переписал чисто на паскале, если кто найдет ошибку, буду премного благодарен :)

basic :

Код
CLS
REM *****************************
REM
REM ОБЩЕЕ СОПРОТИВЛЕНИЕ ИЗ
REM ДВУХ ПАРАЛЛЕЛЬНЫХ РЕЗИСТОРОВ
REM С ЗАДАННЫМ ДОПУСКОМ
REM
REM *****************************

DIM A(50)
FOR I = 1 TO 25: READ A(I): A(I + 24) = A(I) * 10
NEXT
DATA 10,11,12,13,15,16,18,20,22,24,27,30,33,36,39,43,47,51,54,62,68,75,82,91,100
A$ = "                                                                          "
LOCATE 2: PRINT "ПАРАЛЛЕЛЬНЫЙ РЕЗИСТОР"; TAB(2); : PRINT "С ЗАДАННЫМ ДОПУСКОМ":
LOCATE 4: PRINT A$:
160 LOCATE 5: PRINT "ЗНАЧЕНИЕ СОПРОТИВЛЕНИЯ"; TAB(5); :
PRINT "/ ГРАНИЦЫ: 10-100 /": PRINT
LOCATE 7: INPUT "R = "; X
IF X < 10 OR X > 100 THEN LOCATE 6: PRINT A$: GOTO 160
PRINT : INPUT "ДОПУСК (%) - "; T
LOCATE 10: PRINT "ЗНАЧЕНИЕ : "; X; TAB(23); : PRINT "ДОПУСК :"; T; : PRINT "%"
T1 = 1 - T / 200: TH = 1 + T / 200: X1 = X * T1: XH = X * TH
FOR I = 2 TO 25: IF X >= A(I - 1) AND X <= A(I) THEN Y = I
IF X > 50 THEN M = I + 24: GOTO 260
M = I
260 IF X * 2 > A(M - 1) AND X * 2 <= A(M) THEN Z = M
IF Y = I AND Z = M THEN 290
NEXT
290 PRINT : PRINT " R1        R2      (MIN)   ОБЩЕЕ  (MAX)"
PRINT "========================================"
FOR M = Y TO Z: FOR N = Z TO 49: XN = A(N) * A(M) / (A(N) + A(M))
IF XN > XH OR XN < X1 THEN 360
PRINT A(N); TAB(11); : PRINT A(M); TAB(19); : PRINT INT(XN * T1 * 100 + .5) / 100; TAB(27); : PRINT INT(XN * 100 + .5) / 100; TAB(34); : PRINT INT(XN * TH * 100 + .5) / 100
DD = DD + 1
IF DD = 10 THEN LOCATE 25: PRINT A$; TAB(2); : PRINT "ДЛЯ ПРОДОЛЖЕНИЯ - НАЖМИТЕ ВВОД"; : INPUT R$: DD = 0
360 NEXT N, M
PRINT : PRINT "НЕОБХОДИМЫЕ ГРАНИЦЫ : "; INT(X * (100 - T) + .5) / 100; " - "; INT(X * (100 + T)) / 100


и вот алгоритм я перевел :

uses crt;

const

a : array [1..49] of integer =

(
10,11,12,13,15,16,18,20,22,24,27,30,33,36,39,43,47,51,54,62,68,75,82,91,100,
110,120,130,150,160,180,200,220,240,270,300,330,360,390,430,470,510,540,620,680,
750,820,910,1000
);

var
x,t,t1, th, x1, xh, xn : single;
i,m,n,d,y,z : integer;

begin

clrscr;

x := 21;
t := 21;

t1 := 1 - (t/200);
th := 1 + (t/200);
x1 := x * t1;
xh := x * th;

d := 0;
y := 0;

for i := 2 to 25 do begin
if (x >= a[i-1]) and (x <= a[i]) then y := i;
if x > 50 then m := i + 24 else m := i;
if (x * 2 > a[m-1]) and (x * 2 <= a[m]) then z := m;
if ((y=i) and (z=m)) or (i=25) then begin
m := y;
while(m<=z) do begin
n := z;
while(n <= 49) do begin
xn := a[n]*a[m] / (a[n] + a[m]);
if not((xn > xh) or (xn < x1)) then begin
writeln(a[n],' ',a[m],' ',((xn*t1*100+0.5)/100):2:2,' ', ((xn*100+0.5)/100):2:2,' ', ((xn*th*100+0.5)/100):2:2 );
inc(d);
if d=10 then begin
d := 0;
readln;
end;
end;
inc(n); inc(m);
end;{z}
end;{m}
end;
end;
end.