Razred Krog - python

Razred Krog - python

Avtor: Mateja Gorišek

Opis problema


Napišite razred Krog, ki ima podan polmer. Vaš razred naj vsebuje metodi za izračun ploščine. Sestavite tabelo objektov tipa Krog z naključnimi, a smiselnimi podatki. Rešite naslednje naloge:

  • Ugotovi, koliko različnih krogov (imajo različne polmere) je v tabeli.
  • Vsem krogom v tabeli povečaj polmer za 10%.
  • Vsem krogom v tabeli bomo včrtali in očrtali kvadrate. Tako bo za vsak krog nastal kvadratni 'plašč'. Izračunaj skupno ploščino teh plaščev.
  • Vsaj en (zaželeno pa več) problemov po vaši izbiri:

    • Izračunaj krožni izsek s podanim kotom.
    • Izračunam ploščino kolobarja.

Ideja rešitve


Najprej bomo napisali razred Krog. Ploščino in obseg bomo izračunali po formuli, ker bomo potrebovali konstanto pi, bomo poklicali matematično knjižnico (import math).

Tabelo objektov bomo naredili v novi datoteki, da bo imel objekt Krog naključne podatke, si bomo pomagali s knjižnico random (import random). S pomočjo tabele objektov bomo rešili še vse naloge:

  • Da bomo ugotovili, koliko je različnih krogov, bomo podali polmere krogov v seznam, nato bomo pa seznam spremenili v množico, ki odstrani večkratne ponovitve števila in vrnili dolžino seznama.
  • Za ploščino plašča vemo, da lahko kvadratu očrtamo ali včrtamo krog. Tako ima očrtani kvadrat včrtano krožnico in včrtani kvadrat ima očrtano krožnico. Očrtani kvadrat ima dolžino stranice enako premeru kroga. Včrtanemu kvadratu bomo pa določili stranico tako, da bomo polmer kroga delili z .
  • Krožni izsek bomo izračunali po formuli.
  • Ploščino kolobarja bomo pa izračunali tako, da bomo od ploščine večjega kroga odšteli ploščino manjšega kroga.

Razlaga algoritma


Razred Krog Class Krog: to je skupek podatkov, s katerim želimo upravljati kot s celoto.
Konstruktor (_ _init_ _()) sprejme polmer kroga, s self._r= polmer pa ustvarimo komponento, s katero želimo upravljati.
Nato v razredu ustvarjamo metode, ki se navezujejo na razred Krog. Metode so funkcije, ki so pridružene objektom. Za prvi argument vedno sprejmejo self:

  • Metoda getPolmer(self), z njo dostopamo do stanj oz. lastnosti, v naši metodi dostopamo do polmera kroga. Ta metoda tudi vrne polmer kroga.
  • Metoda setPolmer(self, novPolmer), z njo nastavljamo stanja. Tako bomo staro stanje polmera zamenjali z novim.
  • Obseg kroga se izračuna kot , je polmer kroga. Z metodo obseg kroga izračunamo polmer kroga z določenim polmerom, pri tem si pomagamo s konstanto pi. Konstanto pi dobimo iz matematične knjižnice (import math), zato zapišemo konstanto pi kot math.pi, pa pomeni množenje. Na koncu vrnemo obseg kroga.
  • Podobno je za ploščino kroga le da tukaj uporabimo kvadriranje ().
  • Napišemo tudi metodo _ _str_ _, s katero opišemo razred.

    Na naslednji strani, so napisane kode za razred Krog.

Razlaga algoritma

(razred_krog.JPG)

Razlaga algoritma


V razredu Krog ustvarimo tudi naslednje metode:

  • Ustvarimo metodo, ki doda vse podatke objekta na tekstovno datoteko. Tako s funkcijo open(imeDatoteke, 'a') odpremo datoteko, na katero nekaj dodajamo. Dodajamo oz. pišemo s f.write. Na koncu moramo datoteko tudi zapreti, ker je ne potrebujemo več – f.close().
  • Ter metoda, ki nam prebere iz datoteke podatke in jih doda v tabelo(seznam). Pri tem uporabimo stavek with, ki nam na koncu tudi zapre datoteko. Ter gremo z zanko for line in f po vrsticah datoteke f. Če so v vsaki vrstici tri podpičja, preštejemo jih s funkcijo count(), vsebino vrstice dodajamo v seznam. Na koncu vrnemo seznam.

    (razred_datoteke.JPG)

Razlaga algoritma

V novi pythonovi datoteki, najprej uvozim razred Krog (import razred_krog), pokličemo z imenom pod katerim je shranjen. Potrebovali bomo tudi knjižnico random(import random), ki bo nam pomagala pri izpisovanju naključnih števil.

  • Najprej napišemo funkcijo, ki bo nam naredila tabelo objektov tipa Krog z naključnimi podatki. Izbrala sem si, da bo nam metoda izpisala 5 objektov, za to si pomagamo s funkcijo range (for i in range(5)). Nato pa pokličemo razred: razred_krog.Krog, ki za parameter sprejem naključna števila med 1 in 100. To nato dodamo v seznam. Naključna števila dobimo s funkcijo random.randint(1,100).
  • Nato sem naredila tudi metodo, ki nam izpiše vse objekte iz tabele. To izpisujemo s funkcijo print.
(tabela.JPG)

Razlaga algoritma


Funkcija razlicni(): V sez shranimo tabelo vseh objektov, ki jih dobimo s funkcijo tabelaKrogov(). Z zanko for gremo po vseh elementih seznama. V nov seznam dodajamo polmere iz tabele. Nato nov seznam spremenimo v množico, da odstranimo večkratne ponovitve. Ter izpišemo koliko različnih krogov je v tabeli, pomagamo si tako da pogledamo dolžino novega seznama.

(razlicni.JPG)

Razlaga algoritma


Funkcija povecajPolmer(): Vsem polmerom v tabeli moramo povečati polmer za 10%.
V seznam shranimo tabelo vseh objektov in gremo po seznamu s funkcijo for. Ter povečamo polmer za 10% in izpišemo tabelo objektov s polmerom večjim za 10%.

(povecajPolmer.JPG)

Razlaga algoritma

Funkcija plasc(): Izračunati moramo ploščino vseh plaščev, to je ploščina med včrtanim in očrtanim kvadratom. Vemo da kvadratu lahko včrtamo in očrtamo krog, iz tega dobimo tudi očrtani in včrtani kvadrat. Očrtani kvadrat ima dolžino stranice enako dvakratnemu polmeru. Včrtani kvadrat pa ima diagonali enako polmeru, iz tega nato izračunamo, koliko je dolžina stranice včrtanega kvadrate. Dolžina stranice je enaka .
Enako v metodo dobimo tabelo objektov. Nato pa gremo po tabeli. Iz tabele 'vzamemo ven' polmere vseh krogov. Ter izračunamo najprej dolžine stranic, nato pa še ploščino kvadratov. Plašč dobimo tako, da od ploščine očrtanega kvadrata odštejemo ploščino včrtanega kvadrata. Ter dodamo ploščino plašča v nov seznam. Ko gre zanka po vseh elementih tabele. Seštejemo vse ploščine plaščev skupaj.

(plasc.JPG)

Razlaga algoritma

Funkcija krozniIzsek(kot),za parameter sprejem kot, to je središčni kot kroga. Ploščina krožnega izseka se izračuna po formuli . Funkcija sprejem tabelo objektov. Ter gre po vseh elementih tabele in v spremenljivko polmer shrani polmer kroga. Nato izračunamo izsek in na koncu izpišemo najprej objekt in nato njegov izsek za podan središčni kot.

(krozniIzsek.JPG)

Razlaga algoritma

Kolobar je prostor med manjšim in večjim krogom. Ploščino kolobarja dobimo tako, da od ploščine večjega kroga odštejemo ploščino manjšega kroga. Za manjši krog sem si izbrala, da ima polmer enak polovici polmera večjega kroga, ki je zapisan v tabeli objektov. Tako gremo po vseh elementih tabele in v spremenljivko r shranimo polmer kroga. Izračunamo ploščino manjšega kroga in izračunamo ploščino kolobarja.
Na koncu pa izpišemo najprej objekt in nato še ploščino kolobarja.

(kolobar.JPG)

Povezava do pythonovih datotek

Testiranje razreda

Testiranje tabele in drugih funkcij

Razlaga testnih primerov


Za testiranje razreda Krog sem napisala tudi testni program. Testiramo, kaj nam naredi metoda getPolmer - metoda nam vrne vrednost polmera. Polmer lahko tudi spremenimo z metodo setPolmer, objektu nastavimo nov polmer.
Preverimo tudi delovaje metod obsegKroga() in ploscinaKroga(), ki nam vrnejo obseg kroga in ploščino kroga danega polmera.
Preizkusimo tudi delovanje metode str(), ki nam vrne opis razreda Krog.
Nato preizkusimo tudi delovanje metode DodajNaDatoteko, ki nam na tekstovno datoteko doda vse podatke objekta ločene s podpičjem ().
Če so se podatki dodali na datoteko, lahko uporabimo metodo PreberiIzDatoteke, ki nam vrne seznam vrstic datoteke.
Preverimo še ali objekt deluje za decimalna števila, ugotovimo da lahko vpišemo tudi decimalna števila.
Na koncu preverimo še kaj se naredi če vpišemo negativno število, polmer naj ne bi bil negativen. Tako se nam sproži izjema, ki smo jo ujeli s stavkom assert.

Testiramo tudi vse metode, ki se navezujejo na razred. Vse metode sprejmejo naključne podatke objekta Krog. In nato te naključne podatke obdelajo.

0%
0%