$EXTRN CARD, OPEN, PUT, PROUT; $ENTRY Go { = <OPEN 'w' 1 'GN.BAs'> <Rab <Spar <Ubpr <Vvod <PROUT 'F(t)= ... the end - &'> <CARD > >>>>; } * ввод до символа '&' Vvod { e.1 '&' e.2 = e.1; e.1 = e.1 <Vvod <CARD >>; } * убирание всех пробелов Ubpr { e.1 ' ' e.2 = e.1 <Ubpr e.2>; e.1 = e.1; } * организация вывода результирующей программы Rab { e.1 = <PUT 1 '10 t = 0.0'> <PUT 1 '20 FOR I=1 TO 100'> <PUT 1 '30 t = t + 0.01'> <PUT 1 '40 F = ' <Rassk e.1>> <PUT 1 '50 FDt = ' <Rassk <Easy <Dif ('t') e.1 >>>> <PUT 1 '60 PRINT "t="; t, "F="; F, "FD="; FDt'> <PUT 1 '70 NEXT I'> <PUT 1 '80 END'>; } * Расспаривание скобок для вывода Rassk { e.1 (e.2) e.3 = e.1 '(' <Rassk e.2 ')' e.3>; e.1 = e.1; } * спаривание скобок Spar { e.1 = <Spar1 ('*') e.1 >; } Spar1 { (e.1) '(' e.3 = <Spar1 ((e.1)) e.3 >; ((e.1) e.2) ')' e.3 = <Spar1 (e.1 (e.2)) e.3 >; ('*'e.1) ')' e.3 = 'error' e.1 ')' e.3; (e.1) s.A e.3 = <Spar1 (e.1 s.A) e.3 >; ('*'e.1) = e.1; ((e.1) e.2) = 'error' e.1 '(' e.2; } * функция дифференцирования выражения e.z по переменной e.t * обращение: <Dif (e.t) e.z> Dif { (e.t) 'ln' (e.1) = (<Dif (e.t) e.1>) '/' (e.1); (e.t) 'sin' (e.1) = 'cos' (e.1) '*' (<Dif (e.t) e.1>); (e.t) 'cos' (e.1) = '-sin' (e.1) '*' (<Dif (e.t) e.1>); (e.t) 'tg' (e.1) = (<Dif (e.t) e.1>) '/cos^2 ' (e.1); (e.t) 'ctg' (e.1) = '-' (<Dif (e.t) e.1>) '/sin^2 ' (e.1); (e.t) 'exp' (e.1) = (<Dif (e.t) e.1>) '*exp' (e.1); (e.t) e.1 '+' e.2 = <Dif (e.t) e.1> '+' <Dif (e.t) e.2>; (e.t) e.1 '-' e.2 = <Dif (e.t) e.1> '-' <Dif (e.t) e.2>; (e.t) e.1 '*' e.2 = (<Dif (e.t) e.1>) '*' e.2 '+' e.1 '*' <Dif (e.t) e.2>; (e.t) e.1 '/' e.2 = (<Dif (e.t) e.1>) '*' e.2 '-' e.1 '*' <Dif (e.t) e.2> '/' e.2 '^2'; (e.t) e.1 ':' e.2 = (<Dif (e.t) e.1>) '*' e.2 '-' e.1 '*' <Dif (e.t) e.2> ':' e.2 '^2'; (e.t) e.1 '^' e.2 = e.2 '*(' e.1 '^(' e.2 '- 1))*' <Dif (e.t) e.1> '+' '(' e.1 '^' e.2 ')*Ln' (e.1) '*' (<Dif (e.t) e.2>); (e.t) e.t = '1'; (e.t) e.1 = '0'; } * один из вариантов возможного упрощения полученной функции Easy { e.1 '+0' = <Easy e.1 >; e.1 '-0' = <Easy e.1>; '0+' e.1 = <Easy e.1>; '0-' e.1 = <Easy '-' e.1>; e.1 '+0+' e.2 = <Easy e.1 '+' e.2>; e.1 '-0+' e.2 = <Easy e.1 '+' e.2>; e.1 '+0-' e.2 = <Easy e.1 '-' e.2>; e.1 '-0-' e.2 = <Easy e.1 '-' e.2>; e.1 '*1+' e.2 = <Easy e.1 '+' e.2>; e.1 '+1*' e.2 = <Easy e.1 '+' e.2>; e.1 '*1-' e.2 = <Easy e.1 '-' e.2>; e.1 '-1*' e.2 = <Easy e.1 '-' e.2>; e.1 '*1' = <Easy e.1>; '1*' e.1 = <Easy e.1>; '-1*' e.1 = <Easy '-'e.1>; e.1 '-1*' = <Easy '-'e.1>; e.1 = e.1; }