2. vježbe

Primjer 2-1

Zadatak

Napišite program koji za argument ima listu od dva člana i vraća sortiranu listu — manji broje je ispred većeg.  Program prijavljuje grešku ako je duljinu liste različita od 2 — koristite funkciju Length za određivanje duljine liste.

Rješenje

sort1[x_List] :=Module[{},
If[Length[x]≠2, 
Print["Lista mora imati dva člana"];
Abort[];
];
If[ x[[1]]>x[[2]],  
Return[{x[[2]], x[[1]]}];
,
Return[{x[[1]], x[[2]]}];
];
];

Testiranje

sort1[{4, 3}]

sort1[{3, 4}]

sort1[5]

sort1[{4, 3, 2}]

Primjer 2-2, za samostalni rad

Zadatak

Napišite program koji za argument ima listu od dva člana i vraća sortiranu listu — manji broje je ispred većeg.  Program prijavljuje grešku ako je duljinu liste različita od 2 — koristite funkciju Length za određivanje duljine liste. U programu koristite postupak zamjene vrijednosti dviju varijabli.

Napomena: 
1. za zamjenu vrijednosti dviju varijabli treba koristiti pomoćnu varijalblu,
2. specifično za Mathematicu, argument programa NE smije biti na lijevoj strani jednakosti pa u rješenju zadatka treba uvesti dvije varijable a i b koje predstavljaju elemente liste x[[1]]  i x[[2]].

Rješenje

sort2[x_List] :=Module[{a, b, pom},  (* pom je pomoćna varijabla *)
If[Length[x]≠2, 
Print["Lista mora imati dva člana"];
Abort[];
];
a=x[[1]];
b=x[[2]];
If[ b<a,  (* nepravilan poredak, potrebna je zamjena *)
pom=a;   (* za zamjenu vrijednosti dvije var. treba korisiti treću*)
a= b;
b=pom;
];
Return[{a, b}];
];

Testiranje

sort2[{4, 3}]

sort2[{3, 4}]

sort2[5]

sort2[{4, 3, 2}]

Primjer 2-3

Napišite program koji će imati dva argumenta npr. x i y;  tip oba argumenta mora biti Real ili Integer.  Ako su oba pozitivna (tj. ako vrijedi x>0 i y>0) program vraća  ln(x) + ln(y), a u protivnom vraća  (e^x)+(e^y).

Rješenje

fxy[x_Real|x_Integer, y_Real|y_Integer] := Module[{rez},
If[
(x>0)&&( y>0 )
, 
rez = Log[x]+Log[y];
,
rez = Exp[x]+Exp[y];
];
Return[rez];
];

Testiranje

fxy[2,3]

fxy[2,3] // N

fxy[3, 7.8]

fxy[-1, 0]

fxy[-1., 0]

Primjer 2-4, za samostalni rad

Zadatak

Napišite program koji za argument ima listu od tri člana i vraća sortiranu listu — manji broj je ispred većeg. Program računa duljinu liste funkcijom Length. Napomena: za zamjenu vrijednosti treba koristiti pomoćnu varijablu.

Opis postupka

Obrazloženje algoritma (Bubble sort): polo\[ZHacek]aj "mjehurića" na početku ({{a}, {b}, {c}}).

Krećemo odozdo (od trećeg do prvog retka), uspređujemo zadnji element i onaj ispred njega i zamjenjujemo ih (ako treba);  Dalje uspoređujemo prednzadnji element i onaj ispred njega i evelntulano ih zamjenimo. Kada smo došli do vrha tada se na vrhu nalazi najlakši "mjehurić".

Ponavljao operaciju od trećeg do drugog elementa; na kraju se na drugom mjestu nalazi  najlakši "mejhurić" među uspoređivanima

Primjer

Primjer postupka: Polazni raspored   ({{5}, {4}, {3}})  (elementi koje promatramo na nekom koraku napisani su  ovom bojom ).

Prvi prolaz (od zadnjeg do prvog elementa):  usporedba: ({{5}, {4}, {3}}) , zamjena: ({{5}, {3}, {4}}) ,  usporedba:  ({{5}, {3}, {4}}) , zamjena: ({{3}, {5}, {4}})  — na vrh je isplivao "najlakši" mjehurić.

Drugi prolaz (od zadnjeg do drugog elementa): usporedba:  ({{3}, {5}, {4}}) , zamjena:  ({{3}, {4}, {5}})  — na drugom mjestu se nalazi najlakši "mjehurić" među usopređivanima.

Kraj sortiranja, rezultat je  ({{3}, {4}, {5}}).

Primjer

Primjer postupka za listu od 4 člana: Polazni raspored: ({{6}, {4}, {5}, {3}})  (elementi koje promatramo na nekom koraku napisani su ovom bojom).

Prvi prolaz ("idemo" od zadnjeg do drugog člana i uspoređujemo ih s elementom ispred;  ako treba zamjenjujemo ih): usporedba: ({{6}, {4}, {5}, {3}}), zamjena:  ({{6}, {4}, {3}, {5}}), uspredba:  ({{6}, {4}, {3}, {5}}), zamjena: ({{6}, {3}, {4}, {5}}), uspredba: ({{6}, {3}, {4}, {5}}), zamjena: ({{3}, {6}, {4}, {5}})  — kraj prvog prolaza, najlakši "mjehurić" je na vrhu.

Drugi prolaz ("idemo" od zadnjeg do trećeg člana i uspoređujemo ih s elementom ispred;  ako treba zamjenjujemo ih): uspredba: ({{3}, {6}, {4}, {5}}), nema zamjene!:  ({{3}, {6}, {4}, {5}}), uspredba:  ({{3}, {6}, {4}, {5}}), zamjena:  ({{3}, {4}, {6}, {5}}) — kraj drugog prolaza

Treći prolaz (od zadnjeg do trećeg člana): uspredba  ({{3}, {4}, {6}, {5}}), zamjena: ({{3}, {4}, {5}, {6}}).

Kraj sortiranja, rezultat je ({{3}, {4}, {5}, {6}}).

Rješenje

Napomena: kako je pokazano u drugom primjeru, zamjena vrijednosti dviju varijabli zahtjeva uvođenje pomoćne varijable. Program Mathematica ime neku vrstu izuzetka od navedenog pravila. Ako treba zamjeniti vrijednosti elemenata dvočlane liste {a, b} to možemo postići bez pomoćne varijable koristeći izraz
              {a, b} = {b, a};
nakon čega će a i b imati zamijenjene vrijednosti, npr.

a=6; b=2; {a, b}={b,a};
a
b

Slijedi tekst programa:

sort3[x_List] :=Module[{lista},  
lista = x;
If[Length[lista]≠3, 
Print["Lista mora imati tri člana"];Abort[];
];
(* početak prvog prolaza *)
If[ lista[[3]]<lista[[2]],  (* nepravilan poredak, zamjena *)
{lista[[2]], lista[[3]]} = {lista[[3]], lista[[2]]}
];
If[lista[[2]]<lista[[1]],  (* nepravilan poredak, zamjena *)
{lista[[1]], lista[[2]]} = {lista[[2]], lista[[1]]}
];
(* kraj prvog prolaza i početak drugog *)
If[ lista[[3]]<lista[[2]],  (* nepravilan poredak, zamjena *)
{lista[[2]], lista[[3]]} = {lista[[3]], lista[[2]]}
];
Return[lista];
];

Testiranje

sort3[{5,4,3}]