4. Matice

4.5. Operace s prvky - těžší příklady

  • Násobení matic:
static void NasobMatice(int n, int[,] iPole, int[,] iPole1, int[,] iPole2)
{
    Pro všechny indexy řádků výsledné matice iPole
        Pro všechny indexy sloupců výsledné matice iPole
            // Hodnota prvku výsledku je skalárním součinem řádku první matice a sloupce druhé matice
            Deklarovat a nulovat soucet
            Pro všechny indexy od 0 do rozměru matice - 1
                Do soucet přičíst postupně součin hodnoty prvku na řádku první matice a hodnoty sloupce druhé matice, hodnoty indexu řádku první matice odpovídá řádku výsledku a hodnota sloupce druhé matice je rovna sloupci výsledku
                Zapsat soucet do prvku výsledku
}
  • Překlopení podle hlavní diagonály:
static void HlTransMat(int n, ref int[,] a)
{
    Deklarace a vymezení pomocného dvourozměrného pole
    Pro všechny indexy řádků matice a
        Pro všechny indexy sloupců matice a
            Překopírovat prvek matice do pomocné matice tak, že se při kopírování zamění řádky a sloupce, např. pomPole[j, i] = a[i, j]
    Parametr pro předání pole odkazem změnit na pomocné pole, původní pole automaticky zmizí
}
  • Překlopení podle vedlejší diagonály:

static void VedTransMat(int n, ref int[,] a)
{
   Deklarace a vymezení pomocného dvourozměrného pole pomPole
   Pro všechny indexy řádků matice a         Pro všechny indexy sloupců matice a             Překopírovat prvek matice do pomocné matice tak, že se při kopírování šikovně zamění řádky a sloupce, např. pomPole[n - j - 1, n - i - 1] = a[i, j]     Parametr pro předání pole odkazem změnit na pomocné pole, původní pole automaticky zmizí }

  • Otočit matici vlevo:

static void OtocVlevoMat(int n, ref int[,] a)
{
Deklarace a vymezení pomocného dvourozměrného pole pomPole     Pro všechny indexy řádků matice a         Pro všechny indexy sloupců matice a             Překopírovat prvek matice do pomocné matice tak, že se při kopírování šikovně zamění řádky a sloupce, např. pomPole[n - j - 1, i] = a[i, j]     Parametr pro předání pole odkazem změnit na pomocné pole, původní pole automaticky zmizí }

  • Otočit matici vpravo:

static void OtocVpravoMat(int n, ref int[,] a)
{
Deklarace a vymezení pomocného dvourozměrného pole pomPole     Pro všechny indexy řádků matice a         Pro všechny indexy sloupců matice a             Překopírovat prvek matice do pomocné matice tak, že se při kopírování šikovně zamění řádky a sloupce např. pomPole[j, n - i - 1] = a[i, j]     Parametr pro předání pole odkazem změnit na pomocné pole, původní pole automaticky zmizí }

  • Překlopit matici podle svislé osy:
//Překlopit matici podle svislé osy
static void PreklopenaSvisle(int n, ref int[,] a)
{
Deklarace a vymezení pomocného dvourozměrného pole pomPole     Pro všechny indexy řádků matice a         Pro všechny indexy sloupců matice a             Zrcadlově se kopírují řádky, např. PomPole[i, n - j - 1] = a[i, j]     Parametr pro předání pole odkazem změnit na pomocné pole, původní pole automaticky zmizí }

  • Překlopit matici podle vodorovné osy:

static void PreklopenaVodorovne(int n, ref int[,] a)
{
Deklarace a vymezení pomocného dvourozměrného pole pomPole     Pro všechny indexy řádků matice a         Pro všechny indexy sloupců matice a             Zrcadlově se kopírují sloupce, např. PomPole[n - i - 1, j] = a[i, j]     Parametr pro předání pole odkazem změnit na pomocné pole, původní pole automaticky zmizí }

  • Vytvořit matici z jiné jako součet liché a sudé řádky:

static void SoucetLichaSuda(int n, int[,] a, int[,] b)
{
    Pro všechny liché indexy řádků matice a
        Pro všechny indexy sloupců matice a
            Do matice b se pro řádku s polovičním indexem matice se sečtou hodnoty prvku na řádce a s hodnotou prvku na následující řádce, např. b[i / 2, j] = a[i, j] + a[i + 1, j]
}

  • Vytvořit matici z jiné vynecháním sudých řádek:

static void VynechSude(int n, int[,] a, int[,] b)
{
    Pro všechny liché indexy řádků matice a
        Pro všechny indexy sloupců matice a
            Do matice b se pro řádku s polovičním indexem matice se nakopírují hodnoty na řádce a např. b[i / 2, j] = a[i, j])
}

  • Spočítat kolik hodnot v matici je v zadaných mezích:

static int VMezich(int n, int[,] a, int d, int h)
{
    Deklarovat a nulovat pocet
        Pro všechny indexy řádků matice a
            Pro všechny indexy sloupců matice a
                Je-li prvek matice mezi d a h včetně mezí, inkrementovat pocet 
    Navrátit pocet
}

  • Spočítat, kolik hodnot v matici je bezezbytku dělitelných zadanou hodnotou:

static int BezeZbytkuDelitelne(int n, int[,] a, int h)
{
    Deklarovat a nulovat kolik
    Pro všechny indexy řádků matice a
        Pro všechny indexy sloupců matice a
            Je-li prvek matice dělitelný h, navýšit kolik
    Navrátit kolik
}

  • Výpočet vektoru řádkových součtů:
static void RadkoveSoucty(int n, int[,] a, int[] v)
{
    Pro všechny indexy řádků matice a
        Nulovat prvek výstupního vektoru v s daným indexem 
        Pro všechny indexy sloupců matice a 
            Navýšit hodnotu prvku vektoru o hodnotu prvku matice
}

  • Rozhodnout zda součet řádkových maxim je větší než zadaná hodnota:

static bool RozhodniSoucetMaximRadek(int n, int[,] a, int prah)
{
    Deklarovat a nulovat suma
    Deklarovat pomocný vektor v
    Pro všechny indexy řádků matice a
        Nulovat prvek vektoru a indexem řádky matice
        Pro všechny indexy sloupců matice a
            Je-li hodnota prvku matice větší než hodnota prvku vektoru s indexem řádky matice, naplnit prvek vektoru hodnotou prvku matice
        Navýšit suma o hodnotu prvku vektoru
    Navrátit true, pokud je suma větší než prah, jinak false
}

  • Spočítat, počet prvočísel nad hl. diagonálou a počet prvočísel nad vedlejší diagonálou:

static void PrvoNadDiag(int n, int[,] a, out int prvonadhl, out int prvonadvedl)
{
    Nulovat prvonadhl a prvonadvedl
    Pro všechny prvky matice 
        Je-li prvek matice nad hlavní diagonálou a je prvočíslem
            Navýšit prvonadhl
        Je-li prvek matice nad vedlejší diagonálou a je prvočíslem 
            Navýšit prvonadvedl
}