» »

Poenostavitev if pogoja.

Poenostavitev if pogoja.

HotBurek ::

Dobro jutro.

Evo, tokrat me zanima, ali se da sledeča if pogoja kako poenostavit?

if pogoj_1 or pogoj_2 then:
    call procedura_1;
end if;

if pogoj_1 or pogoj_2 or pogoj_3 then:
    call procedura_2;
end if;

To je to.
root@debian:/# iptraf-ng
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window
  • spremenilo: HotBurek ()

bemfa ::

pogoj_1_2 = pogoj_1 or pogoj_2

if pogoj_1_2 then:
   call procedura_1;
end if;

if pogoj_1_2 or pogoj_3 then:
   call procedura_2;
end if;

prtenjam ::

Lahko pa zmanjšaš število preverjanj:
if pogoj_1 or pogoj_2 then:
    call procedura_1;
    call procedura_2;
else:
   if pogoj_3 then:
       call procedura_2;
   end if;
end if;
Matjaž Prtenjak
https://mnet.si

JohnnyM ::

@prtenjam je zapisal optimalno resitev

toro69 ::

COND ?

TheBlueOne ::

Morda je en if prevec

if pogoj_1 or pogoj_2 then:
call procedura_1;
call procedura_2;
else if pogoj_3 then:
call procedura_2;
end if;

shm ::

if pogoj_1 or pogoj_2 then:
    call procedura_1;

    if pogoj_3 then:
        call procedura_2;
    end if;
end if;

Wrop ::

Mimaš kaj za poenostavit. Imaš popolno konjuktivno normalno obliko.

shm je izjavil:

if pogoj_1 or pogoj_2 then:
call procedura_1;

if pogoj_3 then:
call procedura_2;
end if;
end if;


Če je p3 resničen in p1 in p2 neresnična, bo pa kaj?

Zgodovina sprememb…

  • spremenil: Wrop ()

kajtimara ::

Mislim, da je že vprašanje narobe zastavljeno.
kaj če je izpolnjen prvi pogoj? se izvrši proc 1 ali 2 ? (najprej proc 1 in potem še proc 2)

Zgodovina sprememb…

DamijanD ::

obe

joze67 ::

Prvotno obliko boš razumel tudi čez mesec ali leto. Pri drugih se boš vedno ukvarjal z vprašanjem, kaj je hotel pesnik povedat in ali je to to.

mRhcPf ::

op, kot imaš, je v redu.

HotBurek ::

Ok. Sem nakoncu postuil tako (sicer v malo drugačni obliki).

Če bi med vsemi tremi pogoji bil AND, bi se dalo gnezdit.

Za ta primer, kjer so vsi OR, pa nisem bil siguren.

Hvala za vse primere.
root@debian:/# iptraf-ng
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window

kajtimara ::

DamijanD je izjavil:

obe

Ja saj to želim povedat. Vedno! se ti izpone druga procedura. Vedno!
S to sintakso NE ločuješ pogojev!

Zgodovina sprememb…

HotBurek ::

Takole nekak imam sedaj:

if pogoj_1 or pogoj_2 or pogoj_3 then:

    call procedura_2;

    if pogoj_1 or pogoj_2:

        call procedura_1;

    end if;

end if;
root@debian:/# iptraf-ng
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window

JohnnyM ::

Tole v resnici ni enako prvemu delcku kode, vrstni red izvajanja procedur si obrnil. Ce to ni pomembno, potem je ok. Sicer pa je optimalna resitev se vedno v drugem odgovoru.

HotBurek ::

Ja, res je.

Popravek:

if pogoj_1 or pogoj_2 or pogoj_3 then:

    if pogoj_1 or pogoj_2:

        call procedura_1;

    end if;

    call procedura_2;

end if;
root@debian:/# iptraf-ng
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window

Zgodovina sprememb…

  • spremenilo: HotBurek ()

Jure14 ::

Pa uporabi kratkostični OR (||) namesto navadnega OR (|).
In pogoje razvrsti tako, da bo najprej "najpogostejši" pogoj. Da se naprej sploh ne izračunava izraz.

Utk ::

Odvisno od kompliciranosti pogoja 1 in 2, se morda ga bolj splača izračunat enkrat in rezultat shranit. Če že delamo doktorat iz tega.

HotBurek ::

Evo, konkretno imam primerjave takole:

if product_searchname_status == "diff" or product_autocomplete_made != "true" or product_price_changed == "true":

    if product_searchname_status == "diff" or product_autocomplete_made != "true":

        # do something

    # and do this as well

Uporabljam string, ja ok, lahko (moral) bi True ali False.
root@debian:/# iptraf-ng
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window

Zgodovina sprememb…

  • spremenilo: HotBurek ()

HotBurek ::

Ker zgoraj ne morem popravit, dodaja dodatek, ki predstavlja celoto.

if product_searchname_status == "diff" or product_autocomplete_made != "true" or product_price_changed == "true":

    if product_searchname_status == "diff" or product_autocomplete_made != "true":

        # do something

    # and do this as well

    if product_autocomplete_made != "true":

        # and do this too
root@debian:/# iptraf-ng
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window

Zgodovina sprememb…

  • spremenilo: HotBurek ()

netopypy ::

če je možno, seveda shrani rezultate primerjav (nizov) v spremenljivko tipa boolean in uporabljaj tisto spremenjljivko naprej - je bolj učinkovito in manj možnosti za napake. sicer pa imaš, kakor hočeš, jaz pa si nalijem nov kelih, en sprufan in ugoden mojster je obljubil, da pride naslednji teden urejat.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

vba array

Oddelek: Programiranje
12944 (637) Vazelin
»

MySQL poizvedba iz dveh tabel

Oddelek: Programiranje
101582 (875) MrStein
»

Calc/excel delo s tabelo

Oddelek: Programiranje
131478 (1245) salabajs
»

pomoč pri poizvedbi MYSQL ..

Oddelek: Izdelava spletišč
121723 (1410) Volk|
»

[VB05] Pomoč za Do...Loop - začetnik

Oddelek: Programiranje
61177 (1087) gregor_83

Več podobnih tem