/* [wxMaxima batch file version 1] [ DO NOT EDIT BY HAND! ]*/ /* [ Created with wxMaxima version 0.8.6 ] */ /* [wxMaxima: title start ] Úvod do programování [wxMaxima: title end ] */ /* [wxMaxima: section start ] Základní programové konstrukce [wxMaxima: section end ] */ /* [wxMaxima: comment start ] for variable: initial_value step increment thru limit do body [wxMaxima: comment end ] */ /* [wxMaxima: comment start ] initial_value, increment, limit, a body mohou být libovolné výrazy. [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ for i:1 thru 5 step 1 do display(i)$ /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ i; /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Pokud je přírůstek jedna může se step vynechat. [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ for i:1 thru 5 do print(i)$ /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ total : 0; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ for i:1 thru 5 do total : total +i$ /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ total; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ for i:2 thru 6 step 2 do print('sum(j^i,j,1,n))$ /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ i; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ seznam : [1,2,3,4,5]; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ s:0; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ for i:1 thru length(seznam) do if remainder(seznam[i],2)=0 then s:s+seznam[i]^2; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ print("soucet ctvercu s = ", s); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] for variable in list end_tests do body [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ kill(all); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ s:0;seznam : [1,2,3,4,5]; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ for i in seznam do if remainder(seznam[i],2)=0 then s:s+seznam[i]^2; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ print("soucet ctvercu s = ", s); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] for variable: initial_value step increment while condition do body [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ s : 0$ /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ for i:1 while i<=10 do s:s+i; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ s; /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] while ... do ... (unless ... do ...) [wxMaxima: comment end ] */ /* [wxMaxima: comment start ] while provadi opakovane posloupnosti prikazu tak dlouho, pokud je podminka splnena (tedy pokud je logicky vyraz typu true). Pokud ma podminka hned na zacatku hodnotu false, posloupnost prikazu se neprovede. [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ x : 256; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ while x>1 do x: x/4; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ x; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ x : 1/2; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ while x>1 do x: x/4; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ x; /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Eukliduv algoritmus [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ a:20$ b:12$ while notequal(b,0) do ( d:remainder(a,b), a:b, b:d)$ /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ print("celociselny NSD je", a); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ gcd(20,12); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ kill(all); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] block([x1,x2,...,xn],exp1,exp2,...,expn) [wxMaxima: comment end ] */ /* [wxMaxima: comment start ] Posloupnost příkazů, která se navenek chová jako jeden příkazů. [x1,x2,...,xn] je posloupnost lokálních proměnných. Výsledem je výsledek posledního příkazu posloupnosti. Block příkazů může být ukončen i pomocí return(x), x bude poté výsledkem bloku. [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ euklid(a,b):= block([],local(d),d:remainder(a,b), while notequal(d,0) do (a:b, b:d, d:remainder(a,b)), b); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ euklid(20,12); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Funkce, ktera vrací největší mocnimu dvou menší nebo rovnou zadanému n. [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ binpow(n):=block([], local (x,m), x:0, m:n, while m>=1 do (m:m/2,x:x+1), x-1); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ binpow(8); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ for n:1 thru 8 do print(n, binpow(n)); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] if cond_1 then expr_1 else expr_0 [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ x : -2; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ if x < 0 then 0 else 1; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ x : %pi; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ if x < 0 then 0 else 1; /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] if cond_1 then expr_1 elseif cond_2 then expr_2 elseif ... else expr_0 [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ if x < 0 then -1 elseif x = 0 then 0 else 1; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ x : 0; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ if x < 0 then -1 elseif x = 0 then 0 else 1; /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Následující příkaz vyplňuje horní trojúhelníkovou matici řádkovými indexy, část pod hlavní diagonálou sloupcovými indexy a hlavní diagonálu jedničkami. [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ for i:1 thru 4 do for j:1 thru 4 do if ij then A[i,j]:j else A[i,j]:1; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ listarray(A); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ arrayinfo(A); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Nalezne první hodnotu, která není prvočíslo v posloupnosti 2^i-1, i=3,5,7,.. a jakmile ji najde, přeruší výpočet. [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ for i: 3 step 2 do if primep(2^i-1) then print(2^i-1, "je prvocislo") else return(2^i-1); /* [wxMaxima: input end ] */ /* [wxMaxima: section start ] Uživatelem definované funkce [wxMaxima: section end ] */ /* [wxMaxima: comment start ] Jednoduchý program v Maximě není nic jiného než posloupnost příkazů, např. [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ tangent(fn, x) := diff(fn(x), x) / ((diff(fn(x), x) * diff(fn (x), x))^(1/2)); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Tento zápis má jednu nevýhodu, třikrát zde počítáme tu samou derivaci. Výhodnější je tento zápis. [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ tangent(fn, x) := block ( [df: diff(fn(x), x)], df / (df * df)^(1/2) ); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Příkaz block je vlastně tělem procedury, proměnné definované uvnitř jsou lokálními proměnnými. [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ max3(a,b,c) := block([], print("nalezeni maxima z cisel ",a,b,c), if a0 then result:l[1], for i:2 thru length(l) do if l[i]>result then result:l[i], return(result))$ /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ maxN(9,2,3,4,5.0); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ result; /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Lokální proměnné [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ g(x):=1-x; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ g(100); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ block (local (g), g(x) := 2 * x, g(100)); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ g(100); /* [wxMaxima: input end ] */ /* Maxima can't load/batch files which end with a comment! */ "Created with wxMaxima"$