HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Művelet mátrixokkal


Példaprogram letöltése

8536 bájt

Készítünk egy alkalmazást, amely segítségével maximum 5x5-ös méretű mátrixokon végezhetjük el az összeadás, kivonás, szorzás számmal, valamint a mátrix szorzása mátrixszal műveleteket.

A mátrix műveleteknél két fontos szabály:
Két mátrixon az összeadás és a kivonás művelete csak akkor végezhető el, ha azok azonos méretűek.
A és B mátrixok között a szorzás művelete csak akkor értelmezhető, ha A-nak ugyanannyi oszlopa van, mint ahány sora B-nek.
Alkalmazásunk Form-ján 3 db 5x5–ös mátrixra van szükségünk, amelyeket TextBox kontrolok segítségével jelenítünk meg. A TextBox-okat dinamikusan hozzuk létre a Form1 Load eseményében. A létrehozott kontrolokat egy-egy ArrayList objektumba fűzzük fel.
private ArrayList mt1 = new ArrayList();
...
for (int i = 0; i <= 4; i++)
  for (int j = 0; j <= 4; j++)
  {
    TextBox t = new TextBox();
    t.Parent = this;
    t.Left = 8 + j * 33;
    t.Top = 33 + i * 21;
    t.Width = 33;
    t.Text = (i + j).ToString();
     mt1.Add(t);
  }
A négy végrehajtható műveletet a megfelelő nyomógombok Click eseményeiben programozzuk le.
Az első lépés mind a négy műveletnél közös. Törölnünk kell az eredménymátrix tartalmát.
TextBox t;
for (int i = 0; i < 25; i++)
{
  t = (TextBox) mt3[i];
  t.Text = "";
}
Összeadásnál és kivonásnál a két mátrix megfelelő indexű elemeit össze kell adnunk, vagy ki kell vonnunk egymásból.
Ha mátrixot szorzunk számmal, akkor csak az első mátrixra van szükségünk. Minden egyes elemét meg kell szoroznunk a megadott számmal, külön-külön. Az eredmény mátrix mérete megegyezik az alapmátrixéval.
A legbonyolultabb művelet, hogy mátrixot szorozzunk mátrixszal.
Ebben az esetben meg kell határoznunk a két mátrix sorainak és oszlopainak számát. A szorzás csak a fentebb említett szabály teljesülésekor végezhető el.
A szorzás elvégzéséhez három egymásba ágyazott for ciklusra van szükségünk.
if (maxColumn1 > -1 && maxRow1 > 0)
{
  for (int i = 0; i <= maxRow1; i++)
    for (int j = 0; j <= maxColumn2; j++)
    {
      double sum = 0;
      for (int k = 0; k <= maxColumn1; k++)
      {
        double d =0;
        t = (TextBox) mt1[i * 5 + k];
        d = Convert.ToDouble(t.Text);
        t = (TextBox) mt2[k * 5 + j];
        sum += d * Convert.ToDouble(t.Text);
        t = (TextBox) mt3[i * 5 + j];
        t.Text = sum.ToString();
      }
    }
}

Könyv
Ez a cikk megtalálható ebben a könyvben: C# Software Offline 2003 évkönyv 549. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |