C# týden ITnetwork summer 2020
30 % bodů zdarma na online výuku díky naší Slevové akci!
Pouze tento týden sleva až 80 % na e-learning týkající se C#

Lekce 4 - Typový systém podruhé: Datové typy v C# .NET

V předešlém cvičení, Řešené úlohy k 1.-3. lekci C# .NET, jsme si procvičili nabyté zkušenosti z předchozích lekcí.

Nyní se na datové typy podíváme více zblízka a vysvětlíme si, kdy jaký použít. Dnešní lekce bude hodně teoretická, ale o to více bude praktická ta příští. Na konci si vytvoříme pár jednoduchých ukázek.

C# rozeznává dva druhy datových typů, hodnotové a referenční.

Hodnotové datové typy

Proměnné hodnotového datového typu si dokážeme jednoduše představit. Může se jednat např. o číslo nebo znak. V paměti je jednoduše uložena přímo hodnota a my k této hodnotě můžeme z programu přímo přistupovat. Slovo přímo jsem tolikrát nepoužil jen náhodou. V tomto C# kurzu se budeme věnovat výhradně těmto proměnným.

Celočíselné datové typy

Podívejme se nyní na tabulku všech vestavěných celočíselných datových typů v .NET, všimněte si typu int, který již známe zminula.

Datový typ Rozsah Velikost .NET typ
sbyte -128 až 127 8 bitů System.SByte
byte 0 až 255 8 bitů System.Byte
short -32 768 až 32 767 16 bitů System.Int16
ushort 0 až 65 535 16 bitů System.UInt16
int -2 147 483 648 až 2 147 483 647 32 bitů System.Int32
uint 0 až 4 294 967 295 32 bitů System.UInt32
long -9 223 372 036 854 775 808 až 9 223 372 036 854 775 807 64 bitů System.Int64
ulong 0 až 18 446 744 073 709 551 615 64 bitů System.UInt64

Všechna ta šílené čísla z této tabulky si pamatovat nemusíte, téměř vždy vám pomůže ve Visual Studiu nástroj IntelliSense, který když budete psát ten datový typ a počkáte ukáže nad ním bublinu:

Nástroj Intellisense ve Visual Studio

Případně v dokumentaci dodávané k Visual studiu to najdete podrobněji. Do dokumentace se dostanete, když napíšete konkrétní datový typ, označíte jej a stisknete F1.

Asi vás napadá otázka, proč máme tolik možných typů pro uložení čísla. Odpověď je prostá, záleží na jeho velikosti. Čím větší číslo, tím více spotřebuje paměti. Pro věk uživatele tedy zvolíme byte, protože se jistě nedožije více, než 255 let. Představte si databázi milionu uživatelů nějakého systému, když zvolíme místo byte int, bude zabírat 4x více místa. Naopak když budeme mít funkci k výpočtu faktoriálu, stěží nám bude stačit rozsah integeru a použijeme long.

Všimněte si, že některé typy začínají na u. Jsou téměř stejné, jako jejich dvojníci bez u, jen neumožňují záporné hodnoty a tím pádem na kladnou část mohou uložit 2x vyšší hodnotu. Těmto typům se říká unsigned, klasickým signed.

.NET typ je název dané struktury v .NET knihovnách. My používáme tzv. aliasy, aby byla práce jednodušší, ve skutečnosti si C# kód:

int a = 10;

přebere jako:

System.Int32 a = 10;

My budeme samozřejmě používat aliasy, od toho tam jsou :)

Nad výběrem datového typu nemusíte moc přemýšlet a většinou se používá jednoduše int. Typ řešte pouze v případě, když jsou proměnné v nějakém poli (obecně kolekci) a je jich tedy více, potom se vyplatí zabývat se paměťovými nároky. Tabulky sem dávám spíše pro úplnost. Mezi typy samozřejmě funguje již zmíněná implicitní konverze, tedy můžeme přímo přiřadit int do proměnné typu long a podobně, aniž bychom něco konvertovali.

Desetinná čísla

U desetinných čísel je situace poněkud jednodušší, máme na výběr pouze dva datové typy. Samozřejmě se liší opět v rozsahu hodnoty, dále však ještě v přesnosti (vlastně počtu des. míst). Typ double má již dle názvu dvojnásobnou přesnost oproti float.

Datový typ Rozsah Přesnost .NET typ
float +-1.5 * 10−45 až +-3.4 * 1038 7 čísel System.Single
double +-5.0 * 10−324 až +-1.7 * 10308 15-16 čísel System.Double

Vzhledem k tomu, že desetinná čísla jsou v počítači uložena ve dvojkové soustavě, dochází k určité ztrátě přesnosti. Odchylka je sice téměř zanedbatelná, nicméně když budete programovat např. finanční systém, nepoužívejte tyto dat. typy pro uchování peněz, mohlo by dojít k malým odchylkám.

Když do floatu chceme dosadit přímo ve zdrojovém kódu, musíme použít sufix F, u double sufix D (u double ho můžeme vypustit, jelikož je výchozí desetinný typ):

float f = 3.14F;
double d = 2.72;

Jako desetinný separátor používáme ve zdrojovém kódu vždy tečku, nehledě na to, jaké máme ve Windows regionální nastavení.

Další vestavěné datové typy

Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

Podívejme se na další datové typy, které nám .NET nabízí:

Datový typ Rozsah Velikost/Přesnost .NET typ
char U+0000 až U+ffff 16 bitů System.Char
decimal +-1.0 * 10−28 až +-7.9 * 1028 28-29 čísel System.Decimal
bool true nebo false 8 bitů System.Boolean
char

Char nám reprezentuje jeden znak, na rozdíl od typu string, který reprezentoval celý řetězec charů. Znaky v C# píšeme do apostrofů. Apostrof ' píšeme na české klávesnici pomocí Shift a klávesy vedle Enter (u některých klávesnic je to klávesa nad Enter, u jiných před ním):

Apostrof na české klávesnici

Deklarujme si tedy proměnnou typu char, obsahující nějaký znak:

char c = 'A';

Typ char patří v podstatě do celočíselných proměnných (obsahuje číselný kód znaku), ale přišlo mi logičtější uvést ho zde. Typ char nám vrací např. metoda Console.ReadKey().

decimal

Typ decimal řeší problém ukládání desetinných čísel v binární podobě, ukládá totiž číslo vnitřně podobně jako text. Používá se tedy pro uchování peněžních hodnot. Ke všem dalším matematickým operacím s des. čísly použijeme float nebo double. K zápisu decimal hodnoty opět používáme sufix, m:

decimal m = 3.14159265358979323846m;
bool

Datový typ bool nabývá dvou hodnot: true (pravda) a false (nepravda). Budeme ho používat zejména tehdy, až se dostaneme k podmínkám. Do proměnné typu bool lze uložit jak přímo hodnotu true/false, tak i logický výraz. Zkusme si jednoduchý příklad:

bool b = false;
bool vyraz = (15 > 5);
Console.WriteLine(b);
Console.WriteLine(vyraz);
Console.ReadKey();

Výstup programu:

Konzolová aplikace
False
True

Výrazy píšeme do závorek. Vidíme, že výraz nabývá hodnoty true (pravda), protože 15 je opravdu větší než 5. Od výrazů je to jen krok k podmínkám, na ně se podíváme příště.

Referenční datové typy

K referenčním typům se dostaneme až u objektově orientovaného programování, kde si také vysvětlíme zásadní rozdíly. Zatím budeme pracovat jen s tak jednoduchými typy, že rozdíl nepoznáme. Spokojíme se s tím, že referenční typy jsou složitější, než ty hodnotové. Jeden takový typ již známe, je jím string. Možná vás napadá, že string nemá nijak omezenou délku, je to tím, že s referenčními typy se v paměti pracuje jinak.

Typ string má na sobě řadu opravdu užitečných metod. Některé si teď probereme a vyzkoušíme:

String

StartsWith(), EndsWith() a Contains()

Můžeme se jednoduše zeptat, zda řetězec začíná, končí nebo zda obsahuje určitý podřetězec (substring). Podřetězcem myslíme část původního řetězce. Všechny tyto metody budou jako parametr brát samozřejmě podřetězec a vracet hodnoty typu bool (true/false). Zatím na výstup neumíme reagovat, ale pojďme si ho alespoň vypsat:

string s = "Krokonosohroch";
Console.WriteLine(s.StartsWith("krok"));
Console.WriteLine(s.EndsWith("hroch"));
Console.WriteLine(s.Contains("nos"));
Console.WriteLine(s.Contains("roh"));
Console.ReadKey();

Výstup programu:

Konzolová aplikace
False
True
True
False

Vidíme, že vše funguje podle očekávání. První výraz samozřejmě neprošel díky tomu, že řetězec ve skutečnosti začíná velkým písmenem.

ToUpper() a ToLower()

Rozlišování velkých a malých písmen může být někdy na obtíž. Mnohdy se budeme potřebovat zeptat na přítomnost podřetězce tak, aby nezáleželo na velikosti písmen. Situaci můžeme vyřešit pomocí metod ToUpper() a ToLower(), které vrací řetězec ve velkých a v malých písmenech. Uveďme si reálnější příklad než je Krokonosohroch. Budeme mít v proměnné řádek konfiguračního souboru, který psal uživatel. Jelikož se na vstupy od uživatelů nelze spolehnout, musíme se snažit eliminovat možné chyby, zde např. s velkými písmeny.

