Příklady ke zkoušce

Site: Moodle ZČU
Course: KPV/TI Technická informatika ve strojírenství - cvičení
Book: Příklady ke zkoušce
Printed by: Gast
Date: Sunday, 8 November 2026, 5:20 PM

Description

Pozn. Kurzívou jsou označena místa, která je třeba doprogramovat. Pokud není řečeno jinak, všechny matice jsou čtvercové. Pole jsou obvykle do podprogramů předávána hodnotou, pokud jsou předávána odkazem, pak je to výslovně uvedeno.

1. Náhodná čísla

Náhodná proměnná

  • Deklarace a inicializace:

Random rnd = new Random();

  • Přiřazení celočíselné náhodné hodnoty 0 ÷ 99 např. proměnné i datového typu int:

int i = rnd.Next(0, 100);

  • Získání reálné náhodné hodnoty 0.000 ÷ 99.99 např. pro proměnnou x datového typu double:

double x = (double) rnd.Next(0, 10000) / 100;






2. Textový řetězec

  • Kolikrát je písmeno v řetězci:

static int KolikVyskytu(char c, string s)
{
    Deklarovat a nulovat celočíselnou proměnnou pocet
    Pro indexy od 0 do délky řetězce - 1
        Je-li (zadaný znak roven znaku v řetězci na pozici indexu), navýšit pocet
    Navrátit pocet
}


3. Vektor

Následující kapitoly Vám pomohou ozřejmit si principy některých příkladů zabývajícími se vektory.

3.1. Přístup k prvkům vektoru

  • Práce se všemi prvky vektoru:

for (int i = 0; i<n; i++)
{ 
    // zde něco s A[i] 
}




3.2. Plnění vektoru

  • Plnění z konzole celočíselnou hodnotou:

Pro všechny indexy vektoru
{
    Console.Write("[{0}] = ", i);
    if (!int.TryParse(Console.ReadLine(), out d))
        // Při chybě vstupu se zapíše 0
        Console.WriteLine("Fuj");   
    A[i] = d;
}

  • Plnění náhodnou hodnotou 0 ÷ 99:
Deklarace a inicializace náhodné proměnné
Pro všechny indexy vektoru
{
    A[i] = další náhodná proměnná (0, 100);
}

  • Plnění vektoru prvočísly:

Naprogramovat metodu na test prvočísla
p = 1;
Naprogramovat metodu DalsiPrvo na nalezení dalšího nejbližšího vyššího prvočísla 
Pro všechny indexy vektoru
    A[i] = DalsiPrvo(ref p);

  • Plnění vektoru Fibonacciho posloupností:

static int Fibo(int n)
{
    Pokud je n == 0, pak se navrací 1
    Pokud je n == 1, pak se navrací 1
        // Rekurse
        Navrací se Fibo(n - 2) + Fibo(n - 1);  
    Pro všechny indexy vektoru
            A[i] = Fibo(i);
}




3.3. Tisk vektoru

  • Tisk vektoru do řádku:

Odřádkovat
Pro všechny indexy prvků vektoru
    Console.Write("{0}\t", A[i]);
Odřádkovat

  • Tisk vektoru do sloupce:

Odřádkovat
Pro všechny indexy prvků vektoru
    Console.Write("{0}\n", A[i]);
Odřádkovat


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

  • Cyklický posun vektoru vpravo:

static void PosunVpravo(int n, int[] a)
{
    Deklarovat pomocnou proměnnou a naplnit ji posledním prvkem vektoru
    Pro indexy prvků vektoru od posledního prvku do prvku za počátečním prvkem vektoru
        Do aktuálního prvku vektoru ulož hodnotu předchozího prvku
    Do nultého prvku vektoru uložit pomocnou proměnnou
}

  • Cyklický posun vektoru vlevo:

static void PosunVlevo(int n, int[] a)
{
    Deklarovat pomocnou proměnnou a naplnit ji počátečním prvkem vektoru
    Pro indexy prvků od počátečního prvku do předposledního prvku vektoru
        Do aktuálního prvku vektoru ulož hodnotu následujícího prvku
    Do posledního prvku vektoru uložit pomocnou proměnnou
}

  • Seřadit vektor vzestupně:

static void SeraditVektor(int n, int[] a)
{
    Deklarovat pomocnou celočíselnou proměnnou a booleovskou proměnnou
    Provádět tak dlouho, dokud booleovská proměnná bude nabývat true
        Nastavit booleovskou proměnnou na false
        Pro indexy prvků pole od posledního prvku do prvku za počátečním prvkem
            Je-li hodnota aktuálního prvku pole vyšší než hodnota následujícího prvku, nastavit booleovskou proměnnou na true a pomocí pomocné proměnné zaměnit obě hodnoty vektoru
}


