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

[Java] حل اسئلة وتمارين بلغة جافا الجزء الرابع

اذهب الى الأسفل

[Java] حل اسئلة وتمارين بلغة جافا الجزء الرابع Empty [Java] حل اسئلة وتمارين بلغة جافا الجزء الرابع

مُساهمة من طرف abushuber الإثنين فبراير 11, 2019 6:54 pm

السلام عليكم ايها الرائعون....كل الشكر والتقدير للاستاذ احمد مناع والاخت زهراء...لما يقدموه من مساعدة في حل هذه السلسلة من تمارين الجافا ...وبالاسلوب السهل الممتنع....وبقيت عندنا هذه النسخة من الاسئلة الخاصة بنهاية الفصل الدراسي الاول ياريت حلها ...بنفس الاسلوب الرائع الخاص بشرح وتبيان كل سطر برمجي...[Java] حل اسئلة وتمارين بلغة جافا الجزء الرابع 51144410
abushuber
abushuber
....
....

تاريخ التسجيل : 29/09/2018
المساهمات : 57
النقاط : 81
التقيم : 0
الدولة : العراق
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

[Java] حل اسئلة وتمارين بلغة جافا الجزء الرابع Empty رد: [Java] حل اسئلة وتمارين بلغة جافا الجزء الرابع

مُساهمة من طرف أحمد مناع الثلاثاء فبراير 12, 2019 12:08 pm

اهلا بيك الاخ الكريم @abushuber ونسال الله ان نكون عند حسن ظنك بنا دائما



السؤال الاول : يتكون من قسمين :

أ_ القسم الاول ممطلوب تعريف لكل من :

_ الكلاس class  :هي قوالب برمجية داخل الأقواس المتعرجة {} ليتم استخدامها لإنشاء الكائنات وتتضمن الخصائص و الاساليب الأساسية و أنواع البيانات التي يمكن استخدامها بواسطة هذا الكائن....ويتم انشاء الكلاس من خلال الكلمة المحجوزة class ثم وضع اسم لها ثم  الأقواس المتعرجة {}  وكتابة الاكواد البرمجية داخلها

_Inheritance : تم تعريفها الوراثة فى سؤالك فى المشاركة التالية :

https://egy-tech.forumegypt.net/t1816-topic

_الطرق أو الدوال methods :تم تعريفها ايضا فى المشاركة التالية :

https://egy-tech.forumegypt.net/t1811-topic

ب_ القسم الثاني مطلوب وضع امثلة لأدوات التحكم البنائئ Control structures

ويقصد بها الكتل البرمجية التى تقوم تنفيذ التعليمات التى بداخلها بناءً على شروط معينة وتنقسم الى نوعين :

_كتل أختيار مثل

جملة if عبارة عن كتلة تحكم بنائي بسيطة تختبر ما إذا كان الشرط صحيحًا أم خطأ...المثال التالى طباعة جملة "لقد اجتزت الاختبار" اذا كان الدرجة أكبر من 50


الكود:

public class TestClass {

  public static void main(String[] args) {
  
 int Marks=55;

    if(Marks>50){
      System.out.print("You have passed the exam !!");
    }
  }
}

جملة if...else تحكم بنائى تمكنك من القيام بعمل ما إذا تحقق شرط معين، و القيام بعمل أخر إذا لم يتحقق الشرط. في مثالنا السابق، يمكننا أن نوسع الفكرة بحيث يقوم البرنامج بطباعة جملة "لقد اجتزت الاختبار" اذا كانت الدرجة أكبر من 50 وطباعة جملة "لقد فشلت الاحتبار " فى حالة ان الدرجة اصغر من 50

الكود:
 
public class TestClass {
  
public static void main(String[] args) {
    
int totalMarks=48;

    if(totalMarks>50){
      System.out.print("You have passed the exam !!");
    }
    else {
      System.out.print("You have failed the exam !!");
    }
  }
}


جملة switch وهو تحكم بنائى ايضا يمكنك استخدامة فى وجود عدة خيارات و احتمالات ...المثال :

الكود:

public class TestClass {
  
public static void main(String[] args) {
    
int totalMarks=48;

 switch (totalMarks) {
                  case 'A':
                        System.out.println("Grade A - marks >=80");
                        break;
    
                  case 'B':
                        System.out.println("Grade B - marks >=60");
                        break;
 
                  case 'C':
                        System.out.println("Grade C - marks >=40");
                        break;
                        
                  case 'F':
                        System.out.println("Grade F - marks <40 FAIL");
                        break;
                        
                
                        System.out.println("Invalid Grade");
                      
           }

كتل تكرار مثل :

_كتلة while ... تحكم بنائي يتم فيها بدء حلقة حتى يتم استيفاء الشرط. هذه البنية مفيدة عند تنفيذ تعليمات تكرارية لتلبية معلمة معينة...مثال :يقوم بطاعة الارقام بدء من الرقم 10 حتى يقف عند الرقم 19
الكود:
public class Test {

   public static void main(String args[]) {
      int x = 10;

      while( x < 20 ) {
         System.out.print("value of x : " + x );
         x++;
         System.out.print("\n");
      }
   }
}

المخرجات :
value of x : 10
value of x : 11
value of x : 12
value of x : 13
value of x : 14
value of x : 15
value of x : 16
value of x : 17
value of x : 18
value of x : 19

و للمزيد من المعلومات عن ادوات التحكم البنائى يمكنك الاطلاع على المقال التالى :

https://egy-tech.forumegypt.net/t204-topic


السؤال الثاني :يطلب كتابة برنامج لايجاد أكبر قيمة بين عددين و اكبر قيمة بين 3 ارقام مع الاخذ فى الاعتبار ما يلى :

1_ أن يكون اسم الفئة Maximun ...وذلك على النحو التالى :

الكود:
public class Maximun {

}

2_أن يتم إنشاء منشئ الفئة وهى الطريقة التى تاخذ نفس اسم الفئة....وذلك على النحو التالى :

الكود:

public class Maximun {

    Maximun(){
    
    }
}

وبما ان البرنامج يتطلب مقارنة بين عددين و ثلاث اعداد رقمية لذلك يجب علينا الاعلان عن 3 حقول متغيرات رقمية و استخدامهم فى منشيء الفئة على النحو التالى :

الكود:

public class Maximun {

    int N1;
    int N2;
    int N3;
    Maximun(int NO1,int NO2){
      this.N1=NO1;
      this.N2=NO2;
    
    }
  

3_أن يتم استخدام اسلوب التحميل الزائد للدوال overloading ....وهى ان يتم انشاء طرق بنفس الاسم لكن بمعلمات مختلفة وبما اننا انشئنا الطريقة Maximun وهى منشئ الفئة اعلاه بعدد 2 معلمات سنقوم بانشاء طريقة بنفس الاسم بعدد 3 ملعمات ...على النحو التالى :
الكود:
public class Maximun {

    int N1;
    int N2;
    int N3;
    Maximun(int NO1,int NO2){
      this.N1=NO1;
      this.N2=NO2;
    
    }
     Maximun(int NO1,int NO2,int NO3){
      this.N1=NO1;
      this.N2=NO2;
      this.N3=NO3;
    }

4_ ان يتم انشاء طريقة لايجاد اكبر قيمة ما بين رقمين ....ويوجد عدة طرق لفعل ذلك اسهلها استخدام Math.max و التى يتم تمرير اليها رقمين فيتم ايجاد اكبر رقم بينهم .....لذلك سوف نستخدمها فى انشاء الطريقة التى تقوم بارجاع اكبر قيمة بين رقمين على النحو التالى :
الكود:
 int get2max(){
    int max=Math.max(this.N1,this.N2);  
    return max;
            
    }

5_نقوم بانشاء طريقة اخرى لايجاد اكبر قيمة بين 3 ارقام ...وبما ان Math.max لا تسخدم الا للمقارنة بين رقمين فقط لايجاد اكبر قيمة ....لذلك وجب علينا اولا سنتخدمها لايجاد اكبر قيمة بين الرقمين ...ثم بعد ذلك استخدام الناتج للاستخدامة فى المقارنة مع الرقم 3 وذلك على النحو التالى :

الكود:
 int get3max(){
    int max=Math.max(this.N1,this.N2);
    int max3=Math.max(max,this.N3);
  
        return max3;
  
    }

6_ انشاء الفئة الرئسية ومن ثم انشاء كائن جديد من الفئة Maximun ومن ثم استخدامه فى طباعة النتائج و ذلك على النحو التالى :
الكود:
public static void main(String[] args) {
  
     Maximun max2 = new Maximun(10,15);
     Maximun max3 = new Maximun(10,15,20);
    
    
    
     System.out.println("The max of tow is: " + max2.get2max());
      System.out.println("The max of three is: " + max3.get3max());
 }    


البرنامج بالكامل :

الكود:

public class Maximun {

    int N1;
    int N2;
    int N3;
    Maximun(int NO1,int NO2){
      this.N1=NO1;
      this.N2=NO2;
    
    }
     Maximun(int NO1,int NO2,int NO3){
      this.N1=NO1;
      this.N2=NO2;
      this.N3=NO3;
    }
    
    int get2max(){
    int max=Math.max(this.N1,this.N2);  
    
        return max;
            
    }
    int get3max(){
    int max=Math.max(this.N1,this.N2);
    int max3=Math.max(max,this.N3);
  
        return max3;
  
    }
    
 public static void main(String[] args) {
  
     //انشاء كائن جديد و تمرير رقمين له
     Maximun max2 = new Maximun(10,15);
     //انشاء كائن جديد و تمرير ثلاثة ارقام
     Maximun max3 = new Maximun(10,15,20);
    
    
     // استخدام الطريقة get2max لايجاد اكبر قيمة بين رقمين
     System.out.println("The max of tow is: " + max2.get2max());
    
      // استخدام الطريقة get3max لايجاد اكبر قيمة بين ثلاثة ارقام
    System.out.println("The max of three is: " + max3.get3max());
 }    
}

المخرجات :
The max of tow is: 15
The max of three is: 20

ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم
أحمد مناع
أحمد مناع
.
.

تاريخ التسجيل : 15/02/2011
المساهمات : 1108
النقاط : 202034
التقيم : 144
الدولة : مصر
الجنس : ذكر

https://egy-tech.forumegypt.net

الرجوع الى أعلى الصفحة اذهب الى الأسفل

[Java] حل اسئلة وتمارين بلغة جافا الجزء الرابع Empty رد: [Java] حل اسئلة وتمارين بلغة جافا الجزء الرابع

مُساهمة من طرف أحمد مناع الثلاثاء فبراير 12, 2019 1:02 pm

السؤال الثالث : هو نفس السؤال الذى ورد فى المشاركة التالية مع اختلاف بسيط للغاية:

https://egy-tech.forumegypt.net/t1838-topic

ومع ذلك سنقوم بكتابها مرة اخرى ....حتى تلاحظ الفرق

انشاء الفئة point

الكود:

 class Point {
    
   //الاعلان عن المتغيرات التى تمثل الاحداثيات س و ص  
   private double x , y;
  
  
   //مشيد الفئة  من إحداثياتها.
   public Point(double x1, double y1)
   {
     this.x = x1;
     this.y = y1;
   }

  
   // (another)حساب المسافة من هذه النقطة إلى النقطة المحددة في الكائن .
   public double distance(Point another) {
      double xDiff = this.x - another.x;
      double yDiff = this.y - another.y;
      return Math.sqrt(xDiff*xDiff + yDiff*yDiff);
   }
  
}

إنشاء فئة الدائرة 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);
}
}

تتفيذ البرنامج فى الدالة الرئسية بالفئة test .....البرنامج بالكامل على النحو التالى :

الكود:

 class Point {
    
   //الاعلان عن المتغيرات التى تمثل الاحداثيات س و ص  
   private double x , y;
  
  
   //مشيد الفئة  من إحداثياتها.
   public Point(double x1, double y1)
   {
     this.x = x1;
     this.y = y1;
   }

  
   // (another)حساب المسافة من هذه النقطة إلى النقطة المحددة في الكائن .
   public double distance(Point another) {
      double xDiff = this.x - another.x;
      double 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(4, 8);
        // حساب و طباعة المسافة بين نقطة الاصل و النقطة الافتراضية
        
         System.out.printf("The distance between origin and specifle point is : %.2f%n", p1.distance(p2));
        
        
        
         //إنشاء نقطة مركز الاصل للدائرة
        Point p3= new Point(7, 4);
        // إنشاء الدائرة بتمرير نقطة مركز الدائرة نقطة الاصل ونصف القطر
        Circle c1 = new Circle(p3,3);
      
        
       //تزحيف الدائرة عن مكانها الاصلى الى النقطة المحددة بالسؤال
        Point p4 = new Point(3, 4.3);
        Circle c2 = new Circle(p4,3);
        
        
       // ايجاد المسافة بينهما  
      System.out.printf("The distance between the old and new position of the circle is: %.2f%n", c1.distance(c2));
      
    }
    

    
}

المخرجات :
The distance between origin and specifle point is : 4.47
The distance between the old and new position of the circle is: 4.01

هل لاحظت الفرق بين السؤال هنا و السؤال فى المشاركة السابقة .....ساترك لك دقة الملاحظة  [Java] حل اسئلة وتمارين بلغة جافا الجزء الرابع 1f600  [Java] حل اسئلة وتمارين بلغة جافا الجزء الرابع 1f600  [Java] حل اسئلة وتمارين بلغة جافا الجزء الرابع 1f600 و منتظر اجابتك ؟؟؟

ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم
أحمد مناع
أحمد مناع
.
.

تاريخ التسجيل : 15/02/2011
المساهمات : 1108
النقاط : 202034
التقيم : 144
الدولة : مصر
الجنس : ذكر

https://egy-tech.forumegypt.net

الرجوع الى أعلى الصفحة اذهب الى الأسفل

[Java] حل اسئلة وتمارين بلغة جافا الجزء الرابع Empty رد: [Java] حل اسئلة وتمارين بلغة جافا الجزء الرابع

مُساهمة من طرف أحمد مناع الثلاثاء فبراير 12, 2019 3:53 pm

السؤال الرابع : يطلب كتابة برنامج لايجاد الارقام العشوائية فى نطاق الرقم n ثم ايجاد مضروب factor العدد n  مع الاخذ فى الاعتبار ان يتم ذلك ببناء عدد 2 طريقة ...

1_ نقوم بانشاء طريقة وليكن باسم factor لايجاد مضروب العدد n و طباعتة على النحو التالى :

الكود:
 // طريقة لايجاد مضروب العدد n
     static void factor(int n)
    {
       int res = 1 ;
       for (int i=1; i<=n; i++)  
       res *= i;
      
      
      System.out.println("the Factorial of digits "+n+" is: "+res);  
                  
    }



2_ نقوم بانشاء طريقة لايجاد الارقام العشوائية فى نطاق الرقم n ...فى البداية سنقوم بانشاء طريقة و ليكن باسم getnumbers على النحو التالى :
الكود:
 static void getnumbers(int n){
          
        // إنشاء كائن جديد من الفئة لتوليد ارقام عشوائية
        Random rand = new Random();
      
        
        // انشاء مصفوفة لتخزين خمسة ارقام بها  
        int[] numbers = new int[n];
        
        // حلقة تكرارية للحصول على خمسس ارقام عشوائية فى نطاق الرقم عشرة
        for(int i = 0; i <n; i++) {
         numbers[i] = (int)(rand.nextInt(n) + 1);
        }
        
        // تحويل المصفوفة الى سلسلة نصية و طباعتها
        String S = Arrays.toString(numbers);
        System.out.println("the Random number is : " + S);
      
        // تنفيذ الطريقة حساب مضروب العدد
        factor(n);
        
    }

و البرنامج بالكامل على النحو التالى :

الكود:

import java.util.Arrays;
import java.util.Random;

public class test {
    
    
    // طريقة لايجاد مضروب العدد n
     static void factor(int n)
    {
       int res = 1 ;
       for (int i=1; i<=n; i++)  
       res *= i;
      
      
      System.out.println("the Factorial of digits "+n+" is: "+res);  
                  
    }
    