string konfig = "Fullscreen shaDows autosave";
konfig = konfig.ToLower();
Console.WriteLine("Poběží hra ve fullscreenu?");
Console.WriteLine(konfig.Contains("fullscreen"));
Console.WriteLine("Budou zapnuté stíny?");
Console.WriteLine(konfig.Contains("shadows"));
Console.WriteLine("Přeje si hráč vypnout zvuk?");
Console.WriteLine(konfig.Contains("nosound"));
Console.WriteLine("Přeje si hráč hru automaticky ukládat?");
Console.WriteLine(konfig.Contains("autosave"));
Console.ReadKey();

Výstup programu:

Konzolová aplikace
Poběží hra ve fullscreenu?
True
Budou zapnuté stíny?
True
Přeje si hráč vypnout zvuk?
False
Přeje si hráč hru automaticky ukládat?
True

Vidíme, že jsme schopni zjistit přítomnost jednotlivých slov v řetězci tak, že si nejprve řetězec převedeme celý na malá písmena (nebo na velká) a potom kontrolujeme přítomnost slova jen malými (nebo velkými) písmeny. Takhle by mimochodem mohlo opravdu vypadat jednoduché zpracování nějakého konfiguračního skriptu.

Trim(), TrimStart() a TrimEnd()

Problémem ve vstupech od uživatele může být i diakritika. C# ale naštěstí pracuje plně v UTF-8, nestane se nám tedy, že by se diakritika nějak zkomolila. Další nástrahou mohou být mezery a obecně všechny tzv. bílé znaky, které nejsou vidět, ale mohou nám uškodit. Obecně může být dobré tzv. trimovat všechny vstupy od uživatele, můžeme trimovat buď okolo celého řetězce nebo jen bílé znaky před ním a za ním. Prozradím, že při parsovacích funkcích C# trimuje zadaný řetězec automaticky, než s ním začne pracovat. Odstraněny jsou pouze neviditelné znaky okolo řetězce, např. mezery mezi slovy zůstanou. Zkuste si v následující aplikaci před číslo a za číslo zadat několik mezer:

Console.WriteLine("Zadejte číslo:");
string s = Console.ReadLine();
Console.WriteLine("Zadal jste text: " + s);
Console.WriteLine("Text po funkci trim: " + s.Trim());
int a = int.Parse(s);
Console.WriteLine("Převedl jsem zadaný text na číslo parsováním, zadal jste: " + a);
Console.ReadKey();
Replace()

Asi nejdůležitější metodou na stringu je nahrazení určité jeho části jiným textem. Jako parametry zadáme dva podřetězce, jeden co chceme nahrazovat a druhý ten, kterým to chceme nahradit. Metoda vrátí nový string, ve kterém proběhlo nahrazení. Když daný podřetězec metoda nenajde, vrátí původní řetězec.

V následující ukázce použijeme v textu mřížku #. Ta se na české klávesnici píše pomocí Pravého Alt a klávesy X:

Hashtag

A teď si již zkusme nahradit podřetězec metodou Replace():

string s = "Java je nejlepší!";
s = s.Replace("Java", "C#");
Console.WriteLine(s);
Console.ReadKey();

Výstup programu:

Konzolová aplikace
C# je nejlepší!
Format()

Format() je velmi užitečná metoda, která nám umožňuje vkládat do samotného textového řetězce zástupné značky. Ty jsou reprezentovány jako číslo ve složených závorkách, prvním číslem je 0. Jako další parametry metody následují v tomto pořadí hodnoty, které se mají do textu místo značek vložit. Všimněte si, že se metoda nevolá na konkrétní proměnné (přesněji instanci, viz další lekce), ale přímo na typu string.

Složené závorky (levou a pravou) píšeme na české klávesnici pomocí Pravého Alt a klávesy B pro levou, resp. N pro pravou:

Složené závorky

Zkusme si tedy použít metodu Format() pro vložení několika proměnných do proměnné typu string:

int a = 10;
int b = 20;
int c = a + b;
string s = string.Format("Když sečteme {0} a {1}, dostaneme {2}", a, b, c);
Console.WriteLine(s);
Console.ReadKey();

Výstup programu:

Konzolová aplikace
Když sečteme 10 a 20, dostaneme 30

Konzole sama umí přijímat text v takovémto formátu, můžeme tedy napsat:

int a = 10;
int b = 20;
int c = a + b;
Console.WriteLine("Když sečteme {0} a {1}, dostaneme {2}", a, b, c);
Console.ReadKey();

Toto je velmi užitečná a přehledná cesta, jak sestavovat řetězce, a určitě se ji vyplatí mnohdy použít místo běžné konkatenace pomocí operátoru +, pokud nebazírujeme na vysoké rychlosti.

PadLeft() a PadRight()

Jako poslední si zmíníme metody, které nám k textu naopak mezery přidají :) K čemu to je dobré? Představte si, že máme 100 proměnných a budeme je chtít uspořádat do tabulky. Text upravíme pomocí metody PadRight() s parametrem šířky sloupce, tedy např. 20 znaků. Pokud bude mít text jen 12 znaků, vypíše se před něj 8 mezer, aby měl velikost 20. Obdobně metoda PadLeft() by vypsala 8 mezer za něj. Jelikož nemáme znalosti k vytvoření takové tabulky, budeme si metody jen pamatovat a vyzkoušíme si je dále v C# kurzu.

Vlastnost Length

Poslední, ale nejdůležitější vlastnost (pozor, ne metoda) je Length, tedy délka. Vrací celé číslo, které představuje počet znaků v řetězci. Za vlastnosti nepíšeme závorky, protože nemají parametry.

Console.WriteLine("Zadejte vaše jméno:");
string jmeno = Console.ReadLine();
Console.WriteLine("Délka vašeho jména je: {0}", jmeno.Length);
Console.ReadKey();

Je toho ještě spoustu k vysvětlování a jsou další datové typy, které jsme neprobrali.

V následujícím cvičení, Řešené úlohy k 4. lekci C# .NET, si procvičíme nabyté zkušenosti z předchozích lekcí.


 

Předchozí článek
Řešené úlohy k 1.-3. lekci C# .NET
Všechny články v sekci
Základní konstrukce jazyka C# .NET
Článek pro vás napsal David Čápka
Avatar
Jak se ti líbí článek?
126 hlasů
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 sítě se informační technologie naučil na Unicorn College - prestižní soukromé vysoké škole IT a ekonomie.
Aktivity (27)

 

 

Komentáře

Avatar
LEXMORR
Člen
Avatar
LEXMORR:15.11.2012 19:55

No ešte taký slovník pojmov lebo ja som ako čistý s toho :D Ale už som si to objasnil ;) parádne články.. ;)

Odpovědět
15.11.2012 19:55
Život je ako program, musíš si ho zorganizovať podľa seba, ale môže sa nájsť aj chybička
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na LEXMORR
David Čápka:15.11.2012 20:50

Jaký pojem ti není jasný? Snažím se vše psát tak, aby to bylo explicitně vysvětlené neb alespoň jasné z kontextu.

Odpovědět
15.11.2012 20: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:15.11.2012 20:58

Ide tam o to, že pre teba ako programátora sú tie frázy jasné, lenže keď použiješ viac takých frázy naraz tak to je ťažšie pochopiť. Keď si to ale prečítam viac krát tak to aj pochopím :) A neodpustím si ti dal 5 hviezd.

Odpovědět
15.11.2012 20:58
Život je ako program, musíš si ho zorganizovať podľa seba, ale môže sa nájsť aj chybička
Avatar
Michal Fuka
Neregistrovaný
Avatar
Michal Fuka:26.1.2013 14:49

"... když zvolíme místo byte int, bude zabírat 2x více místa ..." nezdá se mi ta hodnota 2x. Pokud má byte 8bit a int má 32bit, potom se autor nejspíše upsal. Pokud se pletu, napište mi prosím v čem.

 
Odpovědět
26.1.2013 14:49
Avatar
Milan K.
Neregistrovaný
Avatar
Odpovídá na Michal Fuka
Milan K.:27.1.2013 21:19

jj, asi to bude víc.... :-)

ale jinak super tutorialky, dík za ně!

 
Odpovědět
27.1.2013 21:19
Avatar
Michal Žůrek - misaz:22.4.2013 19:14

Bude 2x větší...

Nebude, bude 4x větší :)

 
Odpovědět
22.4.2013 19:14
Avatar
David Čápka
Tým ITnetwork
Avatar
David Čápka:22.4.2013 19:23

Díky, neumím počítat :D

Odpovědět
22.4.2013 19:23
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
Toonu
Neregistrovaný
Avatar
Toonu:30.5.2013 20:50

Mám takový dotaz, jde udělat vícenásobný replace???
Zkoušel jsem to ale nedařilo se mi...
Například větu abcdefg dát do ABCDEFG
Jde to?

 
Odpovědět
30.5.2013 20:50
Avatar
Зайчик
Člen
Avatar
Odpovídá na Toonu
Зайчик:30.5.2013 20:53
string neco = "abcdefg";
neco = neco.ToUpper();
:D
Odpovědět
30.5.2013 20:53
Коммунизм для нашего будущего!
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Toonu
David Čápka:30.5.2013 21:01

Nejde, ale dá se to udělat regulárním výrazem.

Odpovědět
30.5.2013 21:01
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
Odpovídá na Toonu
matesax:30.5.2013 21:17

A co třeba:

string upper = new string("abcdefg".Select(c => (char)(c-32)).ToArray());

Či cyklus:

string result = "";

foreach(char c in "abcdefg")
    result += (char)(c-32);

