لم أفهم هذا الكود
هذا كود بلغة كوتلن:
fun main(args: Array<String>) { var n:Int var s = 0 do { print("Enter a number one: ") n = readLine()!!.toInt() } while(n<1 || n%2 == 0) for (i in 1 .. n/2+1) { s++ for (k in 1 until (n/2)-i+2) { print(" ") } for (j in 1 .. i*2-1) { if ( j == 1 || j == s*2-1) { print("*") } else { print(" ") } } println() } s = n for (f in 1 .. n/2) { for (k in 1 .. f) { print(" ") } for (j in 1 until ((n/2)+2-f)*2-2) { if(j == 1 || j == s-(f*2)) { print("*") } else { print(" ") } } println() } }
لو افترضنا أن المستخدم أدخل قيمة n = 5
ففي السطر 15:
for (k in 1 until (n/2)-i+2)
نتيجة هذه المعادلة:
(n/2)-i+2
هو 3.5 على فرض أن قيمة i = 1
و أننا في السطر الأول من نتيجة التشغيل.
و بما أن نتيجة هذه المعادلة هي 3.5
فبالتالي يجب أن يطبع الفراغات ثلاث مرات و لكن البرنامج قام بطباعتها مرتين و ليس ثلاث مرات فأين المشكلة؟
وكذلك بالنسبة لهذا الكود، في السطر 39:
for (j in 1 until ((n/2)+2-f)*2-2)
نتيجة هذه المعادلة:
((n/2)+2-f)*2-2
هو 5
على فرض أن قيمة f = 1
وأننا في السطر الرابع من نتيجة التشغيل.
و بما أن نتيجة هذه المعادلة هو 5
فبالتالي يجب أن يطبع الفراغات أو النجوم 4 مرات و لكن البرنامج قام بطباعته 3 مرات و ليس 4 مرات فأين المشكلة؟