![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() ![]() |
![]() |
klem4 |
![]()
Сообщение
#1
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Приходится мне тут последнее время переводить некоторые вычислительые прораммы (написанные не мной) с бейсика на делфи, и вот в одной возникла заминка, не могу найти ошибку, где-то в алгоритме ... Переписал чисто на паскале, если кто найдет ошибку, буду премного благодарен :)
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.
Сообщение отредактировано: volvo - 2.11.2006 20:32 -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
![]() ![]() |
![]() |
Текстовая версия | 28.07.2025 11:17 |