Трансляция программы геометрического построения в эквивалентную программу на языке Object Pascal |
Общие сведения |
Методика подготовки функции для ее включения в состав системы Симплекс |
1. Выполняется геометрическое построение, которое подлежит включению в состав системы Симплекс |
2. Назначаются входные и выходные параметры Входные параметры - фокусы p1 и p2, точка p3. Выходные параметры - коники y1 и y2. |
3. Выполняется трансляция программы построения на язык Object Pascal. Для этого вызывается пукт меню (F9). Продолжение - кнопка Трансляция. |
function EExecYH(in_prm1,in_prm2,in_prm3: TObj; var out_prm1,out_prm2: TObj; Att_1,Att_2: TAtt; Sg1,Sg2,Sg3: integer; OW1,OW2: pointer): boolean; rect: TOChisl; begin rect:=TOChisl.Create(MCompl(90,0),1,tc_Constant,NAtt,NIL,c_ord); p2:=in_prm2.CreateCopy(NIL); p4:=in_prm3.CreateCopy(NIL); repeat out_prm2:=y2.CreateCopy(OW2); MassFree([d1,o1,o2,o3,o4,p1,p2,p3,p4,p5,p6,p7,p8,p9,y1,y2,rect]); function XExecYH(FM: string; _W1,_W2,LC1,LC2,LC3: TNewList; Att1,Att2: TAtt): boolean; procedure CALC; // Check necessity to incidence assignment end; // CALC var if FM = '1' then CI:=TNewList.Create(NIL); lb: function ExecYH(var PTS: TStroka): boolean; begin // ExecYH All:=TAlg(PTS.Alg).Present(PTS,0,['?'],LC1,LCR1) and All; if (LC1.Count=0) or (LC2.Count=0) or (LC3.Count=0) R:=XExecYH(PTS.FM,_W1,_W2,LC1,LC2,LC3,Att1,Att2); Markus(_W1,Att1.View); // Text of Simplex program in mnemocode // It is necessary to make changes: function EExecYH(in_prm1,in_prm2,in_prm3: TObj; var out_prm1,out_prm2: TObj; Att_1,Att_2: TAtt; Sg1,Sg2,Sg3: integer; OW1,OW2: pointer): boolean; // Insert procedure in Spw_pl_c and assign integface description procedure AskYH_SBC; // Put definitions in unit Res2 s_askYH,s_askYH_2,s_askYH_3,s_askYH_4,s_askYH_5,s_askYH_7, s_askYH:=''; // Call ExecYHin unit Spw_Alg.Execute: // Create procedure with menu in ChildWin, make menu's event handler and write line in it // Insert Insert lines in unit Child1 (procedure EditCall): // Insert line In unit Spw_Stru (procedure FILLList): // Insert line in unit Spw_t1 (function Texts): |
Открываем модуль функций, например, Spw_kwad. Переходим в самый конец текста перед последним end. вставляем текст функций EExecYH, XExecYH, ExecYH |
Заголовки функций переносим в интерфейсную часть function EExecYH(in_prm1,in_prm2,in_prm3: TObj; var out_prm1,out_prm2: TObj; Att_1,Att_2: TAtt; Sg1,Sg2,Sg3: integer; OW1,OW2: pointer): boolean; |
// Insert procedure in Spw_pl_c and assign integface description procedure AskYH_SBC; В интерфейсную часть добавить procedure AskYH_SBC(Child: TForm; CC: boolean; Sender: TObject; Shift: TShiftState; B: TMouseButton; All: boolean; S: string); |
// Put definitions in unit Res2 В объявления s_askYH,s_askYH_2,s_askYH_3,s_askYH_4,s_askYH_5,s_askYH_6, В функции Langu (Русский и английский варианты) s_askYH:='';
s_askYH:='Коники по фокусам и точке'; s_askYH:='Conics by foci and point'; |
// Call ExecYHin unit Spw_Alg.Execute:
if FUN='YH' then begin LokSuccess:=ExecYH(PTS); goto lab; end;, соблюдая алфавитный порядок С этого момента функция вычислительно подключена. Осталось сделать изменения в интерфейсе системы |
Создаем пункт меню Заголовок Caption: Коники по фокусам и точке... Меняем имя name на cwmn_YH Двойной щелчок по onClick; формируем вызов // Create procedure with menu in ChildWin, make menu's event handler and write line in it
procedure TAlgWin.cwmn_YHClick(Sender: TObject); cwmn_YH.Caption:=''; надо найти, где происходит присвоение |
В Child1 EditCall добавляется // Insert Insert lines in unit Child1 (procedure EditCall): |
В Spw_Stru, THHB.Create вставить FillList('YH',392,s_AskYH,TestMDI.AskYH_SBClick); |
// Insert line in unit Spw_t1 (function Texts): str_YH:='Statement decoder.'; объявить переменную в интерфейсной части str_YH:='Эллипс $1 и гипербола $2 по фокусам %1, %2 через точку %3.'; В теле процедуры вставить строку if V.Fun='YH' then Str_XXX:=Str_YH; (алфавитный порядок) |
Сделать кнопку в соответствующей закладке окна Main. Назвать ее в соответствии с функцией, занести номер в Icon, создать иконку и подстоединить ее под номером в Занести в интерфейсную часть procedure AskYH_SBClick(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); В FormCreate добавить HHB('YH',HB,SI,TRUE); SetOn(ToolButton_YH,AskYH_SBClick,Si,s_askYH); В теле программы добавить текст procedure TTestMDI.AskYH_SBClick(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); |
В ChildWin TAlgWin.Language resourcestring {$ifdef rus} str_mn_A4='Минимальное значение...'; {$endif rus} {$ifdef eng} str_mn_A4='Minimum...'; {$endif eng}
|