end do

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 x24 x10
> solve(%,{x});
{ x1
6
6
}, { x1
}
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 0b 24 a c then
x1 :=
1 b b 24 a c
1 b b 24 a c
; x2 :=
; print( x1 , x2 )
2
a
2
a
1b
elif b 24 a c0 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