حل اسئلة وتمارين بلغة جافا الجزء الثالث
منتدى مصر التقني :: قسم لغات البرمجة Programming languages :: لغة الجافا Java :: نقاش و أستفسارات الاعضاء
صفحة 1 من اصل 1 • شاطر
abushuber- ....
- تاريخ التسجيل : 29/09/2018
المساهمات : 57
النقاط : 81
التقيم : 0
الدولة :
الجنس :
رد: حل اسئلة وتمارين بلغة جافا الجزء الثالث
حل اسئلة الورقة الثانية :
1_مخرجات البرنامج التالى
- الكود:
int x;
static void m(int i){
x++;
i++;
}
public static void main(String[] args) {
int y=3;
m(y);
System.out.println(x+","+y);
}
سوف نحصل على خطأ Non static variables Cannot be referenced from a static context
وهذا معناه أنه لا يمكن الوصول إلى متغير غير ثابت من طريقة ثابتة لأنها لا تملك حق الوصول إلى أي مثيل للفئة
زهراء- ........
- تاريخ التسجيل : 18/02/2011
المساهمات : 438
النقاط : 769
التقيم : 67
الدولة :
الجنس :
رد: حل اسئلة وتمارين بلغة جافا الجزء الثالث
2_ الاختلاف بين البرنامجين
المخرجات :
1
3
وذلك لانه عند استخدام سلسلة حرفية ، يتم احتجاز السلسلة فى الذاكرة و بالتالى عن مقارنة سلسلتين سواء بالمعامل == أو بالدالة equals فانه يتم المقارنة على كل من القيم الحرفية للسلسلة
أما البرنامج الثاني :
المخرجات
2
3
هنا النتيجة اختلفت وذلك لانه عند استخدام new String فاننا قمنا بانشاء كائن سلسة جديد و بالتالى عن استخدام معامل المساواة == فى المقارنة فانك بذلك تقارن بين كائنين و ليس المحتوي النص للكائننين ...وهذا هو السبب في أنه يقترح دائمًا مقارنة مادتين String باستخدام طريقة equals () ولا تقارنهما أبدًا باستخدام عامل ==
وهذا هو الاختلاف بين البرنامجين أن البرنامج الاول تمت المقارنة بين سلسلتين بمعامل المساواة == و باستخدام طريقة equals و تلك الطريقتين تقوم بمقارنة محتوى السلسة من نص و بالتالى فلك الخيار فى استخدامهم
أما لابرنامج الثاني تمت المقارنة بين سلسة و كائن سلسة و بالتالى اذا اردت المقارنة بين محتواهم فعليك استخدام الطريقة equals أما اذا استخدم معامل المساوة فانك بذلك لا تقارن بين محتواهم بل بيهم
ارجوا ان المعلومة تكون وصلت لك بشكل جيد
- الكود:
public class App {
public static void main(String[] args) {
String s1= "abc";
String s2= "abc";
if (s1==s2)
System.out.println(1);
else
System.out.println(2);
if (s1.equals(s2))
System.out.println(3);
else
System.out.println(4);
}
}
المخرجات :
1
3
وذلك لانه عند استخدام سلسلة حرفية ، يتم احتجاز السلسلة فى الذاكرة و بالتالى عن مقارنة سلسلتين سواء بالمعامل == أو بالدالة equals فانه يتم المقارنة على كل من القيم الحرفية للسلسلة
أما البرنامج الثاني :
- الكود:
public class App {
public static void main(String[] args) {
String s1= "abc";
String s2= new String("abc");
if (s1==s2)
System.out.println(1);
else
System.out.println(2);
if (s1.equals(s2))
System.out.println(3);
else
System.out.println(4);
}
}
المخرجات
2
3
هنا النتيجة اختلفت وذلك لانه عند استخدام new String فاننا قمنا بانشاء كائن سلسة جديد و بالتالى عن استخدام معامل المساواة == فى المقارنة فانك بذلك تقارن بين كائنين و ليس المحتوي النص للكائننين ...وهذا هو السبب في أنه يقترح دائمًا مقارنة مادتين String باستخدام طريقة equals () ولا تقارنهما أبدًا باستخدام عامل ==
وهذا هو الاختلاف بين البرنامجين أن البرنامج الاول تمت المقارنة بين سلسلتين بمعامل المساواة == و باستخدام طريقة equals و تلك الطريقتين تقوم بمقارنة محتوى السلسة من نص و بالتالى فلك الخيار فى استخدامهم
أما لابرنامج الثاني تمت المقارنة بين سلسة و كائن سلسة و بالتالى اذا اردت المقارنة بين محتواهم فعليك استخدام الطريقة equals أما اذا استخدم معامل المساوة فانك بذلك لا تقارن بين محتواهم بل بيهم
ارجوا ان المعلومة تكون وصلت لك بشكل جيد
زهراء- ........
- تاريخ التسجيل : 18/02/2011
المساهمات : 438
النقاط : 769
التقيم : 67
الدولة :
الجنس :
رد: حل اسئلة وتمارين بلغة جافا الجزء الثالث
3_ السؤال الثالث برنامج لطباعة تقدير الطلاب بناء على الدرجة با استخدام جملة if
- الكود:
public class App {
public static void main(String[] args) {
int marks = 80;
if( marks > 90 )
{
System.out.println("Excellent");
}
else if( marks > 75 )
{
System.out.println("Very Good");
}
else if( marks > 65 )
{
System.out.println("Good");
}
else if( marks > 50 )
{
System.out.println("Fair");
}
else
{
System.out.println("Fail");
}
}
}
زهراء- ........
- تاريخ التسجيل : 18/02/2011
المساهمات : 438
النقاط : 769
التقيم : 67
الدولة :
الجنس :
رد: حل اسئلة وتمارين بلغة جافا الجزء الثالث
الف شكر اخت زهراء...وجزاك الله خير الجزاء...بالنسبة للسؤال الاول لم افهمه بشكل جيد...السؤال الثاني لماذا خرجت النتيجة 1:3 يعني هذه الارقام ع اي اساس طلعت كمخرجات..وكذلك الفرع الثاني من السؤال الذي مخرجاته 2:3....اما السؤال الثالث ففهمته جيدا شكرا لك مرة اخرى..
abushuber- ....
- تاريخ التسجيل : 29/09/2018
المساهمات : 57
النقاط : 81
التقيم : 0
الدولة :
الجنس :
رد: حل اسئلة وتمارين بلغة جافا الجزء الثالث
أهلا بيك الاخ الكريم @abushuber
على عجالة ساحاول أجب على السؤال الاول ولى معك لقاء اخر ان تيسر لى الامر:
a _مطلوب تعريف الاتى :
block of code : أو كتل التعليمات البرمجية بالعربية هو كل تجمع لمجموعة بيانات أو أكثر بين الأقواس المتعرجة {} في لغة الجافا و يمكن أن تكون الكتل متداخلة ويمكن تضمينها داخل كتل أخرى.و يتم استخدام كتلة التعليمات البرمجية في #Java بشكل شائع في عبارات #if و #for و #while.وجميع محتويات الفئات والطبقات هي أيضًا كتل ، على سبيل المثال ، محتوى الفئة أو الطريقة الرئيسية في الأمثلة هي كتل block of code
مثال: يوضح كتلة برمجية فى جملة if
method-signature : بالعربية طريقة التوقع وهى طرق داخل الفئة تحمل نفس الاسم لكن ب حجج أو باراميترات مختلفة parameter مثلها فى ذلك مثل التحميل الزائد للدوال overloading لكن الاختلاف يظهر فى أن method-signature لا تحتوي على محدد وصول و لا هي من الدوال التى تقوم بارجاع قيمة بReturn و بالتالى فتعتبر توقيع الطريقة جزء من الطريقة التي تقوم على اساس التحميل الزائد
object:الكائنات فى الجافا هى مجموعة البيانات والإجراءات التى تم تعريفها و تخزينها بالفئة وكل كائن له حالة أو صفات وسلوك. يتم تخزين حالة الكائن في الحقول (المتغيرات) ، بينما تعرض الأساليب (الدالات) سلوك الكائن.و يتم إنشاء الكائن باستخدام الكلمة الأساسية "new".
b_توضيح بامثلة الفرق بين الاجراء و الطريقة Procedure and method
الإجراء #Procedure والطريقة #method متشابهان للغاية ، لكن الاختلاف الأساسي بينهما هو أن الطريقة تأخذ مجموعة من المدخلات وتقوم بإرجاع قيمة واحدة أو أكثر فى حين أن الإجراء لا يقوم بذلك .....كما أن الطريقة تعتبر جزء أصغر من الإجراء
المثال التوضيحيى :
فى المثال اعلاه قمنا بانشاء طريقة باسم name لارجاع قيمة الاسم ومن ثم طباعتها فى الدالة الرئيسة .....و قمنا بانشاء اجراء باسم displayname لاطباعة الاسم الثاني دون ارجاع اى قيمة
على عجالة ساحاول أجب على السؤال الاول ولى معك لقاء اخر ان تيسر لى الامر:
a _مطلوب تعريف الاتى :
block of code : أو كتل التعليمات البرمجية بالعربية هو كل تجمع لمجموعة بيانات أو أكثر بين الأقواس المتعرجة {} في لغة الجافا و يمكن أن تكون الكتل متداخلة ويمكن تضمينها داخل كتل أخرى.و يتم استخدام كتلة التعليمات البرمجية في #Java بشكل شائع في عبارات #if و #for و #while.وجميع محتويات الفئات والطبقات هي أيضًا كتل ، على سبيل المثال ، محتوى الفئة أو الطريقة الرئيسية في الأمثلة هي كتل block of code
مثال: يوضح كتلة برمجية فى جملة if
- الكود:
if( x < y ){
x = y;
y = 0;
}
method-signature : بالعربية طريقة التوقع وهى طرق داخل الفئة تحمل نفس الاسم لكن ب حجج أو باراميترات مختلفة parameter مثلها فى ذلك مثل التحميل الزائد للدوال overloading لكن الاختلاف يظهر فى أن method-signature لا تحتوي على محدد وصول و لا هي من الدوال التى تقوم بارجاع قيمة بReturn و بالتالى فتعتبر توقيع الطريقة جزء من الطريقة التي تقوم على اساس التحميل الزائد
object:الكائنات فى الجافا هى مجموعة البيانات والإجراءات التى تم تعريفها و تخزينها بالفئة وكل كائن له حالة أو صفات وسلوك. يتم تخزين حالة الكائن في الحقول (المتغيرات) ، بينما تعرض الأساليب (الدالات) سلوك الكائن.و يتم إنشاء الكائن باستخدام الكلمة الأساسية "new".
b_توضيح بامثلة الفرق بين الاجراء و الطريقة Procedure and method
الإجراء #Procedure والطريقة #method متشابهان للغاية ، لكن الاختلاف الأساسي بينهما هو أن الطريقة تأخذ مجموعة من المدخلات وتقوم بإرجاع قيمة واحدة أو أكثر فى حين أن الإجراء لا يقوم بذلك .....كما أن الطريقة تعتبر جزء أصغر من الإجراء
المثال التوضيحيى :
- الكود:
public class Test {
public static void main(String[] args) {
Test print = new Test();
System.out.println( print.name("ahmed"));
print.displayname();
}
// method
String name( String n ) {
return n ;
}
// Procedure
void displayname( ) {
System.out.println("Man'Na");
}
}
فى المثال اعلاه قمنا بانشاء طريقة باسم name لارجاع قيمة الاسم ومن ثم طباعتها فى الدالة الرئيسة .....و قمنا بانشاء اجراء باسم displayname لاطباعة الاسم الثاني دون ارجاع اى قيمة
ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم
رد: حل اسئلة وتمارين بلغة جافا الجزء الثالث
ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم
رد: حل اسئلة وتمارين بلغة جافا الجزء الثالث
كل الشكر لك استاذ احمد الطيب..وربي يوفقك
abushuber- ....
- تاريخ التسجيل : 29/09/2018
المساهمات : 57
النقاط : 81
التقيم : 0
الدولة :
الجنس :
رد: حل اسئلة وتمارين بلغة جافا الجزء الثالث
اهلا بيك الاخ الكريم @abushuber
السؤال الثاني :مطلوب منك كتابة برنامج لحساب مرتب عامل فى شركة , يتأثر هذا الراتب عندما ياخذ العامل اجازة عادية أو حتى اجازة مرضية بحيث يقل الراتب كنسبة مئوية من الراتب فى هذه الحالة مع الأخذ بعين الاعتبار الاتى :
1_أن يكون الكلاس أو الفئة باسم #workers
2_ على أن تحتوى الفئة حقول المتغيرات التالية #name# , salary# ,city
3_ إنشاء مشيد أو منشئ الفئة مع المتغيرات لتمرير اكتساب قيمة الكائن الأولي لجميع المتغيرات المذكورة أعلاه
4_استخدام أسلوب التحميل الزائد لتجنب التكرار الكود كلما كنت في حاجة الى ذلك
5 _ إنشاء الدالة الرئسية #main داخل الفئة لانشاء كائن جديد باسم #obj1 لطباعة مرتب العامل فى الحالة العادية و مرتبة فى حالة أخذ الاجازة
الحل على النحو التالى :
1_إنشاء الفئة باسم #workers
2_الاعلان عن حقول المتغيرات
3_إنشاء منشيء الفئة #workers
4_إنشاء الطرق التى سنتخدمها فى البرنامج لارجاع اسم الموظف و المدينة و قيمة مرتبة
5_إنشاء الدالة الرئسية #main داخل الفئة على النحو التالى :
6_ انشاء كائن جديد من الفئة باسم obj1 لطباعة بيانات الموظف اعلاه
يمكن ملاحظة أننا قمنا بتمرير بيانات العامل الاساسية مثل الاسم و المدينة و الراتب الاساسي الى كائن obj1 ....حتى الان لم نقم بمعالجة الخصم من راتبة نتيجة الاجازة او الراحة التى اخذها
لذلك سنفترض أن تلك الشركة تقوم بخصم نسبة 12% من راتب العامل نيجة هذه الاجازة ....لذلك علينا حساب القيمة التى سيتم خصمها من راتبة و ذلك على النحو الرياضى التالى :
قيمة الخصم = المرتب الاساسي * نسبة الخصم
اذن الراتب الجديد = الراتب الاساسي - قيمة هذا الخصم
و يتم ذلك برمجيا عن طريق التالى :
الاعلان عن ثلاث متغيرات لتخزين نسبة الخصم , قيمة الخصم , الراتب الجديد وذلك على النحو التالى :
بعد ذلك يمكننا اجراء العمليات الحسابية السابقة و من ثم طباعة المخرجات ....
اذن الكود بالكامل على النحو التالى :
المخرجات :
Employee Name: ahmed
Employee city: cairo
Employee Salary: 10000.0
discount percentage;12.0
discount value ;1200.0
Employee new Salary: 8800.0
السؤال الثاني :مطلوب منك كتابة برنامج لحساب مرتب عامل فى شركة , يتأثر هذا الراتب عندما ياخذ العامل اجازة عادية أو حتى اجازة مرضية بحيث يقل الراتب كنسبة مئوية من الراتب فى هذه الحالة مع الأخذ بعين الاعتبار الاتى :
1_أن يكون الكلاس أو الفئة باسم #workers
2_ على أن تحتوى الفئة حقول المتغيرات التالية #name# , salary# ,city
3_ إنشاء مشيد أو منشئ الفئة مع المتغيرات لتمرير اكتساب قيمة الكائن الأولي لجميع المتغيرات المذكورة أعلاه
4_استخدام أسلوب التحميل الزائد لتجنب التكرار الكود كلما كنت في حاجة الى ذلك
5 _ إنشاء الدالة الرئسية #main داخل الفئة لانشاء كائن جديد باسم #obj1 لطباعة مرتب العامل فى الحالة العادية و مرتبة فى حالة أخذ الاجازة
الحل على النحو التالى :
1_إنشاء الفئة باسم #workers
- الكود:
public class Workers {
}
2_الاعلان عن حقول المتغيرات
- الكود:
public class Workers {
private String Name;
private String city;
private double Salary;
}
3_إنشاء منشيء الفئة #workers
- الكود:
public class Workers {
private String Name;
private String city;
private double Salary;
Workers(String N, String ad, double S) {
this.Name = N;
this.city = ad;
this.Salary = S;
}
4_إنشاء الطرق التى سنتخدمها فى البرنامج لارجاع اسم الموظف و المدينة و قيمة مرتبة
- الكود:
String GetName(){
return Name;
}
String GetAddr(){
return city;
}
double GetSalary(){
return Salary;
}
5_إنشاء الدالة الرئسية #main داخل الفئة على النحو التالى :
- الكود:
public static void main(String[] args) {
}
6_ انشاء كائن جديد من الفئة باسم obj1 لطباعة بيانات الموظف اعلاه
- الكود:
public static void main(String[] args) {
Workers obj1 = new Workers("ahmed","cairo",10000);
}
يمكن ملاحظة أننا قمنا بتمرير بيانات العامل الاساسية مثل الاسم و المدينة و الراتب الاساسي الى كائن obj1 ....حتى الان لم نقم بمعالجة الخصم من راتبة نتيجة الاجازة او الراحة التى اخذها
لذلك سنفترض أن تلك الشركة تقوم بخصم نسبة 12% من راتب العامل نيجة هذه الاجازة ....لذلك علينا حساب القيمة التى سيتم خصمها من راتبة و ذلك على النحو الرياضى التالى :
قيمة الخصم = المرتب الاساسي * نسبة الخصم
اذن الراتب الجديد = الراتب الاساسي - قيمة هذا الخصم
و يتم ذلك برمجيا عن طريق التالى :
الاعلان عن ثلاث متغيرات لتخزين نسبة الخصم , قيمة الخصم , الراتب الجديد وذلك على النحو التالى :
- الكود:
double dis,valuedis,newsalary;
بعد ذلك يمكننا اجراء العمليات الحسابية السابقة و من ثم طباعة المخرجات ....
اذن الكود بالكامل على النحو التالى :
- الكود:
public class Workers {
private String Name;
private String city;
private double Salary;
Workers(String N, String ad, double S) {
this.Name = N;
this.city = ad;
this.Salary = S;
}
String GetName(){
return Name;
}
String GetAddr(){
return city;
}
double GetSalary(){
return Salary;
}
public static void main(String[] args) {
Workers obj1 = new Workers("ahmed","cairo",10000);
double dis,valuedis,newsalary;
dis=12;
valuedis=(obj1.GetSalary()*dis)/100;
newsalary=obj1.GetSalary()-valuedis;
System.out.println("Employee Name: "+ obj1.GetName() +"\n"
+ "Employee city: " + obj1.GetAddr() + "\n"
+ "Employee Salary: " + obj1.GetSalary() + "\n"
+ "discount percentage;" + dis + "\n"
+ "discount value ;" + valuedis + "\n"
+ "Employee new Salary: " + newsalary + "\n"
);
}
}
المخرجات :
Employee Name: ahmed
Employee city: cairo
Employee Salary: 10000.0
discount percentage;12.0
discount value ;1200.0
Employee new Salary: 8800.0
لى معك لقاء اخر خصوص سؤال الدايرة دة رخم شوي
ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم
رد: حل اسئلة وتمارين بلغة جافا الجزء الثالث
بالنسبة للسؤال الاول لم افهمه بشكل جيد
السؤال يطلب منك كتابة مخرجات البرنامج الموضح به وهو على النحو التالى :
- الكود:
public class Basiec {
int x;
static void m(int i){
x++;
i++;
}
public static void main(String[] args) {
int y=3;
m(y);
System.out.println(x+","+y);
}
}
من وضع هذا المثال بالامتحان لا يريد معرفة المخرجات فى حقيقة الامر _فاى دراس ملم بلغة الجافا سيعرف ان المخرجات من المفترض أن تكون 1.3_ وانما يريد معرفة قدرة الدراس على فهم البرنامج
لذلك قام بالاعلان عن المتغير x كمتغير غير ثابت non_static وتم استخدام هذا المتغير فى طريقة ثابتة static و بالتالى فان مخرجات هذا البرنامج لن تكون 1.3 كما اعتقد بعض الدارسين وكما رايته مكتوب بخط اليد بجوار السؤال فى ورقة الاسئلة ...
إنما المخرجات ستكون رسالة :
non-static variable x cannot be referenced from a static context
ومعناه انه لا يمكن استخدام متغير non-static فى طريقة static
و على الرغم أن السؤال لم يطلب غير المخرجات اعلاه الا اننى ساقوم بكتابة البرنامج بطريقة اخرى ويتم تعريف المتغير x حتى تظهر المخرجات 1.3 و تصل لك فكرة الفرق بين البرنامجين على النحو التالى :
- الكود:
public class Basiec {
static int x;
static void m(int i){
x++;
i++;
}
public static void main(String[] args) {
int y=3;
m(y);
System.out.println(x+","+y);
}
}
لاحظ الاختلاف فى تعريف المتغير static int x
زهراء- ........
- تاريخ التسجيل : 18/02/2011
المساهمات : 438
النقاط : 769
التقيم : 67
الدولة :
الجنس :
رد: حل اسئلة وتمارين بلغة جافا الجزء الثالث
- الكود:
السؤال الثاني لماذا خرجت النتيجة 1:3 يعني هذه الارقام ع اي اساس طلعت كمخرجات..وكذلك الفرع الثاني من السؤال الذي مخرجاته 2:3
تلك المخرجات خرجت نتيجة جملة if فى كلا البرنامجين التى تقوم بطباعة رقم 1 اذا كان المتغير s1 يساوى المتغير s2 باستخدام معامل المساواة == على النحو التالى :
- الكود:
if (s1==s2)
System.out.println(1);
وايضا طباعة الرقم 3 اذا كان المتغير s1 يساوى المتغير s2 باستخدام طريقة equals على النحو التالى :
- الكود:
if (s1.equals(s2))
System.out.println(3);
لذلك كانت النتجة 1 و 3 لان فعلا المتغير s1 يساوي المتغير s2 فى كلا المقارنتين وهكذا بالنسبة للبرنامج التانى >>>لكن ليس المطلوب مخرجات البرنامج و انما الفرق بين البرنامجين
لذلك سوف اكتب لك البرنامج بطريقة توصل لك الفكرة
- الكود:
String s1= "abc";
String s2= "abc";
s1==s2 // yes
s1.equals(s2)// yes
عند استخدام سلسلة حرفية ، يتم احتجاز السلسلة فى الذاكرة و بالتالى عن مقارنة سلسلتين سواء بالمعامل == أو بالدالة equals فانه يتم المقارنة على كل من القيم الحرفية للسلسلة و بالتالى فان نتيجة المقارنة نعم كما هو ظاهر اعلاه
لكن المثال الاخر استخدم كائن سلسلة على النحو التالى :
- الكود:
String s1= new String("abc");
String s2= new String("abc");
s1==s2 // No
s1.equals(s2)// yes
هنا النتيجة اختلفت وذلك عن مقارنة كائن السلسة باستخدام معامل المساواة == فاننا بذلك نقارن بين كائنيين و ليس محتوي الكائنن فالرغم من أن الكائن s1 يحتوي على نفس النص abc الموجود فى الكائن s2 فإن النتيجة كانت NO ...أما استخدام الطريقة equals للمقارنة يتم مقارنة محتوى الكائنيين
ارجوا ان تكون الفكرة قد وصلت
تحياتى
زهراء- ........
- تاريخ التسجيل : 18/02/2011
المساهمات : 438
النقاط : 769
التقيم : 67
الدولة :
الجنس :
رد: حل اسئلة وتمارين بلغة جافا الجزء الثالث
روعة....اخت زهراء ....وصلت للصميم...مودتي لك
abushuber- ....
- تاريخ التسجيل : 29/09/2018
المساهمات : 57
النقاط : 81
التقيم : 0
الدولة :
الجنس :
رد: حل اسئلة وتمارين بلغة جافا الجزء الثالث
الاخت و الاستاذة الكريمة @زهراء اشكرك والله على مجهودك و نشاطك بالمنتدى فاسمحى لى ان يتم وضعك فى رتبة العضو الشرفى بالمنتدى طالما انك ترفضي الانضمام للادارة.........الاخ الكريم @abushuber اهلا بيك و معذرة فلم استطيع الدخول بالامس
السؤال الثالث : يطلب انشاء برنامج يقوم بتخصيص نقطة ثنائية الأبعاد مع إحداثيات x و y وحساب المسافة من هذه النقطة إلى نقطة أخرى عند الإحداثيات المعينة (x، y)
يعتبر قانون البعد بين نقطتين أحد قوانين الرياضيات لاحتساب المسافة بين أيّ نقطتين على المستوى الديكارتي، ويُمكن حساب المسافة بين النقطة (س1, ص1) والنقطة (س2, ص2) من خلال الصيغة التالية: المسافة ^2 = (س2 – س1)2 + (ص2 – ص1)2،
وبالتالي فإنّ المسافة تُساوي الجذر التربيعي ل((س2 – س1)2 + (ص2 – ص1))2
source
ويتم حسابها برمجيا باستخدام المعادلة التالية
- إنشاء فئة باسم Point وانشاء طريقة بها لاحساب المسافة بين نقطتين على النحو التالى مع شرح كل سطر بالكود :
و لتنفيذة الفئة اعلاه فى الدالة الرئيسية على النحو التالى :
المخرجات :
لكن السؤال لم يكتفى بذلك بل طلب فئة باسم #Circle وإنشاء دائرتين و حساب المسافة بينهما....أذن سنحاول فعل ذلك
_ حتى استطيع انشاء دائرة لابد من توافر المعلومات التالية :
1_مركز الدائرة على المستوي الاحداثى (x,y) لذلك سوف نستخدم الفئة اعلاه #point التى تقوم بتعين نقطة على المستوى الاحداثى (x ,y)
2_ نصف قطر الدائرة #Radius لذلك سيتم الاعلان عنه كمتغير
و ذلك على النحو التالى :
_ إنشاء الفئة باسم Circle
و يتم استخدام الفئتين السابقتين على النحو التالى :
و المثال بالكامل على النحو التالى :
المخرجات :
السؤال الرابع : يطلب انشاء عدد 2 طريقة لطباعة ارقام عشوائية ضمن نطاق الرقم n ثم ايجاد اكبر قيمة بينهما ...اذن سنفعل الاتى :
1_ طريقة باسم #RandomNum لتوليد ارقام عشوائية فى نطاق الرقم n
2_طريقة اخرى باسم #Stornumbers لتخزين الارقام العشوائية التى تم توليدها فى مصفوفة
3_ طباعة قيم المصفوفة
4_ ايجاد اكبر رقم فى المصفوفة
الحل :
توفر لغة #Java العديد من الطرق لإنشاء أرقام عشوائية ضمن نطاق معين لذلك سوف نستخدم طريقة واحدة وهى باستخدام الطريقة #nextInt التابعة للفئة #Random لتي يمكن أن تولد أرقام عشوائية بين 0 وحدود النطاق المحدد n ....وسيكون الرقم العشوائي الذي يتم إنشاؤه بين 0 وقيمة الحد الأعلى n.
حيث تأخذ هذه الطريقة عددًا صحيحًا كوسيطة. تمثل هذه القيمة الصحيحة الحد الأعلى للرقم العشوائي الذي سيتم إنشاؤه بواسطة هذه الطريقة.....و بالتالى لإنشاء رقم عشوائي بين 1 و 50 ، نقوم بإنشاء كائن من فئة #java#.util#.Random واستدعاء طريقة #nextInt الخاصة به مع تمرير الرقم 50 كوسيطة. سيؤدي هذا إلى إنشاء رقم بين 0 و 49 لذلك سنقوم بإضافة 1 إلى النتيجة مما سيجعل نطاق القيمة التي تم إنشاؤها من 1 إلى 50
تعال نترجم ذلك برمجيا
1_إنشاء طريقة لتوليد الارقام العشوائية فى نطاق الرقم n
2_إنشاء مصفوفة و تخزين الارقام العشوائية بها ....لم يحدد السؤال عدد الارقام العشوائية المطلوبة لذلك سنفترض انها 5 ارقام لذلك سوف ننشىء مصفوفة بحجم 5 ارقام
3_ استخدام و تنفيذ الطريقة Stornumbers فى الدالة الرئيسة
و المثال بالكامل على النحو التالى :
المخرجات :
السؤال الثالث : يطلب انشاء برنامج يقوم بتخصيص نقطة ثنائية الأبعاد مع إحداثيات x و y وحساب المسافة من هذه النقطة إلى نقطة أخرى عند الإحداثيات المعينة (x، y)
قبل ان نبدء برمجيا تعال نفهم السؤال رياضيا
يعتبر قانون البعد بين نقطتين أحد قوانين الرياضيات لاحتساب المسافة بين أيّ نقطتين على المستوى الديكارتي، ويُمكن حساب المسافة بين النقطة (س1, ص1) والنقطة (س2, ص2) من خلال الصيغة التالية: المسافة ^2 = (س2 – س1)2 + (ص2 – ص1)2،
وبالتالي فإنّ المسافة تُساوي الجذر التربيعي ل((س2 – س1)2 + (ص2 – ص1))2
source
ويتم حسابها برمجيا باستخدام المعادلة التالية
- الكود:
dis=Math.sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1))
- إنشاء فئة باسم Point وانشاء طريقة بها لاحساب المسافة بين نقطتين على النحو التالى مع شرح كل سطر بالكود :
- الكود:
class Point {
//الاعلان عن المتغيرات التى تمثل الاحداثيات س و ص
private int x , y;
//مشيد الفئة من إحداثياتها.
public Point(int x, int y)
{
this.x = x;
this.y = y;
}
// عند تحديدها يدويا(x,y)حساب المسافة من هذه النقطة إلى النقطة المحددة في
public double distance(int x, int y) {
int xDiff = this.x - x;
int yDiff = this.y - y;
return Math.sqrt(xDiff*xDiff + yDiff*yDiff);
}
// (another)حساب المسافة من هذه النقطة إلى النقطة المحددة في الكائن .
public double distance(Point another) {
int xDiff = this.x - another.x;
int yDiff = this.y - another.y;
return Math.sqrt(xDiff*xDiff + yDiff*yDiff);
}
}
و لتنفيذة الفئة اعلاه فى الدالة الرئيسية على النحو التالى :
- الكود:
public class Test {
public static void main(String[] args) {
Point p1 = new Point(1, 2);
System.out.printf("Distance is: %.2f%n", p1.distance(10, 11));
}
المخرجات :
Distance is: 12.73
لكن السؤال لم يكتفى بذلك بل طلب فئة باسم #Circle وإنشاء دائرتين و حساب المسافة بينهما....أذن سنحاول فعل ذلك
_ حتى استطيع انشاء دائرة لابد من توافر المعلومات التالية :
1_مركز الدائرة على المستوي الاحداثى (x,y) لذلك سوف نستخدم الفئة اعلاه #point التى تقوم بتعين نقطة على المستوى الاحداثى (x ,y)
2_ نصف قطر الدائرة #Radius لذلك سيتم الاعلان عنه كمتغير
و ذلك على النحو التالى :
_ إنشاء الفئة باسم Circle
- الكود:
class Circle
{
// تعريف متغيرين واحد لتمثيل مركز الدائرة و الاخر لنصف القطر
private Point center;
private int radius;
//منشىء الفئة لانشاء دائرة مع نقطة مركزية معينة ونصف قطرها.
Circle(Point center, int radius) {
this.center = center;
this.radius = radius;
}
// طريقة لحساب المسافة بين مزكر الدائرة مع مركز دائرة اخرى
public double distance(Circle another) {
return center.distance(another.center);
}
}
و يتم استخدام الفئتين السابقتين على النحو التالى :
- الكود:
public class Test {
public static void main(String[] args) {
// تعين مركز الدائرة الاولى بالقيم التى وردت فى السؤال
Point p1 = new Point(2, 4);
// تعين مركز الدائرة الثانية بالقيم بقيم افتراضية غير التى وردت فى السؤال حتى لا تتقاطع الدائرتين
Point p2 = new Point(5, 7);
// إنشاء الدائرة الاولى باستخدام نقطة المركز الاولى و نصف قطر اثنين
Circle c1 = new Circle(p1, 2);
//إنشاء الدائرة الثانية باستخدام نقطة المركز الثانية و نصف قطر اثنين
Circle c2 = new Circle(p2, 2);
//طباعة المسافة بين الدائرتين
System.out.printf("The distance between the two circles is: %.2f%n", c1.distance(c2));
}
}
و المثال بالكامل على النحو التالى :
- الكود:
class Point {
//الاعلان عن المتغيرات التى تمثل الاحداثيات س و ص
private int x , y;
//مشيد الفئة من إحداثياتها.
public Point(int x, int y)
{
this.x = x;
this.y = y;
}
// عند تحديدها يدويا(x,y)حساب المسافة من هذه النقطة إلى النقطة المحددة في
public double distance(int x, int y) {
int xDiff = this.x - x;
int yDiff = this.y - y;
return Math.sqrt(xDiff*xDiff + yDiff*yDiff);
}
// (another)حساب المسافة من هذه النقطة إلى النقطة المحددة في الكائن .
public double distance(Point another) {
int xDiff = this.x - another.x;
int yDiff = this.y - another.y;
return Math.sqrt(xDiff*xDiff + yDiff*yDiff);
}
}
class Circle
{
// تعريف متغيرين واحد لتمثيل مركز الدائرة و الاخر لنصف القطر
private Point center;
private int radius;
//منشىء الفئة لانشاء دائرة مع نقطة مركزية معينة ونصف قطرها.
Circle(Point center, int radius) {
this.center = center;
this.radius = radius;
}
// طريقة لحساب المسافة بين مزكر الدائرة مع مركز دائرة اخرى
public double distance(Circle another) {
return center.distance(another.center);
}
}
public class Test {
public static void main(String[] args) {
// تعين مركز الدائرة الاولى بالقيم التى وردت فى السؤال
Point p1 = new Point(2, 4);
// تعين مركز الدائرة الثانية بالقيم بقيم افتراضية غير التى وردت فى السؤال حتى لا تتقاطع الدائرتين
Point p2 = new Point(5, 7);
// إنشاء الدائرة الاولى باستخدام نقطة المركز الاولى و نصف قطر اثنين
Circle c1 = new Circle(p1, 2);
//إنشاء الدائرة الثانية باستخدام نقطة المركز الثانية و نصف قطر اثنين
Circle c2 = new Circle(p2, 2);
//طباعة المسافة بين الدائرتين
System.out.printf("The distance between the two circles is: %.2f%n", c1.distance(c2));
}
}
المخرجات :
The distance between the two circles is: 4.24
السؤال الرابع : يطلب انشاء عدد 2 طريقة لطباعة ارقام عشوائية ضمن نطاق الرقم n ثم ايجاد اكبر قيمة بينهما ...اذن سنفعل الاتى :
1_ طريقة باسم #RandomNum لتوليد ارقام عشوائية فى نطاق الرقم n
2_طريقة اخرى باسم #Stornumbers لتخزين الارقام العشوائية التى تم توليدها فى مصفوفة
3_ طباعة قيم المصفوفة
4_ ايجاد اكبر رقم فى المصفوفة
الحل :
توفر لغة #Java العديد من الطرق لإنشاء أرقام عشوائية ضمن نطاق معين لذلك سوف نستخدم طريقة واحدة وهى باستخدام الطريقة #nextInt التابعة للفئة #Random لتي يمكن أن تولد أرقام عشوائية بين 0 وحدود النطاق المحدد n ....وسيكون الرقم العشوائي الذي يتم إنشاؤه بين 0 وقيمة الحد الأعلى n.
حيث تأخذ هذه الطريقة عددًا صحيحًا كوسيطة. تمثل هذه القيمة الصحيحة الحد الأعلى للرقم العشوائي الذي سيتم إنشاؤه بواسطة هذه الطريقة.....و بالتالى لإنشاء رقم عشوائي بين 1 و 50 ، نقوم بإنشاء كائن من فئة #java#.util#.Random واستدعاء طريقة #nextInt الخاصة به مع تمرير الرقم 50 كوسيطة. سيؤدي هذا إلى إنشاء رقم بين 0 و 49 لذلك سنقوم بإضافة 1 إلى النتيجة مما سيجعل نطاق القيمة التي تم إنشاؤها من 1 إلى 50
تعال نترجم ذلك برمجيا
1_إنشاء طريقة لتوليد الارقام العشوائية فى نطاق الرقم n
- الكود:
static int RandomNum1(int n) {
Random rand = new Random();// انشاء كائن جديد
int randomInt;// انشاء متغير لتخزين الرقم العشوائى
randomInt = rand.nextInt(n) + 1;// استخدام الدالة nextint لتوليد رقم عشوانى فى نطاق الرقم n +1
return randomInt;// ارجاع الارقام العشوائية
}
2_إنشاء مصفوفة و تخزين الارقام العشوائية بها ....لم يحدد السؤال عدد الارقام العشوائية المطلوبة لذلك سنفترض انها 5 ارقام لذلك سوف ننشىء مصفوفة بحجم 5 ارقام
- الكود:
static int[] Stornumbers(){
int[] numbers = new int[5]; // تعين حجم المصفوفة
for(int i = 0; i < numbers.length; i++) {// حلقة تكرارية للحصول على خمسة ارقام تم توليدها عشوائية
numbers[i] = (int)(RandomNum1(50));// استخدام الطريقة RandomNum1 لتوليد الارقام العشوائية
}
// ارجاع قيمة المصفوفة
return numbers;
}
3_ استخدام و تنفيذ الطريقة Stornumbers فى الدالة الرئيسة
- الكود:
public static void main(String[] args) {
int[] printNo = Stornumbers();//انشاء مصفوفة لطباعة محتويات الطريقة
System.out.println("Random number generated is : " + Arrays.toString(printNo));
int max = Arrays.stream(printNo).max().getAsInt();// الحصول على اكبر قيمة فى المصوفة لطباعتها
System.out.println("max number is : " + max);
}
و المثال بالكامل على النحو التالى :
- الكود:
import java.util.Arrays;
import java.util.Random;
public class test {
public static void main(String[] args) {
int[] printNo = Stornumbers();//انشاء مصفوفة لطباعة محتويات الطريقة
System.out.println("Random number generated is : " + Arrays.toString(printNo));
int max = Arrays.stream(printNo).max().getAsInt();// الحصول على اكبر قيمة فى المصوفة لطباعتها
System.out.println("max number is : " + max);
}
static int RandomNum1(int n) {
Random rand = new Random();// انشاء كائن جديد
int randomInt;// انشاء متغير لتخزين الرقم العشوائى
randomInt = rand.nextInt(n) + 1;// استخدام الدالة nextint لتوليد رقم عشوانى فى نطاق الرقم n +1
return randomInt;// ارجاع الارقام العشوائية
}
static int[] Stornumbers(){
int[] numbers = new int[5]; // تعين حجم المصفوفة
for(int i = 0; i < numbers.length; i++) {// حلقة تكرارية للحصول على خمسة ارقام تم توليدها عشوائية
numbers[i] = (int)(RandomNum1(50));// استخدام الطريقة RandomNum1 لتوليد الارقام العشوائية
}
// ارجاع قيمة المصفوفة
return numbers;
}
}
المخرجات :
Random number generated is : [19, 37, 50, 26, 25]
max number is : 50
max number is : 50
ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم
رد: حل اسئلة وتمارين بلغة جافا الجزء الثالث
أما السؤال الاخير : يطلب منك برنامج للتحقق ما اذا كان الرقم n متناظر أم لا ....الحل:
الارقام المتناظرة هى الارقام التى يمكنك قرائتها من اليمن أو من الشمال و تعطيك نفس النتيجة بمعنى أخر هو نفس الرقم بعد العكسي. على سبيل المثال 545 ، 151 ، 34543 ، 343 ، 171 ، 48984 هي أرقام متناظرة.
المثال :
تحياتى لك
الارقام المتناظرة هى الارقام التى يمكنك قرائتها من اليمن أو من الشمال و تعطيك نفس النتيجة بمعنى أخر هو نفس الرقم بعد العكسي. على سبيل المثال 545 ، 151 ، 34543 ، 343 ، 171 ، 48984 هي أرقام متناظرة.
المثال :
- الكود:
import java.util.Scanner;
public class Palindrome
{
public static void main(String args[])
{
int n, m, a = 0,x;
Scanner s = new Scanner(System.in);
System.out.print("Enter any number:");
n = s.nextInt();
m = n;
while(n > 0)
{
x = n % 10;
a = a * 10 + x;
n = n / 10;
}
if(a == m)
{
System.out.println("Given number "+m+" is Palindrome");
}
else
{
System.out.println("Given number "+m+" is Not Palindrome");
}
}
}
تحياتى لك
ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم
رد: حل اسئلة وتمارين بلغة جافا الجزء الثالث
الاخت و الاستاذة الكريمة @زهراء اشكرك والله على مجهودك و نشاطك بالمنتدى فاسمحى لى ان يتم وضعك فى رتبة العضو الشرفى بالمنتدى طالما انك ترفضي الانضمام للادارة
شكرا جزيلا ده شرف لى عنجد لكن الادراة دى لن اقدر عليها خصوصا فترة الدراسة ما بدخل كتيير
زهراء- ........
- تاريخ التسجيل : 18/02/2011
المساهمات : 438
النقاط : 769
التقيم : 67
الدولة :
الجنس :
رد: حل اسئلة وتمارين بلغة جافا الجزء الثالث
// عند تحديدها يدويا(x,y)حساب المسافة من هذه النقطة إلى النقطة المحددة في
public double distance(int x, int y) {
int xDiff = this.x - x;
int yDiff = this.y - y;
return Math.sqrt(xDiff*xDiff + yDiff*yDiff);
}
// (another)حساب المسافة من هذه النقطة إلى النقطة المحددة في الكائن .
public double distance(Point another) {
int xDiff = this.x - another.x;
int yDiff = this.y - another.y;
return Math.sqrt(xDiff*xDiff + yDiff*yDiff);
شكرا لك استاذي العزيز...هذا الكود اعلاه لم افهمه جيدا بما يكفي....وايضا لقد ورد في السؤال عبارة shifting point....
فماذا كان يقصد بها...وهل كانت ضمن خطوات الحل الذي تفضلت به...
abushuber- ....
- تاريخ التسجيل : 29/09/2018
المساهمات : 57
النقاط : 81
التقيم : 0
الدولة :
الجنس :
رد: حل اسئلة وتمارين بلغة جافا الجزء الثالث
أحمد مناع كتب:
- الكود:
import java.util.Arrays;
import java.util.Random;
public class test {
public static void main(String[] args) {
int[] printNo = Stornumbers();//انشاء مصفوفة لطباعة محتويات الطريقة
System.out.println("Random number generated is : " + Arrays.toString(printNo));
int max = Arrays.stream(printNo).max().getAsInt();// الحصول على اكبر قيمة فى المصوفة لطباعتها
System.out.println("max number is : " + max);
}
static int RandomNum1(int n) {
Random rand = new Random();// انشاء كائن جديد
int randomInt;// انشاء متغير لتخزين الرقم العشوائى
randomInt = rand.nextInt(n) + 1;// استخدام الدالة nextint لتوليد رقم عشوانى فى نطاق الرقم n +1
return randomInt;// ارجاع الارقام العشوائية
}
static int[] Stornumbers(){
int[] numbers = new int[5]; // تعين حجم المصفوفة
for(int i = 0; i < numbers.length; i++) {// حلقة تكرارية للحصول على خمسة ارقام تم توليدها عشوائية
numbers[i] = (int)(RandomNum1(50));// استخدام الطريقة RandomNum1 لتوليد الارقام العشوائية
}
// ارجاع قيمة المصفوفة
return numbers;
}
}
شكرا لك استاذي العزيز...بالنسبة لهذا السؤال...هل يمكن كتابة الطرق في كلاس الtest...وهل توجد طريقة ابسط من هذه لكتابة الكود اعلاه...لان صراحة لاول مرة اشوف هكذا كود وبهذه الطريقة...لقلة معرفتي بالجافا وبالخصوص موضوع المصفوفة ...ولكن لو كانت هناك ابسط لتوصسل الفكرة لمبتدأ...اتمنى تسعفني بيها حتى افهم المثال جيدا....ولو انت ماقصرت...وغلبتك معي
abushuber- ....
- تاريخ التسجيل : 29/09/2018
المساهمات : 57
النقاط : 81
التقيم : 0
الدولة :
الجنس :
رد: حل اسئلة وتمارين بلغة جافا الجزء الثالث
أهلا بيك أخى
المعادلة الرياضية لحساب المسافة بين نقطتين هى على النحو التالى :
المسافة2 = (س2 – س1)2 + (ص2 – ص1)2، وبالتالي فإنّ المسافة تُساوي الجذر التربيعي ل((س2 – س1)2 + (ص2 – ص1))
و يتم حساب المسافة بينهم برمجيا با ستخدام المعادلة التالىة :
ويمكنك ملاحظة أننا نقوم بطرح الاحداث السينى للنقطة الاولى من الاحداثى السيني للنقطة الثانية ضرب نفس العملية للحصول على المربع
اذن لكى نقوم بحساب المسافة بينت نقتطين يجب تحديد أحداثيات النقطة الاولى و أحداثيات النقطة الثانية :
فى مثالنا قمت بتحديد النقطة الاولى من خلال المشيد الفئة على النحو التالى :
ساقوم بتغير اسماء المتغيرات عما ورد فى الاجابة الاولى حتى لا يختلط عليك الامر لذلك مننشىء الفئة التى ستقوم بانشاء احداثيات النقطة بالمتغيرات الجديدة على النحو التالى :
بعد ذلك انشيء طريقة للقيام بوظفتين الاولى انشاء احداثيات النقطة الثانية و الوظيفة الثانية حساب المسافة بين تلك النقطة مع النقطة اعلاه على النحو التالى :
الشرح :
_ قمت بتعرفت متغير xDiff لتخزين ناتج عملية طرح مابين الاحداثى x1 -x2 ..حيث أن this.x تشير الى الاحداثى x1 فى النقطة الاولى التى تم انشائها فى منشيء الفئة Point
_قمت بتعرفت متغير yDiff لتخزين ناتج عملية طرح مابين الاحداثى y1 -y2 ..حيث أن this.y تشير الى الاحداثى y1 فى النقطة الاولى التى تم انشائها فى منشيء الفئة Point
ثم استخدم الحساب كما يلى :
ومع ذلك يمكن الاستغناء عن تعريف المتغرين xDiff,yDiff و استخدام المعادلة كما يلى :
ولتنفيذ تلك ذلك فى الدالة على الرئيسة يتم على النحو التالى :
وكما ترى انشئنا كائن جديد من الفئة Point باسم p1 و تم تمرير احداثيات النقطة الاولى الية (2, 4) يدويا بعد ذلك استخدمنا الطريقة distance وتمرير احداثيات النقطة الثانية و حساب المسافة بينها وبين النقطة الاولى
لكن سؤالك لم يطلب قياس المسافة بين نقطتين ولكن انشاء دائرتين و حساب المسافة بينهما ,يتم انشاء الدائرة من خلال نقطة مركز الدائرة و التى ستكون على المستوي الاحداثي x,y ونصف قطرها radius و طالما عندنا الفئة Point التى تقوم لانشاء نقطة على المستوى الاحداثى اذن سوف نستخدمها فى انشاء مركز الدائرة center باستخدام منشىء الفئة Circle على النحو التالى :
و يتم تنفيذ ذلك لانشاء دائرة فى الدالة الرئسية نحتاج الى كائن جديد من الفئة Point لانشاء مركز الدائرة و تمريره الى كائن جديد من الفئة Circl مع نصف القطر على النحو التالى :
وحتى نستطيع قياس المسافة بين دائرتين قمت بالتعديل على الطريقة distance من الشكل التالى :
الى الشكل التالى :
التغير الذى حدث هو بدل من انشاء الطريقة distance بمعاملات x1 , x2 جعلنا هذه الطريقة تاخذها من معاملات Point و بالتالى فعند انشاء احداثيات مركز الدائرة باستخدام كائن جديد من الفئة Point ستقوم تمرير احداثيات تلك النقطة الى الطريقة distance حتى تقوم بحسابها
أما عبارة shifting point بصراحة لم افهمها و اعتمد على حل السؤال بالمعلومات الاخرى الواردة فية
المعادلة الرياضية لحساب المسافة بين نقطتين هى على النحو التالى :
المسافة2 = (س2 – س1)2 + (ص2 – ص1)2، وبالتالي فإنّ المسافة تُساوي الجذر التربيعي ل((س2 – س1)2 + (ص2 – ص1))
و يتم حساب المسافة بينهم برمجيا با ستخدام المعادلة التالىة :
- الكود:
dis=Math.sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1))
ويمكنك ملاحظة أننا نقوم بطرح الاحداث السينى للنقطة الاولى من الاحداثى السيني للنقطة الثانية ضرب نفس العملية للحصول على المربع
اذن لكى نقوم بحساب المسافة بينت نقتطين يجب تحديد أحداثيات النقطة الاولى و أحداثيات النقطة الثانية :
فى مثالنا قمت بتحديد النقطة الاولى من خلال المشيد الفئة على النحو التالى :
- الكود:
public Point(int x, int y)
{
this.x = x;
this.y = y;
}
ساقوم بتغير اسماء المتغيرات عما ورد فى الاجابة الاولى حتى لا يختلط عليك الامر لذلك مننشىء الفئة التى ستقوم بانشاء احداثيات النقطة بالمتغيرات الجديدة على النحو التالى :
- الكود:
public Point(int x1, int y1)
{
this.x = x1;
this.y = y1;
}
بعد ذلك انشيء طريقة للقيام بوظفتين الاولى انشاء احداثيات النقطة الثانية و الوظيفة الثانية حساب المسافة بين تلك النقطة مع النقطة اعلاه على النحو التالى :
- الكود:
public double distance(int x2, int y2) {
int xDiff = this.x - x2;
int yDiff = this.y - y2;
return Math.sqrt(xDiff*xDiff + yDiff*yDiff);
}
الشرح :
_ قمت بتعرفت متغير xDiff لتخزين ناتج عملية طرح مابين الاحداثى x1 -x2 ..حيث أن this.x تشير الى الاحداثى x1 فى النقطة الاولى التى تم انشائها فى منشيء الفئة Point
_قمت بتعرفت متغير yDiff لتخزين ناتج عملية طرح مابين الاحداثى y1 -y2 ..حيث أن this.y تشير الى الاحداثى y1 فى النقطة الاولى التى تم انشائها فى منشيء الفئة Point
ثم استخدم الحساب كما يلى :
- الكود:
Math.sqrt(xDiff*xDiff + yDiff*yDiff);
ومع ذلك يمكن الاستغناء عن تعريف المتغرين xDiff,yDiff و استخدام المعادلة كما يلى :
- الكود:
Math.sqrt(this.x - x2*this.x - x2 + this.y - y2*this.y - y2);
ولتنفيذ تلك ذلك فى الدالة على الرئيسة يتم على النحو التالى :
- الكود:
public class Test {
public static void main(String[] args) {
Point p1 = new Point(2, 4);
System.out.printf("The distance between the two circles is: %.2f%n", p1.distance(6,8));
}
وكما ترى انشئنا كائن جديد من الفئة Point باسم p1 و تم تمرير احداثيات النقطة الاولى الية (2, 4) يدويا بعد ذلك استخدمنا الطريقة distance وتمرير احداثيات النقطة الثانية و حساب المسافة بينها وبين النقطة الاولى
لكن سؤالك لم يطلب قياس المسافة بين نقطتين ولكن انشاء دائرتين و حساب المسافة بينهما ,يتم انشاء الدائرة من خلال نقطة مركز الدائرة و التى ستكون على المستوي الاحداثي x,y ونصف قطرها radius و طالما عندنا الفئة Point التى تقوم لانشاء نقطة على المستوى الاحداثى اذن سوف نستخدمها فى انشاء مركز الدائرة center باستخدام منشىء الفئة Circle على النحو التالى :
- الكود:
//منشىء الفئة لانشاء دائرة مع نقطة مركزية معينة ونصف قطرها.
Circle(Point center, int radius) {
this.center = center;
this.radius = radius;
}
و يتم تنفيذ ذلك لانشاء دائرة فى الدالة الرئسية نحتاج الى كائن جديد من الفئة Point لانشاء مركز الدائرة و تمريره الى كائن جديد من الفئة Circl مع نصف القطر على النحو التالى :
- الكود:
public static void main(String[] args) {
// تعين مركز الدائرة الاولى بالقيم التى وردت فى السؤال
Point p1 = new Point(2, 4);
//إنشاء دائرة بتمرير مركز الدائرة و نصف القطر
Circle c1 = new Circle(p1, 2);
}
وحتى نستطيع قياس المسافة بين دائرتين قمت بالتعديل على الطريقة distance من الشكل التالى :
- الكود:
public double distance(int x2, int y2) {
int xDiff = this.x - x2;
int yDiff = this.y - y2;
return Math.sqrt(xDiff*xDiff + yDiff*yDiff);
}
الى الشكل التالى :
- الكود:
public double distance(Point another) {
int xDiff = this.x - another.x;
int yDiff = this.y - another.y;
return Math.sqrt(xDiff*xDiff + yDiff*yDiff);
}
التغير الذى حدث هو بدل من انشاء الطريقة distance بمعاملات x1 , x2 جعلنا هذه الطريقة تاخذها من معاملات Point و بالتالى فعند انشاء احداثيات مركز الدائرة باستخدام كائن جديد من الفئة Point ستقوم تمرير احداثيات تلك النقطة الى الطريقة distance حتى تقوم بحسابها
أما عبارة shifting point بصراحة لم افهمها و اعتمد على حل السؤال بالمعلومات الاخرى الواردة فية
ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم
رد: حل اسئلة وتمارين بلغة جافا الجزء الثالث
شكرا لك استاذي العزيز...بالنسبة لهذا السؤال...هل يمكن كتابة الطرق في كلاس الtest...وهل توجد طريقة ابسط من هذه لكتابة الكود اعلاه...لان صراحة لاول مرة اشوف هكذا كود وبهذه الطريقة...لقلة معرفتي بالجافا وبالخصوص موضوع المصفوفة ...ولكن لو كانت هناك ابسط لتوصسل الفكرة لمبتدأ...اتمنى تسعفني بيها حتى افهم المثال جيدا....ولو انت ماقصرت...وغلبتك معي
اهلا بيك @abushuber....ولا تهتم لاى غلبة فنحن فاتحين الموقع لنشر العلم وسوف نكون معك ومع جميع الاعضاء حتى تملوا منا ...لذلك اسئل و سوف نجاوب بقدر معرفتنا و نتمنى ان نكون عند حسن ظن الجميع
بالنسبة للسؤال بداية جميع الطرق التى بالسؤال هى فعلا موجودة بالكلاس test وربما اخطلت عليك الامر كون تم كتابة الطرق تحت الدالة الرئيسية main لكن لو تم كتابتها بالشكل التالى ستظهر لك الامر و ستجدها بداخل الكلاس test
- الكود:
public class test {
static int RandomNum1(int n) {
Random rand = new Random();// انشاء كائن جديد
int randomInt;// انشاء متغير لتخزين الرقم العشوائى
randomInt = rand.nextInt(n) + 1;// استخدام الدالة nextint لتوليد رقم عشوانى فى نطاق الرقم n +1
return randomInt;// ارجاع الارقام العشوائية
}
static int[] Stornumbers(){
int[] numbers = new int[5]; // تعين حجم المصفوفة
for(int i = 0; i < numbers.length; i++) {// حلقة تكرارية للحصول على خمسة ارقام تم توليدها عشوائية
numbers[i] = (int)(RandomNum1(50));// استخدام الطريقة RandomNum1 لتوليد الارقام العشوائية
}
// ارجاع قيمة المصفوفة
return numbers;
}
public static void main(String[] args) {
int[] printNo = Stornumbers();//انشاء مصفوفة لطباعة محتويات الطريقة
System.out.println("Random number generated is : " + Arrays.toString(printNo));
int max = Arrays.stream(printNo).max().getAsInt();// الحصول على اكبر قيمة فى المصوفة لطباعتها
System.out.println("max number is : " + max);
}
}
لكن ربما تقصد اننا نقوم بانشاء البرنامج فى الدالة الرئيسية وسيكون ذلك اسهل للغاية على النحو التالى :
- الكود:
import java.util.Arrays;
import java.util.Random;
public class test {
public static void main(String[] args) {
Random rand = new Random();// انشاء كائن جديد
int randomInt;// انشاء متغير لتخزين الرقم العشوائى
int[] numbers = new int[5]; // تعين حجم المصفوفة لتخزين خمسس ارقام
for(int i = 0; i < numbers.length; i++) {// حلقة تكرارية للحصول على خمسة ارقام تم توليدها عشوائية
randomInt = rand.nextInt(50) + 1;// استخدام الدالة nextint لتوليد رقم عشوانى فى نطاق الرقم n +1
numbers[i] = (int)(randomInt);// استخدام الطريقة RandomNum1 لتوليد الارقام العشوائية
}
System.out.println("Random number generated is : " + Arrays.toString(numbers));
int max = Arrays.stream(numbers).max().getAsInt();// الحصول على اكبر قيمة فى المصوفة لطباعتها
System.out.println("max number is : " + max);
}
}
لكن من وضع السؤال كان ثقيل الظل و اراد ان يكون حل البرنامج بانشاء عدد 2 طريقة mathod لتنفيذ ذلك جلست فى تفكير عميق ومعى كوب من الشاي وصندوتش فول وطعمية ثم خرجت بفكرة ان يتم تقسيم البرنامج الى طريقتين ....طريقة لانشاء ارقام عشوائية ...وطريقة اخري لتخزين تلك الارقام فى مصفوفة ...
لكن يمكن ايضا انشائها بطريقة اخري ...فمثلا ننشئ طريقة لتوليد الارقام العشوائية و تخزينها فى مصفوفة و الحصول على اكبر رقم ...و طريقة اخرى للطباعة الارقام العشوائية على النحو التالى :
- الكود:
import java.util.Arrays;
import java.util.Random;
public class test {
static String prinNO() {
String S = Arrays.toString(Stornumbers()); // اعلان عن متغير نصي لتخزين قيم المصفوفة ليسهل طباعتها بينت قوسين
System.out.println("Random number generated is : " + S);
return S;// ارجاع الارقام العشوائية
}
static int[] Stornumbers(){
Random rand = new Random();// انشاء كائن جديد
int randomInt;// انشاء متغير لتخزين الرقم العشوائى
int[] numbers = new int[5]; // تعين حجم المصفوفة
for(int i = 0; i < numbers.length; i++) {// حلقة تكرارية للحصول على خمسة ارقام تم توليدها عشوائية
randomInt = rand.nextInt(50) + 1;// استخدام الدالة nextint لتوليد رقم عشوانى فى نطاق الرقم n +1
numbers[i] = (int)(randomInt);// استخدام الطريقة RandomNum1 لتوليد الارقام العشوائية
}
int max = Arrays.stream(numbers).max().getAsInt();// الحصول على اكبر قيمة فى المصوفة لطباعتها
System.out.println("max number is : " + max);
// ارجاع قيمة المصفوفة
return numbers;
}
public static void main(String[] args) {
prinNO();
}
}
و يمكنك اى طرق كما يلحوا لك
ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم
رد: حل اسئلة وتمارين بلغة جافا الجزء الثالث
أحمد مناع كتب:شكرا لك استاذ احمد....تقريبا بدات افهم......لكن لدي سؤال...اربك فهمي..هل قمت بانشاء فئة circel اخرى غير فئة point ....وفي هذه الفئة انشئت طريقة للcircle...ام انك قمت بانشاء كائن بدون انشاء فئة circle...حسب كلامك حاليا انا لدي ( فئتين) لكن كود البرنامج يحتوي فئى point فقط.....فسؤالي باختصار هل يمكن انشاء كائن لفئة غير موجودة..او انشاء متغير واعتباره كائن...لان دخت في هذه الجزئية...ما هي الاشياء التي يمكننا ان ننشئ لها كائن غير الفئة...وكيف يمكن التعامل مع ذالك الكائن بعد ذلك؟ هذا اولا..
اما ثانيا..فعبارة shifting point كان يقصد بها تزحيف الدائرة عن مكانها لاصلي...بحيث يتم تزحيف الدائرة بمقدار 2 على الاحداثي السيني وبمقدار 4 على الاحداثي الصادي وهو ماجاء في الطلب الثالث من طلبات السؤوال...
abushuber- ....
- تاريخ التسجيل : 29/09/2018
المساهمات : 57
النقاط : 81
التقيم : 0
الدولة :
الجنس :
رد: حل اسئلة وتمارين بلغة جافا الجزء الثالث
أحمد مناع كتب:شكرا لك استاذي العزيز...بالنسبة لهذا السؤال.....الذي فهمته من حضرتك هو انك انشئت طريقة لكل حالة (طريقة لتوليد الارقام) لكن لم افهم محتواها وكيف انك وضغت في جزء البارميترات الخاص بها (stornumber) هل قصدت انك استدعيت الطريقة الثانية الخاصة بتخزين تلك الارقام...اما ماذا قصدت بالتحديد...وهل يمكن ان نجعل الطرق في هذا المكان الخاص بتعريف البراميترات....وكذلك كيف يمكن لهذ الطريقة ان تولد الارقام... ثانيا ما دخل الstring بهذه القضية...وكذلك ياريت شرح ( String S = Arrays.toString) ...
اما الطريقة الثانية هل هي خاصة بخزن الارقام ووطباعتها ام الاولى الخاصة بالطباعة... وهل عبارة ()Random rand = new Random تعني انشاء كائن عن فئة لم تذكرهاام ام ماذا...
وعبارة static....لماذا استخدمتها....واذا لم تستخدمها كيف سيكون شكل الكود بدونها .....استاذ احمد ....انا راح اغلبك كثير بس انت قلبك كبير ...واني احب اسئل كثير حتى افهم....وكل هذا الاشكاليات وقعت فيها اعتقد لعدم فهمي لاساسيات هذه اللغة بشكل جيد....ياريت تتحملني ...وهذه الاسئلة اجت فوق مستواي بكثير ...وبما انه هذا هو حلها معناها..اني رسبت بهذا الامتحان لانو ما كتبت اي شي من اللي حضرتك ذكرته...بس مايهمني شي ...اهم شي اعرف شلون صارت هذا الاكواد والبحث عن ابسط كود لفهمها حتى لو كان بعدة خطوات....مايهمني الاختصار ...اهم شي افهم, حتى لو حليت السؤال بمئة سطر المهم الاسطر تكون مفهومة لكل قارئ....وكل الشكر لك استاذ احمد مرة اخرى لسعة صدرك وحلمك...
- الكود:
import java.util.Arrays;
import java.util.Random;
public class test {
static String prinNO() {
String S = Arrays.toString(Stornumbers()); // اعلان عن متغير نصي لتخزين قيم المصفوفة ليسهل طباعتها بينت قوسين
System.out.println("Random number generated is : " + S);
return S;// ارجاع الارقام العشوائية
}
static int[] Stornumbers(){
Random rand = new Random();// انشاء كائن جديد
int randomInt;// انشاء متغير لتخزين الرقم العشوائى
int[] numbers = new int[5]; // تعين حجم المصفوفة
for(int i = 0; i < numbers.length; i++) {// حلقة تكرارية للحصول على خمسة ارقام تم توليدها عشوائية
randomInt = rand.nextInt(50) + 1;// استخدام الدالة nextint لتوليد رقم عشوانى فى نطاق الرقم n +1
numbers[i] = (int)(randomInt);// استخدام الطريقة RandomNum1 لتوليد الارقام العشوائية
}
int max = Arrays.stream(numbers).max().getAsInt();// الحصول على اكبر قيمة فى المصوفة لطباعتها
System.out.println("max number is : " + max);
// ارجاع قيمة المصفوفة
return numbers;
}
public static void main(String[] args) {
prinNO();
}
}
و يمكنك اى طرق كما يلحوا لك
abushuber- ....
- تاريخ التسجيل : 29/09/2018
المساهمات : 57
النقاط : 81
التقيم : 0
الدولة :
الجنس :
رد: حل اسئلة وتمارين بلغة جافا الجزء الثالث
استاذ احمد ....انا راح اغلبك كثير بس انت قلبك كبير ...واني احب اسئل كثير حتى افهم....وكل هذا الاشكاليات وقعت فيها اعتقد لعدم فهمي لاساسيات هذه اللغة بشكل جيد....ياريت تتحملني ...وهذه الاسئلة اجت فوق مستواي بكثير pale pale
اهلا بيك اخى الكريم @abushuber لا تهتم لاى شيء فانا معك حتى تفهم كل جزئية لكل سطر برمجى و ارجوا المعذرة فى عدم شرحى بطريقة أكثر وضحا من ذلك لكن ساحاول بقدر الامكان
لكن لدي سؤال...اربك فهمي..هل قمت بانشاء فئة circel اخرى غير فئة point ....وفي هذه الفئة انشئت طريقة للcircle...ام انك قمت بانشاء كائن بدون انشاء فئة circle...حسب كلامك حاليا انا لدي ( فئتين) لكن كود البرنامج يحتوي فئى point فقط
نعم اخي @abushuber قمت بانشاء فئتين :
الفئة الاولى باسم point وهى على النحو التالى :
- الكود:
class Point {
//الاعلان عن المتغيرات التى تمثل الاحداثيات س و ص
private int x , y;
//مشيد الفئة من إحداثياتها.
public Point(int x, int y)
{
this.x = x;
this.y = y;
}
// (another)حساب المسافة من هذه النقطة إلى النقطة المحددة في الكائن .
public double distance(Point another) {
int xDiff = this.x - another.x;
int yDiff = this.y - another.y;
return Math.sqrt(xDiff*xDiff + yDiff*yDiff);
}
}
و الفئة point اعلاه تحتوى على طرقتين :
الطريقة الاولى باسم point لتعين نقطة على الاحداثي (x,y) و طالما ان تلك الطريقة تحمل نفس اسم الفئة فى تلك الحالة تسمي عمليا منشيء الفئة
الطريقة الثانية باسم distance حساب المسافة بين اى نقتطين يتم تعين احداثها فى الطريقة الاولى point
و يتم تنفيذ الطرقتين على النحو التالى :
- الكود:
public class Test {
public static void main(String[] args) {
//تعين نقطة اولى
Point p1 = new Point(2, 4);
// تعيين نقطة ثانية
Point p2 = new Point(5, 7);
// ايجاد المسافة بينهما
System.out.printf("The distance between them is: %.2f%,n", p1.distance(p2));
}
}
الفئة الثانية باسم Circle على النحو التالى :
- الكود:
class Circle
{
// تعريف متغيرين واحد لتمثيل مركز الدائرة و الاخر لنصف القطر
private Point center;
private int radius;
//منشىء الفئة لانشاء دائرة مع نقطة مركزية معينة ونصف قطرها.
Circle(Point center, int radius) {
this.center = center;
this.radius = radius;
}
// طريقة لحساب المسافة بين مزكر الدائرة مع مركز دائرة اخرى
public double distance(Circle another) {
return center.distance(another.center);
}
}
و الفئة Circle اعلاه تحتوى على طرقتين :
الطريقة الاولى باسم Circle لانشاء دائرة و التى تتطلب معلومات عن أحداثيات نقطة مركز الدائرة (x,y) و نصف قطر الدائرة radius و التى كانت من المفترض تاخذ الشكل التالى :
- الكود:
private int x;
private int y;
private int radius;
//منشىء الفئة لانشاء دائرة مع نقطة مركزية معينة ونصف قطرها.
Circle(int x,int y, int radius) {
this.x = x;
this.y= y;
this.radius = radius;
}
لكن بما اننا لدينا طريقة بالفئة point باسم point تقوم بتعيين نقطة على المستوي الاحداثى (x,y) تم استخدام الطريقة point لتعين نقطة مركز الدائرة ....وهو الذى فرضه السؤال بالشكل التالى :
- الكود:
class Circle
{
// تعريف متغيرين واحد لتمثيل مركز الدائرة و الاخر لنصف القطر
private Point center;
private int radius;
//منشىء الفئة لانشاء دائرة مع نقطة مركزية معينة ونصف قطرها.
Circle(Point center, int radius) {
this.center = center;
this.radius = radius;
}
الطريقة الثانية باسم distance فى الفئة Circle و تستخدم تلك الطريقة لحساب المسافة بين دائرتين و التى من المفترض أن تكون المعادلة الرياضية التالية لحساب المسافة بين مركزى الدائرة :
- الكود:
return Math.sqrt(xDiff*xDiff + yDiff*yDiff);
لكن بما اننا لدينا طريقة بالفئة point باسم distance تحتوى على معادلة المسافة بين نقتطين لذلك سوف نقوم بتمرير معادلة تلك الطريقة الى الطريقة distance بالفئة Circle ..وهو الذى فرضه السؤال بالشكل التالى :
- الكود:
public double distance(Circle another) {
return center.distance(another.center);
}
حيث أن center هو الكائن الذى يشير الى الفئة point وحددنا منه الطريقة distance
اما فى الكلاس test تم تنفيذ ماسبق على النحو التالى :
- الكود:
public class Test {
public static void main(String[] args) {
//تعين نقطة مركز الدائرة الاولى باستخدام الكائن نقطة
Point p1 = new Point(2, 4);
// إنشاء الدائرة الاولى بتمرير نقطة مركز الدائرة ونصف القطر
Circle c1 = new Circle(p1,2);
//تعين نقطة مركز الدائرة الثانية باستخدام الكائن نقطة
Point p2 = new Point(4, 8);
// إنشاء الدائرة الثانية بتمرير نقطة مركز الدائرة ونصف القطر
Circle c2 = new Circle(p2,2);
// ايجاد المسافة بينهما
System.out.printf("The distance between them is: %.2f%,n", c1.distance(c2));
}
}
اما ثانيا..فعبارة shifting point كان يقصد بها تزحيف الدائرة عن مكانها لاصلي...بحيث يتم تزحيف الدائرة بمقدار 2 على الاحداثي السيني وبمقدار 4 على الاحداثي الصادي وهو ماجاء في الطلب الثالث من طلبات السؤوال.
اذا كان الامر كذلك اذن فنحن فعلنا ذلك بدون علم منا فالدائرة الاولى كان الاحداثي الاصلى لها :
- الكود:
Point p1 = new Point(2, 4);
و الدائرة الثانية تم ازاحهتا الى الاحداثى الجديد بالمقدار التى بالسؤال :
- الكود:
Point p2 = new Point(4, 8);
هخرج مشوار وهرجع للسؤال الثاني :
ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم
رد: حل اسئلة وتمارين بلغة جافا الجزء الثالث
الذي فهمته من حضرتك هو انك انشئت طريقة لكل حالة (طريقة لتوليد الارقام) لكن لم افهم محتواها وكيف انك وضغت في جزء البارميترات الخاص بها (stornumber) هل قصدت انك استدعيت الطريقة الثانية الخاصة بتخزين تلك الارقام...اما ماذا قصدت بالتحديد
أهلا بيك أخى الكريم
نعم اخى الكريم قد أنشئت طريقة لتوليد الارقام العشوائية بأسم #stornumber .....معنى ذلك أن stornumber تلك هى اسم الطريقة و ليست بارميترات لطريقة اخرى .... و للتوضيح سنفترض أننا سنقوم بانشاء طريقة باسم stornumber ترجع برقم صحيح int ستكون بهذا الشكل :
- الكود:
static int Stornumbers(){
}
لكن فى مثالنا قمنا بانشاء طريقة باسم #Stornumbers ترجع بمصفوفة من نوع int لذلك تم كتابتها بالشكل التالى :
- الكود:
static int[] Stornumbers(){
}
و الفرق بين الطرقتين القوسين [] و ربما ذلك جعل الامر يختلط عليك فى أن Stornumbers عبارة عن باراميتر لدالة اخرى و هذا ليس صحيح ...وان أحببت أن تضع لها بارامتيرات سيكون ذلك بين قوسين () على النحو التالى :
- الكود:
static int[] Stornumbers(int f){
}
ففى الطريقة اعلاه وضعنا بارامتير f من نوع int كما ظاهر اعلاه لكن فى مثالنا لا نتحتج اى بارمتيرات ....وكانت على النحو التالى :
- الكود:
static int[] Stornumbers(){
Random rand = new Random();
int randomInt;
int[] numbers = new int[5];
for(int i = 0; i < numbers.length; i++) {
randomInt = rand.nextInt(50) + 1;
numbers[i] = (int)(randomInt);
}
int max = Arrays.stream(numbers).max().getAsInt();
System.out.println("max number is : " + max);
return numbers;
}
و تعال نشرح محتواها :
_ السطر الاول
- الكود:
Random rand = new Random();
الفئة Random هى أحد الفئات الجاهزة التى تاتى مع حزم الجافا ولم اقم بانشائها ,تلك الفئة قادرة على توليد ارقام عشوائية فى نطاق معين وذلك باستخدام الطريقة nextInt التى تمتلكها ...لذلك قمنا بانشاء كائن جديد منها يسمي rand وهذا يعتبر ردا على استفسارك التالى :
وهل عبارة ()Random rand = new Random تعني انشاء كائن عن فئة لم تذكرهاام ام ماذا...
_السطر الثاني :إنشاء متغير رقمي int باسم #randomInt لتخزين رقم عشوائي واحد به :
- الكود:
int randomInt;
_السطر الثالث : انشاء مصفوفة رقمية باسم numbers لتخزين عدد 5 ارقام عشوائية يتم توليدها لذلك تم تعين حجم المصفوفة بالرقم 5 على النحو التالى :
- الكود:
int[] numbers = new int[5];
_السطر الرابع :حلقة تكرارية تبدء من الرقم صفر و تنهتى بحجم المصفوفة numbers :
- الكود:
for(int i = 0; i < numbers.length; i++) {
}
كما يمكنك انشاء الحلقة التكرارة اعلاه بوضع حجم المصفوفة مباشرة وهو الرقم 5 بدلا من numbers.length بالشكل التالى :
- الكود:
for(int i = 0; i < 5; i++) {
}
داخل الحلقة التكرارية استخدمنا الطريقة #nextInt لتوليد رقم عشوائي فى نطاق الرقم 50 أى من الصفر لحد 50 و تخزين هذا فى المتغير #randomInt ...على النحو التالى :
- الكود:
randomInt = rand.nextInt(50) + 1;
و بالتالى فى كل مرة تدور الحلقة سيتم توليد رقم عشوائى و تخزينة فى المتغير randomInt ...فمثلا فى الدورة الاولى توليد الرقم 10 مثلا يتم تخزينة فى المتغير randomInt ..ثم تبدء الدورة الثانية يتم توليد الرقم 25 ووضعة فى متغير randomInt الذى سيقوم بحذف الرقم 10 المخزن سابقا و تخزين الرقم الجديد 25 لذلك وجب علينا ان يتم وضع المصفوفة numbers التى قمنا بانشائها بداخل الحلقة التكرارية هى الاخرى و تمرير المتغير randomInt اليها على النحو التالى :
- الكود:
for(int i = 0; i < numbers.length; i++) {
randomInt = rand.nextInt(50) + 1;
numbers[i] = (int)(randomInt);
}
و بالتالى ففى كل حلقة دوران بدل ما المتغير randomInt يقوم بحذف القيمة التى بداخلة حتى يكون جاهز لاستقبال الرقم الجديد تقوم المصفوفة numbers باخذ القيم التى تاتى الية حتى تمتلاء تلك المصفوفة بعدد 5 ارقام ....ويمكنك اختصار جملة التكرار السابقة على النحو التالى :
- الكود:
for(int i = 0; i < numbers.length; i++) {
numbers[i] = (int)(rand.nextInt(50) + 1);
}
فبدلا من وضع متغير وسيط لاستقبال الرقم العشوائي من الدالة nextInt ثم تخزينة فى المصفوفة numbers نجعل الدالة تخزن فى المصفوفة مباشرة كما ظاهر اعلاه
السطر الاول بعد الحلقة التكرارية :
- الكود:
int max = Arrays.stream(numbers).max().getAsInt();
System.out.println("max number is : " + max);
الحصول على اكبر قيمة من القيم المخزنة فى المصفوفة numbers وطباعتها وتم ذلك من خلال استخدام الطريقة stream التابعة للفئة Arrays وباستخدام الاسلوب max().getAsInt نحصل على اعلى قيمة
ملحوظة :يوجد العديد من الطرق للحصول على اكبر قيمة باى مصفوفة كانت تلك واحدة منها
أخر سطر فى الكود وهو
- الكود:
return numbers
يعنى ارجاع بيانات المصفوفة numbers عند تنفيذ الطريقة Stornumbers ....وكل ما سبق كان لتوليد عدد 5 ارقام عشوائية و تخزينها فى مصفوفة و ايجاد وطباعة اكبر قيمة فيها و يعتبر ذلك ردا على استفسارك التالى :
اما الطريقة الثانية هل هي خاصة بخزن الارقام ووطباعتها ام الاولى الخاصة بالطباعة
و بالتالى فان الطريقة Stornumbers لتوليد الارقام العشوائية و تخزينها فى مصفوفة و ايجاد وطباعة اكبر قيمة بها أما الطريقة التى تسمي prinNO هى لطباعة محتوي المصفوفة اى عدد 5 ارقام عشوائية المخزنة بالمصفوفة
ثانيا ما دخل الstring بهذه القضية...وكذلك ياريت شرح ( String S = Arrays.toString) ...
حتى تتمكنك من طباعة محتويات مصفوفة توجد عدة طرقة منها مثلا عمل حلقة تكرارية للدوران على كل قيم المصفوفة ومن ثم طباعتها على النحو التالى :
- الكود:
int[] array = new int[] {1, 2, 3};
for(int i = 0; i < array .length; i++) {
System.out.println(" number is : " +array[i]);
}
وتوجد طريقة اخرى لطباعة محتويات مصفوفة باستخدام Arrays.toString التى تستخدم لعرض سلسلة نصية من بيانات مصفوفة وذلك عن طريق تمرير اليها مصفوفة رقيمة أو اى نوع بيانات اخرى فيتم تحويلها الى نص ويتم الفصل بين عناصر المصفوفة بالفاصلة , ومن ثم طباعتها بكل سهولة على النحو التالى :
- الكود:
int[] array = new int[] {1, 2, 3};
System.out.println(" number is : " +Arrays.toString(array));
وهى الطريقة التى تم استخدامها فى مثالنا لكن بشكل مختلف....لذلك اننا لا نملك مصفوفة نقوم بتمريها الى Arrays.toString انما نملك طريقة Stornumbers التى تقوم بارجاع المصفوفة numbers المخزنة بها لذلك لا يمكن الطباعة مباشرة على النحو التالى :
- الكود:
System.out.println("Random number generated is : " + Arrays.toString(Stornumbers());
لذلك وجب علينا تعريف متغير من نوع String و ليكن باسم s وتنفيذ الطريقة Stornumbers باستخدام Arrays.toString ...ثم تتم عملية الطباعة بكل سهولة على النحو التالى :
- الكود:
String S = Arrays.toString(Stornumbers());
System.out.println("Random number generated is : " + S);
وعبارة static....لماذا استخدمتها....واذا لم تستخدمها كيف سيكون شكل الكود بدونها
نستخدم كلمة #static حتى يمكننا الاشارة مباشرة الى الطريقة دون انشاء كائن جديد من الفئة التى تحتويها على النحو التالى :
- الكود:
public static void main(String[] args) {
prinNO();
}
من الكود أعلاه تم الاشارة الى الطريقة فقط دون انشاء كائن جديد ....أما فى حالة عدم استخدامها سيكون شكل البرنامج كما يلى :
- الكود:
public static void main(String[] args) {
test t = new test();
t.prinNO();
}
هنا انشائنا كائن جديد من الفئة test ثم اشارنا الى الطريقة prinNO المراد تنفيذها
اتمنى ان تكون الفكرة وصلت ....وان لم تسيتطيع فهم اى جزئية اسأل من جديد
تحتاتى لك
ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم
رد: حل اسئلة وتمارين بلغة جافا الجزء الثالث
هذا المقال من اجلك لمعرفة الطرق المختلفة لتوليد عشوائية فى الجافا
https://egy-tech.forumegypt.net/t1844-topic#5407
https://egy-tech.forumegypt.net/t1844-topic#5407
ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم
رد: حل اسئلة وتمارين بلغة جافا الجزء الثالث
أحمد مناع كتب:هذا المقال من اجلك لمعرفة الطرق المختلفة لتوليد عشوائية فى الجافا
https://egy-tech.forumegypt.net/t1844-topic#5407
كل الشكر والامتنان لك استاذ احمد على مااسهبت وتعبت ...واسئل الله ان يفتح عليك اكثر فاكثر وربي يوفقك لكل خير....ومعلوماتك جدا قيمة...وراح استفاد منها كثير باذن الله
abushuber- ....
- تاريخ التسجيل : 29/09/2018
المساهمات : 57
النقاط : 81
التقيم : 0
الدولة :
الجنس :
رد: حل اسئلة وتمارين بلغة جافا الجزء الثالث
عاشت ايدك استاذذ.....طيب استاذ هل الكود اعلاه هو الطريقة البرمجية لكتابة معادلة الرقم التناظري ام توجد لها طريقة اخرى....واذا طلب بدل الرقم التناظري ايجاد الرقم الاوليأحمد مناع كتب:أما السؤال الاخير : يطلب منك برنامج للتحقق ما اذا كان الرقم n متناظر أم لا ....الحل:
الارقام المتناظرة هى الارقام التى يمكنك قرائتها من اليمن أو من الشمال و تعطيك نفس النتيجة بمعنى أخر هو نفس الرقم بعد العكسي. على سبيل المثال 545 ، 151 ، 34543 ، 343 ، 171 ، 48984 هي أرقام متناظرة.
المثال :i
- الكود:
n = s.nextInt();
m = n;
while(n > 0)
{
x = n % 10;
a = a * 10 + x;
n = n / 10;
}
if(a == m)
{
[rtl]nombres premiers او الرقم الكابركاري Nombres OF KAPREKAR او الرقم المتماثل باختصار ماهو الكود الربمجي لهذه الاعداد[/rtl]
abushuber- ....
- تاريخ التسجيل : 29/09/2018
المساهمات : 57
النقاط : 81
التقيم : 0
الدولة :
الجنس :
رد: حل اسئلة وتمارين بلغة جافا الجزء الثالث
اهلا بيك الاخ الكريم
نعم يوجد اكثر من طريقة لفحص التناظر لكن للنصوص أما الارقام انا لا اعلم غير تلك الا ان يتم تحويل الرقم الى String و معاملته معاملة النصوص ...على اى حال محضر 3 مقالات وكان من الفترض ان يتم كتابتهم بالامس لكن انقطاع التيار الكهربائى المستمر كان السبب فى التاخير لذلك الليلة ان شاء الله تعالى سيتم كتابة المقالات تلك وهى على الموضوعات التالية :
1_الطرق المختلفة لانشاء الكائنات فى الجافا
2_الطرق المختلفة لفحص النصوص و الارقام وحتى الجمل متناظرة ام لا
3_ الطرق المختلفة لايجاد الارقام الاولية فى الجافا nombres premiers
وفعلا تلك المقالات تم كتابة منها اجزاء أما الارقام Nombres OF KAPREKAR سيتم فتح مقال لها فى وقت لاحق
معذرة لكل هذا التاخير
تحياتى لك
ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم
رد: حل اسئلة وتمارين بلغة جافا الجزء الثالث
ممتن لك استاذ
abushuber- ....
- تاريخ التسجيل : 29/09/2018
المساهمات : 57
النقاط : 81
التقيم : 0
الدولة :
الجنس :
Maraim ali- .
- تاريخ التسجيل : 23/03/2021
المساهمات : 1
النقاط : 1
التقيم : 0
الدولة :
الجنس :
| |
منتدى مصر التقني :: قسم لغات البرمجة Programming languages :: لغة الجافا Java :: نقاش و أستفسارات الاعضاء
صفحة 1 من اصل 1
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى
أمس في 4:45 pm من طرف moslema_r
» 7 دراسات تقدمها أبرز شركات دراسة جدوى في الرياض لدراسة وتحليل مشروعك
أمس في 4:39 pm من طرف moslema_r
» استثمارات واعدة في القطاع الصحي مع أفضل شركة دراسة جدوى معتمدة في الإمارات
أمس في 4:33 pm من طرف moslema_r
» أفضل مكتب استشارات اقتصادية في قطر: دليل شامل لاختيار الشريك الأمثل
أمس في 4:28 pm من طرف moslema_r
» استثمر بثقة مع أفضل مكتب استشارات اقتصادية في عمان
أمس في 4:22 pm من طرف moslema_r
» ما هي المصانع المربحة؟
أمس في 3:57 pm من طرف moslema_r
» أفضل مكتب دراسات جدوى في البحرين الشريك الاستثماري الأفضل لك
أمس في 3:46 pm من طرف moslema_r
» أفكار مشاريع صغيرة مربحة جدا وغير مكلفة يمكنك البدء بها اليوم
أمس في 3:40 pm من طرف moslema_r
» برمجة وتصميم تطبيق جوال لنادى رياضي
أمس في 3:33 pm من طرف moslema_r
» تصميم تطبيق جوال لتوصيل الطلبات
أمس في 3:27 pm من طرف moslema_r