80 % bodů zdarma na online výuku díky naší Letní akci!
Pouze tento týden sleva až 80 % na e-learning týkající se PHP

8. diel - Poľa v C #

V minulej lekcii kurzu, Ošetrenie užívateľských vstupov , sme si ukázali ošetrenie užívateľských vstupov. Dnes si v C # tutoriálu predstavíme dátovú štruktúru poľa a vyskúšame si, čo všetko vie.

Poľa

Predstavte si, že si chcete uložiť nejaké údaje o viac prvkoch. Napr. chcete v pamäti uchovávať 10 čísel, políčka šachovnice alebo mena 50tich užívateľov. Asi vám dôjde, že v programovaní bude nejaká lepšia cesta, než začať búšiť premenné uzivatel1 , uzivatel2 ... až uzivatel50 . Nehľadiac na to, že ich môže byť potrebné 1000. A ako by sa v tom potom hľadalo? Brrr, takze nie :)

Ak potrebujeme uchovávať väčšie množstvo premenných rovnakého typu, tento problém nám rieši poľa. Môžeme si ho predstaviť ako rad priehradiek, kde v každej máme uložený jeden prvok. Priehradky sú očíslované tzv. Indexy, prvý má index 0 .

štruktúra poľa

(Na obrázku je vidieť pole ôsmich čísiel)

Programovacie jazyky sa veľmi líšia v tom, ako s poľom pracujú. V niektorých jazykoch (najmä starších, kompilovaných) nebolo možné za behu programu vytvoriť pole s dynamickou veľkosťou (napr. Mu dať veľkosť podľa nejaké premenné). Pole sa muselo deklarovať s konštantnou veľkosťou priamo v zdrojovom kóde. Toto sa obchádzalo tzv. Pointer a vlastnými dátovými štruktúrami, čo často viedlo k chybám pri manuálnej správe pamäte a nestabilite programu (napr. V C ++ ). Naopak niektoré interpretované jazyky umožňujú nielen deklarovať pole s ľubovoľnou veľkosťou, ale dokonca túto veľkosť na už existujúcom poli meniť (napr. PHP ). My vieme, že C # je virtuálny stroj, teda čosi medzi kompilerem a interpretom. Preto môžeme pole založiť s veľkosťou, ktorú dynamicky zadáme až za behu programu, ale veľkosť existujúceho poľa modifikovať nemôžeme. Možno to samozrejme obísť alebo použiť iné dátové štruktúry, ale k tomu sa dostaneme.

Možno vás napadá, prečo sa tu zaoberáme s poľom, keď má evidentne veľa obmedzení a existujú lepšie dátové štruktúry. Odpoveď je prostá: poľa je totiž jednoduché. Nemyslím pre nás na pochopenie (to tiež), ale najmä pre C #. Rýchlo sa s ním pracuje, pretože prvky sú v pamäti jednoducho uložené za sebou, zaberajú všetky rovnako miesta a rýchlo sa k nim pristupuje. Mnoho vnútorných funkčnosťou v .NET preto nejako pracuje s poľom alebo poľa vracia. Je to kľúčová štruktúra.

Pre hromadnú manipuláciu s prvkami poľa sa používajú cykly.

Pole deklarujeme pomocou hranatých zátvoriek:

int[] pole;

Výraz pole je samozrejme názov našej premennej. Teraz sme však len deklarovali, že v premennej bude pole int ov. Teraz ho musíme založiť, aby sme ho mohli používať. Použijeme na to kľúčové slovo new , ktoré na našej úrovni vedomostí nie sme zatiaľ schopní podrobne vysvetliť. Uspokojme sa s tým, že je to kvôli tomu, že je pole referenčná dátový typ (môžeme chápať ako zložitejšie typ):

int[] pole = new int[10];

Teraz máme v premennej pole poľa veľkosti desiatich int ov.

K prvkom poľa potom pristupujeme cez hranatú zátvorku, poďme na prvý index (teda index 0 ) uložiť číslo 1 .

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

Plniť pole takhle ručne by bolo príliš pracné, použijeme cyklus a naplníme si pole číslami od 1 do 10 . K naplneniu použijeme for cyklus:

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

Aby sme pole vypísali, môžeme za predchádzajúci kód pripísať:

for (int i = 0; i < pole.Length; i++)
    Console.Write("{0} ", pole[i]);
