كيف أكتب هاذا البرنامج بلغة ++c ؟
السلام عليكم ورحمة الله وبركاته..
ممكن المساعدة لفهم هاذا السؤال حيث انني طالبة جامعية وهاذا السؤال واجب علي
ولم أستطع أن أفهمه بشكل صحيح
حيث طالب هنا في السؤال ان أعرف 2D Array
ويكون الادخال رقم الكلاس اما 1,2,3,4 ومن ثم أدخل المبلغ الذي تبرع به الكلاس
ومن ثم اعرض المبلغ الذي تبرع به هاذا الكلاس مثلا لو دخلت رقم الكلاس 1 والمبلغ 20
ومن ثم مرة اخرى أدخلت رقم الكلاس 1 والمبلغ 20
هنا يحدث ان تنحذف العشرين وتكون 40 مجموع الذي تبرع به الكلاس
وأظل ادخل الى م تتوقف عملية الادخال
وكتابة البرنامج بلغة ++c
حيث انني لا أعلم كيف أبدأ بحل هاذا السؤال
هاذا هو السؤال:
Addison High School is holding a fundraiser. The freshmen, sophomores, juniors, and
seniors hold a competition to see which class contributes the most money. Write a program
that allows you to enter two numbers for each contribution as it comes in—the
class of the contributor (1, 2, 3, or 4), and the amount contributed in dollars. For example,
perhaps a junior contributes $20. The user would enter a 3 and a 20. The program
continues to accept data until the user types 999 for the contributor’s class. At that
point, data entry is completed, so display the four class totals as well as the number of
the class (1, 2, 3, or 4) that contributed the most
وشكرا
التعليقات
السؤال هو:
هناك مدرسة ثانوية تدعى أديسون تقوم بجمع التبرعات من أربع فئات يُعبر عن كل فئة من الأرقام من 1 إلى 4 والمطلوب كتابة فئة(class) لمعرفة الفئة الأكثر تبرعاً بين الفئات الأربع.
المُدخلات:
1- رقم الفئة و المبلغ بالدولار.
لم أرى في السؤال تنويه عن استخدام المصفوفات ثنائية البعد، فالسؤال تدريب على التعامل مع الفئات classes
خطوات الحل:
ستقومي بإنشاء فئة(class) وداخلها ستقومي بإنشاء وظيفة(method) تأخذ وسائط(parameters) الوسيط الأول فئة المتبرع والوسيط الثان المبلغ.
ستقومي بتعريف مُتغير لكل فئة من المتبرعين ويتم اسناد القيمة الإبتدائية 0 لهم
في كل مره يتم استدعاء الطريقة يتم اضافة مبلغ التبرع للمبلغ الموجود مسبقاً لنفس فئة المتبرعين
عندما يُدخل المُستخدم الرقم 999 يتم إنهاء التبرعة لتلك الفئة
في النهائة يقوم البرنامج بطباعة اجمالي التبرعات للفئات الأربع وبالتالي معرفة أي الفئات هي الأكثر تبرعاً
أنا قالت لي التيتشر انو بالسؤال راح تستخدمي 2D array
عشان كذا قلت انو نستخدم المصفوفات ثنائية الابعاد
لن تحتاج لأي مصفوفة، بل ستحتاج إلى صنف به أربعة متغيرات، وبه أيضًا إجراء؛ هذا الإجراء يستقبل وسيطين، الأول به رقم الفئة المتبرِعة، والثاني به المبلغ المتبرع به.
غريب!
كيف يكون على المصفوفات وأنت لا تعلم عدد مرات الإدخال من الأصل. إلا إذا كنت على دراية بكيفية التعامل مع المؤشرات، ودوال إدارة الذاكرة.
ملاحظة:
"هذا" تكتب كما سبق، ولا تكتب هكذا: "هاذا"
لما لا تقول المعلم، أو الأستاذ، بدل هذه الكلمة: "تيتشر"؟
تستطيع استخدام array list إذا لم تكن تعرف عدد المدخلات
و ايضا الواجب يقول حلها بهكذا، بالطبع يوجد الكثير من الطرق و لكن هذا ما يريده المعلم "التيشر"
غريب أن تستخدم المصفوفات في هذا السؤال، والأغرب هو استعمال قائمة المصفوفة (إذا صحت الترجمة)؛ فهي أولًا ليست من معايير لغة السي++، وثانيًا رغم أني لا أعلم كثيرًا عنها ولكنها متقدمة لدرجة أنك لن تصور أن سؤالًا بسيطًا كهذا يتناسب مع مستواها، وثالثًا ما يريده الأستاذ هي "مصفوفة ثنائية"، وليس ما ذكرته.
وعدا ذلك كله ما فائدة المصفوفة من الأصل إذا كان المطلوب فقط عرض المجموع لكل فئة (وهذا حسب السؤال).
في السؤال المطلوب هو عرض المجموع فقط، وهذا لا يحتاج إلى مصفوفة، بل يمكن بمتغير واحد (للفأة الواحدة)، أن نجمع كل ما يدخله المستخدم مع قيمة هذا المتغير.
ثانيًا لو قلنا مصفوفة، فكم سيكون عدد عناصرها؟ لأن عدد مرات الإدخال غير معروفة، ويبدو لي أن دوال إدارة الذاكرة أعلى بكثير من مستوى هذا السؤال.
شكرا على المعلومة :)
إعذرني فأنا معتادة على قول التيتشر
حسنا اذن
لو قلنا أن عدد الصفوف 4 بناء على عدد المستويات الموجودة في السؤال والأعمدة 2
التي ستكون رقم الكلاس والمبلغ الذي تبرع به وعلى ذكر المؤشرات يتوجب علينا في هذا السؤال أن نستخدمها
أيضاً يعني لو كتبت هذا الكود مثلا
int classes[4][2];
for(int row =0;row<4;row++)
for(int col=0;col<2;col++)
{
cout<<"Enter the num and Amount "<<endl;
cin>>classese[row][col];
هكذا سيبدأ بإدخال البيانات اليس كذلك رقم الكلاس و المبلغ ؟
اي يعني اذا دخلت أنا
رقم الكلاس 1 والمبلغ 20
ثم أدخلت مرة أخرى رقم الكلاس 1 والمبلغ 10
يحدث هنا انه يجمع المبلغ مباشرة اي يحذف 20
ويضع مكانها 30 ولو أدخلت مرة أخرى يجمع رقم الكلاس 1 والمبلغ 10
راح يحذف 30 ويضع مكانها 40
وهكذا الى ما اليوزر هو يتوقف عن الادخال بكتابة رقم 999
لكني لا أعلم كيف سوف يجمع المبالغ ويعرضها مباشرة هاذي المشكلة
والمؤشرات مطلوبة هي هذا السؤال مع المصفوفات الثنائية الابعاد
وشكراً
لو قلنا أن عدد الصفوف 4 بناء على عدد المستويات الموجودة في السؤال والأعمدة 2
لن تحتاجي لوضع أرقام الفئات في العمود الأول، فهذا يعرف بمؤشر المصفوفة (الذي يوضع بين القوسين المعقوفين "[]")، لكن يمكن أن يكون بمصفوفة متجهة:
unsigned int classes[4];
ولو أردنا أن نعرف قيمة المخزنة للفئة مثلًا الثانية لكتبنا: classes[2]; وثانيًا هذا الأمر لن يدخل إلا متغير واحد فقط:
cin>>classese[row][col];
ولكن يجب عليكي أن تعملي أمري إدخال؛ الأول يطلب رقم الفئة، والثاني يدخل القيمة. ثم بعدها عمل شرط "switch" للرقم الفئة، وفي كل حالة من حالات الشرط، هناك أمر جمع للعدد الثاني المدخل، مع متغير المجموع الكلي لتلك الفئة.
لكني لا أعلم كيف سوف يجمع المبالغ ويعرضها مباشرة هاذي المشكلة
هذه هي روح البرمجة، فهي مثل الكلام؛ حيث تستخدم أدوات اللغة للتعبير عن ما تريد. كذلك الأمر في البرمجة فهي استخدام أدوات اللغة البرمجة لتنفيذ ما تريد. ولكن يمكنكي أن تعملي متغير إدخال، هذا المتغير يوضع به ما يدخله المستخدم، وبعد تحديد الفئة، تضاف قيمة متغير الإدخال إلى متغير الفئة.
ملاحظة أخرى:
أضيفي ثلاثة (أو أربعة) فراغات قبل الشفرة لتظهر بهذا الشكل:
printf("By the name of Allah\n");