Příklady ke zkoušce
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 }