Zbirka nalog iz gradnje razredov

Zbirka nalog iz gradnje razredov

Avtor: Matija Lokar

CKolo

Napišite razred CKolo , s katerim predstavite kolesa. Vsako kolo ima neko število prestav, v kateri prestavi se trenutno nahaja kolo, barvo, trenutno hitrost, maksimalno hitrost in za koliko ljudi je namenjeno. Napišite osnovni konstruktor (sami določite privzete vrednosti), dva dodatna konstruktorja in vsaj 5 javnih metod. Uporabite ta razred v nekem primeru.

CStudent

Napišite razred CStudent , s katerim predstavite vse smiselne lastnosti in metode za študente. Uporabite ta razred v nekem primeru.

CKvadrat

Napišite razred CKvadrat , s katerim predstavite kvadrat. Kvadrat je predstavljen z dolžino ene stranice. Izračunajte ploščino in obseg kvadrata če je to mogoče, drugače pa izpišite da kvadrat s podanimi vrednostimi ne obstaja. Uporabite razred v nekem primeru.

CPravokotnik

Napišite razred CPravokotnik , ki ima podane dve stranici. Razred naj vsebuje tudi objektne metode za izračun ploščine in obsega. Če ploščine in obsega ni mogoče izračunati, potem naj se izpiše, da takšen pravokotnik ne obstaja. Uporabite razred v nekem primeru.

CKrog

Napišite razred Ckrog , ki ima podan polmer. Vaš razred naj vsebuje metodi za izračun obsega in ploščine, kadar pa obsega ali pa ploščine ni mogoče izračunati, izpišite, da krog s podanimi vrednostmi ne obstaja. Uporabite razred v nekem primeru.

Račun

Sestavi razred Racun s komponentami (Oseba lastnik in double stanje ), konstruktorji in objektnimi metodami za dostop do komponent, Dvig , Polog in Prenos denarja.

CMatrika

Napišite razred CMatrika , ki bo modeliral obnašanje matrike. Velikost matrike naj bo določena šele v dodatnem konstruktorju, v katerem kot argument prejmete obe dimenziji in v pomnilniku rezervirate prostor za elemente matrike. Sami se odločite, kakšen tip elementov bo v matriki.

Dodajte metode za vsoto, produkt in transponiranje matrik. Pri tem naj prvi dve metodi kot argument prejmeta novo matriko in kot rezultat vrneta novo matriko, razredno matriko in matriko, podano kot argument pa pustita nedotaknjeni! Tretja metoda pa naj spremeni razredno matriko.

Dimenzije matrike naj bo možno dobiti le z metodama DajDimenzijoN in DajDimenzijoM , sicer pa naj bodo vse razredne spremenljivke privatne.

Do posameznega elementa matrike naj bo možno priti z metodami DajElement(n,m) in DolociElement(n,m,vrednost) . V destruktorju ne pozabite počistit pomnilnik!

CDatum

Napišite razred CDatum , ki po predstavljal nek datum. V dodatnem konstruktorju določite vrednosti dneva, meseca in leta, medtem ko v osnovnem konstruktorju privzemite datum 1.1.1990. Dodajte metode za izpis datuma, ali datum sploh obstaja in primerjavo dveh datumov (kaj je prej in kaj kasneje, podobno kot strcmp za primerjavo nizov).

CTekma

Napišite razred CTekma za spremljanje košarkaške tekme. Voditi morate število prekrškov na obeh straneh, koliko je bilo košev po 1, 2 in 3 točke ter dodati metodo za izpis statistike tekme. Doseganje košev (in prekrškov) implementirajte preko metod, npr. ZadelProstiMet() , ZadelZa2Tocki() ipd.

Letalo

  • Sestavi javni razred Letalo , ki naj vsebuje naslednje privatne lastnosti: doseg (int) , maxVisina (int) , maxHitrost (int) , tip (string) in nosilnost (int) .
  • Razred naj bo opremljen s konstruktorjem , ki sestavi novo letalo iz danega dosega, maksimalne visine, maksimalne hitrosti, tipa in nosilnosti. V razred dodaj še dodaten konstruktor, ki sestavi letalo, če so podane vse lastnosti razen tipa. V tem primeru naj konstruktor za lastnost tip avtomatsko privzame "potnisko letalo".

