יש לי שאלה בקורס JAVA

יש לי שאלה בקורס JAVA

בשאלה זו אנו רוצים לעשות שימוש במחלקה קיימת. אנו נותנים לכם מחלקה בשם Rational ואתם צריכים להשתמש בה. בנוסף למחלקה עצמה (לא הקוד שלה) אנו מספקים לכם את הממשק שלה, כלומר את השיטות שניתן להפעיל על אובייקטים במחלקה. המחלקה Rational מייצגת מספר רציונלי . מספר רציונלי הוא ערך שאפשר לייצגו כיחס בין שני מספרים שלמים (שבר). לכן, המחלקה Rational מממשת מספר רציונלי בעזרת שתי תכונות: מונה (numerator) ומכנה (denominator). שניהם מספרים שלמים. public class Rational { private int numerator, denominator; . . . } כך, למשל השבר 2/3 ימומש על-ידי אובייקט שהערכים בשדותיו הם: numerator = 2 ו- denominator = 3. אתם יכולים להוריד את המחלקה מאתר הקורס, בספריה "קבצים להורדה" בתת-ספריה "מחלקות". את הממשק המדויק אתם יכולים להוריד מאתר הקורס, בספריה "קבצים להורדה" בתת-ספריה "קובצי API". אפשר לראות את הקוד שלה בספר Java Software Solutions בעמודים 332-335 (בקוד באתר הקורס הוספנו שיטות נוספות על כן כדאי להסתמך על ה-API ולא על הספר). שימו לב, במחלקה שכתובה בספר ישנו שימוש בלולאות כדי לחשב את המחלק המשותף המקסימלי, כדי לצמצם את השבר. אתם יכולים להתעלם מכך בשלב זה. מבחינתכם, המחלקה מייצגת שבר מצומצם בכל מצב. כתבו תכנית הקוראת מהקלט שלושה זוגות של מספרים שלמים. כל אחד מהם מייצג שבר a, b, c. שברים אלו מהווים את המקדמים של המשוואה הריבועית ax2 + bx + c = 0 התכנית צריכה לבדוק כמה שורשים יש למשוואה (פתרון יחיד, שני פתרונות או אין פתרון) לפי הדלתא. אם למשוואה שני פתרונות או אין פתרון יש להדפיס הודעה מתאימה. ואם למשוואה יש פתרון יחיד יש להדפיס אותו. זאת השאלה
 
וזה הפתרון שלי....אשמח לתגובות של מי שיודע...

public class Equation { public static void Roots(Rational a,Rational b,Rational c){ if((a!=null)&&(b!=null)&&(c!=null)){ Rational b2 = new Rational(b);//parameter for b^2 b2=b2.multiply(b); Rational ac = new Rational(-4,1);//parameter for -4*a*c ac=ac.multiply(a); ac=ac.multiply(c); b2=b2.add(ac);//the Delta if(b2.getNum()!=0){ if(b2.getNum()>0) System.out.println("The equation has 2 roots"); if(b2.getNum()<0) System.out.println("The equation has no roots"); } else{ Rational b3 = new Rational((-1*b.getNum()),b.getDen()); //calculate -b Rational a3 = new Rational((2*a.getNum()),a.getDen()); //calculate 2a b3=b3.divide(a3); //calculate -b/2a System.out.println("The equation has 1 root: "+b3.toString()); } } else System.out.println("One or more of the parameters is null"); } }
 

1ca1

New member
תיישר לשמאל, שיהיה אפשר לראות

בכל אופן, אני לא מכיר את האינטרפייס שניתן לך בRational, שכמובן לא כתבת אותו כאן... בגדול תחשב את הדלתא (אם קיימות לך פונקציות חיסור וכפל באינטרפייס סבבה, אחרת תבנה בעצמך), ותעשה if (או יותר נכון switch לגבי גדול,שווה או קטן מאפס, ד"א אני מקווה שהאופרטורים האלה מוגדרים לך באינטרפייס אחרת תכתוב פונקציות עבורם). אבל סה"כ מרפרוף, נראה תקין, אבל תריץ באקליפס על כמה קלטים ותבדוק את הפלטים.
 
משום מה יש לי בעיה

כשאני מגדיר את a בתור 0 ואת b and c בתור 1 הוא כותב לי שיש 2 פתרונות... איזה שורה אני צריך להוסיף כדי שזה יעבוד?????
 
שאלה נוספת

כתבו מחלקה בשם Mail. המחלקה תייצג הודעת דואר אלקטרוני. למחלקה יהיו ארבע תכונות, כולן מטיפוס String: • כתובת האי-מייל של השולח; • כתובת האי-מייל של הנמען; • נושא ההודעה; • תוכן ההודעה. למחלקה יהיו שני בנאים: • בנאי שחתימתו: public Mail(String from, String to, String subject, String content) שמאתחל את כל שדות ההודעה; • בנאי העתקה, שחתימתו: public Mail(Mail other) שמעתיק את תוכן האובייקט other לאובייקט שנוצר. כמו כן למחלקה יהיו שיטות get/set עבור כל אחת מהתכונות. הוסיפו למחלקה גם את השיטה toString שחתימתה: public String toString() השיטה מחזירה מחרוזת שמייצגת את ההודעה בפורמט הבא: To: [email protected] From: [email protected] Subject: Hello How are you? כלומר, תופיע כתובת הנמען (עם המילה "To:" לפניה), כתובת השולח (עם המילה "From:" לפניה), נושא ההודעה (עם המילה "Subject:") לפניה, ותוכן ההודעה. כל פריט יופיע בשורה חדשה. אשמח אם תוכלו לעזור לי....
 

h a j b i

New member
תראה, זה בסדר גמור לרשום

פה פיתרון או חלק מפיתרון שרשמת ולבקש חוות דעות או הצעות לשיפור אבל לא לרשום שאלה שלמה ולבקש פיתרון. השאלה איפה אתה נתקע. אני מניח שאת התכונות אתה מצליח להגדיר אז תכתוב איזה חלק מהמחלקה רשמת עד עכשיו ואיזה שיטות אתה לא מצליח לכתוב.
 

neogod

New member
אכן יש 2 פתרונות

הדלתא שווה 1!!! אבל תבדוק טוב אם מותר לך לחלק ב 0 (2a=0 ) ??
 

h a j b i

New member
אם a=0 זו כבר לא משוואה ריבועית

ודלתא אין משמעות. כידוע למשוואה ממעלה ראשונה יש רק פיתרון אחד אז אפשר להוסיף תנאי שבודק ש-a שונה מאפס ואם הוא שווה אז להדפיס הודעה מתאימה ואם צריך למצוא את הפיתרון היחיד של המשוואה.
 
למעלה