     static void getnumbers(int n){
          
        // إنشاء كائن جديد من الفئة لتوليد ارقام عشوائية
        Random rand = new Random();
      
        
        // انشاء مصفوفة لتخزين خمسة ارقام بها  
        int[] numbers = new int[n];
        
        // حلقة تكرارية للحصول على خمسس ارقام عشوائية فى نطاق الرقم عشرة
        for(int i = 0; i <n; i++) {
         numbers[i] = (int)(rand.nextInt(n) + 1);
        }
        
        // تحويل المصفوفة الى سلسلة نصية و طباعتها
        String S = Arrays.toString(numbers);
        System.out.println("the Random number is : " + S);
      
        // تنفيذ الطريقة حساب مضروب العدد
        factor(n);
        
    }
    

    public static void main(String[] args) {
     // تفيذ طريقةالحصول على الارقام العشوائية
    getnumbers(5);
    }
  
}

المخرجات :

the Random number is : [1, 2, 1, 5, 5]
the Factorial of digits 5 is: 120


كما يمكنك بدل من انشاء مصفوفة لتخزين الارقام العشوائية وطباعتها يمكنك الاستغناء عن ذلك وطباعة الارقام العشوائية مباشرة ولذلك لان السؤال لم يفرض علينا انشاء مصفوفة كما جاء فى المشاركة السابقة .....وذلك على النحو التالى :

الكود:


import java.util.Random;

public class test {
    
    
    // طريقة لايجاد مضروب العدد n
     static void factor(int n)
    {
       int res = 1 ;
       for (int i=1; i<=n; i++)  
       res *= i;
      
      
      System.out.println("the Factorial of digits "+n+" is: "+res);  
                  
    }
    
     static void getnumbers(int n){
          
        // إنشاء كائن جديد من الفئة لتوليد ارقام عشوائية
        Random rand = new Random();
      
            
        int numbers ;
        
        // حلقة تكرارية للحصول على خمسس ارقام عشوائية فى نطاق الرقم عشرة
        for(int i = 0; i <n; i++) {
         numbers = (int)(rand.nextInt(n) + 1);
         System.out.println("the Random number is : " +  numbers);
        }
        
        // تنفيذ الطريقة حساب مضروب العدد
        factor(n);
        
    }
    

