Anglická verze
logolink

< Zpět na seznam lekcí

Dvourozměrné pole (2d pole)

AlgortimyObsah lekce:

  • Princip dvourozměrného pole
  • Výpis dvourozměrného pole
  • Plnění dvourozměrného pole

Princip dvourozměrného pole

Oproti klasickému jednorozměrnému poli se liší dalším rozměrem navíc. Ukažme si výpis prázdného 2d pole rozměru 5x5:

         
         
         
         
         

Dobrou analogií je například list čtverečkovaného papíru o rozměru mxn čtverečků.

Výpis 2d pole

Ukažme si výpis 2d pole, jehož výchozí hodnoty nastavíme na 0:

Výpis dvourozměrného pole
#include "stdafx.h"
                
#define M 2
#define N 4

int _tmain(int argc, _TCHAR* argv[])
{
	int p[M][N];
    int radek, sloupec;
    
    for (radek = 0; radek < M; radek++)
    {
    	for (sloupec = 0; sloupec < N; sloupec++)
        {
        	p[radek][sloupec] = 0;
        }
    }
    
    for (radek = 0; radek < M; radek++)
    {
    	for (sloupec = 0; sloupec < N; sloupec++)
        {
        	printf("%d ", p[radek][sloupec]);
        }
    }

	fflush(stdin);
    getchar();
    return 0;
}

Vypsaná čísla v poli jsou za sebou a není zřetelně vidět, že se jedná o 2d pole. K ilustraci tohoto faktu zdrojový kód doplníme příkazem writeln po každém vypsaném řádku pole.

Výpis prázdného dvourozměrného pole
#include "stdafx.h"
                
#define M 2
#define N 4

int _tmain(int argc, _TCHAR* argv[])
{
	int p[M][N];
    int radek, sloupec;
    
    for (radek = 0; radek < M; radek++)
    {
    	for (sloupec = 0; sloupec < N; sloupec++)
        {
        	p[radek][sloupec] = 0;
        }
    }
    
    for (radek = 0; radek < M; radek++)
    {
    	for (sloupec = 0; sloupec < N; sloupec++)
        {
        	printf("%d ", p[radek][sloupec]);
        }
        printf("\n");
    }

	fflush(stdin);
    getchar();
    return 0;
}

Plnění 2d pole

V následujících cvičeních si dáme za cíl různými způsoby naplnit čtvercové (typu nxn) 2d pole čísly. Pro zobrazení na obrazovce zvolíme rozměr 10x10.

Základní algoritmus pro naplnění pole čísly
#include "stdafx.h"

#define M 10
#define N 10

int _tmain(int argc, _TCHAR* argv[])
{
	int p[M][N];
    int radek, sloupec;
                
	for (radek = 0; radek < M; radek++)
    {
    	for (sloupec = 0; sloupec < N; sloupec++)
        {
        
        }
    }
    
    for (radek = 0; radek < M; radek++)
    {
    	for (sloupec = 0; sloupec < N; sloupec++)
        {
        	printf("%d ", p[radek][sloupec]);
        }
        printf("\n");
    }
	
    fflush(stdin);
    getchar();
    return 0;
}                

Všude jedničky

111
111
111

Základní algoritmus pro naplnění pole čísly
p[radek, sloupec]=1;

V řádcích čísla 1..n

123
123
123

Základní algoritmus pro naplnění pole čísly
p[radek, sloupec]=sloupec;

Ve sloupcích čísla 1..n

111
222
333

Základní algoritmus pro naplnění pole čísly
p[radek][sloupec]=radek;

Malá násobilka

123
246
369

Základní algoritmus pro naplnění pole čísly
p[radek][sloupec]=radek*sloupec;

Na diagonále jedničky

100
010
001

Základní algoritmus pro naplnění pole čísly
if (radek==sloupec)
{
   p[radek, sloupec]=1;
}
else
{
   p[radek, sloupec]=0;
}

Na diagonále a nad jedničky

111
011
001

Základní algoritmus pro naplnění pole čísly
if (radek<=sloupec)
{
   p[radek, sloupec]=1;
}
else
{
   p[radek, sloupec]=0;
}

Na diagonálách jedničky

101
010
101

Základní algoritmus pro naplnění pole čísly
if ((radek=sloupec) || (radek=M-sloupec+1))
{
   p[radek][sloupec]=1;
}
else
{
   p[radek][sloupec]=0;
}

Domácí úkol

Napište program pro výpočet aritmetického průměru libovolného počtu zadaných čísel ve 2d poli.

Domácí úkol

Napište program pro nalezení minima a maxima ze všech zadaných čísel ve 2d poli.

Otázky

  1. Kdy je vhodné použít 2d pole? Uveďte konkrétní příklady.
webdesign, xhtml, css, php - Mgr. Michal Mikláš