Zbirka nalog iz dedovanja

Zbirka nalog iz dedovanja

Avtor: Matija Lokar

Trikotnik

Sestavite razred Trikotnik . Vsebovati mora vsaj javne metode:

  • public double VrniStranicoA()
  • public double VrniStranicoB()
  • public double VrniStranicoC()
  • public void NastaviStranicoA(double a)
  • public void NastaviStranicoB(double b)
  • public void NastaviStranicoC(double c)
  • public string ToString()

in konstruktorja

  • public Trikotnik() - ustvari enakostranični trikotnik s stranico 1.
  • public Trikotnik(double a, double b, dobule c) - ustvari trikotnik s stranicama a, b in c.

Pri tem pazite na pravilnost podatkov - če pri spremembi stranice takšna stranica ne more obstajati, naj se dolžina stranice ne spremeni. Če pa napačne podatke dobimo pri klicu konstruktorja s parametri, naj se ustvari enakostranični trikotnik z dolžino stranice 1. Nato iz tega razreda izpeljite razred Piramida. Ta mora dodatno poznati še metode

  • public double VrniVisino()
  • public void NastaviVisino(double visina)
  • public double Volumen()

ter konstruktorja

  • public Piramida() - ustvari piramido, ki ima za osnovno ploskev enakostranični trikotnik s stranico 1 in višino 1.
  • public Piramida(double a, double b, dobule c, double visina) - ustvari piramido, ki ima za osnovno ploskev trikotnik s stranicama a, b in c in višino visina. Če takšna piramida ne obstaja, naj ustvari piramido, ki jo sicer ustvari konstruktor brez parametrov.

Sestavi tudi testna programa TestTrikotnik in TestPiramida , v katerih ustvariš 10000 objektov tipa Trikotnik oz. Piramida z naključnimi podatki (namig: uporabi Random() in Next() ) ter med njimi poišči trikotnik z največjo stranico b oz. piramido z najmanjšim volumnom.

Nepremičnina

Barbara se je odločila za nakup parcele, na kateri bi rada postavila svojo hiško. Zato iz razreda Nepremičnina izpeljemo nov razred MojaHisa , kjer hranimo možne parcele, kjer bi Barbara lahko postavila svojo hišo.
Razred MojaHisa , naj poleg dedovanih komponent vsebuje še:

  • Širino in dolžino hiše, ki bi jo Barbara postavila
  • Širino in dolžino garaže (ki jo nujno potrebuje :))

Seveda pa ima razred tudi pravilne konstruktorje:

  • Privzeti konstruktor, ki nastavi za hišo: dolžino 10m in širino 9m in za garažo: dolžino 4m in širina 3m.
  • Konstruktor, ki smiselno spremeni podatke.

Sedaj pa potrebujemo še metode:

  • Metoda, ki nam izračuna velikost hiše in garaže.
  • Metodo, ki nam pove ali lahko Barbara na določeni parceli gradi hišo (torej mora biti parcela zazidljiva in dovolj velika za njeno hiško).
  • Metoda, ki nam pove ali lahko poleg hiše na parceli zgradi tudi garažo.

Oblika

Podan imamo razred

 
class  Oblika { *
    private int xcenter, ycenter; // koordinati središča
    Shape(int x, int y); // konstruktor
    public int Xlevi(); // levi rob
    public int Xdesni(); // desni rob
    public int Yvrh(); // zgornji rob
    public int Ydno(); // spodnji rob
    public void Narisi(); // nariše lik
    public void Print(); // izpiše podatke o liku *
};

Sestavite podrazred Diamant, ki ima poleg središčne točke podano tudi dolžino stranice in nariše diamant.

(diamant.png)

Sedaj pa sestavite definicijo še enega lika, in sicer pravokotnika z besedilom na sredini. Lik določimo s središčem, višina in širina pravokotnika pa sta odvisni od števila vrstic besedila (niz lahko vsebuje znake za novo vrsto) in dolžine najdaljše vrstice. Nad in pod besedilom naj bo po ena prazna vrstica, na levi in desni strani pa po pet praznih stolpcev. Sestavite definicijo objekta, konstruktor in vse metode, ki jih pozna njegov predhodnik.

Primer takega pravokotnika bi lahko bil:
**************************************
*                                    *
*            Prva vrstica            *
*    Druga vrstica je malo daljsa    *
*     Tretja pa je hkrati zadnja     *
*                                    *
**************************************

Lik

Dan je abstraktni razred Lik:

 
public abstract class Lik {
     double x, y;

     public Lik(double x, double y) {
        this.x = x;
        this.y = y;
     }

     public void Transliraj(double dx, double dy) {
       this.x = this.x + dx;
       this.y = this.y + dy;
    }

    public abstract double Obseg();

    public abstract double Ploscina();
 }

Sestavi podrazred Sestkotnik , s katerim predstavimo pravilni šestkotnik, ki ima eno stranico vzporedno z abcisno osjo. Definiraj ustrezne komponente, konstruktorje in metode. Ne pozabi pojasniti, katero točko v šestkotniku predstavljata komponenti (x, y).