    public static void main(String[] args) {
     // تفيذ طريقةالحصول على الارقام العشوائية
    getnumbers(5);
    }
  
}

لكن المخرجات ستكون على النحو التالى :

the Random number is : 1
the Random number is : 5
the Random number is : 4
the Random number is : 5
the Random number is : 2
the Factorial of digits 5 is: 120

ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم
أحمد مناع
أحمد مناع
.
.

تاريخ التسجيل : 15/02/2011
المساهمات : 1108
النقاط : 202034
التقيم : 144
الدولة : مصر
الجنس : ذكر

https://egy-tech.forumegypt.net

الرجوع الى أعلى الصفحة اذهب الى الأسفل

[Java] حل اسئلة وتمارين بلغة جافا الجزء الرابع Empty رد: [Java] حل اسئلة وتمارين بلغة جافا الجزء الرابع

مُساهمة من طرف أحمد مناع الثلاثاء فبراير 12, 2019 5:57 pm

السؤال الرابع : يطلب كتابة برنامج لايجاد القاسم المشترك الاكبر لعددين مع الاخذ فى الاعتبار ان يتم ادخال العددين من خلال المستخدم

قبل البدء تعال نتعرف على مفهوم القاسم المشترك رياضيا Greatest common divisor لعددين كما يدل على ذلك اسمه هو أكبر عدد يقسم في نفس الوقت العددين معاً بدون أي باقي قسمة، فمثلاً القاسم المشترك الأكبر للعددين 48 و 60 هو 12.

ويتم الحساب برمجيا على النحو التالى :
الكود:

import java.util.Scanner;

public class test {
    
    
    public static void main(String[] args) {
     // الاعلان عن متغيرين رقميين لتخزين مدخلات المستخدم فيهما
   int num1, num2;
        
        //انشاء كائن جديد لقرءاة مدخلات المستخدم
        Scanner s = new Scanner(System.in);
        
        //اظهار رسالة للمستخدم تطالبة بادخال الرقم الاول
        System.out.print("Enter first number:");
        // تخزين الرقم المدخل فى المتغير الاول
        num1 = (int)s.nextInt();
        
        
        // اظهار رسالة للمستخدم تطالبة بادخال الرقم الثاني
        System.out.print("Enter second number:");
        // تخزين مدخلات المستخدم فى المتغير الثاني
        num2 = (int)s.nextInt();
        
      
      while (num1 != num2) {
       if(num1 > num2)
            num1 = num1 - num2;
          else
            num2 = num2 - num1;
       }

        //طباعة القاسم المشترك
        System.out.println("greatest common divisor of given numbers is:"+ num2);
    
    
    }
  
}


ملحوظ : يمكنك الاطلاع على المقال التالى لتتعلم الطرق المختلفة للادخال و الاخراج فى الجافا 


في  الطريقة اعلاه ،يتم حساب القاسم المشترك بين عددين من خلال  طرح العدد الاصغر من العدد الأكبر ، ويتم تعيين النتيجة للمتغير الذي يحتوى على العدد الاكبر. تستمر هذه العملية حتى يتساوى العددين n1 و n2....و هذه طريقة مفيدة جدا اذا كان العددين التى تم ادخالهما قيم موجبة لكن اذا كان يوجد ارقام سالبة فمن الافضل حساب القاسم المشترك الاكبر من خلال الطريقة math.BigInteger ...و ذلك على النحو التالى :

الكود:

import java.math.BigInteger;
import java.util.Scanner;

public class test {
    
    
    public static void main(String[] args) {
     // الاعلان عن متغيرين رقميين لتخزين مدخلات المستخدم فيهما
   int num1, num2;
        
        //انشاء كائن جديد لقرءاة مدخلات المستخدم
        Scanner s = new Scanner(System.in);
        
        //اظهار رسالة للمستخدم تطالبة بادخال الرقم الاول
        System.out.print("Enter first number:");
        // تخزين الرقم المدخل فى المتغير الاول
        num1 = (int)s.nextInt();
        
        
        // اظهار رسالة للمستخدم تطالبة بادخال الرقم الثاني
        System.out.print("Enter second number:");
        // تخزين مدخلات المستخدم فى المتغير الثاني
        num2 = (int)s.nextInt();
        
      
    BigInteger b1 = BigInteger.valueOf(num1);
    BigInteger b2 = BigInteger.valueOf(num2);
    BigInteger n = b1.gcd(b2);
    
        //displaying the result
        System.out.println("greatest common divisor of given numbers is: "+ n);
    
    
    }
  
}

المخرجات :

Enter first number:81
Enter second number:-153
greatest common divisor of given numbers is: 9

ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم
أحمد مناع
أحمد مناع
.
.

تاريخ التسجيل : 15/02/2011
المساهمات : 1108
النقاط : 202034
التقيم : 144
الدولة : مصر
الجنس : ذكر

https://egy-tech.forumegypt.net

الرجوع الى أعلى الصفحة اذهب الى الأسفل

[Java] حل اسئلة وتمارين بلغة جافا الجزء الرابع Empty رد: [Java] حل اسئلة وتمارين بلغة جافا الجزء الرابع

مُساهمة من طرف abushuber الأربعاء فبراير 13, 2019 12:27 pm

أحمد مناع كتب:
هل لاحظت الفرق بين السؤال هنا و السؤال فى المشاركة السابقة .....ساترك لك دقة الملاحظة  [Java] حل اسئلة وتمارين بلغة جافا الجزء الرابع 1f600  [Java] حل اسئلة وتمارين بلغة جافا الجزء الرابع 1f600  [Java] حل اسئلة وتمارين بلغة جافا الجزء الرابع 1f600 و منتظر اجابتك ؟؟؟
اولا كل الشكر لك استاذ احمد ع سرعة الاجابة...ثانيا االذي فهمته ان الفرق في هذا السؤال اراد فيه انشاء نقطتين ودائرة واحدة وتزحيف الدائرة حسب مقدار محدد...وايضا حساب المسافة بين النقطة القديمة ونقطة انشاء الدائرة...لكن ماذا يقصد بالنقطة القديمة هل هي نقطة الاصل ام النقطة التي تم انشائها بعد النقطة الاولى..اما في السؤال السابق اراد ايضا انشاء نقطتين وانشاء دائرتين وتحيف الدائرة الاولى بمقدار معين ثم وحساب المسافة بين الدائرتين.... لكن هناك شيء لم افهمه وان كان ينبغي ان يكون في محله هناك...وهو كيف عينت مركز الدائرة الاولى بقيم التزحيف كما ادناه...
public static void main(String[] args) {
        
        //تعين نقطة مركز الدائرة الاولى باستخدام الكائن نقطة
        Point p1 = new Point(2, 4);
        // إنشاء الدائرة الاولى بتمرير نقطة مركز الدائرة ونصف القطر
        Circle c1 = new Circle(p1,2);


  حيث ان (2,4) هي تزحيف الدائرة ..بالمختصر طريقة انشاء الدارة في ذلك السؤال الا تختلف مع انشائها في هذا السؤال الذي انشئته بالكود التالي..
//إنشاء نقطة مركز الاصل للدائرة
        Point p3= new Point(7, 4);
        // إنشاء الدائرة بتمرير نقطة مركز الدائرة نقطة الاصل ونصف القطر
        Circle c1 = new Circle(p3,3);

و لدي استاذ سؤال حول هذا الكود ادناه..كيف بواسطة الcenter استدعيت طريقة المسافة ...وهو ليس كائن وكذلك البارميترات (another.center) ياليت شرح هذه الطريقة مع محتوياتها

public double distance(Circle another) {
    
   return center.distance(another.center);
}
abushuber
abushuber
....
....

تاريخ التسجيل : 29/09/2018
المساهمات : 57
النقاط : 81
التقيم : 0
الدولة : العراق
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

[Java] حل اسئلة وتمارين بلغة جافا الجزء الرابع Empty رد: [Java] حل اسئلة وتمارين بلغة جافا الجزء الرابع

مُساهمة من طرف أحمد مناع الأربعاء فبراير 13, 2019 6:17 pm

أهلا بيك أخى الكريم @abushuber

.ثانيا االذي فهمته ان الفرق في هذا السؤال اراد فيه انشاء نقطتين ودائرة واحدة وتزحيف الدائرة حسب مقدار محدد...وايضا حساب المسافة بين النقطة القديمة ونقطة انشاء الدائرة

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

لكن ماذا يقصد بالنقطة القديمة هل هي نقطة الاصل ام النقطة التي تم انشائها بعد النقطة الاولى

اذن النقطة القديمة للدائرة هى نقطة الاصل قبل التزحيف و الجديدة هى بعد التزحيف .....

اما في السؤال السابق اراد ايضا انشاء نقطتين وانشاء دائرتين وتحيف الدائرة الاولى بمقدار معين ثم وحساب المسافة بين الدائرتين

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

الكود:
public static void main(String[] args) {
        
        //تعين نقطة مركز الدائرة الاولى باستخدام الكائن نقطة
        Point p1 = new Point(2, 4);
        // إنشاء الدائرة الاولى بتمرير نقطة مركز الدائرة ونصف القطر
        Circle c1 = new Circle(p1,2);

لكن الفرق الوحيد فى هذا السؤال عن السؤال السابق هو انه اراد تزحيف الدائرة على النقطة (3, 4.3) ولو نظرت لتك النقطة لوجدت أن أحد  أحداثيها رقم عشرى 4.3 ....وبالتالى وجب تغير حقول المتغيرات فى كود السؤال السابق من int الى double حتى يمكن تمثيل الارقام العشرية و بالتالى فالكود السابق كان بالشكل التالى :
الكود:

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);
   }
  
}