Tento výukový obsah pomáhajú rozvíjať nasledujúce firmy, ktoré možno hľadajú práve teba!

Všimnite si, že pole má vlastnosť Length , kde je uložená jeho dĺžka, teda počet prvkov.

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

Môžeme použiť zjednodušenú verziu cyklu pre prácu s kolekciami, známu ako foreach . Ten prejde všetky prvky v poli a jeho dĺžku si zistí sám. Jeho syntax je nasledujúca:

foreach (datovytyp premenna in kolekcia)
{
    // príkazy
}

Cyklus prejde prvky v kolekcii (to je všeobecný názov pre štruktúry, ktoré obsahujú viac prvkov, u nás to bude údaj) postupne od prvého do posledného. Prvok máme v každej iterácii cyklu uložený v danej premennej.

Prepíšme teda náš doterajší program pre foreach . Cyklus foreach nemá riadiace premennú, nie je teda vhodný pre vytvorenie nášho poľa a použijeme ho len pre 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á aplikácia
1 2 3 4 5 6 7 8 9 10

Pole samozrejme môžeme naplniť ručne a to aj bez toho, aby sme dosadzovali postupne do každého indexu. Použijeme na to zložených zátvoriek a prvky oddeľujeme čiarkou:

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

Pole často slúži na ukladanie medzivýsledkov, ktoré sa potom ďalej v programe používajú. Keď potrebujeme nejaký výsledok 10x, tak to nebudeme 10x počítať, ale spočítame to raz a uložíme do poľa, odtiaľ potom výsledok len načítame.

Metódy na triede Array

.NET nám poskytuje triedu Array , ktorá obsahuje pomocné metódy pre prácu s poľami. Poďme sa na ne pozrieť:

Sort ()

Ako už názov napovedá, metóda nám poľa zoradí. Jej jediný parameter je pole, ktoré chceme zoradiť. Je dokonca tak múdra, že pracuje podľa toho, čo máme v poli uložené. Stringy triedi podľa abecedy, čísla podľa veľkosti. Skúsme si zotrieďiť a vypísať našu rodinku Simpson:

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

Konzolová aplikácia
Bart Homer Lisa Maggie Marge

Skúste si urobiť polia čísel a vyskúšajte si, že to naozaj funguje aj pre nich.

Reverse ()

Reverse() nám pole otočí (prvý prvok bude ako posledná atď.), Toho môžeme využiť napr. Pre triedenie pospiatky:

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 ()

Tieto metódy vráti index prvého alebo posledného nájdeného prvku. V prípade nenájdenia prvku vráti -1 . Každá z metód berie dva parametre, prvým je pole, druhým hľadaný prvok. Umožníme užívateľovi zadať meno Simpsons a povieme mu, na akej pozícii je uložený. Teraz to pre nás nemá hlbší význam, pretože prvok poľa je len string . Bude sa nám to však veľmi hodiť vo chvíli, kedy v poli budeme mať uložené plnohodnotné objekty. Berme to teda ako takú prípravu.

string[] simpsonovi = {"Homer", "Marge", "Bart", "Lisa", "Maggie"};
Console.WriteLine("Ahoj zadaj svojho obľúbeného Simpsni (z rodiny Simpson): ");
string simpson = Console.ReadLine();
int pozice = Array.IndexOf(simpsonovi, simpson);
if (pozice >= 0)
    Console.WriteLine("Jo, to je môj {0}. najobľúbenejší Simpson!", pozice + 1);
else
    Console.WriteLine("Hele, toto nie je Simpson!");
Console.ReadKey();

Konzolová aplikácia
Ahoj zadaj svojho obľúbeného Simpsni (z rodiny Simpson):
Homer
Jo, to je môj 1. najobľúbenejší Simpson!

Copy ()

Copy() už podľa názvu skopíruje časť poľa do iného poľa. Prvým parametrom je zdrojové pole, druhým cieľové a tretím počet prvkov, ktorý sa má skopírovať.

Metódy na poli

Trieda Array nie je jedinou možnosťou, ako s poľom manipulovať. Priamo na samotné inštanciu pole (konkrétne premenné) môžeme volať aj veľa metód. Aj keď si spomenieme len niektoré, je ich naozaj veľa. Nebudeme teda robiť príklady, len si ich popíšeme:

Length

