Advertisement
kecer

matice

Dec 21st, 2013
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.35 KB | None | 0 0
  1. from math import *  # vlozenie vsetkych prvkov z kniznice math
  2.  
  3. # trieda Matica - vsetky matice, s ktorymi budeme pracovat, budu instancie tejto triedy
  4. class Matica:
  5.     # rows = pocet riadkov, cols = stlpcov, n = ak je True, automaticky si pyta definovanie matice
  6.         def __init__(self,rows=False,cols=False,n=True):
  7.                 self.r=rows
  8.                 self.c=cols
  9.         # obsah matice: dvojrozmerne pole [riadok1[stlpec1,stlpec2], riadok2[stlpec1,stlpec2]]
  10.                 self.val = []
  11.         # ak je n=True a su zadane riadky a stlpce, pyta definovanie
  12.                 if n and rows and cols:
  13.                         self.insert()
  14.  
  15.         def insert(self):
  16.         # r-krat si vypyta riadok matice
  17.                 for i in range(self.r):
  18.                         x=input("{0}. riadok: ".format(i+1))
  19.                         self.val.append(
  20.                 # do obsahu sa pripoji pole s hodnotami
  21.                 # hodnoty sa rozdelia bud podla medzery alebo podla |
  22.                 # aby bolo mozne napisat do vyrazu medzeru
  23.                                 x.split(" | ") if " | " in x else x.split(" ")
  24.                         )
  25.  
  26.         def show(self):
  27.         # prechadza vsetky riadky a postupne ich vypisuje
  28.                 for i in self.val:
  29.             # " ".join(i) spravi z pola ["1","5","7"] retazec "1 5 7"
  30.                         print(" ".join(i))
  31.  
  32. # trieda Calc, obsahuje funkcie na vypocty
  33. class Calc:
  34.     # funkcia na scitanie, parametre a,b su instancie triedy Matica
  35.         def sum(self,a,b):
  36.                 o=Matica() # vytvorenie novej matice (do ktorej ulozime vysledok)
  37.                 o.val=a.val # skopirujeme hodnoty z matice a, cim sa vytvori pole s potrebnym rozmerom
  38.  
  39.         # prechadzame postupne riadky v matici b
  40.         # do I sa ulozi index (0, 1, 2, ..) a do i samotna hodnota, tj pole riadok
  41.                 for I,i in enumerate(b.val):
  42.             # teraz prechadzame vybrany riadok po stlpcoch
  43.             # hodnotu stlpca ulozi do y, index stlpca do Y
  44.                         for Y,y in enumerate(i):
  45.                 # do matice "o" na poziciu [riadokI][stlpecY] sa ulozi
  46.                 # sucet hodnot z matice A a matice B
  47.                 # funkcia eval() je pouzita preto, aby bolo mozne prelozit vyrazy
  48.                 # 5**2, 4*pi, sqrt(25), ...
  49.                                 o.val[I][Y]=str(eval(o.val[I][Y])+eval(y))
  50.         # vypise novu maticu a cez return ju vrati (takze s nou mozeme dalej pracovat)
  51.                 o.show()
  52.                 return o
  53.         def mul(self,a,b):
  54.                 o=Matica() # nova matica
  55.         # prechadzame riadky z matice A, index ulozi do I, hodnotu do i
  56.                 for I,i in enumerate(a.val):
  57.             # v novej matici "vytvori" novy riadok, tj prazdne pole
  58.                         o.val.append([])
  59.             # prechadzame pocet stlpcov v matici B, index ulozi do y
  60.                         for y in range(b.c):
  61.                 # do novej matice na posledny riadok vlozime novy prvok (retazec)
  62.                                 o.val[I].append(str(
  63.                     # vyraz [eval(i[z])*eval(b.val[z][y]) for z in range(b.r)]
  64.                     # je v skratke zapisany cyklus, ktory prechadza pocet riadkov v matici B
  65.                     # a vrati pole (ktoreho dlzka sa rovna poctu riadkov B)
  66.                     # kde jeden prvok je nasobok hodnoty stlpca z vybraneho riadku matice A
  67.                     # a hodnota prislusneho riadku a stlpcu z matice B
  68.                     # nakoniec sa toto pole scita funkciou sum
  69.                     # sum([1,59,65]) == 125
  70.                                         sum([eval(i[z])*eval(b.val[z][y]) for z in range(b.r)])
  71.                                 ))
  72.         # vypise novu maticu a vrati ju
  73.                 o.show()
  74.                 return o
  75.  
  76.  
  77. ### priklady pouzitia:
  78. > a=Matica(3,3)
  79. 1. riadok: 1 2 3
  80. 2. riadok: 4 5 6
  81. 3. riadok: 7 8 9
  82. > b=Matica(3,3)
  83. 1. riadok: 4 2 8
  84. 2. riadok: 10 12 4
  85. 3. riadok: 4 5 9
  86. > x=Calc()
  87. > c=x.mul(a,b)
  88. 36 41 43
  89. 90 98 106
  90. 144 155 169
  91. > d=x.sum(a,b)
  92. 5 4 11
  93. 14 17 10
  94. 11 13 18
  95.  
  96. ###
  97.  
  98. > a=Matica(3,3)
  99. 1. riadok: 3**2 sqrt(25) 5*pi
  100. 2. riadok: 32+15 18/2 43*5
  101. 3. riadok: 19 68 56
  102. > b=Matica(3,3)
  103. 1. riadok: 1 2 3
  104. 2. riadok: 4 5 6
  105. 3. riadok: 7 8 9
  106. > x=Calc()
  107. > c=x.mul(a,b)
  108. 138.95574287564276 168.66370614359172 198.3716694115407
  109. 1588.0 1859.0 2130.0
  110. 683 826 969
  111. > d=x.sum(a,b)
  112. 10 7.0 18.707963267948966
  113. 51 14.0 221
  114. 26 76 65
  115. >
  116. > e=Matica(3,3) # vytvorime prazdnu maticu
  117. 1. riadok: 0 0 0
  118. 2. riadok: 0 0 0
  119. 3. riadok: 0 0 0
  120. > f=x.sum(a,e) # scitanim matice A s prazdnou maticou dostaneme vypocitanu maticu A
  121. 9 5.0 15.707963267948966
  122. 47 9.0 215
  123. 19 68 56
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement