Osnovna Škola "Učitelj Tasa", Niš

Преузимања
Up

Razgranati algoritmi

Razgranati algoritmi

Razgranata algoritamska struktura je ona kod koje se svaki korak izvršava jednom ili nijednom. Stvar je u tome da, kada zadatak zahteva da se neke vrednosti unesu u promenljive, jednostavno, ne možemo da znamo koje će to vrednosti biti. U linijskim algoritmima smo pokazali različite načine kako da dođemo do rezultata na osnovu unetih vrednosti, ali u mnogo većem broju slučajeva problem ne možemo rešiti jednostavnim nizom koraka.

Prosto, potreban nam je neki korak pomoću koga možemo da postavimo pitanje "šta ako", ili možda tačnije "da li je". Ovakav korak predstavlja "račvanje" izvršavanja programa. U našem algoritmu pripremamo dve odvojene grane, i zavisno od provere na "raskrsnici" izvršiće se koraci u jednoj ili u drugoj. Zbog toga kažemo da se neki koraci izvrše jednom, a neki nijednom.

Kako program odlučuje?

Korak koji služi za "račvanje", u sebi sadrži izraz logičkog tipa. To znači da se u ovom koraku zadaje neki uslov. Njegova vrednost može biti "tačno" (true) ili "netačno" (false). Najjednostavnija vrsta ovakvog izraza su relacioni izrazi, odnosno upoređivanja.

X > 5

10 <= Y

A == "Pera"

Inače svejedno da li pišemo:

X > 5

5 < X

Odgovor na ovakvu "pitalicu" je uvek "da" ili "ne", i na osnovu toga se izvršava jedna od dve grane algoritma. Uslovi mogu biti i kompleksni - tj. možemo ih sastaviti povezivanjem dva ili više prostih uslova. Ovo povezivanje se vrši logičkim operatorima. Dva najkorišćenija su AND i OR.

Operator AND predstavlja logičku konjukciju i u jezicima poput C-a, JavaScripta, pa i u našim algoritmima, označava se simbolom && ili sa and. Služi za povezivanje neka dva uslova i kao rezultat će vratiti vrednost true samo ako su oba uslova zadovoljena.

Operator OR predstavlja logičku disjunkciju i označava se simbolom || ili or. Takođe povezuje dva uslova i kao rezultat će vratiti vrednost true u slučaju ako je makar jedan uslov zadovoljen.

Osim ova dva, koristi se i operator NOT koji predstavlja logičku negaciju i označava se kao ! (znak uzvika) ili sa not. On ne povezuje dva, već se stavlja ispred jednog uslova i vraća vrednost true u slučaju ako uslov nije zadovoljen.

Kompleksni uslovi

Evo primera gde početnici često greše. Potrebno je sastaviti uslov kojim se proverava da li je vrednost promenljive X u intervalu od 0 do 9. Matematički je sasvim opravdano napisati:

0 <= X <= 9

Međutim, u programiranju je ovo pogrešno! Računar bi prvo ispitao da li je 0 manje od X, a onda dobijenu vrednost (true ili false) uporedio sa 9. U nekim programskim jezicima bi ovo bilo prijavljeno kao greška, a u nekim bi računar nastavio da radi, ali bismo dobili pogrešan rezultat (true bi prepoznao kao 1, a false kao 0 pa bi to uvek bilo manje od 10). U programiranju bismo morali da napišemo npr. ovakav uslov:

 (X >= 0) && (X <= 9)

Dakle, proveravamo da li važi da je X veće ili jednako 0 i istovremeno X manje ili jednako 10. Ova dva uslova povezujemo operatorom AND. Hajdemo korak dalje. Recimo da treba ispitati da li je X van ovog intervala. Pazite, kreiranje "obrnutog" uslova nije trivijalan zadatak. Rešenje bi bilo:

 (X < 0) || (X > 9)

