مراجعة - متتبع نقاط بسيط
جزء من قسم Logic & Flow في رحلة Rust على Coddy — الدرس 14 من 66.
التحدي
سهلستتلقى مدخلين: الأول، قائمة مفصولة بفاصلة من درجات الاختبار، والثاني، درجة لإضافتها. قم بإنشاء متجه (vector) من الدرجات الأولية، وأضف الدرجة الجديدة، واحسب متوسط جميع الدرجات، واطبع النتائج.
المتطلبات:
- اقرأ المدخل الأول الذي يحتوي على درجات مفصولة بفاصلة (على سبيل المثال،
85,92,78) - قم بتقسيم السلسلة النصية بواسطة الفواصل وإزالة المسافات الزائدة (trim) لكل عنصر على حدة قبل التحويل إلى عدد صحيح (على سبيل المثال، استخدم
.trim()على كل عنصر بعد التقسيم) - قم بإنشاء متجه (vector) قابل للتعديل من هذه الدرجات
- اقرأ المدخل الثاني وقم بتحويله إلى عدد صحيح (قم بإزالة المسافات الزائدة أولاً)
- استخدم
.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. إنشاء متجه (vector) قابل للتعديل من هذه الدرجات
// 3. تحويل new_score_input إلى عدد صحيح
// 4. إضافة الدرجة الجديدة إلى المتجه
// 5. حساب متوسط جميع الدرجات
// طباعة العدد الإجمالي للدرجات
// println!("{}", total_scores);
// طباعة متوسط الدرجات
// println!("{}", average);
}جميع دروس Logic & Flow
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الشرائح كمعاملات للدوالشرائح أخرىمراجعة - إيجاد الكلمة الأولى