4. Matice

Následující kapitoly Vám pomohou ozřejmit si principy některých příkladů zabývajícími se maticemi.

4.1. Přístup k prvkům matice

Čtvercová matice

  • Práce se všemi prvky matice:
for (int i = 0; i < n; i++)
{
    for (int j = 0; j < n; j++)
    {
        Zde něco s A[i, j]
    }
}
  • Práce s hlavní diagonálou:
for (int i = 0; i < n; i++
{
    Zde něco s A[i, i]
}

nebo:

for (int i = 0; i < n; i++)
{
    for (int j = 0; j < n; j++)
    {
        if (i == j)
        {
            Zde něco s A[i, j]
        }
    }
}
  • Práce s vedlejší diagonálou:

for (int i = 0; i < n; i++)
{
    Zde něco s A[i, n-1-i]
}

  • Práce s prvky nad hlavní diagonálou:
for (int i = 0; i < n; i++) 
{ 
    for (int j = i + 1; j < n; j++)
    {
        Zde něco s A[i, j]
    }
}
  • Práce s prvky pod hlavní diagonálou:
//Práce s prvky pod hlavní diagonálou
for (int i = 1; i < n; i++)
{
    for(int j = 0; j < i; j++)
    {
        Zde něco s A[i, j]
    }
}
  • Práce s prvky nad vedlejší diagonálou:
for (int i = 0; i < n - 1; i++)
{
    for (int j = 0; j < n - 1; j++)
    {
        Zde něco s A[i, j]
    }
}
  • Práce s prvky pod vedlejší diagonálou:
for (int i = 1; i < n; i++)
{
    for (int j = n - i; j < n; j++)
    {
        Zde něco s A[i, j]
    }
}
  • Práce se svislou osou:

for (int i = 1; i < n; i++)
{
    Zde něco s A[i, n/2]
}

  • Práce se vodorovnou osou:
for (int i = 1; i < n; i++)
{
    Zde něco s A[n/2,i]
}



4.2. Plnění matice

  • Plnění matice náhodnou celočíselnou proměnnou:

Deklarace a inicializace náhodné proměnné
Pro všechny indexy řádků
    Pro všechny indexy sloupců
        {
            // Náhodná čísla 0 .. 99 včetně
            A[i, j] = další náhodná proměnná(0, 100);	
        }

  • Plnění matice z konsole:

int d;
Pro všechny indexy řádků
    Pro všechny indexy sloupců
{
    Console.Write("[{0},{1}] = ", i, j);
    if (!int.TryParse(Console.ReadLine(), out d))
        // Při chybě vstupu se zapíše 0
        Console.WriteLine("Fuj");   
    A[i, j] = d;
}

  • Plnění matice jako britskou vlajku:

Pro všechny indexy řádek
    Pro všechny indexy sloupců
        Nulovat prvek matice
Pro index 0 - rozměr matice-1
{Prvky
    // Rameno svatoondřejského kříže
    Hlavní diagonála = 1;   
    // Rameno svatoondřejského kříže
    Vedlejší diagonála = 1;
    // Svislé rameno svatojiřského kříže
    Svislá osa = 1;                
    // Vodorovné rameno svatojiřského kříže
    Vodorovná osa = 1;                
}

  • Jedničky do obou diagonál, jinak nuly:

Pro všechny indexy řádků
    Pro všechny indexy sloupců
        Pokud leží prvek na hlavní nebo vedlejší diagonále potom do něj uložit 1, jinak 0

nebo:

Dvojitým cyklem vše vynulovat, potom jednoduchým cyklem nastavit 1 na diagonálách

  • Nuly a jedničky do matice jako šachovnice:

Pro všechny indexy řádků
    Pro všechny indexy sloupců
        Jsou možná řešení: 
        a) Pokud je součet indexů sudý, potom do prvku matice 0, jinak 1
        b) Na lichých řádcích a lichých sloupcích nebo na sudých řádcích a sudých sloupcích 0, jinak 1

4.3. Tisk matice

  • Tisk reálné matice s nadpisem:

Tisk řetězce s nadpisem a odřádkováním
Pro všechny indexy řádků
    {
        Pro všechny indexy sloupců
            Console.Write("{0:N3}\t", A [i, j]);
        Odřádkování na konci každého řádku
    }
Odřádkování


4.4. Operace s prvky - lehčí příklady

  • Maximum v reálné matici:

double m;
// m ... libovolný prvek                           
m = libovolný prvek matice např. levý horní
Pro všechny indexy řádků
    Pro všechny indexy sloupců
        Je-li (m < prvek na pozici [i, j]), pak do m ulož prvek na pozici [i, j]
Navrátit m

  • Průměr prvků reálné matice:
double m = 0;
Pro všechny indexy řádek
    Pro všechny indexy sloupců
        Přičíst prvek v pozici[i, j] do m
Navrátit podíl m a druhé mocniny rozměru matice

  • Z celočíselné matice vytvořit boolovskou, false pro liché, true pro sudé:

static void CopyIPoleToBPole(int n, int[,] iPole, bool[,] bPole)
{
    Pro všechny indexy řádků
        Pro všechny indexy sloupců
            Jsou 3 možnosti:
            a)	bPole[i, j] = iPole[i, j] % 2 == 0;
            b)	bPole[i, j] = (iPole[i, j] % 2 == 0) ? true : false;
            c)	if (iPole[i, j] % 2 == 0) bPole[i, j] = true; else BPole[i, j] = false;
}
  • Záměna řádek v matici (první za druhý):

static void ZamenRadky(int n, int[,] a, int prvy, int druhy)
{
    int t;
    Pro všechny indexy sloupců i
    {
        t = prvek ve sloupci i prvního řádku
        prvek ve sloupci i prvního řádku = prvek ve sloupci i druhého řádku
        prvek ve sloupci i druhého řádku = t;
    }
}

  • Zjištění počtu sudých prvků v matici:

int k = 0;
Pro všechny indexy řádků
    Pro všechny indexy sloupců
        Je-li prvek matice sudý, pak navýšit k
Navrátit k

  • Průměr z prvků mimo diagonály:

// kolik ... počet prvků mimo diagonály
Deklarovat a nulovat kolik
// m ... součet hodnot prvků mimo diagonály
Deklarovat a nulovat m	
Pro všechny indexy řádků
    Pro všechny indexy sloupců
        Je-li prvek mimo diagonály, pak přičíst hodnotu prvku do m a navýšit kolik
Je-li kolik různé od nuly, navrátit podíl m a kolik, jinak navrátit nulu

  • Součet matic:
static void SectiMatice(int n, int[,] iPole, int[,] iPole1, int[,] iPole2)
{
    Pro všechny indexy řádků
        Pro všechny indexy sloupců
            Do prvku matice iPole naplnit součet prvků matice iPole1 a iPole2 v odpovídající pozici
}

  • První a druhá nejvyšší hodnota v celočíselné matici:

static (int, int) PrvniADruhaNejvyssi(int n, int[,] a)
{
    Deklarovat prvni a naplnit prvkem z a[0, 0]    // nebo kterýkoliv jiný
    Deklarovat druha a naplnit hodnotou nejmenšího celého čísla
 
    Pro všechny indexy řádků
        Pro všechny indexy sloupců
            Je-li (prvni < prvek matice), pak prvni = prvek matice
    Pro všechny indexy řádků
        Pro všechny indexy sloupců
            Je-li (druha < prvek matice && prvek matice < prvni), pak druha = prvek matice
    Navrátit prvni a druha
}

  • Kolik je prvočísel v matici:

Naprogramovat test na prvočíslo
static int KolikVyskytu(int n, int[,] a)
{
    Deklarovat a nulovat pocet
    Pro všechny indexy řádků
        Pro všechny indexy sloupců
            Je-li hodnota prvku prvočíslo, pak navýšit pocet
    Navrátit pocet
}

  • Je součet hodnot na hlavní diagonále větší než na vedlejší:
Deklarovat a nulovat soucetNaHlavni a soucetNaVedlejsi
Pro hodnoty indexu od 0 do rozměru matice – 1
    Přičíst hodnotu prvku na hlavní diagonále do soucetNaHlavni
    Přičíst hodnotu prvku na vedlejší diagonále do soucetNaVedlejsi
Navrátit true, pokud soucetNaHlavni je větší než soucetNaVedlejsi, jinak navrátit false

  • Je součet hodnot na lichých řádcích a lichých sloupcích matice větším, než součet na sudých řádcích a sudých sloupcích:

Deklarovat a nulovat lichlich a sudsud
Pro všechny indexy řádků
    Pro všechny indexy sloupců
        Je-li index řádku lichý a index sloupce lichý, pak navýšit lichlich o hodnotu prvku matice
        Je-li index řádku sudý a index sloupce sudý, pak navýšit sudsud o hodnotu prvku matice
Navrátit true, pokud je lichlich větší než sudsud, jinak navrátit false







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
}