Poročilo 1. naloge (KVADRAT)

Poročilo 1. naloge (KVADRAT)

Avtor: Nastja Bastjančič

OPIS PROBLEMA IN IDEJA REŠITVE

NAVODILO NALOGE:

Napišite razred Kvadrat, s katerim predstavite kvadrat. Kvadrat je predstavljen z dolžino ene stranice. Sestavite tudi metodi za izračun ploščine in obsega kvadrata. Sestavite tabelo objektov tipa Kvadrat z naključnimi, a smiselnimi podatki.

Rešite naslednje naloge:

  • Izračunajte, kakšno površino lahko prekrijete s kvadrati, ki so v tabeli.
  • Vrnite kopijo tistega kvadrata, ki ima najmanjši obseg.
  • 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!)

OPIS PROBLEMA IN IDEJA REŠITVE

OPIS PROBLEMA:

Naloga zahteva, da sestavimo razred Kvadrat, s katerim predstavimo kvadrat. Ta je predstavljen z dolžino stranice.

Razred vsebuje metode:

  • getDolzinaStranice, ki vrne dolžino stranice danega kvadrata,
  • ploscina, ki vrne ploščino danega kvadrata,
  • obseg, ki vrne obseg danega kvadrata,
  • metodo str, ki omogoča uporabo fukncije print na objektih našega razreda,
  • sestavi tabelo, ki naredi tabelo objektov tipa Kvadrat z naključnimi, a smiselnimi podatki,
  • povrsinaPrekritegaObmocja, ki nam pove, kakšno površino lahko prekrijemo s kvadrati, ki so v tisti tabeli, ki jo sestavi metoda "sestaviTabelo",
  • kvadratZNajmanjsimObsegom, ki vrne kopijo tistega kvadrata, ki ima najmanjši obseg,
  • spremeniPremajhne, ki spremeni stranico tistim kvadratom v tabeli, katerih obseg je za več kot 10% manjši od povprečnega obsega vseh kvadratov. Stranico jim spremeni tako, da bodo imeli obseg (do zaokrožitvene napake) enak povprečnemu,
  • kvadratZNajvecjimObsegom, ki vrne kopijo tistega kvadrata, ki ima največji obseg.

OPIS PROBLEMA IN IDEJA REŠITVE

IDEJA REŠITVE:

  • Najprej napišemo metodo init z edinim argumentom self. Tako ustvarimo objekte X = Class(p)
  • Potem napišemo metodo getDolzinaStranice, ki vrne dolžino stranice danega kvadrata (glej algoritem)
  • Napišemo še metodo ploscina, ki vrne ploščino danega kvadrata (glej algoritem) ter metodo obseg, ki vrne obseg danega kvadrata (glej algoritem)
  • Da bomo lahko uporabljali metodo print na objektih našega razreda, spišemo metodo str, ki nam to omogoča (glej algoritem)
  • Spišemo metodo sestaviTabelo, kjer se nam ustvari tabela z desetimi elementi – ti elementi so stranice kvadrata in so tipa Kvadrat . Za naključni izbor poskrbi random.randint. (glej algoritem)
  • Nato spišemo metodo povrsinaPrekritegaObmocja, ki rabi argument – tabelo, iz katere bo jemala podatke in na koncu vrnila, kolikšno površino lahko prekrijemo s kvadrati, ki so v naključno izbrani tabeli.
  • Metoda kvadratZNajmanjsimObsegom tudi potrebuje tabelo za argument. Ta metoda vrne kvadrat, ki ima najmanjši obseg – le tega namreč tudi izračuna – vrne pa le dolžino njegove stranice.
  • Potem imamo še metodo spremeniPremajhne, ki v podani tabeli poišče tiste kvadrate, ki imajo za 10% manjši obseg od povprečnega. Stranico jim spremeni tako, da potem imajo dolgo toliko, kot je dolga povprečna.
  • Spisala sem še metodo kvadratZNajvecjimObsegom, ki deluje podobno kot metoda kvadratZNajmanjsimObsegom, le da vrne kvadrat z največjim obsegom.

ALGORITEM IN REŠITEV NALOGE

import random import copy

class Kvadrat:

_Razred Kvadrat predstavlja kvadrat, ki je določen z dolžino stranice. Vsebuje metodi za izračun ploščine in obsega kvadrata. Pozna metode "ploscina", "obseg" in "sestaviTabelo"._

--->def init (self, dolzinaStranice):

_Tu ustvarimo objekte, s katerimi bomo v nadaljevanju delali._

------->assert dolzinaStranice>0, 'Dolžina stranice mora biti pozitivno od nič različno število!'

------->self.dolzina = dolzinaStranice

--->def getDolzinaStranice(self): _Vrne dolžino stranice kvadrata._

------->return self.dolzina

--->def ploscina (self):

_Metoda vrne ploščino kvadrata s podano dolžino stranice._

------->pl = int(self.dolzina)^2

------->return pl

--->def obseg (self):

_Metoda vrne obseg kvadrata s podano dolžino stranice._

------->ob = int(self.dolzina)*4

------->return ob

--->def str (self):

_Prikaz objekta z nizom znakov._

------->return 'Kvadrat ima stranico dolžine ' + str(self.dolzina)+' cm.'

ALGORITEM IN REŠITEV NALOGE

--->def sestaviTabelo (self, velikostT = 10):

_Metoda naredi tabelo objektov tipa Kvadrat z naključnimi, a smiselnimi podatki._

------->tabela = []

------->i = velikostT

------->nakljucni = 0

------->while i > 0:

----------->nakljucni = random.randint(1, 50)

----------->nak = Kvadrat(nakljucni)

----------->clen = (nak)

----------->tabela.append(clen)

----------->i -= 1

------->return tabela

ALGORITEM IN REŠITEV NALOGE

PRIMER UPORABE:

a = Kvadrat(4)

>>> a.obseg()

16

>>> a.ploscina()

16

>>> a.sestaviTabelo()

>>> a.sestaviTabelo()

[<main.Kvadrat object at 0x013BDE30>, <main.Kvadrat object at 0x013C7190>, <main.Kvadrat object at 0x013C5CD0>, <main.Kvadrat object at 0x013C72B0>, <main.Kvadrat object at 0x013C7370>, <main.Kvadrat object at 0x013C7390>, <main.Kvadrat object at 0x013C73B0>, <main.Kvadrat object at 0x013C73D0>, <main.Kvadrat object at 0x013C73F0>, <main.Kvadrat object at 0x013C7410>]

ALGORITEM IN REŠITEV NALOGE

--->def povrsinaPrekritegaObmocja (self, tabela):

_Metoda nam pove, kakšno površino lahko prekrijemo s kvadrati, ki so v tisti tabeli, ki jo sestavi metoda "sestaviTabelo"._

------->povrsina = 0

------->for i in tabela:

----------->povrsina += Kvadrat.ploscina(i)

------->return povrsina

PRIMER UPORABE:

>>> a = Kvadrat(4)

>>> tabela = a.sestaviTabelo()

>>> a.povrsinaPrekritegaObmocja(tabela)

6625

ALGORITEM IN REŠITEV NALOGE

--->def kvadratZNajmanjsimObsegom (self, tabela):

_Metoda vrne kopijo tistega kvadrata, ki ima najmanjši obseg._

------->prviEl = tabela[0]

------->najmanjsi = Kvadrat.obseg(prviEl)

------->for i in tabela:

----------->if Kvadrat.obseg(i) < najmanjsi:

---------------->najmanjsi = Kvadrat.obseg(i)

------->kvadratek = najmanjsi/4

------->kopija = copy.copy(kvadratek)

------->return kopija

PRIMER UPORABE:

>>> a = Kvadrat(4)

>>> tabela = a.sestaviTabelo()

>>> a.kvadratZNajmanjsimObsegom(t)

2.0

ALGORITEM IN REŠITEV NALOGE

--->def spremeniPremajhne (self, tabela):

_Metoda spremeni stranico tistim kvadratom v tabeli, katerih obseg je za več kot 10% manjši od povprečnega obsega vseh kvadratov. Stranico jim spremeni tako, da bodo imeli obseg (do zaokrožitvene napake) enak povprečnemu._

------->stevec = 0

------->vsotaObsegov = 0

------->for i in tabela:

----------->vsotaObsegov += Kvadrat.obseg(i)

----------->stevec += 1

------->povprecniObseg = vsotaObsegov/stevec

------->delez = povprecniObseg * 0.1

------->SpMeja = povprecniObseg - delez

------->popravljenObseg = povprecniObseg

------->popravljenaStranica = popravljenObseg / 4

------->print ('Povprečni obseg je '+str(povprecniObseg)+'.')

------->print ('Kvadratom, ki imajo obseg manjši od '+str(SpMeja)+', bomo morali spremeniti stranico, katera bo dolžine '+str(popravljenaStranica)+'.')

------->novaStranica = Kvadrat(popravljenaStranica)

------->for i in tabela:

----------->if int(Kvadrat.getDolzinaStranice(i)) < int(SpMeja):

---------------->tabela.insert(i, novaStranica)

------->return tabela

ALGORITEM IN REŠITEV NALOGE

--->def kvadratZNajvecjimObsegom (self, tabela): _Metoda vrne kopijo tistega kvadrata, ki ima največji obseg._

------->prviEl = tabela[0]

------->najvecji = Kvadrat.obseg(prviEl)

------->for i in tabela:

----------->if Kvadrat.obseg(i) > najvecji:

---------------->najvecji = Kvadrat.obseg(i)

------->kopija = copy.copy(kvadrat)

------->return kopija

PRIMER UPORABE:

>>> a = Kvadrat(4)

>>> tabela = a.sestaviTabelo()

>>> a.kvadratZNajvecjimObsegom(t)

49.0

0%
0%