Re: Програма розв'язування задач з фізики! Для учнів 7-го класу.
А від мене - фокус на кілька сотень рядків.
У вас там є повторюваний (з точністю до змінних) фрагмент
…
і тепер робимо14..20: begin for idx0 := 4 to 8 do ComboBox16.Items.Add(UNITS_M_U[idx0]); for idx1 := 15 to 21 do ComboBox16.Items.Add(UNITS_P_С2[idx1]); BitBtn1.Top := 642; BitBtn2.Top := 642; CheckBox3.Visible := True; Options[2] := True; CheckBox3.Caption := NumberedString('s%s - Від''ємне переміщення',ComboBox10.ItemIndex-14); end;
Було 80 рядків, стало 11. І таких місць кілька.
Дивлюся я на ці ComboBox10 та itemindex = 14 і думаю…
Якщо індекс зробити конкатенацією полів, які означають тип величини (переміщення, час, швидкість, ...), номер змінної такого типу і ще там щось, то таких ручних дій (чому для case 4 потрібно t1? хто про це пам'ятатиме через 5 років?)
4: RichEdit1.Lines.Add('t = t1');
5: RichEdit1.Lines.Add('t = t2');
6: RichEdit1.Lines.Add('t = t3');
і різних
ComboBox10.ItemIndex-14
просто не буде.
NumberedString прийматиме лише індекс, виколупуватиме з нього частини і по типу величини вийматиме рядок, а номер змінної теж просто виколупуватиметься, а не отримуватиметься відніманням магічного числа.
Об'єднання полів і виймання окремого можна робити або бітовими shl, shr, and, or, або цілочисловими div, mod, *, +.
Краще запхати у функції.
type
PhysicalValue = (Time = 0, Displacement = 1, Speed = 2);
const
MaxVars = 100; { 0 to 99 }
function ComposeIndex(value : PhysicalValue, n : integer) : integer;
begin
{ перевірити діапазон n ! }
ComposeIndex := Ord(value) * MaxVars + n;
end;
function GetVarIndex(itemIndex : integer) : integer;
begin
GetVarIndex := itemIndex mod MaxVars;
end;
function GetVarType(itemIndex : integer) : PhysicalValue;
t : integer;
begin
t := itemIndex div MaxVars;
{ перевірити діапазон t ! }
GetVarType := PhysicalValue(t);
end;
Думаю, це дасть змогу уніфікувати (а тому винести в окремі процедури і зробити код коротшим, меншим і зрозумілішим) багато операцій. Різні 't = t1' полетять у const array of string, ...
Може навіть елементи інтерфейсу можна буде формувати динамічно і довільно так само типів/індексів змінних і масивів рядків.