Witam ! Mam takie zadanie:
Posługując się klasą Rational napisz metody realizujące poniższe zadania.
Liczniki i mianowniki dla tworzonych liczb wymiernych można pobierać z konsoli lub w oknie dialogowym.
1. Dla dwóch liczb wymiernych policz i wypisz:
1. ich średnią arytmetyczną.
2. ich średnią harmoniczną
2. Dla liczb wymiernych a11, a12, a21, a22 policz i wypisz wyznacznik macierzy, którą one tworzą oraz samą macierz.
3. Dla liczb wymiernych a11, a12, a21, a22, b11, b12, b21, b22 policz i wypisz iloczyn macierzy, które one tworzą oraz same macierze.
4. Dla macierzy A o elementach a11, a12, a21, a22 policz i wypisz macierz do niej odwrotną.
klasa wygląda tak:
Dana jest klasa Rational reprezentująca liczby wymierne i udostępniająca następujące metody:
1. dodawanie: Rational add(Rational arg);
2. mnożenie: Rational mul(Rational arg);
3. odejmowanie: Rational sub(Rational arg);
4. dzielenie: Rational div(Rational arg);
5. równość: boolean equals(Rational arg);
6. tekstowa reprezentacja liczby: String toString();
Obiekty tej klasy tworzy się tak: new Rational(licznik, mianownik) gdzie licznik i mianownik są liczbami całkowitymi, przy czym mianownik musi być różny od 0.
Wszystkie metody zwracają nowe obiekty, nie modyfikując argumentów.
Sposób użycia:
Rational r1 = new Rational(1, 2); // 1/2
Rational r2 = new Rational(1, 3); // 1/3
Rational r3 = r1.add(r2); // r3 = r1 + r2;
Rational r4 = r1.mul(r2.add(r3)); // r4 = r1 * (r2 + r3)
System.out.println(r3); // niejawne wywołanie metody toString()
System.out.println(r4.sub(new Rational(1, 1)));
Za jakąkolwiek pomoc będę bardzo wdzięczny.. niestety w programowaniu jestem zielony, stawiam pierwsze kroki ale na tym etapie ten program mnie przewyższa... Dzięki
[Java] Klasa Rational - kilka obliczeń...
-
- Użytkownik
- Posty: 374
- Rejestracja: 21 cze 2007, o 11:28
- Płeć: Mężczyzna
- Lokalizacja: Łostowice
- Pomógł: 146 razy
[Java] Klasa Rational - kilka obliczeń...
Kod: Zaznacz cały
package rational;
public class Rational {
int licznik = 0;
int mianownik = 1;
/** Creates a new instance of Rational */
public Rational(int licznik, int mianownik) {
this.licznik = licznik;
if (mianownik == 0) {
mianownik = 1;
System.err.println("Błąd klasy Rational.
Mianownik nie może być równy 0.");
}
this.mianownik = mianownik;
}
private Rational add(Rational argument) {
return new Rational((this.licznik * argument.mianownik) + (argument.licznik * this.mianownik),
this.mianownik * argument.mianownik);
}
private Rational mul(Rational argument) {
return new Rational(this.licznik * argument.licznik, this.mianownik * argument.mianownik);
}
private Rational sub(Rational argument) {
return new Rational((this.licznik * argument.mianownik) - (argument.licznik * this.mianownik),
this.mianownik * argument.mianownik);
}
private Rational div(Rational argument) {
return new Rational(this.licznik * argument.mianownik, this.mianownik * argument.licznik);
}
public String toString() {
return "(" + this.licznik + "/" + this.mianownik + ")";
}
// ułamek odwrotny
private Rational reverse() {
return new Rational(this.mianownik , this.licznik);
}
// ułamek o przeciwnym zanku
private Rational inverse() {
return new Rational( - this.licznik, this.mianownik);
}
public boolean equals(Rational argument) {
if ((this.licznik == argument.licznik) && (this.mianownik == argument.mianownik))
return true;
if ((this.mianownik != 0) && (argument.mianownik != 0)
&& ((this.licznik / this.mianownik) == (argument.licznik / argument.mianownik)))
return true;
return false;
}
private float tofloat() {
return ((float) this.licznik / (float) this.mianownik);
}
public static void main(String[] args) {
Rational r1 = new Rational(1, 2);
Rational r2 = new Rational(1, 4);
Rational r3 = r1.add(r2).mul(new Rational(1, 2));
System.out.println("Średnia arytmetyczna liczb " + r1 + " i " + r2 + " = " + r3);
r3 = new Rational(2, 1).div( r1.reverse().add(r2.reverse()) );
System.out.println("Średnia harmonmiczna liczb " + r1 + " i " + r2 + " = " + r3);
Rational a11 = new Rational(1, 1);
Rational a12 = new Rational(2, 1);
Rational a21 = new Rational(2, 1);
Rational a22 = new Rational(3, 1);
r3 = a11.mul(a22).sub( a12.mul(a21) ); // det(A)
System.out.println("Macierz A");
System.out.println(a11 + " " + a12);
System.out.println(a21 + " " + a22);
System.out.println("Wyznacznik macierzy " + r3);
Rational b11 = a22.div(r3);
Rational b12 = a12.div(r3).inverse();
Rational b21 = a21.div(r3).inverse();
Rational b22 = a11.div(r3);
System.out.println("Macierz B odwrotna do A");
System.out.println(b11 + " " + b12);
System.out.println(b12 + " " + b22);
System.out.println("Iloczyn macierzy A * B");
System.out.print(a11.mul(b11).add(a12.mul(b21)));
System.out.println(a11.mul(b21).add(a12.mul(b22)));
System.out.print(a21.mul(b11).add(a22.mul(b21)));
System.out.println(a12.mul(b21).add(a22.mul(b22)));
}
}
Ostatnio zmieniony 16 lis 2008, o 09:31 przez smiechowiec, łącznie zmieniany 1 raz.
-
- Użytkownik
- Posty: 735
- Rejestracja: 7 lis 2005, o 23:56
- Płeć: Mężczyzna
- Lokalizacja: Łódź
- Podziękował: 2 razy
- Pomógł: 133 razy
[Java] Klasa Rational - kilka obliczeń...
uważaj na takie rzeczy, tj. na konwersję. Np. metoda toFloat działać nie będzie, bo najpierw oblicza wynik z dzielenia dwóch liczb całkowitych a potem konwertuje do float. Czy np. \(\displaystyle{ \frac{1}{3}}\) zamieni na \(\displaystyle{ $0$}\)
Ostatnio zmieniony 16 lis 2008, o 07:02 przez spajder, łącznie zmieniany 1 raz.
-
- Użytkownik
- Posty: 374
- Rejestracja: 21 cze 2007, o 11:28
- Płeć: Mężczyzna
- Lokalizacja: Łostowice
- Pomógł: 146 razy
[Java] Klasa Rational - kilka obliczeń...
Prawda.
Kod: Zaznacz cały
package rational;
public class Rational {
int licznik = 0;
int mianownik = 1;
/** Creates a new instance of Rational */
public Rational(int licznik, int mianownik) {
this.licznik = licznik;
if (mianownik == 0) {
mianownik = 1;
System.err.println("Błąd klasy Rational.
Mianownik nie może być równy 0.");
}
this.mianownik = mianownik;
shortr();
}
private Rational add(Rational argument) {
return new Rational((this.licznik * argument.mianownik) + (argument.licznik * this.mianownik),
this.mianownik * argument.mianownik);
}
private Rational mul(Rational argument) {
return new Rational(this.licznik * argument.licznik, this.mianownik * argument.mianownik);
}
private Rational sub(Rational argument) {
return new Rational((this.licznik * argument.mianownik) - (argument.licznik * this.mianownik),
this.mianownik * argument.mianownik);
}
private Rational div(Rational argument) {
return new Rational(this.licznik * argument.mianownik, this.mianownik * argument.licznik);
}
public String toString() {
shortr();
if ((licznik == 0) || (mianownik == 1))
return "( " + licznik + " )";
return "(" + this.licznik + "/" + this.mianownik + ")";
}
// ułamek odwrotny
private Rational reverse() {
return new Rational(this.mianownik , this.licznik);
}
// ułamek o przeciwnym zanku
private Rational inverse() {
return new Rational( - this.licznik, this.mianownik);
}
// po skróceniu
private Rational shortr() {
if ((licznik % mianownik) == 0) {
licznik = licznik / mianownik;
mianownik = 1;
}
int ipom = licznik;
if (licznik > mianownik)
ipom = mianownik;
for(int i = 2; i <= ipom; i++)
if (((licznik % i) == 0) && ((mianownik % i) == 0)) {
licznik = licznik / i;
mianownik = mianownik / i;
}
return this;
}
public boolean equals(Rational argument) {
if ((this.licznik == argument.licznik) && (this.mianownik == argument.mianownik))
return true;
if ((this.mianownik != 0) && (argument.mianownik != 0)
&& ((this.licznik / this.mianownik) == (argument.licznik / argument.mianownik)))
return true;
return false;
}
private float tofloat() {
return ((float) this.licznik / (float) this.mianownik);
}
public static void main(String[] args) {
Rational r1 = new Rational(1, 2);
Rational r2 = new Rational(1, 4);
Rational r3 = r1.add(r2).mul(new Rational(1, 2));
System.out.println("Średnia arytmetyczna liczb " + r1 + " i " + r2 + " = " + r3);
r3 = new Rational(2, 1).div( r1.reverse().add(r2.reverse()) );
System.out.println("Średnia harmonmiczna liczb " + r1 + " i " + r2 + " = " + r3);
Rational a11 = new Rational(1, 1);
Rational a12 = new Rational(2, 1);
Rational a21 = new Rational(2, 1);
Rational a22 = new Rational(3, 1);
r3 = a11.mul(a22).sub( a12.mul(a21) ); // det(A)
System.out.println("Macierz A");
System.out.println(a11 + " " + a12);
System.out.println(a21 + " " + a22);
System.out.println("Wyznacznik macierzy " + r3);
Rational b11 = a22.div(r3);
Rational b12 = a12.div(r3).inverse();
Rational b21 = a21.div(r3).inverse();
Rational b22 = a11.div(r3);
System.out.println("Macierz B odwrotna do A");
System.out.println(b11 + " " + b12);
System.out.println(b12 + " " + b22);
System.out.println("Iloczyn macierzy A * B");
System.out.print(a11.mul(b11).add(a12.mul(b21)));
System.out.println(a11.mul(b21).add(a12.mul(b22)));
System.out.print(a21.mul(b11).add(a22.mul(b21)));
System.out.println(a12.mul(b21).add(a22.mul(b22)));
}
}
-
- Użytkownik
- Posty: 232
- Rejestracja: 8 paź 2006, o 16:21
- Płeć: Mężczyzna
- Lokalizacja: Wawa
- Podziękował: 121 razy
- Pomógł: 1 raz
[Java] Klasa Rational - kilka obliczeń...
Bardzo dziękuje za pomoc, program się odpala bez żadnych problemów.. Mam pytanie czy da się jakoś łatwo zmodyfikować kod, żeby program wczytywał liczby z konsoli ??
I jeszcze jedno pytanie, co możecie doradzić dla osoby chcącej nauczyć się programować w Javie , jakieś konkretne publikacje, sposoby na poznanie języka ?? Obecnie programowanie sprawia mi wiele problemów, najgorsze jest dla mnie to że przy jakiś zadaniach poprostu nie wiem "od czego zacząć" , jakim "sposobem" rozwiązać jakieś zadanie...
Dzięki wielkie
I jeszcze jedno pytanie, co możecie doradzić dla osoby chcącej nauczyć się programować w Javie , jakieś konkretne publikacje, sposoby na poznanie języka ?? Obecnie programowanie sprawia mi wiele problemów, najgorsze jest dla mnie to że przy jakiś zadaniach poprostu nie wiem "od czego zacząć" , jakim "sposobem" rozwiązać jakieś zadanie...
Dzięki wielkie
-
- Użytkownik
- Posty: 374
- Rejestracja: 21 cze 2007, o 11:28
- Płeć: Mężczyzna
- Lokalizacja: Łostowice
- Pomógł: 146 razy
[Java] Klasa Rational - kilka obliczeń...
Trochę poprawiłem powinno być mniej więcej dobrze,ŚwIeRsZcZ pisze:Mam pytanie czy da się jakoś łatwo zmodyfikować kod, żeby program wczytywał liczby z konsoli ??
Uruchamiasz w konsoli
java -jar "Rational.jar"
Kod: Zaznacz cały
package rational;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Rational {
int licznik = 0;
int mianownik = 1;
/** Creates a new instance of Rational */
public Rational(int licznik, int mianownik) {
this.licznik = licznik;
if (mianownik == 0) {
mianownik = 1;
System.err.println("Błąd klasy Rational.
Mianownik nie może być równy 0.");
}
this.mianownik = mianownik;
if (this.mianownik < 0) {
this.mianownik = - this.mianownik;
this.licznik = - this.licznik;
}
shortr();
}
private Rational add(Rational argument) {
return new Rational((this.licznik * argument.mianownik) + (argument.licznik * this.mianownik),
this.mianownik * argument.mianownik);
}
private Rational mul(Rational argument) {
return new Rational(this.licznik * argument.licznik, this.mianownik * argument.mianownik);
}
private Rational sub(Rational argument) {
return new Rational((this.licznik * argument.mianownik) - (argument.licznik * this.mianownik),
this.mianownik * argument.mianownik);
}
private Rational div(Rational argument) {
return new Rational(this.licznik * argument.mianownik, this.mianownik * argument.licznik);
}
public String toString() {
shortr();
if ((licznik == 0) || (mianownik == 1))
return "( " + licznik + " )";
return "(" + this.licznik + "/" + this.mianownik + ")";
}
// ułamek odwrotny
private Rational reverse() {
return new Rational(this.mianownik , this.licznik);
}
// ułamek o przeciwnym zanku
private Rational inverse() {
return new Rational( - this.licznik, this.mianownik);
}
// po skróceniu
private Rational shortr() {
if ((licznik % mianownik) == 0) {
licznik = licznik / mianownik;
mianownik = 1;
}
int ipom = licznik;
if (licznik > mianownik)
ipom = mianownik;
if (ipom < 0)
ipom = -ipom;
for(int i = 2; i < ipom; i++)
if (((licznik % i) == 0) && ((mianownik % i) == 0)) {
licznik = licznik / i;
mianownik = mianownik / i;
}
return this;
}
public boolean equals(Rational argument) {
if ((this.licznik == argument.licznik) && (this.mianownik == argument.mianownik))
return true;
if ((this.mianownik != 0) && (argument.mianownik != 0)
&& (((float) this.licznik / (float) this.mianownik) == ((float) argument.licznik / (float) argument.mianownik)))
return true;
return false;
}
private float tofloat() {
return ((float) this.licznik / (float) this.mianownik);
}
public static Rational strtoRat(String s) {
int i = 1, j = 1;
String ts[] = s.trim().split("/");
i = new Integer(ts[0]);
if (ts.length > 1) // jeżeli jest znak ułamka
j = new Integer(ts[1]);
return new Rational(i, j);
}
public static void main(String[] args) {
BufferedReader we = new BufferedReader(new InputStreamReader(System.in)); // Bufor odczytu
String s = "";
String ts[];
System.out.print("Podaj dwa ułamki zwykłe przedzielone znakiem spacji np. 1/2 1/3 : ");
Rational r1 = null;
Rational r2 = null;
try {
s = we.readLine();
if ((s != null) && (!s.equals(""))) {
ts = s.trim().split(" "); // zapisujemy ułamki w tablicy ts[0] i ts[1]
r1 = strtoRat(ts[0]);
r2 = strtoRat(ts[1]);
}
} catch (IOException ex) {
ex.printStackTrace();
}
Rational r3 = r1.add(r2).mul(new Rational(1, 2));
System.out.println("
Średnia arytmetyczna liczb " + r1 + " i " + r2 + " = " + r3);
r3 = new Rational(2, 1).div( r1.reverse().add(r2.reverse()) );
System.out.println("Średnia harmonmiczna liczb " + r1 + " i " + r2 + " = " + r3);
Rational a11 = null;
Rational a12 = null;
Rational a21 = null;
Rational a22 = null;
System.out.println("Podaj 4 wspólczynniki macierzy A a11 a12 a21 a22 (ułamki zwykłe) przedzielone znakiem spacji");
System.out.println("np. 1/2 1/3 5/5 7/2 ");
try {
s = we.readLine();
if ((s != null) && (!s.equals(""))) {
ts = s.trim().split(" "); // zapisujemy ułamki w tablicy ts[0] i ts[1] ts[2] i ts[3]
a11 = strtoRat(ts[0]);
a12 = strtoRat(ts[1]);
a21 = strtoRat(ts[2]);
a22 = strtoRat(ts[3]);
}
} catch (IOException ex) {
ex.printStackTrace();
}
r3 = a11.mul(a22).sub( a12.mul(a21) ); // det(A)
System.out.println("Macierz A");
System.out.println(a11 + " " + a12);
System.out.println(a21 + " " + a22);
System.out.println("Wyznacznik macierzy " + r3);
Rational b11 = a22.div(r3);
Rational b12 = a12.div(r3).inverse();
Rational b21 = a21.div(r3).inverse();
Rational b22 = a11.div(r3);
System.out.println("Macierz odwrotna do A");
System.out.println(b11 + " " + b12);
System.out.println(b21 + " " + b22);
System.out.println("Podaj 4 wspólczynniki macierzy B a11 a12 a21 a22 (ułamki zwykłe) przedzielone znakiem spacji");
System.out.println("np. 1/2 1/3 5/5 7/2");
try {
s = we.readLine();
if ((s != null) && (!s.equals(""))) {
ts = s.trim().split(" "); // zapisujemy ułamki w tablicy ts[0] i ts[1] ts[2] i ts[3]
b11 = strtoRat(ts[0]);
b12 = strtoRat(ts[1]);
b21 = strtoRat(ts[2]);
b22 = strtoRat(ts[3]);
}
} catch (IOException ex) {
ex.printStackTrace();
}
System.out.println("Macierz A");
System.out.println(a11 + " " + a12);
System.out.println(a21 + " " + a22);
System.out.println("Macierz B");
System.out.println(b11 + " " + b12);
System.out.println(b12 + " " + b22);
System.out.println("Iloczyn macierzy A * B");
System.out.print(a11.mul(b11).add(a12.mul(b21)) );
System.out.println(a11.mul(b12).add(a12.mul(b22)) );
System.out.print(a21.mul(b11).add(a22.mul(b21)) );
System.out.println(a21.mul(b12).add(a22.mul(b22)) );
}
}
np książekę "Java 2" wydawnictwa Helion (pozycja polska)co możecie doradzić dla osoby chcącej nauczyć się programować w Javie
Widziałem jej skany w skany w internecie.