Dodatna naloga

Dodatna naloga

Sestavi še podrazred Veckotnik, s katerim predstavimo pravilni večkotnik

Oseba

 
public class Oseba
{
   private int davcnaStevilka;
   private int emso;
   private string ime;
   private string priimek;
   //konstruktor
   public Oseba(int davcna, int emso, string ime,
                                string priimek)
   {
   this.davcnaStevilka = davcna;
   this.emso = emso;
   this.ime = ime;
   this.priimek = priimek;
   }
}
  • Napiši javno objektno metodo ImeOsebe() , ki bo vrnila ime osebe, pri kateri je klicana.
  • Napiši javno objektno metodo SpremeniIme(string novoIme) , ki bo spremenila ime osebe, pri kateri je klicana, v NovoIme .
  • Sestavi javni podrazred Student , ki naj ima poleg vseh lastnosti Osebe še vpisno številko (int VpisnaStevilka ). Razred Student naj vsebuje en konstruktor, ki iz danih: ime, priimek, emšo, davčna številka in vpisna številka sestavi novega študenta.

Nasvet

Nasvet

Lastnosti, podedovane iz razreda Oseba, so privatne, zato si bo potrebno v konstruktorju pomagati s klicem konstruktorja iz razreda Oseba.

Zival

Dan je javni razred Zival :

 
public class Zival
   protected string ime;
{
   protected int masa;
   protected int velikost;
   protected int steviloNog;

   // konstruktor
   public Zival(string imeZivali, int masaZivali, int
                             velikostZivali, int noge)
   {
     ime = imeZivali;
     masa = masaZivali;
     velikost = velikostZivali;
     steviloNog = noge;
   }
}

Sestavi javni podrazred Macka , ki bo imel poleg vseh lastnosti živali še barvo (razred Color ) barvaKozuha in celo število dolzinaRepa . Obe lastnosti naj bosta privatni. Ustrezno napiši konstruktor za razred Macka , ki bo sestavil nov objekt iz vseh znanih podatkov o mački in ki si bo pomagal s konstruktorjem iz nadrazreda. Ne pozabi, da ima vsaka mačka 4 tace :).

Embi

Podjetje Embi d.o.o. izdeluje embalaže vseh vrst (kartonske, plastične, kovinske...) in oblik (kocka, piramida...). Sestavi jim osnovni razred za vse embalaže Embalaza, če veš, da vsaka embalaža vsebuje podatke o:

  • tipu embalaže: ker izdelujejo le končno mnogo tipov embalaže, se sme tip izbrati le izmed nekaj v naprej definiranih. V razredu Embalaza zato definirajte tabelo nizov, ki predstavljajo dovoljene tipe embalaže. Tip embalaže naj bo možno spremeniti tako, da direktno povemo tip embalaže kot niz ali pa tako, da podamo indeks tipa embalaže v tabeli tipov. Če tak tip embalaže ne obstaja, naj se vrže napaka. Poznamo vsaj plastično in kartonsko embalažo.
  • obliki embalaže: za obliko veljajo enaka pravila kot za tip, le da zaenkrat poznamo le oblike: kocka, tetraeder in valj.
  • barvo embalaže: barva je lahko poljuben neprazen niz.
  • maso embalaže: pozitivno število.
  • ceno izdelave: ker cene izdelave za splošno embalažo ne poznamo, naj bo nastavljena na 0. Seveda mora razred vsebovati metode za nastavljanje in branje teh lastnosti ter vsaj konstruktor brez parametrov, ki ustvari embalažo s smiselnimi lastnostmi. Poleg tega podjetje zanima tudi, koliko embalaže so izdelali. V ta namen bo potrebno v razred dodati razredno spremenljivko, ki se poveča vsakič ko se ustvari nov objekt tipa Embalaza in metodo, ki vrača njeno vrednost. Nikakor pa ne smete dodati metode za spreminjanje te vrednosti! Zakaj?
  • Seveda je takšna embalaža še povsem neuporabna (ne vemo npr. na kakšni temperaturi jo lahko skladiščimo...), dodatne lastnosti embalaže pa so močno odvisne od materiala, iz katerega je embalaža izdelana. Denimo, da nas trenutno najbolj zanima plastična embalaža. Zato iz razreda Embalaza izpelji razred PlasticnaEmbalaza, ki vsebuje lastnosti:

    • vrsta plastičnega materiala, iz katerega je narejena ta embalaža (izbira iz nekaj vnaprej definiranih možnosti)
    • temperaturno območje, v katerem je embalaža primerna za skladiščenje. To je lastnost razreda in ne posameznega objekta!
    • maksimalna nosilnost embalaže - odvisna od vrste plastičnega materiala in je enaka za vse embalaže, ki so narejene iz določene vrste plastike!
    • ali je primerna za skladiščenje hrane: nekatere vrste plastike niso primene za skladiščenje hrane. Ker pa je stvar odvisna tudi od načina izdelave, je potrebno to posebej povedati za vsak objekt posebej.
    • cena za kg embalaže: koliko stane 1kg plastične embalaže. Predpostavi, da vsaka plastična embalaža stane enako za kg. Razred naj vsebuje tudi nekaj smiselnih konstruktorjev.

Vsebuje naj metodo, ki pove koliko kilogramov tovora še lahko spravimo v embalažo. Je linearno odvisna od mase emblaže(v embalaži, ki tehta 1kg, lahko shranimo 5kg tovora), a ne večja od neke v naprej določene vrednosti, ki je shranjena v maksimalni nosilnosti embalaže, in jo dobimo na podlagi testiranja našega plastičnega materiala. Ker se metodologija testiranja lahko spremeni, se lahko tudi največja nosilnost velikokrat spremeni.

Vsebuje naj tudi metodo, ki pove, koliko stane določena plastična embalaža. Cena je odvisna od teže te embalaže, ter od oblike. Izdelava v obliki tetraedra podraži izdelavo za 20%, izdelava v obliki valja pa za 35%.

Razred tudi preizkusi: ustvari tabelo 100 plastičnih embalaž z naključnimi začetnimi podatki. Nato med njimi poišči tako, v kateri bi lahko prepeljali hrano težko 10kg, ki stane najmanj (oblika ni pomembna, pomembno pa je, da je material ustrezen - torej tak, da dovoljuje pakiranje hrane). Ali nas stane kaj manj, če namesto hrane želimo prepeljati računalniško opremo iste teže?

Kaj pa, če je pomembna tudi oblika embalaže? Denimo, da letalski prevoznik sprejme le embalažo v obliki kocke. Katera embalaža je najbolj ugodna v tem primeru (torej v prej ustvarjeni tabeli embalaž upoštevaj le tiste, ki so v obliki kocke)?

  • Ustvari tudi razred KartonEmbalaza, ki naj ima iste lastnosti kor razred PlasticnaEmbalaza. Vemo, da je ta embalaža vedno primerna za hrano, a ima nižjo nosilnost kot plastična embalaža (embalaža teže 1kg zdrži le okrog 2kg tovora) in nekoliko nižje stroške izdelave (izdelava embalaže težke 1kg nas stane 900 SIT).

Razred preveri na enak način kot razred PlasticnaEmbalaza.

  • Sestavi testni program, ki bo ustvaril naključno mnogo plastičnih in kartonastih embalaž (a vsaj 100 vsake vrste) in jih shrani v tabelo. Med njimi nato poišči takšno embalažo, ki bo:

    • najprimernejša za prevoz hrane teže 1 kg v obliki valja.
    • najprimernejša za prevoz hrane teže 100 kg v obliki kocke.
    • najprimernejša za prevoz strojenih kož mase 2 kg katerekoli oblike.
    • najprimernejša za prevoz strojenih kož mase 20 kg v obliki tetraedra.

Opomba: z "najprimernejša" seveda mislimo najcenejša.

Na koncu še izpiši, koliko embalaže si ustvaril tekom programa. Pri tem si lahko pomagaš le z lastnostmi razreda Embalaza.

Halo Kitajc

Po koncu prejšnje naloge morate imeti tri razrede: Embalaza , PlasticnaEmbalaza in KartonEmbalaza . Uporabite jih za rešitev sledečih problemov:

  • Podjetu "Halo, Kitajc!" se je nabralo kar nekaj kosov plastične in kartonske embalaže (1000 kosov vsake). Upoštevajte, da so embalaže različnih tež, oblik, varv, tipov plastike... zato jih naključno generirajte. Ker so se sklenili porabiti zalogo, za vsako naročilo posebej vzamejo najprimernejšo (beri najcenejšo) embalažo, ki je ustrezna. Pomagaj jim izbati najprimernejšo embalažo, če za vsako naročilo poznaš težo blaga, ki ga je potrebno dostaviti in ali je blago hrana. Podatke o naročilu naključno generiraj - naročil naj bo vsaj 100 in ko enkrat neko embalažo porabiš, je ne smeš več uporabiti.
  • Prevozniki so podjetje opozorili, da vsaka oblika embalaže ni primerna za vse vrste transporta. Tako na letala sprejemajo le embalažo v obliki kocke, za transport mleka hočejo le tetraedre... Zato poleg vsakega naročila izveš še, kakšne oblike naj bo embalaža. Poišči najcenejšo!
  • Za dostavo nekega zdravila zdravniška zbornica zahteva, da je zapakirano v embalaži iz plastike tipa HDPE ali PETE, ki mora biti valjaste oblike in mora imeti nosilnost vsaj 200% višjo, kot je dejanska masa zdravila. Poišči najprimernejšo embalažo, če ti povedo maso zdravila.
  • Na koncu leta so v podjetju delali inventuro in zanimalo jih je, koliko denarja lahko dobijo s prodajo vse embalaže, ki jim je ostala. Pomagaj jim in izračunaj skopno vrednost vseh vrst embalaže če veš, da je v tem času embalaža v obliki kocke izgubila 10%, emblaža v obliki valja 20% in embalaža v obliki tetraedra 30% svoje vrednosti.
0%
0%