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 $x^3 + 2x + 1$, te njome izračunajte vrijednost izraza za brojeve $0$, $1$ i $-1$.
|
|
|
|
2. zadatak
Napišite programsku funkciju s nazivom potencije, koja ima dva parametra $x$ i $y$, a izračunava i vraća vrijednost izraza $x^y + y^x$. Funkciju pozovite s vrijednostima parametara $x=1$ i $y = 2$.
|
|
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 = \sqrt{a^2 + b^2}$.
|
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" i '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.
|
|
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.
|
|
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:
|
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 $x^2 -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 $a\,x^2 + b\,x + c = 0$. Funkcija treba, pomoću funkcije solve(), riješiti tu jednadžbu i vratiti numeričke vrijednosti rješenja $x_1$ i $x_2$ (dakle, ne želimo da funkcija vrati listu [x == x1, x == x2]).
Napisanom funkcijom riješite jednadžbe $x^2 -5x + 6 = 0$ i $x^2 + x + 1 = 0$ pa rezultate ispišite pomoću funkcije show().
|
|
|
Napomena: funkcija dobro radi i ako joj se kao argument preda samo lijeva strana jednadžbe. Provjerite.
|
3. zadatak za zadaću
„Teorija”:
Kao što bi trebalo biti poznato, formula za rješenja kvadratne jednadžbe $a\,x^2 + b\,x + c = 0$ je
$x_{1,2} = \dfrac{-b \pm \sqrt{D}}{2\,a}$ gdje je $D = b^2 - 4\:a\,c$.
Zadatak:
Napišite programsku funkciju kvadratna2() parametri koje su koeficijenti $a$, $b$ i $c$ kvadratne jedandžbe $a\,x^2 + b\,x + c = 0$. Funkcija treba, primjenom navedene formule, riješiti jednadžbu i vratiti vrijednosti rješenja $x_1$ i $x_2$.
Napisanom funkcijom riješite jednadžbe iz prethodnoga zadatka.
|