Swift 08 : تطبيقات على ما تم شرحه

Abatherمنذ 8 سنوات

بسم الله الرحمن الرحيم

السلام عليكم ورحمة الله وبركاته

تكلمنا في الموضوع السابق عن المتغيرات و الأنواع و المصفوفات والدوال والجمل الشرطية للغة البرمجة Swift وفي هذا الموضوع سأتطرق لبعض الأمثلة لتوضح بعض النقاط حول كل هذه الأمور.

 

المثال الأول: حفظ أرقام داخل المصفوفة (سنستخدم أرقام من نوع Int):

مصفوفتنا الأولى ستحتوي على مجموعة من الأرقام وسنقوم بإجراء عدد من الأمور على هذه المصفوفة

لنبدأ آولاً بإنشاء المصفوفة:


var numbers : Array<Int> = [12, 2, 5, 8, 17, 13, 4]

بعد أن آنشئنا مصفوفتنا دعونا نتعرف على بعض خصائصها:

حجم المصفوفة :


var size = numbers.capacity

capacity : هي دالة تستخدم للإستعلام عن حجم المصفوفة حيث تقوم بإعادة رقم من نوع Int

كما هو ملاحظ لقد قمنا بتخزين حجم المصفوفة داخل المتغير size.

 

- عناوين عناصر المصفوفة:

مصفوفتنا لديها 7 عناصر لذلك حجمها هو 7.

أما عناوين العناصر فتبدأ من 0 وتنتهي عند 6 (عنوان آخر عنصر هو حجم المصفوفة -1).

 

- تخزين أحد عناصر المصفوفة داخل متغير:

لكي نقوم بتخزين أحد عناصر المصفوفة داخل متغير علينا أن ننتبه لأمر واحد ومهم وهو أن يكون نوع المتغير هو نفسه نوع عناصر المصفوفة لكي لا نواجه أي خطأ (يفضل أن لا أحدد نوع المتغير وأترك Swift يحدده لي تلقائياً لتفادي أي خطأ)



var numberAt2 : Int = numbers[2]

var numberAt5 = numbers[5]

في السطر الأول قمنا بتحديد نوع المتغير Int أما في السطر الثاني فتركنا الأمر لـ Swift وهو الأمر الأسلم

لنفرض أننا قمنا بإعطاء المتغير نوع يختلف عن نوع المصفوفة ماذا سيحدث؟!


var numberAt3 : Double = numbers[4]

في مثالنا هذا ظهر لنا الخطأ التالي:

error: cannot convert value of type 'Int' to specified type 'Double'

خطأ: لا يمكن تحويل المتغير من نوع int إلى متغير من نوع Double

لنفرض بأننا نريد أن نقوم بتخزين العنصر من المصفوفة داخل المتغير من نوع Double ما هو الحل؟!

الحل بسيط كل ما علينا فعله: اسم النوع (المتغير)، عندها سيتم التحويل من نوع الى آخر.


var numberAt3 : Double = Double(numbers[3])

كما هو واضح هنا فإن المتغير numberAt3 هو متغير من نوع Double بينما مصففوتنا نوع المتغيرات بها هي من نوع Int

قما بتغير نوع العنصر في المصفوفة إلى Double قبل إعطاء القيمة للمتغير numberAt3 

 

ماذا لو آردنا تخزن مجموع عنصرين أو أكثر من المصفوفة داخل متغير؟!


var numberAt4pAt6 = numbers[4] + numbers[6]

بهذه البساطة وهذا ينطبق على جميع العمليات الأخرى من ضرب وطرح وقسمة.

 

لكن ماذا لو آردنا مجموع جميع العناصر بالمصفوفة؟!


var sum = 0

for i in numbers{
    sum = sum + i
}

هنا يأتي دور الحلقات وسنستخدم for loop كذلك نحن بحاجة لمتغير سنسميه sum وهو الذي سنحفظ فيه المجموع

