Razgranati algoritmi - Zadaci
Ovo su zadaci za vežbanje razgranatih struktura. Kod razgranate strukture, neki koraci će biti izvršeni, a neki ne zavisno od toga da li je neki uslov zadovoljen. Razlikujemo prosto "jednostruko" grananje kod koga se od uslova odvajaju samo dve moguće grane algoritma, i višestruko grananje kod koga u jednom koraku imamo više grana. Naravno, čak i sa prostim grananjima, tj. njihovom kombinacijom možemo dobiti prilično kompleksne algoritme. Zašto su nam ovi zadaci važni?
- konačno započinjemo pravo programiranje, pošto moramo da predvidimo više alternativa zavisno od "situacije" tokom izvršavanja programa
- upoznajemo prosta i višestruka grananja, kao i gde da ih primenimo
- upoznajemo relacione operatore (upoređivanja), a zatim i logičke operatore za formiranje kompleksnih uslova
- rešavamo malo kompleksnije zadatke vezane za matematiku i geometriju, ali i obradu podataka i Bulovu algebru
- vežbamo praktične primene u računarskoj grafici (osnove detekcije kolizije) kao i malo analitičke geometrije
Osim najrudimentarnijih "računskih" algoritama, praktično ništa ozbiljnije ne možemo postići bez mogućnosti da usmerimo izvršavanje programa u određenom pravcu zavisno od nekog uslova. Ovaj koncept je toliko važan, da je u nekom obliku našao mesto i kao IF() funkcija u Excelu ili MySQL-u.
Osnovni zadaci
U ovim zadacima se susrećemo sa osnovnim problemima ispitivanja vrednosti, pronalaženja minimuma i maksimuma, kao i uklapanjem više grananja da bi se dobilo rešenje. Bez obzira što smo ih nazvali "osnovnim", neki će zahtevati i da malo razmislite.
Zadaci za vežbu
Zadatak 1
Za uneti celi broj X, proveriti i ispisati da li je paran ili neparan.
Zadatak 2
Unose se tri broja A, B i C. Izračunati zbir onih koji su veći od nule.
Zadatak 3
Za unete brojeve A i B, izračunati vrednost X = min(A,B)*2 / (max2(A,B)+1). Minimum je manji, a maksimum je veći od brojeva koji su zadati.
Zadatak 4
Unose se tri broja A, B i C. Otkriti i ispisati najmanji broj.
Zadatak 5
Za unete 4 ocene proveriti da li je za učenika bolji prosek koji se računa po aritmetičkoj, geometrijskoj 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 6
Nevaljali učenici su iščupali tastere "<" i ">" sa tastature. Potrebno je uporediti dva uneta cela pozitivna broja, A i B (dakle da se napiše koji je veći, odnosno manji), bez upotrebe relacija "<", ">", "<=" i ">=".
Zadatak 7
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 8
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 9
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"...). Pravila su sledeća:
- ako je broj minuta manji od 30, ispis je u formi "sati i minuta"
- ako je broj minuta veći od 30, ispis je u formi "minuta do sati"
- ako je broj minuta jednak 30, ispis je u formi "pola sata do sati"
- ako je sat koji se ispisuje 0 ili 24, umesto broja, ispisuje se reč "ponoć"
Zadatak 10
Za uneta tri različita pozitivna broja A, B, i C otkriti i ispisati vrednost koja se nalazi između druge dve.
Zadatak 11
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 12
Deda Baja je obećao 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.
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 (||).
Zadaci za vežbu
Zadatak 1
Unosi se neki znak ili tekst sa tastature. Proveriti da li je prvi znak unetog teksta veliko slovo, malo slovo ili uopšte nije slovo.
Proveru vršiti prema ASCII kodu - znači "naša" slova po UNICODE standardu se u ovom zadatku ne računaju u slova.
Zadatak 2
Za tri unete pozitivne 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 3
Za unetu godinu (kao ceo pozitivan broj) 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 4
Za unete dužine stranica nekog trougla A, B, i C proveriti da li je trougao jednakostraničan, jednakokrak ili raznostraničan.
Zadatak 5
Za uneta tri različita pozitivna broja A, B, i C otkriti i ispisati vrednost koja se nalazi između druge dve.
Rešite zadatak proveravanjem da li je svaka od vrednosti između druge dve, koristeći kompleksne uslove.
Zadatak 6
Uslovi za zaposlenje u preduzeću "Mlade snage" su da kandidat bude stariji od 60 godina ili da ima
radno iskustvo od bar 20 godina. U 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 7
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 8
Kompjuter u vanzemaljskom 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 9
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".
Višestruko grananje
Zadaci u ovom odeljku se najlakše rešavaju upotrebom višestrukog grananja. Višestruko grananje je algoritamska struktura koja može "račvati" izvršavanje programa na više od dve grane, ispitivanjem da li je vrednost zadatog izraza jednaka nekoj od (višestrukih) ponuđenih vrednosti.
Zadaci za vežbu
Zadatak 1
Za unetu numeričku ocenu učenika (celi broj od 1 do 5), ispisati njeno značenje (5 - "Odličan", 4 - "Vrlo dobar",
3 - "Dobar", 2 - "Dovoljan" i 1 - "Nedovoljan").
Zadatak 2
Unosi se redni broj dana u nedelji (celi broj od 1 do 7). Proveriti da li je u pitanju radni dan ili vikend.
Zadatak 3
Dat je razgranati algoritam:
Kreirati ekvivalentni algoritam sa višestrukim grananjem.
Zadatak 4
Unosi se neko malo slovo sa tastature. Proveriti da li je u pitanju samoglasnik ili suglasnik.
Zadatak 5
Unosi se mesec, kao broj u rangu od 1 do 12. Ispisati njegov broj dana. Ako se unese
vrednost 2 (februar), pitati korisnika da li je godina prestupna, na šta se očekuje odgovor "da" ako jeste.
Zadatak 6
Unosi se znak računske operacije koji može biti +, -, * ili /. Zatim se unose dva broja, a i b.
Izračunati i ispisati rezultat zadate operacije nad unetim brojevima.
Zadatak 7
Učenici ocenjuju svog nastavnika brojem od 1 do 10. Ocene od 1 do 3 znače da je nastavnik "Jako loš",
ocene od 4 do 5 da je "prosečan", od 6 do 9 da je "Odličan", a ocena 10 da je "Izuzetan".
Direktor je odlučio da plata nastavnika zavisi od date ocene i to - ako je nastavnik izuzetan, povećaće mu platu
za 15%, ako je jako loš, smanjiće mu platu za 15%. U svim ostalim slučajevima, nastavniku će se povećati plata
za procenat koji odgovara oceni (npr. za ocenu 5, plata se povećava za 5%).
Za unetu ocenu i osnovnu platu, spisati kakav je nastavnik i platu koju će dobiti.
U slučaju da je ocena neispravna, ispisati poruku o tome.
Grafika
I ovde vam dajemo nekoliko zadataka sa crtanjem u grafičkom okviru, s tim što će se tražiti da se upotrebe i grananja, kako bi se došlo do rezultata. Neki od ovih zadataka predstavljaju samu osnovu algoritama koji se koriste za kompleksna iscrtavanja u više slojeva i nečega što ćemo kasnije upoznati pod nazivom "detekcija kolizije" koja se koristi u računarskim igrama.
Zadaci za vežbu
Zadatak 1
U grafičkom okviru se iscrtavaju dva kruga na slučajno izabranim pozicijama, ali tako da se oba kruga u potpunosti vide.
Prvi krug je poluprečnika 150px, a drugi 50px. Oba se popunjavaju plavom bojom, osim u slučaju da mali
krug dodiruje (preklapa) veliki krug i tada se mali boji crvenom bojom.
Zadatak 2
Proveriti da li se tačka sa zadatim koordinatama x i y nalazi unutar pravougaonika koji se nalazi u
centru grafičkog okvira. Širina i visina pravougaonika su slučajni brojevi tako podešeni da pravougaonik
ne izlazi van ekrana. Ako je tačka unutar pravougaonika, obojiti pravougaonik crvenom bojom.
Nacrtati krstić veličine 20 piksela koji označava tačku.
Zadatak 3
Crtaju se tri kružnice poluprečnika 50 piksela, na slučajno izabranim pozicijama. Treba pronaći između
koje dve kružnice je najmanje rastojanje i spojiti njihove centre linijom.
Zadatak 4
U centru grafičkog okvira se iscrtavaju tri kvadrata čije se dužine stranica unose u promenljive a, b i c
kao celi pozitivni brojevi.
Najveći kvadrat se boji crvenom, srednji narandžastom, a najmanji žutom bojom. Vodite računa o redosledu
iscrtavanja, da veći kvadrat ne bi "pokrio" manji.
- M. Čabarkapa, N. Spalević (1995): Metodička zbirka zadataka iz programiranja sa rešenjima u Pascal-u, Sova, Beograd