Length sme si už spomenuli, vráti dĺžku poľa. Nie je metódou, ale vlastností, nepíšu sa za ňu teda zátvorky () .

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

Matematické metódy, vracajúci najmenší prvok ( Min() ), najväčší prvok ( Max() ), priemer zo všetkých prvkov ( Average() ) a súčet všetkých prvkov ( Sum() ). Metódy nemajú žiadne parametre.

Concat (), Intersect (), Union ()

Všetky tieto metódy vráti na výstupe nové pole a ako parameter majú druhé pole. Concat() vykoná nám už známu konkatenaci, teda k nášmu poli pripojí druhé pole a takto vzniknuté nové pole vráti. Intersect() vykoná prienik oboch polí, teda zostaví pole s prvkami, ktoré sú obom poliam spoločné. Union() naopak vykoná zjednotenie, funguje teda podobne ako Concat() , len prvky, ktoré boli v oboch poliach, sú v novom poli len raz.

First () a Last ()

Už podľa názvu metódy vráti prvý a posledný prvok, neberú žiadne parametre.

Take () a Skip ()

Obe tieto metódy berú ako parameter počet prvkov. Take() vráti pole s daným počtom prvkov skopírovaných od začiatku pôvodného poľa. Skip() naopak vráti pole bez týchto prvých prvkov.

Contains ()

Metóda vracia true / false podľa toho, či sa prvok, uvedený v parametri metódy, v danom poli nachádzajú.

Reverse ()

Metódu Reverse() poznáme už z triedy Array , pokiaľ ju ale voláme na konkrétnom poli, tak sa prvky v ňom neotočí, ale je vytvorené nové otočené poľa a to je vrátený. Metóda nemá žiadne parametre.

Distinct ()

Distinct() je metóda bez parametrov a zabezpečí, aby bol v poli každý prvok len raz, teda vymaže duplicitné prvky a unikátne pole vráti ako návratovú hodnotu metódy, opäť teda nemodifikuje dané pole.

Mnoho metód nemení priamo naše polia, ale vráti iba polia nové (sú to metódy Concat() , Intersect() , Union() , Reverse() a Distinct() ), v ktorom sú vykonané požadované zmeny. Ak chceme modifikovať pôvodné pole, musíme doň dosadiť. Tieto metódy bohužiaľ z dôvodov, ktoré pochopíme až neskôr, nevracia priamo pole, ale typ IEnumerable . Aby bolo dosadení výsledku späť do poľa možné, musíme ho ešte previesť na pole metódou ToArray() .

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

Premenná dĺžka poľa

Hovorili sme si, že dĺžku poľa môžeme definovať aj za behu programu, poďme si to skúsiť a rovno si vyskúšajme nejakú metódu na poli:

Console.WriteLine("Ahoj, spočítám ti priemer známok. Koľko známok zadáš?");
int pocet = int.Parse(Console.ReadLine());
int[] cisla = new int[pocet];
for (int i = 0; i < pocet; i++)
{
    Console.Write("Zadajte {0}. číslo: ", i + 1);
    cisla[i] = int.Parse(Console.ReadLine());
}
Console.WriteLine("Priemer tvojich známok je: {0}", cisla.Average());
Console.ReadKey();

Konzolová aplikácia
Ahoj, spočítám ti priemer známok. Koľko známok zadáš?
5
Zadajte 1. číslo: 1
Zadajte 2. číslo: 2
Zadajte 3. číslo: 2
Zadajte 4. číslo: 3
Zadajte 5. číslo: 5
Priemer tvojich známok je: 2,6

Tento príklad by išiel samozrejme napísať aj bez použitia poľa, ale čo keby sme chceli spočítať napr. Medián? Alebo napr. Vypísať zadané čísla pospiatky? To už by bez poľa nešlo. Takto máme k dispozícii v poli pôvodnej hodnoty a môžeme s nimi neobmedzene a jednoducho pracovať.

To by pre dnešok stačilo, môžete si s poľom hrať. V budúcej lekcii, Riešené úlohy k 7.-8. lekciu C # .NET , na vás čaká prekvapenie ;-)

V nasledujúcom cvičení, Riešené úlohy k 7.-8. lekciu C # .NET, si precvičíme nadobudnuté skúsenosti z predchádzajúcich lekcií.


 

Stiahnuť

Stiahnuté 1141x (141.34 kB)
Aplikácia je vrátane zdrojových kódov v jazyku C#

 

