@ file : Suppress (" UNUSED _ PARAMETER ") Ċ Ċ package Ġlesson 1 1 . task 1 Ċ import Ġjava . lang . Arithmetic Exception Ċ import Ġkotlin . math . pow Ċ Ċ /** Ċ Ġ* ĠÐļ Ð»Ð°ÑģÑģ Ġ" Ð¿ Ð¾Ð» Ð¸Ð½ Ð¾Ð¼ ĠÑģ ĠÐ² Ðµ Ñī ÐµÑģÑĤÐ² ÐµÐ½ Ð½Ñĭ Ð¼Ð¸ ĠÐº Ð¾ Ñį ÑĦ ÑĦ Ð¸ ÑĨÐ¸ ÐµÐ½ÑĤ Ð°Ð¼Ð¸ ". Ċ Ġ* Ċ Ġ* ĠÐŀ Ð± Ñī Ð°Ñı ĠÑģÐ» Ð¾Ð¶ Ð½Ð¾ÑģÑĤÑĮ ĠÐ·Ð°Ð´ Ð°Ð½Ð¸Ñı Ġ-- ĠÑģ ÑĢÐµÐ´ Ð½Ñı Ñı , ĠÐ¾Ð± Ñī Ð°Ñı ĠÑĨ ÐµÐ½ Ð½Ð¾ÑģÑĤÑĮ ĠÐ² ĠÐ± Ð°Ð» Ð»Ð° Ñħ Ġ-- Ġ 1 6 . Ċ Ġ* ĠÐŀ Ð± ÑĬ ÐµÐºÑĤ ĠÐºÐ»Ð°ÑģÑģ Ð° Ġ-- ĠÐ¿Ð¾Ð» Ð¸Ð½ Ð¾Ð¼ ĠÐ¾ÑĤ ĠÐ¾Ð´ Ð½Ð¾Ð¹ ĠÐ¿ÐµÑĢ ÐµÐ¼ ÐµÐ½ Ð½Ð¾Ð¹ Ġ( x ) ĠÐ² Ð¸ Ð´Ð° Ġ 7 x ^ 4 + 3 x ^ 3 - 6 x ^ 2 + x - 8 . Ċ Ġ* ĠÐļ Ð¾Ð» Ð¸Ñĩ ÐµÑģÑĤÐ²Ð¾ ĠÑģÐ» Ð°Ð³ Ð°ÐµÐ¼ ÑĭÑħ ĠÐ½Ðµ Ð¾Ð³ ÑĢ Ð°Ð½Ð¸ Ñĩ ÐµÐ½ Ð¾ . Ċ Ġ* Ċ Ġ* ĠÐŁ Ð¾Ð» Ð¸Ð½ Ð¾Ð¼ Ñĭ ĠÐ¼Ð¾Ð¶Ð½Ð¾ ĠÑģÐº Ð» Ð°Ð´ ÑĭÐ² Ð°ÑĤÑĮ Ġ-- Ġ( x ^ 2 + 3 x + 2 ) Ġ+ Ġ( x ^ 3 - 2 x ^ 2 - x + 4 ) Ġ= Ġx ^ 3 - x ^ 2 + 2 x + 6 , Ċ Ġ* ĠÐ²Ñĭ Ñĩ Ð¸ÑĤ Ð°ÑĤÑĮ Ġ-- Ġ( x ^ 3 - 2 x ^ 2 - x + 4 ) Ġ- Ġ( x ^ 2 + 3 x + 2 ) Ġ= Ġx ^ 3 - 3 x ^ 2 - 4 x + 2 , Ċ Ġ* ĠÑĥ Ð¼ Ð½ Ð¾Ð¶ Ð°ÑĤÑĮ Ġ-- Ġ( x ^ 2 + 3 x + 2 ) Ġ* Ġ( x ^ 3 - 2 x ^ 2 - x + 4 ) Ġ= Ġx ^ 5 + x ^ 4 - 5 x ^ 3 - 3 x ^ 2 + 1 0 x + 8 , Ċ Ġ* ĠÐ´ ÐµÐ» Ð¸ÑĤÑĮ ĠÑģ ĠÐ¾ ÑģÑĤ Ð°ÑĤ Ðº Ð¾Ð¼ Ġ-- Ġ( x ^ 3 - 2 x ^ 2 - x + 4 ) Ġ/ Ġ( x ^ 2 + 3 x + 2 ) Ġ= Ġx - 5 , ĠÐ¾ ÑģÑĤ Ð°ÑĤ Ð¾Ðº Ġ 1 2 x + 1 6 Ċ Ġ* ĠÐ²Ñĭ Ñĩ Ð¸Ñģ Ð»Ñı ÑĤÑĮ ĠÐ·Ð½Ð°ÑĩÐµÐ½Ð¸Ðµ ĠÐ¿ÑĢÐ¸ ĠÐ·Ð°Ð´ Ð°Ð½ Ð½Ð¾Ð¼ Ġx : ĠÐ¿ÑĢÐ¸ Ġx = 5 Ġ( x ^ 2 + 3 x + 2 ) Ġ= Ġ 4 2 . Ċ Ġ* Ċ Ġ* ĠÐĴ ĠÐºÐ¾Ð½ ÑģÑĤ ÑĢÑĥÐº ÑĤÐ¾ÑĢ ĠÐ¿Ð¾Ð» Ð¸Ð½ Ð¾Ð¼ Ð° ĠÐ¿ÐµÑĢ ÐµÐ´ Ð° ÑİÑĤÑģÑı ĠÐµÐ³Ð¾ ĠÐº Ð¾ Ñį ÑĦ ÑĦ Ð¸ ÑĨÐ¸ ÐµÐ½ÑĤ Ñĭ , ĠÐ½Ð° Ñĩ Ð¸ Ð½Ð°Ñı ĠÑģÐ¾ ĠÑģÑĤ Ð°ÑĢ ÑĪ ÐµÐ³Ð¾ . Ċ Ġ* ĠÐĿ Ñĥ Ð»Ð¸ ĠÐ² ĠÑģÐµÑĢ ÐµÐ´ Ð¸Ð½ Ðµ ĠÐ¸ ĠÐ² ĠÐºÐ¾Ð½ ÑĨ Ðµ ĠÐ¿ÑĢ Ð¾Ð¿ ÑĥÑģ Ðº Ð°ÑĤÑĮÑģÑı ĠÐ½Ðµ ĠÐ´Ð¾Ð»Ð¶ Ð½Ñĭ , ĠÐ½Ð°Ð¿ ÑĢ Ð¸Ð¼ÐµÑĢ : Ġx ^ 3 + 2 x + 1 Ġ--> ĠPol yn om ( 1 . 0 , Ġ 2 . 0 , Ġ 0 . 0 , Ġ 1 . 0 ) Ċ Ġ* ĠÐ¡ ÑĤ Ð°ÑĢ ÑĪÐ¸ Ðµ ĠÐº Ð¾ Ñį ÑĦ ÑĦ Ð¸ ÑĨÐ¸ ÐµÐ½ÑĤ Ñĭ , ĠÑĢÐ°Ð ² Ð½ÑĭÐµ ĠÐ½ Ñĥ Ð»Ñİ , ĠÐ¸ Ð³ Ð½ Ð¾ÑĢ Ð¸ÑĢÐ¾Ð² Ð°ÑĤÑĮ , ĠÐ½Ð°Ð¿ ÑĢ Ð¸Ð¼ÐµÑĢ ĠPol yn om ( 0 . 0 , Ġ 0 . 0 , Ġ 5 . 0 , Ġ 3 . 0 ) ĠÑģÐ¾ Ð¾ÑĤ Ð²ÐµÑĤ ÑģÑĤÐ² ÑĥÐµÑĤ Ġ 5 x + 3 Ċ Ġ*/ Ċ class ĠPol yn om ( var arg Ġcoeff s : ĠDouble ) Ġ{ ĊĊĠĠĠ Ġval Ġcoeff List Ġ= Ġmutable ListOf < Double >() ĊĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġcoeff s . drop While Ġ{ Ġit Ġ== Ġ 0 . 0 Ġ}. reversed ()) Ġcoeff List Ġ+= Ġi ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠÐ ĵ ÐµÑĤ ÑĤÐµÑĢ : ĠÐ²ÐµÑĢ Ð½ Ñĥ ÑĤÑĮ ĠÐ·Ð½Ð°ÑĩÐµÐ½Ð¸Ðµ ĠÐº Ð¾ Ñį ÑĦ ÑĦ Ð¸ ÑĨÐ¸ ÐµÐ½ÑĤ Ð° ĠÐ¿ÑĢÐ¸ Ġx ^ i ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcoeff ( i : ĠInt ): ĠDouble Ġ= Ġif Ġ( i Ġ< Ġcoeff List . size ) Ġcoeff List [ i ] ĊĠĠĠ Ġelse Ġ 0 . 0 ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠÐł Ð°Ñģ Ñĩ Ñĳ ÑĤ ĠÐ·Ð½Ð°Ñĩ ÐµÐ½Ð¸Ñı ĠÐ¿ÑĢÐ¸ ĠÐ·Ð°Ð´ Ð°Ð½ Ð½Ð¾Ð¼ Ġx ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠgetValue ( x : ĠDouble ): ĠDouble Ġ= Ġcoeff List . fold Indexed ( 0 . 0 ) Ġ{ Ġindex , Ġsum , Ġcoeff Ġ-> ĊĠĠĠĠĠĠĠ Ġsum Ġ+ Ġcoeff Ġ* Ġx . pow ( index ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠÐ¡ ÑĤ ÐµÐ¿ ÐµÐ½ÑĮ Ġ( Ð¼ Ð°Ðº Ñģ Ð¸Ð¼ Ð°Ð»ÑĮ Ð½Ð°Ñı ĠÑģÑĤ ÐµÐ¿ ÐµÐ½ÑĮ Ġx ĠÐ¿ÑĢÐ¸ ĠÐ½ ÐµÐ½ Ñĥ Ð» ÐµÐ² Ð¾Ð¼ ĠÑģÐ» Ð°Ð³ Ð°ÐµÐ¼ Ð¾Ð¼ , ĠÐ½Ð°Ð¿ ÑĢ Ð¸Ð¼ÐµÑĢ Ġ 2 ĠÐ´Ð»Ñı Ġx ^ 2 + x + 1 ). ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠÐ¡ ÑĤ ÐµÐ¿ ÐµÐ½ÑĮ ĠÐ¿Ð¾Ð» Ð¸Ð½ Ð¾Ð¼ Ð° ĠÑģ ĠÐ½ Ñĥ Ð» ÐµÐ² Ñĭ Ð¼Ð¸ ĠÐº Ð¾ Ñį ÑĦ ÑĦ Ð¸ ÑĨÐ¸ ÐµÐ½ÑĤ Ð°Ð¼Ð¸ ĠÑģ Ñĩ Ð¸ÑĤ Ð°ÑĤÑĮ ĠÑĢÐ°Ð ² Ð½Ð¾Ð¹ Ġ 0 . ĊĠĠĠĠ Ġ* ĠÐ¡ Ð» Ð°Ð³ Ð°ÐµÐ¼ ÑĭÐµ ĠÑģ ĠÐ½ Ñĥ Ð» ÐµÐ² Ñĭ Ð¼Ð¸ ĠÐº Ð¾ Ñį ÑĦ ÑĦ Ð¸ ÑĨÐ¸ ÐµÐ½ÑĤ Ð°Ð¼Ð¸ ĠÐ¸ Ð³ Ð½ Ð¾ÑĢ Ð¸ÑĢÐ¾Ð² Ð°ÑĤÑĮ , ĠÑĤ . Ðµ . ĊĠĠĠĠ Ġ* ĠÑģÑĤ ÐµÐ¿ ÐµÐ½ÑĮ Ġ 0 x ^ 2 + 0 x + 2 ĠÑĤÐ°Ðº Ð¶Ðµ ĠÑĢÐ°Ð ² Ð½Ð° Ġ 0 . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdegree (): ĠInt Ġ= Ġmax Of ( 0 , Ġcoeff List . last Index ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠÐ¡ Ð» Ð¾Ð¶ ÐµÐ½Ð¸Ðµ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoperator Ġfun Ġplus ( other : ĠPol yn om ): ĠPol yn om Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Coeff s Ġ= Ġmutable ListOf < Double >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. max Of ( this . degree (), Ġother . degree ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Coeff s . add ( this . coeff ( i ) Ġ+ Ġother . coeff ( i )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠPol yn om (* result Coeff s . toDouble Array (). reversed Array ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠÐ¡ Ð¼ÐµÐ½ Ð° ĠÐ· Ð½ Ð°Ðº Ð° Ġ( Ð¿ ÑĢÐ¸ ĠÐ²ÑģÐµ Ñħ ĠÑģÐ» Ð°Ð³ Ð°ÐµÐ¼ ÑĭÑħ ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoperator Ġfun Ġunary Minus (): ĠPol yn om Ġ= ĠPol yn om (* coeff List . map Ġ{ Ġ- it Ġ}. toDouble Array (). reversed Array ()) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠÐĴ Ñĭ Ñĩ Ð¸ÑĤ Ð°Ð½Ð¸Ðµ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoperator Ġfun Ġminus ( other : ĠPol yn om ): ĠPol yn om Ġ= Ġthis Ġ+ Ġ(- other ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠÐ£ Ð¼ Ð½ Ð¾Ð¶ ÐµÐ½Ð¸Ðµ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoperator Ġfun Ġtimes ( other : ĠPol yn om ): ĠPol yn om Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Coeff s Ġ= ĠMutable List ( this . degree () Ġ+ Ġother . degree () Ġ+ Ġ 1 ) Ġ{ Ġ 0 . 0 Ġ} ĊĠĠĠĠĠĠĠ Ġthis . coeff List . forEach Indexed Ġ{ Ġi , Ġthis Coeff Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġother . coeff List . forEach Indexed Ġ{ Ġj , Ġother Coeff Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Coeff s [ i Ġ+ Ġj ] Ġ+= Ġthis Coeff Ġ* Ġother Coeff ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠPol yn om (* result Coeff s . toDouble Array (). reversed Array ()) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġdivide ( other : ĠPol yn om ): ĠPair < Pol yn om , ĠPol yn om > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( other . degree () Ġ== Ġ 0 ) Ġreturn Ġdivide ( other . coeff ( 0 )) ĊĠĠĠĠĠĠĠ Ġvar Ġquot inent Ġ= ĠPol yn om () ĊĠĠĠĠĠĠĠ Ġvar Ġremainder Ġ= ĠPol yn om (* coeff List . reversed (). toDouble Array ()) ĊĠĠĠĠĠĠĠ Ġwhile Ġ( remainder . degree () Ġ>= Ġother . degree ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmultiplier Degree Ġ= Ġremainder . degree () Ġ- Ġother . degree () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmultiplier Coeff Ġ= Ġremainder . coeff ( remainder . degree ()) Ġ/ Ġother . coeff ( other . degree ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmultiplier Ġ= ĠPol yn om (* Double Array ( multiplier Degree Ġ+ Ġ 1 ) Ġ{ Ġi Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ== Ġmultiplier Degree ) Ġmultiplier Coeff ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. reversed Array ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquot inent Ġ+= Ġmultiplier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremainder Ġ-= Ġmultiplier Ġ* Ġother ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġquot inent Ġto Ġremainder ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdivide ( n : ĠDouble ): ĠPair < Pol yn om , ĠPol yn om > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( n Ġ== Ġ 0 . 0 ) Ġthrow ĠArithmetic Exception (" Cannot Ġdivide Ġby Ġzero ") ĊĠĠĠĠĠĠĠ Ġreturn ĠPol yn om ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ* coeff List . map Ġ{ Ġit Ġ/ Ġn Ġ}. reversed (). toDouble Array () ĊĠĠĠĠĠĠĠ Ġ) Ġto ĠPol yn om () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠÐĶ ÐµÐ» ÐµÐ½Ð¸Ðµ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠÐŁ ÑĢÐ¾ ĠÐ¾Ð¿ ÐµÑĢ Ð°ÑĨÐ¸Ð¸ ĠÐ´ ÐµÐ» ÐµÐ½Ð¸Ñı ĠÐ¸ ĠÐ² Ð· Ñı ÑĤÐ¸ Ñı ĠÐ¾ ÑģÑĤ Ð°ÑĤ ÐºÐ° ĠÑģÐ¼ . ĠÑģÑĤ Ð°ÑĤÑĮ Ñİ ĠÐĴ Ð¸ ÐºÐ¸ Ð¿ ÐµÐ´ Ð¸Ð¸ ĊĠĠĠĠ Ġ* Ġ" ÐĶ ÐµÐ» ÐµÐ½Ð¸Ðµ ĠÐ¼ Ð½Ð¾Ð³Ð¾ Ñĩ Ð»ÐµÐ½ Ð¾Ð² ĠÑģÑĤ Ð¾Ð» Ð± Ð¸Ðº Ð¾Ð¼ ". ĠÐŀ Ñģ Ð½Ð¾Ð² Ð½ÑĭÐµ ĠÑģÐ² Ð¾Ð¹ ÑģÑĤÐ²Ð° : ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠÐķÑģÐ»Ð¸ ĠA Ġ/ ĠB Ġ= ĠC ĠÐ¸ ĠA Ġ% ĠB Ġ= ĠD , ĠÑĤÐ¾ ĠA Ġ= ĠB Ġ* ĠC Ġ+ ĠD ĠÐ¸ ĠÑģÑĤ ÐµÐ¿ ÐµÐ½ÑĮ ĠD ĠÐ¼ ÐµÐ½ÑĮ ÑĪÐµ ĠÑģÑĤ ÐµÐ¿ ÐµÐ½Ð¸ ĠB ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoperator Ġfun Ġdiv ( other : ĠPol yn om ): ĠPol yn om Ġ= Ġdivide ( other ). first ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠÐĴ Ð· Ñı ÑĤÐ¸ Ðµ ĠÐ¾ ÑģÑĤ Ð°ÑĤ ÐºÐ° ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoperator Ġfun Ġrem ( other : ĠPol yn om ): ĠPol yn om Ġ= Ġdivide ( other ). second ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠÐ¡ ÑĢÐ°Ð² Ð½ ÐµÐ½Ð¸Ðµ ĠÐ½Ð° ĠÑĢÐ°Ð ² ÐµÐ½ ÑģÑĤÐ² Ð¾ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( other Ġ! is ĠPol yn om ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġreturn Ġcoeff List Ġ== Ġother . coeff List ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠÐŁ Ð¾Ð» ÑĥÑĩ ÐµÐ½Ð¸Ðµ ĠÑħ ÐµÑĪ - Ðº Ð¾Ð´Ð° ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠhashCode () Ġ= Ġcoeff List . hashCode () Ċ } Ċ