Diskuze: Kontrukce if ( vyraz1 && vyraz 2 )
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 22 zpráv z 22.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
if((v1 == null && v2) || (v1 && v2 == null) || (v1 && v2))
Prostě si poskládáš podmínky, které jsi dal dohromady, jako všechny
přípustné možnosti
(Tedy pokud má C++ takovýto zápis zjišťování nullu, jinak si tam doplň
to, co vy používáte v tom vašem superrychlém jazyku
)
Psal nulovou ne nullovou
Ale na podmínkách to nic nemění 
Tohle určitě ne. Vždyť to je to samé co napsal on, jen jsi dal jiný-
špatný operátor.
Správně je třeba
if ( vyraz != 0 && vyraz2 != 0 && vyraz3 )
Eventuálně klidně bez ifu, ale to je trošku prasárna.
A teď popis:
Je li vyraz1 0, nepokračuje se testováním.
Je li vyraz1 nenula a vyraz2 nula, nepokračuje se testováním.
Jeli vyraz1 i vyraz2 nenula otestuje - vyhodnotí se vyraz3.
Já se domnívám, že to splňuje zadání.
if ( vyraz1 || vyraz2 ) { vyraz3; }
Je li vyraz1 = 0, nezúčastní se podmínky a je vyhodnocen jen vyraz2
Je li vyraz2 = 0, nezúčastní se podmínky a je vyhodnocen jen vyraz1
Je li vyraz1 = 0 a vyraz2 = 0, podmínka není splněna
Je li vyraz1 nebo vyraz2 nenula, podmínka je splněna
Počkat počkat. To asi mluvíme oba o něčem jiném. Já to pochopil tak,
že nechce aby se případně vyraz3 zúčastnil vyhodnocování, například
proto, že je to funkce, která má nějaký vedlejší efekt. Ale ty nemáš
přece pravdu ani tak. Nevím jistě co znamená zúčastnit se podmínky v
tvém podání, ale já to beru jako vyhodnocení, aka evaluation of expression
a Jak by hned první example mohl platit? Pokud je vyraz1 roven nule,
zúčastní se vyhodnocení podmínky. Protože není pravda, že se vyhodnotí
pouze výraz2, vyhodnotí se nejdřív jednička ta vyjde fase a pak se jde na
dvojku. V druhém případě. Pokud je vyraz2 nula, tak se to třeba ani
nezjistí, protože stačí aby vyraz1 byl true a dvojka už se neřeší.
Myslím, že máš popletené pořadí vyhodnocování operandů.
Tím jsem chtěl objasnit jak to vnímám já, přiznávám, že mi asi uniká
význam slov zúčastnit se podmínky.
Tahle fráze nemá logické vysvětlení, takže asi poprosím autora dotazu,
případně tebe abyste vyjasnili, co je to zúčastnit se.
Proč tam pleteš vyhodnocení, zadání znělo nezúčastnit se podmínky. A
jak jinak bys chtěl zjistit že vyraz1 nebo vyraz2 je 0 bez vyhodnocení ?
Já jsem to pochopil tak, že "aby se nezucastnil podminky" znamená, aby na
něj nebyl brán ohled, a v tom případě moje řešení přesně odpovídá
zadání "co nejjednoduseji". Přiznávám, že nevím, co zadavatel ve
skutečnosti přesně chtěl, ale odpovídám na to, jak to podal.
asi bys měl bý víc konkrétní, protože tady to evidentně chápe každý
jinak
někteří tu pracují s výrazem jako s proměnnou
ale podle mně výraz
a > b
b - 5
c != 15
atd...
vrací true/false - i když ano, false je fyzicky "0" , ale podle mně se
ptáš spíš na to, jak vyloučit z testování proměnnou s hodnotou nula
takže bys radši měl uvést konkrétní příklad a případně smysl toho
všeho, protože takto se to jeví jako nesmysl
Tak to ma vypadat pokud x a y se nerovnaji nule : if( x > 10 && y
> 10 ) {z == 20;}
A takto kdyz se rovna treba x nule : if( y > 10 ) {z == 20;}
Jde me o to zpracovavat na jednom miste co nejvice podminek bez zbytecneho vetveni .... pokud se to tedy nejak da vubec napsat .........
No samozrejmne ze reseni pres || ( nebo ) mne prirozene napadlo ale takto to
resit nechci protoze to bude priliz dlouhe a "amaterske" 
s c++ nezacinam ...
Předpokládám, že ses upsal a místo z == 20; má být z = 20;
Ale to, jestli proměnná má hodnotu "nula" musíš někde zjistit, je jedno kde a
if( x > 10)
funguje zároveň jako
if( x != 0)
tak kde je problém?
anebo takhle ?
z = 20 pokud:
x > 10, nebo x ==0
a zároveň
y > 10, nebo y ==0
if((x == 0 || x > 10) && (y == 0 || y > 10)z=20;
Vyhodnocení tu zohlednuju z prostého důvodu, vyraz2 mohla být funkce, která dělá něco s vnějším světěm, má side effect.
Je li vyraz1 = 0, nezúčastní se podmínky a je vyhodnocen jen vyraz2
Je li vyraz2 = 0, nezúčastní se podmínky a je vyhodnocen jen vyraz1
Druhá část první věty je špatně. Vyhodnocen není jen vyraz2 ale i
vyraz1.
Druhá věta je logicky špatně.
Právě kvůli tomu, že expression může být i zavolání funkce.
Jsem to pochopil jsem tak, že zúčastnit se podmínky, by bylo právě nechat
se zavolat, což třeba vždycky nechceš.
Autor dotazu chce něco jako
Pokud je splněn vyraz1 a zároveň vyraz2 nebo pokud je vyraz 1 roven nule a vyraz2 je splněn nebo pokud je splněn vyraz1 a zároveň vyraz2 je nula pak vyhodnotí jako splněno. Jsem na mobilu nechce se mi to psát do ifu.
Hele co se stane s tvojí podminkou, když x je nula a y je nula.
Nejsem si teď úplně jistý, ale myslel jsem, tento by se mělo vyhodnotit jako falše podle dotazu, ale ty dáš true.
if ( (vyraz1 && vyraz2 ) || ( vyraz1 == 0 && vyraz2 ) || ( vyraz1 && vyraz2 == 0 ) )
Jak ale vidíš, je to příliš dlouhé. Netuším jakou máš metriku amatéřiny, ale jestli máš za sebou základy mat logiky, uvidíš v tom popsány všechny možné kombinace, které chceme. Dovolil bych si vlastní názor, když chceš takhle dlouhý a komplexní test, vyplatí se ho napsat zřetelně, tedy bez takových těch hacku a triků, kdokoliv kdo to bude po tobě číst, ti bude vděčný.
Máš pravdu, já to zase napsal terminologicky špatně, myslel jsem to
takto:
Je li vyraz1 = 0, nezúčastní se podmínky a podmínky se zúčastní jen
vyraz2
Je li vyraz2 = 0, nezúčastní se podmínky a podmínky se zúčastní jen
vyraz1
V té odpovědi jsem neuvažoval vyhodnocení tak jak ho myslíš ty.
Myslím že tazatel se u tohoto vlákna hodně nasměje 
Ano to je sice pravda ale u desitky ruznych kombinaci z toho vznikne docela
dost velky hnuj 
Ano, když x i y budou mít hodnotu nula - podmínka bude vyhodnocena jako true - autor nikde nespecifikuje, co se má stát, když nastane tento stav - jinak ten můj příspěvek byla otázka, jestli to tak myslel .
Pokud by se v tom případě nemělo nic dít, nezbývá, než ten stav otestovat další pomínkou
if(!(x == 0 && y == 0 ))
{
if((x == 0 || x > 10) && (y == 0 || y > 10))z=20;
}
Skoro bych řekl, že pokud mluvíme o desítkách podmínek v jediném ifu, máš někde chybu v návrhu. Nezkusíš se podělit o důvod, proč něco takového chceš?
Já jsem právě měl pocit, že jeho první příspěvek říká přesně
to, že musí být splněna aspoň jedna podmínka za předpokladu, že ta
druhá je nula. Ale tohle vlákno dost zmatený. Hlavně kvůli používání
neexistujících termínů. Nemyslel jsem to vůči tobě jako insult 
Zobrazeno 22 zpráv z 22.