Či:

char[] ddd = "abcdefg".ToCharArray();

for(int index = 0; index < ddd.Length;index++)
    ddd[index]=(char)(ddd[index] - 32);

Atd.

Editováno 30.5.2013 21:21
 
Odpovědět
30.5.2013 21:17
Avatar
Toonu
Neregistrovaný
Avatar
Toonu:30.5.2013 21:23

Jistě že ToUpper by šlo ale já chci třeba i B na C atd....

 
Odpovědět
30.5.2013 21:23
Avatar
matesax
Redaktor
Avatar
Odpovídá na Toonu
matesax:30.5.2013 21:25

Posílal jsem - přičítej, odčítej atd... Char se defaultně konvertuje na int - jen naopak to sem tam nejde... Stačí si vzít ASCII tabulku a máš to...

Editováno 30.5.2013 21:25
 
Odpovědět
30.5.2013 21:25
Avatar
Toonu
Neregistrovaný
Avatar
Odpovídá na matesax
Toonu:30.5.2013 21:31

Jsem začátečník.....
ASCII je až v 9. dílu a dál...
Zkrátka chi přeloit větu z Abcde na Bcdef

 
Odpovědět
30.5.2013 21:31
Avatar
Odpovídá na Toonu
Michal Žůrek - misaz:30.5.2013 21:34

Tak čti dál, možná na to přijdeš.

 
Odpovědět
30.5.2013 21:34
Avatar
matesax
Redaktor
Avatar
Odpovídá na Toonu
matesax:30.5.2013 21:35

Robíš si srandu??? Jdi si hrát s ASCII - co jiného chceš vymyslet? Normálně posuneš hodnotu každého znaku, který chceš změnit... Nebo nevíš, co ASCII je? Tak si projdi ten tutoriál.... Nemám slov...

 
Odpovědět
30.5.2013 21:35
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Toonu
David Čápka:31.5.2013 9:14

Bez znalosti ASCII to asi neuděláš :) Budeš se tam muset pročíst.

Odpovědět
31.5.2013 9:14
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
KlimiCZ
Člen
Avatar
KlimiCZ:31.5.2013 20:11

Mám dotaz jak se používá PadLeft a PadRight v textu to není.

Odpovědět
31.5.2013 20:11
Nesnaž se zakrýt něco, co jsi provedl úmyslně. Svět je tak malý, že dotyčný se to stejně dozví.
Avatar
matesax
Redaktor
Avatar
Odpovídá na KlimiCZ
matesax:31.5.2013 20:15

To je snad datový typ?

 
Odpovědět
31.5.2013 20:15
Avatar
hanse
Člen
Avatar
Odpovídá na KlimiCZ
hanse:31.5.2013 20:16

například takhle:

string bla = "blabla";
Console.WriteLine(bla.PadRight(20) + bla);
 
Odpovědět
31.5.2013 20:16
Avatar
KlimiCZ
Člen
Avatar
KlimiCZ:1.6.2013 7:52

Děkuji moc :).

Odpovědět
1.6.2013 7:52
Nesnaž se zakrýt něco, co jsi provedl úmyslně. Svět je tak malý, že dotyčný se to stejně dozví.
Avatar
j.martenek
Člen
Avatar
j.martenek:14.6.2013 15:36

Mám otázku. Inspiroval jsem se programem "hra" , kde uživatel zadá třeba nosound a pak autosave. Program poté vypíše: Poběží hra bez zvuku? True, Bude se hra ukládat? true. Program jsem vylepšil tak, že bez zvuku hra nemůže jet, a proto když uživatel zadá nosound- vypíše program: error, the game cannot run without sound. Would you like turn on the sound? [y/n]. Když uživatel zadá y, měl by program napsat- Poběží hra bez zvuku? False. Zde je zdrojový kód mého programu:
string a;
a = Console.ReadLine();
a = a.ToLower ();
Console.Write­Line("Poběží hra bez zvuku?");
Console.Write­Line(a.Contain­s("nosound"));
Console.Write­Line("Poběží hra bez stínů?");
Console.Write­Line(a.Contain­s("noshadows"));
Console.Write­Line("Bude se hra ukládat?");
Console.Write­Line(a.Contain­s("autosave"));
Console.Write­Line("Bude hra načtena?");
Console.Write­Line(a.Contain­s("loading"));
if (a.Contains("no­sound"))
Console.Write­Line("fatal error! The game cannot run wihout sound! Want you turn on the sounds? [Y/N]");

string b;
b = Console.ReadLine();
b = b.ToLower();
if (b.Contains("y"))
a.Replace("no­sound","sound on");
Console.Write­Line("Poběží hra bez zvuku?");
Console.Write­Line(a.Contain­s("nosound"));
Console.Write­Line("Poběží hra bez stínů?");
Console.Write­Line(a.Contain­s("noshadows"));
Console.Write­Line("Bude se hra ukládat?");
Console.Write­Line(a.Contain­s("autosave"));
Console.Write­Line("Bude hra načtena?");
Console.Write­Line(a.Contain­s("loading"));

Console.ReadKey();

Děkuji za odpověď.

 
Odpovědět
14.6.2013 15:36
Avatar
Martin.mak
Člen
Avatar
Martin.mak:9.7.2013 22:16

U PadRight/PadLeft
"Jako poslední si zmíníme metody, které nám k textu naopak metody přidají"
Není to "Metody" přeřek? Nemá tam být bílé znaky, nebo rovnou mezery?
A co jsou to bílé znaky kromě, kromě mezer?
Děkuju za odpovědi :)

 
Odpovědět
9.7.2013 22:16
Avatar
Odpovídá na Martin.mak
Neaktivní uživatel:9.7.2013 22:18

podle mě ještě tab ;)

Odpovědět
9.7.2013 22:18
Neaktivní uživatelský účet
Avatar
gcx11
Redaktor
Avatar
gcx11:3.12.2013 21:28

Bool je 8bit?

 
Odpovědět
3.12.2013 21:28
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na gcx11
David Čápka:3.12.2013 21:29

Ano, je.

Odpovědět
3.12.2013 21:29
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
gcx11
Redaktor
Avatar
gcx11:3.12.2013 21:37

//EDIT špatně

Editováno 3.12.2013 21:39
 
Odpovědět
3.12.2013 21:37
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na gcx11
David Čápka:3.12.2013 21:39

8 bitů je 1 byte ;-)

Odpovědět
3.12.2013 21:39
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
gcx11
Redaktor
Avatar
gcx11:3.12.2013 21:41

Není potom výhodnější používat sbyte (byte), když se do něj vejde 256 možností, namísto 2 (true nebo false)?

 
Odpovědět
3.12.2013 21:41
Avatar
Lukáš Nový - Lunnkas:3.2.2014 13:01

Ahoj lidi,

to

char c = 'A';
         Console.ReadKey(c);

Nefunguje. Co dělám špatně?

zkoušel jsem to viz. obrázek

 
Odpovědět
3.2.2014 13:01
Avatar
MrPabloz
Člen
Avatar
Odpovídá na Lukáš Nový - Lunnkas
MrPabloz:3.2.2014 13:31

Console.ReadKey(); je fce, na načtení klávesy ze vstupu, takže tam nemůžeš vložit proměnnou char jako argument fce, jak ti to tam píše proměnná by musela být typu bool :) stačí si přečíst co ti to píše za chyby

Odpovědět
3.2.2014 13:31
Harmonie těla a duše, to je to, oč se snažím! :)
Avatar
Odpovídá na MrPabloz
Lukáš Nový - Lunnkas:3.2.2014 13:42

Podle těch chyb zatím neumím kód moc opravovat takže Nechápu :( Můžeš to pls ukázat na nějakém příkladě jak to teda má být?

 
Odpovědět
3.2.2014 13:42
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Lukáš Nový - Lunnkas
Jan Vargovský:3.2.2014 13:46
char a = Console.ReadKey();

popřípadě

char b = Console.ReadKey(true);
char c = Console.ReadKey(false);
 
Odpovědět
3.2.2014 13:46
Avatar
Odpovídá na Jan Vargovský
Lukáš Nový - Lunnkas:3.2.2014 14:16

Tvůj kód mi stejně píše pořád chybu: že nemůže konvertovat implicitně typ System.Console­KeyInfo to char. Ale to je fuk. Dík za příklad. Snad to bude někde v pozdějších lekcích až to bude více potřeba.

 
Odpovědět
3.2.2014 14:16
Avatar
Odpovídá na Lukáš Nový - Lunnkas
Jiří Košata - kosata50:3.2.2014 15:01

Správně by to mělo být takhle:

char a = Console.ReadKey().KeyChar;
char b = Console.ReadKey(true).KeyChar;
char c = Console.ReadKey(false).KeyChar;
 
Odpovědět
3.2.2014 15:01
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Lukáš Nový - Lunnkas
Jan Vargovský:3.2.2014 15:07

Načítaní znaků jsem snad nikdy nepoužil. Raději se nauč pracovat s ReadLine metodou.

Jiří Košata - kosata50 Díky

 
Odpovědět
3.2.2014 15:07
Avatar
MrPabloz
Člen
Avatar
Odpovídá na Lukáš Nový - Lunnkas
MrPabloz:3.2.2014 15:08

Tímhle načteš znak ze vstupu, ReadKey se pouzívá k jiným věcem, ne k tomuto :

char b = char.Parse(Console.ReadLine());

PS: sry za některé chybějící háčky, dosluhuje mi klávesnice. :(
PS2: kurna zase pozdě :/ tak to smazte :D

Editováno 3.2.2014 15:09
Odpovědět
3.2.2014 15:08
Harmonie těla a duše, to je to, oč se snažím! :)
Avatar
Odpovídá na MrPabloz
Lukáš Nový - Lunnkas:4.2.2014 21:38

ok. funguje to. Chtěl bych se tebe nebo i obecně všech zeptat:
V kódu používate "zkracování", prostě ušetříte řádek např.
string delsi = Console.ReadLi­ne().Trim().Len­gth; sem někde viděl na místo dlouhého vypisování. Jaké je ale pro tohle pravidlo, v jakém pořadí se mají psát ta jednotlivá slova aby to fungovalo? myslím třída, metoda vlastnost atd.

 
Odpovědět
4.2.2014 21:38
Avatar
MrPabloz
Člen
Avatar
Odpovídá na Lukáš Nový - Lunnkas
MrPabloz:4.2.2014 22:53

Tak ono to je tak, co chceš provest první, bude jakby nejhlouběji tzn třeba

funkce1(funkce2(funkce3(xxx)));

první se provede funkce 3 - > poté funkce 2 - > poté poslední funkce 1. takže pokud se dá něco zapsat na jeden řádek, tedy např.

char b = char.Parse(Console.ReadLine());

tak se první načte řádek, poté se parsuje co se načetlo do znaku a to se přiřadí do proměnné b.

Takže pravidlo je psát to tak, že co chceš at se provede první píšeš vnořeně do toho co se má po tom a tak pořád dokola. V tom tvém příkladu to je zas tak, že píšeš to co k čemu navazuje, a většinou ti to napovída IDE jak to máš zprávně napsat, aby to bylo dobře. DOufám že si mě pochopil:)

Odpovědět
4.2.2014 22:53
Harmonie těla a duše, to je to, oč se snažím! :)
Avatar
Odpovídá na MrPabloz
Lukáš Nový - Lunnkas:5.2.2014 19:20

Vše co si napsal chápu až teda na to co píšeš o mém příkladu.
proč to nelze napsat např. takhle:
string delsi = Console.ReadLi­ne().Length.Trim(); (proč se ta vlastnost píše nakonec? Je to tak u vlastností vždy? Je to vlastnost metody Trim?

A co takhle: string delsi = Console.ReadLi­ne(Trim().Len­gth); (To je asi úplně blbě viď? :D

 
Odpovědět
5.2.2014 19:20
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Lukáš Nový - Lunnkas
Jan Vargovský:5.2.2014 19:39

protože když napíšeš ReadLine tak ta metoda vrací string, takže můžeš zavolat cokoliv co má objekt string a to je buď length a nebo trim, když zavoláš length vrátí se ti int, zatím co když zavoláš trim, vrátí se ti nový string.

 
Odpovědět
5.2.2014 19:39
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Lukáš Nový - Lunnkas
Jan Vargovský:5.2.2014 19:45

Btw díky toho můžeš napsat třeba takový kód

internal static class Program
{
    [STAThread]
    private static void Main(string[] args)
    {
        string s = "ahoj";
        Console.WriteLine(s.Zvyrazni().Zvyrazni().Zvyrazni());
    }

    private static string Zvyrazni(this string s)
    {
        return '*' + s + '*';
    }
}

A výsledek je

***ahoj***
Editováno 5.2.2014 19:45
 
Odpovědět
5.2.2014 19:45
Avatar
Odpovídá na Jan Vargovský
Lukáš Nový - Lunnkas:6.2.2014 12:42

Moc ti nerozumím.
Ale to bude až v tom OOP ne?

Editováno 6.2.2014 12:43
 
Odpovědět
6.2.2014 12:42
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Lukáš Nový - Lunnkas
Jan Vargovský:6.2.2014 15:31

Tohle nemá s OOP nic společného, tady třeba řadí metody do oop, já byl zvyklý na f-ce z jinačích jazyků, tak jsem je používal co nejdřív.

 
Odpovědět
6.2.2014 15:31
Avatar
petrph
Člen
Avatar
Odpovídá na Lukáš Nový - Lunnkas
petrph:7.2.2014 15:19

Ahoj,má souvislost s OOP.A to tím základním principem, že každý objekt má v sobě nějakou hodnotu(atribut),a­le i metody které s stou hodnotou mohou pracovat.Soupis těch hodnot máš v popisu třídy toho objektu-čili v online nápovědě C# si najdeš třídu String a tam si přečteš.
A pak tedy platí pravidlo že pokud je výsledkem té metody nějaký objekt, ta zase zase na něj můžeš použít jeho metody.. výsledem zase může být nějaký objekt, na něj můžeš použít jeho metody..až nakonec poslední metoda vpravo vrací hodnotu do proměnné která je na začátku řádku.Konkrétně kdybych se pokusil "dešifrovat toto: string delsi = Console.ReadLi­ne().Trim().Len­gth;
Začneš od místa za závorkou,Conso­le.ReadLine() načte nějaký text, který za dáš z klávesnice, dejme tomu " ABCD " (na začátku a konci jsou mezery.) Na ten výslededek se zavolá metoda stringu Trim (čímž se umažou ty mezery), a vrátí výsledek "ABC",a jako poslední se volá vlastnost Length kteá ti vrátí délku toho "ABC", čili číslo 3.
Takže odpověď je to, že neexistuje nějaké obecné pravidlo "co psát dřív: aby to fungovalo.Ale ty musíš vědět (najít si v nápovědě) co ty metody dělají a pak je postupně seřadit tak aby ti správně zpracovaly prvotní objekt do výsledného tvaru jaký potřebuješ, asi jako stroje na výrobní lince..

 
Odpovědět
7.2.2014 15:19
Avatar
fejjaaas
Člen
Avatar
fejjaaas:7.2.2014 16:15

Dovolím si něco poupravit, pokud jsem to pochopil správně, reagoval jsi na příspěvek, který obsahoval tento zápis: string delsi = Console.ReadLi­ne().Trim().Len­gth
Rozhodně není pravda, že se to v tomto případě vykoná v pořadí: Length, Trim, ReadLine... Mám pocit, že jsi reagoval trochu na jinačí případ. V tomto případě, který jsem uvedl výše se ty metody vykonávají postupně, tudíž ReadLine, Trim a Length(vlastnost).
Ty jsi to vysvětloval na tomto příkladu: char b = char.Parse(Con­sole.ReadLine(), což je úplně něco jiného, než výše zmíněný příklad. Zde je Console.ReadLine() hodnotou metody Parse, nikoliv rovnocenná metoda metodě Parse. Rád si přečtu reakce na můj komentář, jestli má hlavu a patu nebo jsem tu sesmolil nesmysl :-) Díky, přeji hezký den.

 
Odpovědět
7.2.2014 16:15
Avatar
petrph
Člen
Avatar
Odpovídá na fejjaaas
petrph:7.2.2014 18:26

Ahoj- ano, reagoval jsem na Console.ReadLi­ne().Trim().Len­gth, a to pořadí se skutečně vykonává ReadLine, Trim a Lenght, tak jsem to i v komentáři nahoře slovně vyhodnocoval.Takto se vyhodnocují metody objektu tou tečkou mezi nimi říkáš že voláš vpravo stojící metodu z objektu který je od ní nalevo).
Ten druhý příklad
*
int a=Int32.Parse(Con­sole.ReadLine());

  • se musí vyhodnotit zase trochu jinak. Vidíš že mezi těmi Parse a Console.ReadLine není tečka-ale že ten výraz Console.ReadLine() je v závorce za Parse-čili je jeho hodnota předávaná metodě Parse jako její parametr. Takže slovní vyhodnocení zní "spustí se metoda Console.ReadLine(), zadáš z klávesnice nějaké číslice 123-a toto se jako textový řetězec se předá jako parametr metodě Parse("123"), která ho zpracuje na numerickou hodnotu 123.

Jinak jak jsem to přepsal s int to se používá pořád, s char jak jsi to napsal to nemá valný smysl,i když to formálně funguje taky (při vložení právě 1 znaku).

 
Odpovědět
7.2.2014 18:26
Avatar
fejjaaas
Člen
Avatar
Odpovídá na petrph
fejjaaas:7.2.2014 20:09

Měla to být reakce na MrPabloz, nechápu, kde se stala chyba :-). Tam to vypadalo, že reagoval na něco trochu jiného, než na co se ho dotyčný ptal. Ale i tak díky za reakci, rád si počtu názory lidí. Ahoj ;-)

Editováno 7.2.2014 20:11
 
Odpovědět
7.2.2014 20:09
Avatar
dolakdavid
Člen
Avatar
dolakdavid:5.3.2014 22:12

Krokonosohroch :D pobavilo, supr navod.

 
Odpovědět
5.3.2014 22:12
Avatar
alesekmoravec123:18.5.2014 23:25

Vyborné tutoriály, člověk to pochopí, nezkušenému to nepřipadá jako když na něj mluvíš marťanštinou. Zatím jsem zkoušel prográmek na výuku S/Z, nebo kalkulačku s mocninátorem. :-)

Odpovědět
18.5.2014 23:25
Udělat něco blbůmvzdorné je nemožné jelikož se vždy objeví nějaký větší blbec.
Avatar
Kafac
Člen
Avatar
Kafac:23.5.2014 20:12

Chci se jen zeptat nechápu tyto 2 řádky
Console.Write­Line("Poběží hra ve fullscreenu?");
Console.Write­Line(konfig.Con­tains("fullscre­en"));

hlavně ten druhý k čemu mně je,mohl by mi to někdo vysvětlit prosím?

Odpovědět
23.5.2014 20:12
"Lepší, než předpovídat budoucnost, je vytvořit ji." Bill Gates
Avatar
Odpovídá na Kafac
Libor Šimo (libcosenior):23.5.2014 20:43

Prečítaj si ešte raz poriadne časť: Referenční datové typy

Odpovědět
23.5.2014 20:43
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na Kafac
Matěj Kripner:23.5.2014 21:19

Oba řádky vypisují text. Ten první klasicky, ten druhý vypíše bool(true nebo false) podle toho, zda se splnila daná podmínka-pokud string konfig obsahuje fullscreen.

 
Odpovědět
23.5.2014 21:19
Avatar
LukyH
Člen
Avatar
LukyH:24.5.2014 23:06

Přidal bych jedno doupřesnění k datovému typu double. Suffix není nutné vůbec používat proto že literál s puvoucí desetinnou čárkou je bez explicitního určení považován za double. Je ho ovšem dobré použít při přiřazení celočíselného literálu do proměnné typu double, kde chceme určit že se jedná ve skutečnosti o typ double a nikoliv třeba o typ int; nedojde tak ke zbytečnému přetypování.

double a = 3.41; //3.41 je typu double, suffix není třeba
double b = 5d; //5 je typu int, suffix není třeba ale je vhodné ho použít
float c = 9.81f; //9.81 by byl bez suffixu 'f' považován za double a překladač by oznámil chybu

Více k double: http://msdn.microsoft.com/….100%29.aspx

Dále mi není příliš jasné tvrzení k typu decimal: " ... ukládá totiž číslo vnitřně podobně, jako text."

Domníval jsem se, že by ukládání mohlo být provedeno podobně jako u typu float a double. Na stránkách MSDN se k těmto dvěma typům odkazují na normu IEEE (patrně na IEEE 754); u decimal nikoliv. Přitom při své délce 128 bitů by mohl odpovídat typu quadruple dle uvedné normy. Je však pravdou že qaudruple má, narozdíl od decimal, 33 - 36 významných číslic. Jedinou představu, kterou mám je uložit každou číslici čísla typu decimal do posloupnosti (pole) 4-bitových hodnot. Paměťová náročnost by potom při deklarované přesnosti 28-29 číslic odpovídala 30 x 4 bity, tedy 120 bitům což by nějak mohlo odpovídat s dalšími informacemi navíc deklarované velikosti datového typu decimal. Je to pouze moje čirá spekulace a víc se mi zatím nepodařilo najít než to co jsem našel na stránkách MSDN.

K typu decimal viz: http://msdn.microsoft.com/….100%29.aspx

K typu quadruple: http://en.wikipedia.org/…point_format

PS: Tenhle příspěvek již píši podruhé protože při psaní jsem byl odhlášen a při odeslání se mi jen zobrazila stránka pro opětovné přihlášení. Bohužel bez reakce na původní požadavek na odeslání příspěvku. Domnívám se že toto by mohl být námět na další vylepšení webu pro webmastera.

 
Odpovědět
24.5.2014 23:06
Avatar
alesekmoravec123:5.7.2014 0:26

Jen taková malá ukázka co je možno udělat ze znalostmi za část této lekce. Program na výuku AJ pro menší děti. :) Hodlám to ale více vypilovat.

Console.Write­Line("Vítej v programu na výuku anglického jazyka- TENE!");
Console.Write­Line("Teď ti řeknu pár slovíček a ty je přeložíš.");
Console.Write­Line("False= nemáš pravdu");

Console.WriteLine("---------------------------------------------------------");
Console.Write­Line("Část 1: Zvířata");
Console.WriteLine("---------------------------------------------------------");

Console.Write­Line("Jak se řekně anglicky pes?");
string zv1 = Console.ReadLine();
zv1 = zv1.ToLower();
Console.Write­Line(zv1.Star­tsWith("dog"));

Console.WriteLine(" ");

Console.Write­Line("Jak se řekne anglicky kočka?");
string zv2 = Console.ReadLine();
zv2 = zv2.ToLower();
Console.Write­Line(zv2.Star­tsWith("cat"));

Console.WriteLine(" ");

Console.Write­Line("Jak se řekne anglicky kůň?");
string zv3 = Console.ReadLine();
zv3 = zv3.ToLower();
Console.Write­Line(zv3.Star­tsWith("horse"));

Console.WriteLine(" ");

Console.WriteLine("---------------------------------------------------------");
Console.Write­Line("Část 2: Konverzace");
Console.WriteLine("---------------------------------------------------------");

Console.Write­Line("Jak někoho anglicky pozdravíš?");
string kz1 = Console.ReadLine();
kz1 = kz1.ToLower();
Console.Write­Line(kz1.Star­tsWith("hello"));

Console.WriteLine(" ");

Console.Write­Line("Jak se s někým anglicky zdvořile rozloučíš?");
string kz2 = Console.ReadLine();
kz2 = kz2.ToLower();
Console.Write­Line(kz2.Star­tsWith("goodby­e"));

Console.WriteLine(" ");

Console.Write­Line("Jak se někoho anglicky zeptáš jak se má?");
string kz3 = Console.ReadLine();
kz3 = kz3.ToLower();
Console.Write­Line(kz3.Star­tsWith("how are you"));

Console.WriteLine(" ");

Console.Write­Line("Jak anglicky poděkuješ?");
string kz4 = Console.ReadLine();
kz4 = kz4.ToLower();
Console.Write­Line(kz4.Star­tsWith("thank you"));

Console.WriteLine("----------------------------------------------------------------------------------------------------");

Console.Write­Line("Děkuji za použití programu. Autor: Aleš Moravec");
Console.ReadKey();

Odpovědět
5.7.2014 0:26
Udělat něco blbůmvzdorné je nemožné jelikož se vždy objeví nějaký větší blbec.
Avatar
alexneti
Člen
Avatar
Odpovídá na alesekmoravec123
alexneti:4.2.2015 15:33

Super program :)

trosku jsem ho zkratil

Console.Write­Line("Jak se řekne anglicky pes?");
string zv1 = Console.ReadLi­ne().ToLower();
Console.Write­Line(zv1.Star­tsWith("dog"));

 
Odpovědět
4.2.2015 15:33
Avatar
Odpovídá na alexneti
Michal Štěpánek:4.2.2015 16:03

Zkrácený je to sice dobře, ale ten program od alesekmoravec123 je špatně. Zkusil sis tam napsat místo dog třeba dogrbrhrfgj?
Program ti to vyhodnotí jako True, přestože je to pitomost...
StartsWith se používá pouze v případě, že chceš zjistit, jestli to těmi znaky začíná...

Editováno 4.2.2015 16:04
Odpovědět
4.2.2015 16:03
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
alexneti
Člen
Avatar
Odpovídá na Michal Štěpánek
alexneti:4.2.2015 19:10

Takze bys to resil takto?

Console.Write­Line(vz1 == "dog");

 
Odpovědět
4.2.2015 19:10
Avatar
Odpovědět
4.2.2015 19:15
JÁ JSEM polo kyborg
Avatar
Marek Teper
Člen
Avatar
Marek Teper:23.3.2015 12:51

Zdravím, poradí mi někdo jak ukončit program klávesou např. Enter, metodou Console.Readkey()?? Díky

 
Odpovědět
23.3.2015 12:51
Avatar
hanpari
Redaktor
Avatar
Odpovídá na Marek Teper
hanpari:23.3.2015 13:42
while (ConsoleKey.Enter != Console.ReadKey().Key)
       {
        Console.WriteLine("Pokračuj");
       }
 
Odpovědět
23.3.2015 13:42
Avatar
Marek Teper
Člen
Avatar
Odpovídá na hanpari
Marek Teper:24.3.2015 11:43

díky ti :)

 
Odpovědět
24.3.2015 11:43
Avatar
Lukáš Štrbo:15.9.2015 21:33

Pri kóde

Console.WriteLine("Zadejte číslo:");
string s = Console.ReadLine();
Console.WriteLine("Zadal jste text: " + s);
Console.WriteLine("Text po funkci trim: " + s.Trim());
int a = int.Parse(s);
Console.WriteLine("Převedl jsem zadaný text na číslo parsováním, zadal jste: " + a);
Console.ReadKey();

mi vyhodí v Kozoly :

 
Odpovědět
15.9.2015 21:33
Avatar
Lukáš Štrbo:15.9.2015 21:33

++ mi vyhodí hned po tom toto :

Editováno 15.9.2015 21:33
 
Odpovědět
15.9.2015 21:33
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Lukáš Štrbo
Jan Vargovský:15.9.2015 22:44

Neznám žádné jedno celočíselné číslo, které vypadá "0 0".

 
Odpovědět
15.9.2015 22:44
Avatar
Odpovídá na Lukáš Štrbo
Michal Vokurka:19.9.2015 13:54

Mám přesně ten stejný problém, funkce Trim mi z neznámého důvodu nefunguje :/

 
Odpovědět
19.9.2015 13:54
Avatar
Odpovídá na Michal Vokurka
Michal Vokurka:19.9.2015 20:18

Teď zjišťuji že všechno funguje v pořádku a chyba je mezi klávesnicí a židlí, omlouvám se :-) Ty mezery jsem totiž zkoušel vkládat do textu nikoli před, nebo za text.

 
Odpovědět
19.9.2015 20:18
Avatar
Pavel Štumpf:2.11.2015 21:20

Ahoj,
chtěl bych se zeptat, k čemu jsou sufixy? Díky.

 
Odpovědět
2.11.2015 21:20
Avatar
Odpovídá na Pavel Štumpf
Martin Halada:20.12.2015 17:57

Například, když napíšeme, že a = 56.6F;, tak tím říkáme, že se jedná o float (reálný datový typ).

Odpovědět
20.12.2015 17:57
Počítač je zařízení sloužící k řešení problémů, které by bez něj vůbec nevznikly.
Avatar
Olek Divoký
Člen
Avatar
Olek Divoký:5.3.2016 16:17

ahoj, nedávno jsem začal programovat v C# (celkově jsem v programovaní úplný začátečník)
Mohl by mi někdo vysvětlit jak funguje řádek
char znak = (char)cislo; // proč je char napsaný v oblé závorce

v kódu

public string Sifrovani(string vstup, int stupen)
{
string hotovo = "";
char[] rozdelene = vstup.ToCharA­rray();
for (int i = 0; i < rozdelene.Length; i++)
{
int cislo = rozdelene[i];
cislo = cislo + stupen;
char znak = (char)cislo;
hotovo = hotovo + znak;
}

 
Odpovědět
5.3.2016 16:17
Avatar
Tomáš Brůna
Redaktor
Avatar
Odpovídá na Olek Divoký
Tomáš Brůna:5.3.2016 16:40

takto se převádí int na char
protože do stringu nemůžeš uložit proměnnou typu int

Odpovědět
5.3.2016 16:40
Vi veri universum vivus vici
Avatar
Robin Bezák
Člen
Avatar
Odpovídá na Lukáš Štrbo
Robin Bezák:2.8.2016 21:32

V tomto kódě:
Console.Write­Line("Zadejte číslo:");
string s = Console.ReadLine();
Console.Write­Line("Zadal jste text: " + s);
Console.Write­Line("Text po funkci trim: " + s.Trim());
int a = int.Parse(s);
Console.Write­Line("Převedl jsem zadaný text na číslo parsováním, zadal jste: " + a);
Console.ReadKey();

Zkus napsat řádek: int a = int.Parse(s);
pod řádek: string s = Console.ReadLine();
Pak by to mělo fungovat :D

Odpovědět
2.8.2016 21:32
Console.WriteLine("Toto je moje motto :) ");
Avatar
Robin Bezák
Člen
Avatar
Odpovídá na Robin Bezák
Robin Bezák:2.8.2016 21:43

Ale stejně když to přehodíš tak tim výsledek nezměníš takže nevim :D

Odpovědět
2.8.2016 21:43
Console.WriteLine("Toto je moje motto :) ");
Avatar
Robin Bezák
Člen
Avatar
Odpovídá na alesekmoravec123
Robin Bezák:3.8.2016 16:43

Zkus si to ještě více zkrátit :D
např.: Console.Write­Line(@"Vítej v programu na výuku anglického jazyka- TENE!
Teď ti řeknu pár slovíček a ty je přeložíš.
False= nemáš pravdu");

V této syntaxi kodu můžeš vidět, že když napíšeš před uvozovky @ můžeš si ve WriteLine entrovat jak budeš chtít :D Jen to zkus a uvidíš :D

Odpovědět
3.8.2016 16:43
Console.WriteLine("Toto je moje motto :) ");
Avatar
Pavel SouQup
Člen
Avatar
Pavel SouQup:5.3.2017 15:18

Chtěl bych se zeptat na názorný příklad, kdy se dá použít "Replace()"
Proč bych dělal
string s = "Java je nejlepší!";
s = s.Replace("Java", "C#");
Console.Write­Line(s);
Console.ReadKey();

Když rovnou mohu udělat

Console.Write­Line("C# je nejlepší");
Console.ReadKey();

 
Odpovědět
5.3.2017 15:18
Avatar
pocitac770
Redaktor
Avatar
Odpovídá na Pavel SouQup
pocitac770:5.3.2017 16:40

Toto je pouze příklad pro pochopení, metoda jde zavolat na jakékmkoliv stringu, takže například chceš, aby všechna uživatelova tvrzení byla převedena na C#...

while(true){
    string s = Console.ReadLine();
    string r = s.Replace("Java", "C#");
    if(r.Equals(s))
        Console.WriteLine(r);
    else
        Console.WriteLine("Ne. " + r)
}
 
Odpovědět
5.3.2017 16:40
Avatar
Jan Mareš
Člen
Avatar
Jan Mareš:31.3.2017 12:35

Ahoj Mám pár dotazů:První je k článku Trim(), TrimStart() a StrimEnd().Nevím zdali se u proměnné StrimEnd() jedná o překlep či dělám chybu já ale pokud v kodu napíši: StrimEnd() tak to mám podtržené červeně a při kompilaci mi to nahlásí chybu a pokud napíši TrimEnd() tak se mi program zkompiluje a spustí.

Můj druhý dotaz je k běhu programu,zkouším pracovat s proměnou trim a trochu to kombinovat aby jsem se to naučil a pochopil použití jedná se konkrétně o TrimStart() a StrimEnd(). nevím co dělám špatně či jak to použít správně aby mi program správně fungoval,zde uvedu dva kody,první bude kdy má program špatný výstup a druhý kod bude napsán jinak a má výstup dle představ.

Console.WriteLine("Napiš text:");
            string text = Console.ReadLine();
            Console.WriteLine(text.TrimStart() + "Napsal jste:" + text.TrimEnd());
            Console.ReadKey();

zde před text a za text zadávám mezery úplně stejně jako to požaduje autor článku při cvičení.

Console.WriteLine("Napiš text:");
           string text = Console.ReadLine();
           Console.WriteLine("Napsal jste:" + text.Trim());
           Console.ReadKey();

Tento kod má můj požadovaný výstup při stejném zadání.
Zajímá mne v čem dělám v prvním případě chybu či proč je výstup jaký je,vím že je jednodušší napsat jen trim() ale rád by jsem věděl praktické použití TrimStart() a StrimEnd() ,popřípadě,jak je zkombinovat dohromady.

A můj třetí dotaz je k tématu:StartsWith() EndsWith() a Contains() : zda-li to chápu správně tak StartsWith() a EndsWith() mi zkontroluji začátek a konec řetězce,pokud by jsem pod toto zapsal něco co je uprostřed řetězce vyhodnotí mi to jako false. Ale zajímá mne proměnná Contains() - tu moc nechápu. děkuji za vysvětlení.

 
Odpovědět
31.3.2017 12:35
Avatar
Jan Mareš
Člen
Avatar
Jan Mareš:31.3.2017 13:19

Mám ještě jeden dotaz-ke vlastnosti length:

Console.WriteLine("Délka vašeho jména je: {0}", jmeno.Length);

Proč zde musí být {0}. A zda se tam stále píše jen {0} nebo mohu být i případy kdy tam bude napsáno {1},{2} atd.

 
Odpovědět
31.3.2017 13:19
Avatar
Jan Mareš
Člen
Avatar
Jan Mareš:31.3.2017 13:28

omlouvám se za spam ale už mi to nejde editovat,jinak by jsem to napsal do jednoho ale zajímá mne rozdíl těchto dvou zápisů a zda jsou oba správně či je jeden chybný či je jedno který zápis použiji,jelikož první zápis mi vyhovuje zatím více:

Console.WriteLine("napište vaše jméno:");
            string jmeno = Console.ReadLine();
            Console.WriteLine("Délka vašeho jména je:" + jmeno.Length);
            Console.ReadKey();

a druhý zápis

Console.WriteLine("napište vaše jméno:");
string jmeno = Console.ReadLine();
Console.WriteLine("Délka vašeho jména je:{0}"; jmeno.Length);
Console.ReadKey();
 
Odpovědět
31.3.2017 13:28
Avatar
nrgpostsk
Člen
Avatar
Odpovídá na Pavel SouQup
nrgpostsk:22.4.2017 4:35

Replace() pouzijes kdyz potrebujes upravit text ve stringu, napriklad uzivatel zadal "modre auto" a ty chces aby mu konzola treba vypsala ze jeho auto je cervene.

To co si napsal Ty, je jenom vypsani textu ne zamena znaku ve stringu.
Ted se Ti to zda byt nesmysl ale casem kdyz zacnes delat nejake programy se tahle funkce casto pouziva kdyz spracuvas hodne textu.

 
Odpovědět
22.4.2017 4:35
Avatar
Pavel Exner
Člen
Avatar
Odpovídá na Jan Mareš
Pavel Exner:21.6.2017 16:52

to {0} nema souvislost s vlastnosti Length, ale s metodou Format(). Nula je tam proto, ze pole jsou v c# cislovany od nuly. Jednicku tam treba pouzijes, pokud napises:
Console.Write­Line("Délka vašeho jména {0} je: {1}",jmeno, jmeno.Length);

 
Odpovědět
21.6.2017 16:52
Avatar
Jiří Richter:16.8.2017 20:34

To jsou čísla. :-)

 
Odpovědět
16.8.2017 20:34
Avatar
havlat82
Člen
Avatar
havlat82:26.8.2017 14:08

Ahoj narazil jsem na něco, co mě docela zaujalo a rád bych věděl proč to tak je.
Mám tenhle kus kódu:

sbyte sb = -127;
byte b = 255;
b = (byte)sb;

čekal jsem, že b bude mít přetypování hodnotu 127 nebo 128, ale opakovaně mi vychazí 129.
ví někdo proč?

 
Odpovědět
26.8.2017 14:08
Avatar
pocitac770
Redaktor
Avatar
Odpovídá na havlat82
pocitac770:26.8.2017 16:26

Stačí si uvědomit, jak jsou zapisovány čísla v binární soustavě. Pokud máme unsigned typy, pak je to jednoduché, 1 = 2 na (pozice) (myšleno jako index, píšu na mobilu). Byte je 8 bitů, proto si můžeme představit např 128 jako 10000000 (2 na 8.). U signed typů se používá jeden index, který označuje znaménko, přesněji ten první zleva. A protože zahrunujeme nulu jenom jednou (u kladných čísel, dle dohody), pak máme 2 sady čísel (0-127) a (-128 - -1). Zápis každého čísla v jedné sadě odpovídá tomu na stejné pozici v druhé sadě, jediný rozdíl v zápisu je 1 nebo 0 na první pozici. Proto máš -127, neboli 10000001. Kdyz si to převedeš jako klasické binární číslo do decimální soustavy (převedeš na unsigned typ), tak ti vyjde 2 na 8. * 2 na 0. = 128 + 1 = 129. Jednoduché, jen si stačí uvědomit ty krajové hodnoty, a jak jsou ty "sady" uspořádány :)

 
Odpovědět
26.8.2017 16:26
Avatar
havlat82
Člen
Avatar
Odpovídá na pocitac770
havlat82:26.8.2017 16:50

děkuju

 
Odpovědět
26.8.2017 16:50
Avatar
havlat82
Člen
Avatar
havlat82:5.9.2017 2:35

Ahoj, sorry že zase otravuju asi ptákovinou..

double mez = 1/3;
double zrychleni = 0;
bool podminka = zrychleni == mez;

cyklus
// změna hodnoty proměnné zrychlení
if (podminka) //příkaz
konec cyklu

jedna třetina je číslo s neukončenym rozvojem. pokud u typů double i float dochází díky uložení k nepřesnosti.
je vůbec možný porovnávat takový čísla? pokud by se měli rovnat .

zatim sem to vždycky řešil..

double mez = 1/3;
double zrychleni = 0;
double malinko = 0.00001;
// rovnost sem určil jako kteroukoli hodnotu,
// která je menší než rozdíl porovnávaných čísel
bool podminka = (zrychleni - mez) < malinko;

cyklus
// změna hodnoty proměnné zrychlení
if (podminka) //příkaz
konec cyklu

ale třeba to dělám celou dobu zbytečně..

 
Odpovědět
5.9.2017 2:35
Avatar
David Oczka
Redaktor
Avatar
Odpovídá na havlat82
David Oczka:5.9.2017 12:53

Pokud nebudeš mít výpočet proměnné zrychlení ve stejné přesnosti jako je přesnost proměnné mez (tedy plná přesnost typu double), tak se nikdy rovnat nebudou (prakticky mi to přijde nemožné). Urči si nějakou přesnost, třeba na těch 5 desetinných míst a před porovnáním obě hodnoty proměnných zaokrouhli na daný počet míst. Ovšem ani tohle nemusí sedět, záleží na tom, co počítáš a jaká je přesnost daného výpočtu...

Jinak je tvé řešení v podstatě to samé, co jsem popsal výše, akorát provedeno jiným způsobem. Kontroluješ zdali se výsledek blíží k mezi zleva. Zaokrouhlování kontroluje odchylku z obou stran. Ale to, jestli je potřeba kontrolovat odchylku z obou stran opět záleží na tvém výpočtu.

Pak doufám, že tu podmínku vyhodnocuješ i uvnitř cyklu... Protože jestli ji vyhodnocuješ jen na začátku a kontroluješ pořád stejnou hodnotu, tak to rozhodně fungovat nebude.

Kdyby nebylo jasno, mám na mysli toto:

cyklus
// změna hodnoty proměnné zrychlení
if ((zrychleni - mez) < malinko)
        //příkaz
konec cyklu

Snad to pomůže...

 
Odpovědět
5.9.2017 12:53
Avatar
havlat82
Člen
Avatar
 
Odpovědět
8.9.2017 8:21
Avatar
Karel Chaloupský:17.9.2017 14:25

a

Editováno 17.9.2017 14:26
 
Odpovědět
17.9.2017 14:25
Avatar
Karel Chaloupský:17.9.2017 14:30

Stejně tak tohle:

Console.WriteLine("napište vaše jméno:");
string jmeno = Console.ReadLine();
Console.WriteLine("Délka vašeho jména je:{0}"; jmeno.Length);
Console.ReadKey();

Můžes zapsat jednodušeji takhle :

Console.WriteLine("napište vaše jméno:");
string jmeno = Console.ReadLine();
Console.WriteLine($"Délka vašeho jména je:{jmeno.Length}");
Console.ReadKey();
 
Odpovědět
17.9.2017 14:30
Avatar
Petr Husnaj
Člen
Avatar
Petr Husnaj:18.10.2017 9:23

Chtěl bych zdůraznit, že programování online otevřelo úplně nové možnosti pro lidi kteří mají hodně pomalý počítač.

 
Odpovědět
18.10.2017 9:23
Avatar
Jirka Kouba
Člen
Avatar
Jirka Kouba:26.10.2017 20:45

Jak se vkládá do boolu nějaká proměnná? Snažím se o to, aby se mi do ní načetla proměnná s.
Děkuji za pomoc.
float s = 15;
bool vyraz = (s = 10 + 5);
Console.Write­Line(vyraz);
Console.ReadLine();

 
Odpovědět
26.10.2017 20:45
Avatar
gcx11
Redaktor
Avatar
Odpovídá na Jirka Kouba
gcx11:26.10.2017 21:10

Použij na porovnání dvě rovnítka

 
Odpovědět
26.10.2017 21:10
Avatar
Jirka Kouba
Člen
Avatar
Odpovídá na gcx11
Jirka Kouba:26.10.2017 21:13

Takže (=) jako matematická operace je (==) ?
Díky za pomoc

 
Odpovědět
26.10.2017 21:13
Avatar
gcx11
Redaktor
Avatar
Odpovídá na Jirka Kouba
gcx11:26.10.2017 21:55

Mám dvě čísla a a b.

Přiřazení

b = 5;

vrací přiřazenou hodnotu, takže můžeš přiřazovat více hodnot:

a = b = 5;

a když bys to měl v podmínce:

if (a = b)

tak by to znamenalo: "když platí b", což nedává moc smysl.

Proto na rozlišení existuje operátor na porovnání, který vrací bool:

if (a == b)

což je to samé jako

if (true)

nebo

if (false)

podle toho, jestli se hodnoty rovnají nebo ne.

Editováno 26.10.2017 21:57
 
Odpovědět
26.10.2017 21:55
Avatar
Jan Procházka:15.11.2017 16:31

Ještě bych rozvinul gcx11ovu odpověď. Dříve bylo možné provádět levostranné a pravostranné přiřazení příkazy

a:=b; // do proměnné a přiřaď hodnotu b
a=:b; // do proměnné b přiřaď hodnotu a

a zápis a=b způsoboval chybu. Předpokádám, že se vesměs používalo přiřazení a:=b a tak se od této možnosti upustilo ve prospěch (kratšího) zápisu a=b nesoucího právě význam a:=b.

zápis a==b byl od počátku logický operátor a nebyl důvod ho měnit. To, že je tvořený dvěma znaky také umožňuje jednoduchou mnemotechnickou pomůcku - dvě slova, dva odpovídající znaky...

a==b // (pravda pokud) a je rovno b
a!=b // (pravda pokud) a není rovno b
a~=b // (pravda pokud) a není rovno b - zápis v Matlabu, například

a=b // a budiž (rovno) b

 
Odpovědět
15.11.2017 16:31
Avatar
Odpovídá na havlat82
Jan Procházka:15.11.2017 16:49

Myslím, že jednodušší a srozumitelnější řešení je buď:

while(zrychle­ni<mez)
{
// kód cyklu
}

To v případě, že chceme, aby cyklus probíhal dokud zrychlení není větší, nebo rovno, zadané mezi. V nejhorším případě se stane, že se cyklus kvůli zaokrouhlovací chybě zastaví o jeden krok později.

Pokud chceš zastavit cyklus jen v okamžiku, kdy je zrychlení rovno dané mezi, tedy aby běžel pokud je zrychlení větší nebo menší než daná mez tak bych použil podmínku:

while(Abs(zrychleni-mez)<SpravneMa­leCislo)
{
// kód cyklu
}

 
Odpovědět
15.11.2017 16:49
Avatar
Lukáš Kaleta:7.12.2017 21:19

Super, diky moc :)

 
Odpovědět
7.12.2017 21:19
Avatar
Ladik Šotik
Člen
Avatar
Ladik Šotik:8.12.2017 18:04

no tak tento diel je už poriadny pretlak :D clovek sa v tom zacina pomaly stracat :D zahltenie informaciami na 100% outofmemory :D, ale zatial to nevzdavam zacal som vcera a dneska si klido pido pokracujem... som zvedavy ake priklady k tomu budu...

 
Odpovědět
8.12.2017 18:04
Avatar
Petr Zajac
Člen
Avatar
Petr Zajac:19.2.2018 16:39

Takhle teorie je docela složitější i na mě, snad v příkladech pochopím :-)

 
Odpovědět
19.2.2018 16:39
Avatar
Ondřej Fiala:27.3.2019 14:20