Predchádzajúci článok
Ošetrenie užívateľských vstupov
Všetky články v sekcii
Základné konštrukcie jazyka C #
Článok pre vás napísal David Čápka
Avatar
Ako sa ti páči článok?
Ešte nikto nehodnotil, buď prvý!
Autor pracuje jako softwarový architekt a pedagog na projektu ITnetwork.cz (a jeho zahraničních verzích). Velmi si váží svobody podnikání v naší zemi a věří, že když se člověk neštítí práce, tak dokáže úplně cokoli.
Unicorn College Autor sa informačné technológie naučil na Unicorn College - prestížnej súkromnej vysokej škole IT a ekonómie.
Aktivity (2)

 

 

Komentáre

Avatar
adam440
Redaktor
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.

 
Odpovedať
7.6.2012 14:45
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovedá 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.

Odpovedať
7.6.2012 14:50
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
LEXMORR
Člen
Avatar
LEXMORR:18.11.2012 10:19

Vysvetlíte mi niekto to {0}

Odpovedať
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
Odpovedá 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"

Editované 18.11.2012 10:48
 
Odpovedať
18.11.2012 10:47
Avatar
..
Člen
Avatar
Odpovedá na ..
..:18.11.2012 10:52

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

 
Odpovedať
18.11.2012 10:52
Avatar
matesax
Redaktor
Avatar
Odpovedá 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...

Editované 18.11.2012 11:03
 
Odpovedať
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

 
Odpovedať
24.12.2012 15:59
Avatar
matesax
Redaktor
Avatar
Odpovedá na mienkofax
matesax:24.12.2012 16:32

array.metoda - co víc?

using System.Linq;

...

array.Max

array.Min

...
Editované 24.12.2012 16:33
 
Odpovedať
24.12.2012 16:32
Avatar
matesax
Redaktor
Avatar
Odpovedá na matesax
matesax:24.12.2012 16:38

Blbost - bere se to z IEnumerable:

IEnumerable.Max/Min/...();
 
Odpovedať
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

 
Odpovedať
25.12.2012 12:08
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovedá 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;
Odpovedať
25.12.2012 13:38
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
matesax
Redaktor
Avatar
Odpovedá na David Čápka
matesax:25.12.2012 13:46

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

 
Odpovedať
25.12.2012 13:46
Avatar
fejjaaas
Člen
Avatar
Odpovedá 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í?)

 
Odpovedať
25.12.2012 13:48
Avatar
matesax
Redaktor
Avatar
Odpovedá 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,...

Editované 25.12.2012 13:53
 
Odpovedať
25.12.2012 13:50
Avatar
matesax
Redaktor
Avatar
Odpovedá 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...)

Editované 25.12.2012 14:02
 
Odpovedať
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í :-).

 
Odpovedať
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??

 
Odpovedať
3.5.2013 19:19
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovedá 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.

Odpovedať
4.5.2013 20:53
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
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;
}

Odpovedať
14.5.2013 12:31
Viem, že skoro nič neviem.
Avatar
Kit
Redaktor
Avatar
Odpovedá 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);
}
Odpovedať
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
Odpovedá na Kit
baan:14.5.2013 12:58

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

Odpovedať
14.5.2013 12:58
Viem, že skoro nič neviem.
Avatar
Kit
Redaktor
Avatar
Odpovedá 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.

Odpovedať
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
Nevyplnené
Avatar
c# student:1.7.2013 20:16

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

 
Odpovedať
1.7.2013 20:16
Avatar
Odpovedá 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 ;-)

 
Odpovedať
1.7.2013 20:22
Avatar
c# student
Nevyplnené
Avatar
Odpovedá na Michael Olšavský
c# student:1.7.2013 20:50

dik 8-)

 
Odpovedať
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();

 
Odpovedať
31.7.2013 13:56
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovedá 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.

 
Odpovedať
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??

 
Odpovedať
4.8.2013 11:00
Avatar
Theodor Johnson
Redaktor
Avatar
Odpovedá 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();
Odpovedať
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 :)

 
Odpovedať
4.8.2013 14:54
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovedá na j.martenek
Jan Vargovský:4.8.2013 15:18

Jestli chceš barvu písma tak je to

Console.ForegroundColor = Color ...
 