الى الشكل التالى :

الكود:
 class Point {
    
   //الاعلان عن المتغيرات التى تمثل الاحداثيات س و ص  
   private double x , y;
  
  
   //مشيد الفئة  من إحداثياتها.
   public Point(double x1, double y1)
   {
     this.x = x1;
     this.y = y1;
   }

  
   // (another)حساب المسافة من هذه النقطة إلى النقطة المحددة في الكائن .
   public double distance(Point another) {
      double xDiff = this.x - another.x;
      double yDiff = this.y - another.y;
      return Math.sqrt(xDiff*xDiff + yDiff*yDiff);
   }
  
}

اذن التغير الذى حدث فى الطريقة point فقط للمتغيرات 


و لدي استاذ سؤال حول هذا الكود ادناه..كيف بواسطة الcenter استدعيت طريقة المسافة ...وهو ليس كائن وكذلك البارميترات (another.center) ياليت شرح هذه الطريقة مع محتوياتها

الكود:

public double distance(Circle another) {
   
  return center.distance(another.center);
}

center كائن من الفئة point ....و ربما تتسائل كيف تم انشائة؟.....تم انشائة فى فئة الدائرة Circle على النحو التالى :

الكود:
private Point center;

وتم انشاء الكائن center بالطريقة اعلاه حتى لا نكون مجبرين على تمرير بيانات له فى حالة انشائة بالطريقة التلقيدية على النحو التالى :
الكود:
 Point center = new Point(5,2);

ايضا بالنسبة للكائن another هو عبارة عن كائن من الفئة center وتم الاعلان عنه فى معلمات الطريقة distance

الكود:
public double distance(Circle another)

تعال نشرح الطريقة distance باسلوب بلدي شوى

انا بقول لمترجم الجافا اعمل لى طريقة باسم distance الطريقة يكون المعلمات بتاعتها كائن دائرة يعنى لازم يتم انشاء دائرة و تمريرها للطريقة تلك ...جسم الطريقة جعلت كائن point يقوم باستدعاء الطريقة distance الموجودة بية ...و بقولة ان الطريقة دى يتم تمرير اليها كائن الدائرة another اللى بدورة سيقوم باسدعاء center ...

