Prvi programi
O obliku teksta programa
U 9. predavanju (MPZI_predavanje_09) opisali smo načine definiranja i primjene programskih funkcija:
„Programska se funkcija definira na sljedeći način:
def naziv (parametri) :
tijelo funkcije
Definicija funkcije započinje ključnom riječju def iza koje slijedi naziv funkcije. Dobro odabrani naziv trebao bi biti ključem značenja i svrhe funkcije. Nakon naziva se između okruglih zagrada navode parametri funkcije. Parametri su varijable koje pri upotrebi funkcije prihvaćaju vrijednosti koje se prenose u funkciju—koje ulaze u nju. (Par zagrada treba napisati i ako funkcija nema parametara.) Prvi redak definicije funkcije završava dvotočkom.
Tijelo funkcije niz je naredaba koje propisuju kako funkcija radi ono čemu je namijenjena.
Vrijednost koju funkcija izračunava i ‚vraća’ naredbom return je vrijednost funkcije.
Upotreba funkcije naziva se pozivom funkcije:
naziv (argumenti)
Nakon naziva se između okruglih zagrada navode funkcijski argumenti—vrijednosti koje se prenose u funkciju.”
Treba dodati da su naredbe tijela funkcije uvučene 4 slovna znaka (pomoću 4 razmaka, to jest, prazna znaka, „ ”). Kada napišete prvi redak koji završava dvotočkom (nazvan i zaglavljem funkcije) i pritisnete tipku Enter , sučelje SageMath-a će samo formirati uvlaku, pa o uvlačenju retka trebate voditi računa samo ako obrišete redak naredbe i ponovo ga pišete. Potpunije rečeno (s pogledom u budućnost), kad god otipkate dvotočku pa Enter (na sljedećim ćemo vježbama pokazati da to neće biti samo u prvom retku definicije funkcije), sučelje SageMath-a će sljedeći redak uvući za daljnja 4 znaka; ako zadnji otipkani znak prije Enter nije dvotočka, sučelje sljedeći redak uvlači onoliko koliko je uvučen tekući redak.
1. zadatak
Napišite programsku funkciju nazvanu pol3, kojoj je parametar broj x, a koja izračunava i vraća vrijednost izraza x3+2x+1, te njome izračunajte vrijednost izraza za brojeve 0, 1 i −1.
|
1 1 |
4 4 |
-2 -2 |
2. zadatak
Napišite programsku funkciju s nazivom potencije, koja ima dva parametra x i y, a izračunava i vraća vrijednost izraza xy+yx. Funkciju pozovite s vrijednostima parametara x=1 i y=2.
|
3 3 |
1. zadatak za zadaću
Napišite programsku funkciju hipotenuza(), čiji su parametri a i b katete pravokutnoga trokuta, a koja vraća duljinu hipotenuze. Funkciju upotrijebite za podatke
Ako su duljine kateta a i b, duljina je hipotenuze c=√a2+b2.
|
3. zadatak
„Teorija”:
Tekstualna konstanta (niz znakova, engl. string) zadaje se tako da se bilo koji tekst ograniči jednostrukim ili dvostrukim navodnicima. Primjerice, izrazi "Danas je lijep dan" ili 'Padao je snijeg' dvije su tekstualne konstante. Dvije se tekstualne konstante mogu spojiti u treću primjenom operatora zbrajanja +. Na primjer, izraz
"Danas je lijep dan" + 'Padao je snijeg'
daje tekst "Danas je lijep danPadao je snijeg".
Zadatak:
Napišite programsku funkciju pozdrav() koja kao parametar ima tekst koji sadrži ime i prezime, a vraća pozdravnu poruku sastavljenu od teksta "Pozdravljam Te, " kojemu je dodano ime i prezime te uzvičnik na kraju.
|
'Pozdravljam Te, Kamilo Emeri\xc4\x8dki!' 'Pozdravljam Te, Kamilo Emeri\xc4\x8dki!' |
Ako ime ili prezime sadrže naša slova s kvačicama (dijakritičke znakove), primijetit ćete da SageMath ime malih problema s ispisom rezultata. To je greška SageMath-a i jezika Python.
Promijenite naredbu return u print i ponovo pozovite funkciju.
|
Pozdravljam te, Kamilo Emerički! Pozdravljam te, Kamilo Emerički! |
Vrijednost funkcije je ono što funkcija vraća naredbom return. Ta se vrijednost može pridružiti varijabli i upotrijebiti u daljnjem radu u radnom listu. Prethodni primjer s naredbom print nema naredbe return, pa funkcija ne vraća nikakvu vrijednost. U pravilu, programske funkcije trebaju vraćati vrijednosti, pa stoga pokušajte uvijek upotrebiti naredbu return.
Problem ispisa vrijednosti funkcije pozdrav() može se riješiti i na sljedeći način:
Pozdravljam te, Kamilo Emerički! Pozdravljam te, Kamilo Emerički! |
... ili, jednostavno,
Pozdravljam te, Kamilo Emerički! Pozdravljam te, Kamilo Emerički! |
2. zadatak za zadaću
Napišite programsku funkciju omiljeni() kojoj ćete kao argument predati naziv Vašega omiljenog kolegija na Fakultetu, a funkcija će ispisati tekst "Omiljeni kolegij mi je " dopunjen nazivom izabranog predmeta, naravno, s točkom na kraju.
|
4. zadatak
„Teorija”:
Prisjetite se da se kvadratna jednadžba u SageMath-u može riješiti funkcijom solve(). Primjerice, želimo li riješiti jednadžbu x2−5x+6=0, napisat ćemo
solve (x^2 - 5*x + 6 == 0, x)
i kao rezultat dobiti
[x == 3, x == 2]
Ako taj rezultat pridružimo varijabli rez, numerička se vrijednost prvog rješenja može dobiti izrazom
rez[0].right()
Zadatak:
Napišite programsku funkciju kvadratna() kojoj je parametar kvadratna jednadžba ax2+bx+c=0. Funkcija treba, pomoću funkcije solve(), riješiti tu jednadžbu i vratiti numeričke vrijednosti rješenja x1 i x2 (dakle, ne želimo da funkcija vrati listu [x == x1, x == x2]).
Napisanom funkcijom riješite jednadžbe x2−5x+6=0 i x2+x+1=0 pa rezultate ispišite pomoću funkcije show().
|
(3,2)
|
(−12i√3−12,12i√3−12)
|
3. zadatak za zadaću
„Teorija”:
Kao što bi trebalo biti poznato, formula za rješenja kvadratne jednadžbe ax2+bx+c=0 je
x1,2=−b±√D2a gdje je D=b2−4ac.
Zadatak:
Napišite programsku funkciju kvadratna2() parametri koje su koeficijenti a, b i c kvadratne jedandžbe ax2+bx+c=0. Funkcija treba, primjenom navedene formule, riješiti jednadžbu i vratiti vrijednosti rješenja x1 i x2.
Napisanom funkcijom riješite jednadžbe iz prethodnoga zadatka.
|
Rješenje 1. zadatka za zadaću
Napišite programsku funkciju hipotenuza(), čiji su parametri a i b katete pravokutnoga trokuta, a koja vraća duljinu hipotenuze. Funkciju upotrijebite za podatke
Ako su duljine kateta a i b, duljina je hipotenuze c=√a2+b2.
|
5 5 |
25 25 |
Rješenje 2. zadatka za zadaću
Napišite programsku funkciju omiljeni() kojoj ćete kao argument predati naziv Vašega omiljenog kolegija na Fakultetu, a funkcija će ispisati tekst "Omiljeni kolegij mi je " dopunjen nazivom izabranog predmeta, naravno, s točkom na kraju.
|
Omiljeni kolegij mi je 'Matematički programi za inženjere'. Omiljeni kolegij mi je 'Matematički programi za inženjere'. |
Omiljeni kolegij mi je "Matematički programi za inženjere". Omiljeni kolegij mi je "Matematički programi za inženjere". |
... obratite pozornost na jednostruke navodnike unutar dvostrukih, odnosno na dvostruke unutar jednostrukih i na to kako se to odražava u ispisanoj rečenici. Smiju li se jednostruki navodnici staviti unutar jednostrukih ili dvostruki unutar dvostrukih?
Rješenje 3. zadatka za zadaću
Napišite programsku funkciju kvadratna2() parametri koje su koeficijenti a, b i c kvadratne jedandžbe ax2+bx+c=0. Funkcija treba riješiti jednadžbu i vratiti vrijednosti rješenja x1 i x2.
Napisanom funkcijom riješite jednadžbe iz 4. zadatka.
|
(2,3)
|
(−12√−3−12,12√−3−12)
|
−12i√3−12
|
12i√3−12
|
Dodatak: varijacija na temu
Napisat ćemo još i programsku funkciju parametar koje je kvadratna jednadžba, a koja će jednadžbu riješiti primjenom navedenih izraza.
„Teorija”:
Kako bismo te izraze mogli primijeniti, moramo iz kvadratne jednadžbe „izvući” koeficijente a, b i c. Prvo ćemo SageMath-ovom funkcijom lhs() odvojiti polinomni izraz koji je s lijeve strane znaka jednakosti, a zatim SageMath-ovom funkcijom .coefficient() izdvojiti tražene koeficijente. Oblik poziva funkcije je
polinomni_izraz.coefficient (varijabla, eksponent)
pa ćemo, primjerice, ako je lijeva strana jednadžbe pohranjena u varijablu lskj, koeficijent a uz x2 izdvojiti pozivom lskj.coefficient (x, 2).
|
(2, 3) (2, 3) |
(-1, 1) (-1, 1) |
(−i,i)
|
|