Programming Basics SQL HTML CSS JavaScript React Python C++ Java JavaFX Swing Problem Solving English English Conversations Computer Fundamentals Linux Learn Typing

لم أفهم هذا الكود

هذا كود بلغة كوتلن:

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 مرات فأين المشكلة؟

تعليقات 1

أضف تعليق

يجب تسجيل الدخول حتى تتمكن من إضافة تعليق أو رد.