Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from math import * # vlozenie vsetkych prvkov z kniznice math
- # trieda Matica - vsetky matice, s ktorymi budeme pracovat, budu instancie tejto triedy
- class Matica:
- # rows = pocet riadkov, cols = stlpcov, n = ak je True, automaticky si pyta definovanie matice
- def __init__(self,rows=False,cols=False,n=True):
- self.r=rows
- self.c=cols
- # obsah matice: dvojrozmerne pole [riadok1[stlpec1,stlpec2], riadok2[stlpec1,stlpec2]]
- self.val = []
- # ak je n=True a su zadane riadky a stlpce, pyta definovanie
- if n and rows and cols:
- self.insert()
- def insert(self):
- # r-krat si vypyta riadok matice
- for i in range(self.r):
- x=input("{0}. riadok: ".format(i+1))
- self.val.append(
- # do obsahu sa pripoji pole s hodnotami
- # hodnoty sa rozdelia bud podla medzery alebo podla |
- # aby bolo mozne napisat do vyrazu medzeru
- x.split(" | ") if " | " in x else x.split(" ")
- )
- def show(self):
- # prechadza vsetky riadky a postupne ich vypisuje
- for i in self.val:
- # " ".join(i) spravi z pola ["1","5","7"] retazec "1 5 7"
- print(" ".join(i))
- # trieda Calc, obsahuje funkcie na vypocty
- class Calc:
- # funkcia na scitanie, parametre a,b su instancie triedy Matica
- def sum(self,a,b):
- o=Matica() # vytvorenie novej matice (do ktorej ulozime vysledok)
- o.val=a.val # skopirujeme hodnoty z matice a, cim sa vytvori pole s potrebnym rozmerom
- # prechadzame postupne riadky v matici b
- # do I sa ulozi index (0, 1, 2, ..) a do i samotna hodnota, tj pole riadok
- for I,i in enumerate(b.val):
- # teraz prechadzame vybrany riadok po stlpcoch
- # hodnotu stlpca ulozi do y, index stlpca do Y
- for Y,y in enumerate(i):
- # do matice "o" na poziciu [riadokI][stlpecY] sa ulozi
- # sucet hodnot z matice A a matice B
- # funkcia eval() je pouzita preto, aby bolo mozne prelozit vyrazy
- # 5**2, 4*pi, sqrt(25), ...
- o.val[I][Y]=str(eval(o.val[I][Y])+eval(y))
- # vypise novu maticu a cez return ju vrati (takze s nou mozeme dalej pracovat)
- o.show()
- return o
- def mul(self,a,b):
- o=Matica() # nova matica
- # prechadzame riadky z matice A, index ulozi do I, hodnotu do i
- for I,i in enumerate(a.val):
- # v novej matici "vytvori" novy riadok, tj prazdne pole
- o.val.append([])
- # prechadzame pocet stlpcov v matici B, index ulozi do y
- for y in range(b.c):
- # do novej matice na posledny riadok vlozime novy prvok (retazec)
- o.val[I].append(str(
- # vyraz [eval(i[z])*eval(b.val[z][y]) for z in range(b.r)]
- # je v skratke zapisany cyklus, ktory prechadza pocet riadkov v matici B
- # a vrati pole (ktoreho dlzka sa rovna poctu riadkov B)
- # kde jeden prvok je nasobok hodnoty stlpca z vybraneho riadku matice A
- # a hodnota prislusneho riadku a stlpcu z matice B
- # nakoniec sa toto pole scita funkciou sum
- # sum([1,59,65]) == 125
- sum([eval(i[z])*eval(b.val[z][y]) for z in range(b.r)])
- ))
- # vypise novu maticu a vrati ju
- o.show()
- return o
- ### priklady pouzitia:
- > a=Matica(3,3)
- 1. riadok: 1 2 3
- 2. riadok: 4 5 6
- 3. riadok: 7 8 9
- > b=Matica(3,3)
- 1. riadok: 4 2 8
- 2. riadok: 10 12 4
- 3. riadok: 4 5 9
- > x=Calc()
- > c=x.mul(a,b)
- 36 41 43
- 90 98 106
- 144 155 169
- > d=x.sum(a,b)
- 5 4 11
- 14 17 10
- 11 13 18
- ###
- > a=Matica(3,3)
- 1. riadok: 3**2 sqrt(25) 5*pi
- 2. riadok: 32+15 18/2 43*5
- 3. riadok: 19 68 56
- > b=Matica(3,3)
- 1. riadok: 1 2 3
- 2. riadok: 4 5 6
- 3. riadok: 7 8 9
- > x=Calc()
- > c=x.mul(a,b)
- 138.95574287564276 168.66370614359172 198.3716694115407
- 1588.0 1859.0 2130.0
- 683 826 969
- > d=x.sum(a,b)
- 10 7.0 18.707963267948966
- 51 14.0 221
- 26 76 65
- >
- > e=Matica(3,3) # vytvorime prazdnu maticu
- 1. riadok: 0 0 0
- 2. riadok: 0 0 0
- 3. riadok: 0 0 0
- > f=x.sum(a,e) # scitanim matice A s prazdnou maticou dostaneme vypocitanu maticu A
- 9 5.0 15.707963267948966
- 47 9.0 215
- 19 68 56
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement