الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

برمجت برنامج ولدي بعض الاستفسارات

مغلق
بدأه ATmax في 21 أبريل 2005 · 15 رد · 1,275 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم احبتي

ان برمجت هذا البرنامج وظهرت لدي مشاكل في الاخير الرجاء المساعدة

اكتب برنامج لقراءة أسماء 10 طلاب وكذلك قراءة لكل طالب . ويعرف الطرق التالية :

- طريقة لقراءة الاسم .

- طريقة واحدة لقراءة وإيجاد المجموع لهذه الدرجات ثم تقوم هذه الطريقة بإرجاع المجموع .

-طريقة لإيجاد المتوسط الحسابي (استخدم المجموع المرجع من الطريقة السابقة )

- طريقة لطباعة اسم الطالب والمتوسط الحسابي .

الحــــــــــــــــــــــــــــــــل بايه طريقة ويفضــــــــــــــــــــــــــــــل بالمصفوفـــــــــــــــــــــــــــــــــــــات

بالنسبة لحلي

وسسبتلي مشاكل في إيجاد المجموع وارجاعة ارجاء تتبع البرنامج وتوضيح الاخطاء

package test;
import javax.swing.*;
public class simple {
  public static void main(String[] args) {
    String x;
    String p[];
    double m[][];
    p = read();
    m = summ();
  System.out.print("");
  for(int i=0;i<p.length;i++)
   System.out.println(p);
 for(int i=1;i<m.length;i++)
for(int k=0;k<m.length;k++){
     System.out.println(m[k]);
   }
   }

  public static String[] read(){
  String name[]=new String[5];
  for(int i=0;i<name.length;i++)
 name=JOptionPane.showInputDialog("enter the name");
 return name;
  }
 public static double[][] summ(){
 double a[][]=new  double [5][5];

 String s;double sum=0;
 for(int i=1;i<=a.length;i++)
 for (int k = 0; k <= a.length; k++){
   a[k] = Integer.parseInt(JOptionPane.showInputDialog(
       "enter the graed"));
   sum=aa[k];
 }

return sum;

 }
}
#2
اقتباس
اكتب برنامج لقراءة أسماء 10 طلاب وكذلك قراءة لكل طالب . ويعرف الطرق التالية :

- طريقة لقراءة الاسم .

- طريقة واحدة لقراءة وإيجاد المجموع لهذه الدرجات ثم تقوم هذه الطريقة بإرجاع المجموع .

-طريقة لإيجاد المتوسط الحسابي (استخدم المجموع المرجع من الطريقة السابقة )

- طريقة لطباعة اسم الطالب والمتوسط الحسابي .

لا يخفى عليك اخوي ATmax اني مبتدئ ، ولكن لابأس في المشارك و الاستفاده من بعضنا البعض

اولا لا اعتقد ان مثل هذا التمرين يحتاج الى كل هذه الطرق

