Maple ile Programlamaya Giriş Maple ile yapılabilecek programlarda, kullanılabilecek bazı temel komutları ve bunlarla yapılmış bazı küçük program örnekleri vereceğiz. Maple ile yapılan programlar “codegen” komutu ile C, Java, Fortran, MathML kodlarına çevrilebilmektedir. Döngü, bilgisayar lisanında belirli şartlar oluşuncaya kadar tekrar edilen komut veya komutlar bütünü anlamına gelmektedir. for döngüsü Genel kullanımı aşağıdaki şekildedir. for i from a to b do ……………… end do; komutları arasına döngüde tekrar edilmesi istenen komutlar yazılır. Bu döngü ile, i sayısı a dan b ye kadar birer birer artarak do ile end do arasındaki komutlar icra edilir. i önce a değerini, sonra a+1 değerini , … , b değerini alarak istenilen işlemi gerçekleştirir. Son olarak b+1 değerini alır, b+1 b sayısından büyük olduğundan döngü sonlandırılır. Dolayısıyla döngü tamamlandığında i değişkeninin değeri b+1 olur. do ile end do arasına döngü gövdesi denir. Döngü gövdesinde en az bir satır bulunmalıdır. Bu sebeple döngü yazılırken alt satıra geçmek gerekir. Alt satıra geçip bir Maple komut satırı içinde çok satır yazabilmek için shift+enter tuşlarına basmak yeterlidir. Hesaplanan bir işlemin çıktısının ekrana yazdırmak için print komutu kullanılır. print komutu ile yazılacak alfabetik değerler “ ” arasına yazılmalıdır. > for i from 1 to 5 do print(i) end do; 1 2 3 4 5 > for i from 1 to 5 do print(i,i^2) end do; 1, 1 2, 4 3, 9 4, 16 5, 25 > for i from 1 to 5 do print(i,"sayısının karesi",i^2) end do; 1, "sayýsýnýn karesi" ,1 2, "sayýsýnýn karesi" ,4 3, "sayýsýnýn karesi" ,9 4, "sayýsýnýn karesi" , 16 5, "sayýsýnýn karesi" , 25 > i; 6 > for ali from 1 to 5 do print(ali+sqrt(ali)) end do; 2 2 2 3 3 6 5 5 for döngüsünde artış miktarı 1 birim olmak zorunda değildir. Artış miktarı farklı olsun istenirse döngü üst sınırı ile do arsına by artış miktarı eklenir. > for i from 1 to 6 by 2 do print(i,"sayısının küpü",i^3) end do; 1, "sayýsýnýn küpü" ,1 3, "sayýsýnýn küpü" , 27 5, "sayýsýnýn küpü" , 125 for döngüsünde sınırlar ve artış miktarı ondalıklı sayı da olabilir. > for x from -1.3 to 2.3 by .8 do print(x) end do; -1.3 -0.5 0.3 1.1 1.9 Maple5 ve öncesinde end do yerine od kullanılırdı. > for i from 3 to 5 do print(i^2+1) od; 10 17 26 > for i from 1 to 13 do print(i,". asal sayı",ithprime(i)) od; 1, ". asal sayý"2 , 2, ". asal sayý"3 , 3, ". asal sayý"5 , 4, ". asal sayý"7 , 5, ". asal sayý"11 , 6, ". asal sayý"13 , 7, ". asal sayý"17 , 8, ". asal sayý"19 , 9, ". asal sayý"23 , 10, ". asal sayý"29 , 11, ". asal sayý"31 , 12, ". asal sayý"37 , 13, ". asal sayý"41 , for döngüsünde aralık, belirli sayılar arası değil de belli bir kümenin elemanları da olabilir. Bunun için önce küme tanımlanmalıdır. > A:=[3,4,1,5,12]; A := [ 3, 4, 1, 5, 12 ] > for i in A do print(i^2) od; 9 16 1 25 144 Döngü bittiğinde i değişkeni kümenin son elemanı olarak kalır. > i; 12 Örnek: n=10 için, 1’ den n’ ye kadar olan sayılarla bölümünü veren for döngüsünü yazınız. > n:=10; n := 10 > for i from 1 to n do print(n,sayısının,i,"ile bölümü",n/i,olur) end do; 10, sayýsýnýn, 1, "ile bölümü" , 10, olur 10, sayýsýnýn, 2, "ile bölümü", 5, olur 10, sayýsýnýn, 3, "ile bölümü" , 10 , olur 3 5 10, sayýsýnýn, 4, "ile bölümü" , , olur 2 10, sayýsýnýn, 5, "ile bölümü", 2, olur 5 10, sayýsýnýn, 6, "ile bölümü" , , olur 3 10, sayýsýnýn, 7, "ile bölümü" , 10 , olur 7 5 10, sayýsýnýn, 8, "ile bölümü" , , olur 4 10, sayýsýnýn, 9, "ile bölümü" , 10 , olur 9 10, sayýsýnýn, 10, "ile bölümü" , 1, olur while döngüsü Genel kullanımı while şart do …………… end do; şeklindedir. do ile end do arasındaki komutlar şart sağlandığı sürece tekrar edilirler, şartın sağlanmadığı ilk durumda döngü sonlandırılır. Örnek: i 1’den 5’e kadar değişirken i/(i+1) ‘in kosinüsünü bulan while döngüsünü yazınız. > i := 0; i := 0 > while i<5 do i:=i+1; cos(i/(i+1)); > od; i := 1 1 cos 2 i := 2 2 cos 3 i := 3 3 cos 4 i := 4 4 cos 5 i := 5 5 cos 6 Bu örnek for ile de yapılabilirdi. > for i from 1 to 5 do print(i,için,cos(i/(i+1))) od; 1 1, için , cos 2 2 2, için , cos 3 3 3, için , cos 4 4 4, için , cos 5 5 5, için , cos 6 Şimdi for döngüsü ile çözülmesi zor fakat while döngüsü şle çözülmesi çok daha kolay 𝑛2 + 𝑛 + 17 bir örnek verelim. sayısı asal olmayacak şekildeki en küçük doğal sayısını bulan döngüyü yazalım. > n:=0; n := 0 > while isprime(n^2+n+17) do n:=n+1 end do; n := 1 n := 2 n := 3 n := 4 n := 5 n := 6 n := 7 n := 8 n := 9 n := 10 n := 11 n := 12 n := 13 n := 14 n := 15 n := 16 𝑛2 + 𝑛 + 17 asal olmayacak şekildeki en küçük doğal sayı 16 dır. 𝑛2 + 𝑛 + 17 sayısı asal olduğu sürece döngü devam eder. for-while döngüsü Genel kullanımı for değişken adı from alt limit while şart do komutlar end do; şeklindedir. Değişken alt limitten itibaren şart sağlandığı sürece döngü devam eder. Matematikte ardışık işlemler(iterasyon) yapılırken bu döngüler oldukça kullanışlı olacaktır. Örnek olarak daha önce bulduğumuz 𝑛2 + 𝑛 + 17 asal olmayacak şekildeki en küçük n doğal sayısını ve n sayısı ardışık olarak artarken n ve değerlerini ekrana yazdıran bir döngü oluşturalım. > for n from 1 while isprime(n^2+n+17) do print(n,n^2+n+17); end do; 1, 19 2, 23 3, 29 4, 37 5, 47 6, 59 7, 73 8, 89 9, 107 10, 127 11, 149 12, 173 13, 199 14, 227 15, 257 > isprime(257); true > n; 16 > n^2+n+17; 289 > isprime(289); false > ifactor(289); ( 17 )2 𝑛2 + 𝑛 + 17 Örnek: n bir doğal sayı iken 300’den küçük olacak şekildeki tüm 𝑛3 − 𝑛2 − 𝑛 − 1 sayılarını bulan for-while döngüsünü yazınız. > for n from 1 while n^3-n^2-n-1<300 do print(n,n^3-n^2-n-1) end do; 1, -2 2, 1 3, 14 4, 43 5, 94 6, 173 7, 286 > n; 8 > n^3-n^2-n-1; 439 if...then komutu Genel kullanımı if şart then komutlar end if; şeklindedir. Bu komut kullanıldığında eğer şart sağlanıyorsa komutlar yerine getirilir. Aksi halde komutlar yerine getirilmez. > x:=10; x := 10 > if (x>5) then y:=13 end if; y := 13 Şart sağlanmasaydı bir işlem yapılmazdı. > if x<5 then y:=1 end if; > y; 13 if...then döngüsü kullanılırken şart iyi tanımlanmalıdır, aksi halde Maple hata mesajı verir. > if a<0 then x:=123 end if; Error, cannot determine if this expression is true or false: a < 0 if ... then döngü içerisinde de kullanılabilir. Örneğin 200’den küçük asal sayıların kaç tane olduğunu bulalım. > restart; > say:=0; say := 0 > for n from 1 to 200 do if isprime(n) then say:=say+1 end if; > end do; > say; 46 Yukarıda üç komut satırında verilen komutlar aşağıdaki gibi tek komut satırında da verilebilir. > say:=0; for n from 1 to 200 do if isprime(n) then say:=say+1 end if end do; say; say := 0 46 Yukarıdaki gibi kullanımda şart doğru ise ne yapılacağı bilinmektedir, fakat şart doğru değilse hiçbir şey yapılmamaktadır. Çoğu problemde belli bir şart doğru olduğunda bir şey, doğru olmadığında başka bir şey yapmak gerekir. Bunu Maple ile yapmak için if...then komutunu else seçeneği ile birlikte kullanmak gerekir. Genel kullanımı if şart then komut zinciri 1 else komut zinciri 2 end if; şeklindedir. Bu komut verildiğinde eğer şart doğru ise “komut zinciri 1”, şart doğru değilse “komut zinciri 2” yerine getirilir. > x:=1; x := 1 > if x>5 then u:=3; else u:=4; end if; u := 4 Belirtilen şartlar daha da çok olabilir. Bunun için if...then komutu if şart1 then komut zinciri 1 elif şart2 then komut zinciri 2 elif şart3 then komut zinciri 3 ......... elif şartn then komut zinciri n else komut zinciri (n+1) end if; şeklinde kullanmak gerekir. > a:=2;b:=4;c:=-1; a := 2 b := 4 c := -1 > delta:=b^2-4*a*c; > if delta>0 then x1:=(-b-sqrt(delta))/(2*a); x2:=(-b+sqrt(delta))/(2*a); elif delta=0 then := 24 x1:=-b/(2*a); else print("reel kök yok") end if; x1 := 1 6 2 x2 := 1 6 2 Sonucun doğru olup olmadığını test edelim. > a*x^2+b*x+c=0; 2 x24 x10 > solve(%,{x}); { x1 6 6 }, { x1 } 2 2 Yaptığımız bu örneği bir fonksiyon haline getirelim. > kök:=(a,b,c)->if b^2-4*a*c>0 then x1:=(-b-sqrt(b^2-4*a*c))/(2*a); x2:=(-b+sqrt(b^2-4*a*c))/(2*a); print(x1,x2); elif b^2-4*a*c=0 then x1:=-b/(2*a); else print("reel kök yok") end if; Warning, `x1` is implicitly declared local to procedure `kök` Warning, `x2` is implicitly declared local to procedure `kök` kök := ( a, b, c )local x1 , x2 ; if 0b 24 a c then x1 := 1 b b 24 a c 1 b b 24 a c ; x2 := ; print( x1 , x2 ) 2 a 2 a 1b elif b 24 a c0 thenx1 := 2a els e print( "reel kök yok") end if > kök(2,4,-1); 1 6 6 , 1 2 2 > kök(1,2,1); -1 > kök(1,-4,3); 1, 3
© Copyright 2024 Paperzz