Professional Documents
Culture Documents
E8OVK2
e8ovk2@inf.elte.hu
16.csoport
Feladat
Valósítsa meg az egész számokat tartalmazó „X-mátrixtípust”. Ezek négyzetes mátrixok, de csak
a fő–, és mellékátlójukban tartalmazhatnak nullától különböző elemeket. A típus
reprezentációjában csak a főátló és a mellékátló elemeit kell eltárolni. Implementálja önálló
metódusként a mátrix i-edik sorának j-edik elemét visszaadó műveletet, valamint az összeadás
és szorzás műveleteket, továbbá a mátrix (négyzetes alakú) kiírását!
Típusérték-halmaz1
Olyan n×n-es (n e ℕ) négyzetes mátrixok, amelynek elemei egész számok, és csak a főátlójukban
és mellékátlójukban tartalmazhatnak nullától különböző elemeket. (Az n e ℕ ennek a típusnak
egy paramétere, amely a típusérték-halmaz mátrixainak méretét határozza meg.)
Típus-műveletek2
1. Lekérdezés
A mátrix i-edik sorának j-edik pozícióján (i,j e [1..n]) álló érték kiolvasása: e:=a[i,j].
A = ( a : Matrix(n), i : ℤ, j : ℤ, e : ℤ )
Ef = ( a=a’ , i=i’ , j=j’ , i,jЄ[1..n] )
Uf = ( Ef , e=a[i,j] )
2. Felülírás
A mátrix i-edik sorának j-edik pozíciójára (i,jЄ[1..n]) új érték beírása: a[i,j]:=e. A fő- és
mellékátlón kívüli elemeket nem szabad felülírni, azaz i=j v i+j=n+1.
A = ( a : Matrix(n), i : ℤ, j : ℤ, e : ℤ )
Ef = ( e=e’ , a=a’ , i=i’ , j=j’ , i,jЄ[1..n] ∧ i=j ∨ i+j=n+1)
Uf = (e=e’ , i=i’ , j=j’ , a[i,j]=e , ∀k,lЄ[1..n]: (k≠i ∨ l≠j)∨(k+l≠n+1) → a[k,l]=a’[k,l] )
Megjegyezzük, hogy ez a művelet i≠j esetén hibás akkor, amennyiben egy nemnulla értéket
akarunk a mátrixba tenni.
1
3. Összeadás
Két mátrix összeadása: c:=a+b. Az összeadásban szereplő mátrixok azonos méretűek.
4. Szorzás
Két mátrix szorzata: c:=a*b. A szorzásban szereplő mátrixok azonos méretűek.
’X’ mátrixok esetén a fenti művelet jóval egyszerűbben megfogalmazható: ∀i,jЄ[1..n]: c[,j]=
a[i,j]*b[i,j] és ∀i,jЄ[1..n]: i≠j∨ i+j≠n+1 → c[i,j]=0.
Reprezentáció
Egy n×n-es „X” mátrixnak csak a főátlóját és mellékátlóját kell ábrázolni, azaz egy n*n darab
elemet tartalmazó mátrix helyett, elég csak n darab elemet tárolni két 0-tól n-1-ig indexelt
egydimenziós tömbben (v).
a=
a1, 0 0 … a1,
1 n
0 a2 0 … 0
,2
0 0 a3, … 0
3
… … … … …
an, 0 0 … an,
1 n
vagy
a= v1,v2
v1=<a1,1; a2,2; a3,3 … an,n>
v1=<a1,n; a2,n-1; a3,n-2 … an,1>
Ennek megfelelően:
𝑎[𝑖, 𝑗] = { v1[i] ha i=j ∨ v2[i] ha i+j=n+1 ∨ 0 ha i≠j ∧ i+j≠n+1 }
Tesztelési terv
Megvalósított műveletek tesztelése (fekete doboz tesztelés)