أمثلة عملية
أمثلة عملية
Section titled “أمثلة عملية”مجموعة شاملة من الأمثلة العملية لتطبيقات متنوعة في كنوز.
برامج أساسية
Section titled “برامج أساسية”حاسبة بسيطة
Section titled “حاسبة بسيطة”دالة جمع(أ: صحيح, ب: صحيح) -> صحيح { أرجع أ + ب;}
دالة طرح(أ: صحيح, ب: صحيح) -> صحيح { أرجع أ - ب;}
دالة ضرب(أ: صحيح, ب: صحيح) -> صحيح { أرجع أ * ب;}
دالة قسمة(أ: صحيح, ب: صحيح) -> نتيجة<صحيح, نص> { إذا ب == 0 { أرجع فشل("لا يمكن القسمة على صفر"); } أرجع موافق(أ / ب);}
// الاستخداماطبع_سطر!("5 + 3 = {}", جمع(5, 3));اطبع_سطر!("5 - 3 = {}", طرح(5, 3));اطبع_سطر!("5 × 3 = {}", ضرب(5, 3));
طابق قسمة(10, 2) { موافق(ن) => { اطبع_سطر!("10 ÷ 2 = {}", ن); } فشل(خ) => { اطبع(خ); }}تحويل درجة الحرارة
Section titled “تحويل درجة الحرارة”دالة سلزيوس_لفهرنهايت(س: عشري) -> عشري { أرجع (س * 9.0 / 5.0) + 32.0;}
دالة فهرنهايت_لسلزيوس(ف: عشري) -> عشري { أرجع (ف - 32.0) * 5.0 / 9.0;}
// الاستخدامدع درجة_س = 25.0;دع درجة_ف = سلزيوس_لفهرنهايت(درجة_س);اطبع_سطر!("{}°C = {}°F", درجة_س, درجة_ف);
دع درجة_ف2 = 77.0;دع درجة_س2 = فهرنهايت_لسلزيوس(درجة_ف2);اطبع_سطر!("{}°F = {}°C", درجة_ف2, درجة_س2);مولد كلمات المرور
Section titled “مولد كلمات المرور”دالة ولد_كلمة_مرور(طول: صحيح) -> نص { دع حروف = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%"; دع متغير نتيجة = "";
لكل _ في 0..طول { دع فهرس = عشوائي(0, 66); // إضافة حرف عشوائي }
أرجع نتيجة;}هياكل البيانات
Section titled “هياكل البيانات”قائمة مرتبطة
Section titled “قائمة مرتبطة”هيكل عقدة<ن> { قيمة: ن, التالي: اختياري<صندوق<عقدة<ن>>>}
هيكل قائمة_مرتبطة<ن> { رأس: اختياري<صندوق<عقدة<ن>>>, طول: صحيح}
نفذ<ن> قائمة_مرتبطة<ن> { دالة جديد() -> ذاتي { أرجع ذاتي { رأس: عدم, طول: 0 }; }
دالة أضف(&متغير ذاتي, قيمة: ن) { دع عقدة_جديدة = صندوق(عقدة { قيمة: قيمة, التالي: ذاتي.رأس }); ذاتي.رأس = بعض(عقدة_جديدة); ذاتي.طول += 1; }
دالة طول(&ذاتي) -> صحيح { أرجع ذاتي.طول; }}مكدس (Stack)
Section titled “مكدس (Stack)”هيكل مكدس<ن> { عناصر: متجه<ن>}
نفذ<ن> مكدس<ن> { دالة جديد() -> ذاتي { أرجع ذاتي { عناصر: متجه[] }; }
دالة ادفع(&متغير ذاتي, قيمة: ن) { ذاتي.عناصر.ادفع(قيمة); }
دالة انزع(&متغير ذاتي) -> اختياري<ن> { إذا ذاتي.فارغ() { أرجع عدم; } أرجع بعض(ذاتي.عناصر.انزع()); }
دالة قمة(&ذاتي) -> اختياري<&ن> { إذا ذاتي.فارغ() { أرجع عدم; } دع فهرس = ذاتي.عناصر.طول() - 1; أرجع بعض(&ذاتي.عناصر[فهرس]); }
دالة فارغ(&ذاتي) -> منطقي { أرجع ذاتي.عناصر.طول() == 0; }}
// الاستخدامدع متغير م: مكدس<صحيح> = مكدس::جديد();م.ادفع(10);م.ادفع(20);م.ادفع(30);
طابق م.انزع() { بعض(ق) => { اطبع_صحيح(ق); } // 30 عدم => { اطبع("فارغ"); }}طابور (Queue)
Section titled “طابور (Queue)”هيكل طابور<ن> { عناصر: متجه<ن>}
نفذ<ن> طابور<ن> { دالة جديد() -> ذاتي { أرجع ذاتي { عناصر: متجه[] }; }
دالة أدخل(&متغير ذاتي, قيمة: ن) { ذاتي.عناصر.ادفع(قيمة); }
دالة أخرج(&متغير ذاتي) -> اختياري<ن> { إذا ذاتي.فارغ() { أرجع عدم; } أرجع بعض(ذاتي.عناصر.أزل(0)); }
دالة فارغ(&ذاتي) -> منطقي { أرجع ذاتي.عناصر.طول() == 0; }}تطبيقات عملية
Section titled “تطبيقات عملية”نظام إدارة الطلاب
Section titled “نظام إدارة الطلاب”هيكل طالب { رقم: صحيح, اسم: نص, درجات: متجه<صحيح>}
نفذ طالب { دالة جديد(رقم: صحيح, اسم: نص) -> ذاتي { أرجع ذاتي { رقم: رقم, اسم: اسم, درجات: متجه[] }; }
دالة أضف_درجة(&متغير ذاتي, درجة: صحيح) { ذاتي.درجات.ادفع(درجة); }
دالة المعدل(&ذاتي) -> عشري { إذا ذاتي.درجات.طول() == 0 { أرجع 0.0; }
دع متغير مجموع = 0; لكل د في ذاتي.درجات { مجموع += د; }
أرجع (مجموع كـ عشري) / (ذاتي.درجات.طول() كـ عشري); }
دالة التقدير(&ذاتي) -> نص { دع م = ذاتي.المعدل();
إذا م >= 90.0 { أرجع "ممتاز"; } وإلا إذا م >= 80.0 { أرجع "جيد جداً"; } وإلا إذا م >= 70.0 { أرجع "جيد"; } وإلا إذا م >= 60.0 { أرجع "مقبول"; } وإلا { أرجع "راسب"; } }}
هيكل نظام_طلاب { طلاب: قاموس<صحيح, طالب>}
نفذ نظام_طلاب { دالة جديد() -> ذاتي { أرجع ذاتي { طلاب: قاموس[] }; }
دالة أضف_طالب(&متغير ذاتي, طالب: طالب) { ذاتي.طلاب.أضف(طالب.رقم, طالب); }
دالة ابحث(&ذاتي, رقم: صحيح) -> اختياري<&طالب> { أرجع ذاتي.طلاب.اقرأ(رقم); }
دالة تقرير(&ذاتي) { اطبع_سطر!("=== تقرير الطلاب ==="); لكل (رقم, طالب) في ذاتي.طلاب { اطبع_سطر!("{} - {} - المعدل: {} - التقدير: {}", رقم, طالب.اسم, طالب.المعدل(), طالب.التقدير()); } }}نظام مكتبة
Section titled “نظام مكتبة”تعداد حالة_كتاب { متاح, معار(نص), // اسم المستعير محجوز}
هيكل كتاب { رقم_isbn: نص, عنوان: نص, مؤلف: نص, حالة: حالة_كتاب}
هيكل مكتبة { كتب: قاموس<نص, كتاب>}
نفذ مكتبة { دالة جديد() -> ذاتي { أرجع ذاتي { كتب: قاموس[] }; }
دالة أضف_كتاب(&متغير ذاتي, كتاب: كتاب) { ذاتي.كتب.أضف(كتاب.رقم_isbn, كتاب); }
دالة أعر(&متغير ذاتي, isbn: نص, مستعير: نص) -> نتيجة<(), نص> { طابق ذاتي.كتب.اقرأ_متغير(isbn) { بعض(متغير كتاب) => { طابق كتاب.حالة { حالة_كتاب::متاح => { كتاب.حالة = حالة_كتاب::معار(مستعير); أرجع موافق(()); } _ => { أرجع فشل("الكتاب غير متاح"); } } } عدم => { أرجع فشل("الكتاب غير موجود"); } } }
دالة أرجع_كتاب(&متغير ذاتي, isbn: نص) -> نتيجة<(), نص> { طابق ذاتي.كتب.اقرأ_متغير(isbn) { بعض(متغير كتاب) => { كتاب.حالة = حالة_كتاب::متاح; أرجع موافق(()); } عدم => { أرجع فشل("الكتاب غير موجود"); } } }
دالة ابحث_بالعنوان(&ذاتي, عنوان: نص) -> متجه<&كتاب> { دع متغير نتائج: متجه<&كتاب> = متجه[];
لكل (_, كتاب) في ذاتي.كتب { إذا كتاب.عنوان.يحتوي(عنوان) { نتائج.ادفع(كتاب); } }
أرجع نتائج; }}مؤقت ومهام
Section titled “مؤقت ومهام”هيكل مهمة { اسم: نص, وقت_البدء: ص64, وقت_الانتهاء: اختياري<ص64>}
نفذ مهمة { دالة جديد(اسم: نص) -> ذاتي { أرجع ذاتي { اسم: اسم, وقت_البدء: وقت(), وقت_الانتهاء: عدم }; }
دالة أنهِ(&متغير ذاتي) { ذاتي.وقت_الانتهاء = بعض(وقت()); }
دالة المدة(&ذاتي) -> ص64 { طابق ذاتي.وقت_الانتهاء { بعض(انتهاء) => { أرجع انتهاء - ذاتي.وقت_البدء; } عدم => { أرجع وقت() - ذاتي.وقت_البدء; } } }}
// قياس أداء دالةدالة قس_أداء<ف>(اسم: نص, دالة: ف) حيث ف: دالة(){ دع بداية = وقت(); دالة(); دع نهاية = وقت();
اطبع_سطر!("{}: {} مللي ثانية", اسم, نهاية - بداية);}برمجة الشبكات
Section titled “برمجة الشبكات”عميل HTTP بسيط
Section titled “عميل HTTP بسيط”دالة طلب_GET(مضيف: نص, منفذ: صحيح, مسار: نص) -> نتيجة<نص, نص> { جرب { دع متغير مقبس = أنشئ_مقبس(); اتصل_مقبس(مقبس, مضيف, منفذ);
دع طلب = "GET " + مسار + " HTTP/1.1\r\n" + "Host: " + مضيف + "\r\n" + "Connection: close\r\n\r\n";
أرسل_مقبس(مقبس, طلب); دع رد = استقبل_مقبس(مقبس); أغلق_مقبس(مقبس);
أرجع موافق(رد); } التقط خ { أرجع فشل("فشل الطلب"); }}خادم ملفات
Section titled “خادم ملفات”دالة خادم_ملفات(منفذ: صحيح, مجلد: نص) { دع متغير مقبس = أنشئ_مقبس(); اربط_مقبس(مقبس, "0.0.0.0", منفذ); استمع_مقبس(مقبس);
اطبع_سطر!("خادم الملفات يعمل على المنفذ {}", منفذ);
كرر { دع متغير عميل = اقبل_اتصال(مقبس);
أطلق || { دع طلب = استقبل_مقبس(عميل);
// تحليل الطلب واستخراج المسار // قراءة الملف وإرسال المحتوى
أغلق_مقبس(عميل); }; }}البرمجة المتزامنة
Section titled “البرمجة المتزامنة”الخيوط الخضراء (M:N Scheduler)
Section titled “الخيوط الخضراء (M:N Scheduler)”دالة عمل(رقم: صحيح) -> صحيح { اطبع("خيط أخضر بدأ:", رقم) دع نتيجة = رقم * 10; اطبع("خيط أخضر انتهى:", رقم) أرجع نتيجة;}
دالة رئيسية() { اطبع("=== اختبار الخيوط الخضراء (M:N) ===") اطبع("إطلاق 5 خيوط خضراء...")
دع م1 = أطلق(عمل(1)); دع م2 = أطلق(عمل(2)); دع م3 = أطلق(عمل(3)); دع م4 = أطلق(عمل(4)); دع م5 = أطلق(عمل(5));
دع ن1 = انتظر(م1); دع ن2 = انتظر(م2); دع ن3 = انتظر(م3); دع ن4 = انتظر(م4); دع ن5 = انتظر(م5);
اطبع("جميع الخيوط الخضراء انتهت!")}الأنواع المرتبطة المعممة (GATs)
Section titled “الأنواع المرتبطة المعممة (GATs)”سمة حاوية { نوع عنصر<ط>; دالة أول(&ذاتي) -> صحيح;}
هيكل صندوق_أرقام { قيمة: صحيح,}
نفذ حاوية لـ صندوق_أرقام { نوع عنصر<ط> = صحيح; دالة أول(&ذاتي) -> صحيح { أرجع 42; }}
دالة رئيسية() { دع ص = صندوق_أرقام { قيمة: 42 }; اطبع("صندوق_أرقام.أول() =", ص.أول());}مجمع نتائج متوازي
Section titled “مجمع نتائج متوازي”دالة احسب_متوازي(بيانات: متجه<صحيح>, عدد_الخيوط: صحيح) -> صحيح { دع (مرسل, مستقبل) = قناة(); دع حجم_القطعة = بيانات.طول() / عدد_الخيوط;
// إطلاق الخيوط لكل ت في 0..عدد_الخيوط { دع بداية = ت * حجم_القطعة; دع نهاية = إذا ت == عدد_الخيوط - 1 { بيانات.طول() } وإلا { (ت + 1) * حجم_القطعة };
دع مرسل_نسخة = مرسل.انسخ();
أطلق || { دع متغير مجموع = 0; لكل ف في بداية..نهاية { مجموع += بيانات[ف]; } مرسل_نسخة.أرسل(مجموع); }; }
// جمع النتائج دع متغير إجمالي = 0; لكل _ في 0..عدد_الخيوط { إجمالي += مستقبل.استقبل(); }
أرجع إجمالي;}منتج-مستهلك
Section titled “منتج-مستهلك”دالة منتج_مستهلك() { دع (مرسل, مستقبل) = قناة();
// المنتج دع منتج = أطلق || { لكل ت في 1..=10 { اطبع_سطر!("إنتاج: {}", ت); مرسل.أرسل(ت); نم(100); } مرسل.أغلق(); };
// المستهلك دع مستهلك = أطلق || { طالما صح { طابق مستقبل.استقبل() { بعض(قيمة) => { اطبع_سطر!("استهلاك: {}", قيمة); } عدم => { أوقف; } } } };
منتج.انضم(); مستهلك.انضم();}