Znači pitamo da li važi da je X manje od 0 ili možda da je X veće od 9. Kao što vidimo, ne možemo baš samo da "obrnemo znakove". Primećujemo da za povezivanje uslova koristimo operator OR, koji vraća vrednost "tačno" ako je zadovoljen bilo prvi, bilo drugi uslov. Ako je problem samo "obrtanje" postojećeg uslova, mnogo je lakše da koristimo operator NOT:

!((X >= 0) && (X <= 9))

Inače, u razgranatim strukturama mogu učestvovati svi koraci koje smo do sada naučili ( ulaz, izlaz i obrada podataka), kao i strukture koje ćemo tek učiti. Pošto se u "pitalici" navodi logički izraz, obavezno obnovite izraze.

Tek sa razgranatim algoritmima zaista počinjemo da ulazimo u programiranje!

Primer: Provera broja 

 

Zadatak 25.
Za uneti broj X, proveriti i ispisati da li je paran ili neparan.
zadatak_25.fprg (1.32 kB)
Zadatak 26.
Unose se tri broja A, B i C. Izračunati zbir onih koji su veći od nule.
zadatak_26.fprg (1.80 kB)
Zadatak 27.
Za unete brojeve A i B, izračunati vrednost X = min2(A,B) / max(A,B). Minimum je manji, a maksimum je veći od brojeva koji su zadati.
zadatak_27.fprg (1.39 kB)
Zadatak 28.
Unose se tri broja A, B i C. Otkriti i ispisati najmanji broj.
zadatak_28.fprg (1.58 kB)
Zadatak 29.
Za unete 4 ocene proveriti da li je za učenika bolji prosek koji se računa po aritmetičkojgeometrijskoj ili harmonijskoj sredini. Aritmetička sredina se dobija kao količnik zbira N vrednosti i njihovog broja N. Geometrijska kao N-ti koren proizvoda N vrednosti (postoji razlog zašto imamo baš 4 ocene). Harmonijsku sredinu računamo kao količnik broja vrednosti N i zbira N recipročnih zadatih vrednosti.
zadatak_29.fprg (2.32 kB)
Zadatak 30.
Nevaljali učenici su iščupali tastere "<" i ">" sa tastature. Potrebno je uporediti dva uneta cela pozitivna brojaA i B (dakle da se napiše koji je veći, odnosno manji), bez upotrebe relacija "<", ">", "<=" i ">=".
zadatak_30.fprg (1.79 kB)
Zadatak 31.
Dva polja na šahovskoj tabli se zadaju numeričkim vrednostima za red i kolonu, r1,k1 i r2,k2. Svaki od unetih brojeva je u rangu od 1 do 8. Proveriti da li su tako zadata polja iste boje.
zadatak_31.fprg (1.56 kB)
Zadatak 32.
Unosi se koliko je sati S i minuta M. Ako do lansiranja rakete treba da dođe za S1 sati i M1 minuta (u roku manjem od 24 časa), izračunati u koliko sati će biti lansirana raketa.
Zadatak 33.
Ako se unese koliko je sati S i minuta M, računar treba da nam kaže koliko je sati, ali na "prirodni" način (npr. "9 i 15", "Pola sata do 10", "18 do 21", "Ponoć i 15", "10 do ponoći"...).
zadatak_33.fprg (3.25 kB)
Zadatak 34.
Za uneta tri broja AB, i C otkriti i ispisati broj koji se nalazi između druga dva.
zadatak_34.fprg (1.73 kB)
Zadatak 35.
Ako se učenik loše ponaša na časovima (ponašanje se unosi kao broj od 1 do 10, sve iznad 5 je dobro ponašanje), i ne zna gradivo (ocena na kontrolnom je manja od 4), profesor će ga izvesti pred tablu i oceniti ga. Ako se učenik loše ponaša i zna gradivo, biće isteran sa časa. Ako se učenik dobro ponaša, profesor će ga pohvaliti. Unosi se ponašanje, a ako je potrebno i ocena sa kontrolnog. Treba ispisati poruku "ISPITATI", "IZBACITI" ili "POHVALITI".
zadatak_35.fprg (1.91 kB)
Zadatak 36.
Deda Baja je obecao Raji, Gaji i Vlaji dolare ako dobro urade kontrolni iz informatike. Kazao im je: "Ako zbir vaših ocena bude veći od 11, dobićete ukupno onoliko dolara koliko iznosi proizvod vaših ocena - u suprotnom, dobićete upola manje od toga". Sestrići su se dogovorili da ako celi deo broja dolara bude deljiv sa 3, podele novac jednako, a ako ne bude, da ga podele proporcionalno ocenama. Za unete ocene sestrića odrediti koliko para treba da dobije svaki od njih.
zadatak_36.fprg (2.40 kB)

Kompleksni uslovi

 
Ovi zadaci zahtevaju definisanje kompleksnih uslova, tj. efikasnije se rešavaju tako što više prostih uslova povezujemo logičkim operatorima AND (&&) i OR (||).
 
Zadatak 37.
Unosi se jedno slovo sa tastature. Proveriti da li je u pitanju veliko ili malo slovo. 
zadatak_37.fprg (1.61 kB)
Zadatak 38.
Za unete dužine A, B i C, proveriti da li to mogu biti stranice trougla. Za trougao važi da je zbir dužina svake dve strane duži od treće.
zadatak_38.fprg (1.60 kB)
Zadatak 39.
Za unetu godinu proveriti da li je prestupna. Godina je prestupna ako je deljiva sa 4 i nije godina veka (znači ako nije deljiva sa 100 - 1900. nije bila prestupna). Od toga odstupa svaka četvrta godina veka (znači ako je deljiva sa 400, onda je ipak prestupna - npr. 2000. je prestupna).
zadatak_39.fprg (1.35 kB)
Zadatak 40.
Za unete dužine stranica nekog trougla A, B, i C proveriti da li je trougao jednakostraničan, jednakokrak ili raznostraničan.
Zadatak 41.
Uslovi za zaposlenje u preduzeću "Mlade snage" su da kandidat bude stariji od 60 godina ili da ima radno iskustvo od bar 20 godinaU suprotnom će biti zaposlen samo ako ima prosečnu ocenu sa fakulteta veću od 8.5. Na početku se unose starost i iskustvo, a tek ako zatreba, prosečna ocena. Računar treba da napiše poruku "ZAPOSLITI" ili "ODBITI".
zadatak_41.fprg (2.05 kB)
Zadatak 42.
Na pijaci se treba odlučiti za određeni proizvod. Ako je cena 500g mesa veća od cene 20 komada jaja, a sir jeftiniji od 30 dinara, uzećemo 15 jaja i 800g sira. Inače, uzećemo samo 400g mesa. Unose se cene mesa i sira po kilogramu i jaja po komadu, a računar treba da napiše koliko ćemo ukupno platiti.
zadatak_42.fprg (1.64 kB)
Zadatak 43.
Kompjuter u svemirskom brodu treba da odluči da li da otme određeno ljudsko biće. Ako je u pitanju žensko - onda mora da bude viša od 160cm i starija od 20 godina. Ako je u pitanju muškarac, on mora da bude mlađi od 40 godina i da je težak najviše 80kg. Napraviti program koji na početku pita da kog je pola ljudsko biće (unosi se 'M' za muško i 'Z' za žensko), onda postavlja odgovarajuća pitanja i na kraju ispisuje rezultat - da li osobu treba oteti ili ne.
zadatak_43.fprg (2.87 kB)
Zadatak 44.
Vozač automobila treba da se odluči za levi ili desni put. Odlučiće se za onaj na kome se nalazi više restorana, bez obzira na njegovu dužinu, osim u slučaju da nema dovoljno goriva, kada se odlučuje za put za koji ima goriva ili se odlučuje da sačeka pomoć ako nema goriva ni za jedan od dva puta. Unosi se broj restorana na svakom putu, dužine puteva u kilometrima i koliko kilometara može vozač da prevali sa postojećim gorivom. Računar izdaje poruku "LEVO", "DESNO" ili "OSTANI".
zadatak_44.fprg (2.83 kB)
Display Num 
Powered by Phoca Download