الخوارزميات
الخوارزميات
Section titled “الخوارزميات”أمثلة على تنفيذ خوارزميات شائعة في لغة كنوز.
الترتيب (Sorting)
Section titled “الترتيب (Sorting)”ترتيب الفقاعة (Bubble Sort)
Section titled “ترتيب الفقاعة (Bubble Sort)”دالة ترتيب_فقاعة(متغير أعداد: [صحيح; 10]) { دع ن = 10;
لكل ت في 0..ن { لكل ج في 0..(ن - ت - 1) { إذا أعداد[ج] > أعداد[ج + 1] { // تبديل دع مؤقت = أعداد[ج]; أعداد[ج] = أعداد[ج + 1]; أعداد[ج + 1] = مؤقت; } } }}
// الاستخدامدع متغير بيانات = [64, 34, 25, 12, 22, 11, 90, 45, 33, 77];ترتيب_فقاعة(بيانات);
// طباعة النتيجةلكل ع في بيانات { اطبع_صحيح(ع);}ترتيب الاختيار (Selection Sort)
Section titled “ترتيب الاختيار (Selection Sort)”دالة ترتيب_اختيار(متغير أعداد: [صحيح; 10]) { دع ن = 10;
لكل ت في 0..(ن - 1) { دع متغير فهرس_الأدنى = ت;
لكل ج في (ت + 1)..ن { إذا أعداد[ج] < أعداد[فهرس_الأدنى] { فهرس_الأدنى = ج; } }
// تبديل دع مؤقت = أعداد[ت]; أعداد[ت] = أعداد[فهرس_الأدنى]; أعداد[فهرس_الأدنى] = مؤقت; }}ترتيب الإدراج (Insertion Sort)
Section titled “ترتيب الإدراج (Insertion Sort)”دالة ترتيب_إدراج(متغير أعداد: [صحيح; 10]) { دع ن = 10;
لكل ت في 1..ن { دع مفتاح = أعداد[ت]; دع متغير ج = ت - 1;
طالما ج >= 0 و أعداد[ج] > مفتاح { أعداد[ج + 1] = أعداد[ج]; ج -= 1; }
أعداد[ج + 1] = مفتاح; }}البحث (Searching)
Section titled “البحث (Searching)”البحث الخطي
Section titled “البحث الخطي”دالة بحث_خطي(أعداد: [صحيح; 10], هدف: صحيح) -> اختياري<صحيح> { لكل ت في 0..10 { إذا أعداد[ت] == هدف { أرجع بعض(ت); } } أرجع عدم;}
// الاستخدامدع بيانات = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100];
طابق بحث_خطي(بيانات, 50) { بعض(فهرس) => { اطبع("وُجد في الفهرس:"); اطبع_صحيح(فهرس); } عدم => { اطبع("غير موجود"); }}البحث الثنائي
Section titled “البحث الثنائي”دالة بحث_ثنائي(أعداد: [صحيح; 10], هدف: صحيح) -> اختياري<صحيح> { دع متغير يسار = 0; دع متغير يمين = 9;
طالما يسار <= يمين { دع وسط = (يسار + يمين) / 2;
إذا أعداد[وسط] == هدف { أرجع بعض(وسط); } وإلا إذا أعداد[وسط] < هدف { يسار = وسط + 1; } وإلا { يمين = وسط - 1; } }
أرجع عدم;}
// الاستخدام (يجب أن تكون المصفوفة مرتبة)دع بيانات_مرتبة = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100];
طابق بحث_ثنائي(بيانات_مرتبة, 70) { بعض(فهرس) => { اطبع("وُجد في الفهرس:"); اطبع_صحيح(فهرس); // 6 } عدم => { اطبع("غير موجود"); }}الخوارزميات العددية
Section titled “الخوارزميات العددية”فيبوناتشي
Section titled “فيبوناتشي”// التكراريةدالة فيبوناتشي_تكراري(ن: ص64) -> ص64 { إذا ن <= 1 { أرجع ن; }
دع متغير أ: ص64 = 0; دع متغير ب: ص64 = 1;
لكل ت في 2..=ن { دع مؤقت = أ + ب; أ = ب; ب = مؤقت; }
أرجع ب;}
// العوديةدالة فيبوناتشي_عودي(ن: صحيح) -> صحيح { إذا ن <= 1 { أرجع ن; } أرجع فيبوناتشي_عودي(ن - 1) + فيبوناتشي_عودي(ن - 2);}
// الاستخداملكل ت في 0..10 { اطبع_صحيح(فيبوناتشي_تكراري(ت));}العامل الضربي (Factorial)
Section titled “العامل الضربي (Factorial)”// التكراريةدالة ضربي_تكراري(ن: ص64) -> ص64 { دع متغير نتيجة: ص64 = 1;
لكل ت في 2..=ن { نتيجة *= ت; }
أرجع نتيجة;}
// العوديةدالة ضربي_عودي(ن: ص64) -> ص64 { إذا ن <= 1 { أرجع 1; } أرجع ن * ضربي_عودي(ن - 1);}
// الاستخداماطبع_صحيح(ضربي_تكراري(10)); // 3628800القاسم المشترك الأكبر (GCD)
Section titled “القاسم المشترك الأكبر (GCD)”دالة قاسم_مشترك_أكبر(أ: صحيح, ب: صحيح) -> صحيح { إذا ب == 0 { أرجع أ; } أرجع قاسم_مشترك_أكبر(ب, أ % ب);}
// المضاعف المشترك الأصغردالة مضاعف_مشترك_أصغر(أ: صحيح, ب: صحيح) -> صحيح { أرجع (أ * ب) / قاسم_مشترك_أكبر(أ, ب);}
// الاستخداماطبع_صحيح(قاسم_مشترك_أكبر(48, 18)); // 6اطبع_صحيح(مضاعف_مشترك_أصغر(4, 6)); // 12الأعداد الأولية
Section titled “الأعداد الأولية”دالة أولي(ن: صحيح) -> منطقي { إذا ن < 2 { أرجع خطأ; } إذا ن == 2 { أرجع صح; } إذا ن % 2 == 0 { أرجع خطأ; }
دع متغير ت = 3; طالما ت * ت <= ن { إذا ن % ت == 0 { أرجع خطأ; } ت += 2; }
أرجع صح;}
// غربال إراتوستينسدالة أولية_حتى(حد: صحيح) -> متجه<صحيح> { دع متغير أولي: [منطقي; 1000] = [صح; 1000]; دع متغير نتيجة: متجه<صحيح> = متجه[];
أولي[0] = خطأ; أولي[1] = خطأ;
لكل ت في 2..حد { إذا أولي[ت] { نتيجة.ادفع(ت);
دع متغير ج = ت * 2; طالما ج < حد { أولي[ج] = خطأ; ج += ت; } } }
أرجع نتيجة;}خوارزميات النصوص
Section titled “خوارزميات النصوص”عكس نص
Section titled “عكس نص”دالة عكس_نص(نص: نص) -> نص { دع متغير نتيجة = ""; دع ط = طول(نص);
دع متغير ت = ط - 1; طالما ت >= 0 { // إضافة الحرف ت -= 1; }
أرجع نتيجة;}التحقق من متناظر (Palindrome)
Section titled “التحقق من متناظر (Palindrome)”دالة متناظر(أعداد: [صحيح; 10], طول: صحيح) -> منطقي { دع متغير يسار = 0; دع متغير يمين = طول - 1;
طالما يسار < يمين { إذا أعداد[يسار] != أعداد[يمين] { أرجع خطأ; } يسار += 1; يمين -= 1; }
أرجع صح;}
// الاستخدامدع بيانات1 = [1, 2, 3, 2, 1, 0, 0, 0, 0, 0];دع بيانات2 = [1, 2, 3, 4, 5, 0, 0, 0, 0, 0];
إذا متناظر(بيانات1, 5) { اطبع("متناظر"); // يُطبع}
إذا متناظر(بيانات2, 5) { اطبع("متناظر"); // لا يُطبع}خوارزميات متقدمة
Section titled “خوارزميات متقدمة”حساب قيمة π (مونت كارلو)
Section titled “حساب قيمة π (مونت كارلو)”دالة احسب_باي(عدد_النقاط: صحيح) -> عشري { دع متغير داخل_الدائرة = 0;
لكل ت في 0..عدد_النقاط { // توليد نقطة عشوائية بين 0 و 1 دع س = عشوائي_عشري(); دع ص = عشوائي_عشري();
// التحقق إذا داخل الدائرة إذا (س * س + ص * ص) <= 1.0 { داخل_الدائرة += 1; } }
// π ≈ 4 × (النقاط داخل الدائرة / إجمالي النقاط) أرجع 4.0 * (داخل_الدائرة كـ عشري) / (عدد_النقاط كـ عشري);}مجموع كولاتز (Collatz)
Section titled “مجموع كولاتز (Collatz)”دالة طول_كولاتز(ن: ص64) -> صحيح { دع متغير عدد = ن; دع متغير خطوات = 0;
طالما عدد != 1 { إذا عدد % 2 == 0 { عدد = عدد / 2; } وإلا { عدد = 3 * عدد + 1; } خطوات += 1; }
أرجع خطوات;}
// الاستخداماطبع_صحيح(طول_كولاتز(27)); // 111 خطوة