Odpovedať
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#. :)

 
Odpovedať
4.8.2013 17:15
Avatar
Johny
Nevyplnené
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:)

 
Odpovedať
9.8.2013 8:55
Avatar
Theodor Johnson
Redaktor
Avatar
Odpovedá na Johny
Theodor Johnson:9.8.2013 9:12

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

Odpovedať
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?

Odpovedať
5.9.2013 16:22
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovedá 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?

Odpovedať
5.9.2013 16:36
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovedá 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)

 
Odpovedať
5.9.2013 16:41
Avatar
Kit
Redaktor
Avatar
Odpovedá 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.

Odpovedať
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. :)

Odpovedať
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 :)

 
Odpovedať
19.9.2013 19:49
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovedá 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 :)

Editované 19.9.2013 19:51
 
Odpovedať
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.

 
Odpovedať
19.9.2013 20:01
Avatar
NutelaCZ
Člen
Avatar
Odpovedá na Jan Vargovský
NutelaCZ:22.9.2013 15:14

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

 
Odpovedať
22.9.2013 15:14
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovedá 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 :)

 
Odpovedať
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

 
Odpovedať
30.11.2013 16:13
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovedá na spoprocky
Jan Vargovský:30.11.2013 16:45

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

 
Odpovedať
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

 
Odpovedať
9.12.2013 13:00
Avatar
Kit
Redaktor
Avatar
Odpovedá na spoprocky
Kit:9.12.2013 13:24

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

Odpovedať
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ý
Redaktor
Avatar
Odpovedá na spoprocky
Jan Vargovský:9.12.2013 13:33

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

 
Odpovedať
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.

 
Odpovedať
17.12.2013 21:15
Avatar
Zdeněk Bauer
Redaktor
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.

 
Odpovedať
17.12.2013 21:36
Avatar
Motlja
Člen
Avatar
Odpovedá 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");
Odpovedať
17.12.2013 23:45
Umím a učím se to co chci, to co mě baví a zajímá!!
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovedá 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).

 
Odpovedať
18.12.2013 0:29
Avatar
Johny Lewis
Nevyplnené
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?

 
Odpovedať
1.1.2014 10:06
Avatar
Johny Lewis
Nevyplnené
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:)

 
Odpovedať
1.1.2014 10:10
Avatar
Quest
Nevyplnené
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));
 
Odpovedať
1.1.2014 22:49
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovedá 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));
 
Odpovedať
1.1.2014 23:01
Avatar
Quest
Nevyplnené
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?

 
Odpovedať
2.1.2014 12:14
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovedá na Quest
David Čápka:9.1.2014 18:53

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

Odpovedať
9.1.2014 18:53
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
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?

 
Odpovedať
27.2.2014 20:10
Avatar
Odpovedá 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();
Odpovedať
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
Odpovedá 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....'

 
Odpovedať
27.2.2014 20:24
Avatar
Odpovedá 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.. :)

Odpovedať
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ý
Redaktor
Avatar
Odpovedá na pangas
Jan Vargovský:27.2.2014 20:27
double prumer = i.Average();
 
Odpovedať
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. :/

 
Odpovedať
27.2.2014 22:18
Avatar
pangas
Člen
Avatar
Odpovedá na pangas
pangas:27.2.2014 22:42

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

 
Odpovedať
27.2.2014 22:42
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovedá na pangas
Jan Vargovský:27.2.2014 23:07

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

 
Odpovedať
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 ? :)

Editované 22.3.2014 20:53
 
Odpovedať
22.3.2014 20:52
Avatar
Eldan
Člen
Avatar
Odpovedá na RooBoo
Eldan:22.3.2014 21:18

Ano, je to správně :)

Odpovedať
22.3.2014 21:18
Unobfuscated executable == free source code
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovedá na RooBoo
Jan Vargovský:22.3.2014 21:23

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

Editované 22.3.2014 21:23
 
Odpovedať
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:)

 
Odpovedať
28.3.2014 14:48
Avatar
Odpovedať
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ěď.

Editované 3.4.2014 17:55
 
Odpovedať
3.4.2014 17:53
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovedá na danar2004
David Čápka:3.4.2014 17:54

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

Odpovedať
3.4.2014 17:54
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovedá 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.

 
Odpovedať
3.4.2014 18:27
Avatar
xxx
Člen
Avatar
xxx:27.4.2014 22:06

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

