私はまだC#
プログラミングに不慣れで、次のプロジェクトで立ち往生しています。私はそれが簡単でなければならないことを知っていますが、メソッドを配置する場所Reduce()
と、整数を削除してこれをReduce()
メソッドに呼び出すことによって分数を変換する方法について頭がロックされています。プロジェクトは次のとおりです。
+()
2 つの分数を加算する演算子メソッドを追加します。2 つの分数を足すには、まず値の整数部分をすべて削除します。たとえば、2 1/4 は 9/4 になり、1 3/5 は 8/5 になります。共通の分母を見つけて、分数をそれに変換します。たとえば、9/4 と 8/5 を足すと、45/20 と 32/20 に変換できます。次に、77/20 を与える分子を追加できます。最後に、Reduce()
メソッドを呼び出して結果を減らし、数値の小数部分が 1 未満になるように整数値を復元します。たとえば、77/20 は 3 17/20 になります。
ここに私がこれまでに持っているコードがあります。また、これらの分数を乗算して後で配列を作成する際にも問題が発生しますが、今のところ、一度に 1 つのステップを実行しようとしています。ありとあらゆる回答をいただければ幸いです。
public class Fraction
{
public int WholeNumber { get; private set; }
public int Numerator { get; private set; }
public int Denominator { get; private set; }
private void Reduce()
{
if (Numerator < Denominator)
{
WholeNumber = 0;
return;
}
if (Numerator == Denominator)
{
WholeNumber = 1;
Numerator = 0;
return;
}
if (Numerator > Denominator)
{
WholeNumber = (int)Math.Floor((decimal)Numerator / Denominator);
Numerator = Numerator - WholeNumber * Denominator;
}
}
//constructor with three parameters
public Fraction(int wholenumber, int numerator, int denominator)
{
WholeNumber = wholenumber;
Numerator = WholeNumber * Denominator + Numerator;
Reduce();
}
//constructor with two parameters
public Fraction(int numerator, int denominator)
{
WholeNumber = 0;
Numerator = numerator;
Denominator = denominator;
Reduce();
}
//parameter less with set values
public Fraction()
{
WholeNumber = 0;
Numerator = 0;
Denominator = 1;
}
public static Fraction operator +(Fraction firstfraction, Fraction secondfraction)
{
if (firstfraction.Denominator == secondfraction.Denominator)
{
int firstProduct = (firstfraction.WholeNumber * firstfraction.Denominator) + firstfraction.Numerator;
int secondProduct = (secondfraction.WholeNumber * secondfraction.Denominator) + secondfraction.Numerator;
return (new Fraction(firstProduct + secondProduct, firstfraction.Denominator));
}
else
{
int commondenominator = firstfraction.Denominator * secondfraction.Denominator;
int firstProduct = ((firstfraction.WholeNumber * firstfraction.Denominator) + firstfraction.Numerator) * secondfraction.Denominator;
int secondProduct = ((secondfraction.WholeNumber * secondfraction.Denominator) + secondfraction.Numerator) * firstfraction.Denominator;
return (new Fraction(firstProduct + secondProduct, commondenominator));
}
}
public Fraction Reduce(int WholeNumber, int Numerator, int Denominator)
{
int reduceWhole = (int)WholeNumber;
while (Numerator > Denominator)
{
Numerator -= Denominator;
reduceWhole += 1;
}
while (Denominator % Numerator == 0)
{
int factor = (int)Denominator / Numerator;
Numerator = 1;
Denominator = factor;
}
return new Fraction(reduceWhole, Numerator, Denominator);
}
}//end class
class Program
{
static void Main(string[] args)
{
Fraction firstfraction = new Fraction();
Fraction secondfraction = new Fraction();
Fraction total = firstfraction + secondfraction;
Console.WriteLine(total);
Console.Write("Enter whole number portion of fraction: ");
firstfraction.WholeNumber = Convert.ToInt32(Console.ReadLine());
Console.Write("Enter numerator: ");
firstfraction.Numerator = Convert.ToInt32(Console.ReadLine());
Console.Write("Enter denominator: ");
firstfraction.Denominator = Convert.ToInt32(Console.ReadLine());
Console.Write("Enter whole number portion of fraction: ");
secondfraction.WholeNumber = Convert.ToInt32(Console.ReadLine());
Console.Write("Enter numerator: ");
secondfraction.Numerator = Convert.ToInt32(Console.ReadLine());
Console.Write("Enter denominator: ");
secondfraction.Denominator = Convert.ToInt32(Console.ReadLine());
Console.Write("{0} {1}/{2}", firstfraction.WholeNumber, firstfraction.Numerator,
firstfraction.Denominator);
Console.WriteLine(" + {0} {1}/{2}", secondfraction.WholeNumber,
secondfraction.Numerator, secondfraction.Denominator);
Fraction add = new Fraction();
add = firstfraction + secondfraction;
Console.Write("Result of adding two fractions is:{0} {1}/{2}", add.WholeNumber,
add.Numerator, add.Denominator);
Console.ReadLine();
}//end main
}//end class
現在、プロパティまたはインデクサーを示す 3 つのエラー メッセージが表示されます。
'FractionProgram.Fraction.Denominator'
set アクセサーにアクセスできないため、このコンテキストでは使用できません。
さらに、firstProduct と secondProduct の正しい計算はありますか?