יצירת מחלקת שירות-c# - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

יצירת מחלקת שירות-c#


raiman1

Recommended Posts

זה תרגיל מספר אז אם מישהו רוצה לראות עמודים 71-73

בחלק הראשון של התרגיל (שהצלחתי לעשות) צריך להגדיר את המחלקה rational (מספר רציונאלי) ועוד כמה פעולות

בחלק השני צריך להוסיף שתי פעולות(חיבור וחיסור מספרים רציונאלים) אבל אסור לשנות את המחלקה rational.

זו המחלקה rational

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class Rational
{
private int mone;
private int mechane;
public Rational(int x, int y)
{
this.mone = x;
this.mechane = y;
}
public int GetMone()
{
return this.mone;
}
public int GetMechane()
{
return this.mechane;
}
public bool IsEquale(Rational num)
{
return this.mone * num.mechane == num.mone * this.mechane;
}
public Rational Multiply(Rational num)
{
Rational NEW = new Rational(0, 0);
NEW.mone = this.mone * num.mone;
NEW.mechane = this.mechane * num.mechane;
return NEW;
}
public override string ToString()
{
string str = this.mone + "," + this.mechane;
return str;
}





}
}

זו התוכנית שבודקת את הפעולות

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Rational a = new Rational(4, 6);
Rational b = new Rational(2, 3);
Console.WriteLine(a.add(b));

}
}
}

אחרי שעשיתי את שתי אלה עשיתי מחלקה נוספת שבה יש את הפעולות החדשות אבל זה מזהה הרבה מאוד טעויות. איך מתקנים אותם??

[attachment deleted by admin]

קישור לתוכן
שתף באתרים אחרים

בשום מקום לא הגדרת ל-class2 פונקציות בשם GetMone ו-GetMechane (וגם אתה לא אמור להגדיר). קרא שוב את הדרישה של התרגיל.

וכבר אמרתי לך קודם - לא נהוג להשתמש ב-this, אלא אם חייבים (על מנת למנוע כפילות).

ועוד הערה - תימנע מלהשתמש בשמות מבלבלים למשתנים. NEW זה לא שם טוב למשתנה, כי קל להתבלבל בינו לבין המילה השמורה new. בכלל, לא מומלץ לעשות משתנים עם שמות דומים מדי (במיוחד אם כל ההבדל הוא בין אותיות קטנות וגדולות, כמו x ו-X). חוץ מזה, יש קונבנציות בנוגע לאותיות קטנות וגדולות - שמות שמורכבים מאותיות גדולות בלבד בד"כ משמשים לקבועים (const או readonly).

קישור לתוכן
שתף באתרים אחרים

שיניתי את הפעולות (צריך להיות static נכון?) :

class class2
{

public static double add(Rational num1,Rational num2)
{
return num1.GetMone() / num1.GetMechane() + num2.GetMone() / num2.GetMechane();
}
public static double less(Rational num1,Rational num2)
{
return num1.GetMone() / num1.GetMechane() - num2.GetMone() / num2.GetMechane();
}
}

התוכנית:


Rational a = new Rational(100, 6);
Rational b = new Rational(2, 3);
Console.WriteLine(class2.add(a, b));

כשאני מפעיל אותה יוצאת לי תשובה שגויה במקום לכתוב ש 100/6 +2/3=17.333333 זה אומר לי שזה שווה 16.

קישור לתוכן
שתף באתרים אחרים

א. כשמחלקים int ב-int התוצאה יוצאת int. אתה צריך להמיר אחד מהם לפחות ל-double לפני החלוקה.

ב. אני די בטוח שהמטרה של התרגיל היא שהפונקציות add ו-less (שצריכה להיקרא subtract, אגב) אמורות להחזיר Rational, ולא double - כמו המתודה Multiply.

קישור לתוכן
שתף באתרים אחרים

ב. אני די בטוח שהמטרה של התרגיל היא שהפונקציות add ו-less (שצריכה להיקרא subtract, אגב) אמורות להחזיר Rational, ולא double - כמו המתודה Multiply.

אבל בשביל זה אני צריך גישה לתכונות mone ו mechane והם הוגדרו כפרטיות. או שאני טועה??

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...