NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
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 9 - Pole v C# .NET

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
DarkCoder
Člen
Avatar
Odpovídá na Nyssa
DarkCoder:27.6.2024 15:00

foreach není vhodný pokud se modifikuje pole, nesleduje index a iteruje pouze vpřed. Je vhodný na ladění pro kontrolní výpis. Používej for cyklus - je silný, pružný a efektivní.

Příkaz

pole[i] = i + 1;

Nastaví hodnotu prvku na daném indexu o 1 vyšší. Levá strana říká, že budeš měnit hodnotu prvku na indexu i na hodnotu pravé strany. Hodnota pravé strany je o jedna větší než hodnota i právě procházené iterace.

A jako poslední, příkaz

pole[0] = 1;

Je tam naprosto zbytečný neboť v následném cyklu hodnoty na ondexech přepisuješ.

Odpovědět
27.6.2024 15:00
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Nyssa
Člen
Avatar
Odpovídá na DarkCoder
Nyssa:27.6.2024 19:40

Díky za rychlou odpověď, bohužel mi v podstatě nijak nepomohla 😅 . Pro kontrolní výpis je v zadání foreach vyžadován, takže ho tam vpravit musím. Dokud používám pouze for za kterým vypisuji pomocí Console.Write­line, vše funguje tak jak má. Jakmile se pokusím použít pro kontrolní výpis foreach, vypíše správně pouze hodnotu v prvním poli a do dalších dosazuje 0.
Omlouvám se, že sem nevkládám kód, ze kterého by všem zkušenějším bylo hned jasné, v čem je zakopaný pes, ale nechci přijít k hotovému tím, že mi tu někdo vloží opravenou verzi, spíš se snažím pochopit, jak správně použít elementy, které mám již k dispozici.

 
Odpovědět
27.6.2024 19:40
Avatar
Nyssa
Člen
Avatar
Nyssa:27.6.2024 19:45

Ještě doplním, že jsem se pokusila použít toto:

pole[i] = i - 1; //aby měly prvky sestupnou tendenci

a právě na tomto řádku mi to hází chybu Index was outside the bounds of the array .
A ať zadám co zadám, nehnu se z místa...

Editováno 27.6.2024 19:46
 
Odpovědět
27.6.2024 19:45
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Nyssa
DarkCoder:27.6.2024 20:31

Chyba rozsahu vzniká použiješ-li pro index pole neplatnou hodnotu. Pokud máš pole o 10 prvcích, platné indexy jsou 0 až 9 v oboru přirozených čísel. Operaci s polem máš na levé straně výrazu, v závorkách máš iterační proměnnou. S tou pracuješ v cyklu for, repsektive v hlavičce cyklu for. Tam budeš mít chybu.

Pro vzestupné pořadí, od 1 do 10 musím provést posun o 1, to je důvod proč se hodnota na daném indexu mění o i + 1.

Pro sestupné pořadí musí být na indexu 0 hodnota 10, na 1 hodnota 9 až na indexu 9 hodnota1. Toho se docílí takto:

// Smyčka pro nastavení každého prvku pole v sestupném pořadí
for (int i = 0; i < 10; i++)
{
    pole[i] = 10 - i;
}

nebo takto:

// Smyčka pro nastavení každého prvku pole v sestupném pořadí
for (int i = 10; i > 0; i--)
{
     pole[10 - i] = i;
}

Vypsat si to pak můžeš pomocí foreach

// Smyčka pro výpis každého prvku pole
foreach (int i in pole)
{
    Console.Write("{0} ", i);
}
Odpovědět
27.6.2024 20:31
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Nyssa
Člen
Avatar
Odpovídá na DarkCoder
Nyssa:27.6.2024 20:43

Jé to je přesně ono! Díky moc, já si nevěděla rady s touto variantou

// Smyčka pro nastavení každého prvku pole v sestupném pořadí
for (int i = 10; i > 0; i--)
{
     pole[10 - i] = i;
}

z nějakého důvodu jsem výraz pořád cpala za rovnítko, nenapadlo mě ho dát před něj do hranatých závorek... 😅 No, tak jsem zase o něco chytřejší. 😊

 
Odpovědět
27.6.2024 20:43
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Nyssa
DarkCoder:27.6.2024 20:51

Chyba indexu při práci s poli pomocí cyklu je celkem častá chyba. Vždy je dobré vědět jak velké je pole abychom znali platné indexy. Obvykle iterujeme od 0 do N-1 popřípadě obráceně N-1 do 0. Když snižujeme iterátor, viz. druhý příklad a bereme hodnotu za hranicí pole, musíme být obezřetní aby ve výrazu pole[N-i] se i nikdy nestalo 0.

Je naprosto normální že při procvičování děláš chyby. Díky tomu se učíš a zjišťuješ, co způsobuje chybu a na co si dát příště pozor. S každým příkladem, který si zpracuješ, Ti to bude přirozenější.

Pokud sem vložíš celý kód, podívám se na to a řeknu kde je chyba, ale hotové řešení ti nepošlu. Ale budeš vědět kde děláš chybu.. :-)

Odpovědět
27.6.2024 20:51
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Nyssa
DarkCoder:27.6.2024 21:01

Není zač, někdy nebývá hned jasné jak to poskládat aby to dělalo to co má. Někdy pomůže jiná varianta, která je srozumitelnější. Je třeba mít vždy na paměti že k cíli vede obvykle vícero způsobů. Pro představu, zde je další, leč méně srozumitelnější, ale funkční, jak zapsal data do pole v sestupném pořadí. Tato varianta plní pole odzadu. :-)

// Smyčka pro nastavení každého prvku pole v sestupném pořadí
for (int i = 10; i > 0; i--)
{
    pole[i - 1] = 10 - i + 1;
}
Odpovědět
27.6.2024 21:01
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Nyssa
Člen
Avatar
Nyssa:29.6.2024 15:23

Chce to víc příkladů, minimálně jak vypadá správná syntaxe. Pro začátečníky by právě zde možná nebylo špatné připomenout co je funkce, co je metoda, jaké jsou mezi nimi rozdíly atp... Tyto informace jsou sice dohledatelné, ale pořád se vracet do předchozích lekcí nebo googlit jen vytrhává ze soustředění.

 
Odpovědět
29.6.2024 15:23
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Nyssa
DarkCoder:29.6.2024 18:36

Funkce a metody by měly mít svoji vlastní kapitolu. Navíc pojem metoda souvisí s OOP, zde se probírají základní konstrukce. Kapitola zabývající se práce s poli obsahuje dost věcí, které by mohli být rozepsány v několika kapitolách. Později v kapitole o funkcích by mohla být zmínka o tom jak předávat a vracet pole z funkce.

Ale když si to nakousla, tak lehký souhrn:

Funkce: Obecný termín pro blok kódu, který provádí určitou operaci. V C# jsou všechny funkce metodami, protože musí být součástí tříd nebo struktur. Statické metody se často považují za ekvivalent funkce.

Metoda: Specifický termín pro funkci definovanou v rámci třídy. Může být instanční nebo statická.

using System;

class Program
{
    // Statická metoda (lze ji považovat za funkci)
    static void DisplayMessage()
    {
        Console.WriteLine("Toto je statická metoda.");
    }

    // Instanční metoda
    void InstanceMethod()
    {
        Console.WriteLine("Toto je instanční metoda.");
    }

    static void Main()
    {
        // Volání statické metody
        DisplayMessage();

        // Vytvoření instance třídy pro volání instanční metody
        Program program = new Program();
        program.InstanceMethod();
    }
}

Statická metoda je volána přímo bez instance třídy.
Instanční metoda vyžaduje instanci třídy.

Odpovědět
29.6.2024 18:36
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Tereza Jelínková:30.9.2024 12:28

potrebovala bych vice prikladu a vzdy uvadet syntax

 
Odpovědět
30.9.2024 12:28
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 231.