السلام عليكم،
أردت تحدي نفسي فكتبت صفرة تنتج عددا طبيعيا من مؤشر إلى حرف (إي من سلسلة أحرف). ترجمت الصفرة إلى سي كي أتأكد منها (لأنه للأسف الخوارزم تقول لك العلل ولا تذكر موقعه، وأحيانا العلل لا يذكر أبدا!) فكانت الصفرة تنتج عددا مثل ما توقعت. ولكن في الخوارزم البرنامج يصطدم (crashes). تمكنت من معرفت المشكلة من خلال الطرفة (نعم! الطرفة لها فائدة عظيمة!) واستعملت الطرفية لأنها لا تصطدم، حيث يستطيع المستخدم إيقاف البرنامج باستخدام (CTRL + C)، والمشكلة تكمن هنا:
(۩ إبدأ من نهاية النص (إي من الآحاد) ۩)
لاجل ف := طول_العدد - 1_ط؛ ف >= 0؛ ف-- {
العدد +:= إلى_رقم(العدد_النصي[ف]) × المضروب؛
اكتب("قيمة ف: ")؛
اكتب(ف)؛
اكتب('/س')؛
المضروب ×:= 10؛
}
و هنا الناتج الموجودة في الطرفية:

فنستطيع أن نلاحظ أن الخوارزم يجهل الشرط. لماذا؟
تعديـــل: أعلم أن للخوارزم بعض المكتبيات التي تقوم بشيء مشابه، ولكن هذا لا ينفي أن المشكلة هنا قد تكون عللا كبيرا. وأيضا، فإن الصفرة تنجح إذا ما نزعت الجزئية الموجودة في الدالة ووضعتها في دالة الاصل
هكذا:
استعمل الخوارزم.وسائط.شاشة؛
الدالة إلى_رقم (رقم_نصي حرف) صحيح {
المتغير أرقام [10] حرف := ['0'، '1'، '2'، '3'، '4'، '5'،' 6'، '7'، '8'، '9']؛
المتغير ف صحيح؛
المتغير رقم صحيح؛
لاجل ف := 0؛ ف كما صحيح طبيعي < طول(أرقام)؛ ف++ {
اذا أرقام[ف] = رقم_نصي {
رقم := ف؛
}
}
ارجع رقم؛
}
الدالة الاصل() {
المتغير ف صحيح := 0؛
المتغير عدد صحيح := 0؛
المتغير العدد_النصي ۢحرف := "200"؛
المتغير المضروب صحيح := 1؛
لاجل ف := 2؛ ف >= 0؛ ف-- {
اكتب(إلى_رقم(العدد_النصي[ف]))؛
العدد +:=إلى_رقم(العدد_النصي[ف]) × المضروب؛
المضروب ×:= 10؛
اكتب('/س')؛
}
اكتب(العدد + 10)؛
}
فالصفرة هذه تكتب 210
، إي تعمل! وكل ما قمت به هو تحريك موضع الجزيئة، فالعلل لابد أن يكون من المترجم نفسه!