ChatGPT said:
إليك حل الواجب بلغة C++ مع شرح مفصل:
الشرح
-
تعريف بنية (Structure): يتم تعريف بنية (
struct
) تحتوي على:- اسم اللاعب (
name
). - رقم اللاعب (
number
). - عدد النقاط التي سجلها اللاعب (
points
).
- اسم اللاعب (
-
استخدام مصفوفة من الهياكل: نقوم بتخزين بيانات 5 لاعبين في مصفوفة من الهياكل.
-
إدخال البيانات: يطلب البرنامج من المستخدم إدخال بيانات كل لاعب.
-
عرض الجدول: بعد إدخال البيانات، يعرض البرنامج جدولًا يحتوي على رقم اللاعب، اسمه، وعدد النقاط التي سجلها.
-
حساب وإظهار إجمالي النقاط: يتم حساب مجموع النقاط التي سجلها جميع اللاعبين.
-
تحديد اللاعب الذي سجل أكبر عدد من النقاط: يتم البحث عن اللاعب الذي لديه أعلى نقاط وعرض اسمه ورقمه.
كود C++
cpp#include <iostream>
#include <string>
using namespace std;
// تعريف البنية التي تخزن بيانات اللاعب
struct Player {
string name;
int number;
int points;
};
int main() {
const int SIZE = 5; // عدد اللاعبين
Player team[SIZE]; // مصفوفة تحتوي على 5 لاعبين
// إدخال بيانات اللاعبين
for (int i = 0; i < SIZE; i++) {
cout << "Enter data for player " << i + 1 << ":" << endl;
cout << "Name: ";
cin >> team[i].name;
cout << "Number: ";
cin >> team[i].number;
cout << "Points Scored: ";
cin >> team[i].points;
cout << endl;
}
// عرض الجدول
cout << "Player Data:\n";
cout << "--------------------------------\n";
cout << "Number\tName\tPoints\n";
cout << "--------------------------------\n";
int totalPoints = 0;
int maxPoints = 0;
int bestPlayerIndex = 0;
for (int i = 0; i < SIZE; i++) {
cout << team[i].number << "\t" << team[i].name << "\t" << team[i].points << endl;
totalPoints += team[i].points;
// البحث عن اللاعب الذي سجل أكبر عدد من النقاط
if (team[i].points > maxPoints) {
maxPoints = team[i].points;
bestPlayerIndex = i;
}
}
cout << "--------------------------------\n";
cout << "Total Points Scored by Team: " << totalPoints << endl;
cout << "Top Scorer: " << team[bestPlayerIndex].name
<< " (Number: " << team[bestPlayerIndex].number
<< ") with " << team[bestPlayerIndex].points << " points." << endl;
return 0;
}
شرح الكود خطوة بخطوة
- تعريف
struct Player
: يحتوي علىname
(اسم اللاعب)،number
(رقم اللاعب)، وpoints
(النقاط المسجلة). - إنشاء مصفوفة
team[SIZE]
لتخزين بيانات 5 لاعبين. - استخدام
for
لإدخال البيانات حيث يطلب البرنامج من المستخدم إدخال اسم، رقم، ونقاط كل لاعب. - طباعة جدول اللاعبين يتضمن رقم اللاعب، الاسم، والنقاط المسجلة.
- حساب
totalPoints
وهو مجموع النقاط التي سجلها جميع اللاعبين. - تحديد اللاعب الأعلى تسجيلًا من خلال مقارنة
points
لكل لاعب. - عرض البيانات النهائية بما في ذلك:
- إجمالي النقاط التي سجلها الفريق.
- اللاعب صاحب أعلى عدد نقاط مع اسمه ورقمه.
مثال على التشغيل
yamlEnter data for player 1:
Name: Ali
Number: 10
Points Scored: 15
Enter data for player 2:
Name: Omar
Number: 7
Points Scored: 20
Enter data for player 3:
Name: Sara
Number: 5
Points Scored: 25
Enter data for player 4:
Name: Khaled
Number: 8
Points Scored: 10
Enter data for player 5:
Name: Noor
Number: 3
Points Scored: 18
Player Data:
--------------------------------
Number Name Points
--------------------------------
10 Ali 15
7 Omar 20
5 Sara 25
8 Khaled 10
3 Noor 18
--------------------------------
Total Points Scored by Team: 88
Top Scorer: Sara (Number: 5) with 25 points.
تحسينات ممكنة
- استخدام
getline(cin, team[i].name);
بدلاً منcin >> team[i].name;
في حال كان الاسم يحتوي على مسافات. - إضافة التحقق من الإدخال للتأكد من إدخال أرقام صحيحة للرقم والنقاط.
- دعم أكثر من 5 لاعبين بجعل حجم المصفوفة ديناميكيًا باستخدام
vector
.
ملخص
هذا البرنامج يتيح للمستخدم إدخال بيانات لاعبين، وعرضها في جدول، وحساب إجمالي النقاط، وتحديد اللاعب الأكثر تسجيلًا للنقاط. 🎯
You said:
ChatGPT said:
تم تعديل أسماء المتغيرات لتكون بحروف صغيرة وفقًا لأفضل الممارسات في C++:
cpp#include <iostream>
#include <string>
using namespace std;
// تعريف البنية التي تخزن بيانات اللاعب
struct player {
string name;
int number;
int points;
};
int main() {
const int size = 5; // عدد اللاعبين
player team[size]; // مصفوفة تحتوي على 5 لاعبين
// إدخال بيانات اللاعبين
for (int i = 0; i < size; i++) {
cout << "Enter data for player " << i + 1 << ":" << endl;
cout << "Name: ";
cin >> team[i].name;
cout << "Number: ";
cin >> team[i].number;
cout << "Points Scored: ";
cin >> team[i].points;
cout << endl;
}
// عرض الجدول
cout << "Player Data:\n";
cout << "--------------------------------\n";
cout << "Number\tName\tPoints\n";
cout << "--------------------------------\n";
int total_points = 0;
int max_points = 0;
int best_player_index = 0;
for (int i = 0; i < size; i++) {
cout << team[i].number << "\t" << team[i].name << "\t" << team[i].points << endl;
total_points += team[i].points;
// البحث عن اللاعب الذي سجل أكبر عدد من النقاط
if (team[i].points > max_points) {
max_points = team[i].points;
best_player_index = i;
}
}
cout << "--------------------------------\n";
cout << "Total Points Scored by Team: " << total_points << endl;
cout << "Top Scorer: " << team[best_player_index].name
<< " (Number: " << team[best_player_index].number
<< ") with " << team[best_player_index].points << " points." << endl;
return 0;
}
التعديلات التي تمت:
✅ تغيير Player
إلى player
✅ تغيير SIZE
إلى size
✅ تغيير totalPoints
إلى total_points
✅ تغيير maxPoints
إلى max_points
✅ تغيير bestPlayerIndex
إلى best_player_index
🔹 الآن الكود متوافق مع أفضل ممارسات التسمية في C++. 🚀
You said:
ChatGPT said:
إذا أراد المستخدم إدخال عدد من الأيام يمكن أن يتجاوز 30 يومًا، فسنحتاج إلى ضبط الأيام بحيث لا تتجاوز 30، مع إضافة الأشهر الزائدة إلى الشهر الحالي.
الحل
- يطلب البرنامج من المستخدم إدخال اليوم والشهر وعدد الأيام المراد إضافتها.
- يتم جمع الأيام المدخلة مع اليوم الحالي.
- إذا تجاوزت الأيام 30، يتم تحويل الفائض إلى شهر إضافي.
- يتم عرض التاريخ الجديد بعد التعديل.
كود C++
cpp#include <iostream>
using namespace std;
int main() {
int day, month, add_days;
// إدخال اليوم والشهر
cout << "Enter current day: ";
cin >> day;
cout << "Enter current month: ";
cin >> month;
cout << "Enter number of days to add: ";
cin >> add_days;
// حساب الأيام الجديدة
day += add_days;
// التأكد من أن الأيام لا تتجاوز 30
while (day > 30) {
day -= 30; // تقليل الأيام بمقدار 30
month++; // زيادة الشهر بواحد
}
// التأكد من أن الشهر لا يتجاوز 12
if (month > 12) {
month = month % 12; // إعادة تعيين الشهر بعد تجاوز السنة
}
// عرض النتيجة
cout << "New Date: " << day << "/" << month << endl;
return 0;
}
مثال على التشغيل
الإدخال:
sqlEnter current day: 25
Enter current month: 5
Enter number of days to add: 10
النتيجة:
sqlNew Date: 5/6
✅ تمت إضافة 10 أيام، وبعد تجاوز 30 يومًا، انتقلنا إلى الشهر التالي.
مثال آخر:
الإدخال:
sqlEnter current day: 28
Enter current month: 11
Enter number of days to add: 40
النتيجة:
sqlNew Date: 8/1
✅ تمت إضافة 40 يومًا، فتجاوزنا شهر 11، ثم انتقلنا إلى شهر 12، ثم بدأنا من جديد في يناير.
ملاحظات وتحسينات:
- يمكن تعديل البرنامج لدعم الأشهر ذات الأيام المختلفة (مثل فبراير 28 يومًا، والشهور التي بها 31 يومًا).
- يمكن إضافة دعم لحساب السنة إذا أردنا التعامل مع تواريخ كاملة.
🚀 بهذا الشكل، البرنامج يتعامل مع زيادة الأيام بطريقة صحيحة دون تجاوز حدود الشهر!