You are on page 1of 3

Országh Benjámin 1. beadandó/2.feladat 2021. március 12.

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.)

Matrix(n) = { a Є ℤn×n | ∀i,j Є [1..n]: i≠j ∧ i+j≠n+1 → a[i,j]=0 }

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.

A = ( a : Matrix(n), b : Matrix(n), b : Matrix(n) )


Ef = ( a=a’∧ b=b’)
Uf = ( Ef ∧ ∀i,jЄ[1..n]: c[i,j]= a[i,j] + b[i,j] )

’X’ mátrixok esetén a fenti művelet jóval egyszerűbben megfogalmazható: ∀i,jЄ[1..n]:


c[i,j]= a[i,j] + b[i,j] és ∀i,jЄ[1..n]: i≠j∨ i+j≠n+1 → c[i,j]=0.

4. Szorzás
Két mátrix szorzata: c:=a*b. A szorzásban szereplő mátrixok azonos méretűek.

A = ( a : Matrix(n), b : Matrix(n), c : Matrix(n) )


Ef = ( a=a’ ∧ b=b’)
Uf = ( Ef ∧ ∀i,jЄ[1..n]: c[i,j]= Σk=1..n a[i,k] * b[k,j])

’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)

1) Mátrix konstruktorok letesztelése.


a) Üres mátrix létrehozása
b) Vektorral mátrix
c) Másoló konstruktor
2) Műveletek üres mátrixokkal, vagy különböző méretűekkel
3) Mátrix adott pozíciójú értékének lekérdezése és megváltoztatása.
a) Fő/mellékátlóra eső elem lekérdezése és megváltoztatása
b) Fő/mellékátlón kívüli elem lekérdezése és megváltoztatása

You might also like