Ulomki (racionalna števila)

Kot vemo je ulomek ali racionalno število p/q podano s števcem p in imenovalcem q, ki sta celi števili, pri čemer velja še q ≠ 0. Definirajmo razred Ulomek za delo z ulomki:

 
public class Ulomek
{
   private int st; //stevec
   private int im; //imenovalec
}

Seveda je treba razred opremiti še s konstruktorji in metodami:

  1. Napiši konstruktor, ki sprejme vrednost števca in imenovalca ter nastavi vrednost komponent st in im.
  2. Napiši konstruktor, ki sprejme celo število k in naredi ulomek k/1.
  3. Napiši objektno metodo void Pokrajsaj() , ki pokrajša ulomek this . Verjetno se splača napisati še pomožno metodo, ki vrne največji skupni delitelj dveh celih števil.
  4. Napiši objektno metodo bool Equals(Ulomek a) , ki vrne true , če sta ulomka this in a enaka, sicer vrne false .
  5. Napiši objektno metodo int CompareTo(Ulomek a) , ki primerja ulomka this in a in vrne:

    • negativno število, če je this < a .
    • število 0, če je this = a .
    • pozitivno število, če je this > a .
  6. Napiši objektno metodo string toString() , ki vrne niz znakov, ki predstavlja ulomek. Na primer, ulomek new Ulomek(-18, -6) predstavimo z nizom "-18/-6".
  7. Napiši objektni metodi Ulomek Vsota(Ulomek a) in void Pristej(Ulomek a) . Prva metoda vrne nov ulomek, ki je enak vsoti this in a , druga pa ne vrača ničesar, ampak samo prišteje ulomek a ulomku this .
  8. Napiši objektni metodi za odštevanje Ulomek Razlika(Ulomek a) in void Odstej(Ulomek a) .
  9. Napiši objektni metodi za množenje Ulomek Zmnozek(Ulomek a) in void Zmnozi(Ulomek a) .
  10. Napiši objektni metodi za delenje Ulomek Kvocient(Ulomek a) in void Deli(Ulomek a) . Vse metode tudi preizkusi.

Točka

Sestavi razred Tocka s komponentami double x in double y . Poleg tega mora razred vsebovati še ustrezne konstruktorje in objektne metode za dostop do komponent, PrviKvadrant , PrezrcaliCezOsX , Razdalja , ToString ter Equals .

Polinomi

Definiraj razred Polinom za delo s polinomi z racionalnimi koeficienti. Za predstavitev racionalnih števil uporabi razred Ulomek iz prejšnje naloge.

Polinom p(x) = a + a x + ... + a x predstavimo s tabelo ulomkov Ulomek[] p " = {a, a, ..., a}. Ničelni polinom p(x) = 0 predstavimo s prazno tabelo.

Napiši ustrezne komponente, konstruktorje in naslednje metode:

  1. metoda int Stopnja() , ki vrne stopnjo polinoma. Po dogovoru je stopnja ničelnega polinoma enaka −1.
  2. metoda Ulomek Vrednost(Ulomek a) , ki vrne vrednost polinoma this v točki x = a. Uporabi Hornerjev algoritem!
  3. metoda bool Equals(Polinom q) , ki vrne true, če sta polinoma this in q enaka, sicer vrne false .
  4. metoda string toString() , ki vrne niz, ki predstavlja polinom this . Na primer, polinom 3/4 + 7/2 x + 10 x predstavimo z nizom "3/4 + 7/2 x + 10/1 x".
  5. metoda Polinom Vsota(Polinom q) , ki vrne vsoto polinomov this in q .
  6. metoda Polinom ZmnozekPolinom q) , ki vrne zmnozek polinomov this in q .

Vse metode tudi preizkusi.

Točka

Definiraj razred Tocka za delo s točkami v ravnini v polarnih koordinatah. Napiši tudi ustrezni konstruktor. (V polarnih koordinatah je točka T predstavljena s parom realnih števil (r,Ф), pri čemer je r oddaljenost T od izhodišča O, Ф pa je kot, ki ga oklepata premica OT in abcisa.)

Napiši objektno metodo Razdalja, ki izračuna razdaljo med dvema točkama. Na primer, ko poženemo ukaze

Tocka p = new Tocka(1.0, 0.5 * Math.PI);
Tocka q = new Tocka(2.0, 0.0);
double d = p.Razdalja(q);

je d enak 2.23606797749979, to je p5.

Nauk

Nauk

Kosinusov izrek pravi, da v trikotniku velja c = a + b − 2ab cos Ф , pri čemer so a, b in c dolžine stranic in je Ф kot, ki ga oklepata stranici a in b.

Uslužbenec

Javnemu razredu Usluzbenec manjkajo lastnosti, ki naj bodo privatnega značaja. Dodaj še potrebne konstruktorje in manjkajoče metode "get " ter "set ", ki bodo omogočile, da boš te lastnosti lahko prebral oz. jih spreminjal.

 
public class Usluzbenec{
   private int idStevilka;
   //DODAJ: manjkata ime ter priimek usluzbenca,
   // ki sta tipa string

   //konstruktor
   public Usluzbenec(int id, string imeUsluzbenca,
                                  string priimek Usluzbenca){
      //DODAJ: dopolni konstruktor

   }

   //metode get
   public int getId(){
      return this.idStevilka;
   }

   //DOPOLNI: napisi se preostali metodi get za ime in za priimek


   //metode set
   public void setId(int id){
      this.idStevilka=id;
  return;
   }

   //DODAJ: napisi se preostali dve metodi set
   // za ime in za priimek

}

Avto in datoteke

Dan je javni razred Avto :

 
public class Avto{
   private string znamka;
   private string model;
   private int letnicaIzdelave;
   private int stevilkaSasije;

   //konstruktor
   public Avto(string znamka, string model, int letnica,
                                   int sasija){
      this.znamka = znamka;
   this.model = model;
   this.letnicaIzdelave = letnica;
   this.stevilkaSasije = sasija;
   }

   //objektna metoda, ki vrne letnico izdelave avta
   public int PovejLetnico(){
      return this.letnicaIzdelave;
   }
}

V tekstovni datoteki se nahaja seznam avtomobilov. Datoteka je sestavljena po naslednjem pravilu: v vsaki vrsti so v tem vrstnem redu s presledki ločeni: znamka avtomobila, model avtomobila, letnica izdelave, št. šasije. Letnica izdelave in št. šasije sta celi števili, ostali podatki so nizi. Sestavi metodo, ki bo prebrala datoteko in vrnila tabelo avtomobilov.

Namig

Namig

Najprej preštej število vrstic, da boš vedel kako veliko tabelo potrebuješ.

Pogrebno podjetje

V pogrebnem podjetju Topolovič imajo računalniško obdelavo evidence o mrtvecih. Za vsakega mrtveca imajo naslednje podatke: polno ime, datum rojstva, datum smrti in dolžina trupla.

  • Definiraj razred Datum , s katerim lahko v C# predstavimo datum. Napiši tudi ustrezni konstruktor in metodo ToString() , ki vrne datum predstavljen kot niz znakov, primeren za izpis.
  • Definiraj razred Mrtvec , s katerim lahko v C# predstavimo podatke o mrtvecu. Napiši tudi ustrezni konstruktor.

Avto in tabele

Dan je javni razred Avto:

 
public class Avto{
   private string znamka;
   private string model;
   private int letnicaIzdelave;
   private int stevilkaSasije;

   //konstruktor
   public Avto(string znamka, string model, int letnica,
                                      int sasija){
   this.znamka=znamka;
   this.model=model;
   this.letnicaIzdelave=letnica;
   this.stevilkaSasije=sasija;
   }

   //objektna metoda, ki vrne letnico izdelave avta
   public int PovejLetnico(){
      return this.letnicaIzdelave;
   }
}

Sestavi metodo OdstraniNajstarejse(Avto[] seznam) , ki iz tabele odstrani najstarejše avtomobile (lahko jih je več!!!) in ki odstranjene avte vrne v obliki tabele objektov tipa Avto . Torej – po klicu metode imaš dve tabeli – prvotno, ki je brez vseh avtomobilov z najstarejšo letnico in drugo, v kateri so vsi avtomobili najstarejše letnice.

