مراجعة - متتبع نقاط بسيط
جزء من قسم المنطق وتدفّق التنفيذ في رحلة Rust على Coddy. الدرس 14 من 66.
التحدي
سهلستتلقى مُدخلين: أولًا قائمة مفصولة بفواصل من درجات الاختبار، وثانيًا درجة لإضافتها. أنشئ متجهًا من الدرجات الأولية، وأضف الدرجة الجديدة، واحسب متوسط جميع الدرجات، واطبع النتائج.
المتطلبات:
- اقرأ المُدخل الأول الذي يحتوي على درجات مفصولة بفواصل (مثل:
85,92,78) - قسّم السلسلة النصية باستخدام الفواصل وأزل المسافات الزائدة من كل رمز على حدة قبل تحويله إلى عدد صحيح (مثلًا، استخدم
.trim()على كل عنصر بعد التقسيم) - أنشئ متجهًا قابلًا للتغيير من هذه الدرجات
- اقرأ المُدخل الثاني وحوّله إلى عدد صحيح (أزل المسافات الزائدة منه أولًا)
- استخدم
.push()لإضافة الدرجة الجديدة إلى المتجه - احسب متوسط جميع الدرجات في المتجه
- اطبع العدد الإجمالي للدرجات
- اطبع متوسط الدرجات (كعدد صحيح)
المُدخل:
- السطر الأول: أعداد صحيحة مفصولة بفواصل تمثل الدرجات الأولية (مثل:
85,92,78) - السطر الثاني: عدد صحيح يمثل الدرجة الجديدة المراد إضافتها
المخرجات:
- السطر الأول: العدد الإجمالي للدرجات
- السطر الثاني: متوسط الدرجات (كعدد صحيح، بعد اقتطاع الجزء العشري)
ملاحظة: استدعِ دائمًا .trim() على سطر الإدخال بالكامل وعلى كل رمز من رموز الدرجات على حدة بعد التقسيم باستخدام الفاصلة. قد تحتوي سلاسل الإدخال على مسافات بيضاء غير مرئية أو أحرف سطر جديد ستتسبب في حدوث panic عند التحليل إذا لم تتم إزالتها.
جرّب بنفسك
use std::io;
fn main() {
// اقرأ الدرجات المفصولة بفواصل
let mut scores_input = String::new();
io::stdin().read_line(&mut scores_input).expect("Failed to read line");
// اقرأ الدرجة الجديدة لإضافتها
let mut new_score_input = String::new();
io::stdin().read_line(&mut new_score_input).expect("Failed to read line");
// TODO: اكتب الكود الخاص بك أدناه
// 1. قسّم scores_input بواسطة الفواصل وحوّلها إلى أعداد صحيحة
// 2. أنشئ متجهًا قابلاً للتغيير من هذه الدرجات
// 3. حوّل new_score_input إلى عدد صحيح
// 4. ادفع الدرجة الجديدة إلى المتجه
// 5. احسب متوسط جميع الدرجات
// اطبع العدد الإجمالي للدرجات
// println!("{}", total_scores);
// اطبع متوسط الدرجة
// println!("{}", average);
}جميع دروس المنطق وتدفّق التنفيذ
1تدفق التحكم المتقدم
تعبير 'match'مطابقة قيم متعددةمطابقة النطاقاتتعبير 'if let'الحلقات التكرارية كتعبيراتمراجعة - محلل أوامر بسيط4تجميع البيانات باستخدام Structs
ما هو الـ Struct؟نظرة عامة على الـ Structsالوصول إلى حقول الـ Structالـ Structs القابلة للتعديلالـ Structs كمعاملات للدوالالـ Tuple Structsمراجعة - إنشاء Book Struct7معالجة الأخطاء باستخدام 'Result'
ما هو 'Result'؟استخدام 'match' مع 'Result'is_ok() و is_err()اختصارات: unwrap و expectعامل علامة الاستفهام '?'تحويل السلاسل النصية إلى أرقامملخص - دالة القسمة الآمنة10الـ Closures والدوال المجهولة
ما هو الـ Closure؟تعريف Closure بسيطالـ Closures مع المعاملاتالتقاط البيئة المحيطةملخص - Closure الجامع البسيط2مقدمة في الـ Vectors
ما هو الـ Vector؟إنشاء Vectorإضافة عناصر باستخدام pushالوصول إلى عناصر الـ Vectorالتكرار عبر الـ Vectorالتكرار القابل للتعديل (Mutable Iteration)إزالة العناصرمراجعة - متتبع نقاط بسيط5أزواج (المفتاح والقيمة) مع Hash Maps
ما هو Hash Map؟إنشاء Hash Mapإدراج أزواج (المفتاح والقيمة)الوصول إلى القيمالتكرار عبر Hash Mapتحديث قيمةإزالة زوجملخص - عداد الكلمات6التعامل مع غياب القيم باستخدام 'Option'
ما هو الـ 'Option'؟استخدام 'match' مع 'Option''is_some()' و 'is_none()'فك تغليف الـ 'Option'الدالة 'expect'توفير قيمة افتراضية: 'unwrap_or'مراجعة - البحث عن عنصر9شرائح الـ String والمزيد
String مقابل &strإنشاء شرائح الـ Stringالشرائح كمعاملات للدوالشرائح أخرىمراجعة - إيجاد الكلمة الأولىتدرّب بنفسك: مترجم Rust عبر الإنترنت