[ aleksazr @ 12.10.2017. 17:28 ] @
Code:

if (((A == B) && C) || (A != B))
 foo();


pozvati foo ako je A jednako B i C jednako 1, ili ako A nije jednako B.

Ovako nešto ponekad napišem i uvek se pitam da li može lepše,
tj. da ne piše i A jednako B i A različito B.

Kako bi ste vi napisali? Po mogućstvu u jednoj IF liniji.
[ Branimir Maksimovic @ 12.10.2017. 17:45 ] @
if (C || A != B)foo();
[ djoka_l @ 12.10.2017. 18:02 ] @
A evo zašto je tačni to što je Branimir napisao:

Označimo izraz A==B sa X, tada je A!=B u stvari !X ( da malo uprostim izvođenje)

Sada imamo logički izraz:

(X && C) || !X

Primenimo zakon distribucije za or prema and https://en.wikipedia.org/wiki/...e_property#Propositional_logic

(X && C) || !X = (X || !X) && (C || !X)

Izraz (X || !X) se zove zakon isključenja trećeg pa je vredost tog izraza uvek true https://en.wikipedia.org/wiki/Law_of_excluded_middle

(X || !X) && (C || !X) = 1 && (C || !X)

Sada primenimo zakon neutralnosti true prema AND (1 && Y) = Y

1 && (C || !X) = C || !X

Sada kada vratimo vrednost !X

C || (A != B)

Drugim rečima, nema magije, moraju se znati zakoni logike. Posveti malo vremena da popuniš rupe u svom matematičkom obrazovanju.
Evo na gomili većine Bulove logike https://en.wikipedia.org/wiki/Boolean_algebra
[ aleksazr @ 12.10.2017. 19:57 ] @
U redu, jasno mi je. Hvala.

Mojim rečima bih objasnio ovako:
čim imamo izraz "A jednako B ILI" - to automatski znači da sa druge strane ILI je A različito od B, pa to ne treba ni pisati.
[ djoka_l @ 13.10.2017. 14:56 ] @
Ne znači
[ Shadowed @ 13.10.2017. 17:58 ] @
@aleksazr, mozes i tako analiticki pojednostaviti ali si napravio malu gresku.

Zapravo, tvoj pocetni izraz ((A == B) && C) || (A != B) mozes okrenuti (logicko ILI je komutativno) -> (A != B) || ((A == B) && C)
E sad ovde mozes gledati na taj nacin:
Ovo ce biti tacno ako je A != B i onda drugi deo nije bitan.
Ali, ako to nije tacno, to vec znaci da je tacno A == B pa ne moras da proveravas pa ti ostaje samo (A != B) || C sto mozes da okrenes i dobijes ono sto su ti vec dali -> C || (A != B).