Izpitno vprašanje RAČ2PRA 1800

Iz MaFiRaWiki

Vsebina

Vprašanje

|1800|Sestavi razred Tocka, kjer hrani podatke o točkah v ravnini. Razred naj pozna metodo razdalja, ki vrne razdaljo danega objekta od objekta, ki je parameter te metode. Uporabi ta razred za to, da napišeš program, ki izračuna največjo razdaljo med paroma 100 naključno generiranih točk. Spremeni razred Tocka tako, da podatke hrani v polarnih koordinatah. Kakšne spremembe so potrebne v programu za računanje največje razdalje?

Odgovor

Razred Tocka

V tem razredu hranimo podatke o točkah.

  1.  
  2. public class Tocka {
  3.  
  4. private double x;
  5. private double y;
  6.  
  7. //konstruktor
  8. public Tocka(double x, double y) {
  9. this.x = x;
  10. this.y = y;
  11. }
  12.  
  13. //metode
  14. public double vrniX() {
  15. return x;
  16. }
  17. public double vrniY() {
  18. return y;
  19. }
  20. public void nastaviX(double x) {
  21. this.x = x;
  22. }
  23. public void nastaviY(double y) {
  24. this.y = y;
  25. }
  26. public double razdalja(Tocka t) {
  27. double novix = x - t.vrniX();
  28. double noviy = y - t.vrniY();
  29. return Math.sqrt(novix * novix + noviy * noviy);
  30. }
  31. public String toString() {
  32. return "("+ x +", "+ y + ")";
  33. }
  34.  
  35. }

Razred Razdalja

Program, ki izračuna največjo razdaljo med paroma 100 naključno generiranih točk.

  1.  
  2. public class Razdalja {
  3. public static void main(String[] args) {
  4.  
  5. Tocka[] tocke = new Tocka[100];
  6.  
  7. //nakljucno generirane tocke
  8. for(int i = 0; i < tocke.length; i++) {
  9. double a = Math.random()*100;
  10. double b = Math.random()*50;
  11. tocke[i] = new Tocka(a, b);
  12. }
  13.  
  14. //poiscemo najvecjo razdaljo
  15. double najvecja = tocke[0].razdalja(tocke[1]);
  16. int kje1 = 0;
  17. int kje2 = 1;
  18. for(int i = 0; i < tocke.length; i++) {
  19. for(int j = 0; j < i; j++) {
  20. double srednja = tocke[i].razdalja(tocke[j]);
  21. if(srednja > najvecja) {
  22. najvecja = srednja;
  23. kje1 = i;
  24. kje2 = j;
  25. }
  26. }
  27. }
  28. System.out.println("Najvecja razdalja je med tockama "+ tocke[kje1] +" in "
  29. + tocke[kje2] +".");
  30. System.out.println("Razdalja je: "+ najvecja);
  31. }
  32. }

Razred PolarnaTocka

Razred hrani podatke tockah v polarnih koordinatah.

  1.  
  2. public class PolarnaTocka {
  3.  
  4. private double r;
  5. private double fi;
  6.  
  7. //konstruktor
  8. public PolarnaTocka(double x, double y) {
  9. r = Math.sqrt(x*x + y*y);
  10. fi = Math.atan2(y, x);
  11. }
  12.  
  13. // pomozni metodi
  14. private void izKarVPol(double[] podat) {
  15. // podatke spremeni iz kartezicnih v polarne - na mestu v tabeli
  16. double a = podat[0];
  17. double b = podat[1];
  18. podat[0] = Math.sqrt(a * a + b * b); // r
  19. podat[1] = Math.atan2(b, a); // fi
  20. }
  21.  
  22. // OBJEKTU nastavi podatke v polarni obliki
  23. private void izKarVPol(double a, double b) {
  24. double[] temp = new double[2];
  25. temp[0] = a;
  26. temp[1] = b;
  27. izKarVPol(temp);
  28. this.r = temp[0];
  29. this.fi = temp[1];
  30. }
  31.  
  32.  
  33. //metode
  34. public double vrniX() {
  35. double x = r*Math.cos(fi);
  36. return x;
  37. }
  38. public double vrniY() {
  39. double y = r*Math.sin(fi);
  40. return y;
  41. }
  42. public void nastaviX(double x) {
  43. izKarVPol(x, this.vrniY());
  44. }
  45. public void nastaviY(double y) {
  46. izKarVPol(this.vrniX(), y);
  47. }
  48. public double razdalja(PolarnaTocka t) {
  49. double novir = r - Math.sqrt(t.vrniX()*t.vrniX() + t.vrniY()*t.vrniY());
  50. double novifi = fi - Math.atan2(t.vrniY(), t.vrniX());
  51. return Math.sqrt(novir*Math.cos(novifi)*novir*Math.cos(novifi) +
  52. novir*Math.sin(novifi)*novir*Math.sin(novifi));
  53. }
  54. public String toString() {
  55. return "polarno: (" + r + ", " + Math.toDegrees(fi) + ")";
  56. }
  57. }

Razred RazdaljaVPolarnem

Program, ki izračuna razdaljo med paroma 100 naključno generiranih točk v polarnih koordinatah.

  1. public class RazdaljaVPolarnem {
  2. public static void main(String[] args) {
  3.  
  4. PolarnaTocka[] tocke = new PolarnaTocka[100];
  5.  
  6. //nakljucno generirane tocke
  7. for(int i = 0; i < tocke.length; i++) {
  8. double a = Math.random()*100;
  9. double b = Math.random()*50;
  10. tocke[i] = new PolarnaTocka(a, b);
  11. }
  12.  
  13. //poiscemo najvecjo razdaljo
  14. double najvecja = tocke[0].razdalja(tocke[1]);
  15. int kje1 = 0;
  16. int kje2 = 1;
  17. for(int i = 0; i < tocke.length; i++) {
  18. for(int j = 0; j < i; j++) {
  19. double srednja = tocke[i].razdalja(tocke[j]);
  20. if(srednja > najvecja) {
  21. najvecja = srednja;
  22. kje1 = i;
  23. kje2 = j;
  24. }
  25. }
  26. }
  27. System.out.println("Najvecja razdalja je med tockama "+ tocke[kje1] +" in "
  28. + tocke[kje2] +".");
  29. System.out.println("Razdalja je: "+ najvecja);
  30. }
  31. }

Glej tudi

Nekatere metode za računanje so v razredu Math

Osebna orodja