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.
Člen
Zobrazeno 22 zpráv z 22.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
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.