:( <<<<< لانه مو فاهم الطرق كويس

عند محاولتي لصنع طريقة تقوم بجمع عناصر المصفوفه

واجهتني مشكله وهي عدم معرفتي إرسال جميع عناصر المصفوفة دفعة واحده للطريقه

(( أتمنى من أحد الاخوه إفادتي في هذه النقطة ))

على كل حال هذي محاولتي اتمنى انها تفي بالغرض

وعلى ما قال المثل: تأتي الامتحانات على ما تحتوي الكتبُ

package test;
import javax.swing.*;
 class simple 
 {
  public static void main(String[] args) 
   {
    String s=JOptionPane.showInputDialog("enter the students numbers");
    int a=Integer.parseInt(s);
    
      String nameStudent[] = new String[a];
      double   gradeStudent[]= new double[a];
     double sum=0;
 	 
    for(int i=0; i<nameStudent.length ; i++)
 	 {
    nameStudent=JOptionPane.showInputDialog("enter the name");
      gradeStudent=grade(i);
 	 
    sum+=gradeStudent;	
 	 }
 	 
  
 	 for (int i=0; i<nameStudent.length; i++)
 	 {
    int j=i+1;
    System.out.println(j+". "+nameStudent+"\t"+gradeStudent);
    
 	 }
 	 
 	 System.out.println("summing :\t"+sum+"\navg     :\t"+(sum/(gradeStudent.length)));
  System.exit(0);
  }
  
	public static double grade (double ii)
	{
  String ss=JOptionPane.showInputDialog("enter the grade");
  ii = Double.parseDouble(ss);
  return ii;
	}



}

11_03_06_12_48_57_1142110137Image(_66).jpg

#3

السلام عليكم

هذا تمرين نموذجي للتدرب على المصفوفات واختيار مصفوفة String للأسماء وصفوفة ذات بعدين للدرجات هو الاختيار المناسب حيث يكون الاسم بالموقع i تخزن درجاته بالسطر رقم i بمصفوفة الدرجات.

اقتراح الاخ ATmax جيد ولكن في عملية القراءة للدرجات يوجد خطأ في مجال التكرار حيث أن مواقع المصفوفات تبدأ دائما مع جافا من الصفر وتنتهي عند (طول المصفوفة ناقص 1 )

for(int i=1;i<m.length;i++)

يجب أن تكون

for(int i=0;i<m.length;i++)

وكذلك هناك خطا في:

for(int i=1;i<=a.length;i++)
for (int k = 0;  <= a.length; k++){

حيث يجب أن تكون

for(int i=0;i<a.length;i++)
for (int k = 0; k < a.length; k++){

لقد قمت بإنشاء المصفوفات داخل الطرق وتعبأتها بالبيانات ثم إرجاع المصفوفات كنتائج للطرق وهذا صحيح ومقبول ولكن نستعمل عادة وسيطات الطرق parameters لإرسال البيانات للطرق

إذا اردت ارسال مصفوفة لطريقة فيجب التصريح بأن الطريقة لها وسيطة parameter من نوع مصفوفة وعند استدعاء الطريقة نمرر لها فقط اسم المصفوفة التي يجب ان تتوافق مع التصريح عن parameter في رأس الطريقة

عند إدخال بيانات الطلاب كان من الافضل طباعة اسم الطالب لتحديد درجات من نقوم بقراءتها ولذلك يصبح راس الطريقة summ كالتالي

public static double [][] summ(String [] p) {  // statements

وهنا يصبح بالأمكان الوصول للأسماء داخل الطريقة summ والذي يسبح استدعاؤها كالتالي

m = summ(p);

يفضل تغيير اسما المصفوفات من p إلى stNames ومن m إلى stGrades

كما ويمكن (وهذا الذي أفضله) انشاء المصفوفات داخل الطريقة main وذلك بعد قراءة عدد الطلاب وعدد المقررات وتمرير المصفوفات كوسيطات للطرق parameters ثم استدعاء الطرق كالتالي:

 readNames(stNames)//for reading student names

ثم استدعاء

 readGrades(stNames,stGrades)//for reading student grades

علما انه يكون رأس هذه الطرق كالتالي

public static void readNames(String stNames) // for reading student names
public static void  readGrades(stNames,stGrades) //for reading student grades

كما ويمكن اضافة طريقة average لحساب المتوسط الحسابي لدرجات طالب واحد فقط حيث يمرر لها سطر من اسطر مصفوفة الدرجات للطالب الذي نعمل على درجاته ويكون راس الطريقة كالتالي:

public static double sumGrades(double [ ] oneStGrades) // for summin student's grades

ونتعامل مع هذه المصفوفة كانها مصفوفة أعداد ذات بعد واد نريد حساب المتوسط الحسابي لهذه الاعداد وارجاعه كنتيجة للطريقة

ويتم استدعاء هذه الطريقة من داخل الطريقة main وداخل تكرار خاص بكل الطلاب مثلا

for (int i=0;i<stNames.length;i++) {  // for students

System.out.print("Student: " + stNames); // print student i

System.out.println("average: " + agerage(stGrades)); // print average of student i
}

ارجو الاستفادة والسلام عليكم

#4

السلام عليكم

عذرا لقد قمت بنسخ وإلصاق راس الطرق من استدعائها ولم اجري التغيير الازم لذلك يكون راس الطرق readStudents و readGrades كالتالي

public static void readNames(String [] stNames) // for reading student names

{ ... }

public static void readGrades(String [] stNames, double [][] stGrades) //for reading student grades

{...}

عذرا مرة ثانية

ارجو ان لا يمون هناك اخطاء اخرى

والسلام عليكم

#5

شكرا يا شباب على المساعدة اجرب وابلغكم بالي صار

- a l t - شكرا لك وعلى مشاركتك

kkhalil2005 شكرا لتفصيل والشرح والله يجزاك خير

#6

معليش يا شباب يوجد خطأ مطبعي في السؤال

اكتب برنامج لقراءة أسماء 10 طلاب وكذلك قراءة 5 درجات لكل طالب . ويعرف الطرق التالية :

- طريقة لقراءة الاسم .

- طريقة واحدة لقراءة وإيجاد المجموع لهذه الدرجات ثم تقوم هذه الطريقة بإرجاع المجموع .

-طريقة لإيجاد المتوسط الحسابي (استخدم المجموع المرجع من الطريقة السابقة )

- طريقة لطباعة اسم الطالب والمتوسط الحسابي .

#7

السلام عليكم

حسب طرح السؤال يجب أن تنشئ 4 مصفوفات الاولى للأسماء فيها 10 عناصر والثانية للدرجات ذات بعدين وتكون 10 اسطر و5 اعمدة على أساس ان كل طالب تخزن درجاته الخمسة في سطر من المصفوفة ومصفوفة ثالثة لتخزين مجموع درجات كل طالب وتكون بطول عشرة واخيرا مصفوفة بطول 10 ايضا لتخزين المتوسط الحسابي للطلاب

التصريح وانشاء المصفوفات:

String []names = new String[10];

double [][] grades = new double [10][5];

double [] sums = new double[10];

double [] averages = new double[10];

الطريقة التي تقرأ الاسماء تعريفها ثم استدهاؤها

public static void readNames(String [] stNames) // for reading student names
{ ... }

readNames(names);

الطريقة التي تقرأ الدرجات وتحسب المجموع

public static void readGrades(String [] names, double [][]grades, double [] sums) 
{
for (int i=0; i<names.length; i++) {
double sum = 0;
for(int j=0; j<names.length; j++){
String gr = JOptionPane.showInputDialog(names+"'s grade"+(j+1)+" of " +names.length);
grades[j] = Double.parseDouble(gr);
sum += grades[j];
}
sums = sum;
}
}

يكون استدعاء الطريقة كالتالي

readGrades(names, grades, sums);

والطريقة التي تحسب المتوسط الحسابي تكون كالتالي:

public static void getAverage(double [][] grades, double [] sums, double [] averages) 
{
for (int i= 0; i<sums.length;i++)
{
int nbGrades = grades.length;
if (nbGrades == 0) averages = 0;
else averages=sums/nbGrades;
}
}

ويكون استدعاؤها

getAverage(grades, sums, averages);

والطريقة الاخيرة التي تطبع الاسماء والمتوسطات الحسابية

public static void print(String[] names, double [] averages) 
{
BufferString bs = new BufferString("Names\tAverage\n");

for (int i= 0; i<names.length;i++)
{
bs.append(names+averages+"\n");

}
JOptionPane.showMessageDialog(null, bs.toString());

ويكون استدعاؤها

print(names, averages);

لقد استعملت bufferstring لأضع اسماء الطلاب ومتوسطاتهم الحسابية فيها ثم اظهارهم في مربع حوار ويمكن طباعتهم باستعمل خرج القنصلة العادي System.out.println

والسلام عليكم

#8

السلام عليكم

والله لو املأ المنتدى من كلمة شكر ما وفيتك حقك

بس بقول كلمة تسواهم كلهم ...

جزاك الله خير عني وعن جميع المسلمين وغفر الله لك ولوالديك وادخلهم الجنة

#9

انا سوف اجرب غدا وابلغكم بلي صار معي

لاني الان مشغول مع برنامج ثاني ..

تقبلوا تحياتي

#10

kkhalil2005

اخي السلام عليكم

في بعض الاستفسارات

اولا في

لان يطلعلي اخطأ في length

for(int j=0; j<names.length; j++){
 String gr = JOptionPane.showInputDialog(names+"'s grade"+(j+1)+" of " +names.length);

وجد أيضا هنا

فما معنا هذي BufferString bs و bs.append و bs.toString()

ولا استطيع ان اعمل البرنامج بدونهم لاني انا مبتدى

علما اني المسرح لنا استخدام import javax.swing.*; فقط

 BufferString bs = new BufferString("Names\tAverage\n");

 for (int i= 0; i<names.length;i++)
 {
 bs.append(names+averages+"\n");

 }
 JOptionPane.showMessageDialog(null, bs.toString());
 }

وشكرا لك وارجوا ان تقرا رسالتي الخاصة التي ارسلتها لك

#11

السلام عليكم

صحيح هناك خطأ في التكرار لاني وضعت اسم مصفوفة الاسماء ويجب وضع مصفوفة الدرجات لانها المصفوفة ذات بعدين فنستبدل names بـ grades

for(int j=0; j<grades.length; j++){
String gr = JOptionPane.showInputDialog(names+"'s grade"+(j+1)+" of " +grades.length);

بالنسبة للكلاس BufferString فهي تستعمل لتمثيل سلاسل الرموز التي يمكن تغيير قيمتها أي كائنات هذه الكلاس بعكس الكلاس String التي لا يمكن تغيير قيمة كائناتها بعد انشائها. والطريقة append هناك عدة نسخ منها وهي تأخذ وسيطة من أي نوع بيانات وتطبق على BufferString فتضيف القيمة الممرة لها إلى نهاية السلسلة المطبقة عليها وهكذا نكون ألصقنا اسماء والمتوسطات الحسابية للطلاب الواحد تلو الآخر لنكون سلسة واحدة ونظهر في مربع حوار واحد بيانات كافة الطلاب. والطريقة toString تحول السلسلة من النوع BufferString إلى سلسلة من النوع String لاستعمالها مع showMessageDialog لأن وسيطتها من النوع String

كما ويمكن الاستغناء عن استعمال BufferString وإظهار بيانات كل طالب بمرنع حوار خاص به

أي نضع داخل التكرار في الطريقة print

JOptionPane.showMessageDialog(null, names+"\t"+averages);

الفئة StringBuffer موجودة على ما اعتقد في المكتبة java.lang التي يتم استيرادها تلقائيا.

والسلام عليكم

#12

السلام عليكم

معليش طبقت كل شيء ولكن بعد ما يقرا الاسماء يطلع خطا في قرائه الدرجات انظر البرنامج الي كاتبة يمكن من عندي الخطا

user-1114266016.jpg

وفي بعض الملاحظات :-

وهي ايش فائدة الشرط

 int nbGrades = grades.length;
 if (nbGrades == 0) averages = 0;
 else averages=sums/nbGrades; } }

وثانيا

لو امكن نستبدل السلسلة هذي الرمزية nbGrades وما هي في الاصل وما معناها

شكرا لك اخي

وانا انتظرك باحر من الجمر

#13

السلام عليكم

يجب انشاء المصفوفات داخل الطريقة main وقبل استدعاء الطرق أي بين السطرين 8 و 9 كما يظهر في الصورة (البرنامج) لأنه كما كتبته يكون داخل الطريقة ةشهى المصفوفات قيمتها null وعند استدعاء الطرق تنسخ قيمها في وسيطات الطرق ومن ثم تنشئ المصفوفات التي داخل الطرق وتكون مستقلة عن مصفوفات الطريقة main اما اذا تم الانشاء في الطريقة main فيتحدد مكانها بالذاكرة وعند استدعاء الطرق تكون وسيطات الطرق عبارة عن مرجع آخر إلى نفس المصفوفات التي بالطريقة main ويتم العمل عليها مباشرة بتخزين القيم فيها بعد قراءتها من لوحة المفاتيح.

اما بالنسبة للشرط فهو غير ضروري هنا ولكن بما اننا نقسم على عدد الدرجات فيجب ان يكون عددها لا يساوي صفر لانه لا يمكن القسمة على صفر اما في هذا البرنامج معدد الدرجات لكل الطلاب هو نفسه 5. وكتبته في حال كان عدد الدرجات مختلف من طالب إلى آخر.

اعتقد المشكلة في مكان انشاء المصفوفات

قم بانشائهم في الطريقة main

والسلام

#14

السلام عليكم

اخي kkhalil2005

والله اني دخت ويا البرنامج من كثر المحاولات وانشئت مصفوفات لما دخت وكلها خطأ في خطأ

مافي وقت حتى احاول اكثر من كذا

والله لازم السلم البرنامج غدا فكيف أنشاء المصفوفات اعرف سؤال بايخ بس والله اني تعبت مرررررررررة واني اختبار مرة ثانية

ولي رجعة

سلاااااااام عليكم

#15

السلام عليكم ورحمة الله وبركاته

هون عليك الامر بسيط وقد قمت به ولكن داخل الطريقة readNames وعليك أن تحذفه من داخلها وتقوم به كما قلت قبل استدعاء الطرق داخل الmain وقد كتبت عملية التصريح و الانشاء سابقاء وانسخها لك مرة ثانية وهي:

String []names = new String[10];

double [][] grades = new double [10][5];

double [] sums = new double[10];

double [] averages = new double[10];

هذا التصريح والانشاء على اساس عندنا عشر طلاب وخمس درجات لكل طالب

قم بوضعها بين السطر 8 والسطر 9 كما يظهر بصورة البرنامج الذي كتبته

واحذف انشاء مصفوفة الاسماء داخل الطريقة readNames أي السطر رقم 15 بصورة برنامجك

اذا قمت بتعديل برنامجك فنتبه لارقام الاسطر لانها التي في الصورة بالرد الذي قمت انت به

بالتوفيق

#16

هههههههههه

صحيت الفجر وكأس حليب وحليته وسلمت الواجب

والله ضحكت على سؤالي يوم صحيت الصبح وصحصحت صدق ان الاستعجال يلخبط الدماغ ........

الحين بحاول احل السؤال بدون استخدام المصفوفات سوف اجرب واذا واجهتني مشاكل سوف اخبرك ...

شكرا لك لمساعدتي ...

هذا الموضوع مغلق.

مواضيع مشابهة