GaussovaStevila

  • Sestavi javni razred GaussovaStevila . Razred naj ima dve privatni lastnosti: realniDel in imaginarniDel (obe tipa int ). Napiši ustrezen konstruktor, ki iz para celih števil sestavi Gaussovo število.
  • Sestavi javni objektni metodi realniDel() in imaginarniDel() , ki vrneta realni del oz. imaginarni del Gaussovega števila, pri katerem sta poklicani.
  • Napiši javno metodo zmnozi(GaussovoStevilo a, GaussovoStevilo b) , ki vrne zmnožek Gaussovih števil a in b . Gaussova števila se množijo enako kot kompleksna števila!

Če ne veš, kaj Gaussova števila so, poglej npr. na http://en.wikipedia.org/wiki/Gaussian_integer (lahko pa ti povem, da je Gaussovo število kompleksno število, ki ima realno in imaginarno komponento celo število!)

Kompleksna

Dan je razred kompleksnih števil

 
public class Kompleksno {
   private double re, im;
   public Kompleksno(double r, double i){
      this.re = r; this.im = i;
   }
   public double R() { // za izraz v polarnih koodinatah
      return Math.Sqrt(this.re*this.re + this.im*this.im);
   }
   public double Fi() {
      return Math.Atan2(this.im, this.re);
   }
   public static double Re(double r, double fi) {
      return r * Math.cos(fi);
   }
   public static double Im(double r, double fi){
      return r * Math.sin(fi);
   }
}
  1. Sestavi objektno metodo Potenca , ki sprejme nenegativno celo število n in vrne n-to potenco kompleksnega števila. Nasvet: če se kompleksno število z v polarnih koordinatah izraža kot z = r (cos f + i sin f) je z = r(cos(n*f) + i sin(n*f)).
  2. Zapiši enega ali več ukazov, s katerimi izračunamo (3.5 − 1.9 i).

Premica

Sestavi razred Premica s komponentami double a , double b in double c , ki predstavlja premico, podano z enačbo ax+by+c=0. Poleg komponent, razred še dopolnimo z konstruktorji in objektnimi metodami za dostop do komponent, Vodoravna, TockaNaPremici, Vzporedni, Vzporednica, Pravokotni, Pravokotnica, ToString, Equals ter Presecisce .

Ulomek

Dan je razred Ulomek:

 
public class Ulomek {
   int st; // stevec
   int im; // imenovalec

   public Ulomek(int s, int i) {
      this.st = s;
      this.im = i;
   }

   public string toString() {
      return st + "/" + im;
   }
}

Razredu dodaj objektno metodo public Ulomek Priblizek(int b), ki vrne tisti ulomek z imenovalcem b , ki je najbližje ulomku this . Predpostaviti smeš, da imamo opravka samo s pozitivnimi ulomki, tako da so vsi števci in imenovalci nenegativna števila. Primeri uporabe:

Ulomek x = new Ulomek(2,3); Ulomek y = x.Priblizek(10); vrne 7/10

Registracija

Definiraj razred Registracija , ki vsebuje podatke o registrski številki avtomobila. V Sloveniji je registerska številka sestavljena iz dveh nizov. Prvi niz je območje in vsebuje dva znaka, drugi niz pa je registracija in vsebuje pet poljubnih znakov.

Na primer, registrska številka LJ V1-02E sestoji iz območja LJ in registracije V102E.

Napiši tudi ustrezni konstruktor, ki sprejme oba niza ter ustrezne Get/Set metode, ToString , ... V Sloveniji so veljavna območja LJ, KR, KK, MB, MS, KP, GO, CE, SG, NM,PO. Poskrbi, da bodo podatki objekta zagotovo pravilni!

Napiši program, ki ustvari tabelo 100 registrskih številk in napiši metodo, ki za dano tabelo reg. številk izpiše tiste reg. številke, ki so iz določenega območja, ki je parameter metode.

Zgoščenka

Pesem na zgoščenki je predstavljena z objektom razreda Pesem :

 
public class Pesem {
   public string naslov;
   public int minute;
   public int sekunde;
   public Pesem(string nasl, int min, int sek){
      naslov = nasl; minute = min; sekunde = sek;
   }
}

Na primer, objekt new Pesem("Echoes",15,24) predstavlja pesem “Echoes”, ki traja 15 minut in 24 sekund.

  1. Sestavi razred Zgoscenka , ki vsebuje naslov zgoščenke, ime izvajalca in tabelo pesmi na zgoščenki.
    Definiraj ustrezne komponente in konstruktor.
  2. Razredu Zgoscenka dodaj objektno metodo int steviloPesmi() , ki vrne število vseh pesmi na zgoščenki.
  3. Razredu Zgoscenka dodaj objektno metodo Pesem ZadnjaPesem() , ki vrne zadnjo pesem na zgoščenki.
  4. Razredu Zgoscenka dodaj objektno metodo int Dolzina() , ki vrne skupno dolžino vseh pesmi na zgoščenki, izraženo v sekundah.

Seznam

Dan je razred Seznam :

 
public class Seznam
{
   bool prazen; // == true, ce je seznam prazen
   Object element; // prvi element seznama
   Seznam ostali; // ostali elementi
}

Razredu dodaj objektno metodo int Prestej(Object x) , ki sprejme objekt x in vrne število pojavitev objekta x v seznamu this . Na primer, če seznam s vsebuje nize ”kar”, ”je”, ”bilo”, ”je”, ”bilo”, ”in”, ”vec”, ”ne”, ”bo” , potem ukaz s.Prestej("je") vrne 2.

Nasvet

Nasvet

Za dana objekta x in y ukaz x.Equals(y) vrne true, če sta objekta enaka in false, če nista.

Nepremičnina

Napiši razred Nepremicnina , kjer hranimo podatke o nepremičninah. Podatke, ki jih potrebujemo so:

  • številka parcele
  • širina parcele (v metrih)
  • dolžina parcele (v metrih)
  • cona v kateri se parcela nahaja (zazidljiva ali ne)
  • občina v kateri se nahaja
  • cena

Poleg tega potrebujemo še konstruktorja:

  • Nepremicnina () – kjer je št parcele 001(če ta parcela še ne obstaja), širina 20m, dolžina 25m, cona je zazidljiva, občina je Ljubljana in cena je 250.000 €.
  • Nepremičnina(...) - kjer uporabnik sam vnese podatke (smiselne seveda :))

Seveda pa naš razred pozna še vsaj naslednje metode:

  • Metode, ki vrnejo številko, širino, dolžino, občino in ceno parcele.
  • Metoda, ki vrne thru, če je parcela zazidljiva in false če ni.
  • Metoda, ki spremeni podatke o številki, dolžini, širini, coni in ceni parcele (občine pa seveda ne moremo spremeniti :) )
  • Metodo, ki nam izračuna velikost parcele.

Pri tem pa seveda pazimo, da so podatki, ki jih vnašamo smiselni. (Nadaljevanje pri dedovanju)

Razred

Na osnovni šoli vodijo evidenco o razredih. Za vsak razred imajo naslednje podatke:

  • Ime razreda, ki je podano s številko in črko, na primer 7. c ali 3. d. Številke gredo od 1 do 8, črke pa od ’a’ do ’z’.
  • Ime in priimek razrednika, npr. Mojca Korenjak
  • Imena in priimki učencev v tem razredu, na primer:

    • Razija Ahmatovič
    • Lidija Anzeljc
    • ...
    • Ana-Marija Žeks

V C#i definiraj razred Razred , ki vsebuje te podatke. Definiraj komponente, metode in konstruktorje pa ni potrebno. Upoštevaj dejstvo, da se število učencev v danem razredu lahko spreminja, ker lahko učenci zapustijo šolo, ali pa pridejo novi.

Nogometna zveza

Mednarodna nogometna zveza vodi evidenco o moštvih, ki nastopajo na svetovnem prvenstvu. Za vsako moštvo imajo naslednje podatke:

  • ime države, iz katere je moštvo
  • ime in priimek selektorja
  • število točk, ki jih je moštvo doseglo v predtekmovanju
  • število golov, ki jih je moštvo dalo
  • število golov, ki jih je moštvo sprejelo
  • podatki o igralcih v moštvu
  • ime in priimek kapetana moštva

Za vsakega igralca imajo naslednje podatke:

  • ime in priimek
  • številka
  • ali je dobil na zadnji tekmi rumeni ali rdeči karton (d/n)
  • ali je ta igralec vratar (d/n)