في التكرار هذا في كل مرة سيخزن عنصر من عناصر المصفوفة داخل المتغير i إبتداء من أول عنصر إلى آخر عنصر من المصفوفة

هذه هي أحد الطرق للتعامل مع الـ for loop مع المصفوفات

بعد انتهاء الـ for سيكون لدينا مجموع كل الأعداد في المصفوفة, لكن ماذا لو أردت أن أستخدم هذه العملية على أكثر من مصفوفة

هنا يجب علينا أن نقوم بإنشاء دالة، هذه الدالة يجب أن تأخذ مصفوفة من نوع Int وتعيد لنا عدد من نوع Int كذلك:


func ArraySum (Arr : Array<Int>) -> Int{
    var sum = 0
    
    for i in Arr {
        sum = sum + i
    }
    
    return sum
}

دالتنا هذه عند إعطائك لها أي مصفوفة فإنها ستعيد لك مجموع عناصرها

 

ترتيب عناصر المصفوفة

من الأشياء المهمة اللتي سنستخدمها هي الترتيب فمن المهم أن تكون مصفوفتي مرتبة فهذا أفضل من العشوائية

فلو رتبتها تصاعديا فعندها سأجد أكبر آو أصغر عنصر بكل سهولة، كيف أقوم بترتيب مصفوفتي؟!


for i in 0..<numbers.endIndex {
    for j in 0..<numbers.endIndex{
        if numbers[j] > numbers[i]{
            var temp = numbers[j]
            numbers[j] = numbers[i]
            numbers[i] = temp
        }
        
    }
}

عناصر المصفوفة قبل الترتيب:

[12, 2, 5, 8, 17, 13, 4]

عناصر المصفوفة بعد الترتيب:

[2, 4, 5, 8, 12, 13, 17]

كما نلاحظ لقد قمنا بترتيب عناصر المصفوفة تصاعدياً

لكن ما هو تفصيل الكود السابق؟!

لنبدأ به سطراً بسطر

لدينا تكرار من نوع for هذا التكرار لديه متغير i يبدأ من 0 وينتهي عند عنوان آخر عنصر

داخل هذا التكرار لدينا تكرار آخر من نفس النوع ولديه متغير j كذلك يبدأ عند 0 وينتهي عند عنوان آخر عنصر

في داخل التكرار الثاني لدينا شرط فإذا كان العنصر في المصفوفة الذي في العنوان j أكبر من العنصر الذي في العنوان i

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

لتبدأ الدورة الثانية من بعد ذلك وهكذا حتى الإنتهاء من التكرار الخارجي والذي مع انتهائه ستكون المصفوفة مرتبه.

 

كما الحال في مجموع عناصر المصفوفة فإنه يفضل أستخدام دالة لترتيب العناصر هذه الدالة تستقبل مصفوفة وتعيد مصفوفة:


func arrInc (array : Array<Int>) -> Array<Int>{
    var arr = array
    
    for i in 0..<arr.endIndex {
        for j in 0..<arr.endIndex{
            if arr[j] > arr[i]{
                let temp = arr[j]
                arr[j] = arr[i]
                arr[i] = temp
            }
            
        }
    }
    
    return arr
}

في هذه الحالة لن تتأثر مصفوفتنا الأساسية إنما يمكننا ان نخزن ترتيب المصفوفة داخل مصفوفة جديدة.

 

اتمنى من الله أن أكون وفقت لشرح بعض النقاط المفيدة

بالامكان الاطلاع على الأمثلة السابقة بالمرفقات

تبقى لدي شرح أخير في اساسيات اللغة إن شاء الله سأكتبه في القريب العاجل

في حفظ الله تعالى

Examples.playground.zip

كلمات دليلية:
0
إعجاب
3011
مشاهدات
0
مشاركة
1
متابع
متميز
محتوى رهيب

التعليقات (0)

لايوجد لديك حساب في عالم البرمجة؟

تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !