Pogojni stavek

Kako bi rešili nalogo, pri kateri stoji Pišek v isti vrstici kot zrno, ampak ne vemo, kako daleč?

P _ _ _ … _ Z

Če bi vedeli kako daleč se nahaja, bi lahko uporabili zanko, kakršno smo spoznali zadnjič. Ker pa se premikamo neznano daleč stran, moramo korakati desno dokler ne pridemo do zrna

dokler ni zrna:
    premakni se desno

V tej zanki smo uporabili pogoj. In izvajali kodo znotraj njega, dokler pogoj ni bil resničen.

Včasih pa se želimo na neki točki odločiti med dvema ali več možnimi izvedbami, pri čemer nam pomaga vejitev oziroma pogojni stavek.

Pogojni stavki so ukazi posebne vrste, ki jih uporabimo takrat, kadar želimo nek ukaz izvesti samo v primeru, ko je izpolnjen nek pogoj. Se spomnite kakega primera?

  • Če bo zvečer napovedan dež, bom doma igrala kitaro.
  • Če se bo med vožnjo oglasil mehur, se bomo ustavili na postajališču.

Pogojne stavke uporabimo tudi v primeru, ko je naš naslednji korak odvisen od nekega pogoja.

  • Če bo zvečer napovedan dež, bom doma igrala kitaro. Sicer grem pogledat Kino pod zvezdami.
  • Če želimo po avtocesti, moramo levo. Sicer moramo desno.

Pogoji so lahko preprosti (npr. zvečer napovedan dež, želimo po avtocesti) ali pa sestavljeni iz več delov:

  • Če bo zvečer napovedan dež ali bom preutrujena, bom šla kar spat.
  • Če bo Dimec pri metu in se Dončić ne bo prepiral s sodniki, imamo možnosti za zmago.

Preproste pogoje sestavljamo v bolj kompleksne s pomočjo raznih logičnih operatorjev.

Logični operatorji

Pogoj je lahko resničen ali neresničen. Resničnim pogojem v programiranju po navadi pripišemo vrednost true oz. 1, neresničnim pa false oz. 0. Ker je 0 in 1 precej lažje natipkati, bomo v teh zapiskih uporabljali ti vrednosti.

Spodaj spoznamo nekaj osnovnih logičnih operatorjev.

Negacija

Najpreprostejši logični operator je negacija, ki ga v matematiki označimo z \(\neg\), v programskih jezikih pa večinoma z not, ! ali ~. Resničnostna tabela za negacijo je

P not P
0 1
1 0

Torej: če P drži, potem not P ne drži in obratno.

In

Logični operator in (v matematiki označen z \(\land\), v programiranju pa večinoma z and oz. &&) sprejme pogoja P in Q ter vrne vrednost 0 oz. 1 v skladu s spodnjo resničnostno tabelo:

P Q P and Q
0 0 0
0 1 0
1 0 0
1 1 1

Pogoj P and Q torej velja le v primeru, ko veljata tako P kot Q.

Ali

Logični operator ali (v matematiki označen z \(\lor\), v programiranju pa večinoma z or oz. ||) ima naslednjo resničnostno tabelo:

P Q P or Q
0 0 0
0 1 1
1 0 1
1 1 1

Pogoj P or Q velja torej takrat, ko je izpolnjen vsaj eden od pogojev P in Q.

Preostali logični operatorji

Poleg operatorjev not, in ter ali ste v srednji šoli najbrž že spoznali implikacijo \(P \Rightarrow Q\) z resničnostno tabelo

P Q P => Q
0 0 1
0 1 1
1 0 0
1 1 1

ter ekvivalenco \(P\Leftrightarrow Q\) z resničnostno tabelo

P Q P <=> Q
0 0 1
0 1 0
1 0 0
1 1 1

Izkaže se, da programski jeziki teh dveh logičnih operatorjev (kot tudi bolj eksotičnih) ne poznajo in jih je treba izraziti z not, and ter or. Tako moramo namesto \(P\Rightarrow Q\) npr. pisati (not P) or Q.

Brez računalnika

Od formule do tabele

Najdi resničnostno tabelo za spodnje formule:

  • P and Q and R,
  • (P and Q) or ((not P) and (not Q)),
  • not (P and Q),
  • (not P) or (not Q).

Od tabele do formule

Najdi formulo, ki pripada resničnostni tabeli operatorja ?:

P Q P ? Q
0 0 1
0 1 0
1 0 1
1 1 1

Koliko jih je?

Koliko je dvomestnih logičnih operatorjev (ali ter in sta dva od njih)?

Vse muhe na en mah

S pomočjo logičnega operatorja # (njegovo resničnostno tabelo lahko vidite spodaj), izrazi operatorje not, and in or.

P Q P # Q
0 0 1
0 1 0
1 0 0
1 1 0

Kako bi operator # izrazil s pomočjo and, or, not?

Elektronska vezja

Naredi vezje z dvema stikaloma in lučjo, tako da velja:

  • Luč je prižgana, če sta vključeni obe stikali (koristno, ko želimo dodatno varnost).
  • Luč je prižgana, če je vključeno vsaj eno od stikal (koristno, ko prožimo alarme).
  • Stanje luči se spremeni ob vsakem pritisku na katerokoli stikalo (koristno, ko imamo dolg hodnik z vrati na začetku in na koncu ter stikalo ob vsakih vratih).

Kateremu logičnemu operatorju ustreza vsak od zgornjih primerov?

Collatz

Collatzovo zaporedje je zapordeje, ki ga dobimo na sledeč način. Začnemo z nekim številom \(n\), potem pa glede na parnost tega števila izbiramo med dvema operacijama:

  • če je število \(n\) sodo, ga delimo z 2,
  • če je število \(n\) liho, ga pomnožimo s 3 in prištejemo 1.

Zaporedje se konča, ko pridemo do števila 1, saj se v tem primeru začne ponavljati vzorec \(1 \rightarrow 4 \rightarrow 2 \rightarrow 1 \rightarrow \dots\).

Za domačo nalogo, lahko dokažete, da se Collatzovo zaporedje za vsak začetni člen zagotovo konča (torej, pride do 1). Če vam to uspe, dokaz prinesite pokazati enemu od avtorjev teh zapiskov.

Vaša naloga tukaj pa je, da simulirate računalnik, ki računa Collatzovo zaporedje. Za to potrebujemo 3 prostovoljce. En zna za vsako liho število \(n\) izračunati \(3n + 1\), drugi zna za vsako sodo število \(n\) izračunati \(n / 2\), tretji pa zna za vsako število \(n\) ugotoviti, ali je število sodo ali liho. Izračunajte zaporedje števila 52.

Ugani število

Poskusite uganiti število med 0 in 100, ki si jo je izmislil izvajalec. Poskusite ugotoviti v čim manj poskusih. Največ koliko poskusov potrebujete, da zagotovo lahko uganete število?

Najdi približno ničlo

Radi bi našli ničlo funkcije \(f\) s predpisom \(f(x) = x^5 + 3 x^2 + x + 1\). Žal enačbe \(x^5 + 3 x^2 + x + 1 = 0\) ne moremo rešiti po formuli, tako kot rešimo kvadratne enačbe, zato bomo našli samo približen rezultat. Opazimo, da je \(f(-2) = -21 < 0\) in \(f(-1) = 2 > 0\), torej se ničla skriva nekje na intervalu \((-2, -1)\). Zapiši algoritem, ki izračuna njen približek, ki se od prave ničle ne razlikuje za več kot \(0{,}1\).

Operatorji na Portalu Pišček

Srečali boste logične operatorje ne, in ter ali, poleg tega pa še operatorje ==, !=, <=, <, >= in >:

  • x == y vrne 1 natanko tedaj, ko sta x in y enaka (npr. 3 == 3),
  • x != y vrne 1 natanko tedaj, ko sta x in y različna (npr. 3 != 4),
  • x <= y vrne 1 natanko tedaj, ko je x manjši ali enak y (npr. 3 <= 3 in 3 <= 4) ,
  • x < y vrne 1 natanko tedaj, ko je x manjši od y (npr. 3 < 4, ampak 3 < 3 ne velja),
  • x >= y vrne 1 natanko tedaj, ko je x večji ali enak y (npr. 4 >= 3),
  • x > y vrne 1 natanko tedaj, ko je x večji od y (npr. 5 > 3).

Naloge na Portalu Pišek

Orientacijski pohod

Sprehajalec se sprehaja proti desni, če pa je polje označeno, mora narediti še korak navzgor.

Če ti je naloga zelo všeč, lahko rešiš še Lov na zastavo in Tropsko preizkušnjo.

Pišek raziskuje

Sprehodite Piška, tako da bo po poti pobiral semena (semen ni treba pobrati z ukazom, dovolj je, da obiščete polje). Če Pišek pride na označeno polje (na njem so narisane stopinje), se obrne desno.

Ker ne veste, koliko časa bo treba hoditi do označenega polja, boste v zanki namesto neke konkretne vrednosti (npr. 5 korakov) uporabili pogoj, do kdaj naj se zanka izvaja. Zanki

while dokler ni označeno

oz.

while medtem ko

imata isti učinek: pišček hodi naprej, dokler ne pride na označeno polje.

Dodaten namig: preštejte, koliko označenih polj je v obeh testnih primerih, tj. kolikokrat moramo izvesti eno od zgornjih zank. Ali smo pobrali vsa zrna, ko pridemo do zadnjega označenega polja?

Če ti je naloga zelo všeč, lahko rešiš še nalogi Razdejanje in Labirinti (ki je malo težja).

Pišek v šoli

Na prvi stopnji je treba pobrati zrno, nato pa hoditi proti desni, dokler nismo nad gnezdom, kamor bomo pospravili zrno. Ker ne vemo, koliko časa bo treba hoditi, bomo v zanki namesto neke konkretne vrednosti (npr. 5) uporabili pogoj (dokler nismo nad gnezdom).

Na drugi stopnji je semen in gnezd več, a so lepo urejena v dva stolpca, na tretji stopnji pa so bolj razmetana.

Zmajček barva

Pri tej nalogi moramo pobarvati označena polja, a se pri tem ne moremo zanašati na pogoj je označeno, kot pri nekaterih drugih nalogah. Namesto tega imamo dostop do trenutnega položaja: košček stolpec zmajčka in - na višjih stopnjah - vrstica zmajčka. S pomočjo teh kosov lahko tvorimo kompleksnejše pogoje, npr.

sestavljen pogoj

Na prvi stopnji so označena polja v stolpcih 7, 8, 9, 10 in 11, na drugi in tretji stopnji pa so zložena v trikotnik (ki ga malo manjka) in križ.

Opomba: Če koščka pobarvaj polje ni, lahko uporabite izkoplji kovanček.

Dodatno utrjevanje

Začetni ples v paru

Pojdi do plesalke, jo dvigni in odloži na rumenem polju.

Na drugi in tretji stopnji morate iti čez vsa rdeča polja (čeprav tega uradna navodila ne zahtevajo) in na njih naredite pirueto.

Poskusite nalogo rešiti s kar se da malo ukazi in uporabljajte zanke.

Če ti je bila naloga všeč, lahko doma rešiš še Nadaljevalni ples v paru ter Ples parov v ledeni dvorani.

Zakopani kovančki

Sprehodi zmajčka v desno in izkoplji kovanec, če je trenutno polje označeno.

Na drugi in tretji stopnji je treba prehoditi pravokotnik namesto ravne črte.

Sadovnjak

Namesto semen tokrat pobiramo sadeže, vendar se naloga malo zaplete, saj so sadeži in pripadajoča skrivališča različnih barv, zato je treba malo paziti.

Na prvi stopnji se sadeži in skrivališča nahajajo v isti vrstici, medtem ko so na drugi in tretji stopnji v različnih vrsticah.

Še več dodatnih nalog