Dané dvourozměrné pole reálných čísel. Příklady řešení úloh s dvourozměrnými poli, úlohy pro nezávislé řešení Zadané dvourozměrné pole celých čísel

Další várka počítačových úkolů pro školáky dorazila včas. Tentokrát se podíváme na práci s dvourozměrnými poli v C ++. Tyto úkoly jsou docela zajímavé. A většina z nich se mi líbila.

Problém číslo 1

Najděte indexy prvního výskytu maximálního prvku.
Formát vstupních dat
Program obdrží jako vstup rozměry pole n a m, pak n řádků s m čísly v každém. n a m nepřesahují 100.
Výstupní formát dat
Vytiskněte dvě čísla: číslo řádku a číslo sloupce, ve kterém je největší prvek dvourozměrné pole... Pokud je takových prvků více, zobrazí se ten s nižším číslem řádku, a pokud jsou čísla řádků stejná, pak ten s nižším číslem sloupce.

Ukázkový vstup: 3 4 0 3 2 4 2 3 5 5 5 1 2 3 Ukázkový výstup: 1 2

#zahrnout pomocí jmenného prostoru std; int main () (int n, m; cin >> n >> m; int a; // čtení pro (int i = 0; i< n; i++) { for (int j = 0; j < m; j++) { cin >> a [i] [j]; )) int max = a, max_i = 0, max_j = 0; for (int i = 0; i< n; i++) { for (int j = 0; j < m; j++) { if (a[i][j] >max) (max = a [i] [j]; max_i = i; max_j = j;))) cout<< max_i << " " << max_j; return 0; }

Problém číslo 2

Je vám přiděleno liché číslo n nepřesahující 15. Vytvořte dvourozměrné pole n × n prvků a vyplňte ho "." (každý prvek pole je jeden znakový řetězec). Poté vyplňte prostřední řádek pole, střední sloupec pole, hlavní úhlopříčku a boční úhlopříčku znaky "*". Výsledkem je, že "*" v poli by měl tvořit obrázek s hvězdičkou. Vytiskněte výsledné pole na obrazovku a oddělte prvky pole mezerami.

Ukázkový vstup: 5 Ukázkový výstup: * . * . * . * * * . * * * * * . * * * . * . * . *

#zahrnout pomocí jmenného prostoru std; int main () (int n; cin >>< n; i++) { for (int j = 0; j < n; j++) { if (i == j || i == n - 1 - j || i == n / 2 || j == n / 2) a[i][j] = 1; else a[i][j] = 0; } } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (a[i][j] == 0) cout << "." << " "; else cout << "*" << " "; } cout << endl; } return 0; }

Problém číslo 3

Je vám přiděleno číslo n nepřesahující 100. Vytvořte pole n × n a vyplňte jej podle následujícího pravidla. Hlavní úhlopříčka by měla obsahovat čísla 0. Na dvou úhlopříčkách sousedících s hlavní jsou čísla 1. Na dalších dvou úhlopříčkách čísla 2 a tak dále.

Ukázkový vstup: 5 Ukázkový výstup: 0 1 2 3 4 1 0 1 2 3 2 1 0 1 2 3 2 1 0 1 4 3 2 1 0

#zahrnout #zahrnout pomocí jmenného prostoru std; int main () (int n; cin >> n; int a; // zpracování pro (int i = 0; i< n; i++) { for (int j = 0; j < n; j++) { a[i][j] = (int) abs(i - j); } } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { cout << a[i][j] << " "; } cout << endl; } return 0; }

Problém číslo 4

Je dáno dvourozměrné pole a dvě čísla: i a j. Prohoďte sloupce očíslované iaj v poli.
Formát vstupních dat
Program obdrží jako vstup velikost pole n a m nepřesahující 100, poté prvky pole a poté čísla i a j.
Výstupní formát dat
Vypište výsledek.

Ukázkový vstup: 0 1 Ukázkový výstup: 12 11 13 14 22 21 23 24 32 31 33 34

#zahrnout #zahrnout pomocí jmenného prostoru std; int main () (int n, m, x, y, teplota; cin >> n >>< n; i++) { for (int j = 0; j < m; j++) { cin >> a [i] [j]; )) cin >> x >> y; // zpracování pro (int i = 0; i< n; i++) { temp = a[i][x]; a[i][x] = a[i][y]; a[i][y] = temp; } // вывод for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { cout << a[i][j] << " "; } cout << endl; } return 0; }

Problém číslo 5

Dostanete číslo n nepřesahující 10 a pole n × n. Zkontrolujte, zda je toto pole symetrické k hlavní diagonále. Vytiskněte slovo „ANO“, pokud je pole symetrické, jinak vytiskněte slovo „NE“.

Ukázkový vstup: 3 0 1 2 1 2 3 2 3 4 Ukázkový výstup: ANO

#zahrnout #zahrnout pomocí jmenného prostoru std; int main () (int n; boolův symetrický; cin >> n; int a; // vyplnění (int i = 0; i< n; i++) { for (int j = 0; j < n; j++) { cin >> a [i] [j]; )) // zpracování symetrický = true; for (int i = 0; i< n; i++) { for (int j = 0; j < n; j++) { if (a[i][j] != a[j][i]) symmetric = false; } } // вывод if (symmetric) cout << "YES"; else cout << "NO"; return 0; }

Problém číslo 6

Dostanete čtvercové dvourozměrné pole o velikosti n × n a čísle k. Vytiskněte prvky k-té úhlopříčky pod hlavní úhlopříčku (tj. pokud k = 1, pak je třeba vytisknout prvky první úhlopříčky ležící pod hlavní, pokud k = 2, pak druhou úhlopříčku atd.).
Hodnota k může být záporná, například pokud k = −1, pak je třeba vypsat hodnotu první úhlopříčky ležící nad hlavní. Pokud k = 0, musíte zobrazit prvky hlavní diagonály.
Program obdrží jako vstup číslo n nepřesahující 10, potom pole n × n a potom číslo k.

Ukázkový vstup 1: 4 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 1 Ukázkový výstup 1: 5 1 6 Ukázkový vstup 2: 4 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 -2 Ukázkový výstup 2: 3 8

#zahrnout pomocí jmenného prostoru std; int main () (int n, k; cin >> n; int a [n] [n]; // vyplnění (int i = 0; i< n; i++) { for (int j = 0; j < n; j++) { cin >> a [i] [j]; )) cin >> k; // zpracování a výstup pro (int i = 0; i< n; i++) { for (int j = 0; j < n; j++) { if (i - j - k == 0) cout << a[i][j] << " "; } } return 0; }

Problém číslo 7

Získáte n × m dvourozměrné pole (n a m nepřesahují 1000). Pole symetrické k ní vzhledem k hlavní diagonále se nazývá transponované na danou. Má rozměry m × n: řádky původního pole se stanou sloupci transponovaného pole, sloupce původního pole se stanou řádky transponovaného pole.
Pro dané pole vytvořte transponované pole a zobrazte jej.

Ukázkový vstup: 3 4 11 12 13 14 21 22 23 24 31 32 33 34 Ukázkový výstup: 11 21 31 12 22 32 13 23 33 14 24 34

#zahrnout pomocí jmenného prostoru std; int main () (int n, m, x, y, teplota; cin >> n >>< n; i++) { for (int j = 0; j < m; j++) { cin >> < n; i++) { for (int j = 0; j < m; j++) { b[j][i] = a[i][j]; } } // вывод for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { cout << b[i][j] << " "; } cout << endl; } return 0; }

Problém číslo 8

Kino má n řad po m sedadlech (počet n a m nepřesahuje 20). Informace o prodaných vstupenkách jsou uloženy v dvourozměrném poli, číslo 1 znamená, že vstupenka na toto místo je již prodána, číslo 0 znamená, že místo je volné. Je zde požadavek na prodej k vstupenek na sousední sedadla ve stejné řadě. Zjistěte, zda lze takový požadavek splnit.
Formát vstupních dat
Program přijímá čísla n a m jako vstup. Potom následuje n řádků obsahujících m čísel (0 nebo 1), oddělených mezerami. Pak je dáno číslo k.
Výstupní formát dat
Program by měl vytisknout číslo řádku, ve kterém je k po sobě jdoucích volných míst. Pokud existuje několik takových řádků, zadejte číslo nejmenšího vhodného řádku. Pokud žádná vhodná série neexistuje, vytiskněte číslo 0.

Ukázkový vstup: 3 4 0 1 0 1 1 0 0 1 1 1 1 1 2 Ukázkový výstup: 2

#zahrnout pomocí jmenného prostoru std; int main () (int n, m, k, r = 0; cin >> n >> m; int a [n] [m]; // vyplnění (int i = 0; i< n; i++) { for (int j = 0; j < m; j++) { cin >> a [i] [j]; )) cin >> k; // zpracování pro (int i = 0; i< n; i++) { int near_free = 0; for (int j = 0; j < m; j++) { if (a[i][j] == 0) { near_free++; if (near_free == k) { r = i + 1; break; } } else near_free = 0; } if (near_free == k) break; } // вывод cout << r; return 0; }

Problém číslo 9

Dostanete n × m obdélníkové pole. Otočte jej o 90 stupňů ve směru hodinových ručiček a zapište výsledek do nového pole m × n.
Formát vstupních dat
Zadejte dvě čísla n a m, nepřesahující 100, pak pole o velikosti n × m.
Výstupní formát dat
Vytiskněte výsledné pole. Čísla ve výstupu oddělte jednou mezerou.

Ukázkový vstup: 3 4 11 12 13 14 21 22 23 24 31 32 33 34 Ukázkový výstup: 31 21 11 32 22 12 33 23 13 34 24 14

#zahrnout pomocí jmenného prostoru std; int main () (int n, m; cin >> n >> m; int a [n] [m]; int b [m] [n]; // vyplnění (int i = 0; i< n; i++) { for (int j = 0; j < m; j++) { cin >> a [i] [j]; )) // zpracování pro (int i = 0; i< n; i++) { for (int j = 0; j < m; j++) { b[j] = a[i][j]; } } // вывод for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { cout << b[i][j] << " "; } cout << endl; } return 0; }

Problém číslo 10

Vzhledem k číslům n a m vyplňte dvourozměrné pole o velikosti n × m čísly od 1 do n × m „had“, jak je znázorněno v příkladu.
Formát vstupních dat
Zadejte dvě čísla n a m, z nichž každé nepřesahuje 20.
Výstupní formát dat

Ukázkový vstup: 3 5 Ukázkový výstup: 1 2 3 4 5 10 9 8 7 6 11 12 13 14 15

#zahrnout pomocí jmenného prostoru std; int main () (int n, m, c = 0; cin >> n >> m; int a [n] [m]; // zpracování pro (int i = 0; i< n; i++) { for (int j = 0; j < m; j++) { c++; if (i%2 == 0) a[i][j] = c; else a[i] = c; } } // вывод for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (a[i][j] % 10 == a[i][j]) cout << " "; else if (a[i][j] % 100 == a[i][j]) cout << " "; else if (a[i][j] % 1000 == a[i][j]) cout << " "; cout << a[i][j]; } cout << endl; } return 0; }

Problém číslo 11

Vzhledem k číslům n a m vyplňte dvojrozměrné pole n × m čísly od 1 do n × m s „úhlopříčkami“, jak je znázorněno v příkladu.
Formát vstupních dat

Výstupní formát dat
Vytiskněte výsledné pole a přidělte přesně 4 znaky výstupu každého prvku.

Ukázkový vstup: 3 5 Ukázkový výstup: 1 2 4 7 10 3 5 8 11 13 6 9 12 14 15

#zahrnout pomocí jmenného prostoru std; int main () (int n, m, pos = 0, řádek = 0; cin >> n >> m; int a [n] [m]; // zpracování int počáteční_řádek = 0; int číslo = 1; pro ( int min_row = 0; min_row< n; min_row++) { if (min_row >0) počáteční_řada = pozice - 1; else start_row = 0; pro (pos = počáteční_řádek; poz< m; pos++) { row = min_row; for (int col = pos; col >= 0; col--) (pokud (řádek< n) { a = number; number++; row++; } else break; } } } // вывод for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (a[i][j] % 10 == a[i][j]) cout << " "; else if (a[i][j] % 100 == a[i][j]) cout << " "; else if (a[i][j] % 1000 == a[i][j]) cout << " "; cout << a[i][j]; } cout << endl; } return 0; }

Problém číslo 12

Daná čísla n a m. Vyplňte pole n × m v šachovnicovém vzoru: buňky jedné barvy jsou vyplněny nulami a buňky jiné barvy jsou vyplněny přirozenými čísly shora dolů, zleva doprava. Číslo 1 je napsáno v levém horním rohu.
Formát vstupních dat
Zadejte dvě čísla n a m, nepřesahující 100.
Výstupní formát dat
Vytiskněte výsledné pole a přidělte přesně 4 znaky výstupu každého prvku.

Ukázkový vstup: 3 5 Ukázkový výstup: 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8

#zahrnout pomocí jmenného prostoru std; int main () (int n, m, sm; cin >> n >> m; int a [n] [m]; // zpracování int číslo = 1; for (int i = 0; i< n; i++) { for (int j = 0; j < m; j++) { a[i][j] = 0; } } for (int i = 0; i < n; i++) { if (i % 2 == 1) sm = 1; else sm = 0; for (int j = sm; j < m; j++) { a[i][j] = number; number++; j++; } } for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (a[i][j] % 10 == a[i][j]) cout << " "; else if (a[i][j] % 100 == a[i][j]) cout << " "; else if (a[i][j] % 1000 == a[i][j]) cout << " "; cout << a[i][j]; } cout << endl; } return 0; }

Problém číslo 13

Vzhledem k číslům n a m vyplňte dvourozměrné pole n × m čísly od 1 do n × m ve spirále začínající v levém horním rohu a stočené ve směru hodinových ručiček, jak je znázorněno v příkladu.
Formát vstupních dat
Zadejte dvě čísla n a m, nepřesahující 100.
Výstupní formát dat
Vytiskněte výsledné pole a přidělte přesně 4 znaky výstupu každého prvku.

Ukázkový vstup: 4 5 Ukázkový výstup: 1 2 3 4 5 14 15 16 17 6 13 20 19 18 7 12 11 10 9 8

#zahrnout pomocí jmenného prostoru std; int main () (int n, m; cin >> n >> m; int a; for (int i = 0; i<= n + 1; i++) { for (int j = 0; j <= m + 1; j++) { a[i][j] = -1; } } for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { a[i][j] = 0; } } int num = 0, row = 1, col = 0; while (num < n * m) { while (a == 0) { col++; num++; a = num; } while (a == 0) { row++; num++; a = num; } while (a == 0) { col--; num++; a = num; } while (a == 0) { row--; num++; a = num; } } for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { if (a[i][j] % 10 == a[i][j]) cout << " "; else if (a[i][j] % 100 == a[i][j]) cout << " "; else if (a[i][j] % 1000 == a[i][j]) cout << " "; cout << a[i][j]; } cout << endl; } return 0; }

0 0

Pro zobrazení prosím povolte JavaScript
  • vzdělávací: přispět k vytvoření představy o dvourozměrném poli a základních vlastnostech čtvercových matic; zvážit akce, které lze na matricích provádět; seznámit se s typickými algoritmy pro zpracování matic v jazyce Pascal; vytvořit podmínky pro utváření schopnosti řešit algoritmy s dvourozměrnými poli;
  • rozvíjející se:
  • vytvářet podmínky pro rozvoj dovedností pracovat ve vymezeném časovém úseku, rozvoj dovedností pro samostatnou práci, rozvoj dovedností pracovat s poznámkami.
  • vzdělávací:
  • podporovat vytváření psychické pohody pro práci ve třídě, posilování vyrovnanosti, odpovědného přístupu k práci a zvyšování motivace ke vzdělávací činnosti.

Typ lekce: kombinovaná.

Vyučovací metody: přednáška, samostatná práce.

Formy organizace: frontální práce, individuální práce.

Vybavení: úkoly pro práci ve třídě (samostatné kartičky, zadání na počítači), poznámky na tabuli.

Během lekcí:

1. Organizační moment.

Pozdravy.
Téma je nahlášeno.
Stanovte si cíl lekce a úkoly.

2. Aktualizace získaných znalostí

Hlavní body předchozího tématu jsou vysloveny ústně: „Jednorozměrná pole“. Frontální mini průzkum o základních definicích.

3. Stanovení cílů, stanovení cílů:

  • definovat koncept dvourozměrného pole;
  • zvažte formu zápisu dvourozměrného pole
  • zvážit základní vlastnosti čtvercových matic;
  • zvážit akce, které lze na matricích provádět;
  • seznámit se s typickými algoritmy pro zpracování matic v jazyce Pascal;
  • vytvořit podmínky pro utváření schopnosti řešit algoritmy s dvourozměrnými poli;
  • 4. Přednáška

    Definice.

    Dvourozměrné pole je soubor dat, z nichž každá hodnota závisí na dvou číslech, která si lze představit jako index sloupce v matici.

    Formát záznamu

    <имя>: pole[n_index_1..in_index_1, n_index_2 ..in_index_2] z <тип>

    A: pole celých čísel;

    Chcete-li použít prvek pole, musíte zadat název pole a index prvku. První index odpovídá číslu řádku, druhý číslu sloupce. Například:

    pro i: = 1 až n do
    pro j: = 1 až n do
    a: = náhodný (100);

    Při inicializaci dvourozměrných polí je každý řádek uzavřen v dalším páru závorek:

    const a: mas = ((2,3,1,0),
    (1,9,1,3),
    (3,5,7,0));

    Matice jsou analogické s Pascalovými poli v matematice. Matice, jejíž počet řádků se rovná počtu sloupců, se nazývá čtvercová. A (n, n) - čtvercová matice

    Základní vlastnosti čtvercových matic:

    1. Čtvercové matice mají hlavní a boční úhlopříčky. Například pro matici A obsahuje hlavní diagonála prvky 1, 5 a 9 a vedlejší diagonála obsahuje prvky 3, 5 a 7.

    i = j - prvky jsou umístěny na hlavní diagonále;
    i> j - prvky jsou umístěny pod hlavní diagonálou;
    i j - prvky jsou umístěny na hlavní diagonále a pod;
    i + j = n + 1– prvky jsou umístěny na boční diagonále;
    i + j< n+1– элементы расположены над побочной диагональю;
    i + j> n + 1– prvky jsou umístěny pod boční diagonálou;

    2. Čtvercová matice, ve které jsou všechny prvky, kromě prvků hlavní diagonály, rovny nule, se nazývá diagonální matice

    3. Volá se diagonální matice, ve které jsou všechny prvky na hlavní diagonále rovny 1 jednotková matice

    4. Pokud se v matici A (m, n) zamění řádky a sloupce, získá se matice A t (m, n), která se nazývá transponovaná matice.

    Základní akce, které lze na matricích provádět

    • shrnout;
    • Najdi rozdíl;
    • součin matice nějakým číslem;
    • součin dvou matric.

    Typické algoritmy pro zpracování matic v jazyce Pascal

    1. Maticový výstup ve formě tabulky:
    2. pro i: = 1 až n do
      začít
      pro j: = 1 až m do
      napsat (a: 4);
      napsáno
      konec;

    3. Použití generátoru náhodných čísel:
    4. randomizovat;
      pro i: = 1 až m do
      začít
      pro j: = 1 až n do
      začít
      a: = náhodný (100) -10;
      napsat (a: 4);
      konec;
      writeln;
      konec;

    5. 2. způsob výstupu matice ve formě tabulky:
    6. pro i: = 1 až n do
      pro j: = 1 až m do
      pokud j> m, pak napište (a: 4)
      else writeln (a: 4);

    7. Součet matic:
    8. pro i: = 1 až n do
      začít
      pro j: = 1 až m do
      c: = a + b
      konec;

    9. Maticová transpozice je zrcadlovým odrazem jejích prvků vzhledem k hlavní diagonále. To lze provést zavedením nového pole:

    pro i: = 1 až n do
    pro j: = 1 až n do
    b = a;

    5. Primární řízení

    "Vrstevnicová mapa" 2 možnosti

    Možnost 1

    1. Opravte nepřesnosti v popisu dvourozměrného pole:
    2. Var
      A = pole celých čísel;

      ... ... dvourozměrných polí, každý řádek je uzavřen v dalším páru závorek:

      const a: mas = ((2,3,1,0),
      (1,9,1,3),
      (3,5,7,0));

    3. Vložte chybějící definice:
    4. Hlavní akce, které lze na maticích provádět: sčítání, součin dvou matic,….,….

    5. Vložte chybějící definice:
    6. Matice s počtem řádků rovným počtu sloupců se nazývá…. … ...

    7. Najděte chyby v algoritmu:

    pro i: = 1 až n do
    začít
    pro j: = 1 až m do
    c: = a + a
    konec;

    Možnost 2

    1. Opravte nepřesnosti v popisu pole:

    konst
    n = 4; m = 3;
    typ
    mas: pole celého čísla;

    1. Vložte chybějící definice:
    2. …… je soubor dat, z nichž každá hodnota závisí na dvou číslech, která lze považovat za index sloupce v matici.

    3. Vložte chybějící definice:
    4. Diagonální matice, ve které jsou všechny prvky na hlavní diagonále stejné ... se nazývá jednotková matice

    5. Vložte chybějící definice:
    6. Zavolá se čtvercová matice, ve které jsou všechny prvky kromě prvků hlavní diagonály rovny nule … … .

    7. Najděte chyby v algoritmu:

    randomizovat;
    pro i: = 1 až m do
    začít
    pro j: = 1 až n do
    začít
    a: = náhodný (100) -10;
    konec;
    konec;

    Jaký typický úkol algoritmus provádí?

    Pascalovy algoritmy

    1. Napište program, který pro celočíselnou matici 3x4 určí aritmetický průměr jejích prvků a počet kladných prvků v každém řádku. Dodatek 2
    2. program sred_n;
      const m = 3;
      n = 4;
      var

      i, j, n_pos_el: celé číslo;
      sred: skutečný;
      začít
      pro i: = 1 až m do
      pro j: = 1 až n přečti (a);
      sred: = 0;
      pro i: = 1 až m začíná
      n_pos_el: = 0;
      pro j: = 1 až n do begin
      sred: = sred + a;
      jestliže a> 0 pak inc (n_pos_el);
      konec;
      writeln ("V", i, "- oi zdvih", n_pos_el, "polozitelnix elementov");
      konec;
      sred: = sred / m / n;
      writeln ("Srednee arifmeticheskoe:", sred: 6: 2);
      konec.

    3. Napište program, který pro obdélníkovou celočíselnou matici 3x4 určí číslo sloupce zcela vlevo obsahujícího pouze kladné prvky. Pokud takový sloupec neexistuje, zobrazí se zpráva. Dodatek 3

    program num_posit;
    const m = 3;
    n = 4;
    var
    a: pole celých čísel;
    i, j, num: celé číslo;
    all_posit: boolean;
    začít
    randomizovat;
    pro i: = 1 až m do
    začít
    pro j: = 1 až n do
    začít
    a: = náhodný (100) -10;
    napsat (a: 4);
    konec;
    writeln;
    konec;
    číslo: = 0;
    pro j: = 1 až n do begin
    all_posit: = true;
    pro i: = 1 až m do
    Pokud< 0 then
    začít
    all_posit: = false;
    přestávka; konec;
    if all_posit then begin
    num: = j; přestávka; konec;
    konec;
    pokud num = 0, pak
    writeln ("Takix stolbcov net")
    jiný
    writeln ("Nomer stolbca:", num);
    konec.

    Studenti nahrávají soubory v Pascalu, analyzují zadané algoritmy, prohlížejí si výsledky provádění programu, odpovídají na doplňující otázky:

    1. Jak je organizováno dvourozměrné pole?
    2. Co znamená inc postup?
    3. Co znamená procedura přerušení?
    4. Jak se používá generátor náhodných čísel?

    6. Formování dovedností řešení problémů.

    Řešení problémů na jednotlivých kartách samostatně, v algoritmickém prostředí.

    Příklady úkolů:

    1. Dostanete matici A 5x5 obsahující náhodné prvky. Najděte součet všech prvků matice.
    2. Zobrazte tabulku Pythagoras.
    3. Najděte součet kladných prvků zadaného sloupce matice A 5x5 celých čísel.

    7. Výsledky lekce, zadání domácích úkolů.

    Shrnutí. Posouzení úrovně asimilace.

    D/Z synopse, úkoly:

    Pro všechny:

    1. Dostanete dvourozměrné čtvercové pole. Najděte čísla řádků se všemi prvky rovnými nule.
    2. Dostanete dvourozměrné čtvercové pole. Najděte čísla řádků, prvky v každém z nich jsou stejné.
    3. Určete minimální prvek dvourozměrného pole. Vytiskněte číslo řádku obsahující maximální počet minimálních prvků, pokud existují.
    4. Dané dvourozměrné pole. Najděte řádek s největším a nejmenším součtem položek. Zobrazte nalezené čáry a součty jejich prvků.

    Pro studenty, kteří znají dvourozměrná pole a jak je řešit:

    Místo přednášky - řešení problémů se zvýšenou složitostí.

    Příklady úkolů:

    1. Dané dvourozměrné pole. Transformujte jej podle následujícího pravidla: udělejte řádek N na sloupec N a sloupec na řádek.
    2. Ve dvourozměrném poli X jsou všechna čísla různá. V každém řádku je vybrán minimální prvek a z těchto čísel je vybráno maximum. Vytiskněte číslo řádku pole X, ve kterém se nachází vybrané číslo.
    3. Dané dvourozměrné pole. Najděte největší z hodnot prvků prvního a posledního řádku.
    4. Napište program, který vytiskne dvojrozměrné pole řádek po řádku z klávesnice a vypočítá součet jeho prvků po sloupcích.
    5. Napište program, který vypočítá součet diagonálních prvků čtvercové matice.

    Laboratorní práce pro školy a univerzity na řešení úloh zpracování dvourozměrných polí v jazyce C (C). Seznam laboratorních úloh (kliknutím na odkaz se dostanete k řešení problému, pokud existuje):

    Další úkoly:

    Výkon všech programů byl testován v CodeBlocks 16.01 (MinGW, Windows 10). Svá řešení nevyřešených programů a návrhy na vylepšení stávajících můžete uvést v komentářích v dolní části stránky.

    Stáhněte si laboratorní soubor a všechny zdrojové kódy programů v archivu:


    Můžete si také objednat řešení své laboratorní práce v C++ a mnoha dalších:

    # 1: Dané dvourozměrné pole. Najděte minimální součet prvků řetězce. Vyřešte problém bez použití dalšího jednorozměrného pole.

    #zahrnout #zahrnout #zahrnout int main () (int * arr; int x, y, i, j, součet = 0, min = 0, minstr = 0; srand (čas (NULL)); x = 2 + rand () % 10; y = 2 + rand ()% 6; arr = (int *) malloc (x * y * velikost (int)); printf ("Pole% dx% d: \ n", x, y); for (i = 0; i

    # 2: Určete souřadnice prvku, který je nejblíže průměru všech prvků v poli.

    #zahrnout #zahrnout #zahrnout #zahrnout int main () (int * arr; int x, y, i, j, minx = 0, miny = 0; float ssum = 0; srand (čas (NULL)); x = 1 + rand ()% 10; y = 1 + rand ()% 7; arr = (int *) malloc (x * y * velikost (int)); printf ("Pole% dx% d: \ n", x, y); for (i = 0 i

    # 9: Je dáno dvourozměrné pole sudého počtu sloupců. Sloupce levé poloviny pole jsou zaměněny se sloupci pravé poloviny.

    #zahrnout #zahrnout #zahrnout int main () (int * arr; int x, y, i, j, d; srand (čas (NULL)); x = 1 + rand () % 10; y = 2 * (1 + rand () % 3 ); arr = (int *) malloc (x * y * velikost (int)); printf ("Pole% dx% d: \ n", x, y); for (i = 0; i

    №14: Pro každý řádek dvourozměrného pole zjistěte počet prvků, jejichž poslední číslice je rovna a.

    #zahrnout #zahrnout #zahrnout int main () (int * arr; int x, y, i, j, a, počet; srand (čas (NULL)); printf ("Zadejte a:"); scanf ("% d", & a); x = 1 + rand ()% 10; y = 1 + rand ()% 7; arr = (int *) malloc (x * y * sizeof (int)); printf ("Masivní% dx% d: \ n" , x, y); pro (i = 0; i

    # 21: Dané dvourozměrné pole b. Považujte to za matici, transponujte b.

    #zahrnout #zahrnout #zahrnout int main () (int * arr, * arrT, x, y, i, j; srand (čas (NULL)); x = 1 + rand () % 7; y = 1 + rand () % 7; arr = (int *) malloc (x * y * sizeof (int)); printf ("Matrix% dx% d: \ n", x, y); for (i = 0; i

    # 1 (Extra): Dané dvourozměrné pole. Uspořádejte jeho řádky v neklesajícím pořadí jejich prvních prvků.

    #zahrnout #zahrnout #zahrnout int main () (int * arr, x, y, i, j, k, d, max = 0; srand (čas (NULL)); x = 1 + rand ()% 10; y = 1 + rand () % 7; arr = (int *) malloc (x * y * velikost (int)); printf ("Pole% dx% d: \ n", x, y); for (i = 0; i * (arr + max * y)) max = j; pro (k = 0; k

    # 2 (Extra): Určete, zda je daná čtvercová matice ortonormální, tj. takový, ve kterém je bodový součin každého páru odlišných řetězců 0 a bodový součin každého řetězce samotného je 1.

    #zahrnout #zahrnout int main () (int * arr; int x, i, j, k, součet = 0; printf ("Zadejte velikost čtvercové matice:"); scanf ("% d", & x); arr = ( int *) malloc (x * x * sizeof (int)); printf ("Zadejte prvky matice% dx% d: \ n", x, x); for (i = 0; i

    # 3 (Extra): Dané čtvercové dvourozměrné pole. Najděte součet prvků každé úhlopříčky rovnoběžné se stranou.

    #zahrnout #zahrnout #zahrnout int main () (int * arr; int x, y, i, j, součet; srand (čas (NULL)); x = 2 + rand ()% 6; arr = (int *) malloc (x * y * sizeof (int)); printf ("Pole% dx% d: \ n", x, x); for (i = 0; i

    Problémy s 2D polem

    1) Je dáno dvourozměrné pole celých čísel. Vytvořte program:

    a) zobrazení prvku umístěného v pravém horním rohu pole;

    b) zobrazení prvku umístěného v levém dolním rohu pole;

    c) zobrazení libovolného prvku druhého řádku pole;

    d) zobrazení libovolného prvku třetího sloupce pole;

    e) zobrazení libovolného prvku pole.

    2) Je dáno dvourozměrné celočíselné pole. Vyměnit:

    a) prvky umístěné v pravém horním a levém dolním rohu;

    b) prvky umístěné v pravém dolním a levém horním rohu;

    3) Číslo úsečky, na které se nachází prvek hlavní úhlopříčky dvourozměrného pole celých čísel, je známo. Zobrazte hodnotu tohoto prvku.

    4) Displej (v jednom řádku):

    a) všechny prvky hlavní diagonály pole

    b) všechny prvky hlavní diagonály pole, počínaje prvkem umístěným v pravém dolním rohu.

    5) Nahraďte hodnoty všech prvků hlavní úhlopříčky celočíselného pole nulou.

    6) Nahraďte hodnoty všech prvků boční úhlopříčky celočíselného pole hodnotami rovnými 100.

    7) Určete:

    a) součet prvků hlavní úhlopříčky pole;

    b) součet prvků boční úhlopříčky pole;

    c) aritmetický průměr prvků hlavní úhlopříčky pole;

    d) aritmetický průměr prvků boční úhlopříčky pole;

    e) minimální (maximální) prvek hlavní úhlopříčky pole;

    f) maximální (minimální) prvek boční úhlopříčky reálného pole;

    g) souřadnice prvního maximálního prvku hlavní diagonály;

    h) souřadnice prvního minimálního prvku hlavní diagonály.

    a) zobrazit všechny prvky pátého řádku pole;

    b) zobrazit všechny prvky třetího řádku pole, počínaje posledním prvkem tohoto řádku;

    c) zobrazit všechny prvky s-tého sloupce pole;

    d) nahraďte hodnoty všech prvků druhého řádku pole číslem 5;

    e) nahraďte hodnoty všech prvků pátého sloupce číslem 10.

    f) určit maximální (minimální) prvek třetího sloupce;

    9) Je dáno dvourozměrné pole celých čísel. Vytvořte program:

    a) výpočet součinu libovolných dvou prvků libovolného řádku pole

    b) součet všech prvků libovolného řádku pole;

    10) Je dáno dvourozměrné pole celých čísel. Definovat:

    a) a) ve kterém sloupci pole je součet prvků menší, v prvním nebo v posledním;

    b) b) ve kterém řádku je součin prvků větší, ve druhém nebo ve třetím.

    11) Je dáno dvourozměrné celočíselné pole 10 x 10. Zobrazte část pole:

    a) umístěný nad hlavní diagonálou;



    b) umístěna pod hlavní diagonálou;

    c) umístěna nad boční úhlopříčkou;

    d) umístěné pod boční úhlopříčkou;

    12) Je dáno dvourozměrné pole celých čísel:

    a) najděte maximální (minimální) prvek v každém z jeho sloupců;

    b) souřadnice maximálního (minimálního) prvku;

    c) součet lichých prvků v každém sloupci (řádku);

    d) počet prvků, které jsou násobky A nebo B.

    e) najděte řádek s maximálním součtem prvků;

    f) najděte sloupec s minimálním součtem prvků.

    Je dáno dvourozměrné pole 5x5. Uspořádejte zadávání prvků, výstup výsledku ve formě oken. Po pauze změňte barvu oken, ve kterých jsou uloženy prvky určené podle podmínky.

    Možnosti práce:

    1.

    2.

    3.

    4.

    5.

    6.

    7.

    8.

    9.

    10.

    11. Najděte součin prvků, které jsou nad hlavní diagonálou. Nahraďte všechny liché prvky nalezeným číslem.

    12. Najděte součet prvků, které jsou na lichých pozicích (součet indexů (i + j) pro X ij je liché číslo). Nahraďte všechny záporné prvky nalezeným číslem.

    13. Najděte součin všech prvků, které jsou na hlavní diagonále. Nahraďte všechny prvky pátého řádku a druhého sloupce nalezeným číslem.

    14. Najděte aritmetický průměr prvků na hlavní diagonále a aritmetický průměr na vedlejší diagonále. Prohoďte prvky na úhlopříčkách.

    15. Najděte aritmetický průměr kladných prvků, které jsou nad hlavní diagonálou. Nahraďte všechny záporné prvky nalezeným číslem.

    16. Najděte součet lichých prvků. Nahraďte nalezeným číslem všechny prvky, které jsou nad boční úhlopříčkou.

    17. Najděte součin prvků řady i a sloupce j (i, j - předběžné zadání z klávesnice). Nahraďte všechny prvky pod sekundární úhlopříčkou nalezeným číslem.

    18. Najděte součin prvků, které jsou na sudých pozicích (součet indexů (i + j) pro X ij je liché číslo). Nahraďte všechny prvky na hlavní diagonále nalezeným číslem.

    19. Najděte aritmetický průměr lichých prvků. Nahraďte všechny prvky boční úhlopříčky nalezeným číslem.

    20. Najděte součet všech sudých prvků, které jsou nad boční úhlopříčkou. Nahraďte všechny prvky čtvrtého řádku nalezeným číslem.

    21. Najděte součin prvků, které jsou nad hlavní diagonálou. Nahraďte všechny liché prvky nalezeným číslem.

    22. Najděte součet prvků, které jsou na lichých pozicích (součet indexů (i + j) pro X ij je liché číslo). Nahraďte všechny záporné prvky nalezeným číslem.

    23. Najděte součin všech prvků, které jsou na hlavní diagonále. Nahraďte všechny prvky pátého řádku a druhého sloupce nalezeným číslem.

    24. Najděte aritmetický průměr prvků na hlavní diagonále a aritmetický průměr na vedlejší diagonále. Prohoďte prvky na úhlopříčkách.

    25. Najděte aritmetický průměr kladných prvků, které jsou nad hlavní diagonálou. Nahraďte všechny záporné prvky nalezeným číslem.

    Například: Najděte aritmetický průměr prvků na hlavní diagonále

    Po pauze:

    Kontrolní otázky

    1. Co je textový režim a jak se liší od normálního?

    2. Co je to okno?

    3. Jak přesunout kurzor na zadané souřadnice okna?

    4. Jak změním písmo / barvu pozadí?

    Úvod

    Moderní technická zařízení určená pro řízení a automatizaci široce využívají binární schémata a systém binárních čísel. Teorie logické algebry se používá pro analýzu a syntézu kombinačních a sekvenčních spínacích obvodů.

    Přednáška je rozdělena do tří kapitol. V první kapitole jsou uvedeny základní pojmy z teorie algebry logiky, jsou uvažovány různé formy reprezentace booleovských funkcí. Druhá kapitola je věnována problematice minimalizace reprezentací booleovských funkcí, která je základem pro abstraktní syntézu diskrétních zařízení. Třetí kapitola obsahuje informace o metodách implementace booleovských funkcí založených na spínacích obvodech, které jsou základem pro strukturální syntézu diskrétních zařízení.

    Při psaní poznámek k přednáškám byla použita následující literatura: pro oddíl 1.1 -; pro oddíl 1.2 -; pro oddíl 1.3 -; pro oddíl 2.1 -; pro oddíl 2.2 -; pro oddíly 3.1, 3.2 -.



    Související články: