<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet href="rss.css" type="text/css"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
<title>LINUXEXPRES - Diskuzní fórum</title>
<link>http://www.linuxexpres.cz/</link>
<description>RSS komentářů ke článkům</description>
<item>
<title>Re: Re: Programovanie v jazyku C++: Bloky a reverzný reťazec</title>
<description>
&lt;p&gt;&lt;strong&gt;<![CDATA[a ja myslel že string::size() vrací délku řetězce hmmm tak jak to teda je?? jak zjistím délku svého řetězce například std::string defaultSizeStringMessage = "zdarjaksvina";
// size_t delka = defaultSizeStringMessage.size()
pozn kašlu na to že je dole odpověď a to docela kvalitní četl jsem vše.. Jardíku děkuji nádherné vysvětlení a použití numeric limits.. ale otázka tu pořád je a to jestli na takouvou s prominutím pííí potřebuju xyz hlavičkovejch souborů a nebo opravdu stačí iostream a string  děkuji všem za odpověď a za komentáře
PS mám v sobě pár piv tak sa rozkecávám XD]]>&lt;/strong&gt;&lt;/p&gt;
</description>
<pubDate>Sun, 15 Jan 2017 22:39:37 +0100</pubDate>
<link>https://www.linuxexpres.cz/diskuse/diskuze-ke-clankum/programovanie-v-jazyku-c-bloky#post27180</link>
<guid>https://www.linuxexpres.cz/diskuse/diskuze-ke-clankum/programovanie-v-jazyku-c-bloky#post27180</guid>
</item>
<item>
<title>Programovanie v jazyku C++: Bloky a reverzný reťazec</title>
<description>
&lt;p&gt;&lt;strong&gt;<![CDATA[Takže bol upravený program. Úprava sa týkala vstupu aj j. Snáď bola diskusia plodná aj pre nováčikov, aby nerobili tú istú chybu ako ja a nielen to, ale i dôvod, prečo je to tak.]]>&lt;/strong&gt;&lt;/p&gt;
</description>
<pubDate>Fri, 23 Dec 2016 16:08:38 +0100</pubDate>
<link>https://www.linuxexpres.cz/diskuse/diskuze-ke-clankum/programovanie-v-jazyku-c-bloky#post27120</link>
<guid>https://www.linuxexpres.cz/diskuse/diskuze-ke-clankum/programovanie-v-jazyku-c-bloky#post27120</guid>
</item>
<item>
<title>Re: Re: Re: Programovanie v jazyku C++: Bloky a reverzný reťazec</title>
<description>
&lt;p&gt;&lt;strong&gt;<![CDATA[Vďaka za odpoveď. Už je mi problematika jasnejšia.]]>&lt;/strong&gt;&lt;/p&gt;
</description>
<pubDate>Fri, 23 Dec 2016 11:34:09 +0100</pubDate>
<link>https://www.linuxexpres.cz/diskuse/diskuze-ke-clankum/programovanie-v-jazyku-c-bloky#post27119</link>
<guid>https://www.linuxexpres.cz/diskuse/diskuze-ke-clankum/programovanie-v-jazyku-c-bloky#post27119</guid>
</item>
<item>
<title>Re: Re: Programovanie v jazyku C++: Bloky a reverzný reťazec</title>
<description>
&lt;p&gt;&lt;strong&gt;<![CDATA[Ošetřit nulovou délku vstupního řetězce je nutné z následujících důvodů.
Ve vašem 4. příkladu přiřazujete do proměnné j výsledek volání funkce size(). Funkce size() vrací hodnotu typu size_t.
To lze doložit dokumentací funkce size(): http://www.cplusplus.com/reference/string/string/size/.
Dokumentace datového typu size_t: http://www.cplusplus.com/reference/cstddef/size_t/.
V dokumentaci typu size_t je doslova uvedeno "Alias of one of the fundamental unsigned integer types.", otrocky přeloženo: "Jiný název pro jeden ze základních neznaménkových celočíselných typů".
Jestliže od nulové hodnoty unsigned typu odečtete jedničku, dostanete podle normy: "If the destination type is unsigned, the resulting value is the least unsigned integer congruent to the source integer (modulo 2^n where n is the number of bits used to represent the unsigned type).".
Tuto formulaci bych začátečníkům asi nechtěl vysvětlovat, zjednodušeně to znamená, že když dojde k podtečení, přičítá se maximální možná hodnota daného datového typu tak dlouho, až výsledná hodnota bude v povoleném rozsahu pro tento typ. 
V našem konkrétním případě: po podtečení na -1 následuje "korekce" na maximální možnou hodnotu datového typu size_t. Pracovně ji označím DELKA.
Protože DELKA může (ale nemusí) být typu long a typ long může (ale nemusí) mít větší rozsah než typ int, může (ale nemusí) při přiřazení DELKA do proměnné j dojít k přetečení a následné korekci hodnoty.
Pokud se to na konkrétní platformě "hezky sejde", dojde ke korekci na zápornou hodnotu a algoritmus funguje, nikoli však proto, že je dobře napsaný, ale proto, že jsme prostě měli štěstí.
Pokud se to na konkrétní platformě "ošklivě sejde", bude se algoritmus chovat neočekávaně.]]>&lt;/strong&gt;&lt;/p&gt;
</description>
<pubDate>Fri, 23 Dec 2016 10:01:23 +0100</pubDate>
<link>https://www.linuxexpres.cz/diskuse/diskuze-ke-clankum/programovanie-v-jazyku-c-bloky#post27118</link>
<guid>https://www.linuxexpres.cz/diskuse/diskuze-ke-clankum/programovanie-v-jazyku-c-bloky#post27118</guid>
</item>
<item>
<title>Re: Re: Re: Re: Re: Re: Re: Programovanie v jazyku C++: Bloky a reverzný reťazec</title>
<description>
&lt;p&gt;&lt;strong&gt;<![CDATA[Je to zaujímavý problém. Áno, mne to funguje v troch počítačoch a v Linuxe i Windowse. Ale asi som mal šťastie. Ale ako hovoríte, v istej možnej asi malej pravdepodobností to môže vymazať domovský priečinok. O tomto probléme vskútku počujem prvý krát, sa priznám. Pretože mi to stále fungovalo, tak som neriešil a ani nehĺbal odpovede. Dokonca tento príklad je v jednom tutoriali ale samozrejme v trochu inej forme. Ja som ho len upravil pre potreby tohto seriálu. Ale podobne ako ja i oni neriešili tento „hack“ systému. Ok, algoritmus sa upraví tak, aby j nikdy nekleslo na nulu a nižšie. Vďaka za vysvetlenie. Ospravedlňujem sa že som tak vyštekol, ale nevedel som o tomto druhu pruseru.]]>&lt;/strong&gt;&lt;/p&gt;
</description>
<pubDate>Fri, 23 Dec 2016 01:34:13 +0100</pubDate>
<link>https://www.linuxexpres.cz/diskuse/diskuze-ke-clankum/programovanie-v-jazyku-c-bloky#post27117</link>
<guid>https://www.linuxexpres.cz/diskuse/diskuze-ke-clankum/programovanie-v-jazyku-c-bloky#post27117</guid>
</item>
<item>
<title>Re: Re: Re: Re: Re: Re: Re: Programovanie v jazyku C++: Bloky a reverzný reťazec</title>
<description>
&lt;p&gt;&lt;strong&gt;<![CDATA[Překlep: Výsledek výrazu word.size()-1 je 2G+1.]]>&lt;/strong&gt;&lt;/p&gt;
</description>
<pubDate>Fri, 23 Dec 2016 01:19:40 +0100</pubDate>
<link>https://www.linuxexpres.cz/diskuse/diskuze-ke-clankum/programovanie-v-jazyku-c-bloky#post27116</link>
<guid>https://www.linuxexpres.cz/diskuse/diskuze-ke-clankum/programovanie-v-jazyku-c-bloky#post27116</guid>
</item>
<item>
<title>Re: Re: Re: Re: Re: Re: Programovanie v jazyku C++: Bloky a reverzný reťazec</title>
<description>
&lt;p&gt;&lt;strong&gt;<![CDATA[Neukázal jste nic. Pojďme si projít chování programu.
Situace 1)
Program vypíše "Napiste lubovolne slovo: " a čeká na vstup. Já zmáčknu Ctrl+D (konec vstupu na mé platformě). Protože vstup není ošetřen, je word.size() rovno 0. Do proměnné i se přiřadí hodnota 0. Výsledek výrazu word.size()-1 je std::numeric_limits< string::size_type >::max(). Na mé platformě má int 4B, string::size_type 8. std::numeric_limits< int >::max() je na mé platformě 2G, std::numeric_limits< string::size_type >::max() je 8G. Je vidět, že prostě hodnotu 8G do typu int nedostanu. int je znaménkový, při implicitní konverzi dojde k overflow, nedefinovanému chování a hodnota j může být jakákoliv. V "dobrém" případě -1, ale klidně i 2G, protože je to nedefinované chování. Nebo se mi může smazat domovský adresář.
Situace 2)
Program vypíše "Napiste lubovolne slovo: " a čeká na vstup. Já zadám 2G+2 znaků. Můj systém má dostatek paměti. Výsledek výrazu word.size()-1 je 2G-1. Při implicitní konverzi na int pak můžu dostat cokoliv, protože opět došlo k přetečení. V "dobrém případě" to bude 1 a program vypíše pouze jeden znak. Nebo tam bude -3 a program nevypíše nic. A nebo se mi smaže domovský adresář.]]>&lt;/strong&gt;&lt;/p&gt;
</description>
<pubDate>Fri, 23 Dec 2016 01:17:27 +0100</pubDate>
<link>https://www.linuxexpres.cz/diskuse/diskuze-ke-clankum/programovanie-v-jazyku-c-bloky#post27115</link>
<guid>https://www.linuxexpres.cz/diskuse/diskuze-ke-clankum/programovanie-v-jazyku-c-bloky#post27115</guid>
</item>
<item>
<title>Re: Re: Re: Re: Re: Programovanie v jazyku C++: Bloky a reverzný reťazec</title>
<description>
&lt;p&gt;&lt;strong&gt;<![CDATA[Ja stále používam tento prepis cyklu a ešte ani raz má nesklamal. Na druhej strane som stále len v malých hladinách a tak hlboko do dôsledkov som neskúmal. Nehovorím, že sa to zrubať môže pri nejakých exotických číslach. Sam som sa s tým ešte nestretol. Ale vďaka za poznanie. I keď, pre potreby tohto seriálu budem i naďalej používať. Resp. pre vaše upokojenie, dám podmienku j > 0 v ďalších cykloch, ak sa to vyskytne. Škoda že ste takto nezačali a nemuseli sme tu absolvovať slovnú vojnu.]]>&lt;/strong&gt;&lt;/p&gt;
</description>
<pubDate>Fri, 23 Dec 2016 01:05:34 +0100</pubDate>
<link>https://www.linuxexpres.cz/diskuse/diskuze-ke-clankum/programovanie-v-jazyku-c-bloky#post27114</link>
<guid>https://www.linuxexpres.cz/diskuse/diskuze-ke-clankum/programovanie-v-jazyku-c-bloky#post27114</guid>
</item>
<item>
<title>Re: Re: Re: Re: Re: Programovanie v jazyku C++: Bloky a reverzný reťazec</title>
<description>
&lt;p&gt;&lt;strong&gt;<![CDATA[Jinak mou kritiku neberte jako něco proti vám. Já mám takovéto připomínky pořád na každého. Já jen upozorňuji na problém a budu rád, pokud si ho také uvědomíte a příště se chyby nedopustíte. A pokud ano, tak na něj třeba upozorním znovu, a nebo mě to přestane bavit a neupozorním.]]>&lt;/strong&gt;&lt;/p&gt;
</description>
<pubDate>Fri, 23 Dec 2016 01:02:45 +0100</pubDate>
<link>https://www.linuxexpres.cz/diskuse/diskuze-ke-clankum/programovanie-v-jazyku-c-bloky#post27113</link>
<guid>https://www.linuxexpres.cz/diskuse/diskuze-ke-clankum/programovanie-v-jazyku-c-bloky#post27113</guid>
</item>
<item>
<title>Re: Re: Re: Re: Re: Programovanie v jazyku C++: Bloky a reverzný reťazec</title>
<description>
&lt;p&gt;&lt;strong&gt;<![CDATA[Chyba 1: no lebo všetky tutoriály toto riešia že? Riešenie vstupov a výnimiek je dosť neľahká vec. Tak či tak, ak užívateľ nezadá nič, inak povedané word.size je 0, tak ani nedôjde k vykonaniu algoritmu a následne ani k žiadnej chybe.
Chyba 2: ukázal som vám, že pretečeniu nedôjde. Ani keby bol jeden znak. Dôjde len k tomu, že i bude 0, j bude 0 a nedôjde ani k uskutočneniu cyklu.]]>&lt;/strong&gt;&lt;/p&gt;
</description>
<pubDate>Fri, 23 Dec 2016 00:59:07 +0100</pubDate>
<link>https://www.linuxexpres.cz/diskuse/diskuze-ke-clankum/programovanie-v-jazyku-c-bloky#post27112</link>
<guid>https://www.linuxexpres.cz/diskuse/diskuze-ke-clankum/programovanie-v-jazyku-c-bloky#post27112</guid>
</item>
<item>
<title>Re: Re: Re: Re: Programovanie v jazyku C++: Bloky a reverzný reťazec</title>
<description>
&lt;p&gt;&lt;strong&gt;<![CDATA[To je ale ten problém, j vůbec nemusí být -1. Výsledkem výrazu word.size() - 1 je neznaménková hodnota. Pokud hodnota při přiřazení do 'j' nemůže být reprezentována typem int (velká hodnota), dojde k přetečení a tedy nedefinovanému chování. Toho je využíváno při různých optimalizací cyklů apod. Za to, že tam u vás je -1 a funguje to, jak jste zamýšlel, můžete být rád.]]>&lt;/strong&gt;&lt;/p&gt;
</description>
<pubDate>Fri, 23 Dec 2016 00:56:36 +0100</pubDate>
<link>https://www.linuxexpres.cz/diskuse/diskuze-ke-clankum/programovanie-v-jazyku-c-bloky#post27111</link>
<guid>https://www.linuxexpres.cz/diskuse/diskuze-ke-clankum/programovanie-v-jazyku-c-bloky#post27111</guid>
</item>
<item>
<title>Re: Re: Re: Re: Re: Programovanie v jazyku C++: Bloky a reverzný reťazec</title>
<description>
&lt;p&gt;&lt;strong&gt;<![CDATA[Nebo spíše 2G+2 znaků]]>&lt;/strong&gt;&lt;/p&gt;
</description>
<pubDate>Fri, 23 Dec 2016 00:48:23 +0100</pubDate>
<link>https://www.linuxexpres.cz/diskuse/diskuze-ke-clankum/programovanie-v-jazyku-c-bloky#post27110</link>
<guid>https://www.linuxexpres.cz/diskuse/diskuze-ke-clankum/programovanie-v-jazyku-c-bloky#post27110</guid>
</item>
<item>
<title>Re: Re: Re: Re: Programovanie v jazyku C++: Bloky a reverzný reťazec</title>
<description>
&lt;p&gt;&lt;strong&gt;<![CDATA[> cin >> word;
Chyba 1, neošetřený vstup
> int j = word.size() - 1;
Chyba 2, možné přetečení, kvůli tomu špatný výsledek operace. Když na své platformě zadám 2G+1 znaků, výsledek je jen 1 znak.
Článek může být pro začátčníky, ale začátečník pro začátek potřebuje vědět, co je to proměnná, znát základní datové typy, rozdíl mezi znaménkovým a neznaménkovým, znát standardem garantované rozsahy, aby věděl, jaký typ je dobré použít pro danou situaci, vědět, co je to implicitní a explicitní konverze a jak se chová. Až tohle pochopí, tak se může posunout dále. Když mu to ale vysvětlíte špatně a naučíte špatným návykům?]]>&lt;/strong&gt;&lt;/p&gt;
</description>
<pubDate>Fri, 23 Dec 2016 00:46:15 +0100</pubDate>
<link>https://www.linuxexpres.cz/diskuse/diskuze-ke-clankum/programovanie-v-jazyku-c-bloky#post27109</link>
<guid>https://www.linuxexpres.cz/diskuse/diskuze-ke-clankum/programovanie-v-jazyku-c-bloky#post27109</guid>
</item>
<item>
<title>Re: Re: Re: Programovanie v jazyku C++: Bloky a reverzný reťazec</title>
<description>
&lt;p&gt;&lt;strong&gt;<![CDATA[Ach jo, napodobne mi to kuslo odpoveď. Tak ešte raz:
i bude 0, j bude -1, neplatí podmienka i < j a tak sa cyklus nevykoná!]]>&lt;/strong&gt;&lt;/p&gt;
</description>
<pubDate>Fri, 23 Dec 2016 00:38:08 +0100</pubDate>
<link>https://www.linuxexpres.cz/diskuse/diskuze-ke-clankum/programovanie-v-jazyku-c-bloky#post27108</link>
<guid>https://www.linuxexpres.cz/diskuse/diskuze-ke-clankum/programovanie-v-jazyku-c-bloky#post27108</guid>
</item>
<item>
<title>Re: Re: Re: Programovanie v jazyku C++: Bloky a reverzný reťazec</title>
<description>
&lt;p&gt;&lt;strong&gt;<![CDATA[Tak algoritmus neurobí nič, pretože neplatí i]]>&lt;/strong&gt;&lt;/p&gt;
</description>
<pubDate>Fri, 23 Dec 2016 00:36:38 +0100</pubDate>
<link>https://www.linuxexpres.cz/diskuse/diskuze-ke-clankum/programovanie-v-jazyku-c-bloky#post27107</link>
<guid>https://www.linuxexpres.cz/diskuse/diskuze-ke-clankum/programovanie-v-jazyku-c-bloky#post27107</guid>
</item>
<item>
<title>Re: Programovanie v jazyku C++: Bloky a reverzný reťazec</title>
<description>
&lt;p&gt;&lt;strong&gt;<![CDATA[Inak by ma zaujímalo, prečo som povinný doplniť užívateľovi to, že si dávaj pozor na 0? Algoritmus to v tomto prípade nepotrebuje. A v iných prípadoch sa to ošetrí:
for(i = 0, j = word.size() - 1; i < j && j > 0; i++, j--). Alebo máte na myslí niečo iné, čo mi uniká?]]>&lt;/strong&gt;&lt;/p&gt;
</description>
<pubDate>Fri, 23 Dec 2016 00:33:51 +0100</pubDate>
<link>https://www.linuxexpres.cz/diskuse/diskuze-ke-clankum/programovanie-v-jazyku-c-bloky#post27106</link>
<guid>https://www.linuxexpres.cz/diskuse/diskuze-ke-clankum/programovanie-v-jazyku-c-bloky#post27106</guid>
</item>
<item>
<title>Re: Re: Programovanie v jazyku C++: Bloky a reverzný reťazec</title>
<description>
&lt;p&gt;&lt;strong&gt;<![CDATA[> int j = word.size() - 1;
A když je word.size() rovno 0?]]>&lt;/strong&gt;&lt;/p&gt;
</description>
<pubDate>Fri, 23 Dec 2016 00:33:43 +0100</pubDate>
<link>https://www.linuxexpres.cz/diskuse/diskuze-ke-clankum/programovanie-v-jazyku-c-bloky#post27105</link>
<guid>https://www.linuxexpres.cz/diskuse/diskuze-ke-clankum/programovanie-v-jazyku-c-bloky#post27105</guid>
</item>
<item>
<title>Re: Programovanie v jazyku C++: Bloky a reverzný reťazec</title>
<description>
&lt;p&gt;&lt;strong&gt;<![CDATA[Ešte sa musím vrátiť k tomu druhému bodu. K vašej zmienenej situácie, že dôjde pri 0 k pretečeniu. No nedôjde, keďže algoritmus nedovolí, aby j kleslo na nulu.]]>&lt;/strong&gt;&lt;/p&gt;
</description>
<pubDate>Fri, 23 Dec 2016 00:01:43 +0100</pubDate>
<link>https://www.linuxexpres.cz/diskuse/diskuze-ke-clankum/programovanie-v-jazyku-c-bloky#post27104</link>
<guid>https://www.linuxexpres.cz/diskuse/diskuze-ke-clankum/programovanie-v-jazyku-c-bloky#post27104</guid>
</item>
<item>
<title>Re: Re: Re: Programovanie v jazyku C++: Bloky a reverzný reťazec</title>
<description>
&lt;p&gt;&lt;strong&gt;<![CDATA[Tak mi ukážte, kde je chyba? Neskompiluje to? Vyhodí to error? Algoritmus je zlý a človek nepochopí, o čo ide (o výmenu písmen v reťazci)? to nie je chyba, len iný postup. A v tom je rozdiel! Ten algoritmus sa učí všade na školách, tam mi nepíšte, že je to chyba. To, že je to zjednodušene, áno, je to zjednodušené. Zabúda na mnoho veci ako vymenoval dotyčný, ale človek sa dopatrá k výsledku, ak samozrejme človek nenapíše do inputu žiadne slovo.]]>&lt;/strong&gt;&lt;/p&gt;
</description>
<pubDate>Thu, 22 Dec 2016 23:46:59 +0100</pubDate>
<link>https://www.linuxexpres.cz/diskuse/diskuze-ke-clankum/programovanie-v-jazyku-c-bloky#post27103</link>
<guid>https://www.linuxexpres.cz/diskuse/diskuze-ke-clankum/programovanie-v-jazyku-c-bloky#post27103</guid>
</item>
<item>
<title>Re: Re: Programovanie v jazyku C++: Bloky a reverzný reťazec</title>
<description>
&lt;p&gt;&lt;strong&gt;<![CDATA[Pane Boldižár, to že někde někdo něco napíše, ještě neznamená automaticky že je správně znova opakovat ty samé chyby. Jenom jstše se zařadil do řady, na kterou zase pak bude někdo odkazovat, že se to tak pro začátečníky psát může, protože už to tak někdo píše a nevadí to - vadí to. Většinou se pro začátečníky dělají příklady jednoduché, resp. zjednodušené, ne že se kašle na chyby. A odpověď že je to přece jenom pro začátečníky a chyby a bezp. problémy se řeší až na ně dojde je už snad dokonce úplná drzost. To se na mě nezlobte, každý člověk dělá chyby, nikdo neví všechno, ale toto co jste předvedl jako reakci na kritiku, a ještě k tomu plně oprávněnou, tak to mě opravdu šokovalo.]]>&lt;/strong&gt;&lt;/p&gt;
</description>
<pubDate>Thu, 22 Dec 2016 23:26:17 +0100</pubDate>
<link>https://www.linuxexpres.cz/diskuse/diskuze-ke-clankum/programovanie-v-jazyku-c-bloky#post27102</link>
<guid>https://www.linuxexpres.cz/diskuse/diskuze-ke-clankum/programovanie-v-jazyku-c-bloky#post27102</guid>
</item>
</channel>
</rss>