DP.39 · Радиотехника
Задача
По желаемому сопротивлению найти ближайший номинал из ряда E24.
Алгоритм
Определяется порядок числа, желаемое значение сравнивается со всеми 24 значениями ряда, домноженными на порядок.
Исходный код
program RyadE24;
{$mode delphi}{$apptype console}
uses SysUtils, Math;
const E24: array[0..23] of Double =
(1.0, 1.1, 1.2, 1.3, 1.5, 1.6, 1.8, 2.0, 2.2, 2.4, 2.7, 3.0,
3.3, 3.6, 3.9, 4.3, 4.7, 5.1, 5.6, 6.2, 6.8, 7.5, 8.2, 9.1);
var v, decade, best, cand, bestDiff: Double; i, e: Integer;
begin
Write('Желаемый номинал (Ом): '); ReadLn(v);
e := Floor(Log10(v));
decade := Power(10, e);
bestDiff := 1e30; best := 0;
for i := 0 to 23 do begin
cand := E24[i] * decade;
if Abs(cand - v) < bestDiff then begin bestDiff := Abs(cand - v); best := cand; end;
end;
WriteLn(Format('Ближайший из E24: %.1f Ом', [best]));
ReadLn;
end.
Пояснения
Ряд E24 имеет допуск 5%. Log10 и Floor из модуля Math дают показатель степени.