فى النهاية اتمنى ان انكون استطعت حل الاشكال لديك
تحياتى لك

ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم
أحمد مناع
أحمد مناع
.
.

تاريخ التسجيل : 15/02/2011
المساهمات : 1108
النقاط : 202034
التقيم : 144
الدولة : مصر
الجنس : ذكر

https://egy-tech.forumegypt.net

الرجوع الى أعلى الصفحة اذهب الى الأسفل

[Java] حل اسئلة وتمارين بلغة جافا الجزء الرابع Empty رد: [Java] حل اسئلة وتمارين بلغة جافا الجزء الرابع

مُساهمة من طرف abushuber الخميس فبراير 14, 2019 10:07 am

أحمد مناع كتب:
center كائن من الفئة point ....و ربما تتسائل كيف تم انشائة؟.....تم انشائة فى فئة الدائرة Circle على النحو التالى :

الكود:
private Point center;

وتم انشاء الكائن  center بالطريقة اعلاه حتى لا نكون مجبرين على تمرير بيانات له فى حالة انشائة بالطريقة التلقيدية على النحو التالى :
الكود:
 Point center = new Point(5,2);

ايضا بالنسبة للكائن another هو عبارة عن كائن من الفئة center وتم الاعلان عنه فى معلمات الطريقة distance

الكود:
public double distance(Circle another)


يسلام عليك استاذ وماشاء الله عليك....يعني استاذ اللي فهمته من حضرتك انو هناك اكثر من طريقة لانشاء الكائن مثل ذكر اسم الكلاس ثم اسم كائن او ذكر اسم الكلاس مع اسم كائن داخل بيانات طريقة محددة وليس فقط عن طريق الكلمة المحجوزة  NEW طيب اذا كان فهمي صحصح متى يتم انشاء هذه الكائنات واعتمادا على ماذا ....هذا اولا؟
ثانيا..الكائنات التي تم انشائها في جزء MAINياليت من حضرتك توضيح اكثر عنها ولماذا تم انشاء اربعة كائنات لل POINT ولماذا تم انشاء كائنين للCERCILE...يعني باختصار مافائدة كل كاءن وهل ضروري انشاء كل هذه الكائنات..
اما ثالثا ...قولك استاذ :
تعال نشرح الطريقة distance باسلوب بلدي شوى 

انا بقول لمترجم الجافا اعمل لى طريقة باسم distance الطريقة يكون المعلمات بتاعتها كائن دائرة يعنى لازم يتم انشاء دائرة و تمريرها للطريقة تلك ...جسم الطريقة جعلت كائن point يقوم باستدعاء الطريقة distance الموجودة بية ...و بقولة ان الطريقة دى يتم تمرير اليها كائن الدائرة another اللى بدورة سيقوم باسدعاء center ...

اللي فهمتة انو حضرتك استدعيت طريقة المسافة بواسطة كائن CENTER والذي لايمكنه ان يستدعي المسافة  الا ان نستدعيه بواسطة كاءن اخر وهو ANUTHER....طيب هنا كيف قام كائن باستدعاء كائن اخر...استاذ تحملني شوي لكن اريد ان افهم مايجري بشكل مفصل وانت فرصة لا تقدر بثمن....امتناني لك
abushuber
abushuber
....
....

تاريخ التسجيل : 29/09/2018
المساهمات : 57
النقاط : 81
التقيم : 0
الدولة : العراق
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

[Java] حل اسئلة وتمارين بلغة جافا الجزء الرابع Empty رد: [Java] حل اسئلة وتمارين بلغة جافا الجزء الرابع

مُساهمة من طرف أحمد مناع الخميس فبراير 14, 2019 6:38 pm

الكود:
يعني استاذ اللي فهمته من حضرتك انو هناك اكثر من طريقة لانشاء الكائن مثل ذكر اسم الكلاس ثم اسم كائن او ذكر اسم الكلاس مع اسم كائن داخل بيانات طريقة محددة وليس فقط عن طريق الكلمة المحجوزة  NEW طيب اذا كان فهمي صحصح متى يتم انشاء هذه الكائنات واعتمادا على ماذا ....هذا اولا؟

أهلا وسهلا بيك الاخ الكريم @abushuber

نعم اخى الكريم يوجد حوالى 5 طرق لانشاء الكائنات فى الجافا منها استخدام الكلمة المحجوزة  NEW كما تعلم ومنها وضع اسم الكلاس ثم اسما للكائن وفى هذه الحالة يسمى علميا متغير يشير الى كائن أو مرجع كائن أو مؤشر كائن على اى حالة لا مشكلة فى المسمي....وحتى لا نتشعب فى هذه المشاركة الى الطرق الاخرى سيتم فتح مقال الليلة او غدا لشرح الطرق المختلفة لانشاء الكائنات أو مراجعها فى الجافا و بيان مميزات و عيوب كل طريقة ...كما ساكتفي بذكر الفارق الجوهرى فى تلك المشاركة بين الكائن Object و مرجع كائن Reference ...لنفترض المثال السابق :