Pořád nechápu to PadRight a Left a Trim. Nechápu k čemu to je. Mluvim o tom kódu s trimem nahoře. Zadám číslo a stejně se nic nezmění. Když dam číslo 1 a tisíc mezer před ním, tak se to stejně zobrazí hned za : a úplně ta samá hodnota vyjde i po tom "trimování".

Odpovědět
27.3.2019 14:20
Jestli v životě najdeš cestu bez překážek, určitě nikam nevede. -Arthur C. Clarke
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Ondřej Fiala
David Čápka:27.3.2019 15:42

Když zadáš číslo, tak se nic nezmění, to máš pravdu. Je to také v článku uvedené, že parsování ty mezery trimuje samo. Ale co když zadáš text? Třeba se uživatele zeptáš na otázku ano/ne, tam nechceš řešit, že zadal mezery před/za a pak se ti to špatně porovná.

Odpovědět
27.3.2019 15:42
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
Odpovídá na Ondřej Fiala
Reaktivní uživatel:27.3.2019 18:26

Ještě doplním Davida o PadLeft a PadRight. Ano, mohl bys je nahradit for cyklem, ale proč to dělat? Chceš tabulku? Při troše snahy ji uděláš z čehokoli a nemusíš psát o for víc. Chceš podtrhnout nadpis? Oddělit od sebe něco? "".PadLeft(Con­sole.WindowWid­th, '-') je tvůj dobrý kamarád (ano, je to celkem šílenost, ale proč tak krásnou příležitost nevyužít?).

Odpovědět
27.3.2019 18:26
Kdo je připraven, toho zaskočí něco jiného
Avatar
Honza
Člen
Avatar
Honza:2. února 18:45

Mám prosbu, nerozumím následujícímu:

volání na proměnné, např.:

string s = "Java je nejlepší!";
s = s.Replace("Java", "C#");

int cislo = 3;
string s = soucet.ToString();

a naproti tomu volání na datovém typu:

string s = string.Format("Když sečteme {0} a {1}, dostaneme {2}", a, b, c);
int a = int.Parse(s);

proč se některé funkce (metody) jednou volají na proměnné a jindy na datovém typu? Nejsem schopen si to pamatovat tak, že si to nabifluju, potřeboval bych to pochopit. Děkuju :-)

 
Odpovědět
2. února 18:45
Avatar
Mouser
Člen
Avatar
Odpovídá na Honza
Mouser:3. února 0:10

Protože je C# objektový jazyk, k úplnému pochopení je potřeba znalost OOP. Ale prozatím se dá říct, že metody volané na datovém typu jsou takové obecnější. Metody volané na proměnné nějak pracují přímo s tou proměnnou. Když mám proměnnou s obsahující text "Java je nejlepší", tak metoda Replace vezme přímo ten text "Java je nejlepší" z té proměnné, vymění "Java" za "C#" a výsledek vrátí. Ale někdy se stane, že potřebuješ něco udělat, a žádnou proměnnou, s kterou bys pracoval, nemáš. Třeba u té metody Format sestavuješ řetězec, a nemáš žádnou "počáteční" proměnnou, na které bys ji mohl zavolat. Celý řetězec sestavuješ až v parametru. Tak C# implementoval metodu Format tak, aby se dala zavolat na datovém typu. Podobně u té metody Parse. Chceš naparsovat text na číslo, a výsledek uložit do proměnné typu int. Ale na začátku žádnou proměnnou typu int nemáš, tu teprve vytváříš. Tak C# umožňuje volat parsování přímo na datovém typu.

Ale když jsem říkal, že metody na datovém typu jsou obecnější, tak to v tomhle případě neznamená lepší. Jak se dozvíš dál, správnější je spíš to, co jde, volat na proměnné. Na datovém typu se volají jen věci, co nejdou jinak udělat, nebo jen krkolomně.

Jinak není potřeba si nic pamatovat. Když za proměnnou napíšeš tečku, Visual Studio ti rozbalí nabídku metod, které na dané proměnné můžeš zavolat. A u datového typu to funguje stejně. Nicméně všechny v článku uváděné metody (snad až na PadLeft a PadRight) se používají natolik běžně, že časem si je stejně zapamatuješ. :-)

 
Odpovědět
3. února 0:10
Avatar
Honza
Člen
Avatar
Odpovídá na Mouser
Honza:3. února 11:39

Paráda, děkuju za odpověď, obecně rozumím, důležité z Tvého příspěvku je:

  • Metody volané na proměnné nějak pracují přímo s tou proměnnou.
  • Ale někdy se stane, že potřebuješ něco udělat, a žádnou proměnnou, s kterou bys pracoval, nemáš. (pak se volá metoda na datovém typu)
  • správnější je spíš to, co jde, volat na proměnné.

K tomu ale opět jeden dotaz

int cislo = 3;
string s = cislo.ToString();

string s = "5";
int a = int.Parse(s);

Tady bych podle Tvého vysvětlení očekával, že by bylo správnější volat něco jako int a = s.Parse(); A to proto, že proměnnou, nad kterou chci volat Parse, v tomto případě mám.

... možná si odpovím sám - důvod by mohl být ten, že by Parse nevědelo, jaký datový typ má vrátit (jestli int, float, ...)

Tak to jsem zvědav, jak se tím prokoušu. Každopádně díky

 
Odpovědět
3. února 11:39
Avatar
Mouser
Člen
Avatar
Odpovídá na Honza
Mouser:3. února 21:40

Máš talent. :-) Jen pro upřesnění, to, že když nemáš proměnnou, voláš metodu na datovém typu, neber jako pravidlo. To jsem myslel jen jako příklad, kdy má třeba volání metody na datovém typu smysl. Na datovém typu se prostě dají volat metody, které ten datový typ nabízí. A tvůrci C# tam dali takové, které zpravidla umožňují elegantnější zápis něčeho, co by se jinak dělalo blbě. Ale můžeš je brát spíš jako takové výjimky, ono jich je relativně málo.

U toho Parse sis opravdu odpověděl sám. :-) Přesně, nevědělo by se, co vracet. Teoreticky by mohly existovat metody ParseToFloat, ParseToInt apod., případně elegantněji pomocí generiky (poznáš později), ale pak by na stringové proměnné musela být hromada metod pro všechny možné návratové typy. A stejně by to nestačilo, protože si můžeš dokonce vytvořit datový typ vlastní (třeba pro komplexní číslo), a pro něj by tam pak parsovací metoda chyběla. Navíc u některých datových typů může být parsování složité - u čísel asi tolik ne, ale taky se dá parsovat třeba datum, které může být v X různých formátech (začínající rokem, začínající dnem, oddělovačem je tečka, lomítko, atd.). Je logičtější, aby zodpovědnost za správné naparsování byla na výsledném datovém typu, který ví, jak má výsledek správně fungovat.

Ale to už zabíháme zbytečně do detailů. Tomu, co teď potřebuješ, rozumíš beze zbytku, a můžeš se s klidným svědomím posunout dál. Kompletní souvislosti pochopíš u OOP. :-)

 
Odpovědět
3. února 21:40
Avatar
David Holohlavský:25. února 9:19

Skvělá práce. ;-)

 
Odpovědět
25. února 9:19
Avatar
Odpovídá na Ladik Šotik
Marek Vajčner:29. února 16:02

Jo jo ještě dva takové články a bude to chtít nějakou referenční příručku. :-D

 
Odpovědět
29. února 16:02
Avatar
Jaromír Vikukel:6. dubna 14:36

Dobrý den, zaujala mne poznámka u datových typů float a double. Není mi jasné, kde dochází k určité ztrátě přesnosti. Do binární soustavy se snad nechá konvertovat libovolné dekadické číslo? V praxi jsem se setkával s použitím datových typů float a double i ve finančních výpočtech. Znamená poznámka, že zde vždycky existovalo riziko odchylek? Dále: co znamená u popisu těchto datových typů sloupec "přesnost"? Je to počet míst za desetinnou čárkou? Díky

 
Odpovědět
6. dubna 14:36
Avatar
Selfis1
Člen
Avatar
Odpovídá na Jaromír Vikukel
Selfis1:9. června 19:20

Ahoj jak ti to říct no nicméňe říct ty datovém typy ti můžou sloužit později na uložení nějaké hodnoty a vzhledem tomu že počítač uložuje v dvojikové soustavě takže my lidi máme desitkovou soustavu 1,2,3 atd. a počítače mají 6,7,8 proto číslo co zadáš musí počítač převést do dvojkové soustavy a poté požadavek zpracovat a odeslat ho tobě zpět v desítkové soutavě při tomto procesu to počítač může "zplést" proto je lepší požit double než float.

 
Odpovědět
9. června 19:20
Avatar
Daniel Hajný:13. června 17:46

Ve větě:
Čím větší číslo, tím více spotřebuje paměti. Pro věk uživatele tedy zvolíme byte, protože se jistě nedožije více, než 255 let. Představte si databázi milionu uživatelů nějakého systému, když zvolíme místo byte int, bude zabírat 4x více místa.
By mělo být místo 4x více místa: (24)x více místa

 
Odpovědět
13. června 17:46
Avatar
Alesh
Překladatel
Avatar
Odpovídá na Daniel Hajný
Alesh:13. června 18:37

A na to jsi přišel jak? Byte má velikost 8 bitů, int 32 bitů. 32 / 8 je kolik? ;-)

 
Odpovědět
13. června 18:37
Avatar
Odpovídá na Alesh
Daniel Hajný:13. června 18:39

Aha díky :D omlouvám se

 
Odpovědět
13. června 18:39
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 114 zpráv z 114.