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

كيف انشئ مشيد لتخزين القيم الابتدائية للكسور

مغلق
بدأه she b1 في 11 مايو 2005 · 11 رد · 924 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

انشي صنف وسمه con لتنفيذ عمليات حسابية على الكسور يحتوي على

1 - متغيرات الصنف private من النوع int هما num ليحتوي على البسط , den ليحتوي على المقام

2- انشي مشيد (constructor) يسمح بإعطاء قيمه ابتدائية للكسور بشكل مختصر ، مثلا :

يتم تخزين 2/1 بدلا من 4/2 للكسور عند تعريف كائن (object) من نوع هذا الصنف.

3-

4-

5-

هناك هناك مطاليب في السؤال والي يهمنى هي فقرة 2 المشيد ممكن حدا يساعدني

وهومشكور

#2

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

المشيد هو أيضا يسمى دالة البناء وهي دائما تحمل نفس اسم الصنف وتكون أول الدوال التي تكتب في الصنف بعد المتغيرات.تستخدم لإعطاء قيم أولية للـ instance variables. يعني أنك تكتب:على فرض أن اسم الصنف con والمتغيرا den,num:

class con{

private int den;

private int num;

public con{

den=1; //initial value

num=2;}

}

تم تعديل هذه المشاركة بواسطة النغم الخجول في 11 مايو 2005 في 15:21

النغم الخجول

14_07_06_10_56_13_1152942973_6__4__6__1_5__56_1144313576165_8_-6.jpg

#3

ارسل البسط و المقام كبارامترات الى الـ constructor ....

#4

مشكورين يا جماعه لكن انتم فهمتوني غلط انا اقصد هذا الجزء من السؤال ((يتم تخزين 2/1 بدلا من 4/2 للكسور عند تعريف كائن )) ما قصدت المشيد ، وشكرا

#5

اعتقد تحتاج العامل المشترك الأكبر للرقمين و تقسمهم كلاهما عليه ..لست متأكدا .. لكن المسألة مسألة رياضيات ..

مثلا اذا جائك

6

---

8

العامل المشرتك الأكبر هو 2, عندما تقسمهما كليهما عليه, ستحصل على

3

---

4

و هو ما تريد.

تستطيعالحصول على العامل المشترك الأكبر باستخدام الـ eucledian algorithm

http://www.cut-the-knot.org/blue/Euclid.shtml

http://www.answers.com/topic/euclidean-algorithm

#6

حاول صنع تكرار بالحرف i الذي سيمثل العامل المشترك الأكبر: يبدأ من الرقم واحد وينتهي عند الرقم الأصغر منهما.،

int factor=1;
int i=0;
for (i=1 , i<Math.min(first,second);i++)
if(first%i==0 && second%i==0)factor=i;

first=first/i;
second=second/i;

مع الشكر لحسن الجودي لفكرته الجميلة.

تم تعديل هذه المشاركة بواسطة أبومازن في 12 مايو 2005 في 13:15

#7

انا شخصيا افضل شي مثل:

int x = gcd(a,b)
a /= x;
b /= x;

و الـ gcd حسب الـ eucledian algorithm هو ببساطة:

int gcd(int a, int b)
{
    if( b == 0 ) return a;
    else return gcd(b, a % b);
}

أو, بدون recursion

int gcd(int a, int b)
{
    int r = b;
    while( r != 0 )
    {
        r = a % b;
        a = b;
        b = r;
    }
    return a;
}
#8

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

كيف حالكم جميعا ان شاء الله تكونون بخير

احب كثيرا مواضيح الاستفسارات و الاسئله لما فيها من معلومات و افكار جديدة B) ، او حل لمشكلة قد تواجهني مستقبلا

لذلك احاول البحث لحل على قدر ما يسمح لي الوقت، وعندما يرفق حل للاستفسار اجد اني مصعب الحل بعض الشي :(

على كل حال انا برفق محاولتي في الحل مع علمي المسبق بان الاخوان hasan_aljudy و ابو مازن ما قصروا وقاموا بالواجب

ولكن للفائده (( صحيح ان الكود طويل بس جربه ما يخرش المية خخخخخ ))

<<<<<<< كثير كلام :D

{
  int n=20 , d=48;
  System.out.println(n+"\t/\t"+d);
  
  for (int i=1; i<Math.min(n,d); ++i )
 	 {
      for(int j2=1; j2<Math.min(n,d); ++j2 )
      if(n%2==0 && d%2==0)
      {
     	 n/=2;
     	 d/=2;	
      }
      
      for(int j3=1; j3<Math.min(n,d); ++j3 )
      if(n%3==0 && d%3==0)
      {
     	 n/=3;
     	 d/=3;
      }
      
      for(int j5=1; j5<Math.min(n,d); ++j5 )
      if(n%5==0 && d%5==0)
      {
     	 n/=5;
     	 d/=5;
      }
 	 }
 	 
 	 System.out.println(n+"\t/\t"+d);
	}

11_03_06_12_48_57_1142110137Image(_66).jpg

#9

ما شاء الله عليك يا اصبت في الفكره و في الكود بارك الله فيك

11_03_06_12_48_57_1142110137Image(_66).jpg

#10

شكرا لكم جميعا على تعاونكم. بجرب جميع مشاركاتكم و ساختار منها ما يناسبني

#11

السلام عليكم

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

لذلك هذا الكسر يجب ان يكون بالصيغة المختصرة أي يكون القاسم المشترك بين البسط والمقام هو 1، لذلك اقترح انشاء طريقة تحول كسر الى الصيغة المختصرة ويمكن استعمالها في أي مكان نريد الحصول على الصيغة المختصرة لكسر مثلا تستعمل من داخل المشيد . وداخل هذه الطريقة نستعمل خوارزمية eucledian algorithm المقترحة من الاخ hasan_aljudy لأنها اسرع حسابيا. وافضل صيغة غير recursion لأنها اسرع واوفر بالذاكرة

تم تعديل هذه المشاركة بواسطة kkhalil2005 في 16 مايو 2005 في 02:36

#12

السلام عليكم

سأقترح حل وسط بين الطريقتين السابقتين

وهو

{
 int n=20 , d=48;
 System.out.println(n+"\t/\t"+d);
 int i;
 for (i = Math.min(n,d); i >= 1; --i )
  if (n%i==0 && d%i==0) break;
System.out.println("gcd(" + n + " , " + d + ") is " +i);
System.out.println(n + " / " + d + " equivalents to "+ n/i + " / " + d/i);
}

الطريقة التي ذكرتها يمكن ان تأخذ التعريف التالي

public static void reduce(Fraction f) // operates on f

public void reduce() // operates on this , current object

public static Fraction getReducedFraction(Fraction f) // return new reduced fraction created from f 

public Fraction getReducedFraction() // return new reduced fraction created from this

public static Fraction getReducedFraction(int num, int denom) // return new reduced fraction created from num&denom

public Fraction getReducedFraction(int num, int denom) // return new reduced fraction created from num&denom

يمكن اختيار صيغتين من الصيغ السابقة للعمل مباشرة على كسر أو للعمل على بسط ومقام

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

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…