Definiraj razred Igralec , ki vsebuje podatke o igralcu. Definiraj samo komponente, konstruktorjev in metod ni treba definirati.

Definiraj razred Mostvo , ki vsebuje podatke o moštvu. Definiraj samo komponente, konstruktorjev in metod ni treba definirati. Upoštevaj dejstvo, da se lahko med tekmovanjem kak igralec skrega s selektorjem in zapusti moštvo.

Trgovina

V trgovini imajo za vsak izdelek, ki ga prodajajo, naslednje podatke:

  • ime
  • cena
  • ime proizvajalca
  • število takih izdelkov na zalogi

Definiraj razred Izdelek , ki je primeren za predstavitev teh podatkov v Javi. Napiši ustrezni konstruktor. Napiši objektno metodo ToString(), ki vrne niz, primeren za izpis na ekran.

Na primer:

 
Izdelek mleko = new Izdelek("mleko 3.2 1L", 134.50,
     "Ljubljanske mlekarne", 357);
Console.WriteLine(mleko.ToString());

izpiše na ekran:
mleko 3.2 1L (Ljubljanske mlekarne), cena: 134.50 SIT, zaloga: 357

Stavnica

Stavnica na hipodromu vodi evidenco o tem, koliko denarja je bilo stavljenega na vsakega konja in kakšno je razmerje med vplačilom in dobitkom:

KonjVplačane stavkeRazmerje
Divja Strela125900.003 : 2
Kralj Matjaž70910.002 : 7
Jožek II23440.001 : 10
Staro Kljuse100.001 : 240

Na primer, druga vrstica pomeni, da je bilo na konja Kralj Matjaž stavljenih skupno 70910.00 tolarjev in da je stavno razmerje 2 : 7.

  • Definiraj razred Stava , s katerim v C# predstavimo vrstico iz zgornje tabele (ime konja, vplačane stave in stavno razmerje). Definiraj tudi ustrezni konstruktor.
  • Pokaži, kako se uporabi konstruktor za razred Stava . Na primer, kako se naredi nov objekt razreda Stava , ki vsebuje podatke iz druge vrstice zgornje tabele?

Pravokotnik

Dan je razred Pravokotnik , ki predstavlja pravokotnik v ravnini:

 
public class Pravokotnik {
   public int minx, maxx;
   public int miny, maxy;

     public Pravokotnik(int minx,int maxx,int miny,int maxy){
       this.minx = minx; this.maxx = maxx;
       this.miny = miny; this.maxy = maxy;
     }
 }

Komponenti minx in maxx predstavljata levi in desni rob pravokotnika, komponenti miny in maxy pa spodnji in zgornji rob pravokotnika.

  • Točka na zaslonu je predstavljena s koordinatama (x, y), ki sta celi števili. Definiraj razred Tocka , s katerim predstavimo točko. Napiši ustrezne komponente in konstruktor.
  • Razredu Pravokotnik dodaj objektno metodo pripada, ki sprejme točko t in vrne true , če točka t leži v pravokotniku, sicer vrne false .

Primer uporabe:

 
Pravokotnik p = new Pravokotnik(1, 7, 3, 8);
Tocka v = new Tocka(2, 5);
Tocka w = new Tocka(6, 2);
bool b1 = p.pripada(v); // b1 == true
bool b2 = p.pripada(w); // b2 == false

Pravokotnik

Pravokotnik v ravnini s stranicama, ki sta vzoredni koordinatnima osema predstavimo s koordinatama (x, y) spodnjega levega oglišča in dolžinama stranic a in b:

(pravokotnik.png)
  • Definiraj razred Pravokotnik , s katerim tako predstavimo pravokotnik v javi. Razred naj vsebuje ustrezne komponente in konstruktor.
  • Napiši objektno metodo Pravokotnik zasuk() , ki vrne nov pravokotnik, ki je pravokotnik zasukan za kot 180_ okrog spodnjega levega oglišča. Na primer, če je p pravokotnik s spodnjim levimogliščem (3, 5) in stranicama a = 10, b = 7, potem ukaz p.zasuk() vrne pravokotnik s spodnjim levim ogliščem (−4,−5) in stranicama a = 7, b = 10.
0%
0%