Professional Documents
Culture Documents
Dersin İçeriği
1. Ders
Yazılım Geliştirme- Problemin anlaşılması ve çözümlenmesi
2. Ders
Değişken Tanımlama- Değişken isimleri
3. Ders
Algoritmalar :
Akış Diyagramları
4. Ders
Problem-1.2. En Büyük Ortak Bölen Bulma Problemi
(Öklid Algoritması)
Detaylı algoritma tasarımı
5. Ders
Problem-1.3. Verilen Bir Sayının Kaç Basamaklı Olduğunu Bulma
7. Ders
Problem-1.7. Verilen Bir Sayının Karekökünü Hesaplama
(Bolzano Teoremi)
Yarılama yöntemi
8. Ders Problem-1.8. Newton-Raphson Yöntemi
Yöntemin Çıkarılması
Örnek fonksiyonların kökünün bulunması
9. Ders
Problem-1.9. Verilen Bir Pozitif Tamsayının Mükemmel Sayı Olup
Olmadığını Bulma
11. Ders Problem-1.19. Verilen Bir Sayının Mükemmel Sayı Olup Olmadığını FOR-
NEXT Döngüsü Kullanarak Bulma
Problem-1.20. Verilen Bir Sayının Asal Sayı Olup Olmadığını FOR-NEXT
Döngüsü Kullanarak Bulma
WHILE koşul
deyim(ler)
WEND
Komutlarının tanıtılması
Deyimlerinin tanıtılması
14. Ders
Problem-2.4. Verilen b Sayısının Karekökünü Newton-Raphson Yöntemi
ve Dizi Kullanımı ile Hesaplama
Tasarım
Bu aşamada, problemi çözmek için kullanılacak çözüm adımlarını gösteren bir liste yapılması
gerekir. Bir problemin çözüm adımlarını gösteren bu listeye algoritma denir. Böyle bir liste tasarlarken,
yukarıdan-aşağı tasarım tekniği kullanılır: Önce problemin ana adımları çıkarılır; daha sonra, her adım
için, gerekiyorsa, daha detaylı bir çözüm tasarlanır. Böylece bir problem için bir algoritma geliştirilmiş
olur. Bir programlama diline çevirmeden önce, bu algoritmanın doğru bir çözüm olduğundan emin
olunmalıdır. Bu aşamayı atlayarak doğrudan programlamaya geçmek, büyük programlar yazarken işi
çok zorlaştıracaktır.
Kodlama
Bu aşamada kağıt üzerinde geliştirilen algoritma bir programlama diline çevrilir. Bizim
durumumuzda bu Basic programlama dili olacaktır. Bu yüzden, Basic programlama dilinin yapısını
bilmemiz gerekecektir. Algoritmamızın her adımı, ona karşılık gelen Basic program parçasına
çevrilecektir.
Sınama ve Kanıtlama
Geliştirdiğimiz programın doğruluğunu sınayarak istediğimiz gibi çalışıp çalışmadığını görmek
zorundayız. Bu amaçla, program üzerinde çeşitli testler yaparak, programın o testlere nasıl karşılık
verdiğine bakarız. Bunu sağlamak için programı değişik girdilerle çalıştırır ve ürettiği sonuçlara bakarız.
Sonuçlar beklendiği gibiyse, programın doğru çalıştığı kanıtlanmış olur; değilse doğru çalışmayan
parçaları bularak düzeltmemiz gerekir.
Program nedir
Program, bilgisayarın amaca yönelik işleyişini sağlayan bir grup koda verilen isimdir. Bu kodlar
bütününe programlama dili adı verilir. Programın işleyişi, aksi belirtilmedikçe yukarıdan aşağıya
doğrudur. Program içindeki bazı komutlar aracılığı ile işleyiş istenildiği gibi değiştirilebilir
Değişken kavramı
Değişken, bilgileri saklamak üzere kullanılan, ismi ve tipi belirtilen bellek alanlarına verilen genel
isimlerdir. Bir değişken tanımlandığında ya da kullanıldığında, bilgisayarın belleğinde o değişken için
bir bölüm ayrılır. Değişkenler genel olarak iki gruba ayrılır. Birinci grup, içinde sayıların tutulduğu
değişkenlerdir. Bu değişkenlerin bellekte tutacakları yer bellidir. İkinci grup ise, içinde sayı haricindeki
bilgilerin tutulacağı değişkenlerdir. İçinde sayı tutulan değişkenlere sayısal değişken, sayı haricindeki
bilgilerin tutulacağı değişkenlere ise alfasayısal değişkenler denir. Değişkenler bilgisayarın belleğinde
geçici olarak depolandığından, elektrik kesilmesi veya bilgisayarın kapatılması sonucu yok olup gider.
Bilgisayarın belleği elektronik, bilgileri kalıcı olarak tutan üniteler manyetik/mekanik olduğundan
bellekte işlem yapmak diğer ünitelerde işlem yapmaktan daha hızlıdır. Bu nedenle bilgisayarın
belleğinde işlem yapılır, gerektiğinde diğer ünitelerden yararlanılır. Bellek ve bilgi depolama
birimlerinin genişliğini ölçmek için kullanılan temel birim bit ve byte’dır. Bit, bir byte’ı oluşturan sekiz
elektronik devreciğin her birine verilen isimdir. Temel ölçü birimi byte’dır. Bir byte, bilgisayarın
kullandığı herhangi bir harf veya karakteri tutar. Buna karşılık, sayılar sıkıştırılarak, bir byte’ın içinde
birden fazla sayı yerleştirilebilir.
Değişken isimleri
Değişken isimleri programcı tarafından belirlenir. Programcı aynı zamanda değişkenin niteliğini de
(sayısal/alfasayısal) belirler. Değişken isimleri en fazla 40 karakterden oluşabilir. Değişkenin ilk
karakteri mutlaka bir harf olmalıdır. İçinde boşluk ve özel karakter bulunmamalıdır. Değişken
isimlerinin sonuna getirilen bazı işaretler de, bu değişkenin niteliğini belirler. Değişken isimlerinin
sonuna getirilen özel karakterler ve bunların anlamları aşağıda belirtilmiştir.
% Tamsayı (Integer)
& Büyük tamsayı (Long Integer)
! Gerçel tek yoğunluklu (Single Precision)
# Gerçel çift yoğunluklu (Double Precision)
$ Alfasayısal (String)
Sonunda işaret belirtilmeyen değişkenler aksi belirtilmedikçe sayısal ve ondalık nokta içeren tek
yoğunluklu değişkenlerdir. Aşağıdakiler geçersiz değişken isimleridir.
Sayısal değişkenler:
İçinde sayıların tutulduğu değişkenlerdir. Tutulacak sayının büyüklüğüne göre, değişkenin niteliği
de değişir. Tamsayı değişkenler ve ondalık nokta içeren değişkenler olmak üzere iki ana gruba ayrılır.
Tamsayı değişkenler; Integer (2 byte), Long Integer (4 byte) olarak iki gruba, ondalık nokta içeren
değişkenler; Single precision (4 byte), Double precision (8 byte) olmak üzere ikiye ayrılır.
Değişkenlere Bilgi Yükleme (Değer Atama): En basit değer atama yöntemi eşitlik kullanımıdır.
SAYI%=0, SONUC%= 100, AD-SOYAD$=“Güvercin”, EN-KUCUK%= -10, PI#=3.1415, A1%=1
TUS$= “ ”, A=A+1, SAYAC%=SAYAC%+1, D=B^2-4*A*C, KOK=SQR(D), N=(-B+KOK)/(2*A),
ORT=TOPLAM/N, AD-SOYAD$=”Beyaz”+”Güvercin”, AD-SOYAD$=AD$+SOYAD$
Aritmetik ifadeler:
Matematiksel işlemlerde öncelik kuvvet (üs) alma işlemi, daha sonraki öncelik çarpma ve bölmeye
aittir, en son toplama ve çıkarma işlemi yapılır. Eğer aritmetik işlemlerde parantez işaretleri
kullanılıyorsa önce parantez içindeki kısımlar sonuçlandırılır.
A=2+10^2=102
B=10+100-3^2*3=10+100-9*3=10+100-27=110-27=83
X=5/2=2.5
Y=5\2=2
Sıra
Çözüm adımları bir sıraya dizilmiş olarak verilmelidir. Bu sıra çözüm adımlarının hangi sırayla
uygulanacağını gösterir. Bir adımın içerdiği alt adımlar numaralama düzeniyle açıkça belirlenir.
Yineleme
Bazı adımların birkaç kez yinelenmesi gerekebilir. Bu amaçla yinelenecek adımlar yineleme
adımının alt adımları olmak zorundadır. Yineleme adımı, alt adımların hangi koşullarda yineleneceğini
gösteren bir mantıksal ifade kullanmalıdır. Yineleme adımının yapısından yinelenecek adımların hangi
koşullarda yineleneceği ve yineleme işleminin ne zaman duracağı belli olmalıdır.
Algoritmaların Numaralanması
Yukarıdaki temel öğeler aşağıdaki gibi algoritma adımlarını numaralama yöntemi ile başarılabilir:
Sıra
Sırayla çözülecek adımlara, birbirini izleyen sıra numaraları verilebilir. Örneğin, A, B ve C
adımlarının sırayla uygulanacağını gösterir. Eğer bir adım, alt adımları kapsayacaksa, alt adımlar, o
adımın numarasını da kapsayacak şekilde numaralanır. Örneğin, A, B, B1, B2 ve C adımlarının sırayla
uygulanacağını gösterir.
Yineleme
Yineleme adımı için aşağıdaki gibi bir yapı kullanabiliriz. Bu yapıda mantıksal-ifade doğru olduğu
sürece A1, A2,..., An adımları sırayla yinelenir. Her yinelemeden sonra mantıksal-ifade kontrol edilir
ve eğer doğru ise yineleme işlemi devam eder; doğru değilse bir sonraki A+1. adıma gidilir.
Bu şekiller kullanılarak Problem-1.1. ile verilen denklem sistemi çözümünün akış şeması aşağıdaki
gibidir.
BAŞLA
payda=a1*b2-a2*b1
H x=(c1*b2-c2*b1)/payda
payda=0
y=(a1*c2-a2*c1)/payda
E
"Çözüm Yok" YAZ x,y yi yaz
DUR
DUR
Algoritmanın adımlarında görüldüğü gibi bazı kelimeler büyük harflerle yazılmıştır. Basic
programlama dilinde,
OKU kelimesi INPUT deyimine
YAZ kelimesi PRINT deyimine
EĞER kelimesi IF deyimine
DUR kelimesi END deyimine
karşılık gelmektedir. Daha sonraki konularda bu deyimlerin ayrıntılarına girilecektir. Sadece yukarıdaki
deyimler kullanılarak algoritmanın Basic programı aşağıdaki şekilde yazılabilir.
INPUT "a1=", a1
INPUT "a2=", a2
INPUT "b1=", b1
INPUT "b2=", b2
INPUT "c1=", c1
INPUT "c2=", c2
payda=a1 * b2 - a2 * b1
IF payda= 0 THEN
PRINT "TEK ÇÖZÜM YOK"
END
END IF
x = (c1 * b2 - c2* b1) / payda
y = (a1 * c2 - a2 * c1) / payda
PRINT "BULUNAN x DEĞERİ=", x
PRINT "BULUNAN y DEĞERİ=", y
END
INPUT ve PRINT deyimlerinde görülen " " işaretleri arasına ekranda görüntülenmesi istenilen
iletiler yazılır. Programın ilk satırında yer alan ' işareti programa açıklama satırı eklemek için kullanılır.
a1, a2, b1, b2, c1, c2, x ve y programda kullanılan değişkenlerdir.
IF …deyimler… END IF deyimi sorgulama yapmak için kullanılır. Bu sorgulama deyiminin
basitten karmaşığa doğru kullanım biçimleri aşağıdaki gibidir.
a) IF koşul(lar) THEN deyim(ler)
b) IF koşul(lar) THEN deyim(ler) ELSE deyim(ler)
c) IF koşul THEN
deyim bloğu-1
ELSE
deyim bloğu-2
END IF
d) IF koşul THEN
deyim(ler)
ELSEIF
deyim(ler)
ELSE
deyim(ler)
END IF
e) IF koşul-1 THEN
IF koşul-1.1 THEN
deyim bloğu-1.1
ELSE
deyim bloğu-1.2
END IF
ELSE
IF koşul-2.1 THEN
deyim bloğu-2.1
ELSE
deyim bloğu-2.2
END IF
END IF
IF…END IF deyiminin farklı kullanım biçimleri ile ileride verilen problemlerde karşılaşılacaktır.
Problem-1.2. En Büyük Ortak Bölen Bulma Problemi (Öklid Algoritması)
m, n>0 ve m>n olacak biçimde iki tamsayı olsun. Bu iki tamsayının en büyük ortak bölenini bulmak
için kullanılan Öklid Algoritmasını inceleyelim. İki tamsayının en büyük ortak böleni (EBOB), verilen
her iki sayıyı tam olarak bölen en büyük tamsayıdır. Öklid Algoritması ile EBOB’nü bulmak için verilen
sayılardan büyüğü küçüğüne bölünür ve kalan hesaplanır. Eğer kalan sıfır ise küçük olan sayı EBOB’dir
ve işlem sonlandırılır. Değilse bölüm yerine küçük olan sayı, bölen yerine de kalan sayı alınarak aynı
işlemler tekrarlanır. 1380 ile 38 sayılarının en büyük ortak bölenini bu yöntemle bulalım;
1380/38 kalan 12
38/12 kalan 2
12/2 kalan 0
En son bölen sayı 2 en büyük ortak bölendir. Buna göre Öklid Algoritmasının adımları aşağıdaki
gibi verilir.
m ve n
sayılarını
OKU
H
r=0
EBOB=n
YAZ
DUR
n>m olduğunda algoritmanın çalışabilmesi için bu iki sayının yerlerinin değiştirilmesi gerekir.
Bunun için bir yedek değişkene ihtiyaç duyulur. Buna göre, m değişkeni yedek değişkenine, n değişkeni
m değişkenine ve yedek değişkeni n değişkenine atanarak yer değiştirme işlemi yapılır. Bu yapılan atama
işlemi kısaca aşağıdaki gibi gösterilir.
Atama işlemi:
m n yedek= m
m= n
n=yedek
yedek
Basic programında bir sayının tam kısmını almak için INT(.) matematiksel fonksiyonu kullanılır.
INT(.) fonksiyonu kullanımı ile Öklid algoritması için program aşağıdaki şekilde yazılabilir.
INT(.) fonksiyonunu kullanmadan KALAN’ı bulan algoritma tasarlanabilir. Bunun için çıkarma
işleminden yararlanılır. Algoritma adımları aşağıdaki gibidir.
INPUT "m=", m
INPUT "n=", n
IF m < n THEN
yedek = m
m=n
n = yedek
END
END IF
A3:
m=m-n
IF n < m THEN GOTO A3
r=m
IF r = 0 THEN
PRINT "EBOB(m,n)=", n
END
END IF
m=n
n=r
GOTO A3
MOD operatörü yardımı ile KALAN’ı bulmak mümkündür. MOD operatörünün kullanımı sayı1
MOD sayı2 biçimindedir. MOD operatörü yardımı ile Öklid Algoritması adımları program aşağıdaki
gibidir.
INPUT "m=", m
INPUT "n=", n
IF n > m THEN
yedek = m
m=n
n = yedek
END IF
A3:
r = m MOD n
IF r = 0 THEN
PRINT "EBOB(m,n)=", n
END
END IF
m=n
n=r
GOTO A3
Problem-1.3. Verilen Bir Sayının Kaç Basamaklı Olduğunu Bulma
Verilen bir sayının kaç basamaklı olduğunu bulan algoritmayı geliştirelim ve programı yazalım.
Herhangi A tamsayısının kaç basamaklı olduğunu bulmak için aşağıdaki işlemler yapılır.
...
1 9 10 9 9 100 999 ...
A-Bir basamaklı
A-İki basamaklı
A-Üç basamaklı…
Eğer 100 A 101 ise A bir basamaklıdır.
Eğer 101 A 10 2 ise A iki basamaklıdır.
Eğer 10 2 A 103 ise A üç basamaklıdır.
…
Eğer 10 N A 10 N 1 ise A N 1 basamaklıdır.
1. x1 x2 ... xn xn2 1
2. x1 x3 ... x2n1 x2n
3. x2 x4 ... x2n x2n1 1
x1 x2 ... 1 xn 1 xn1 1
n1 n1
4.
x1 x2 ... xn xn xn1
2 2 2
5.
xn1 1 5
lim 1, 618...
n xn 2
sabitine ulaşılmasıdır. Bu sabite “Altın Oran” denilmektedir. Tablo 1.3.’de Fibonacci dizisinin her bir
elemanının ardışık olarak birbirine oranlanması sonucu Altın Oran’ın hangi sayıya yakınsadığı
C
görülebilir. Bunun için algoritmada oranını hesaplamak yeterlidir. Şekil 1.1.’e dikkat ediniz.
B
'DEFDBL A-Z
'DEFLNG A-Z
INPUT “kaç eleman hesaplanacak=”,n
A=1; B=1
sayac=2
A3:
C=A+B
PRINT C, C/B
A=B
B=C
sayac=sayac+1
IF sayac<n THEN GO TO A3
Tablo 1.4. n=78 için fibonacci dizisi elemanlarının tanımlama yok, DEFDBL, DEFLNG tanımlamalarına göre
elde edilen sonuçlar.
Tanımlama yok DEFDBL DEFLNG
2 2 2
3 3 3
5 5 5
8 8 8
13 13 13
21 21 21
34 34 34
55 55 55
89 89 89
144 144 144
233 233 233
377 377 377
610 610 610
987 987 987
1597 1597 1597
2584 2584 2584
4181 4181 4181
6765 6765 6765
10946 10946 10946
17711 17711 17711
28657 28657 28657
46368 46368 46368
75025 75025 75025
121393 121393 121393
196418 196418 196418
317811 317811 317811
514229 514229 514229
832040 832040 832040
1346269 1346269 1346269
2178309 2178309 2178309
3524578 3524578 3524578
5702887 5702887 5702887
9227465 9227465 9227465
1.493035E+07 14930352 14930352
2.415782E+07 24157817 24157817
3.908817E+07 39088169 39088169
6.324598E+07 63245986 63245986
1.023342E+08 102334155 102334155
1.655801E+08 165580141 165580141
2.679143E+08 267914296 267914296
4.334944E+08 433494437 433494437
7.014086E+08 701408733 701408733
1.134903E+09 1134903170 1134903170
1.836312E+09 1836311903 1836311903
2.971215E+09 2971215073 ---
4.807526E+09 4807526976 ---
7.778741E+09 7778742049 ---
1.258627E+10 12586269025 ---
2.036501E+10 20365011074 ---
3.295128E+10 32951280099 ---
5.331628E+10 53316291173 ---
8.626756E+10 86267571272 ---
1.395838E+11 139583862445 ---
2.258514E+11 225851433717 ---
3.654353E+11 365435296162 ---
5.912866E+11 591286729879 ---
9.567219E+11 956722026041 ---
1.548009E+12 1548008755920 ---
2.50473E+12 2504730781961 ---
4.052739E+12 4052739537881 ---
6.557469E+12 6557470319842 ---
1.061021E+13 10610209857723 ---
1.716768E+13 17167680177565 ---
2.777789E+13 27777890035288 ---
4.494556E+13 44945570212853 ---
7.272344E+13 72723460248141 ---
1.17669E+14 117669030460994 ---
1.903924E+14 190392490709135 ---
3.080614E+14 308061521170129 ---
4.984539E+14 498454011879264 ---
8.065153E+14 806515533049393 ---
1.304969E+15 1304969544928657 ---
2.111484E+15 2111485077978050 ---
3.416454E+15 3416454622906707 ---
5.527938E+15 5527939700884757 ---
8.944392E+15 8944394323791464 ---
Problem-1.5. Kuralı Verilen Bir Dizinin Elemanlarını Hesaplama
x1 0, x2 1 ve x3 2 olmak üzere n 3 için xn xn1 xn3 dizisinin elemanlarını
hesaplayan algoritmayı geliştirelim. n 20 için bu dizi 0, 1, 2, 2, 3, 5, 7, 10, 15, 22, 32, 47, 69, 101,
148, 217, 318, 466, 683, 1001 şeklindedir. Dizinin her bir elemanı kendinden bir önceki ve üç önceki
elemanların toplamı ile elde edilir. Bu dizinin n adet elemanının hesaplanacağı algoritmayı geliştirmek
için öncelikle dizinin ilk dört elemanını göz önüne alalım. Birinci elemanı A değişkenine, ikinci elemanı
B değişkenine ve üçüncü elemanı C değişkenine aktaralım. Dizinin ilk üç elemanının bilindiğini ifade
eden sayac isimli değişkeni sayac=3 olarak tanımlayalım. Dizinin dördüncü elemanına D diyelim. Buna
göre D=A+C ile dördüncü eleman bulunacaktır ve sayac değişkeni de sayac=sayac+1 olarak
artırılacaktır. Dizinin her bir elemanı kendinden bir önceki ve üç önceki elemanların toplamı olarak elde
edildiğinden dizinin devam eden elemanlarını bulmak için Problem-1.3.’de anlatılan aktarmaya benzer
işlemden faydalanılır. Yani, A=B, B=C ve C=D olarak alınıp D=A+C hesaplanır. Aynı işlemler
sayac=n oluncaya kadar tekrarlanır. Böylece, sayac=n olduğunda dizinin n. elemanı da bulunmuş olur.
Anlatılanlara göre algoritma adımları aşağıdaki gibi olacaktır.
Acaba hesap makinesi ya da bilgisayar bir sayının karekökünü nasıl hesaplıyor? x0 başlangıç
değeri olmak üzere
1 b
xn1 xn , n 0,1, 2,... dizisi b değerine yakınsar Bu yineleme bağıntısının nereden
2 xn
geldiği daha sonra açıklığa kavuşacaktır.
b
x1 0.5 x0
x0
b
x2 0.5 x1
x1
.
.
.
b
xn 0.5 xn 1
xn 1
Yani, x0 , x1 , x2 ,..., xn b dır. Burada sorun x0 ’ın nasıl belirleneceği ve algoritmanın durdurma
kuralının ne olacağıdır. Aslında bir sayının karekökünün bulunması problemi, f x x2 b
fonksiyonunun kökünü bulmak demektir. Bu şekilde düşününce, hem fonksiyonun belli bir aralıkta
kökünün olup olmadığı belirlenebilir, hem de başlangıç değeri seçilebilir.
*
f ( x) , a, b aralığında sürekli bir fonksiyon olmak üzere, eğer f (a). f (b) 0 ise x vardır öyle
*
ki f ( x ) 0 olur (Balcı 2008).
seçilebilir. x0 4 alınırsa,
24
x1 0.5 4 5
4
24
x2 0.5 5 4.9
5
24
x3 0.5 4.9 4.89897959183673
4.9
24
x4 0.5 4.89897959183673 4.89897948556636
4.89897959183673
olur. Aslında kökü içeren aralıktan başlangıç değer seçilmesi algoritmanın hesaplama süresini değiştirir.
Genel olarak aşağıdaki şekilde durdurma kuralları belirlenebilir.
1) Belirli adım sayısında işlem yapılır.
2) f xn incelenir.
3) xn xn1 incelenir.
Belirli bir adım sayısında işlem yapıldığında yakınsamanın durumu hakkında her zaman tam olarak
bir şey söylenemez. Farklı başlangıç değerlerine göre yakınsama değişir. 2. durdurma kuralı kullanılırsa
fonksiyonun sıfıra ne kadar yakın olup olmadığı kontrol edilmiş olunur. 3. durdurma kuralında n. adımda
bulunan yaklaşık değerle n+1. adımda bulunan değerin birbirine ne kadar yakın olup olmadığına
bakılmış olunur. Çok büyük adım sayısı verilerek ve diğer iki durdurma kuralı da kullanılarak
algoritmanın her zaman durması ve yakınsamanın gerçekleşmesi sağlanabilir.
a) Durdurma kuralı belirli bir adım sayısı olsun. Buna göre algoritma,
A1. n, x0 ve b sayılarını OKU/GİR
A2. say=0 al
A3. x1=0.5*(x0+b/x0) al
A4. say=say+1 al
A5. YAZ say, x1
A5. Eğer say>=n ise Dur
A6. x0=x1 al ve A3’ e GİT
b) Durdurma kuralı verilen bir değerine göre f xn kontrolü olsun. Daha önceden ifade
edildiği gibi, Basic programlama dilinde verilen bir sayının mutlak değerini almak için ABS
deyimi kullanılır. Kullanımı ABS(Sayı) biçimindedir. Buna göre algoritma ve program
aşağıdaki gibidir.
c) Durdurma kuralı, verilen bir delta değerine göre xn xn1 kontrolü olsun. Buna göre
algoritma ve program aşağıdaki gibidir.
Bolzano teoremini kullanılarak bir fonksiyonun kökünü bulacak başka bir algoritma geliştirilebilir.
Ardışık olarak kökün bulunduğu aralığın uzunluğunu yarıya indirilerek kökü içerecek aralık uzunluğunu
istenildiği kadar küçük yapacak bir yöntem geliştirebilir. Bu yöntemin işleyişi adım adım aşağıdaki
gibidir,
Adım-1. Bolzano teoremine göre f (a0 ). f (b0 ) 0 olacak şekilde kökü içeren bir
I0 a0 , b0 , a0 b0 aralığı bulunur.
a0 b0 a0 b0
Adım-2. a0 , b0 aralığı a0 , 2
ve 2 , b0 aralıklarına parçalanır. Eğer;
a0 b0 a b
f( ) 0 0 0 köktür değilse;
2 2
a0 b0 a0 b0
f (a0 ). f ( 2 ) 0 I1 a1 , b1 a0 , 2
a b
f ( 0 0)0
2 f (a ). f ( a0 b0 ) 0 I a , b a0 b0 , b
0 1 1 1 2 0
2
Adım-3. I1 aralığı için Adım-2’deki işlemler yapılır ve I2 aralığı elde edilir. Buna göre,
I0 I1 I 2 ... olur.
Adım-4. İşlemler n. adımda durmuş ise kökü içeren aralık In an , bn olmak üzere yaklaşık kök
an bn
alınır. Bu yönteme Yarılama yöntemi denir. Program aşağıdaki gibidir.
2
f xn
x n 1 xn
f ' xn
elde edilir. Yani bir sayının karekökünü bulurken kullanılan yöntem Newton-Raphson yönteminin özel
bir halidir. f x x 2 24 fonksiyonunun kökünü Newton-Raphson yöntemiyle bulacak algoritmayı
geliştirelim. Bolzano teoremine göre f 4 . f 5 0 olduğundan x0 4, 5 aralığından seçilebilir.
(4) 2 24
x1 4 5
2.(4)
(5) 2 24
x2 5 4.90
2.(5)
.
.
.
şeklinde hesaplanır. Durdurma kuralı xn xn1 için algoritma adımları aşağıdaki gibidir.
A1. x0 başlangıç değerini GİR/OKU
A2. DELTA sayısını çok küçük olacak şekilde GİR/OKU
A3. x1=x0-(x0^2-24)/(2*x0) al
A4. EĞER |x1-x0|<DELTA İSE DUR
A5. x0=x1 al
A6. A3’e GİT
INPUT "sayı=", n
t=0
s=1
A3:
s=s+1
IF n = INT(n / s) * s THEN
a = INT(n / s)
t=t+a
END IF
IF s<n THEN GOTO A3
IF t = n THEN
PRINT n; "mükemmel sayıdır"
ELSE
PRINT n; "mükemmel sayı değildir"
END IF
INPUT "sayı=", n
t=0
i=1
A3:
IF i>n THEN GOTO A6
IF INT(n / i)=n / i THEN t = t + 1
i=i+1
GOTO A3
A6:
IF t >2 THEN
PRINT n; "asal sayı değildir."
ELSE
PRINT n; "asal sayıdır."
END IF
INPUT "n=", n
IF n = 0 THEN
PRINT "sonuç=", 1
END
END IF
F=1
say = 1
A5:
F = F * say
say = say + 1
IF say < n THEN GOTO A5
PRINT "sonuç=", F
A4’deki gibi say=1’den n’e kadar Algoritma adımlarının tekrar etmesi halinde en çok kullanılan
döngü FOR-NEXT döngüsüdür. FOR-NEXT döngüsünün en genel kullanım şekli aşağıdaki gibidir.
FOR değişken_ismi=başlangıç_değeri TO bitiş_değeri STEP artım_sayısı
İşlemler
EXIT FOR
NEXT değişken_ismi
Problem-1.12. 1’den n’e Kadar Tek/Çift Sayıların FOR-NEXT Döngüsü Yardımı ile
Bulunması
1’den n’e kadar tek/çift sayıların FOR-NEXT döngüsü yardımı ile bulunmasına ilişkin programı
geliştirelim. Tek sayıların bulunması için geliştirilen program aşağıdaki gibidir.
N=9
M=9
T=1
FOR I=1 TO N
FOR J=1 TO M
T=I*J
PRINT T;
NEXT J
PRINT
NEXT I
Üç farklı durdurma kuralına göre program aşağıdaki gibi yazılabilir. İlk olarak durdurma kuralı
belirli bir adım sayısı olsun.
Durdurma kuralı bulunan kökler arasındaki farkın delta gibi bir değerden küçük kalması olsun.
Durdurma kuralı fonksiyonun değerinin epsilon gibi bir değerden küçük kalması olsun.
INPUT "a=", a
INPUT "b=", b
INPUT "d=", d
INPUT "n=", n
FOR i = 1 TO n
fa = a ^ 2 - d
fb = b ^ 2 - d
c = (a + b) / 2
fc = c ^ 2 – d
IF fc=0 then EXIT FOR
IF fa * fc < 0 THEN
b=c
ELSE
a=c
END IF
PRINT c
NEXT i
PRINT "kok=", c
Problem-1.19. Verilen Bir Sayının Mükemmel Sayı Olup Olmadığını FOR-NEXT Döngüsü
Kullanarak Bulma
INPUT "sayı=", n
t=0
s=1
FOR i = 1 TO n
s=s+1
IF n = INT(n / s) * s THEN
a = INT(n / s)
t=t+a
END IF
NEXT i
IF t = n THEN
PRINT n; "mükemmel sayıdır"
ELSE
PRINT n; "mükemmel sayı değildir"
END IF
Problem-1.20. Verilen Bir Sayının Asal Sayı Olup Olmadığını FOR-NEXT Döngüsü
Kullanarak Bulma
INPUT "sayı=", n
t=0
FOR i = 1 TO n
IF INT(n / i)=n / i THEN
t=t+1
END IF
NEXT i
IF t >2 THEN
PRINT n; "asal sayı değildir."
ELSE
PRINT n; "asal sayıdır."
END IF
ile verilir. a 0 için Taylor serisi açılımının özel bir hali Maclaurin serisi açılımıdır. f x e
x
x2 x3 x 4 x5 x6 x n 1
ex 1 x
2! 3! 4! 5! 6! (n 1)!
1 1 1 1 1 1
e ...
0! 1! 2! 3! 4! n 0 n!
dir. Euler sayısının hesaplanması için yukarıda verilen toplamın hesaplanması gerekir. Algoritma belli
bir adım sonra durdurulacağı için elde edilen e’nin yaklaşık değeri olacaktır. Algoritma adımları
aşağıdaki gibidir.
INPUT "N=", N
T=1
F=1
FOR i = 1 TO N
F=F*i
T=T+1/F
PRINT USING "#.####"; T
NEXT i
Bu programdaki PRINT USING deyimi, yazdırılacak ifadenin ekrana belli bir düzende yazdırılması
için kullanılmıştır. Genel kullanım şekli,
biçimindedir. Programda görülen “#” karakteri bir basamağı temsil eder. Örneğin,
PRINT USING “##.##”; 25.6789
ile 25.6789 sayısının ekrana yazılış biçimi belirtilmiştir. Buna göre 25.6789 değeri ekrana ##.##
formunda yazılacaktır. Yani ekranda görülen değer 25.67 olacaktır. Programımıza dönecek olursak
ekranda e değerinin virgülden sonra 4 basamağı görülecektir. Ayrıca, FOR-NEXT döngüsü yerine belirli
bir koşul altında verilen işlemleri gerçekleştiren WHILE…WEND döngüsü de kullanılabilir. Genel
kullanımı,
WHILE koşul
deyim(ler)
WEND
biçimindedir. “koşul” doğru ise WEND deyimine kadar olan deyimlerin hepsi uygulanır. WEND
deyimine gelindiğinde tekrar WHILE deyimine dönülerek “koşul” test edilir. Eğer “koşul” doğru ise
WHILE-WEND döngüsü içinde yer alan deyimler tekrar uygulanır. “koşul” yanlış ise WEND
deyiminden sonraki deyimlerin uygulanmasına geçilir.