OOP1: Rationella tal

Denna klass hanterar rationella tal. Den kan addera, subtrahera, multiplicera, dividera och förenkla rationella tal.
De rationella talen skapas med hjälp av en konstruktor, som tar två heltal som argument. Förenkling sker genom att hitta den största gemensamma delaren med hjälp av Euklides algoritm, och sedan dividera täljare och nämnare med detta tal.
Euklides algoritm kan förklaras så här:
Så länge de två talen inte är lika, ersätt den större med deras skillnad. När de två talen blir lika, är detta gemensamma värde den största gemensamma delaren.
Även en funktion print() för utskrift finns. Funktionen checkZero() ser om nämnaren är noll, vilket ej är tillåtet.
public class Rational{
private int t;
private int n;
public void print(){ //Skriver ut talet
System.out.println(t+ "/"+n);
}
public Rational add(Rational x){ //adderar talen
if (x.checkZero()==true){return null;}
Rational temp=new Rational(0,0);
temp.t= t*x.n + x.t*n;
temp.n=n*x.n;
return temp.forenkl();
}
public Rational sub(Rational x){ //subtraherar talen
if (x.checkZero()==true){return null;}
Rational temp=new Rational(0,0);
temp.t= t*x.n - x.t*n;
temp.n=n*x.n;
return temp.forenkl();
}
public Rational mul(Rational x){ //multiplicerar talen
if (x.checkZero()==true){return null;}
Rational temp=new Rational(0,0);
temp.t= t*x.t;
temp.n=n*x.n;
return temp.forenkl();
}
public Rational div(Rational x){ //dividerar talen
if (x.checkZero()==true){return null ;}
Rational temp=new Rational(0,0);
temp.t= t*x.n;
temp.n=n*x.t;
return temp.forenkl();
}
public Rational (int talj, int namn){ //konstuktor
t=talj;
n=namn;
}
public Rational gcd(Rational x){ //räknar ut största gemensamma delare
Rational temp=new Rational(0,0);
if (x.t!=x.n)
{
if (x.t>x.n) //Euklides algoritm
{
temp.t=x.t-x.n;
temp.n=x.n;
return gcd(temp);
}
else
{
temp.t=(x.n-x.t);
temp.n=x.t;
return gcd(temp);
}
}
else
{
temp.t=x.t;
temp.n=x.n;
return temp;
}
}
public boolean checkZero(){ //ser om nämnaren är noll, nolldivision ej tillåten
if (n==0){
System.out.println("Noll i nämnaren!");
return true;
}
return false;
}
public Rational forenkl(){ //förenklar talet
Rational in=new Rational(0,0);
Rational ut=new Rational(0,0);
Rational temp=new Rational(t,n);
if (temp.checkZero()==false){
if (t==0){ // minsta gemensamma nämnare 1 om täljaren är noll
in.t=1;
in.n=1;
}
else{
in=gcd(temp); //hitta största gemensamma delare
}
ut.t=t/in.t;
ut.n=n/in.t;
return ut;
}
return null;
}
public static void main(String[] args){
Rational r=new Rational(12,18); //skapa rationella talet r
r.print(); //skriv ut r
Rational r1=new Rational(1,4); //skapa r1
Rational r2;
r2=r.forenkl(); //föenkla r och sätt in i r2
r2.print();
r2=r.add(r1); //addera r1 till r och sätt in i r2
r2.print();
r2=r.sub(r1);
r2.print();
r2=r.mul(r1);
r2.print();
r2=r.div(r1);
r2.print();
}
}

Tillbaks till huvudsidan

email: Alireza.Niai_nouri.2077@student.uu.se