إنشاء مرجع كائن للفئة Point
الكود:
Point center;

إنشاء مرجع و كائن الفئة Point
الكود:
Point center = new Point(4,2);

ويمكنك ملاحظة أن الشفرة الاولى انشاء مرجع ...و الشفرة انشاء مرجع و كائن ومن خلال هذه التسمية يمكن أن نقول أن الكائن يقوم بوظائف مرجع الكائن و الكائن ذات نفسه لذلك فالكائن  Object أعم من المرجع أو المؤشر Reference....و بمعنى اخر ان المرجع جزء من الكائن Object هذا من ناحية ...

أما من ناحية أخرى عند انشاء كائن Object يمكنك الوصول لكافة دوال وطرق و متغيرات الفئة و التعامل معها بسهولة فى حين عند انشاء مرجع كائن Reference يتم الوصول بعض الطرق ....فمثلا الكائن center يمكنه الوصول الطريقة distance و منشىء الفئة Point ..فى حين أن المرجع center يمكنة الوصول الى الطريقة distance و لا يمكنة الوصول الى اى منشىء للفئة

الكائنات التي تم انشائها في جزء MAINياليت من حضرتك توضيح اكثر عنها ولماذا تم انشاء اربعة كائنات لل POINT ولماذا تم انشاء كائنين للCERCILE...يعني باختصار مافائدة كل كاءن وهل ضروري انشاء كل هذه الكائنات

انشىء اربعة كائنات من الفئة point لانشاء اربعة نقاط

نقطة اولى و نقطة تانية .....لايجاد المسافة بينهما

نقطة ثالثة لتعين مركز الدائرة الافتراضى .....نقطة رابعة تعين مركز الدائرة بعد التزحيف ....ثم ايجاد المسافة بينهما

للي فهمتة انو حضرتك استدعيت طريقة المسافة بواسطة كائن CENTER والذي لايمكنه ان يستدعي المسافة  الا ان نستدعيه بواسطة كاءن اخر وهو ANUTHER....طيب هنا كيف قام كائن باستدعاء كائن اخر

الجملة التالية هى فقط الصحيحة لانه فعلا تم استدعاء الطريقة distance الموجودة فى الفئة Point من خلال الكائن center

اللي فهمتة انو حضرتك استدعيت طريقة المسافة بواسطة كائن CENTER

لو نظرت الى الطريقة distance الموجودة فى الفئة Point سوف تجدها بالشكل التالى :
الكود:
 public double distance(Point another)

اى انها طريقة تحتاج الى كائن Point كمعلمة لها و بالتالى عند استدعها باى مكان يتم تمرير لها كائن Point .....

لذلك لما تم استدعها فى الفئة Circle تم انشاء كائن another الذى يشير الى الفئة Circle ....فئة الدائرة تلك تحتوى على الكائن center الذى يعتبر كائن فى الفئة Point لذلك تم استخدامه و تمرير الى الطريقة distance كمعلمة لها

تعال نتكتب الطريقة distance بطريقة اخرى حتى يتضح الامر :
الكود:
 public double distance(double x2, double y2) {
      double xDiff = this.x - x2;
      double yDiff = this.y - y2;
      return Math.sqrt(xDiff*xDiff + yDiff*yDiff);
   }
  
}

فى الطريقة اعلاه قمنا بانشائها بمعلمات رقيمة وليس بكائن point لذلك عند استداعها فى الطريقة distance الموجودة فى الفئة Circle  يجب تمرير لها قيم رقمية وليس كائن بوينت على النحو التالى :

الكود:
public double distance(Circle another) {
    
   return center.distance(5,8);
}
}

اذن ليس هناك استدعاء كائن من كائن اخر كما تعتقد ....ولكن الكائن center قام بعمل ما عليه فعله وهو استدعاء الطريقة ...لكن الطريقة تلك تحتاج الى كائن نقطة كملعمات لها ....الكائن another هو الكائن القادر على استدعاء  center الذى يشير الى النقطة

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

تحياتى لك

ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم
أحمد مناع
أحمد مناع
.
.

تاريخ التسجيل : 15/02/2011
المساهمات : 1108
النقاط : 202034
التقيم : 144
الدولة : مصر
الجنس : ذكر

https://egy-tech.forumegypt.net

الرجوع الى أعلى الصفحة اذهب الى الأسفل

[Java] حل اسئلة وتمارين بلغة جافا الجزء الرابع Empty رد: [Java] حل اسئلة وتمارين بلغة جافا الجزء الرابع

مُساهمة من طرف abushuber الجمعة فبراير 15, 2019 11:06 am

نعم استاذ الان فهمت المثال بشكل ممتاز...كل الشكر والامتنان لك وربي يزيدك خير وبركة انت والاهل......ماقصرت بشئ شكرا لك مرة ثانية
abushuber
abushuber
....
....

تاريخ التسجيل : 29/09/2018
المساهمات : 57
النقاط : 81
التقيم : 0
الدولة : العراق
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

الرجوع الى أعلى الصفحة

ََ

مواضيع ذات صلة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى