Pouze tento týden sleva až 80 % na e-learning týkající se Javy. Zároveň využij akce až 50 % zdarma při nákupu e-learningu - více informací.
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í.
discount 50 + hiring

Lekce 8 - Pole v C# .NET

V minulé lekci kurzu, Ošetření uživatelských vstupů v C# .NET, jsme si ukázali ošetření uživatelských vstupů.

Dnes si v C# tutoriálu představíme datovou strukturu pole a vyzkoušíme si, co všechno umí.

Pole

Představte si, že si chcete uložit nějaké údaje o více prvcích. Např. chcete v paměti uchovávat 10 čísel, políčka šachovnice nebo jména 50ti uživatelů. Asi vám dojde, že v programování bude nějaká lepší cesta, než začít bušit proměnné uzivatel1, uzivatel2, ... až uzivatel50. Nehledě na to, že jich může být třeba 1000. A jak by se v tom potom hledalo? Brrr, takle ne :)

Pokud potřebujeme uchovávat větší množství proměnných stejného typu, tento problém nám řeší pole. Můžeme si ho představit jako řadu přihrádek, kde v každé máme uložený jeden prvek. Přihrádky jsou očíslované tzv. indexy, první má index 0.

Struktura pole

(Na obrázku je vidět pole osmi čísel)

Programovací jazyky se velmi liší v tom, jak s polem pracují. V některých jazycích (zejména starších, kompilovaných) nebylo možné za běhu programu vytvořit pole s dynamickou velikostí (např. mu dát velikost dle nějaké proměnné). Pole se muselo deklarovat s konstantní velikostí přímo ve zdrojovém kódu. Toto se obcházelo tzv. pointery a vlastními datovými strukturami, což často vedlo k chybám při manuální správě paměti a nestabilitě programu (např. v C++). Naopak některé interpretované jazyky umožňují nejen deklarovat pole s libovolnou velikostí, ale dokonce tuto velikost na již existujícím poli měnit (např. PHP). My víme, že C# je virtuální stroj, tedy cosi mezi kompilerem a interpretem. Proto můžeme pole založit s velikostí, kterou dynamicky zadáme až za běhu programu, ale velikost existujícího pole modifikovat nemůžeme. Lze to samozřejmě obejít nebo použít jiné datové struktury, ale k tomu se dostaneme.

Možná vás napadá, proč se tu zabýváme s polem, když má evidentně mnoho omezení a existují lepší datové struktury. Odpověď je prostá: pole je totiž jednoduché. Nemyslím pro nás na pochopení (to také), ale zejména pro C#. Rychle se s ním pracuje, protože prvky jsou v paměti jednoduše uloženy za sebou, zabírají všechny stejně místa a rychle se k nim přistupuje. Mnoho vnitřních funkčností v .NET proto nějak pracuje s polem nebo pole vrací. Je to klíčová struktura.

Pro hromadnou manipulaci s prvky pole se používají cykly.

Pole deklarujeme pomocí hranatých závorek:

int[] pole;

Na české klávesnici jsou hranaté závorky ukryté pod Pravým Alt a klávesami F a G:

Hranaté závorky

Výraz pole je samozřejmě název naší proměnné. Nyní jsme však pouze deklarovali, že v proměnné bude pole intů. Nyní ho musíme založit, abychom ho mohli používat. Použijeme k tomu klíčové slovo new, které na naší úrovni znalostí nejsme zatím schopní podrobně vysvětlit. Spokojme se s tím, že je to kvůli tomu, že je pole referenční datový typ (můžeme chápat jako složitější typ):

int[] pole = new int[10];

Nyní máme v proměnné pole pole o velikosti deseti intů.

K prvkům pole potom přistupujeme přes hranatou závorku, pojďme na první index (tedy index 0) uložit číslo 1.

int[] pole = new int[10];
pole[0] = 1;

Plnit pole takhle ručně by bylo příliš pracné, použijeme cyklus a naplníme si pole čísly od 1 do 10. K naplnění použijeme for cyklus:

int[] pole = new int[10];
pole[0] = 1;
for (int i = 0; i < 10; i++)
    pole[i] = i + 1;

Abychom pole vypsali, můžeme za předchozí kód připsat:

for (int i = 0; i < pole.Length; i++)
    Console.Write("{0} ", pole[i]);

Všimněte si, že pole má vlastnost Length, kde je uložena jeho délka, tedy počet prvků.

Konzolová aplikace
1 2 3 4 5 6 7 8 9 10

Můžeme použít zjednodušenou verzi cyklu pro práci s kolekcemi, známou jako foreach. Ten projede všechny prvky v poli a jeho délku si zjistí sám. Jeho syntaxe je následující:

foreach (datovytyp promenna in kolekce)
{
    // příkazy
}

Cyklus projede prvky v kolekci (to je obecný název pro struktury, které obsahují více prvků, u nás to bude pole) postupně od prvního do posledního. Prvek máme v každé iteraci cyklu uložený v dané proměnné.

Také pro tento cyklus existuje ve Visual Studio užitečný snippet: napíšeme foreach a dvakrát stiskneme Tabulátor, zbytek cyklu se sám dopíše. Zkuste si to.

Přepišme tedy náš dosavadní program pro foreach. Cyklus foreach nemá řídící proměnnou, není tedy vhodný pro vytvoření našeho pole a použijeme ho jen pro výpis.

int[] pole = new int[10];
pole[0] = 1;
for (int i = 0; i < 10; i++)
    pole[i] = i + 1;
foreach (int i in pole)
    Console.Write("{0} ", i);
Console.ReadKey();

Výstup programu:

Konzolová aplikace
1 2 3 4 5 6 7 8 9 10

Pole samozřejmě můžeme naplnit ručně a to i bez toho, abychom dosazovali postupně do každého indexu. Použijeme k tomu složených závorek a prvky oddělujeme čárkou:

string[] simpsonovi = {"Homer", "Marge", "Bart", "Lisa", "Maggie"};

Pole často slouží k ukládání mezivýsledků, které se potom dále v programu používají. Když potřebujeme nějaký výsledek 10x, tak to nebudeme 10x počítat, ale spočítáme to jednou a uložíme do pole, odtud poté výsledek jen načteme.

Metody na třídě Array

.NET nám poskytuje třídu Array, která obsahuje pomocné metody pro práci s poli. Pojďme se na ně podívat:

Sort()

Jak již název napovídá, metoda nám pole seřadí. Její jediný parametr je pole, které chceme seřadit. Je dokonce tak chytrá, že pracuje podle toho, co máme v poli uložené. Stringy třídí podle abecedy, čísla podle velikosti. Zkusme si setřídit a vypsat naši rodinku Simpsnů:

string[] simpsonovi = {"Homer", "Marge", "Bart", "Lisa", "Maggie"};
Array.Sort(simpsonovi);
foreach (string s in simpsonovi)
    Console.Write("{0} ", s);
Console.ReadKey();

Konzolová aplikace
Bart Homer Lisa Maggie Marge

Zkuste si udělat pole čísel a vyzkoušejte si, že to opravdu funguje i pro ně.

Reverse()

Reverse() nám pole otočí (první prvek bude jako poslední atd.), toho můžeme využít např. pro třídění pozpátku:

string[] simpsonovi = {"Homer", "Marge", "Bart", "Lisa", "Maggie"};
Array.Sort(simpsonovi);
Array.Reverse(simpsonovi);
foreach (string s in simpsonovi)
    Console.Write("{0} ", s);
Console.ReadKey();

IndexOf() a LastIndexOf()

Tyto metody vrátí index prvního nebo posledního nalezeného prvku. V případě nenalezení prvku vrátí -1. Každá z metod bere dva parametry, prvním je pole, druhým hledaný prvek. Umožníme uživateli zadat jméno Simpsna a řekneme mu, na jaké pozici je uložený. Teď to pro nás nemá hlubší význam, protože prvek pole je jen string. Bude se nám to však velmi hodit ve chvíli, kdy v poli budeme mít uloženy plnohodnotné objekty. Berme to tedy jako takovou přípravu.

string[] simpsonovi = {"Homer", "Marge", "Bart", "Lisa", "Maggie"};
Console.WriteLine("Ahoj, zadej svého oblíbeného Simpsna (z rodiny Simpsnů): ");
string simpson = Console.ReadLine();
int pozice = Array.IndexOf(simpsonovi, simpson);
if (pozice >= 0)
    Console.WriteLine("Jo, to je můj {0}. nejoblíbenější Simpson!", pozice + 1);
else
    Console.WriteLine("Hele, tohle není Simpson!");
Console.ReadKey();

Konzolová aplikace
Ahoj, zadej svého oblíbeného Simpsna (z rodiny Simpsnů):
Homer
Jo, to je můj 1. nejoblíbenější Simpson!

Copy()

Copy() již podle názvu zkopíruje část pole do jiného pole. Prvním parametrem je zdrojové pole, druhým cílové a třetím počet prvků, který se má zkopírovat.

Metody na poli

Třída Array není jedinou možností, jak s polem manipulovat. Přímo na samotné instanci pole (konkrétní proměnné) můžeme volat také spoustu metod. I když si zmíníme jen některé, je jich opravdu hodně. Nebudeme tedy dělat příklady, jen si je popíšeme:

Length

Length jsme si již zmínili, vrátí délku pole. Není metodou, ale vlastností, nepíší se za ni tedy závorky ().

Následující metody jsou takzvané "extension metody". Podrobněji je probereme později. V tuto chvíli musíte jen vědět, že pro jejich zavolání potřebujeme balíček: using System.Linq; (tento kód si dopište pod: using System;)

Min(), Max(), Average(), Sum()

Matematické metody, vracející nejmenší prvek (Min()), největší prvek (Max()), průměr ze všech prvků (Average()) a součet všech prvků (Sum()). Metody nemají žádné parametry.

Concat(), Intersect(), Union()

Všechny tyto metody vrátí na výstupu nové pole a jako parametr mají druhé pole. Concat() vykoná nám již známou konkatenaci, tedy k našemu poli připojí druhé pole a takto vzniklé nové pole vrátí. Intersect() vykoná průnik obou polí, tedy sestaví pole s prvky, které jsou oběma polím společné. Union() naopak vykoná sjednocení, funguje tedy podobně jako Concat(), jen prvky, které byly v obou polích, jsou v novém poli jen jednou.

First() a Last()

Již podle názvu metody vrátí první a poslední prvek, neberou žádné parametry.

Take() a Skip()

Obě tyto metody berou jako parametr počet prvků. Take() vrátí pole s daným počtem prvků zkopírovaných od začátku původního pole. Skip() naopak vrátí pole bez těchto prvních prvků.

Contains()

Metoda vrací true/false podle toho, zda se prvek, uvedený v parametru metody, v daném poli nachází.

Reverse()

Metodu Reverse() známe již z třídy Array, pokud ji ale voláme na konkrétním poli, tak se prvky v něm neotočí, nýbrž je vytvořeno nové otočené pole a to je vráceno. Metoda nemá žádné parametry.

Distinct()

Distinct() je metoda bez parametrů a zajistí, aby byl v poli každý prvek jen jednou, tedy vymaže duplicitní prvky a unikátní pole vrátí jako návratovou hodnotu metody, opět tedy nemodifikuje dané pole.

Mnoho metod nemění přímo naše pole, ale vrátí pouze pole nové (jsou to metody Concat(), Intersect(), Union(), Reverse() a Distinct()), ve kterém jsou provedeny požadované změny. Pokud chceme modifikovat původní pole, musíme do něj dosadit. Tyto metody bohužel z důvodů, které pochopíme až později, nevrací přímo pole, ale typ IEnumerable. Aby bylo dosazení výsledku zpět do pole možné, musíme ho ještě převést na pole metodou ToArray().

int[] cisla = { 1, 2, 3, 3, 3, 5 };
cisla = cisla.Distinct().ToArray();

Proměnná délka pole

Říkali jsme si, že délku pole můžeme definovat i za běhu programu, pojďme si to zkusit a rovnou si vyzkoušejme nějakou metodu na poli:

Console.WriteLine("Ahoj, spočítám ti průměr známek. Kolik známek zadáš?");
int pocet = int.Parse(Console.ReadLine());
int[] cisla = new int[pocet];
for (int i = 0; i < pocet; i++)
{
    Console.Write("Zadejte {0}. číslo: ", i + 1);
    cisla[i] = int.Parse(Console.ReadLine());
}
Console.WriteLine("Průměr tvých známek je: {0}", cisla.Average());
Console.ReadKey();

Konzolová aplikace
Ahoj, spočítám ti průměr známek. Kolik známek zadáš?
5
Zadejte 1. číslo: 1
Zadejte 2. číslo: 2
Zadejte 3. číslo: 2
Zadejte 4. číslo: 3
Zadejte 5. číslo: 5
Průměr tvých známek je: 2,6

Tento příklad by šel samozřejmě napsat i bez použití pole, ale co kdybychom chtěli spočítat např. medián? Nebo např. vypsat zadaná čísla pozpátku? To už by bez pole nešlo. Takhle máme k dispozici v poli původní hodnoty a můžeme s nimi neomezeně a jednoduše pracovat.

To by pro dnešek stačilo, můžete si s polem hrát.


 

Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 1295x (141.34 kB)
Aplikace je včetně zdrojových kódů v jazyce C#

 

Předchozí článek
Ošetření uživatelských vstupů v C# .NET
Všechny články v sekci
Základní konstrukce jazyka C# .NET
Přeskočit článek
(nedoporučujeme)
Kvíz - Podmínky, cykly, pole v C# .NET
Článek pro vás napsal David Čápka
Avatar
Uživatelské hodnocení:
314 hlasů
David je zakladatelem ITnetwork a programování se profesionálně věnuje 13 let. Má rád Nirvanu, sushi a svobodu podnikání.
Unicorn university David se informační technologie naučil na Unicorn University - prestižní soukromé vysoké škole IT a ekonomie.
Aktivity

 

 

Komentáře

Avatar
adam440
Tvůrce
Avatar
adam440:7.6.2012 14:45

Zdravim,
pěkný tutoriál ale mám dotaz. Dělám v C# něco jako databázi ale přes pole protože se tu zatím nenachází žádný tutoriál právě na databáze a já to s databázemi neumím, nevím jak docílit aby se do databáze mohly přidávat, odebírat či upravovat záznamy.

 
Odpovědět
7.6.2012 14:45
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na adam440
David Čápka:7.6.2012 14:50

Ahoj, přesně na toto se tu za chvíli objeví tutoriál. Jinak se k tomu používají nějaké vyspělejší kolekce. např. List.

Odpovědět
7.6.2012 14:50
One of the most common causes of failure is the habit of quitting when one is overtaken by temporary defeat.
Avatar
LEXMORR
Člen
Avatar
LEXMORR:18.11.2012 10:19

Vysvetlíte mi niekto to {0}

Odpovědět
18.11.2012 10:19
Život je ako program, musíš si ho zorganizovať podľa seba, ale môže sa nájsť aj chybička
Avatar
..
Člen
Avatar
Odpovídá na LEXMORR
..:18.11.2012 10:47

Tomu se říká index parametru. Tam kde chceš aby byla vytisknutá např. proměnná dáš {0} (indexuje se od 0) a pak na konci textu za uvozovky uděláš čárku a napíšeš tu proměnnou. :)
Př:

int cislo = 10;
Console.WriteLine ("Na místo indexu se dosadí: {0}",cislo)

A výstup:
"Na místo indexu se dosadí: 10"

Editováno 18.11.2012 10:48
 
Odpovědět
18.11.2012 10:47
Avatar
..
Člen
Avatar
Odpovídá na ..
..:18.11.2012 10:52

U toho druhého řádku kódu mi chybí nakonci středník. Omlouvám se.

 
Odpovědět
18.11.2012 10:52
Avatar
matesax
Tvůrce
Avatar
Odpovídá na ..
matesax:18.11.2012 11:01

To jsi napsal dost nešťastně. Pole je prakticky posloupnost elementů. Posloupnosti se učí snad už na základní škole - takže by jsi měl vědět, co to je - kdyžtak google. Posloupnost ti umožňuje přiřadit jednotlivým objektům specifickou pozici v jakékoliv kolekci elementů. No a pole použiješ v případě, že víš, jaká data v něm budou - a přesně víš kolik jich bude a prostě nehodláš s nimi hýbat - jen je tahat. Tedy když nebudeš chtít dělat nic dynamického - jen mít pole prvků. Proto poli musíš definovat rozměr - měl by jsi ho vědět - to je podstata pole... No a tak z nějakých 50% budeš ten počet a přesná data znát již při vzniku pole - někdy je třeba ještě něco přepočítat - na něco počkat a tak... Ale když víš přesně, jaká data tam budou, tak si můžeš dosazení do pole zjednodušit pomocí těch závorek {}. Dovnitř jednoduše naházíš ta data - ale pak již nemůžeš přidávat nová - nemusíš definovat velikost - ta se odvodí podle počtu elementů v {}. Ale když budeš chtít mít ještě 2 volná místa navíc, máš smůlu, leda by jsi tam dosadil nějaké defaultní hodnoty...

Editováno 18.11.2012 11:03
 
Odpovědět
18.11.2012 11:01
Avatar
mienkofax
Člen
Avatar
mienkofax:24.12.2012 15:59

Ahoj, pocuj ukazal by si mi prosimta nejaky prikald pouzitia Min, Max, Sum... lebo neviem ako to mam pouzit aby to fungovalo dakujem

 
Odpovědět
24.12.2012 15:59
Avatar
matesax
Tvůrce
Avatar
Odpovídá na mienkofax
matesax:24.12.2012 16:32

array.metoda - co víc?

using System.Linq;

...

array.Max

array.Min

...
Editováno 24.12.2012 16:33
 
Odpovědět
24.12.2012 16:32
Avatar
matesax
Tvůrce
Avatar
Odpovídá na matesax
matesax:24.12.2012 16:38

Blbost - bere se to z IEnumerable:

IEnumerable.Max/Min/...();
 
Odpovědět
24.12.2012 16:38
Avatar
fejjaaas
Člen
Avatar
fejjaaas:25.12.2012 12:08

Zdravím vás lidi, mám takový problém s metodami Take, Skip, Concat a dalšími.
Using System;, Using System.Linq; používám, ale při spuštění mi to místo výsledného a upraveného pole vrátí:

System.Linq.E­numerable+<Ta­keIterator>d__3a'1[­System.Int32]

Toto je konkrétně u metody Take. U zbylých je to trochu jiné, ale podstata stejná. Nevíte někdo co s tím?? Díky

 
Odpovědět
25.12.2012 12:08
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na fejjaaas
David Čápka:25.12.2012 13:38

Enumerable je tzv. interface, hodnotu tohoto typu si můžeš opět uložit jako pole. Např. takto:

int pole[] = tvojeEnumerable;
Odpovědět
25.12.2012 13:38
One of the most common causes of failure is the habit of quitting when one is overtaken by temporary defeat.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na David Čápka
matesax:25.12.2012 13:46

A co IEnumerable.Tox­xx()? Je to asi jedno - že...

 
Odpovědět
25.12.2012 13:46
Avatar
fejjaaas
Člen
Avatar
Odpovídá na David Čápka
fejjaaas:25.12.2012 13:48

Zkusil jsem to takto:

int[] ciselnost = {1, 5, 2, 3, 4};
int[] pole = ciselnost.Take(3);

A píše mi to při spuštění (Takže jsem nezkoušel ani výpis zatím):

Typ System.Collec­tions.Generic­.IEnumerable<in­t> nelze implicitně převést na typ int[]. Existuje explicitní převod (nechybí výraz přetypování?)

 
Odpovědět
25.12.2012 13:48
Avatar
matesax
Tvůrce
Avatar
Odpovídá na fejjaaas
matesax:25.12.2012 13:50

Viz. můj příspěvek... Používej tagy code pro vložení zdrojáku...

T name = ciselnost.Take(3).ToT();

T je proměnná používaná pro více typů - type... To znamená - místo T si dosaď List, array,...

Editováno 25.12.2012 13:53
 
Odpovědět
25.12.2012 13:50
Avatar
matesax
Tvůrce
Avatar
Odpovídá na fejjaaas
matesax:25.12.2012 14:01

Používáš-li LINQ, či prostě nemáš-li důvod, nechávej to v IEnumerable... (Přetypuj až když to má smysl...)

Editováno 25.12.2012 14:02
 
Odpovědět
25.12.2012 14:01
Avatar
fejjaaas
Člen
Avatar
fejjaaas:25.12.2012 16:07

Děkuji mnohokrát všem, už mi všechny metody fungují :-).

 
Odpovědět
25.12.2012 16:07
Avatar
matus.kasper
Člen
Avatar
matus.kasper:3.5.2013 19:19

:) ahoj ako by ste riešili algotitmus ,pole nahodnych 100 prvkov, a z toho vybrat 3 najvačie prvky??

 
Odpovědět
3.5.2013 19:19
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na matus.kasper
David Čápka:4.5.2013 20:53

Jelikož jsem líný a je jich jen 100, tak bych si to pole seřadil, kdybych to chtěl rychlé, jde to udělat v čase 3n.

Odpovědět
4.5.2013 20:53
One of the most common causes of failure is the habit of quitting when one is overtaken by temporary defeat.
Avatar
baan
Člen
Avatar
baan:14.5.2013 12:31

dá sa metóda Reverse použiť na otočenie reťazca?
alebo mi ostáva iba toto:

public string otoc(string si)
{
string so = "";
foreach (char c in si)
so = c + so;
return so;
}

Odpovědět
14.5.2013 12:31
Viem, že skoro nič neviem.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na baan
Kit:14.5.2013 12:34

Asi za 10 sekund jsem vygooglil tohle:

public static string ReverseString(string s) {
    char[] arr = s.ToCharArray();
    Array.Reverse(arr);
    return new string(arr);
}
Odpovědět
14.5.2013 12:34
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
baan
Člen
Avatar
Odpovídá na Kit
baan:14.5.2013 12:58

malo by to byť rýchlejšie, dík!

Odpovědět
14.5.2013 12:58
Viem, že skoro nič neviem.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na baan
Kit:14.5.2013 13:03

Nejen rychlejší, ale spotřebuje to mnohem méně zdrojů. Když to děláš cyklem pro řetězec, který má třeba 100 znaků, tak 100× vyrobíš objekt typu řetězec, který vzápětí zahodíš. Nakonec použiješ jen ten poslední a zbytek necháš sežrat GC.

Odpovědět
14.5.2013 13:03
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
c# student
Neregistrovaný
Avatar
c# student:1.7.2013 20:16

Mam usporiadane pole a chcem vypisat prvych k clenov ako to spravim ? Dakujem

 
Odpovědět
1.7.2013 20:16
Avatar
Odpovídá na c# student
Michael Olšavský:1.7.2013 20:22
for(int i = 0; i < k; i++)
   Console.WriteLine(pole[i]);

Přečti si pořádně článek. Řekl bych, že to tu je ;-)

 
Odpovědět
1.7.2013 20:22
Avatar
c# student
Neregistrovaný
Avatar
Odpovídá na Michael Olšavský
c# student:1.7.2013 20:50

dik 8-)

 
Odpovědět
1.7.2013 20:50
Avatar
j.martenek
Člen
Avatar
j.martenek:31.7.2013 13:56

Zkopírujte si toto a zkuste to spustit, nefunguje mi to. Čísla se seřadí takto: 500,200,2,125,120. Číslo 2 je nejmenší, takže by mělo být na konci. Zkuste to a napište v čem je chyba. Tady je zdroják:
string[] cisla = { "125", "2", "500", "200", "120" };
Array.Sort(cisla);

foreach (string s in cisla)
Console.Write("{0} ", s);
Console.ReadKey();

 
Odpovědět
31.7.2013 13:56
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na j.martenek
Jan Vargovský:31.7.2013 13:59

Protože ty čísla bereš jako stringy, to znamená že se třídí podle ascii hodnoty. Změn si to pole na pole integeru a potom už by ti to mělo jít.

 
Odpovědět
31.7.2013 13:59
Avatar
j.martenek
Člen
Avatar
j.martenek:4.8.2013 11:00

Díky moc, už to funguje :). Jinak dá se nějak změnit barva písma a pozadí v konzoli??

 
Odpovědět
4.8.2013 11:00
Avatar
Theodor Johnson
Tvůrce
Avatar
Odpovídá na j.martenek
Theodor Johnson:4.8.2013 12:27

Tohle jsem našel na MSDN, ale nezkoušel jsem to:

Console.BackgroundColor = ConsoleColor.Red;
Console.Clear();
Odpovědět
4.8.2013 12:27
Mo8ilε 15 Ѐλđ
Avatar
j.martenek
Člen
Avatar
j.martenek:4.8.2013 14:54

Pozadí se mi změnilo na červené, ale písmo zůstalo stále stejné. Ale i tak dík :)

 
Odpovědět
4.8.2013 14:54
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na j.martenek
Jan Vargovský:4.8.2013 15:18

Jestli chceš barvu písma tak je to

Console.ForegroundColor = Color ...
 
Odpovědět
4.8.2013 15:18
Avatar
j.martenek
Člen
Avatar
j.martenek:4.8.2013 17:15

Ok, dík moc, jste dobří. Já akorát ovládám html,css,trochu java script a teď začínám objektově orientované programování v C#. :)

 
Odpovědět
4.8.2013 17:15
Avatar
Johny
Neregistrovaný
Avatar
Johny:9.8.2013 8:55

U toho prvního příkladu není trochu zbytečné připisovat

for (int i = 0; i < pole.Length; i++)
Console.Write("{0} ", pole[i]);

když stačí jen připsat

Console.Write("{0} ", pole[i]);

k for cyklu (tomu prvnímu)? Jen si říkám, že se to zbytečně komplikuje a prodlužuje :) Akorát teda bez foreach už to nefunguje :D:)

 
Odpovědět
9.8.2013 8:55
Avatar
Theodor Johnson
Tvůrce
Avatar
Odpovídá na Johny
Theodor Johnson:9.8.2013 9:12

Šlo by to, ale není to nejlepší způsob pro začátečníky

Odpovědět
9.8.2013 9:12
Mo8ilε 15 Ѐλđ
Avatar
Libor Šimo (libcosenior):5.9.2013 16:22

Správne som pochopil, že do poľa možem dať napr. aj objekty?

Odpovědět
5.9.2013 16:22
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na Jan Vargovský
Libor Šimo (libcosenior):5.9.2013 16:36

Super, to znamená, že ak viem, že počet prvkov v poli bude nemenný, je to vlastne najvhodnejšia koleknia.
Ale!
Možem v priebehu programu meniť v poli hodnoty atributov v jednotlivych prvkoch a tie ostanú zmenené?
Budem mocť získať z nich nové hodnoty?

Odpovědět
5.9.2013 16:36
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Libor Šimo (libcosenior)
Jan Vargovský:5.9.2013 16:41

Nejvhodnější není, ale je nejrychlejší. Sám později zjistíš, proč není nejvhodnější.
Normalně můžeš s tím objektem můžeš pracovat jako kdyby v poli nebyl. Když jsou objekty v poli, přistupuješ k nim ale normálně přes index(indexy)

 
Odpovědět
5.9.2013 16:41
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Libor Šimo (libcosenior)
Kit:5.9.2013 17:00

Jestiže je počet prvků v poli neměnný, tak se nejspíš jedná o skutečné pole a je to v pořádku. Například šachovnice je pole. Nikdo jí nebude políčka přidávat ani ubírat. Když odebereš figurku, tak se ostatní figurky nehýbou.

Kdybys odebral položku ze seznamu, tak se dolní část posune nahoru. To už pole není. Když odebereš slovo ze slovníku, tak to také není pole.

O rychlosti se nebavme. Seznamy a slovníky bývají uvnitř implementovány jako pole, ale programátorovi to zůstává skryto.

Odpovědět
5.9.2013 17:00
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Libor Šimo (libcosenior):5.9.2013 19:52

Ďakujem. :)

Odpovědět
5.9.2013 19:52
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
NutelaCZ
Člen
Avatar
NutelaCZ:19.9.2013 19:49

Dobrý den,
rád bych se zeptal zda-li je možno vytvořit pole např.

string[] simpsonovi = {"Homer", "Marge", "Bart", "Lisa", "Meggie"};

a pak vypisovat náhodně jeho jednotlivé prvky?

Děkuji za radu :)

 
Odpovědět
19.9.2013 19:49
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na NutelaCZ
Jan Vargovský:19.9.2013 19:51

Ano bylo by to možné :) Jestli bys ale nechtěl, aby se prvky opakovali, tak bych to pole promíchal a pak vypsal normálně jeden po jednom :)

Editováno 19.9.2013 19:51
 
Odpovědět
19.9.2013 19:51
Avatar
NutelaCZ
Člen
Avatar
NutelaCZ:19.9.2013 20:01

No ono jdes spíš o to, to utvořit jako učební pomůcku pro Periodickou soustavu prvků :). Polem by byly prvky a vždy to vypsalo jeden prvek a pak bych to vložil do cyklu. Bohužel jsem nepřišel nato jak generovat náhodný prvek :(. Co se týče programování jsem začátečník takže mám celkem omezené schopnosti.

 
Odpovědět
19.9.2013 20:01
Avatar
NutelaCZ
Člen
Avatar
Odpovídá na Jan Vargovský
NutelaCZ:22.9.2013 15:14

A prosím prozradil bys mi jak nato? :)

 
Odpovědět
22.9.2013 15:14
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na NutelaCZ
Jan Vargovský:22.9.2013 20:09

No jednoduše máš pole těch prvků a zamícháš ho pomocí třídy Random a metody Next, je mnoho způsobů jak to pole zamíchat. Nebo jednoduše vypisovat náhodně, jestli by ti nevadilo, že by se to občas opakovalo. Já právě myslel, že to chceš náhodně vypsat a né nějak zkoušet. Kdyžtak řekni co přesně s tou tabulkou chceš dělat a poradím ti přímo :)

 
Odpovědět
22.9.2013 20:09
Avatar
spoprocky
Člen
Avatar
spoprocky:30.11.2013 16:13

mám dotaz kde bych sehnal info o tom jak vytvořit menu s obsahem HLAVNÍ MENU

P - Obsah/Povrch

J - Objem

O - Obvod

K - Konec
program musí vypočítat objem,obsah,obvod atd různých objektů jako třeba čtverec,jehlan,kruh atd díky za odpověd

 
Odpovědět
30.11.2013 16:13
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na spoprocky
Jan Vargovský:30.11.2013 16:45

Co konkrétně neumíš ? Psát tu za Tebe celý úkol nebudeme...

 
Odpovědět
30.11.2013 16:45
Avatar
spoprocky
Člen
Avatar
spoprocky:9.12.2013 13:00

mám dotaz jak mám zapsat abych měl pole ve dvou dimenzích nebo jenom jako příklad:funkce se zepta na pocet prvku v obou dimenzích pole a vytvori pole o daných počtech prvku tak mě zajímá jak bych měl zapsat větu:Obou dimenzích pole

 
Odpovědět
9.12.2013 13:00
Avatar
Kit
Tvůrce
Avatar
Odpovídá na spoprocky
Kit:9.12.2013 13:24

Jak zní dotaz? Zde je obvyklé, že se bavíme česky, slovensky a případně anglicky.

Odpovědět
9.12.2013 13:24
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na spoprocky
Jan Vargovský:9.12.2013 13:33

Zkus prosím nějak jinak vyjádřit co potřebuješ :)

 
Odpovědět
9.12.2013 13:33
Avatar
Rosemary
Člen
Avatar
Rosemary:17.12.2013 21:15

Super, díky moc za článek :D Pomohl mi.

 
Odpovědět
17.12.2013 21:15
Avatar
Zdeněk Bauer
Tvůrce
Avatar
Zdeněk Bauer:17.12.2013 21:36

Jak vytvořit pole s neomezenou délkou?
V PHP si prostě vytvořím pole a plním si ho jak chci.
Ať hledám na netu jak chci, vždy najdu jen příklady kde vždy musím definovat tu délku.

 
Odpovědět
17.12.2013 21:36
Avatar
Motlja
Člen
Avatar
Odpovídá na Zdeněk Bauer
Motlja:17.12.2013 23:45

V C# je to List takže něco jako

List<string> listTextu = new List<string>();
listTextu.Add("prvni slovo");
Odpovědět
17.12.2013 23:45
Umím a učím se to co chci, to co mě baví a zajímá!!
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Zdeněk Bauer
Jan Vargovský:18.12.2013 0:29
http://msdn.microsoft.com/cs-cz/library/System.Collections(v=vs.110).aspx

Vyber si dle potřeby (každá kolekce se hodí na něco jiného).

 
Odpovědět
18.12.2013 0:29
Avatar
Johny Lewis
Neregistrovaný
Avatar
Johny Lewis:1.1.2014 10:06

Není ten foreach trochu zbytečný? Výsledek bude stejný, ikdyž k tomu for cyklu jen připojíme Console.Write. Nebo se to vyplatí jen v některých případech?

 
Odpovědět
1.1.2014 10:06
Avatar
Johny Lewis
Neregistrovaný
Avatar
Johny Lewis:1.1.2014 10:10

Tak se omlouvám, už to vidím, že je to nutné v případě stringu :D:)

 
Odpovědět
1.1.2014 10:10
Avatar
Quest
Neregistrovaný
Avatar
Quest:1.1.2014 22:49

Zkouším metody Concat, Inter a Union a po spuštění mi program vypisuje něco trošku jiného než jsem chtěl:System.Lin­q.Enumerable+­.......(nebudu to opisovat celé). Kód můžete vidět níže. Poradíte mi prosím - a hlavně nějak srozumitelně -, co s tím mám dělat?

string[] pole = {"Chelsea", "Arsenal", "Německo", "Uganda" };
string[] auta = {"BMW", "Audi", "Lexus", "Barney"};
Console.WriteLine("Concat: " + pole.Concat(auta));
Console.WriteLine("Inter: " + pole.Intersect(auta));
Console.WriteLine("Union: " + pole.Union(auta));
 
Odpovědět
1.1.2014 22:49
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Quest
Jan Vargovský:1.1.2014 23:01

Všechny 3 metody vrací IEnumerable<T> ... Nemůžeš vypsat kolekci pouze na jeden řádek. (Nemá přetíženou metodu ToString() tudíž se vypíše jen namespace k té třídě. Takže to nějak vypíšeš.

Třeba takto, nebo dalšími 1o-ti způsoby :)

string[] pole = { "Chelsea", "Arsenal", "Německo", "Uganda" };
            string[] auta = { "BMW", "Audi", "Lexus", "Barney" };
            Console.WriteLine("Concat: ");
            pole.Concat(auta).ToList().ForEach(t => Console.WriteLine(t));
            Console.WriteLine("Inter: " );
            pole.Intersect(auta).ToList().ForEach(t => Console.WriteLine(t));
            Console.WriteLine("Union: ");
            pole.Union(auta).ToList().ForEach( t => Console.WriteLine(t));
 
Odpovědět
1.1.2014 23:01
Avatar
Quest
Neregistrovaný
Avatar
Quest:2.1.2014 12:14

Ještě jedna otázka. Jak to mám udělat, abych to nevypsal, ale pouze uložil do proměnné? Například: budu mít 2 pole, v jednom budou státy JA a v druhém státy SA a budu je chtít pomocí Union sjednotit do pole Amerika (které je zatím úplně prázdné). Jak na to?

 
Odpovědět
2.1.2014 12:14
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Quest
David Čápka:9.1.2014 18:53

Podívej se do sekce LINQ, řeší se tam podobné dotazy na data.

Odpovědět
9.1.2014 18:53
One of the most common causes of failure is the habit of quitting when one is overtaken by temporary defeat.
Avatar
pangas
Člen
Avatar
pangas:27.2.2014 20:10

Mám pole

int[] i = **{54,54,84,48,54,65,6,4,1,54,41,2,4,41,41};**

Jak má, prosím, vypadat příkaz distinct a average?

 
Odpovědět
27.2.2014 20:10
Avatar
Ondřej Štorc
Tvůrce
Avatar
Odpovídá na pangas
Ondřej Štorc:27.2.2014 20:16

Například takto:

int[] i = **{54,54,84,48,54,65,6,4,1,54,41,2,4,41,41};
int prumer = i.Average()
int[] pole_bez_duplicity = i.Distinct();
Odpovědět
27.2.2014 20:16
Život je příliš krátký na to, abychom bezpečně odebírali USB z počítače..
Avatar
pangas
Člen
Avatar
Odpovídá na Ondřej Štorc
pangas:27.2.2014 20:24

Nevím, stále nejde, píše mi to 'cannot implicitly convert double to int....'

 
Odpovědět
27.2.2014 20:24
Avatar
Ondřej Štorc
Tvůrce
Avatar
Odpovídá na pangas
Ondřej Štorc:27.2.2014 20:25

v tom případě ten průměr nebude typu int ale double, se omlouvám já to nezkoušel.. :)

Odpovědět
27.2.2014 20:25
Život je příliš krátký na to, abychom bezpečně odebírali USB z počítače..
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na pangas
Jan Vargovský:27.2.2014 20:27
double prumer = i.Average();
 
Odpovědět
27.2.2014 20:27
Avatar
pangas
Člen
Avatar
pangas:27.2.2014 22:18

Děkuji Vám oběma. :) Stále však nesedí příkaz distinct. :/

 
Odpovědět
27.2.2014 22:18
Avatar
pangas
Člen
Avatar
Odpovídá na pangas
pangas:27.2.2014 22:42

Dobrý, už jsem na to kápl :D

 
Odpovědět
27.2.2014 22:42
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na pangas
Jan Vargovský:27.2.2014 23:07

Stačí za to dát ještě ToArray() :)

 
Odpovědět
27.2.2014 23:07
Avatar
RooBoo
Člen
Avatar
RooBoo:22.3.2014 20:52

je správne použitie? :

char a[]= {'a','b','c'};
public char getchar (int b)
{
    return a[b]
}

malo by mi vrátiť z poľa charov ten znak ktorý je na danom mieste.. teda ak b je 0 ta by malo vrátiť 'a' nie ? :)

Editováno 22.3.2014 20:53
 
Odpovědět
22.3.2014 20:52
Avatar
Eldan
Člen
Avatar
Odpovídá na RooBoo
Eldan:22.3.2014 21:18

Ano, je to správně :)

Odpovědět
22.3.2014 21:18
Unobfuscated executable == free source code
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na RooBoo
Jan Vargovský:22.3.2014 21:23

Koukni na indexované property. (resp. googluj "indexer")

Editováno 22.3.2014 21:23
 
Odpovědět
22.3.2014 21:23
Avatar
pojerjunior
Člen
Avatar
pojerjunior:28.3.2014 14:48

neví někdo jak udělat přes pole když zadám text tak aby místo A bylo B a tak dále až do Z místo Z aby bylo A:)

 
Odpovědět
28.3.2014 14:48
Avatar
Ondřej Štorc
Tvůrce
Avatar
Odpovědět
28.3.2014 14:54
Život je příliš krátký na to, abychom bezpečně odebírali USB z počítače..
Avatar
danar2004
Člen
Avatar
danar2004:3.4.2014 17:53

Ahoj, můžu poprosit, aby mi někdo vysvětlil následující konstrukci tak trochu "pro blbý"?

pole.Concat(auta).ToList().ForEach(t => Console.WriteLine(t));

Jde mi o ten ForEach. To předtím chápu. Znaky => mají nějaký speciální význam, tedy nečtou se jako "větší nebo rovno".. Je to tak?
Díky za odpověď.

Editováno 3.4.2014 17:55
 
Odpovědět
3.4.2014 17:53
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na danar2004
David Čápka:3.4.2014 17:54

Má to jiný význam, konkrétně je to technologie LINQ.

Odpovědět
3.4.2014 17:54
One of the most common causes of failure is the habit of quitting when one is overtaken by temporary defeat.
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na danar2004
Jan Vargovský:3.4.2014 18:27

Spojí dvě kolekce, převede na List a proiteruje každý prvek nazvaný 't' a vypíše ho do konzole.

 
Odpovědět
3.4.2014 18:27
Avatar
michaela
Člen
Avatar
michaela:27.4.2014 22:06

pekny tutorial, len keby tu je aj praca s viacrozmernymi polami

 
Odpovědět
27.4.2014 22:06
Avatar
Michal Kolář:1.7.2014 8:46

Bylo by lepší nezaměňovat pojmy 'řazení' a 'třídění'.

 
Odpovědět
1.7.2014 8:46
Avatar
Anton Arnautov:24.7.2014 22:30

Davide, "zpoustu" :-D

Odpovědět
24.7.2014 22:30
Don't be a salad, be the best god damn brocolli you could ever be!
Avatar
Michal Kučera :23.12.2014 21:58

Jen taková poznámka, myslím že pro ty co začínají by bylo lepší kdyby se tento kód:

int[] pole = new int[10];
pole[0] = 1;
for (int i = 0; i < 10; i++)
        pole[i] = i + 1;
foreach (int i in pole)
        Console.Write("{0} ", i);
Console.ReadKey();

přepsal na :

int[] pole = new int[10];
pole[0] = 1;
for (int i = 0; i < pole.Length; i++)
        pole[i] = i + 1;
foreach (int i in pole)
        Console.Write("{0} ", i);
Console.ReadKey();

Jen aby byl kód ošetřen. :) Je to jen můj názor ;).

Odpovědět
23.12.2014 21:58
Přes překážky ke hvězdám
Avatar
taflik
Člen
Avatar
taflik:10.2.2015 21:29

Ahoj, mám takový problémek, mám napsat program na převod z desítkové do binární soustavy, což není žádný problém. Prostě dělím dané číslo 2 a zapisuji zbytky, ale problém je zapsat to pozpátku, zkoušela jsem to přes pole, ale nějak mi to nefunguje :/

 
Odpovědět
10.2.2015 21:29
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na taflik
Jan Vargovský:10.2.2015 21:41

Můžeš použít Reverse metodu, ale ta ti pak vrací IEnumerable<char>, takže bys to pak celé musel vzít a udělat z toho string.

string binary = "1011";
binary = new string(binary.Reverse().ToArray());
Console.WriteLine(binary);
 
Odpovědět
10.2.2015 21:41
Avatar
dano.curda
Člen
Avatar
dano.curda:20.2.2015 17:18

Pardon za otazku amatera:
Prikazom -> int[] pole = new int[10]; ..nedeklarujeme pole o 11 intov?
pole[0] = 1;
pole[1] = 2;
pole[2] = 3;
pole[3] = 4;
pole[4] = 5;
pole[5] = 6;
pole[6] = 7;
pole[7] = 8;
pole[8] = 9;
pole[9] = 10;
pole[10] = 11;

Dakujem pekne za vysvetlenie. Skvele clanky!

 
Odpovědět
20.2.2015 17:18
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na dano.curda
Jan Vargovský:20.2.2015 17:29

Si to zkus, u posledního řádku ti to spadne, protože pole má indexy 0-9 (10 intů)

 
Odpovědět
20.2.2015 17:29
Avatar
hercik11
Člen
Avatar
hercik11:3.4.2015 0:38

Prosím mám dotaz,
mám pole int? a v něm mám null a potřeboval bych najít minimální hodnotu ale aby to nebralo to null, nevíte jak to vyřešit ?:)

 
Odpovědět
3.4.2015 0:38
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na hercik11
Jan Vargovský:3.4.2015 0:50

Nějak ti nerozumím, můžeš to trošku rozvést?

int? min = new int?[] { null, null, 5 }.Min();

Ti vrátí normálně minimální hodnotu hodnotu. Když máš všechny prvky null, tak musí vrátit null.

 
Odpovědět
3.4.2015 0:50
Avatar
fatst
Člen
Avatar
fatst:15.4.2015 20:46

Pokud to tu ještě někdo čte, vyskytl se mi problém s půměrem - Average().
Používám SharpDevelop a u Average mi to píše:

System.Array neobsahuje definici Average a nebyla nalezena žádná metoda rozšíření Average, která by přijímala první argument typu System.Array (nechybí direktiva using nebo odkaz na sestavení?) (CS1061) - C:\Documents and Settings\TST\Do­kumenty\SharpDe­velop Projects\C TEST 4\C TEST 4\Program.cs:25,68

V podstatě mi nejdou ani další metody jako Sum aj.

Co s tím? Co mi chybí? Kde to seženu? Jak to tam dostanu?

Editováno 15.4.2015 20:47
 
Odpovědět
15.4.2015 20:46
Avatar
fatst
Člen
Avatar
fatst:15.4.2015 20:52

Ještě doplňuji kód:

using System;

namespace C_TEST_4
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Ahoj, spočítám ti průměr známek. Kolik známek zadáš?");
            int pocet = int.Parse(Console.ReadLine());
            int[] cisla = new int[pocet];
            for (int i = 0; i < pocet; i++)
            {
                Console.Write("Zadejte {0}. číslo: ", i + 1);
                cisla[i] = int.Parse(Console.ReadLine());
            }
           Console.WriteLine("Průměr tvých známek je: {0}", cisla.Average());


                        // Tohlke nemazat
                        Console.Write("Stiskni libovolnou klávesu... ");
                        Console.ReadKey(true);
                }
        }
}
 
Odpovědět
15.4.2015 20:52
Avatar
Ondřej Štorc
Tvůrce
Avatar
Odpovídá na fatst
Ondřej Štorc:15.4.2015 20:55

Average je v namespacu System.Linq (minuta googlení...)
Jinak mi tvůj dotaz přijde dost agresivní. A já když něco chci tak většinou poprosím a nenapíšu "Co s tím? Co mi chybí? Kde to seženu? Jak to tam dostanu?", ale něco ve stylu "Mohl by mi prosím někdo poradit? Děkuji", ale možná to takhle dělám jen já...

Odpovědět
15.4.2015 20:55
Život je příliš krátký na to, abychom bezpečně odebírali USB z počítače..
Avatar
fatst
Člen
Avatar
Odpovídá na Ondřej Štorc
fatst:15.4.2015 22:05

Díky za odpověď a omlouvám se, tak to opravdu vyznít nemělo. Jen jsem v tom začátečník a nefunkce takovéto věci mě dost vyděsila a jak jsem byl rozjetý, že zatím vše chápu z tohoto, podle mě, opravdu skvělého tutoriálu, mám utrum a ani po Tvé odpovědi nějak netuším, jak s tím naložit.

A pokud Tě mohu tedy ještě požádat o vysvětlení toho "namespace System.Linq", jak s tím mám naložit. Našel jsem jen toto:
https://msdn.microsoft.com/…=vs.90).aspx
a koukám na to, jako na Stvoření.

Asi se to bude nějak týkat tohoto pro int:

public static double Average(
        this IEnumerable<int> source
)

ale kam s tím? Na začátku mi to nefunguje, vadí mu asi:

static void Main(string[] args)

Můžeš mi to, prosím (už nejsem tak vyděšená, díky za zklidnění), ještě vysvětlit?

 
Odpovědět
15.4.2015 22:05
Avatar
fatst
Člen
Avatar
fatst:15.4.2015 22:34

Už jsem na to přišel:

using System.Linq;

... ano, objevil jsem Ameriku a sypu si popel na hlavu.
Ještě jednou se omlouvám, pokud to vyznělo jinak, než mělo. Opravdu to byly jen emoce ze zděšení, co mi zase ten počítač po instalací aktualizací vyvádí. Reinstaloval jsem totiž Framework 3.5 i 4 a k tomu se mi ještě spustily aktualizace, tak jsem předpokládal i možnou chybu v systému.
Ještě jednou se omlouvám a díky za ochotu...

 
Odpovědět
15.4.2015 22:34
Avatar
Matěj Vítovec:7.11.2015 17:58

Mám pole potřebuji vždy přepsat první pozici pole[0] a ostatní posunout o jednu pozici př. pole[10] = pole[9]
nevíte někdo jak to udělat?
Díky

 
Odpovědět
7.11.2015 17:58
Avatar
Milan Křepelka
Tvůrce
Avatar
Odpovídá na Matěj Vítovec
Milan Křepelka:9.11.2015 6:24

Pokud bys chtěl něco na 0.té pozici něco opravdu přepsat a zároveň ostatní posunou musí ti logicky vzniknout na 1.pozici "díra". Nakresli si to.

 
Odpovědět
9.11.2015 6:24
Avatar
Odpovídá na Milan Křepelka
Libor Šimo (libcosenior):9.11.2015 8:00

Ak som ho správne pochopil, chce vlastne zmazať pole[] a všetko ostatné posunúť o jednu pozíciu späť. To znamená nové menšie pole.

Odpovědět
9.11.2015 8:00
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
ostrozan
Tvůrce
Avatar
ostrozan:9.11.2015 8:34

Já naopak myslím, že chce stvořit Stack

int pole;

for(int i=pole.Lenght-1; i != 0; i--)
{
pole[i] = pole[i-1];
}

pole[0] =  nova_hodnota;
 
Odpovědět
9.11.2015 8:34
Avatar
Milan Křepelka
Tvůrce
Avatar
Odpovídá na ostrozan
Milan Křepelka:9.11.2015 8:48

J. Chápu, tedy přidat na nultou pozici.

https://msdn.microsoft.com/…vs.110).aspx

 
Odpovědět
9.11.2015 8:48
Avatar
ostrozan
Tvůrce
Avatar
Odpovídá na Matěj Vítovec
ostrozan:9.11.2015 12:43

.NET nabízí nátroje na všechno na co si vzpomeneš
v tomto případě kolekci Stack, případně Queue podle použití.

To ale poznáš, až se prokoušeš celým tutorialem.

Zatím bych si být tebou - podle toho, v jaké fázi se nacházíš - kolekcemi moc hlavu nemotal :) - ale je dobré to vědět.
Po pravdě - pole jako takové budeš používat minimálně, až poznáš komfort kolekcí

 
Odpovědět
9.11.2015 12:43
Avatar
Tomáš Jančák:11.4.2016 9:20

Ahoj,
chtěl bych poprosit o pomoc z jedním kodem, mám udělat program který vypočte obsah,obvod a poměr u obdelníku, obsah a obvod jsem už dal ale dělá my problém poměr aby byl zapsán nař. 2:3...
Zde dávám kod:

namespace Obdelnik
{
    class Program
    {
        static void Main()
        {
            Console.WriteLine("Zadejte 1 číslo pro výpočet obsahu a obvodu obdélníka");
            double a = double.Parse(Console.ReadLine());
            Console.WriteLine("Zadejte 2 číslo pro výpočet obsah a obvodu obdélníka");
            double b = double.Parse(Console.ReadLine());
            Obdelnik obdelnik = new Obdelnik(a, b);
            Console.WriteLine("Obvod: " + obdelnik.Obvod());
            Console.WriteLine("Obsah: " + obdelnik.Obsah());
            Console.WriteLine("Pomer: " + obdelnik.Pomer());
            Console.ReadLine();
        }
    }
    class Obdelnik
    {
        private double a;
        private double b;

        public Obdelnik(double astrana, double bstrana)
        {
            this.a = astrana;
            this.b = bstrana;
        }


        public double Obsah()
        {
            return ((this.a + this.b) * 2);
        }
        public double Obvod()
        {
            return (this.a * this.b);

        }
         public double Pomer()
        {
            return (this.a / this.b);

        }
    }
}
 
Odpovědět
11.4.2016 9:20
Avatar
Odpovídá na Tomáš Jančák
Michal Štěpánek:11.4.2016 9:43

Založ si na to nové vlákno... Nehledě k tomu, že obvod a obsah máš prohozený...

Editováno 11.4.2016 9:45
Odpovědět
11.4.2016 9:43
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na Michal Štěpánek
Tomáš Jančák:11.4.2016 9:57

Omlouvám se, myslel jsem ze se to sem bude hodit...

 
Odpovědět
11.4.2016 9:57
Avatar
Odpovídá na Tomáš Jančák
Michal Štěpánek:11.4.2016 10:02

Mě se omlouvat nemusíš, ale na řešení problému je vždycky lepší vytvořit si svoje vlákno, protože v příspěvcích u článku to může snadno "zaniknout", když někdo přidá komentář a na řešení by se vůbec nemuselo ani dostat...

Odpovědět
11.4.2016 10:02
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
 
Odpovědět
11.4.2016 10:19
Avatar
Odpovídá na Tomáš Jančák
Libor Šimo (libcosenior):11.4.2016 10:40

V céčku by som to napísal takto nejako:

#include <stdio.h>

/**
* Funkcia vyberie z dvoch cisiel to mensie a porovnava
* ci maju obidve cisla rovnakeho delitela najpr polovicou
* mensieho cisla, potom ho znizuje az po cislo 2.
* Ak je delitel rovnaky, vydeli nim obidve cisla.
* @param pointer na cislo 1 (je to zaroven aj vystupny parameter)
* @param pointer na cislo 2 (je to zaroven aj vystupny parameter)
*/

void pomer(int *cislo1, int *cislo2)
{
    int i;
    if (*cislo1 > *cislo2) {
        for (i = *cislo2 / 2; i > 1; i--) {
            if (*cislo1 % i == 0 && *cislo2 % i == 0) {
                *cislo1 /= i;
                *cislo2 /= i;
            }
        }
    }
    else {
        for (i = *cislo1 / 2; i > 1; i--) {
            if (*cislo1 % i == 0 && *cislo2 % i == 0) {
                *cislo1 /= i;
                *cislo2 /= i;
            }
        }
    }
}

int main(void)
{
    int a = 21, b = 10;

    pomer(&a, &b);
    printf("%d : %d", a, b);


    return 0;
}
Odpovědět
11.4.2016 10:40
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na Tomáš Jančák
Libor Šimo (libcosenior):11.4.2016 10:45

Pomýlil som sa.
Spoločného deliteľa treba začať hľadať nie z polovice menšieho čísla, ale z celého a potom to znižovať až po 2.

Editováno 11.4.2016 10:47
Odpovědět
11.4.2016 10:45
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Nona Hansel
Člen
Avatar
Nona Hansel:9.8.2017 14:11

Ahoj všem, zkoušela jsem si víše uvedené příklady v kompileru .NET Fiddle a háže mi chybovou hlášku, když použiju některou metodu na poli, konkrétně se jedná o tuto hlášku:

Compilation error (line 9, col 17): 'System.Array' does not contain a definition for 'Distinct' and no extension method 'Distinct' accepting a first argument of type 'System.Array' could be found (are you missing a using directive or an assembly reference?)

Compilation error (line 16, col 56): 'System.Array' does not contain a definition for 'Average' and no extension method 'Average' accepting a first argument of type 'System.Array' could be found (are you missing a using directive or an assembly reference?)

Zkoušela jsem uvedený kód u výkladu k Distinct() a proměnné délce pole zadat i do jiných kompilerů a výsledná hláška tam byla úplně stejná. Naopak s metodami na třídě Array .NET Fiddle problém nemá.

Umíte mi někdo poradit, prosím? Děkuji.

 
Odpovědět
9.8.2017 14:11
Avatar
Odpovídá na Nona Hansel
Luboš Běhounek Satik:9.8.2017 14:22

chybí ti na začátku souboru řádek

using System.Linq;
Odpovědět
9.8.2017 14:22
https://www.facebook.com/peasantsandcastles/
Avatar
František Hejský:31.8.2017 11:04

Poraďte mi prosím, někde tam mám chybu

Console.Write­Line("Ahoj, spočítám ti průměr známek, kolik známek zadáš?");
int pocet = int.Parse(Con­sole.ReadLine());
int[] cisla = new int[pocet];
for (int i = 0; i < pocet; i++);
{
Console.Write("Za­dej {0}. číslo: ", i + 1);
cisla[i] = int.Parse(Con­sole.ReadLine());
}
Console.Write­Line("Průměr tvých známek je: {0}", cisla.Average());
Console.ReadKey();

 
Odpovědět
31.8.2017 11:04
Avatar
Odpovídá na František Hejský
Štěpán Halíř:31.8.2017 12:45

Ahoj,

for (int i = 0; i < pocet; i++);

v řádku máš for cyklus ukončený středníkem, smaž ho a půjde ti to - středník tam nepatří.

Editováno 31.8.2017 12:46
 
Odpovědět
31.8.2017 12:45
Avatar
 
Odpovědět
31.8.2017 14:20
Avatar
Oli Wonder
Člen
Avatar
Oli Wonder:7.10.2017 11:05

Ahojte mám problém . Ako docielim to aby Po vyzvaní uživateľa zadal prve druhé,tretie čísla a uložilo ich do poľa?

 
Odpovědět
7.10.2017 11:05
Avatar
pocitac770
Tvůrce
Avatar
Odpovídá na Oli Wonder
pocitac770:7.10.2017 23:01

Například tak, že si vytvoříš pole o velikosti tři, a načteš první řádek s prvním číslem, uložíš na nultou pozici, načteš řádek s druhým číslem, uložíš na první pozici, načteš řádek s třetím číslem, uložíš na druhou pozici, to vše dáš do cyklu, aby to bylo jednodušší, easy peasy hotovo :)

 
Odpovědět
7.10.2017 23:01
Avatar
Oli Wonder
Člen
Avatar
Odpovídá na pocitac770
Oli Wonder:8.10.2017 14:47

Ale neviem ako do poľa tipnuteCisla ich uložiť . Cez ReadLine mi to nejde

 
Odpovědět
8.10.2017 14:47
Avatar
Oli Wonder
Člen
Avatar
Odpovídá na pocitac770
Oli Wonder:8.10.2017 14:54

Dobre už to mám :-)

 
Odpovědět
8.10.2017 14:54
Avatar
Oli Wonder
Člen
Avatar
Odpovídá na pocitac770
Oli Wonder:8.10.2017 15:03

Len Ked použijem Console.Write­Line(tipnuteCis­la); tak to nefunguje

 
Odpovědět
8.10.2017 15:03
Avatar
pocitac770
Tvůrce
Avatar
Odpovídá na Oli Wonder
pocitac770:8.10.2017 15:42

Tak si znovu pročti lekci, a koukni se, jak se vypisuje pole :)

 
Odpovědět
8.10.2017 15:42
Avatar
Oli Wonder
Člen
Avatar
Odpovídá na pocitac770
Oli Wonder:8.10.2017 15:51

Už som na to tiež prišiel :D A nevieš ako docielim to že chcem aby sa Console.WriteLine zobrazil až po 3sec napr?

 
Odpovědět
8.10.2017 15:51
Avatar
pocitac770
Tvůrce
Avatar
Odpovídá na Oli Wonder
pocitac770:8.10.2017 16:44

musíš nahoru přidat "using System.Threading;", a dále to v kódu použiješ jako Thread.Sleep(po­cetMilisekund);, v tvém případě 3000, ale snaž se si ten projekt ať děláš na čemkoliv co nejmíň komplikovat, máš se ještě hodně co učit

 
Odpovědět
8.10.2017 16:44
Avatar
Josef Středa:24.10.2017 8:54

Ahoj,
jak moc musím překopat
Console.Write­Line("Ahoj, spočítám ti průměr známek. Kolik známek zadáš?");
int pocet = int.Parse(Con­sole.ReadLine());
int[] cisla = new int[pocet];
for (int i = 0; i < pocet; i++)
{
Console.Write("Za­dejte {0}. číslo: ", i + 1);
cisla[i] = int.Parse(Con­sole.ReadLine());
}
Console.Write­Line("Průměr tvých známek je: {0}", cisla.Average());
Console.ReadKey();

abych to mohl použít ve win formu potřeboval bych aby se více rozměrné pole naplňovalo ze 4 různých textboxů
co textbox to " sloupec" ?

 
Odpovědět
24.10.2017 8:54
Avatar
Saimon Lázně Lasim:29.11.2017 19:01

Doufám , že jsem se jen nepřehlédl. Jak mám nahrát nějaký vstup jakožto hodnotu(-y) do pole, ať hledám kde hledám nikde to není, je to vůbec možné? Zkoušel jsem syntaxi typu cin>>pole; nebo cin>>pole[i]; bohužel mi to hodilo error. Díky :-D

 
Odpovědět
29.11.2017 19:01
Avatar
gcx11
Tvůrce
Avatar
Odpovídá na Saimon Lázně Lasim
gcx11:29.11.2017 21:51
pole[index] = hodnota;
 
Odpovědět
29.11.2017 21:51
Avatar
dez1nd
Člen
Avatar
Odpovídá na Saimon Lázně Lasim
dez1nd:30.11.2017 7:48

to o co se snažíš ty je v C++ ne ? v C# je to takto

pole[index] = hodnota;

(viz. gcx11)

Editováno 30.11.2017 7:48
 
Odpovědět
30.11.2017 7:48
Avatar
Walter
Člen
Avatar
Walter:20.12.2017 10:20

Zdravím,
chcel by som sa opýtať:
Mám napr. pole "pole_cisel", v ktorom je uložených 10 čísel.
double[] pole_cisel = {21.5, 12.3, 60.2, 123.4, 12.3, 21.5, 100, 100, 100, 100};

Potrebujem odstrániť duplicitné čísla, pričom čísla 100 odstraňovať nechcem a tiež nechcem, aby sa mi zmenšilo pole.
Metóda Distinct()
pole_cisel = pole_cisel.Dis­tinct().ToArra­y();
síce odstráni duplicitné hodnoty, ale odstráni aj 100-ky a tiež skráti pole:
{21.5, 12.3, 60.2, 123.4, 100}

 
Odpovědět
20.12.2017 10:20
Avatar
dez1nd
Člen
Avatar
Odpovídá na Walter
dez1nd:20.12.2017 11:55

a jaké hodnoty mají být místo duplicitních čísel ?

for(int i = 0; i <= 9; i++)
{
        if(pole_cisel[i] != 100)
        {
                pole_cisel[i] = tvoje dosazena hodnota;
        }
}
Editováno 20.12.2017 11:58
 
Odpovědět
20.12.2017 11:55
Avatar
dez1nd
Člen
Avatar
Odpovídá na dez1nd
dez1nd:20.12.2017 11:59

sorry to je blbost uz mi to nejde opravit

 
Odpovědět
20.12.2017 11:59
Avatar
Walter
Člen
Avatar
Odpovídá na dez1nd
Walter:20.12.2017 21:27

Namiesto duplicitných hodnôt by mala byť dosadená práve hodnota 100. Teraz si uvedomujem, že som to nešpecifikoval.
To čo si napísal nie je blbosť, len je to neúplné. Myslím, že si ma tým naviedol na riešenie. Doteraz som rozmýšľal nad existenciou nejakej metódy.

for (int i = 0; i < 10; i++)
{
    for (int j = i + 1; j < 10; j++)
        {
            if (pole[i] != 100 && pole[i] == pole[j])
                pole[j] = 100;
        }
}
 
Odpovědět
20.12.2017 21:27
Avatar
Walter
Člen
Avatar
Odpovídá na dez1nd
Walter:20.12.2017 21:31

Samozrejme pole[] rozumej pole_cisel[] :-)

 
Odpovědět
20.12.2017 21:31
Avatar
Enkii
Člen
Avatar
Enkii:31.3.2018 15:44

Moje řešení druhého příkladu ... může to takhle být? Vše funguje jak má

namespace CviceniDevateStredni
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Zadejte palindrom:"); // slovo které se čte stejně zleva i zprava
            string vstup = Console.ReadLine();  // holej vstup
            string vstupok = vstup.ToLower().Trim();   // vstup upravenej pro práci aby mně někdo neo**bal
            string prevrat = "";    // pracovní proměnná at mám to převrácení kam uložit

            for (int i = vstupok.Length - 1; i >= 0; i--)
            {
                prevrat += vstupok[i];
            }
            if (vstupok.Contains(prevrat))  // contains - metoda vraci true nebo false .. podle toho zda se prvek nachází v v poli

                Console.WriteLine("Ano, toto je palindrom.");
            else
                Console.WriteLine("Ne, toto není palindrom.");


            Console.WriteLine();
            Console.ReadKey();


        }
    }
}
Odpovědět
31.3.2018 15:44
Najdi co tě baví a nech ať tě to zabije..
Avatar
Enkii
Člen
Avatar
Odpovídá na Enkii
Enkii:31.3.2018 15:47

Vedle, omlouvám se ..

Odpovědět
31.3.2018 15:47
Najdi co tě baví a nech ať tě to zabije..
Avatar
Arny
Člen
Avatar
Arny:8.10.2018 22:07

Ahoj, zkouším si metodu copy a chci si zkopírovat 3 čísla z původního pole. Jak na to? Mám to takto:
int[] numbers = { 2, 6, 21, 45, 9, 45, 98 };
Array.Copy(num­bers,i,3);
foreach (int i in numbers)
Console.Write­Line("{0}", i);
Console.ReadKey();

 
Odpovědět
8.10.2018 22:07
Avatar
Vykuk
Člen
Avatar
Odpovídá na Arny
Vykuk:13.12.2018 13:11

Druhý parametr Array.Copy má být další pole, do kterého chceš kopírovat ty 3 prvky. Třeba int[] numbers2... Cyklus foreach by pak měl číst taky z toho druhého pole.

 
Odpovědět
13.12.2018 13:11
Avatar
Jana
Člen
Avatar
Jana:22.4.2019 16:16

k úvodní ukázce v článku jak naplnit pole - když napíšu:

int[] pole = new int[10];
pole[0] = 1;
for (int i = 0; i < 10; i++)
    pole[i] = i + 1;

tak dám nejdřív na pozici 0 jedničku a pak ji cyklem for přepíšu (shodou okolností opět na jedničku), je to tak?
Řádek
pole[0] = 1;
je tam tedy zbytečný, doporučila bych ho odstranit - jako začátečník jsem musela chvíli přemýšlet a zkoušet co tento řádek dělá než jsem přišla na to nic ;-)

 
Odpovědět
22.4.2019 16:16
Avatar
Jana
Člen
Avatar
Odpovídá na Quest
Jana:2.5.2019 12:01

a takhle jednoduše by to nešlo?

string[] sever = { "USA", "Kanada", "Mexiko" };
            string[] jih = { "Brazílie", "Argentina", "Chile", "Peru" };
            string[] amerika = new string[1];
            amerika = sever.Union(jih).ToArray();
            foreach (string stat in amerika)
                Console.Write("{0} ", stat);
            Console.WriteLine();
            Console.WriteLine(amerika.Length);
            Console.ReadKey();

není mi ale jasný jak je to s tou velikostí pole:

můžeme pole založit s velikostí, kterou dynamicky zadáme až za běhu programu, ale velikost existujícího pole modifikovat nemůžeme.

Zkoušela jsem založit nové pole amerika s délkou sever.Length, pak (sever.Length + jih.Length), a nakonec s délkou 1 - zdá se že výsledek je vždy stejný, neznamená to že se délka pole mění?

 
Odpovědět
2.5.2019 12:01
Avatar
Odpovídá na Jana
Neaktivní uživatel:2.5.2019 20:13

Sice se úplně nevyznám ve tvém dotazu, ale:

  1. Co jestli by nešlo takhle jednoduše?
  2. Do ameriky dáš nové pole s určitou délkou. Potom do ní dáš jiné pole, které vznikne sjednocením severu a jihu. Délka pole se tedy nemění. Mění se celé pole.
Odpovědět
2.5.2019 20:13
Neaktivní uživatelský účet
Avatar
Odpovídá na Jana
Lucie Dolinay:3.5.2019 1:13

Ahoj,

Jak to vidím já:-)

Myslím, že touto částí věty "můžeme pole založit s velikostí, kterou dynamicky zadáme až za běhu programu" autor myslel tuto část kódu
int pocet = int.Parse(Con­sole.ReadLine()); //po spuštění programu uživatel zadá velikost pole např. 5
int[] cisla = new int[pocet]; //tedy dynamické nastavení protože uživatel zadává až po spuštění programu; v terminologii, která je použita ve článku by to pak staticky vypadalo, tak, že již před spuštěním by programátor napsal int[] cisla = new int[5]; (uživatel velikost daného pole neovlivní)

Druhá část věty "ale velikost existujícího pole modifikovat nemůžeme"
Zde k vysvětlení použiji tvou část kódu:
string[] jih = { "Brazílie", "Argentina", "Chile", "Peru" }; // toto je existující pole a je to totéž jako by jsi napsala string[] sever = new string[4];
Velikost pole je 4. A když je to tak, tak už nemůžeš napsat sever[4] = "Bolívie" (pozn. indexace od 0).
Po startu programu je prostě vytvořené pole o velikosti 4 a tu nezměníš. V kódu si sice můžeš dovolit napsat např.
string[] jih = { "Brazílie", "Argentina", "Chile", "Peru" };
jih = new string[5];
ale to pak naplnění pole jednotlivými státy ztrácí smysl neboť po následujícím řádku budeš mít změněnou velikost, ale všechno bude null.

Dále tento řádek je zbytečný. Funkce Union vytváří nové pole, ve kterém budou požadované změny a to také vrací, takže bych použila klíčové slovo var (výběr datového typu zajistí kompiler).
Stačí napsat: var amerika = sever.Union(jih)­.ToArray();

A na závěr jen taková vychytávka. Pro odřádkování nemusíš použít Console.Write­Line(). Stačí k tvému výpisu velikosti napsat "\n". To se v konzolových aplikacích o odřádkování postará.
Console.Write­Line("\n" + amerika.Length);

To už máme -2 řádky a to se počítá:-)
Pokud jsem správně pochopila tvůj dotaz, tak jsem snad trošku pomohla;-)

string[] sever = { "USA", "Kanada", "Mexiko" };
string[] jih = { "Brazílie", "Argentina", "Chile", "Peru" };
var amerika = sever.Union(jih)­.ToArray();
foreach (string stat in amerika)
Console.Write("{0} ", stat);
Console.Write­Line("\n" + amerika.Length);
Console.ReadKey();

 
Odpovědět
3.5.2019 1:13
Avatar
Martin Patočka:6.8.2019 11:03

Ahoj, prosím vás o radu, potřebuji do mého programu udělat pole instancí jednoho objektu a pak ty objekty z pole vytahovat jeden po druhém, nevíte jak toho nejlépe docílit? Každá isntance má vlastní jméno a staminu.
Díky moc!

 
Odpovědět
6.8.2019 11:03
Avatar
Odpovídá na Martin Patočka
Martin Havelka:6.8.2019 13:11

Tak to ukládej v generickém listu. Přečti si c# sekci kolekce...tam je o tom tuna informací.

List<trida> nazevListu = new List<trida>();

nazevListu.Add(instanceTridy);
 
Odpovědět
6.8.2019 13:11
Avatar
 
Odpovědět
6.8.2019 17:14
Avatar
Zdeněk Srnský:3.9.2019 15:50

Ahoj , Velice se mi líbí tyto stránky, ale ať se snažím jak chci nejsem schopen se nic naučit z česky psaného textu. Potom se mi motá 2x tolik výrazů které k sobě neumím přiřadit. Vím co je Array a jak s ním pracovat, ale jak někdo řekne pole tak jsem úplně vedle.

 
Odpovědět
3.9.2019 15:50
Avatar
Jiří Dvořák:19.9.2019 0:32

Zdravím,
zkouším si dělat pole a napadlo mě... když mám pole o 5ti hodnotách které zadá uživatel:

int[] pole = new int [5];
            Console.WriteLine("1.č");
            pole[0] = int.Parse(Console.ReadLine());
            Console.WriteLine("2.č");
            pole[1] = int.Parse(Console.ReadLine());
            Console.WriteLine("3.č");
            pole[2] = int.Parse(Console.ReadLine());
            Console.WriteLine("4.č");
            pole[3] = int.Parse(Console.ReadLine());
            Console.WriteLine("5.č");
            pole[4] = int.Parse(Console.ReadLine());

            Console.ReadKey();

jak vypíši např. třeba jen 2. a 4. hodnotu... kupříkladu...

poradí někdo? :)

Díky za odpovědi! :)

 
Odpovědět
19.9.2019 0:32
Avatar
Odpovídá na Jiří Dvořák
Jiří Dvořák:19.9.2019 0:37

tak nakonec sem na to přišel sám :D

int[] pole = new int [5];
            Console.WriteLine("1.č");
            pole[0] = int.Parse(Console.ReadLine());
            Console.WriteLine("2.č");
            pole[1] = int.Parse(Console.ReadLine());
            Console.WriteLine("3.č");
            pole[2] = int.Parse(Console.ReadLine());
            Console.WriteLine("4.č");
            pole[3] = int.Parse(Console.ReadLine());
            Console.WriteLine("5.č");
            pole[4] = int.Parse(Console.ReadLine());

            Console.Write(pole[2] + " ");
            Console.Write(pole[0] + " ");

            Console.ReadKey();
 
Odpovědět
19.9.2019 0:37
Avatar
Rebeka Bulkova:24.11.2019 17:03

Ahoj ahoj, čo sa týka toho average príkladu.... ide mi to iba ak dám using System.linq; ale vtedy mi neberie console. V čom je chyba? Ďakujem :)

 
Odpovědět
24.11.2019 17:03
Avatar
Marek Vajčner:8.3.2020 13:22

Opět velký dík za další lekci. Je to stále zajímavější. Jdu se vrhnout na ta cvičení. Jsem zvědav jak mi to půjde.

 
Odpovědět
8.3.2020 13:22
Avatar
David H.
Člen
Avatar
David H.:8.3.2020 21:44

Díky za článek. ;-)

 
Odpovědět
8.3.2020 21:44
Avatar
Josef Theuer
Člen
Avatar
Josef Theuer:13.3.2020 0:24

Jen taková malá technická, asi bych místo výzvy
Console.Write("Za­dejte {0}. číslo: ", i + 1);
podšoupnul
Console.Write("Za­dejte {0}. známku: ", i + 1);
když už je to o průměru ze známek
Jinak chválím , celý tutoriál, výborný zdroj pro nějaké získání základních znalostí.

Editováno 13.3.2020 0:26
Odpovědět
13.3.2020 0:24
No pain no gain
Avatar
Vlkodlak90
Člen
Avatar
Odpovídá na Rebeka Bulkova
Vlkodlak90:3.4.2020 0:56

Ahoj rovnaký problém som mal aj ja a vyššie som našiel len riešenie a rovnako ako teba aj mňa napadlo nahradiť pôvodné týmto.

using System.Linq;

Správne to však len dopíšeš pod to viď. nižšie, ( dokonca naraz vieš využívať viaceré "systémy" )

using System;
using System.Linq;
 
Odpovědět
3.4.2020 0:56
Avatar
Vlasta
Tvůrce
Avatar
Vlasta:21.5.2020 15:06

Díky metodě ToArray() jsem si konečně zapamatovala, že pole je Array a ne Field (vím, že to je něco jiného...) :D

Editováno 21.5.2020 15:06
Odpovědět
21.5.2020 15:06
It's all about the mindset.
Avatar
Selfis1
Člen
Avatar
Odpovídá na Rebeka Bulkova
Selfis1:29.5.2020 23:23

Linq neboli (Language Integrated Query) je syntax pomocí kterého můžeš načítat různý data z různých zdrojů a formátů.

 
Odpovědět
29.5.2020 23:23
Avatar
Savi
Člen
Avatar
Savi:15.6.2020 10:37

Zdravím. Chtěl bych se zeptat, jak by se zde například řešilo ošetření vstupů, že uživatel zadal opravdu string do pole "jmena[]". Řekněme že napíšu něco jako:

{
          Console.WriteLine("Kolik lidí se bude účastnit?: ");
          int pocet = int.Parse(Console.ReadLine());
          string[] jmena = new string[pocet];


              for (int i = 0; i < pocet; i++)
              {
              Console.WriteLine("Zadej {0}.jméno: ", i + 1);
              jmena[i] = Console.ReadLine();

              }

              for (int j = 0; j < jmena.Length; j++)
              {
              Console.WriteLine("{0}.jméno z {1} lidí je : {2}",j+1,jmena.Length, jmena[j]);
              }

          Console.ReadKey();

      }

Děkuji.

 
Odpovědět
15.6.2020 10:37
Avatar
Alesh
Překladatel
Avatar
Odpovídá na Savi
Alesh:15.6.2020 11:50

Console.ReadLine() vrací string, a jelikož jmena jsou pole stringů tak to ošetřovat není potřeba. Nebo nechápu, co chceš ošetřovat, to je taky možný. ;-)

 
Odpovědět
15.6.2020 11:50
Avatar
Savi
Člen
Avatar
Odpovídá na Alesh
Savi:15.6.2020 12:57

No, myslel jsem, aby při zadávání jména nemohl uživatel zadat číslo... a z minulé lekce jsem si vzpomněl na TryParse(). Něco jako kontrola IsNumber na "string" vstup. Sorry za tyhle lama komenty.. jsem naprostý začátečník.

Napadlo mě něco jako:

for (int i = 0; i < pocet; i++)
                {
                    do
                    {
                        Console.WriteLine("Zadej {0}.jméno: ", i + 1);
                        jmena[i] = Console.ReadLine();
                    } while (int.TryParse(jmena[i]), out jmena[i])
                }

Děkuji za radu.

 
Odpovědět
15.6.2020 12:57
Avatar
Alesh
Překladatel
Avatar
Odpovídá na Savi
Alesh:15.6.2020 13:41

Jo, už chápu, o co ti jde. Tohle ale není otázka parsování, protože jak jsem již psal, tak vstup z konzole je string. Pomocí parsování ho převádíš na jiný typ proměnné, což u stringu již jaksi postrádá smysl, protože už string máš. Tobě jde ale o jakousi "masku", tj. filtr toho, co uživatel může do toho stringu napsat. Nejde jen o čísla, ale i třeba o interpunkci apod. K tomuto účelu se využívají tzv. regulární výrazy.

 
Odpovědět
15.6.2020 13:41
Avatar
Savi
Člen
Avatar
Odpovídá na Alesh
Savi:15.6.2020 13:48

Perfektní. Děkuji :-)

 
Odpovědět
15.6.2020 13:48
Avatar
Jiří Staniš:29.12.2020 1:48

Ahoj, při testování metody Take() jsem zjistil, že vyžaduje using System.Linq; (což není pro úplné začátečníky...). Výsledek je pak nutné ukládat do proměnné deklarované pomocí var. Lze výsledek metody Take() rovnou uložit jako string[] ?

Editováno 29.12.2020 1:49
 
Odpovědět
29.12.2020 1:48
Avatar
Václav Dachs:24.1.2021 11:02

Ahoj,
Koukal jsem, žeVisual Studio ve třídě Array nabízí kromě metody IndexOf() i metodu BinarySearch() tuto metodu znám z tutoriálu Javy. Jestli to chápu správně jde o ekvivalentní metodu k IndexOf() nebo má metoda BinarySearch() v C# jinou funkci?

Odpovědět
24.1.2021 11:02
S úsměvem jde všechno lépe :-)
Avatar
Václav Dachs:24.2.2021 16:26

Ahoj, super tutoriál. Trochu jsem se zamyslel a zkusil jsem vytvořit program, který na začátku má nulovou velikost pole pro uložení jmen uživatelů. Následně je pole dle potřeby zvětšováno přidáváním jmen uživatelů a na konci je toto pole obsahující jména uživatelů vypsáno pomocí foreach cyklu.

//výpis textu
            Console.WriteLine("Vytvořte si databázi uživatelů.");

            //deklarace pole pro uložení jmen uživatelů
            string[] uzivatele = new string[0];
            //deklarace řídící proměnné pro ukončení cyklu
            bool pokracovat = true;
            //deklarace proměnné pro výpis pořadí uživatele
            int poradi = 1;

            //cyklus přidávající uživatele
            while (pokracovat)
            {
                //vyzvání uživatele k zadání jména uživatele
                Console.Write($"\nZadejte jméno {poradi}. uživatele: ");
                //deklarace pole o jedné proměnné zadané uživatelem
                string[] uzivatel = { Console.ReadLine() };
                //připojení pole uzivatel do pole uzivatele
                uzivatele = uzivatele.Concat(uzivatel).ToArray();
                //inkrementace počítadla pořadí
                poradi++;

                //deklarace řídící proměnné pro cyklus hlídající správnost volby přidaní/nepřidání dalšího uživatele
                bool platnaVolba = false;
                //cyklus hlídajíci platnost volby
                while (!platnaVolba)
                {
                    //výpis dotazu
                    Console.Write("Přejete si přidat dalšího uživatele? [a/n]: ");
                    //zpracování volby uživatele
                    switch (Console.ReadKey().KeyChar.ToString().ToLower())
                    {
                        default:
                            Console.WriteLine("\nNeplatná volba!");
                            break;
                        case "a":
                            platnaVolba = true;
                            break;
                        case "n":
                            platnaVolba = true;
                            pokracovat = false;
                            break;
                    }
                }

                //odřádkování
                Console.WriteLine();
            }

            //reset proměné poradi
            poradi = 1;


            //výpis obsahu pole uzivatele
            foreach (string s in uzivatele)
            {
                //výpis jména uživatele
                Console.Write($"\nJméno {poradi}. uživatele: {s};");
                //inkrementace počítadla pořadí
                poradi++;
            }

            //čekání na stsik libovolné klávesy
            Console.ReadKey();
Odpovědět
24.2.2021 16:26
S úsměvem jde všechno lépe :-)
Avatar
Betticek
Člen
Avatar
Betticek:24.4.2021 12:13

Ahoj, prosím o pomoc.. U proměnné délky pole, i přesto, že ze zadání přesně opíšu/ zkopíruji do VisualStudia mi to hlásí chybu CS1061 in[] neobsahuje definici pro Average a nenašla se žádná dostupná metoda rozšíření Average, která přijímá první argument typu int[]. (nechybí Direktiva using nebo odkaz na sestavení?).

Kde je tedy prosím chyba?

 
Odpovědět
24.4.2021 12:13
Avatar
Alesh
Překladatel
Avatar
Odpovídá na Betticek
Alesh:24.4.2021 12:40

Dej sem ten svůj kód vč. usingů.

 
Odpovědět
24.4.2021 12:40
Avatar
Radek Veverka
Tvůrce
Avatar
Odpovídá na Betticek
Radek Veverka:24.4.2021 12:54

Potřebuješ:

using System.Linq;
 
Odpovědět
24.4.2021 12:54
Avatar
Betticek
Člen
Avatar
Odpovídá na Alesh
Betticek:24.4.2021 13:01
using System;

namespace Proměnná_délka_pole
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Ahoj, spočítám ti průměr známek. Kolik známek zadáš?");
            int pocet = int.Parse(Console.ReadLine());
            int[] cisla = new int[pocet];
            for (int i = 0; i < pocet; i++)
            {
                Console.Write("Zadejte {0}. číslo: ", i + 1);
                cisla[i] = int.Parse(Console.ReadLine());
            }
            Console.WriteLine("Průměr tvých známek je: {0}", cisla.Average());
            Console.ReadKey();
        }
    }
}
 
Odpovědět
24.4.2021 13:01
Avatar
Betticek
Člen
Avatar
Odpovídá na Radek Veverka
Betticek:24.4.2021 13:03

Ááááá, děkuji moc :)
Můžu se prosím ještě zeptat, proč to tam musí být, resp. kdy tam má být using System.Linq; ?
Moc děkuji.

 
Odpovědět
24.4.2021 13:03
Avatar
Radek Veverka
Tvůrce
Avatar
Odpovídá na Betticek
Radek Veverka:24.4.2021 14:11

Ahoj, v článku to není vysvětleno zřejme proto, aby to nemátlo začátečníky. Datový typ pole ve skutečnosti neobsahuje metody jako Sum(), Average(), Distinct() apod, jak je v článku uvedeno v sekci "Metody na poli" (z uvedených obsahuje pouze vlastnost Length). Jsou to takzvané extension metody. To jsou ve skutečnosti statické metody, vázané na konkrétní datový typ a tváří se jako instanční, můžeš je tedy volat přímo na poli. Jenže abys to mohl provést, musíš pomocí using vložit potřebný balíček, který tyto metody obsahuje, v tomto případě System.Linq. Linq tyto metody nabízí nejen polím, ale i dalším kolekcím. Pomocí linq metod tak můžeš pracovat se všemi kolekcemi stejně, aniž bys musel řešit jejich skutečný typ (zdali je to pole, list, linked list atd...)
Snad je to aspoň trochu srozumitelné.

 
Odpovědět
24.4.2021 14:11
Avatar
Radek Veverka
Tvůrce
Avatar
Odpovídá na Betticek
Radek Veverka:24.4.2021 14:13

Jinak k tomu kdy použít Linq: Vždy, když pracuješ s poli a dalšími kolekcemi. Získáš metody které usnadní spoustu práce :)

 
Odpovědět
24.4.2021 14:13
Avatar
Betticek
Člen
Avatar
Odpovídá na Radek Veverka
Betticek:25.4.2021 18:23

Moc děkuji za vysvětlení, už je mi to jasné :)

 
Odpovědět
25.4.2021 18:23
Avatar
Miroslav Melzer:12.6.2021 16:30

Potřeboval bych vysvětlit proč se v tom proměnná délka pole objevuje to cisla[i] = atd.
Co přesně to znamená to cisla[i].

 
Odpovědět
12.6.2021 16:30
Avatar
Alesh
Překladatel
Avatar
Odpovídá na Miroslav Melzer
Alesh:12.6.2021 21:16
cisla[i] = int.Parse(Console.ReadLine());

To nesouvisí s proměnnou délkou pole ale s for cyklem. Jím procházíš to pole (řídicí proměnná je právě to "i") a na i-tou pozici přiřazuješ vstup z konzole.

 
Odpovědět
12.6.2021 21:16
Avatar
Odpovídá na Alesh
Miroslav Melzer:12.6.2021 22:17

Aha, ok děkuju.

 
Odpovědět
12.6.2021 22:17
Avatar
Dušan Fajnor:11.8.2021 18:38

Uvítal by Som bližie komentáre // k jednotlivým krokom v kóde, dosť, niektoré veci (ne)chápem, aj keď Som si lekciu trikrát prebehol.

Console.WriteLine("Ahoj, spočítám ti průměr známek. Kolik známek zadáš?");
int pocet = int.Parse(Console.ReadLine());
int[] cisla = new int[pocet]; //uvítal by som tu komentár, prečo takto
for (int i = 0; i < pocet; i++) //uvítal by som tu komentár, prečo takto
{
    Console.Write("Zadejte {0}. číslo: ", i + 1); //uvítal by som tu komentár, prečo takto
    cisla[i] = int.Parse(Console.ReadLine()); //uvítal by som tu komentár, prečo takto
}
Console.WriteLine("Průměr tvých známek je: {0}", cisla.Average()); //uvítal by som tu komentár, prečo takto
Console.ReadKey();
 
Odpovědět
11.8.2021 18:38
Avatar
Alesh
Překladatel
Avatar
Odpovídá na Dušan Fajnor
Alesh:11.8.2021 23:02

Myslím, že vše použité v citovaném kódu, je v lekcích vysvětlené a žádné velké složitosti v tom nejsou. Pokud ti přeci jen něco není jasné, dej konkrétní dotaz a někdo ti to určitě zkusí vysvětlit. ;-) Komentovat prakticky každý řádek kódu podle mě nemá smysl.
Pokud vezmi tvé komentáře/dotazy popořadě:

  1. deklarace a vytvoření pole vysvětleno v této lekci
  2. for cyklus vysvětlen v 7. lekci
  3. viz metoda Format na konci 4. lekce
  4. viz parsování ve 3. lekci
  5. viz metody pole v této lekci
 
Odpovědět
11.8.2021 23:02
Avatar
Odpovídá na Alesh
Dušan Fajnor:11.8.2021 23:40

Skorej Som mal na mysli taký postup myslenia ako vytváraš tie kódy pre jednotlivé riadky, bo si ich musím vytvoriť sám.

Dík za reakciu, dáko sa tým prekusnem.
S pozdravom:
Dušan

 
Odpovědět
11.8.2021 23:40
Avatar
Alesh
Překladatel
Avatar
Odpovídá na Dušan Fajnor
Alesh:12.8.2021 0:17

No, tak takto bych to okomentoval. Dle zadání se má vytvořit konzolová aplikace pro výpočet průměru známek, kde počet známek zadává uživatel jako první vstup.

Console.WriteLine("Ahoj, spočítám ti průměr známek. Kolik známek zadáš?");
int pocet = int.Parse(Console.ReadLine());
int[] cisla = new int[pocet]; // založení pole o velikosti počtu zadaných známek
for (int i = 0; i < pocet; i++) // cyklus přes všechny prvky pole známek, naplnění pole jednotlivými známkami
{
    Console.Write("Zadejte {0}. číslo: ", i + 1); // výzva uživateli k zadání 1. až n-té známky (proměnná i běží od 0 do n-1, proto v té výzvě vypisujeme i+1, což je lidsky srozumitelnější, než to programátorské číslování od 0)
    cisla[i] = int.Parse(Console.ReadLine()); // uložení naparsovaného čísla na příslušnou pozici v poli
}
Console.WriteLine("Průměr tvých známek je: {0}", cisla.Average()); // výpis výstupu s výpočtem průměru
Console.ReadKey();
 
Odpovědět
12.8.2021 0:17
Avatar
Odpovídá na Alesh
Dušan Fajnor:17.8.2021 16:16

Takto si to predstavujem, pekný komentár na zamyslenie

 
Odpovědět
17.8.2021 16:16
Avatar
Michala Tajzichova:16.9.2021 13:05

ahoj,
Proměnná délka pole - vypocet prumeru znamek
snazim se prepsat si uvedeny priklad, ale porad koncim s chybou:
Error CS1061 'int[]' does not contain a definition for 'Average' and no accessible extension method 'Average' accepting a first argument of type 'int[]' could be found (are you missing a using directive or an assembly reference?)
co delam spatne?

 
Odpovědět
16.9.2021 13:05
Avatar
Alesh
Překladatel
Avatar
Odpovídá na Michala Tajzichova
Alesh:16.9.2021 14:08
using System.Linq;
 
Odpovědět
16.9.2021 14:08
Avatar
Odpovídá na Alesh
Michala Tajzichova:17.9.2021 9:12

dekuju, uz to chodi ;-)

 
Odpovědět
17.9.2021 9:12
Avatar
Libor Szücs
Člen
Avatar
Libor Szücs:4.11.2021 11:58

Ahoj,
Při používání například metody Concat() zavolané na pole musím použít ještě.ToArray(), aby to fungovalo. Proč to u těchto metod není v článku napsané? Taky je možný, že se pletu a použít se to nemusí nebo jsem někde něco přehlídl. Vysvětlí mi to někdo prosím?
Děkuji.

 
Odpovědět
4.11.2021 11:58
Avatar
Libor Szücs
Člen
Avatar
Odpovídá na Libor Szücs
Libor Szücs:4.11.2021 12:05

Dotaz beru zpět, přehlídl jsem vysvětlení v článku.

 
Odpovědět
4.11.2021 12:05
Avatar
Neaktivní uživatel:4.11.2021 15:02

Ahoj!
mám problém s následujícím:

string[] simpsonovi = { "Homer", "Marge", "Bart", "Lisa", "Maggie" };
            Console.WriteLine(simpsonovi.Contains("Bart"));

Zde na stránkách mi tento kousek programu funguje, ale u mě na:

Microsoft Visual Studio Community 2019
Verze 16.11.5 (čeština)

mi hlásí chybu:

Chyba CS1929 string[] neobsahuje definici pro Contains a přetížení optimální metody rozšíření MemoryExtensi­ons.Contains<strin­g>(ReadOnlySpan<strin­g>, string) vyžaduje přijímač typu ReadOnlySpan<strin­g>.

Podobný problém jsem měl i u řešení Ovoce-zelenina v následující lekci. Zkopíroval jsem řešení itnetwork a také chyba. Pokud ale místo pole použiji jen string, nebo prvek pole, tak to funguje.

V mém řešení jsem využil:

if (Array.IndexOf(zeleniny, produkt) > -1)
                    Console.WriteLine("Zadal jsi zeleninu");

Děkuji za pomoc!

Odpovědět
4.11.2021 15:02
Neaktivní uživatelský účet
Avatar
Karel Karafiát:22.11.2021 11:34

Ahoj, mám dotaz ohledně seřazení dle abecedy. Jak je to s písmenem CH? To v US abecedě není - takže to dle naší abecedy není 100%.

 
Odpovědět
22.11.2021 11:34
Avatar
Ladislav SKOKAN:30.12.2021 17:21

Pro opravdové řazení kombinace text+číslo nebo číslo+text je vždy vhodnější použít vlastní rutinu, která rozezná co je text a co číslo. Vyhneme se tak nesmyslům řazení jako je např. 1, 100, 15 atd...

 
Odpovědět
30.12.2021 17:21
Avatar
Odpovídá na Karel Karafiát
vratislav.hirs:9. ledna 20:41

Asi se dá definovat, podle které abecedy se má třídit.
Viz následující kód.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Globalization;
using System.Threading;

namespace ArraySort
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] seznam = { "I","H","CH","C"};
            Console.WriteLine("Opis výchozího seznamu");
            foreach (string prvek in seznam)
            Console.Write(prvek + ", ");
            Console.WriteLine();

            Array.Sort(seznam);
            Console.WriteLine("Třídění dle výchozí CultureInfo (cs-CZ)");
            foreach (string prvek in seznam)
            Console.Write(prvek+", ");
            Console.WriteLine();

            //změna třídění na en-US
            CultureInfo ci = new CultureInfo("en-US");
            Thread.CurrentThread.CurrentCulture = ci;

            Array.Sort(seznam);
            Console.WriteLine("Třídění dle CultureInfo en-US");
            foreach (string prvek in seznam)
            Console.Write(prvek + ", ");
            Console.WriteLine();

            //změna třídění na sk-SK
            ci = new CultureInfo("sk-SK");
            Thread.CurrentThread.CurrentCulture = ci;

            Array.Sort(seznam);
            Console.WriteLine("Třídění dle CultureInfo sk-SK");
            foreach (string prvek in seznam)
            Console.Write(prvek + ", ");

            Console.ReadKey();
        }
    }
}
 
Odpovědět
9. ledna 20:41
Avatar
Tomáš Koutecký:27. února 10:42

Ocenil bych příklady k metodám: Concat(), Intersect() a Union(), protože z popisu to není uplně jasné, co se stane.

 
Odpovědět
27. února 10:42
Avatar
Tomáš Havránek :15. května 16:58

Stále se plácám v pochopení pole. Pokud vezmu tento kód, tedy zadávání pole za běhu programu:

Console.WriteLine("Ahoj, spočítám ti průměr známek. Kolik známek zadáš?");
int pocet = int.Parse(Console.ReadLine());
int[] cisla = new int[pocet];
for (int i = 0; i < pocet; i++)
{
    Console.Write("Zadejte {0}. číslo: ", i + 1);
    cisla[i] = int.Parse(Console.ReadLine());
}
Console.WriteLine("Průměr tvých známek je: {0}", cisla.Average());
Console.ReadKey();

respektive tuto část

cisla[i] = int.Parse(Console.ReadLine());

Co to dělá to chápu. Ale potřebuji si nějak zdůvodnit nebo spíš pojmenovat "cisla[i]", mě to nutí tam psát:

i = int.Parse(Console.ReadLine());

To samozřejmě nefunguje, ale jak si mám nazvat cisla[i]. Hodnoty "i" v poli čísla? Mě ten zápis nejde do hlavy a jakmile si to nezdůvodním, tak nemůžu dál. Někdo ochotný mi to pojmenovat?

 
Odpovědět
15. května 16:58
Avatar
Odpovídá na Tomáš Havránek
Lukáš Bartošek :16. května 12:03
Console.WriteLine("Ahoj, spočítám ti průměr známek. Kolik známek zadáš?");
int pocet = int.Parse(Console.ReadLine());               //Zadáš velikost pole
int[] cisla = new int[pocet];            //Vytvoří se Pole o velikosti co jsi zadal
for (int i = 0; i < pocet; i++)          /*For cyklus proiteruje počet polí co jsi zadal. Program musí
                                          vědět do jakého pole zadávaš čislo.
                                          Tj. cyklus 0 >> i=0  cisla[0] = zadane čislo
                                          Tj. cyklus 3 >> i=3  cisla[3] = zadane čislo */

{
    Console.Write("Zadejte {0}. číslo: ", i + 1);
    cisla[i] = int.Parse(Console.ReadLine());
}
Console.WriteLine("Průměr tvých známek je: {0}", cisla.Average());
Console.ReadKey();

a pokud by jsi zadal

i = int.Parse(Console.ReadLine());

Tak by ti to do proměné s názvem i zapsalo zadanou hodnotu.
Fungovat ti to nebude jelikož jsi nevytvořil proměnou s daným názvem.

Snad jsem pomohl kdyby ne tak zkus znovu zadat otázku :D

P.S. nejsi z Olomouce?

Odpovědět
16. května 12:03
Nachystejte uzenáče, na snídani jsem zpátky!
Avatar
Odpovídá na Lukáš Bartošek
Tomáš Havránek :18. května 9:47

Ahoj, děkuju za rychlou odpověď. Přesně takhle to prostě občas potřebuju popsat, abych to pochopil 🙂 Spousta věcí je ve finále logická a jednoduchá, ale pokud jí nemám popsanou doslovně je těžší to uchopit. Olomouc ne, jsem z Benešova.

 
Odpovědět
18. května 9:47
Avatar
Jiří Vojtíšek Vepřek:11. června 20:14

obrovské množství nových metod najednou.....mám v tom pěkný hokej.....

 
Odpovědět
11. června 20:14
Avatar
Antonín Pohl:29. června 16:25

Mám docela problém pochopit metody na poli bez uvedení příkladů...

Odpovědět
29. června 16:25
Každý problém má řešení.
Avatar
Pavel Neuhausl:8. července 20:19

Možná hloupý dotaz, ale proč musí být pro vypsání pole

for (int i = 0; i < pole.Length; i++)

když to vypíše i bez toho for, takto:

int[] pole = new int[10];
pole[0] = 1;
for (int i = 0; i < 10; i++)
{
    pole[i] = i + 1;
    Console.Write("{0} ", pole[i]);
}

Díky za objasnění.

 
Odpovědět
8. července 20:19
Avatar
Max Vedral
Člen
Avatar
Max Vedral:27. července 15:31

Mohu se zeptat jak třeba v poli které je velké 7 najde a vypíše 4 prvek?

 
Odpovědět
27. července 15:31
Avatar
Odpovídá na Max Vedral
Dominik Paulík:27. července 18:31

Tipuji, že myslíš takto.

Console.WriteLine(pole[3]);
Editováno 27. července 18:32
 
Odpovědět
27. července 18:31
Avatar
Max Vedral
Člen
Avatar
Max Vedral:27. července 18:49

No napsal jsem to špatně když uživatel zadá nějáký počet čísel jak najít to prostřední v případě když je to sudé tak dvě čísla? myslím, že se to něják s tím IndexOf? Ale nevím

 
Odpovědět
27. července 18:49
Avatar
Michal Kafka
Člen
Avatar
Michal Kafka:7. srpna 15:12

Je vypsat metody bez příkladů je z hlediska placeného výukového materiálu lenost.

 
Odpovědět
7. srpna 15:12
Avatar
Marek Němec
Člen
Avatar
Marek Němec:14. srpna 23:26

Jsem naštvaný protože jsi v placeném kurzu neuvedl příklady k metodám

Editováno 14. srpna 23:27
 
Odpovědět
14. srpna 23:26
Avatar
Marek Němec
Člen
Avatar
Odpovídá na fatst
Marek Němec:17. srpna 13:25

using System.Linq; musíš napsat na úplný začátek programu :)

 
Odpovědět
17. srpna 13:25
Avatar
Marek Němec
Člen
Avatar
Marek Němec:17. srpna 17:27

Nepsali jste příklady u metod :/ napište ke každému příkladu aspoň jak se má zapsat do kódu

 
Odpovědět
17. srpna 17:27
Avatar
Max Vedral
Člen
Avatar
Max Vedral:18. srpna 18:06

mohu se zeptat jak nají čísla na lichých indexech pole?

 
Odpovědět
18. srpna 18:06
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Max Vedral
DarkCoder:18. srpna 19:24

Máš-li pole arr o velikosti SIZE, pak operace nad lichými indexy provedeš takto:

for(size_t i = 1; i < SIZE; i+=2){
    // Operace s arr[i]
}

Psáno v C, uprav si to pro svůj jazyk. Princip je shodný...

Odpovědět
18. srpna 19:24
"Chceš-li předávat své znalosti, měj kvalitní podklady."
Avatar
Alena Melicharová:19. září 17:27

šly by prosím dodat příklady k metodám, kde nejsou? Jak má pak úplný začátečník vědět, kde a jak je použít? Z textu to fakt nedomyslím....

Odpovědět
19. září 17:27
"Svět patří těm, co se nepo*****" (Charles Bukowski)
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 198 zpráv z 198.