مقالات

5.2: خوارزمية القسمة


عندما نقسم عددًا صحيحًا موجبًا (المقسوم) على عدد صحيح موجب آخر (المقسوم عليه) ، نحصل على حاصل القسمة. نضرب حاصل القسمة في المقسوم عليه ، ونطرح الناتج من المقسوم للحصول على الباقي. ينتج عن هذا التقسيم نتيجتين: حاصل القسمة والباقي.

هذه هي الطريقة التي نقسم بها عادة 23 على 4:

[ يتطلب {تضمين}
ابدأ {مجموعة} {rll}
5 && [- 3pt]
4 أرفق {longdiv} {23} kern-.2ex [- 3pt]
تسطير { phantom {0} 20} && [- 3pt]
الوهمية {00} 3
نهاية {مجموعة} غير رقم ]

بشكل عام ، يأخذ القسم (b div a ) الشكل

[ يتطلب {تضمين}
ابدأ {مجموعة} {rll}
q && [- 3pt]
أ أرفق {longdiv} { phantom {0} b} kern-.2ex [- 3pt]
تسطير { phantom {0} aq} && [- 3pt]
الوهمية {00} ص
نهاية {مجموعة} غير رقم ]

بحيث (r = b-aq ) ، أو ما يعادله ، (b = aq + r ). بالطبع ، كلا من (q ) و (r ) عدد صحيح. ومع ذلك ، فإن "الأقسام" التالية

[{ تتطلب {تضمين} تبدأ {مجموعة} {rll}
4 && [- 3pt]
4 أرفق {longdiv} {23} kern-.2ex [- 3pt]
تسطير { phantom {0} 16} && [- 3pt]
الوهمية {00} 7
نهاية {مجموعة}} { تتطلب {تضمين}
ابدأ {مجموعة} {rll}
2 && [- 3pt]
4 أرفق {longdiv} {23} kern-.2ex [- 3pt]
تسطير { phantom {0} 8} && [- 3pt]
الوهمية {00} 15
نهاية {مجموعة}} { تتطلب {تضمين}
ابدأ {مجموعة} {rll}
6 && [- 3 نقطة]
4 أرفق {longdiv} {23} kern-.2ex [- 3pt]
تسطير { phantom {0} 24} && [- 3pt]
الوهمية {00} -1
نهاية {مجموعة}} { تتطلب {تضمين}
ابدأ {مجموعة} {rll}
7 && [- 3 نقطة]
4 أرفق {longdiv} {23} kern-.2ex [- 3pt]
تسطير { phantom {0} 28} && [- 3pt]
الوهمية {00} -5
نهاية {مجموعة}} غير رقم ]

تلبي أيضًا المتطلبات (b = aq + r ) ، لكن هذا ليس ما نفعله عادةً. هذا يعني أن وجود (b = aq + r ) وحده لا يكفي لتحديد حاصل القسمة والباقي. نحن بحاجة إلى تعريف أكثر صرامة.

النظرية ( PageIndex {1} label {thm: divalgo} )

بالنظر إلى أي أعداد صحيحة (a ) و (b ) ، حيث (a> 0 ) ، توجد أعداد صحيحة (q ) و (r ) مثل [b = aq + r ، غير رقم ] حيث (0 leq r

الأعداد الصحيحة (ب ) و (أ ) و (ف ) و (ص ) تسمى توزيعات ارباح, المقسوم عليه, حاصل القسمة، و بقية، على التوالى. لاحظ أن (b ) هو أحد مضاعفات (a ) إذا وفقط إذا (r = 0 ).

تصف خوارزمية القسمة ما يحدث في القسمة المطولة. بالمعنى الدقيق للكلمة ، إنها ليست خوارزمية. تصف الخوارزمية إجراءً لحل مشكلة ما. لا تخبرنا النظرية كيف للعثور على حاصل القسمة والباقي. يفضل بعض علماء الرياضيات تسميتها نظرية القسمة. هنا ، نتبع التقليد ونطلق عليه خوارزمية القسمة.

ملاحظة

هذه هي الخطوط العريضة للإثبات:

  1. صف كيفية العثور على الأعداد الصحيحة (q ) و (r ) بحيث (b = aq + r ).
  2. أظهر أن اختيارنا لـ (r ) يرضي (0 leq r
  3. قم بتأسيس تفرد (q ) و (r ).

فيما يتعلق بالجزء الأخير من الإثبات: لإثبات أن عددًا معينًا (س ) محدد بشكل فريد ، فإن النهج النموذجي هو افتراض أن (س ') هو خيار آخر يفي بالشرط المحدد ، وإظهار أنه يجب علينا لديك (س = س ').

دليل

نظهر أولاً وجود (q ) و (r ). دعونا [S = {b-ax mid x in mathbb {Z} mbox {and} b-ax geq 0 }. nonumber ] من الواضح أن (S ) عبارة عن مجموعة من الأعداد الصحيحة غير السالبة. لكي نتمكن من تطبيق مبدأ الترتيب الجيد ، نحتاج إلى إظهار أن (S ) غير فارغ. هنا دليل بناء.

نظرًا لأن (S ) غير فارغ ، فإنه يتبع من مبدأ الترتيب الجيد أن (S ) يحتوي على أصغر عنصر. نسميها (r ). من تعريف (S ) ، يوجد عدد صحيح (q ) مثل (b - aq = r ).

الخطوة 2: أظهر أن r يفي بالمعيار (0 leq r

بعد ذلك ، نظهر أن (0 leq r

لذلك (t في S ). الآن (t = r - a

أخيرًا ، يتعين علينا إثبات تفرد كل من (q ) و (r ). لنفترض أن (q ') و (r' ) أعداد صحيحة مثل [b = aq '+ r'، qquad 0 leq r '

نظرًا لأن (S ) غير فارغ ، فإنه يتبع من مبدأ الترتيب الجيد أن (S ) يحتوي على أصغر عنصر. من تعريف (S ) ، يوجد عدد صحيح (q ) مثل (b-aq = r ).

بعد ذلك ، نظهر أن (0 leq r

يجب ألا تواجه أي مشكلة في قسمة عدد صحيح موجب على عدد صحيح موجب آخر. هذا هو نوع القسمة المطولة التي نقوم بها عادة. يعتبر قسمة عدد صحيح سالب على عدد صحيح موجب أكثر صعوبة. عندما يكون (b ) سالبًا ، سيكون حاصل القسمة (q ) سالبًا أيضًا ، لكن يجب أن يكون الباقي (r ) غير سلبي. بطريقة ما ، (r ) هو العامل الحاسم: نختار (q ) بحيث يفي الباقي (r ) بالشرط (0 leq r

بشكل عام ، لأي عدد صحيح (ب ) ، ينتج عن قسمة (ب ) على (أ ) عددًا عشريًا. إذا لم تكن النتيجة عددًا صحيحًا ، فقربها أسفل إلى العدد الصحيح الأصغر التالي (انظر مثال 6.1.3). هو حاصل القسمة (q ) الذي نريده ، والباقي (r ) يتم الحصول عليه من الطرح (r = b-aq ). على سبيل المثال ، [ frac {-22} {؛ ؛ 7} = -3.1428 ldots ،. nonumber ] التقريب لأسفل ينتج حاصل القسمة (q = -4 ) والباقي (r = -22-7 (-4) = 6 ) ؛ ولدينا (- 22 = 7 cdot (-4) +6 ).

تمرين عملي ( PageIndex {1} label {he: divalgo-01} )

احسب القسمة (q ) والباقي (r ) عند قسمة (ب ) على (أ ):

  1. (ب = 128 ) (أ = 7 )
  2. (ب = -128 ) (أ = 7 )
  3. (ب = -389 ) (أ = 16 )

تأكد من التحقق من ذلك (b = aq + r ).

يمكن تعميم خوارزمية القسمة على أي عدد صحيح غير صفري (أ ).

النتيجة الطبيعية ( PageIndex {2} label {cor: divalgo} )

بالنظر إلى أي أعداد صحيحة (a ) و (b ) مع (a neq 0 ) ، توجد أعداد صحيحة محددة بشكل فريد (q ) و (r ) بحيث (b = aq + r ) ) ، حيث (0 leq r <| a | ).

دليل

علينا فقط النظر في حالة (a <0 ). منذ (- a> 0 ) ، تضمن الخوارزمية الإقليدية الأصلية وجود أعداد صحيحة محددة بشكل فريد (q ') و (r ) مثل [b = (-a) cdot q' + r ، nonumber ] حيث (0 leq r <-a = | a | ). لذلك ، يمكننا تعيين (q = -q ').

مثال ( PageIndex {1} label {eg: divalgo-01} )

لا تحسب كل آلة حاسبة أو برنامج كمبيوتر (q ) و (r ) بالطريقة التي نريدها في الرياضيات. الحل الأكثر أمانًا هو حساب (| b | div | a | ) بالطريقة المعتادة ، وفحص الباقي لمعرفة ما إذا كان يناسب المعيار (0 leq r <| a | ). إذا لزم الأمر ، اضبط قيمة (q ) بحيث يلبي الباقي (r ) المتطلبات (0 leq r <| a | ). إليك بعض الأمثلة: [ start {array} {| r | r | r @ {؛ = ؛} l | r | r |} hline b & a & b & aq + r & q & r خط 14 & 4 & 14 & 4 cdot3 + 2 & 3 & 2 -14 & 4 & -14 & 4 cdot (-4) +2 & -4 & 2 -17 & -3 & -17 & (-3) cdot6 + 1 & 6 & 1 17 & -3 & 17 & (-3) cdot (-5) +2 & -5 & 2 hline end {array} لا يوجد رقم]

يمكن أن يكون حاصل القسمة (q ) موجبًا أو سالبًا ، والباقي (r ) دائمًا غير سالب.

تعريف

بالنظر إلى الأعداد الصحيحة (a ) و (b ) ، مع (a neq 0 ) ، دعنا (q ) و (r ) تشير إلى الأعداد الصحيحة الفريدة مثل (b = aq + r ) ، حيث (0 leq r <| a | ). تحديد الثنائية عوامل التشغيل ( mathrm {div} ) و ( bmod ) على النحو التالي:

لذلك ، يعطي (b ~ mathrm {div} ~ a ) حاصل القسمة ، و (b bmod a ) ينتج باقي القسمة الصحيحة (b div a ). تذكر أن (b ~ mathrm {div} ~ a ) يمكن أن يكون موجبًا أو سالبًا أو حتى صفرًا. لكن (b bmod a ) دائمًا عدد صحيح غير سالب أقل من (| a | ).

مثال ( PageIndex {2} label {eg: divalgo-02} )

من المثال الأخير لدينا

لا تنس التحقق من الحسابات وتذكر أن (أ ) لا يجب أن تكون إيجابية.

تمرين عملي ( PageIndex {2} label {he: divalgo-02} )

ملء الجدول التالي:

[ start {array} {| r | r | r | r |} hline b & a & b ~ mathrm {div} ~ a & b bmod a hline 334 & 15 & qquad qquad & qquad qquad 334 & -15 & & -334 & 15 & & -334 & -15 & & hline end {array} nonumber ] لا تنس: (b bmod a ) دائمًا غير سالب.

مثال ( PageIndex {3} label {eg: divalgo-03} )

لنكن (n ) عددًا صحيحًا بحيث [n ~ mathrm {div} ~ 6 = q، qquad mbox {and} qquad n bmod6 = 4. nonumber ] تحديد قيم ( (2n + 5) ~ mathrm {div} ~ 6 ) و ((2n + 5) bmod6 ).

المحلول

المعلومات المقدمة تعني أن (n = 6q + 4 ). ثم [2n + 5 = 2 (6q + 4) +5 = 12q + 13 = 6 (2q + 2) +1. nonumber ] لذلك ، ((2n + 5) ~ mathrm {div} ~ 6 = 2q + 2 ) ، و ((2n + 5) bmod6 = 1 ).

تمرين عملي ( PageIndex {3} label {he: divalgo-03} )

لنكن (n ) عددًا صحيحًا بحيث [n ~ mathrm {div} ~ 11 = q، qquad mbox {and} qquad n bmod11 = 5. nonumber ] حساب قيم ( (6n-4) ~ mathrm {div} ~ 11 ) و ((6n-4) bmod11 ).

مثال ( PageIndex {4} label {eg: divalgo-04} )

افترض أن اليوم الأربعاء. أي يوم من أيام الأسبوع هو بعد عام من الآن؟

المحلول

يشير إلى الأحد ، الاثنين ، ... ، السبت باعتباره اليوم 0 ، 1 ، ... 6 ، على التوالي. اليوم هو اليوم الثالث. السنة (بافتراض 365 يومًا في السنة) من اليوم ستكون اليوم 368. نظرًا لأن [368 = 7 cdot52 + 4 ، nonumber ] سيكون اليوم الرابع من الأسبوع. لذلك ، ستكون سنة من اليوم الخميس.

تمرين عملي ( PageIndex {4} label {he: divalgo-04} )

افترض اليوم الجمعة. أي يوم من أيام الأسبوع هو 1000 يوم من اليوم؟

أي عدد صحيح مقسومًا على 7 سينتج الباقي بين 0 و 6 ، ضمناً. حدد [A_i = {x in mathbb {Z} mid x bmod 7 = i } quad mbox {for} 0 leq i leq 6، nonumber ] التي نجدها [ mathbb {Z} = A_0 cup A_1 cup A_2 cup A_3 cup A_4 cup A_5 cup A_6، nonumber ] حيث توجد المجموعات (A_i ) زوجي مفكك. تسمى مجموعة المجموعات [ {A_0، A_1، A_2، A_3، A_4، A_5، A_6 } nonumber ] تقسيم من ( mathbb {Z} ) ، لأن كل عدد صحيح ينتمي إلى مجموعة واحدة فقط من هذه المجموعات الفرعية السبع. نقول أيضًا أن ( mathbb {Z} ) هو ملف اتحاد مفكك من (A_0، A_1، ldots، A_6 ). تنطبق نفس الوسيطة أيضًا على القسمة على أي عدد صحيح (n geq2 ).

بشكل عام ، تسمى مجموعة أو عائلة من المجموعات المحدودة ( {S_1، S_2، ldots، S_n } ) قسم المجموعة (S ) إذا كان (S ) هو الاتحاد المنفصل لـ (S_1 ، S_2 ، ldots ، S_n ). يعد التقسيم مفهومًا مهمًا للغاية ، لأنه يقسم عناصر (S ) إلى (n ) فئات (S_1 ، S_2 ، ldots ، S_n ) بحيث ينتمي كل عنصر من (S ) إلى فئة فريدة. سنعود إلى التقسيم مرة أخرى عندما ندرس العلاقات في الفصل السابع.

ملخص ومراجعة

  • يمكن أن تمتد قسمة الأعداد الصحيحة إلى الأعداد الصحيحة السالبة.
  • بالنظر إلى أي عدد صحيح (b ) وأي عدد صحيح غير صفري (a ) ، توجد أعداد صحيحة محددة بشكل فريد (q ) و (r ) مثل (b = aq + r ) ، حيث ( 0 leq r <| a | ).
  • نسمي (q ) حاصل القسمة و (r ) الباقي.
  • السبب الذي يجعلنا نمتلك خيارات فريدة لـ (q ) و (r ) هو المعيار الذي نضعه على (r ). يجب أن تفي بالمتطلبات (0 leq r <| a | ).
  • في الواقع ، المعيار (0 leq r <| a | ) هو العامل الأكثر أهمية في اختيارنا لـ (q ) و (r ).
  • نحدد عمليتين ثنائيتين على الأعداد الصحيحة. تنتج العملية ( mathrm {div} ) حاصل القسمة ، وتنتج العملية ( bmod ) باقي القسمة الصحيحة (b div a ). بمعنى آخر ، (b ~ mathrm {div} ~ a = q ) و (b bmod a = r ).

تمارين 5.2

تمرين ( PageIndex {1} label {ex: divalgo-01} )

ابحث عن (b ~ mathrm {div} ~ a ) و (b bmod a ) ، أين

  1. (أ = 13 ) (ب = 300 )
  2. (أ = 11 ) (ب = -120 )
  3. (أ = -22 ) (ب = 145 )

تمرين ( PageIndex {2} label {ex: divalgo-02} )

ابحث عن (b ~ mathrm {div} ~ a ) و (b bmod a ) ، أين

  1. (أ = 19 ) (ب = 79 )
  2. (أ = 59 ) (ب = 18 )
  3. (أ = 16 ) (ب = -823 )
  4. (أ = -16 ) (ب = 172 )
  5. (أ = - 8 ) (ب = - 67 )
  6. (أ = -12 ) (ب = -134 )

تمرين ( PageIndex {3} label {ex: divalgo-03} )

أثبت أن [b bmod a in {0،1،2، ldots، | a | -1 } nonumber ] لأي أعداد صحيحة (a ) و (b ) ، حيث ( أ neq0 ).

تمرين ( PageIndex {4} label {ex: divalgo-04} )

أثبت أنه من بين أي ثلاثة أعداد صحيحة متتالية ، واحد منهم هو مضاعف 3.

تلميح

دع الأعداد الصحيحة الثلاثة تكون (n ) ، (n + 1 ) ، و (n + 2 ). ما هي القيم الممكنة لـ (n bmod3 )؟ إلى ماذا يترجم هذا وفقًا لخوارزمية القسمة؟ في كل حالة ، كيف سيبدو (n ) و (n + 1 ) و (n + 2 )؟

تمرين ( PageIndex {5} label {ex: divalgo-05} )

إثبات أن (n ^ 3-n ) دائمًا من مضاعفات 3 لأي عدد صحيح (n ) من خلال

  1. تحليل حالة بحالة.
  2. تحليل (n ^ 3-n ).

تمرين ( PageIndex {6} label {ex: divalgo-06} )

أثبت أن المجموعة ( {n، n + 4، n + 8، n + 12، n + 16 } ) تحتوي على مضاعفات 5 لأي عدد صحيح موجب (n ).

تمرين ( PageIndex {7} label {ex: divalgo-07} )

لنفترض أن (m ) و (n ) أعداد صحيحة بحيث [m ~ mathrm {div} ~ 5 = s ، qquad m bmod5 = 1 ، qquad n ~ mathrm {div} ~ 5 = ر ، qquad n bmod5 = 3. nonumber ] تحديد

  1. ((m + n) ~ mathrm {div} ~ 5 )
  2. ((م + ن) bmod5 )
  3. ((مليون) ~ ماذرم {div} ~ 5 )
  4. ((مليون) bmod5 )

تمرين ( PageIndex {8} label {ex: divalgo-08} )

لنفترض أن (m ) و (n ) أعداد صحيحة بحيث [m ~ mathrm {div} ~ 8 = s ، qquad m bmod8 = 3 ، qquad n ~ mathrm {div} ~ 8 = ر ، qquad n bmod8 = 6. nonumber ] تحديد

  1. ((م + 2) ~ ماذرم {div} ~ 8 )
  2. ((م + 2) bmod8 )
  3. ((3mn) ~ mathrm {div} ~ 8 )
  4. ((3 مليون) bmod8 )
  5. ((5 م + 2 ن) ~ ماذرم {div} ~ 8 )
  6. ((5 م + 2 ن) bmod8 )
  7. ((3m-2n) ~ mathrm {div} ~ 8 )
  8. ((3 م -2 ن) bmod8 )

خوارزمية التقسيم

واحدة من أهم النظريات التي لا تحظى بالتقدير الكافي هي خوارزمية القسمة. يمكنك العثور عليها عادة في أي كتاب عن نظرية الأعداد كنظرية 1. يمكن العثور على دليل خوارزمية القسمة للأعداد الصحيحة هنا.

تنص على أنه بالنسبة لأي عدد صحيح وغير مقسوم عليه ، يوجد رقمان صحيحان فريدان: حاصل القسمة والباقي حيث يكون الباقي أصغر من المقسوم عليه.

ربما لا يتم تقدير هذه النظرية لأنها واضحة جدًا. لا يبدو على السطح أن هناك ما يثير الدهشة في هذا البيان. وبالمثل ، فإن الدليل ، عندما يُرى لأول مرة ، قد يبدو للهواة وكأنه تمرين في الظاهر.

تعتمد خوارزمية القسمة القياسية للأعداد الصحيحة المنطقية (الأعداد الصحيحة الموجبة والسالبة) على مبدأ الترتيب الجيد.

ومع ذلك ، هناك خواص دقيقة بخصوص هذه النظرية لها آثار مهمة على نظرية الأعداد. ضع في اعتبارك الموقف الذي نضيف فيه أرقامًا تخيلية (الأرقام التي يكون فيها -1 لها جذرًا تربيعيًا يُعرف بـ i ، أي i 2 = -1.

عندما ينظر عالم الرياضيات إلى مشكلة مثل x 2 + y 2 ، سيكون من الملائم حقًا أن تكون هناك طريقة سهلة لحلها. إذا قمنا بتوسيع الأعداد الصحيحة لتشمل Z [i] ، فيمكننا ذلك. في هذه الحالة ، لدينا العامل التالي (ملاحظة: يتم استخدام Z [i] لتعريف مجموعة ممتدة من الأعداد الصحيحة. هذه هي الأعداد الصحيحة التي لها الشكل a + bi حيث a ، b هي أعداد صحيحة منطقية):

ثم يطرح السؤال ، هل الأعداد الصحيحة من النوع Z [i] مرتبة بواسطة خوارزمية القسمة؟ إذا كانت كذلك ، فنحن بحاجة إلى دليل جديد لأن مبدأ حسن الترتيب ينطبق فقط على الأعداد الصحيحة المنطقية.

يتطلب المسار إلى خوارزمية القسمة إدخال وظيفة خاصة تُعرف باسم القاعدة. وهي تنطبق على أي قيمة Z [α] حيث تكون α 2 عددًا صحيحًا منطقيًا (مثل i). يعتمد على هوية بسيطة للغاية:

بما أننا نعلم أن α 2 عدد صحيح نسبيًا ، فنحن نعلم أن هناك قيمة c مثل أن c = α 2.

لذا ، لنفترض أن لدينا عددًا صحيحًا بالشكل a + bα. إذا ضربناها بمرافقها (قيمة مكافئة حيث قمنا بتغيير العلامة) ، فسنحصل على:

إذا كانت لدينا قيمة a - bα ، فسيكون مرافقها a + bα. في كلتا الحالتين ، وجدنا دالة تقوم بتعيين أي عدد صحيح من Z [α] إلى عدد صحيح منطقي.

مع وجود هذه الوظيفة ، يمكننا إثبات أنه بالنظر إلى أي عدد صحيح غاوسي وغير مقسوم عليه ، توجد قيمتان فريدتان: حاصل القسمة والباقي حيث تكون القاعدة المطلقة للباقي أصغر من القاعدة المطلقة للمقسوم عليه. هنا الدليل.

قد نسأل عما إذا كنا سنجد دائمًا خوارزمية قسمة لجميع القيم الممكنة لـ α.

دعونا نفكر في هذا السؤال فيما يتعلق بالأعداد الصحيحة التربيعية. هذه هي الأعداد الصحيحة من الشكل Z [α] حيث α هي حل غير منطقي لمعادلة على شكل x 2 + bx + c = 0 حيث x = α و b ، c هي أعداد صحيحة منطقية (الرقم غير النسبي هو أي رقم لا يساوي كسرًا منطقيًا. على سبيل المثال -3/4 عقلاني لأنه نسبة -3 إلى 4. أنا من ناحية أخرى ليس عقلانيًا).

في هذه الحالة ، اتضح أنه لا يوجد سوى 21 قيمة غير مربعة مختلفة حيث تحتوي Z [α] على خوارزمية قسمة (حسب غير مربعة ، أقوم باستبعاد قيم مثل Z [& # 8730 -4] لأن 4 مربع من 2 و & & # 8730 -4 = 2i.

تستند القيم 21 إلى: -11 ، -7 ، -3 ، -2 ، -1 ، 2 ، 3 ، 5 ، 6 ، 7 ، 11 ، 13 ، 17 ، 19 ، 21 ، 29 ، 33 ، 37 ، 41 ، 57 و 73.

الآن ، إليك واحدة أخرى من التفاصيل الدقيقة. اتضح أن شكل هذا العدد الصحيح يعتمد على الباقي عند قسمة الرقم على 4. إذا كان الباقي أي قيمة عدا 1 ، فإن النموذج يكون بسيطًا: Z [& # 8730 -2] ، Z [i] ، Z [& # 8730 2] ، Z [& # 8730 3] ، Z [& # 8730 6] ، Z [& # 8730 7] ، Z [& # 8730 11] ، Z [& # 8730 19].

إذا كان الباقي مع 4 هو 1 ، فإن القيمة تأخذ شكلًا غريبًا: Z [(- 1 + & # 8730 -11) / 2] ، Z [(- 1 + & # 8730 -7) / 2] ، Z [ (-1 + & # 8730 -3) / 2] ، Z [(- 1 + & # 8730 5) / 2] ، Z [(- 1 + & # 8730 13) / 2] ، Z [(- 1 + & # 8730 17) / 2] ،
Z [(- 1 + & # 8730 21) / 2] ، Z [(- 1 + & # 8730 29) / 2] ، Z [(- 1 + & # 8730 33) / 2]. يمكن العثور على تفاصيل سبب وجود هذه القيم على هذا النموذج هنا.

يمكن العثور على الدليل على أن العديد من هذه القيم تتميز بخوارزمية القسمة هنا.


تطبيقات العالم الحقيقي

الآن بعد أن أصبح لديك فهم لخوارزمية القسمة ، يمكنك تطبيق معرفتك لحل المشكلات التي تتضمن خوارزمية القسمة. لنبدأ بوضع المثال في أعلى هذه الصفحة:

دعونا نلقي نظرة على أمثلة ومشكلات أخرى مثيرة للاهتمام لفهم المفاهيم بشكل أفضل:

هناك 24 ساعة في يوم كامل. كم عدد الأيام الكاملة المضمنة في 2500 ساعة؟

للحصول على عدد الأيام في 2500 ساعة ، نحتاج إلى قسمة 2500 على 24. ومن ثم ، باستخدام خوارزمية القسمة يمكننا القول ذلك

2500 = 24 × 104 + 4. 2500 = 24 × 104 + 4. 2 5 0 0 = 2 4 × 1 0 4 + 4.

بما أن حاصل القسمة هنا هو 104 ، يمكننا القول أن 2500 ساعة تتكون من 104 أيام كاملة. □ _ مربع □

قال رجل حكيم: أوقية الممارسة تساوي أكثر من طن من الوعظ! لذلك دعونا نتدرب ونحل المشكلات التالية:

(افترض أن) اليوم هو يوم جمعة. عيد ميلاد كالفن بعد 123 يومًا. كم عدد أيام الآحاد بين اليوم وعيد ميلاد كالفن؟

كم عدد مضاعفات العدد 7 بين 345 و 563 ضمناً؟


أسئلة مشابهة

كود مزيف

اكتب خوارزمية ورمز زائف يمثل برنامجًا يسمح للمستخدم بإدخال رقمين. يجب أن يحسب برنامجك المجموع والفرق (كلا الاتجاهين) والمنتج وحاصل القسمة (كلا الاتجاهين) للرقمين.

حساب التفاضل والتكامل

استخدم الخوارزمية لرسم المنحنى لرسم الرسم البياني لكل دالة. أ) f (x) 4x ^ 3 + 6x ^ 2-24x-2 1. أول من اكتشف نقاط التقاطع y = 0 0 = 4x ^ 3 + 6x ^ 2-24x-2 = 2 (2x ^ 3 + 3x ^ 3- 12x-1) لا أعرف كيف أجد تقاطع إكس. لا يمكنني استخدام

ما هو الرقم الذي يجب وضعه في الصندوق للمساعدة في إكمال حساب القسمة؟ إعداد القسمة المطولة يظهر عملية حسابية غير مكتملة. 12 في المقسوم عليه ، و 6839 في المقسوم ، و 5 مئات و 6 عشرات مكتوبة في

قسمة عدد صحيح N على 13 نحصل على خارج القسمة 15 والباقي من 2. أوجد N.

الجزائر 1

حاصل ضرب 6 عدد و 16؟ "الحاصل" هو ما نسميه نتيجة القسمة ، وتسمى نتيجة الضرب حاصل الضرب. لقد استخدمت كلمة "مرات" التي تدل على الضرب. راجع للشغل ، أرفض إخبارك بماذا

قبل حساب التفاضل والتكامل

12. استخدم نظرية الباقي لإيجاد P (-2) لـ P (x) = x ^ 3 + 2x ^ 2-x-7. على وجه التحديد ، اكتب حاصل القسمة والباقي للقسمة المرتبطة وقيمة P (-2). الحاصل =؟ الباقي =؟ ف (-2) =؟

اقتصاديات

تتكون الشركة الكبيرة من قسمين: قسم المنبع وهو المورد الاحتكاري لمدخل ما يكون سوقه الوحيد هو قسم المصب الذي ينتج الناتج النهائي. لإنتاج وحدة واحدة الناتج النهائي ، المصب

الجبر

استخدم القسمة التركيبية لإيجاد حاصل القسمة وباقي: (x ^ 3-7x ^ 2 + 13x + 3) / (x-2)

خوارزمية الكود الزائف

اكتب خوارزمية الكود الزائف والتي: • تحدد متوسط ​​وزن الشخص على مدى سنة معينة. • لكل شهر ، يجب أن تقوم الخوارزمية بإدخال وزن الشخص لذلك الشهر (رقم حقيقي موجب). الخوارزمية الخاصة بك

أجهزة الكمبيوتر

أحتاج إلى خوارزمية تستقبل عنصرين صحيحين من مشغل طرفي ، وتعرض على الشاشة مجموعهما ، وفرقهما ، وحاصل ضربهما. كيف أفعل ذلك؟

ما قبل حساب التفاضل والتكامل

يتم إعطاء اثنين من كثيرات الحدود P و D. استخدم القسمة التركيبية أو الطويلة لقسمة P (x) على D (x) ، وعبر عن حاصل القسمة P (x) / D (x) بالصيغة P (x) D (x) = Q (x) + R ( خ) د (خ). الفوسفور (س) = 6 × 4 - 3 × 3 + 29 × 2 ، د (س) = 3 × 2 + 13

استخدم القسمة المطولة كثيرة الحدود لإيجاد خارج القسمة والباقي عند قسمة 4x 3 −3x 2 −x − 2 على x − 4:


5.2: خوارزمية القسمة

يتم إعطاؤك أعدادًا صحيحة K و M ومصفوفة غير فارغة تتكون من N أعداد صحيحة. كل عنصر في المصفوفة ليس أكبر من M.

يجب تقسيم هذه المصفوفة إلى كتل K من العناصر المتتالية. حجم الكتلة هو أي عدد صحيح بين 0 و N. يجب أن ينتمي كل عنصر في المصفوفة إلى كتلة ما.

مجموع الكتلة من X إلى Y يساوي A [X] + A [X + 1] +. + أ [ص]. مجموع الكتلة الفارغة يساوي 0.

ال مبلغ كبير هو المبلغ الأقصى لأي كتلة.

على سبيل المثال ، يتم إعطاؤك أعدادًا صحيحة K = 3 و M = 5 والمصفوفة A مثل:

أ [0] = 2 أ [1] = 1 أ [2] = 5 أ [3] = 1 أ [4] = 2 أ [5] = 2 أ [6] = 2

يمكن تقسيم المصفوفة ، على سبيل المثال ، إلى الكتل التالية:

  • [2 ، 1 ، 5 ، 1 ، 2 ، 2 ، 2] ، [] ، [] بمبلغ كبير من 15
  • [2] ، [1 ، 5 ، 1 ، 2] ، [2 ، 2] بمجموع كبير 9
  • [2 ، 1 ، 5] ، [] ، [1 ، 2 ، 2 ، 2] بمجموع كبير 8
  • [2 ، 1] ، [5 ، 1] ، [2 ، 2 ، 2] بمجموع كبير يبلغ 6.

الهدف هو تقليل المبلغ الكبير. في المثال أعلاه ، 6 هو الحد الأدنى للمبلغ الكبير.

ذلك ، نظرًا للأعداد الصحيحة K و M والمصفوفة غير الفارغة A التي تتكون من N عددًا صحيحًا ، فإنها تُرجع الحد الأدنى من المجموع الكبير

على سبيل المثال ، بالنظر إلى K = 3 ، M = 5 والمصفوفة A مثل:

أ [0] = 2 أ [1] = 1 أ [2] = 5 أ [3] = 1 أ [4] = 2 أ [5] = 2 أ [6] = 2

يجب أن ترجع الوظيفة 6 ، كما هو موضح أعلاه.

اكتب فعالة خوارزمية للافتراضات التالية:


5.2: خوارزمية القسمة

في هذه المقالة ، سنناقش كيف أن تقنية Divide and Conquer مفيدة وكيف يمكننا حل المشكلة باستخدام نهج تقنية DAC. في هذا القسم ، سوف نناقش كالمواضيع التالية.

  1. يقسم: هذا ينطوي على تقسيم المشكلة إلى بعض المشاكل الفرعية.
  2. يسيطر: مشكلة فرعية عن طريق الاتصال المتكرر حتى تحل المشكلة الفرعية.
  3. يجمع: تم حل المشكلة الفرعية حتى نتمكن من إيجاد حل للمشكلة.
    هي خوارزمية الفرز. تختار الخوارزمية عنصرًا محوريًا ، وتعيد ترتيب عناصر المصفوفة بحيث تنتقل جميع العناصر الأصغر من العنصر المحوري المختار إلى الجانب الأيسر من المحور ، وتتحرك جميع العناصر الأكبر إلى الجانب الأيمن. أخيرًا ، تقوم الخوارزمية بفرز المصفوفات الفرعية بشكل متكرر على يسار ويمين العنصر المحوري. هي أيضًا خوارزمية الفرز. تقسم الخوارزمية المصفوفة إلى نصفين ، ثم تقوم بفرزها بشكل متكرر ثم تدمج النصفين المصنفين في النهاية. تكمن المشكلة في إيجاد أقرب زوج من النقاط في مجموعة من النقاط في المستوى x-y. يمكن حل المشكلة في زمن O (n ^ 2) عن طريق حساب مسافات كل زوج من النقاط ومقارنة المسافات لإيجاد الحد الأدنى. تحل خوارزمية فرق تسد المشكلة في زمن O (nLogn). هي خوارزمية فعالة لضرب مصفوفتين. تحتاج الطريقة البسيطة لضرب مصفوفتين إلى 3 حلقات متداخلة وهي O (n ^ 3). تقوم خوارزمية Strassen & # 8217s بضرب مصفوفتين في وقت O (n ^ 2.8974). هي الخوارزمية الأكثر شيوعًا لـ FFT. إنها خوارزمية فرق تسد والتي تعمل في زمن O (nlogn). يقوم بضرب اثنين ن-الأرقام في الأكثر

الضرب من رقم واحد بشكل عام (وعلى وجه التحديد

متي ن هي قوة 2). لذلك فهي أسرع من الخوارزمية الكلاسيكية التي تتطلب ن 2 من المنتجات المكونة من رقم واحد. لو ن = 2 10 = 1024 ، على وجه الخصوص ، الأعداد الدقيقة هي 3 10 = 59 ، 049 و (2 10) 2 = 1 ، 048 ، 576 ، على التوالي.

ما لا يصلح فرق تسد:

البحث الثنائي هو خوارزمية بحث. في كل خطوة ، تقارن الخوارزمية عنصر الإدخال x بقيمة العنصر الأوسط في المصفوفة. إذا تطابقت القيمتان ، فقم بإرجاع فهرس الوسط. خلاف ذلك ، إذا كان x أقل من العنصر الأوسط ، فإن الخوارزمية تتكرر للجانب الأيسر من العنصر الأوسط ، وإلا تتكرر للجانب الأيمن من العنصر الأوسط. خلافًا للاعتقاد الشائع ، هذا ليس مثالًا على فرق تسد لأن هناك مشكلة فرعية واحدة فقط في كل خطوة (يتطلب فرق تسد أنه يجب أن يكون هناك مشكلتان فرعيتان أو أكثر) وبالتالي فهذه حالة انخفاض و يسيطر.

خوارزمية فرق تسد:

تكرار العلاقة لخوارزمية DAC:
هذه علاقة التكرار للبرنامج أعلاه.

مثال:
للعثور على الحد الأقصى والحد الأدنى للعنصر في مصفوفة معينة.

مقاربة: للعثور على الحد الأقصى والحد الأدنى من عنصر من مصفوفة معينة هو تطبيق لقهر وقهر. في هذه المسألة ، سنجد الحد الأقصى والحد الأدنى من العناصر في مصفوفة معينة. في هذه المشكلة ، نستخدم نهج فرق تسد (DAC) الذي يتكون من ثلاث خطوات فرق ، تسد وتجمع.

للحد الأقصى:
في هذه المشكلة ، نستخدم النهج التعاودي للعثور على الحد الأقصى حيث سنرى أنه لم يتبق سوى عنصرين ، ومن ثم يمكننا بسهولة استخدام الشرط ، أي إذا (a [index]> a [index + 1].)
في سطر البرنامج ، سيضمن الشرط [index] و [index + 1]) وجود عنصرين فقط في اليسار.

إذا (الفهرس> = l-2)
<
إذا (a [index]> a [index + 1])
<
// ([فهرس]
// الآن ، يمكننا القول أن العنصر الأخير سيكون بحد أقصى في مصفوفة معينة.
>
آخر
<
// (a [index + 1]
// الآن ، يمكننا القول أن العنصر الأخير سيكون بحد أقصى في مصفوفة معينة.
>
>

في الحالة المذكورة أعلاه ، قمنا بفحص حالة الجانب الأيسر لمعرفة الحد الأقصى. الآن ، سنرى شرط الجانب الأيمن لإيجاد الحد الأقصى.
دالة تكرارية للتحقق من الجانب الأيمن في الفهرس الحالي للصفيف.

الآن ، سنقارن الشرط ونتحقق من الجانب الأيمن عند الفهرس الحالي لصفيف معين.
في البرنامج المحدد ، سنقوم بتنفيذ هذا المنطق للتحقق من الحالة على الجانب الأيمن في الفهرس الحالي.

// سيكون العنصر الأيمن بحد أقصى.
إذا (a [index]> max)
إرجاع [فهرس]
// max سيكون الحد الأقصى للعنصر في مصفوفة معينة.
آخر
عودة ماكس
>

للحد الأدنى:
في هذه المشكلة ، سنقوم بتنفيذ النهج العودي لإيجاد الحد الأدنى لا. في مصفوفة معينة.

int DAC_Min (int a [] ، int index ، int l)
// وظيفة الاتصال العودية للعثور على الحد الأدنى لا. في مصفوفة معينة.
إذا (الفهرس> = l-2)
// للتحقق من شرط وجود عنصرين في اليسار
ثم يمكننا بسهولة إيجاد الحد الأدنى للعنصر في مصفوفة معينة.
<
// هنا سنتحقق من الحالة
إذا (a [فهرس] & lta [فهرس + 1])
إرجاع [فهرس]
آخر
إرجاع [فهرس + 1]
>

الآن ، سوف نتحقق من الشرط على الجانب الأيمن في مصفوفة معينة.

// استدعاء متكرر للجانب الأيمن في المصفوفة المحددة.
دقيقة = DAC_Min (أ ، فهرس + 1 ، ل)


الآن ، سوف نتحقق من الشرط لإيجاد الحد الأدنى في الجانب الأيمن.

// سيكون العنصر الأيمن هو الحد الأدنى
if (a [index] & ltmin)
إرجاع [فهرس]
// هنا سيكون الحد الأدنى للدقيقة في مصفوفة معينة.
آخر
عودة دقيقة


لماذا تعمل خوارزمية الجذر التربيعي - المنطق وراء ذلك

تشرح هذه المقالة سبب عمل خوارزمية الجذر التربيعي.

لنفترض أننا نريد إيجاد الجذر التربيعي لـ أ. في كل مرة يتم فيها تطبيق الخوارزمية ، تجد رقمًا إضافيًا للجذر التربيعي. هذا يعني أننا نقترب من القيمة الفعلية للجذر التربيعي من الأسفل بعبارة أخرى ، أنه في كل خطوة يكون التقريب دائمًا أقل من أو يساوي القيمة الفعلية للجذر التربيعي.

لو x هو التقريب الموجود في نقطة معينة ، في الجولة التالية نريد إيجاد تقريب أفضل x + ص لهذا السبب x + ص & le & راديك أ . من هذا التفاوت التالي:

يتوافق السطر الأخير مع الخطوة في الخوارزمية حيث يحاول المستخدم قيم مختلفة لـ ص على الخط الفارغ بحيث 2x و شيئا ما مرات شيئا ما أقل من نتيجة الطرح.

لنفترض أننا نحاول إيجاد & Radic 3150 باستخدام خوارزمية الجذر التربيعي التي تشبه القسمة المطولة. في كل جولة من الخوارزمية ، نستخدم زوجًا من الأرقام من العدد وسنجد رقمًا واحدًا للإجابة. في كل جولة نحصل على تقريب أفضل للجذر التربيعي الفعلي.

من الآلة الحاسبة نجد أن & Radic 3150 = 56.12 إلى رقمين عشريين. ستنتج الجولة الأولى من تطبيق الخوارزمية الرقم 5 ، مما يخبرنا أن & Radic 3150 بين 50 و 60. في الجولة الثانية ، سنجد الرقم 6 ، أو بعبارة أخرى ، سنعرف أن & Radic 3150 يقع بين 56 و 57. ستعطينا الجولة الثالثة الرقم العشري 1 ، مما يتيح لنا معرفة أن & Radic 3150 بين 56.1 و 56.2 ، وهكذا.

من الآن فصاعدًا سنركز على جولة واحدة لتطبيق الخوارزمية. لنفترض أننا وجدنا بالفعل الرقم 5 للجذر التربيعي ، ونستخدم الخوارزمية لإيجاد الرقم التالي ص. لاحظ أن ص بين 0 و 9 وأن الرقم 5 يعني أن & Radic 3150 يساوي 50 + شيء ما. يمكننا القول أن & Radic 3150 بين 50 + ص والعدد الصحيح التالي ، وهو 50 + ص + 1. نعلم أن 50 + ص & le & radic 3150 ، ومن ذلك يشتق ذلك


1 إجابة 1

يُعرَّف المجال الإقليدي عادةً على أنه مجال تكامل توجد فيه خوارزمية تقسيم. أيا كان التعريف الذي لديك يجب أن يكون معادلا لهذا. اتضح أن كل مجال إقليدي هو مجال مثالي بدائي ، وكل مجال مثالي بدائي هو مجال عامل فريد ، لكن الاتجاه الآخر لكلا العبارتين خاطئ.

كان لدى أحد المعلقين انطباع بأنك كنت تسأل "دع $ R $ يكون حلقة. ما هي الشروط على $ R $ التي تضمن أن $ R [x] $ لديه خوارزمية قسمة." بالنسبة لهذا السؤال ، الإجابة هي أنه ضروري وكافٍ ليكون $ R $ حقلاً.

بشكل أساسي ، يجب أن تكون قادرًا على تقليل درجة كثير الحدود عبر خوارزمية القسمة ، ولكن نظرًا لأن المصطلح المتبقي لا يمكن أن يؤثر على المعامل الرئيسي ، فهذا يعني أن المعامل الرئيسي $ f (x) $ يجب أن يساوي المعامل الرئيسي $ q (x) g (x) $. يجب أن يكون واضحًا أن هذا ممكن دائمًا إذا وفقط إذا كان $ R $ حقلاً. خلاف ذلك ، يمكنك اختيار المعامل الرئيسي $ f (x) $ ليكون غير قابل للعكس والمعامل الرئيسي $ g (x) $ ليكون عنصرًا لا يقسم المعامل الأول $ f (x) $ .

يتطلب هذا فقط إجراء بعض الملاحظات حول المعايير والدرجات لتحويلها إلى دليل.


11 نصيحة للعمل مع خوارزمية Facebook

رد على جمهورك

While your branded content will never truly be able to compete with anyone’s sister’s new puppy, it’s still very important to prioritize building connections with each person in your audience.

لماذا ا؟ Because the algorithm prioritizes posts from Pages that a user has interacted with in the past. This means that bumping up your reply game is key, whether that’s in Messenger or the comments.

If a person has taken the time to talk to your brand, don’t waste the opportunity: make them feel heard, make them smile, or inspire them to screencap it and send it to their groupchat with the single-tear smile emoji.

Pro tip: Whether you’re a solopreneur or you have a whole team of community managers in place, Hootsuite Inbox makes managing these conversations at scale a lot easier.

Get your audience replying to each other

This tip comes from Facebook itself. Apparently, if a post has triggered a lot of conversation among a user’s friends, the algorithm applies “action-bumping logic” to show that post to the user again.

That means that the most interesting conversation-starters get more reach, in the form of second chances.

The algorithm values content that people want to share and discuss with their friends. (Note that this does not mean that the algorithm wants you to inspire strangers to get into flame wars.)

Aim for love more than likes

For the last few years the algorithm has weighed reaction buttons more heavily than a simple Like. So target emotional reactions in your posts: love, caring, laughter, sadness, anger.

If you’re not sure what’s going to resonate with your audience, a social media sentiment analysis is a great place to start.

Post when your audience is online

You’ve heard this one a thousand times, but we have to stress it again, because Facebook keeps stressing it.

Recency is a key signal. The newest posts go to the top of the news feed.

Of course, all is not lost if a user misses a post (for instance, if they load their newsfeed, but then their boss walks by so they close it) there’s still a chance that they’ll see that post when they log in next: the algorithm’s “unread bumping logic” means that unseen posts will be “added to eligible inventory for this session.”

That said, the easiest win on this list is to schedule your posts to go up at the best time for your Facebook audience.

Skip the algorithm using Facebook Stories

The thing about Facebook Stories is that they aren’t part of the newsfeed. They float above it (literally and figuratively) and they aren’t governed by the algorithm. According to Facebook, they’re also effective at driving traffic: 58% of people say they’ve visited a brand’s website for more information after watching a Story.

What kind of Facebook Stories should you post? According to a study by Facebook, people say they want the following from branded Stories:

  • 52% want Stories that are easy to understand
  • 50% want to see new products
  • 46% want tips or advice

Tend to your branded Facebook Group

The advantage of running a business Facebook Group is that, while it does take some care and feeding, it opens another channel for you to connect with your customers, fans, and community.

It’s also a second channel for important content to reach your audience’s eyes. The Facebook algorithm prioritizes posts from Groups users care about, so a post that gets amplified in a popular Group by enthusiasts and fans is likelier to earn more reach.

Go Live on Facebook

In 2020 everyone was stuck at home and Live video on Facebook in the U.S. jumped by 50%.

Because Live video receives 6x more engagement than regular video, the algorithm really, really likes it. For brands, it takes a bit of know-how, but given the fact that virtual events don’t seem to be going away anytime soon, Live video effectively feeds two birds with one scone.

Become a fave

Did you know that every Facebook user has thirty slots for their favourite Pages and people? Those thirty lucky ducks get an automatic free pass from the algorithm.

This is part of Facebook’s push to let people have more control over what they see. Let your followers know that they can prioritize your content in their own timelines, if they want to.

Pro Tip: This is what is known as a “giant freaking ask,” so approach it with sensitivity. There should be a solid reason for people to prioritize your content, whether that’s because it’s really entertaining, or because it’s truly important they stay informed.

Make longform video that people want to watch

Watch time and completion rate are both crucial ranking signals for video because they indicate that the viewer enjoyed the video enough to watch the whole thing.

In short, the longer you keep people interested, the higher your video post will be scored by the algorithm, and the higher up in the Facebook newsfeed it will appear.

As of 2019, Facebook also scores and prioritizes the following signals for video:

  • Loyalty and intent: videos that people search for and return to
  • Video length and view duration: videos that people watch past the 1-minute mark, and that are longer than 3 minutes
  • Originality: videos that aren’t repurposed from other sources and that have plenty of added value.

Which brings us to our next point:

Don’t post clickbait or misinformation or other evil things

Don’t do it!! Don’t do any of these things, or the algorithm will spite you, and also we at Hootsuite will be really disappointed in you.

  • Links to sites that use scraped or stolen content with no added value
  • Borderline content (a.k.a content that is not quite prohibited but probably should be)
  • Misinformation and fake news and dangerous “cures” or manipulated videos flagged as false by third-party fact-checkers

Expand your reach via your best advocates

Your employees have more credibility and authority with the Facebook algorithm than your brand page does. This is because they have more credibility and authority with their own followers and friends.

Plus, they know the inside scoop on your brand, so what they say can be a lot more meaningful than anything your copywriter comes up with. (Sorry, fellow copywriters.)

Here’s a calculator that crunches the numbers on your employees’ potential reach when they’re empowered to share your brand’s content to their own circles.

Manage your Facebook presence alongside your other social media channels using Hootsuite. From a single dashboard you can schedule posts, share video, engage your audience, and measure the impact of your efforts. Try it free today.


EchoLisp [ edit ]

The plan [ edit ]

The basic idea comes from noting that operands and operators alternate, so the plan is to flip-flop between two states. Similarly, the "shunting" aspect comes from shunting incoming operators to a stack providing that higher-precedence operators already in the stack are passed on first. Notice that stacked operators are sent forth if their precedence is greater than or equal to the incoming operator. This means that a sequence such as 1 + 2 + 3 will be handled as (1 + 2) + 3 rather than first stacking up all the adds. In other words, this is the tie-breaker rule of left-to-right for sequences of equal precedence. Similarly, when the end of the expression is reached, a space is treated as if it were an operator but one with very low precedence so that all stacked operators are rolled forth. Otherwise, the scan would have to be followed by code to flush the stack, an annoying duplication.

To handle the special behaviour for exponentiation whereby 1^2^3 is evaluated right-to-left as 1^(2^3) - contrary to the tiebreaker rule - when the ^ operator is stacked its stacked precedence is made one lower than its precedence when encountered. Thus, if a second ^ is encountered it will not cause its predecessor to be sent forth by the "greater than or equal to" scheme only later, lesser operators will do that. Unfortunately this means that the stack of deferred operators can grow without limit, as for the case of 1^2^3^4^. since the left-to-right rule will not be keeping it down. Otherwise, the height of the stack would be limited by the number of different precedences involved - were it not for bracketing: a sequence such as <[(. )]>will cause escalation too. A different approach to evaluation, and one often followed by humans (especially by those who have used a HP calculator) is to dive into the deepest part of the expression first then back out. For the example 3 + 4*2/(1 - 5)^2^3 that would mean starting with the (1 - 5) and not having the early + waiting on a stack - and, when actually evaluating, the 3 being in the data stack with a long wait for its use. This can be useful on computers calculating with a hardware stack where say the top two elements are in registers (as with the B6700) because less up&down means that more can be done via the registers without the delays of memory access. In doing this it is helpful to have divide-reverse and subtract-reverse operations, or an operation to exchange the top two stack elements. But the resulting sequence of actions would not be RPN style.

A similar trick with the precedences attends the stacking of open brackets as a pseudo-operator with a lower stacked precedence so that when later a closing bracket is found all subsequent operators on the stack (genuine ones, such as +-*/^) will be rolled, and then BALANCEBRA can compare the closing bracket to the possibly long-ago opening bracket. If all is well, the stacked operator will be vanished and the incoming closing bracket not stacked, nor will EMIT be invoked. Further, neither the opening nor closing bracket (encountered when expecting an operand), change the state of expecting an operand next: there is to be no alternation for them.

The task specification is that each token in the text is bounded by spaces. This means that a sequence such as -6 cannot appear so there is no confusion over unary minus versus dyadic minus (as in a - b) and whether or not the hyphen used for both should be interpreted as a part of the number or as an operator applied to a number. Thus, -6^2 might be (-6)^2 or -(6^2) instead. Following the source style of Fortran, this scanner disregards all spaces nor does it require spaces between tokens.

The example expression uses only single-digit numbers, so there was a temptation to employ a DO-loop stepping through the text, but that would require a special flush stage after reaching the end of the text. This could be avoided by having the loop run DO L = 1,LEN(TEXT) + 1 for the extra step, but that would require annoying checks within the loop for L > LEN(TEXT) to prevent out-of-bounds accessing. So, abandon the DO-loop approach and instead allow for surges forward such as for multi-digit numbers - or for multi-character operators (such as <=) or even, for names of variables. However, only integers are allowed for here. The syntax of allowable floating-point numbers is quite complex and a logical function EATREAL(V) requires over a hundred lines, which would swamp the source more directly devoted to the project. It would of course be smaller if no errors were checked for nor complaints made, but testing the backwards logic of the algorithm is quite tricky when it is not working correctly because of mistakes or omissions, so statements of affront were helpful, and would belong in a "production" version anyway.

Having abandoned the idea of a scan-in-place via the introduction of FORASIGN to span the next token, having two calls is not troublesome so the token processing can be done in two successive stages: one for operands, then after the second FORASIGN, another for operators. This in turn allows a GO TO to retry the appropriate stage should bracketing be encountered. Alternatively, the GO TO could be avoided by having a state WANTOPERAND plus a test to select which of the two states is required, followed by a state flip. And for brackets, the state would have to be flipped so that the subsequent flip would not change it. This is too much to pay for the approval of those disliking GO TO statements.

F90 style has been used, in part because of the convenience of shared data and data aggregates such as SYMBOL however, these could be replaced by suitable COMMON statements and data structures can be replaced by a collection of separate variables whose names are structured. The ability to place a subroutine inside another subroutine so as to share local context is likewise a mere convenience.

Source [ edit ]

Results [ edit ]

So that spaces can be seen, texts are marked off via >. < The operator stack is shown as a list of elements upwards, each element being the operator followed by its precedence. Notably, the ( has precedence 3, while ) has 4, while ^ in-the-text has precedence 14 but once on the stack it has precedence 13.

A fuller symbol table [ edit ]

The odd values for the precedences of the operators is driven by the model source being for a compiler able to handle much more complex arithmetic statements involving logical operations, variables, functions (some, like Max(a,b,c. ) with an arbitrary number of parameters), assignment within an expression, and conditionals such as IF condition THEN exp1 ELSE exp2 OWISE exp3 FI - a three-value logic is employed. Similarly, ? stands for a "not a number" and ! for "Infinity". The fuller symbol table is.

The USAGE field is for when there is a request for help, and the response uses the scanner's actual symbol table entries to formulate its assistance, rather than roll forth a separately-prepared wad of text.


شاهد الفيديو: كورس علم التشفير: الدرس 1 خوارزمية القيصر (شهر نوفمبر 2021).