Kvadrat

Kvadrat

Avtor: Deni Srebrnič

Opis problema

Napišite razred Kvadrat, s katerim predstavite kvadrat v ravnini, katerega stranice so vzporedne koordinatnim osem. Kvadrat je predstavljen s koordinatama stredišča in dolžino stranice.

  • Sestavite metodi za izračun ploščine in obsega kvadrata.
  • Izračunajte, kakšno površino prekrijejo kvadrati v dani tabeli. Upoštevajte, da se lahko kvadrata tudi prekrivata.
  • Iz dane datoteke kvadratov izbrišite tiste, ki v svoji notranjosti vsebujejo koordinatno izhodišče.
  • Vsem tistim kvadratom v tabeli, katerih obseg je več kot 10% manjši od povprečnega obsega vseh kvadratov, spremenite stranico tako, da bodo imeli obseg (do zaokrožitvene napake) enak povprečnemu.
  • Vsaj en (zaželjeno pa več) problem po vaši izbiri ... (opišite jih!)

Razlaga rešitve

Program sestavljata:

  • razred RazredKvadrat
  • razred, kjer ta razred testiramo z raznimi metodami

RazredKvadrat ima tri lastnosti:

  • koordinate x, y, ki povejo kje se nahaja središče kvadrata
  • dolžino stranice kvadrata

Razred lahko definiramo na tri različne načine:

  • če ustvarimo razred brez parametrov, se ustavri kvadrat z dolžino stranice 100 in s koordinatama središča (50, 50)
  • razred lahko ustavrimo tako, da mu podamo koordinate in stranico s številskim tipom
  • lahko pa tudi podamo zapis lastnosti podatkov kot en niz v obliki: »koordinata x; koordinata y; dolžina stranice«

Za izračun ploščine in obsega imamo določeni metodi. Ploščino dobimo tako da stranico kvadriramo, obseg pa tako da stranico pomnožimo s 4.

Razred vsebuje še metode kot so vsebujeTocko(), seSekata(), ploscinaPreseka(), sePrekrivata(), vrniPloscinoManjsega(), ki so nam v pomoč pri računanju ploščine večih kvadratov. V teh metodah sem uporabil že vgrajeni razred Rectangle, ki ga dobimo v knjižnici System.Drawing. S tem razredom sem opisal naš kvadrat, in nad njem uporabil metode za preverit, če se 2 kvadrata sekata (intersectWith()), metodo contains(), ki preveri ali vsebuje točko ali cel kvadrat in metodo intersect(), ki vrne območje kjer se kvadrata sekata.

RazredKvadrat ima še svojo metodo ToString(), ki kvadrat pretvori v tak niz, kot ga prebere konstruktor pri klicu s parametrom tipa string. Razred ima še metode za delo z datotekami.

Razlaga rešitve - 2

V razredu kjer program testiramo, imamo še nekaj statičnih metod. Imamo metodo, ki izračuna ploščino kvadratov iz tabele kvadratov. Metoda gre skozi vse kvadrate in z metodami, ki jih delamo nad kvadrati izračunamo celotno površino.

Imamo metodo ki izbriše kvadrat, ki vsebuje koordinatno središče. Ali kvadrat vsebuje koordinatno središče nam pove metoda vsebujeTocko().

Imamo še metodo ki izračuna povprečn obseg kvadratov ki so v tabeli in metoda ki spremeni stranico kvadrata, če se obseg razlikuje za 10% od povprečnega obsega. Prgledamo ali kvadrat se razlikuje za 10% in če se, mu nastavimo stranico na povprečenObseg/4.

Zadnja metoda pa pusti le kvadrate v prvem kvadrantu. Če kvadrati niso celi v prvem kvadrantu jih metoda obreže.

Testi metod

0%
0%