Professional Documents
Culture Documents
3.1. Li ni u
Maple l ngn ng lp trnh ng thi cng l cng c dng cho tnh ton, v vy Maple cung cp rt nhiu hm (hm ton hc cng nh hm p ng cho vic lp trnh) t ngi dng c th t xy dng cc chu trnh tnh ton. s dng mt cch hiu qu cc hm do Maple cung cp, ta phi kt hp gia cc hm mi c th pht huy ht sc mnh ca h thng cc hm c trong th vin c sn ca Maple. Mun lm c iu ny, ta c nhiu cch thc, trong cch n gin nht l lp hm kp (hm lng nhau). Ta c th gi cc hm lng nhau nh c ch cho gi tr ca cc hm, tc l cc hm sau khi thc hin mt thao tc theo cc tham s thng cho cc gi tr l kt qu ca cc php tnh, ta c th ly ngay kt qu ca php tnh ny lm tham s cho cc hm tip theo, v c tip tc nh vy cho n khi ta thu c kt qu mong mun. vit mt chng trnh (hm, chu trnh) trn Maple khng cn bn phi c mt k nng lp trnh cao bi v Maple c sn mt th vin khng l h tr bn trong vic ny. Khng ging nh cc ngn ng lp trnh khc, trong Maple ta c th s dng trc tip cc hm c to sn m khng phi xy dng li n. 90% trong hng nghn hm trong Maple l cc chng trnh c vit bng ngn ng lp trnh Maple. Ta c th trc tip kim tra cc hm ny v c th chnh sa li cho ph hp vi nhu cu s dng ca mnh hoc c th m rng chng ng dng cho cc bi ton khc. iu ny cho thy Maple l mt ngn ng c tnh tng giao cao vi ngi s dng. Ton b h thng Maple c th chia lm 3 thnh phn c bn: - Kernel: bao gm mt s cc hm c s c vit bng ngn ng C v c dch. Khi Maple khi ng th cc hm ny cng c gi ra (load) theo. Ta khng th xem c m ngun ca cc hm ny v chng c bin dch. - Th vin: l ni cha cc chng trnh (hm, th tc) c vit bng ngn ng Maple bao gm: cc hm lin quan n tnh ton s hc, i s tuyn tnh, thng k, th,... v cc gi chu trnh (packages) ca nhiu lnh vc trong ton hc. - Giao din: ni ta c th nhp hoc cho ra cc biu thc, cc hm ton hc...
if <biu thc iu kin 1> then <dy cc lnh 1> [elif <biu thc iu kin 2> then <dy cc lnh 2> else <dy cc lnh 3>] end if;
* Cng dng: cho php chn la <dy cc lnh> thc hin tu theo gi tr logic ca <biu thc iu kin> > ?if V d 1 > x:=-2; x := -2 > if x>0 then print("So duong") else if x=0 then print("So 0") else print("So am") end if end if; "So am" Lu rng trong Maple khng c cu trc chn la theo trng hp (case), tuy nhin ta c th dng lnh if thay cho lnh case bi cc tu chn sau else. V d 2 > n := 5; if n=0 then 0 elif n=1 then 1/2 elif n=2 then sqrt(2)/2 elif n=3 then sqrt(3)/2 else error "du lieu ko dung: \%1", n; end if;
n := 5
Error, du lieu ko dung: 5
> ?error > > * Ngoi cu trc chn la ca if nh trn ta cn c th s dng if nh mt hm vi c php sau
`if`(<biu thc iu kin>, <biu thc ng> , <biu thc sai>) V d 3 > `if`(5<1,"TRUE","FALSE"); "FALSE" > 5*(Pi + `if`(2 > 3,a,b)); 5 5b
b. Vng lp for
C php: for <name> from <start> by <change> to <finish> do <dy cc lnh> od; hoc c dng khc: for <name in expression> do <dy cc lnh> od; V d > for i from 2 by 2 to 6 do i^2 od; 4
16 36
> L := [7,2,5,8,7,9];
L := [ 7, 2, 5, 8, 7, 9 ]
> Ch : nu cc t kho from start hoc by change b b qua th mc nh lnh for s bt u t 1 v tng ln 1 n v sau mi vng.
c. Vng lp while
* C php: while <iu kin> do <dy cc lnh> od; V d Tm c s chung ln nht ca 2 s theo thut ton Euclide > a:=48; b:=54; a := 48
b := 54
> while b<>0 do d:=irem(a,b); a:=b; b:=d; od: print(`Uoc so chung lon nhat cua hai so la:`); value(a); Uoc so chung lon nhat cua hai so la:
6
> gcd(48,54); 6 > x:=256; x := 256 > while x>1 do x := x/4 end do; x := 64
x := 16 x := 4 x := 1
* Ch : thot khi gia chng cc vng lp for hoc while ta s dng mt trong cc lnh: break, quit, RETURN. Xem thm v cc lnh ny bng cch nh tr gip ?break, ?quit, ?RETURN.
n l ngay ti du nhc lnh ca Maple v nhn c ngay kt qu ca lnh . Ch chu trnh c thc hin bng cch ng gi mt dy cc lnh x l cng mt cng vic vo trong mt chu trnh (procedure) duy nht, sau ta ch cn gi chu trnh ny v Maple t ng thc hin cc lnh c trong chu trnh mt cch tun t v sau tr li kt qu cui cng. Maple cha mt lng rt ln cc hm to sn p ng cho nhng yu cu tnh ton khc nhau trong nhiu lnh vc. Cc hm ny c lu tr trong cc gi chu trnh (package) v ngi s dng c th d dng gi n mi khi cn thit. Tuy nhin, ngi dng Maple c th t to cho ring mnh nhng gi chu trnh cng nh c th trao i dng chung nhng gi chu trnh no y, phc v cho cng vic mang tnh c th ring ca mnh.
s dng hm ny ta ch cn dung lnh sau: > hello(); "Hello World" > UCLN := proc(a, b) local d; while b 0 do d := irem( a, b ) ; a := b ; b := d end do; printf( "Uoc so chung lon nhat cua hai so la: %d"a ) , end proc > UCLN(2,4);
Error, (in UCLN) illegal use of a formal parameter
V d 2 > restart; > UCLN :=proc(x,y) local d,a,b; a:=x; b:=y; > while b<>0 do d:=irem(a,b);
a:=b; b:=d; od; printf("Uoc so chung lon nhat la: %d",a); > end; UCLN := proc(x, y) local d, a, b; a := x; b := y; while b 0 do d := irem( a, b ) ; a := b ; b := d end do; printf( "Uoc so chung lon nhat la: %d" a ) , end proc > UCLN(24,54);
Uoc so chung lon nhat la: 6
> F(3,6); 3 Nu ta khng khai bo kiu ca tham s th n c th nhn bt k kiu g. V d, chu trnh proc(x) tng ng vi chu trnh proc(x::anything). Bin cc b: c khai bo sau t kho local trong khai bo chu trnh
Ging nh tham bin, bin cc b ch c gi tr bn trong chu trnh m n c khai bo. Nu khng khai bo kiu ca bin cc b th n cng nhn kiu bt k. Bin ton cc: c khai bo sau t kho global trong khai bo chu trnh. - Bin ton cc c khai bo bn trong mt chu trnh, nhng c phm vi gi tr trong ton b chng trnh, tc l bn ngoi phm vi ca chu trnh m n c khai bo trong . V d 3 Chu trnh sau tnh gi tr ln nht ca cc tham s c truyn vo > Max := proc() local i,m; if nargs = 0 then #narg: so cac tham so truyen vao return -infinity end if; m := args[1]; #gan m cho tham so thu nhat for i from 2 to nargs do if args[i] > m then m := args[i] end if; end do; m; end proc: > Max(); > Max(1,5,12,-19); 12 V d 4 > f:=proc()local a;global b;a:=10;b:=a+5;end; f := proc() local a; global b; a := 10 ; b := a 5 end proc > f(); 15 > b; 15 > a; a
end proc; f := proc(x, y) optionoperator; x^2 > f(1,2); 5 > f := proc(x, y) option operator, arrow; x^2 + y^2 end proc; f := ( x, y ) x2 y2 > f(1,2); 5
Ch rng tu chn arrow ch c ngha khi i cng vi tu chn operator. 2. Tu chn Copyright thm mt ghi ch v bn quyn vo chu trnh ta s dng tu chn ny trong chu trnh. Khi s dng tu chn ny th Maple hiu rng phn thn ca chu trnh khng c in ra. Ch khi no ta dng cc lnh buc Maple in m lnh ca chu trnh ra th mi c th thy c ton b chu trnh. > f := proc(expr::anything, x::name) option `Copyright (c) 1684 by G. W. Leibnitz`; Diff(expr, x); end proc; f := proc(expr:: anything, x:: name) ... end proc > interface(verboseproc=2); 1 > eval(f); proc(expr:: anything, x:: name) ... end proc 3. Tu chn operator Cho ta phng php biu din cc hm ton hc (hay nh x) trong Maple vi hnh nh mi tn. Do , tu chn ny thng i km vi tu chn arrow xt trn. > f := proc(x, y) option arrow; x^2 + y^2 end proc; f := proc(x, y) optionarrow; x^2 y^2 end proc > f := proc(x, y) option operator, arrow; x^2 + y^2 end proc; f := ( x, y ) x2 y2 4. Ty chn remember Cho php lin kt mt chu trnh vi mt "bng nh". Bng nh ny gip cho vic thc hin chu trnh c nhanh hn, cc gi tr tnh trong chu trnh s c lu vo bng nh ny. Mi khi chu
trnh c gi, trc ht Maple kim tra gi tr ca chu trnh c trong bng hay cha, nu c th a ra kt qu cn nu cha c th thc hin cc lnh trong chu trnh a ra kt qu v lu kt qu vo bng nh. V d, xt chu trnh tnh dy Fibonacci sau: > Fib := proc( n :: nonnegint ) option remember; if n<2 then n else Fib(n-1) + Fib(n-2) end if; end proc; Fib := proc(n:: nonnegint) option remember; if n 2 then n else Fib( n 1 ) Fib( n 2 ) end if end proc > Fib(4); 3 Nu ta nhp vo dng lnh: interface(verboseproc=3) v sau xem nh ngha hm bng lnh eval th cc thnh phn ca bng nh s c in ra. > interface(verboseproc=3); 2 > eval(Fib); proc(n:: nonnegint) option remember; if n 2 then n else Fib( n end proc > Fib(7); 13 > eval(Fib); proc(n:: nonnegint) option remember; if n 2 then n else Fib( n end proc
1)
Fib( n
2 ) end if
1)
Fib( n
2 ) end if
5. Tu chn trace Nu ta thm tu chn ny vo trong chu trnh th Maple s in ra ton b cch thc thc hin lnh ca chu trnh t khi bt u n khi kt thc ra mn hnh. V d: > Fib := proc( n :: nonnegint ) option remember, system, trace; if n<2 then n else
1
<-- exit Fib (now in Fib) = 1} {--> enter Fib, args = 0
0
<-- exit Fib (now in Fib) = 0}
1
<-- exit Fib (now in Fib) = 1} value remembered (in Fib): Fib(1) -> 1
2
<-- exit Fib (now at top level) = 2}
>
> interface(prettyprint=3);#bieu thuc in ra theo dinh dang chuan > Int(x^2, x=1..10); 1
10
x 2 dx
1
> 2. Lnh print Hin th cc biu thc lm tham bin ra mn hnh > 10^2; 100 > print(10^2); 100 > print(apple, banana, orange); apple, banana, orange > %; 100 > T := table([w,x,y,z]); T := table([1 w, 2 x, 3 y, 4 z]) > T; T > print(T); table([1 w, 2 x, 3
y, 4 z])
> 3. Lnh printf Lnh ny cho php hin th cc tham bin ra vi cc nh dng c bit. C php lnh: printf( formatString, expr1, expr2, expr3, ... ); trong , formatString l cch thc nh dng ca cc biu thc khi in ra (tng t trong ngn ng lp trnh C, C++). Cu trc y ca mt formatString l: %[flags][width][.precision][modifiers]code
trong : + flags: l cch nh dng u ra. V d, in du + ra trc mt s nguyn dng, du - dng canh l tri + width: s k t hin th khi in ra + precision: s k t xut hin sau du chm thp phn khi in ra mt s thc + modifiers: nh dng cc gi tr c bit. V d: nh dng Z cho s phc. + code: nh dng ca cc tham bin ra nh s nguyn (d), s thc (e hoc f), k t (c) hay chui (s)... Cc nh dng bt u vi k t %. Lu rng Maple khng t ng ngt dng khi in d liu ra mn hnh, ta phi dng nh dng "\n" buc Maple phi ngt dng. Xem cc v d sau: > printf("%d\n", 12345);
12345
> printf("%+10d %+5s %-c \n", 12345, hi, z ); > printf("The %-s of the %-s\n is %-a dollars.", price, hat, 10);
The price of the hat is 10 dollars.
> ?printf 4. Lnh readstat Tng t nh lnh read trong Pascal hay scanf trong C, lnh ny yu cu ngi s dng nhp cc biu thc vo t bn phm. V d: > readstat("Nhap vao mot bieu thuc: "); Nhap vao mot bieu thuc: hello; hello > readstat("Nhap vao mot so: "); Nhap vao mot so: 23; 23 > restart; > TinhDaoham := proc() local a, b; a := readstat("Nhap vao mot bieu thuc: "); b := readstat("Tinh dao ham theo bien: "); printf("Dao ham cuar %a theo bien %a la %a\n", a, b, diff(a,b)) end proc: > TinhDaoham();
Nhap vao mot bieu thuc: x^2+1/x; Tinh dao ham theo bien: x;
Dao ham cuar x^2+1/x theo bien x la 2*x-1/x^2
b. ng mt file ang m
C php: fclose(files); M t: ng tt c cc tp c m bng lnh fopen(). Vic ng cc tp ny m bo tt c d liu c ghi vo tp cn ang trong vng nh m thc s c ghi vo a. Lnh fclose() khng c gi tr tr li. - Khi thot khi Maple bng lnh quit, done, hoc lnh stop, Maple t ng ng tt c cc tp ang c m. - Nu tp tn ti trn a th lnh fclose() vi tham s l tn tp s khng gy ra li, nhng nu tp cha c m m tham s cho lnh fclose() l mt bin s nguyn th Maple s bo li. > fh:=fopen(`c:/test.txt`,READ,BINARY); fh := 0
r1 := 3 x2
r2 := 6 x r3 := proc(y) local a; a := irem( y, 2 ); if a 0 then "Even" else "Odd" end if end proc
d. Lnh readline
C php: readline(filename); readline(); trong , filename l tn ca mt tp tin hay l k hiu nhn dng (descriptor). Ta s dng hm readline() c dng d liu tip theo t tp ch r. Hm readline cho li kt qu l mt xu k t (string) cha c dng d liu c c t tp. K t xung dng c c t tp s b xo trc khi dng d liu gn cho xu k t . Nu khng cn dng d liu no c na, hm readline cho kt qu l s 0 (thay v mt xu k t) bo rng n cui tp. Nu nh tp c ch r bng tn ca n (tc l i s truyn cho hm readline l tn tp) th Maple t ng ng tp li. Khi ta gi lnh readline vi i s l tn tp m tp cha c m, th lnh ny s m tp theo ch READ vi kiu l TEXT. > f:=fopen(`example.txt`,WRITE,TEXT); f := 0 > fprintf(f,`chao ban`); 8 > fclose(f); > str:=readline(`example.txt`); str := "chao ban" > str:=readline(`example.txt`);
str := 0
> str:=readline();#lenh nay ko tac dong vao file > hello world! str := "hello world!"
s nguyn, s thp phn c du chm ng, hoc d liu kiu xu k t, ta phi s dng dng th hai v th ba ca hm readdata() c khai bo trong phn c php trn. Tham s format nhn cc gi tr l integer, float, string, hoc l mt danh sch cha mt hay mt s kiu d liu trn. Nu i s file nhn gi tr tn tp (ch khng phi l s hiu tp), v nu tp cha m, th tp s c Maple m di dng TEXT theo ch READ. Sau khi c xong d liu, readdata() t ng ng tp li. > writedata(`data1.txt`,[17,7,1979]); > readdata(`data1.txt`); [ 17., 7., 1979. ] > f:=fopen(`data.txt`,WRITE,TEXT); f := 0 > fprintf(f,`7 8 7.5 kha\n`); 12 > fprintf(f,`1 2 1.5 kem\n`); 12 > fclose(f); > readdata(`data.txt`,[integer,integer,float,string]); [ [ 7, 8, 7.5, "kha"], [ 1, 2, 1.5, "kem"] ] >
f. c d liu nh r kiu
C php trong : fscanf(file, fmt) sscanf(str, fmt) scanf(fmt) + file: tn tp hoc s hiu ca tp. + str: Xu hoc dy k t s c vit ra. + fmt: Cho bit kiu d liu c hin th c kiu nguyn, thc hoc xu...
Hm fscanf dng c dy k t, s hc ty theo kiu nh dng ca fmt v Maple tr li danh sch cc phn t c c. Nu tp cha tn ti hoc rng th danh sch tr li l rng (cng ging nh hm scanf(fmt)). Cc kiu nh dng (format) ca fmt c dng %[*][width]code trong : + %: ch l k hiu ch cho fscanf bit rng ti bt u nh dng kiu. + *: c th l mt trong cc k hiu sau: g,d,... N nh dng kiu cho hm fscanf. + width: di ln nht ca danh sch tr li khi hm fscanf c c. Cc fmt thng c dng nht: + d: nh dng kiu tr li l s nguyn. + f: nh dng kiu tr li l s thc. + s: kiu tr li l mt xu (string)....
> sscanf(`123.456E7 123.456E7`,`%g%d.%d %[Ee] %d`); [ 0.123456 1010, 123, 456, "E", 7 ] > sscanf(`X=123.4 Y=-27.9 Z=2.3E-5`,`X=%f Y=%f Z=%f`); [ 123.4, -27.9, 0.000023 ] > sscanf(`25 1/(x^4+1) test`,`%d%a%s`); 1 25, 4 , "test" x 1 >
Nhn xt: Nh vy trong lp trnh ta phi thn trng vi nh dng kiu, bi v cng mt bin nu nh dng khc nhau cho ta kt qu khc nhau. c bit, nu nh dng: %nt th Maple s in ra kt qu vi chiu di l n (t l kiu nh dng). > printf(`%s %25s %10s\n`,M,Map,MapleV);
M Map MapleV
>