NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze – Lekce 11 - Vícerozměrná pole v jazyce C

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
Petr Laštovička:16.7.2016 13:12

N-rozměrné pole je také možné alokovat dynamicky. To se hodí v případech, kdy má pole velké rozměry a normální deklarace pole uvnitř funkce by způsobovala chybu stack overflow.

int(*pole)[1080] = (int(*)[1080]) calloc(1920*1080, sizeof(int));
pole[200][100] = 1;
printf("%d", pole[200][100]);
free(pole);
 
Odpovědět
16.7.2016 13:12
Avatar
Odpovídá na Petr Laštovička
Patrik Valkovič:16.7.2016 13:22

Dynamická alokace je probrána až v dalších dílech.

Odpovědět
16.7.2016 13:22
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
dfdfdf
Člen
Avatar
dfdfdf:31.12.2016 12:50

Cus.Muze nekdo poradit kde je chyba?

main.c:20:25: error: invalid initializer
int kinosal [2][2]= 1;

Editováno 31.12.2016 12:51
 
Odpovědět
31.12.2016 12:50
Avatar
Odpovídá na dfdfdf
Jaroslav Polívka:31.12.2016 13:47

Chyba je v tom, že v deklaraci int kinosal [2][2] je chybně provedená inicializace. Chápu to tak, že chceš do souřadnic 2,2 přiřadit hodnotu jedna, proto bych nejdříve provedl deklaraci int kinosal [2][2] a až na dalším řádku bych hodnotu přiřadil int kinosal [2][2] = 1

Odpovědět
31.12.2016 13:47
Velice často si věci žijí svým životem
Avatar
dfdfdf
Člen
Avatar
Odpovídá na Jaroslav Polívka
dfdfdf:31.12.2016 14:19

Stejně vzniká chyba

 
Odpovědět
31.12.2016 14:19
Avatar
Odpovídá na dfdfdf
Jaroslav Polívka:31.12.2016 14:20

Kdybych si chtěl deklarované pole řádně inicializovat, abych tam neměl náhodné hodnoty. Provedl bych to následující rutinkou:

int main(int argc, char* argv[])
{

const int SIRKA = 4, VYSKA = 2;
int policko[SIRKA][VYSKA];

for(int i = 0; i<VYSKA; i++){

        for(int j = 0; j<SIRKA; j++){
        policko[j][i]=0;
        }

}

system("PAUSE");
return 0;
}

Potvrď mi prosím řešení :)

Odpovědět
31.12.2016 14:20
Velice často si věci žijí svým životem
Avatar
Odpovídá na dfdfdf
Jaroslav Polívka:31.12.2016 14:37

No jasan, IDE ti vždycky vyhodí chybu, protože deklaruješ pole o velikosti [2][2] a pak chceš for smyčkami procházet pole o velikosti [5][5], takže ihned ze začátku je třeba deklarovat tu větší velikost a pokud tam chceš nuly, tak to ze začátku inicializovat podle té rutinky, kterou jsem ti tady napsal.

Prosím tě o přiznání řešení.

Odpovědět
31.12.2016 14:37
Velice často si věci žijí svým životem
Avatar
Odpovídá na Jaroslav Polívka
Libor Šimo (libcosenior):31.12.2016 14:56

kinosal[2][2] = 1
je v tomto pripade blbost, pretoze pole moze nabudat indexy [0,1[0,1]

Odpovědět
31.12.2016 14:56
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na dfdfdf
Jaroslav Polívka:31.12.2016 15:17

Tak jestli bys mohl zkusit ještě tento kód:

#define SIRKA 5
#define VYSKA 5

int main(int argc, char* argv[])
{

int i,j;
int kinosal[SIRKA][VYSKA];

for(i = 0; i<VYSKA; i++){

        for(j = 0; j<SIRKA; j++){
        kinosal[j][i]=0;
        }
}

kinosal[2][2] = 1;

for (i = 1; i < 4; i++)
{
        kinosal[i][3] = 1;
}
for (i = 0; i < 5; i++)
{
        kinosal[i][4] = 1;
}

for (j = 0; j < 5; j++)
{
        for (i = 0; i < 5; i++)
                printf("%d", kinosal[i][j]);
        printf("\n");
}

system("PAUSE");
return 0;
}

Trošku jsem se ještě opravil oproti předchozí verzi, měl jsem IDE přepnuté na C++.

Odpovědět
31.12.2016 15:17
Velice často si věci žijí svým životem
Avatar
DarkCoder
Člen
Avatar
Odpovídá na dfdfdf
DarkCoder:31.12.2016 15:23
  1. Chybně inicializuješ dvourozměrné pole. Motáš dohromady inicializaci spolu s přiřazovacím příkazem.
  2. První cyklus postrádá jakýkoli smysl.
  3. Nehlídáš si meze pole a v klidu se snažíš přiřadit hodnotu mimo jeho rozsah
  4. Nepoužíváš klíčové slovo return pro navrácení hodnoty funkce main.
Odpovědět
31.12.2016 15:23
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 11.