Odpovedať
27.4.2014 22:06
kto chce hlada sposoby, kto nechce hlada dovody...
Tento výukový obsah pomáhajú rozvíjať nasledujúce firmy, ktoré možno hľadajú práve teba!
Avatar
Michal Kolář:1.7.2014 8:46

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

 
Odpovedať
1.7.2014 8:46
Avatar
Anton Arnautov:24.7.2014 22:30

Davide, "zpoustu" :-D

Odpovedať
24.7.2014 22:30
Don't be a salad, be the best god damn brocolli you could ever be!
Avatar
Michal Kučera
Redaktor
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 ;).

Odpovedať
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 :/

 
Odpovedať
10.2.2015 21:29
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovedá 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);
 
Odpovedať
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!

 
Odpovedať
20.2.2015 17:18
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovedá 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ů)

 
Odpovedať
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 ?:)

 
Odpovedať
3.4.2015 0:38
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovedá 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.

 
Odpovedať
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?

Editované 15.4.2015 20:47
 
Odpovedať
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);
                }
        }
}
 
Odpovedať
15.4.2015 20:52
Avatar
Odpovedá 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á...

Odpovedať
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
Odpovedá 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?

 
Odpovedať
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...

 
Odpovedať
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

 
Odpovedať
7.11.2015 17:58
Avatar
Milan Křepelka
Redaktor
Avatar
Odpovedá 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.

 
Odpovedať
9.11.2015 6:24
Avatar
Odpovedá 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.

Odpovedať
9.11.2015 8:00
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
ostrozan
Redaktor
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;
 
Odpovedať
9.11.2015 8:34
Avatar
Milan Křepelka
Redaktor
Avatar
Odpovedá 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

 
Odpovedať
9.11.2015 8:48
Avatar
ostrozan
Redaktor
Avatar
Odpovedá 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í

 
Odpovedať
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);

        }
    }
}
 
Odpovedať
11.4.2016 9:20
Avatar
Odpovedá 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ý...

Editované 11.4.2016 9:45
Odpovedať
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
Odpovedá na Michal Štěpánek
Tomáš Jančák:11.4.2016 9:57

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

 
Odpovedať
11.4.2016 9:57
Avatar
Odpovedá 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...

Odpovedať
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
 
Odpovedať
11.4.2016 10:19
Avatar
Odpovedá 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;
}
Odpovedať
11.4.2016 10:40
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovedá 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.

Editované 11.4.2016 10:47
Odpovedať
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.

 
Odpovedať
9.8.2017 14:11
Avatar
Luboš Běhounek Satik
Autoredaktor
Avatar
Odpovedá na Nona Hansel
Luboš Běhounek Satik:9.8.2017 14:22

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

using System.Linq;
Odpovedať
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();

 
Odpovedať
31.8.2017 11:04
Avatar
Odpovedá 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ří.

Editované 31.8.2017 12:46
Odpovedať
31.8.2017 12:45
Per aspera ad astras
Avatar
 
Odpovedať
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?

 
Odpovedať
7.10.2017 11:05
Avatar
pocitac770
Redaktor
Avatar
Odpovedá 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 :)

 
Odpovedať
7.10.2017 23:01
Avatar
Oli Wonder
Člen
Avatar
Odpovedá na pocitac770
Oli Wonder:8.10.2017 14:47

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

 
Odpovedať
8.10.2017 14:47
Avatar
Oli Wonder
Člen
Avatar
Odpovedá na pocitac770
Oli Wonder:8.10.2017 14:54

Dobre už to mám :-)

 
Odpovedať
8.10.2017 14:54
Avatar
Oli Wonder
Člen
Avatar
Odpovedá na pocitac770
Oli Wonder:8.10.2017 15:03

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

 
Odpovedať
8.10.2017 15:03
Avatar
pocitac770
Redaktor
Avatar
Odpovedá na Oli Wonder
pocitac770:8.10.2017 15:42

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

 
Odpovedať
8.10.2017 15:42
Avatar
Oli Wonder
Člen
Avatar
Odpovedá 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?

 
Odpovedať
8.10.2017 15:51
Avatar
pocitac770
Redaktor
Avatar
Odpovedá 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

 
Odpovedať
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" ?

 
Odpovedať
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

 
Odpovedať
29.11.2017 19:01
Avatar
gcx11
Redaktor
Avatar
Odpovedá na Saimon Lázně Lasim
gcx11:29.11.2017 21:51
pole[index] = hodnota;
 
Odpovedať
29.11.2017 21:51
Avatar
dez1nd
Člen
Avatar
Odpovedá 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)

Editované 30.11.2017 7:48
 
Odpovedať
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}

 
Odpovedať
20.12.2017 10:20
Avatar
dez1nd
Člen
Avatar
Odpovedá 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;
        }
}
Editované 20.12.2017 11:58
 
Odpovedať
20.12.2017 11:55
Avatar
dez1nd
Člen
Avatar
Odpovedá na dez1nd
dez1nd:20.12.2017 11:59

sorry to je blbost uz mi to nejde opravit

 
Odpovedať
20.12.2017 11:59
Avatar
Walter
Člen
Avatar
Odpovedá 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;
        }
}
 
Odpovedať
20.12.2017 21:27
Avatar
Walter
Člen
Avatar
Odpovedá na dez1nd
Walter:20.12.2017 21:31

Samozrejme pole[] rozumej pole_cisel[] :-)

 
Odpovedať
20.12.2017 21:31
Avatar
Ernest Kuki
Člen
Avatar
Ernest Kuki: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();


        }
    }
}
 
Odpovedať
31.3.2018 15:44
Avatar
Ernest Kuki
Člen
Avatar
Odpovedá na Ernest Kuki
Ernest Kuki:31.3.2018 15:47

Vedle, omlouvám se ..

 
Odpovedať
31.3.2018 15:47
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();

 
Odpovedať
8.10.2018 22:07
Avatar
Vykuk
Člen
Avatar
Odpovedá 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.

 
Odpovedať
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 ;-)

 
Odpovedať
22.4.2019 16:16
Avatar
Jana
Člen
Avatar
Odpovedá 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í?

 
Odpovedať
2.5.2019 12:01
Avatar
Odpovedá na Jana
Reaktivní 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.
Odpovedať
2.5.2019 20:13
Kdo je připraven, toho zaskočí něco jiného
Avatar
Odpovedá 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();

 
Odpovedať
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!

 
Odpovedať
6.8.2019 11:03
Avatar
Odpovedá 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);
 
Odpovedať
6.8.2019 13:11
Avatar
 
Odpovedať
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.

 
Odpovedať
3.9.2019 15:50
Avatar
Odpovedať
3.9.2019 18:31
Kdo je připraven, toho zaskočí něco jiného
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! :)

 
Odpovedať
19.9.2019 0:32
Avatar
Odpovedá 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();
 
Odpovedať
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 :)

 
Odpovedať
24.11.2019 17:03
Avatar
Marek Vajčner:8. marca 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.

 
Odpovedať
8. marca 13:22
Avatar
David Holohlavský:8. marca 21:44

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

 
Odpovedať
8. marca 21:44
Avatar
Josef Theuer
Člen
Avatar
Josef Theuer:13. marca 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í.

Editované 13. marca 0:26
Odpovedať
13. marca 0:24
No pain no gain
Avatar
Vlkodlak90
Člen
Avatar
Odpovedá na Rebeka Bulkova
Vlkodlak90:3. apríla 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;
 
Odpovedať
3. apríla 0:56
Avatar
Vlasta Řenčová:21. mája 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

Editované 21. mája 15:06
 
Odpovedať
21. mája 15:06
Avatar
Selfis1
Člen
Avatar
Odpovedá na Rebeka Bulkova
Selfis1:29. mája 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ů.

 
Odpovedať
29. mája 23:23
Avatar
Savi
Člen
Avatar
Savi:15. júna 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.

 
Odpovedať
15. júna 10:37
Avatar
Alesh
Překladatel
Avatar
Odpovedá na Savi
Alesh:15. júna 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ý. ;-)

 
Odpovedať
15. júna 11:50
Avatar
Savi
Člen
Avatar
Odpovedá na Alesh
Savi:15. júna 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.

 
Odpovedať
15. júna 12:57
Avatar
Alesh
Překladatel
Avatar
Odpovedá na Savi
Alesh:15. júna 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.

 
Odpovedať
15. júna 13:41
Avatar
Savi
Člen
Avatar
Odpovedá na Alesh
Savi:15. júna 13:48

Perfektní. Děkuji :-)

 
Odpovedať
15. júna 13:48
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zobrazené 153 správy z 153.