You are on page 1of 43

İST 107 BİLGİSAYAR PROGRAMLAMA I

DERS TANITIM FORMU

Dersi Veren Öğretim Üyesi: Doç. Dr. Levent Özbek

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 :

Problem-1.1. İki Bilinmeyenli Denklem Sisteminin Köklerini Bulma

Akış Diyagramları

Temel QBASIC deyimleri: INPUT, PRINT, END, IF ELSE END IF

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

Problem-1.4. Fibonacci Dizisinin Elemanlarını Bulma

Fibonacci Dizisinin Özellekleri


6. Ders
Problem-1.5. Kuralı Verilen Bir Dizinin Elemanlarını Hesaplama

Problem-1.6. Bir Dizinin Kuralını Belirleme ve İstenilen Sayıda Elemanını


Hesaplama

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

Problem-1.10. Verilen Bir Sayının Asal Olup Olmadığını Bulma

Problem-1.11. Verilen Bir Sayının Faktöriyelini Hesaplama

10. Ders FOR - EXIT FOR - NEXT Döngüsü

Problem-1.12. 1’den n’e Kadar Tek/Çift Sayıların FOR-NEXT Döngüsü


Yardımı ile Bulunması

Problem-1.13. FOR-NEXT Döngüsünü Kullanarak Faktöriyel Hesaplama

Problem-1.14. İç İçe FOR-NEXT Örneği

Problem-1.15. Fibonacci Dizisinin Elemanlarını FOR-NEXT Döngüsü


Kullanarak Hesaplama

Problem-1.16. Verilen Dizinin Elemanlarını FOR-NEXT Döngüsü


Kullanarak Hesaplama
Problem-1.17. Verilen Sayının Karekökünü FOR-NEXT Düngüsü
Kullanarak Hesaplama
Problem-1.18. Verilen Bir Fonksiyonun Kökünü Yarılama Yöntemiyle
FOR-NEXT Döngüsü Kullanarak Hesaplama

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

Problem-1.21. Bir Fonksiyonun Taylor ve Maclaurin Serisine Açılımı ve e


Sayısının Hesaplanması

PRINT USING form, ifade

WHILE koşul
deyim(ler)

WEND

Komutlarının tanıtılması

12. Ders DO LOOP – DO WHILE LOOP


Deyimlerinin tanıtılması

Problem-1.22. Verilen Bir x Değeri İçin Parçalı Fonksiyonun Değerini


Ekrana Yazdırma
SELECT CASE durum – END SELECT

Deyimlerinin tanıtılması

13. Ders Dizi (Vektör) Tanımlama Diziler üzerinde işlemler

Problem-2.1. Dizi Tanımlama

Problem-2.2. Dizi Elemanlarının Toplamını Bulma ve Dizi Elemanlarının


Karesini Başka Bir Diziye Aktarma

Problem-2.3. Fibonacci Dizisinin Elemanlarını Dizi Kullanarak


Hesaplama

14. Ders
Problem-2.4. Verilen b Sayısının Karekökünü Newton-Raphson Yöntemi
ve Dizi Kullanımı ile Hesaplama

Problem-2.5. İki Vektörün (Dizinin) Toplamı

Problem-2.6. İç Çarpım ve Norm Hesabı

Problem-2.7. Dizinin Elemanlarını Tersten Yazdırma


İst 107 Bilgisayar Programlama I

1.1. Yazılım Geliştirme


Bir program, bir problemi çözmek için yazılan komutlar kümesidir. Bu komutlar, İngilizce ya da
Türkçe gibi dillerde değil, bilgisayar sisteminin anlayacağı bir dildedir. Bir program yazılmadan önce,
ilk yapılacak iş, o problemin nasıl çözüleceğine karar vermek ve çözümün adımlarını belirlemek
olmalıdır. Bu işte yardımcı olabilecek çeşitli problem çözme teknikleri vardır. Bu tekniklerden
yararlanıldığında, oluşturulan çözümü bir programa dönüştürmek kolay olacaktır. En temel problem
çözme tekniği, yukarıdan-aşağı tasarım yöntemidir. Bu yöntemde ilk verilen problem, küçük alt
problemlere bölünür. Bu alt problemler, gerekirse, daha küçük (basit) alt problemlere bölünürler. En
sonunda elde edilen alt problemler, ayrı-ayrı çözülürler ve bu çözümler ana problemin çözümünü elde
etmek için birleştirilirler. Bu yöntem, algoritma yazımından söz ederken örneklerle açıklanacaktır.

Yazılım geliştirmede dikkat edilmesi gereken konular


* Doğruluğu kesin olarak kanıtlanmadıkça, hiçbir şeyi doğru olarak kabul etmemeli; tahmin ve
önyargılardan kaçınılmalıdır.
* Karşılaşılan her güçlük mümkün olduğu kadar çok parçaya bölünmelidir.
* Düzenli bir biçimde düşünülmeli; anlaşılması en kolay olan şeylerle başlayıp yavaş-yavaş daha
zor ve karmaşık olanlara doğru ilerlemelidir.
* Olaya bakış çok genel, hazırlanılan ayrıntılı liste ise hiçbir şeyi dışarıda bırakmayacak kadar
kusursuz ve eksiksiz olmalıdır.
Bir problemi çözmek için yazılacak program oluştururken, genelde, aşağıdaki yazılım geliştirme
aşamalarından geçilmek zorundadır:

Problemin anlaşılması ve çözümlenmesi


İlk yapılacak iş, problemin tam olarak ne olduğunu anlamaktır. Bu nedenle, problemin çözümünden
neler beklenildiğinin ve oluşturulacak çözümün girdi ve çıktılarının neler olacağının kesin olarak
belirlenmesi gereklidir.

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)

Aşağıdakiler geçerli değişken isimleridir.

Toplam, Enbuyuk!, Enkucuk#, Altsınır%, Ustsınır%, Sayı, Adsoyad$, Tus$

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ı, 1.sıra%, $Ad-Soyad, Ad ve Soyad, Fnborc, …

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.

Tamsayı Değişkenler (%) (Integer):


İki byte içine sıkıştırılırlar. -32768 ile 32767 arasındaki sayıları depolayabilirler. Bir tamsayı
değişkene ondalıklı bir değer yüklenirse, değişken, bu ondalıklı sayıyı en yakın tamsayıya yuvarlar.

Uzun Tamsayı Değişkenler (Long Integer), &(ampersand):


Dört byte içine sıkıştırılırlar, -2,147,483,648 ile +2,147,483,647 arasındaki sayıları depolayabilirler.

Gerçel Tek Yoğunluklu Değişkenler (!):


Dört byte içine sıkıştırılırlar, ondalıklı sayılar tutabilir.

Gerçel Çift Yoğunluklu Değişkenler (#):


Sekiz byte içine sıkıştırıldıklarından büyük sayıları depolayabilirler. Matematiksel işlemlerde
hassasiyet arandığında bu tipte değişken tanımlanmalıdır.

Alfa Numeric ($), Alfa Sayısal Değişkenler:


Bilgisayarda kullanılan her türlü karakter depolanabilir.

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:

+ Toplama * Çarpma ^ Üs (Kuvvet Alma)

- Çıkarma / Bölme \ Kalansız Bölme

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

Sorgu operatörleri: Aşağıda sorgu operatörleri ve anlamları listelenmiştir.


=Eşittir >Büyüktür <Küçüktür
>=Büyük veya eşittir <=Küçük veya eşittir <>Eşit değildir

Program bölümleri (modüller)


Programlar, genel olarak bir veya birkaç bölümden oluşur. Her bir bölüm de daha alt seviyedeki
işlemler ve fonksiyonlardan oluşur. Bir bilgisayar programı bir ağaca benzetilebilir. Programın genel
yapısını tasarlamaya program analizi denir ve programlamaya başlamadan önce yapılır. Yapılacak
işlemlerin maddelenerek, nerede ne yapılacağının belirlenmesine algoritma denir ve programın işleyişi
algoritmanın gücüne bağlıdır. Programlamada dikkat edilmesi gereken konular;
* Dağınık olmamak
* Değişken isimlerini kısa ve anlamalı yazmak
* Daha sonradan programı kullanmak gerekebileceği için açıklama satırları koymak
1.2. Algoritmalar
“Algoritma” kelimesi 9. yüzyılda yaşamış Horasan doğumlu matematikçi Ebu Cafer Muhammed
İbn-i Musa el Harezmi’nin (al-Khowarizm) adından gelmektedir. M.S. 825 yıllarında “Kitab el cebr ve’l
mukabele” başlığıyla çok etkili olmuş bir matematik ders kitabı yazmıştır. Eskiden kullanılmakta olan
“algorizma” teriminin yerini bugünkü kullanımda “algoritma” kelimesinin almış bulunması “aritmetik”
kelimesi ile kurulan bir ilişkiye bağlı olmalıdır. (“Cebir” kelimesinin de aynı kitabın başlığında yer alan
Arapça el-cebr’den gelmiş olması ilginçtir). Aslında algoritmalar el Harezmi’nin kitabında çok önce de
bilinmekteydiler. Eski Yunan döneminden (yaklaşık M.Ö. 300 den) beri bilinen ve Eukleides
algoritması adıyla tanınan en iyi örnek, iki sayının en büyük ortak bölenini bulma yöntemidir
(Tepedelenlioğlu 1993, Penrose 1997). Bu yöntem ve algoritma tasarımı ile ilgili bilgiler daha sonra
ayrıntılı biçimde verilecektir.
Algoritma, belirli bir görevi yerine getiren sonlu sayıdaki işlemler dizisidir. Her algoritma aşağıdaki
koşulları sağlamalıdır.
* Girdi: Sıfır veya daha fazla değer dışarıdan verilmeli.
* Çıktı: En azından bir değer üretilmeli.
* Açıklık: Her işlem (komut) açık olmalı ve farklı anlamlar içermemeli.
* Sonluluk: Her türlü durum göz önünde bulundurularak algoritma sonlu adımda bitmeli.
* Etkinlik: Her komut herhangi birisinin kalem ve kağıt ile yürütebileceği kadar basit olmalıdır.
Algoritma, bir problemin çözümünün adımlarını gösteren formal bir dilde yazılmış tasarımdır.
Kullanılan dil Türkçe ve İngilizce gibi doğal bir dildir ama sınırlı bir yapısı vardır. Bir algoritmada
bulunması gereken temel öğeler sıra, karar verme yapıları ve yinelemedir.

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.

Karar Verme Yapıları


Bazı çözüm adımları seçeneğe bağlı olarak uygulanır. Her adımın hangi koşulla uygulanacağı
açıkça belli olmalıdır. Adım numaralarından seçeneğe bağlı olarak uygulanacak adımın konulan koşulun
sağlanması ya da sağlanmaması durumunda mı uygulanacağı belli olmalıdır.

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.

Karar Verme Yapıları


Seçeneğe bağlı uygulanacak adımlar aşağıdaki gibi numaralanabilir. Bu yapı, seçeneğe bağlı olarak,
A adımının alt adımlarının uygulanacağını gösteren bir yapıdır. Bu adımı uygulamak için, A. adımdaki
mantıksal-ifadenin doğru olup olmadığı bulunur. Eğer mantıksal-ifade doğruysa A.D. adımı uygulanır;
doğru değilse A.Y. adımı uygulanır. Bazı karar verme yapılarında A.Y. adımı bulunmayabilir, bu
durumda A adımındaki mantıksal-ifade yanlış ise uygulamak için A’dan sonraki A+1 adımına gidilir ve
adımların uygulanması oradan devam eder. Bazen A.D. (veya A.Y.) birden fazla adım içerebilir, bu
durumda bu adımlar A.D.1, A.D.2, ... gibi numaralandırılabilir.

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.

1.3. Algoritma tasarımına örnekler


Bazı durumlarda verilen bir problemin çözümüne yönelik herhangi bir bilgimiz olmayabilir, bu
durumda çözümü kendimizin oluşturması gerekir. Bazı durumlarda da daha önceden verilen bir çözüm
yönteminin algoritma olarak tasarlanması gerekebilir. Bazı durumlarda aynı problemin çözümüne
yönelik birden fazla algoritma tasarlanabilir. Bu durumlarda çözümden istenen şey ne ise ona göre
algoritma seçimine karar vermek gerekir. Doğruluk (hassaslık) ya da hız önem kazanabilir veya her ikisi
birden istenebilir. Bu kısımda çeşitli algoritma tasarımı örnekleri üzerinde durulup okuyucunun
algoritma tasarımında nelere dikkat etmesi gerektiği kısaca anlatılacaktır.

Problem-1.1. İki Bilinmeyenli Denklem Sisteminin Köklerini Bulma


a1 , a2 , b1 , b2 , c1 , c2 verildiğinde
a1 x  b1 y  c1
a2 x  b2 y  c2
denklem sisteminin çözümünü veren algoritmayı geliştirelim. Algoritmanın oluşturulabilmesi için
girdilerin alınmasından sonra bir çözüm yönteminin geliştirilmesi gerekmektedir. Bu amaçla
a1 x  b1 y  c1 eşitliğinden
(c1  b1 y )
x
a1
olarak bulunan bu değer a2 x  b2 y  c2 eşitliğinde yazılırsa,
a1b2  a2b1  0
olmak üzere,
(a1c2  a2c1 )
y
(a1b2  a2b1 )
bulunur. Benzer şekilde bulunan bu değer a1 x  b1 y  c1 eşitliğinde yazılırsa,
(c1b2  b1c2 )
x
(a1b2  a2b1 )
elde edilir. Burada dikkat edilmesi gereken nokta tek çözümün olabilmesi için a1b2  a2b1  0
koşulunun sağlanması gerektiğidir.
Bazı durumlarda algoritmanın daha açık anlaşılabilmesi için akış şemaları kullanılmaktadır.
Algoritma tasarımında biraz ustalaştıktan sonra akış şeması verilmeden doğrudan programlamaya
geçilecektir. Akış şeması için basitçe Tablo 1.1.’de verilen şekillerden yararlanılır.
Tablo 1.1. Bir Algoritmanın akış şeması için kullanılan şekiller ve tanımları.
Şekil Şekil Tanımı
Algoritmanın BAŞLA ve DUR gösterimi için
kullanılmaktadır.

Algoritmada kullanılacak değişkenlerin


OKUnması ve ekrana YAZdırılması için
kullanılmaktadır.
Aritmetiksel İşlemler ve/veya değişken
tanımlamalarında (atama işlemlerinde)
kullanılmaktadır.
Aritmetiksel ve mantıksal ifadeler için karar verme
ve/veya karşılaştırma durumunu göstermektedir.

Algoritmanın akış yönünü göstermek için


kullanılmaktadır.

Bu şekiller kullanılarak Problem-1.1. ile verilen denklem sistemi çözümünün akış şeması aşağıdaki
gibidir.

BAŞLA

a1, a2, b1, b2,


c1, c2
degerlerini OKU.

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

Algoritma adımları aşağıdaki gibidir.


A1. Girdilerin alınması (OKU)
a1, a2, b1, b2, c1 ve c2 değerlerini OKU
A2. payda=a1*b2-a2*b1
A3. EĞER payda=0 İSE
"Çözüm yok" iletisini YAZ
DUR
A4. x=(c1*b2-c2*b1)/payda
y=(a1*c2-a2*c1)/payda
A5. x ve y değerlerini YAZ
A6. 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.

A1. m, n tamsayılarını m>n olacak biçimde GİR/OKU


A2. m’yi n’ye böl ve kalana r de
A3. EĞER r  0 İSE “EBOB(m, n)=n” YAZ, DUR
A4. m’ nin yerine n’yi, n’nin yerine r’yi al ve A2’ ye GİT

Algoritmanın ikinci adımından sonra m = bn + r kolayca yazılabilir. Burada b bölüm, r de


algoritmada verildiği gibi m’nin n’ye bölünmesinden kalandır. Eğer r = 0 ise m, n’ye tam bölünüyor
demektir ki, bu durumda en büyük ortak bölen gerçekten n’dir. Eğer r sıfırdan farklı ise, m’nin ve n’nin
herhangi bir ortak böleni r = m- bn’yi de böler. Öte yandan hem n’yi hem de r’yi bölen bir sayı m = bn-
r’yi de böler Şu halde m ile n’nin ortak bölenlerinin kümesi ile n ile r’nin ortak bölenlerinin kümesi
aynıdır; öyleyse en büyük ortak bölenler de aynıdır. Bu nedenle 4’üncü adımdaki yer değiştirme,
problemin yanıtını değiştirmez (Tepedelenlioğlu 1993, Penrose 1997).
Yukarıda verilen algoritma adımlarının akış şeması aşağıdaki gibidir.
BASLA

m ve n
sayılarını
OKU

m' yi n' ye böl


m yerine n yi al kalana r de
n yerine r yi al

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

Bu durumda Öklid algoritması aşağıdaki şekilde yeniden yazılabilir.


A1. m, n tamsayılarını GİR/OKU
A2. EĞER m<n İSE
yedek= m
m= n
n=yedek
al
A3. m’yi n’ye böl ve kalana r de
A4. EĞER r  0 İSE
“EBOB(m, n)=n” YAZ
DUR
A5. m=n
n=r al ve A3’ e GİT
Burada dikkat edilmesi gereken kalanın nasıl bulunacağı sorunudur. Bunun için, m ve n gibi iki
tamsayı verildiğinde kalan bulma algoritmasını geliştirelim. Örnek olarak, m ve n sayıları yerine
sırasıyla 1380 ve 38 sayılarını alalım. Öncelikle 1380 sayısı 38’e bölündüğünde 36.32 elde edilir. Buna
göre, kalan 1380-38*36=12 olarak bulunur. Dolayısıyla, kalana r dediğimizde,
r  m  tamkısım  m n  n eşitliği ile elde edilir. Buna göre algoritmayı aşağıdaki gibi tekrar yazalım.
A1. m, n tamsayılarını GİR/OKU
A2. EĞER m<n İSE
yedek= m
m= n
n=yedek
al
A3. a=INT(m/n)
A4. r=m-n*a
A5. EĞER r  0 İSE
“EBOB(m, n)=n” YAZ
DUR
A6. m=n
n=r al ve A3’e GİT

Basic programında bir sayının tam kısmını almak için INT(.) matematiksel fonksiyonu kullanılır.

Tablo 1.2. Kullanılan bazı hazır matematiksel fonksiyonlar ve tanımları.


Matematiksel
Tanımları
Fonksiyonlar
ABS(.) Parantez içinde verilen sayısal ifadenin mutlak değerini bulur.

ATN(.) Parantez içinde radyan cinsinden verilen sayısal ifadenin ark


tanjantını bulur.
COS(.) Parantez içinde radyan cinsinden verilen sayısal ifadenin
kosinüsünü bulur.
EXP(.) Parantez içinde verilen sayısal ifadenin eksponansiyel değerini
bulur.
FIX(.) Parantez içinde verilen sayısal ifadenin tam kısmını bulur.
INT(.) Parantez içinde verilen sayısal ifadenin tamsayı değerini bulur.
LOG(.) Parantez içinde verilen sayısal ifadelerin (e ve onluk tabanda)
LOG10(.) logaritmik değerlerini bulurlar.
SGN(.) Parantez içinde verilen sayısal ifadenin işaretini bulur.
SIN(.) Parantez içinde radyan cinsinden verilen sayısal ifadenin
sinüsünü bulur.
SQR(.) Parantez içinde verilen sayısal ifadenin karekökünü bulur.

TAN(.) Parantez içinde radyan cinsinden verilen sayısal ifadenin


tanjantını bulur.

INT(.) fonksiyonu kullanımı ile Öklid algoritması için program aşağıdaki şekilde yazılabilir.

INPUT “m DEĞERİNİ GİRİNİZ=”,m

INPUT “n DEĞERİNİ GİRİNİZ =”,n


IF n>m THEN
yedek=m
m=n
n=yedek
END IF
A3:
a=INT(m/n)
r=m-n*a
IF r=0 THEN
PRINT “EBOB(m,n)=”,n
END
END IF
m=n
n=r
GO TO A3

INT(.) fonksiyonunu kullanmadan KALAN’ı bulan algoritma tasarlanabilir. Bunun için çıkarma
işleminden yararlanılır. Algoritma adımları aşağıdaki gibidir.

A1. m, n tam sayılarını GİR/OKU


A2. EĞER m<n İSE
yedek = m
m=n
n = yedek al
A3. m= m-n al
A4. EĞER n  m İSE A3’e GİT
A5. r= m al
A6. EĞER r=0 İSE “EBOB(m, n)=n” YAZ, DUR
A7. m= n
n= r al
A8. A3’e GİT
Yukarıda verilen algoritmaya göre program aşağıdaki şekilde yazılır.

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.

A1. m, n tam sayılarını GİR/OKU


A2. EĞER n>m İSE
yedek = m
m=n
n = yedek al
A3. r= m MOD n hesapla
A6. EĞER r=0 İSE “EBOB(m, n)=n” YAZ, DUR
A7. m= n
n= r al
A8. A3’e GİT

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.

Buna göre algoritma adımları ve program aşağıdaki gibidir.

A1. A tamsayısını GİR/OKU


A2. N=0 al
A3. EĞER A >= 10 ^ N VE A < 10 ^ (N + 1)İSE
“A, N+1 Basamaklıdır” YAZ, DUR
A4. N=N+1 al
A5. A3’e GİT

INPUT "SAYIYI GIRINIZ=", A


N=0
A3:
IF A >= 10 ^ N AND A < 10 ^ (N + 1) THEN
PRINT "SAYI"; N + 1; "BASAMAKLIDIR"
END
END IF
N=N+1
GOTO A3

Problem-1.4. Fibonacci Dizisinin Elemanlarını Bulma


x1  1, x2  1 olmak üzere n  2 için xn  xn1  xn2 dizisinin elemanlarını hesaplayan
algoritmayı geliştirelim. Bu dizi 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584,
4181, 6765, 10946, … şeklinde devam eden bir dizidir. Dizinin her bir elemanı kendinden önceki iki
elemanın toplamı ile elde edilir. Bu dizi Fibonacci dizisi olarak bilinir. Şimdi bu dizinin n adet
elemanının hesaplanacağı algoritmayı geliştirelim. Bunun için öncelikle dizinin ilk üç elemanını göz
önüne alalım. Birinci elemanı A değişkenine, ikinci elemanı B değişkenine aktaralım. Dizinin ilk iki
elemanının bilindiğini ifade eden sayac isimli yeni bir değişken tanımlayalım ve sayac=2 olarak alalım.
Dizinin üçüncü elemanına C diyelim. Buna göre C=A+B ile üçüncü eleman bulunacaktır ve sayac
değişkeni de sayac=sayac+1 olacaktır. Dizinin her bir elemanı kendinden önceki iki elemanın toplamı
olarak elde edildiğinden dizinin devam eden elemanlarını bulmak için aktarma işleminden faydalanılır.
Yani, A=B ve B=C olarak alınıp C=A+B hesaplanır ve aynı işlem 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.

A1. Hesaplanacak olan n-eleman sayısını GİR/OKU


A2. A=1, B=1, sayac=2 al
A3. C=A+B al
A4. C değerini YAZ
A5. A=B
B=C al
A6. sayac=sayac+1 al.
A7. EĞER sayac<n İSE
A3’ e GİT
A8. DUR

Fibonacci dizisinin elemanları arasında aşağıda verilen ilişkiler dikkat çekicidir.

1. x1  x2  ...  xn  xn2  1
2. x1  x3  ...  x2n1  x2n
3. x2  x4  ...  x2n  x2n1  1
x1  x2  ...   1 xn   1 xn1  1
n1 n1
4.

x1  x2  ...  xn  xn xn1
2 2 2
5.

Fibonacci dizisinin en önemli özelliği

xn1 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

Tablo 1.3. Fibonacci dizisinin ilk 20 elemanının ardışık oranları.


Ardışık Fibonacci Dizisi
Fibonacci Dizisi Elemanları
Elemanlarının Oranı
1
1 1/1=1
2 2/1=2
3 3/2=1.5
5 5/3=1.666667
8 8/5=1.6
13 13/8=1.625
21 21/13=1.615385
34 34/21=1.619048
55 55/34=1.617647
89 89/55=1.618181
144 144/89=1.617977
233 233/144=1.618056
377 377/233=1.618026
610 610/377=1.618037
987 987/610=1.618033
1597 1597/987=1.618034
2584 2584/1597=1.618034
4181 4181/2584=1.618034
6765 6765/4181=1.618034
10946 10946/6765=1.618034

'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

Yukarıdaki program çalıştırıldığında, hiçbir tanımlama yapılmadığında fibonacci dizisinin 187.


elemanına kadar hesaplandığı, DEFDBL A-Z tanımlaması yapıldığında 1476. elemanına kadar
hesapladığı, DEFLNG A-Z tanımlaması yapıldığında 46. elemanına kadar hesapladığı görülür Ayrıca,
hiçbir tanımlama yapılmadığında fibonacci dizisi elemanlarının 7. basamağa kadar hesaplandığı,
DEFDBL A-Z tanımlaması yapıldığında 16. basamağa kadar hesapladığı, DEFLNG A-Z tanımlaması
yapıldığında 10. basamağa kadar hesapladığı görülür. Buna göre fibonacci dizisinin 78. elemanına kadar
hesaplanan çıktıları Tablo 1.4.’deki gibi olacaktır.

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  xn1  xn3 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.

A1. Hesaplanacak olan n-eleman sayısını GİR/OKU


A2. A=0, B=1, C=2, sayac=3 al
A3. D=A+C al
A4. D değerini YAZ
A5. A=B
B=C
C=D al
A6. sayac=sayac+1 al
A7. EĞER sayac<n İSE
A3’e GİT
A8. DUR

INPUT “kaç eleman hesaplanacak=”,n


A=0
B=1
C=2
sayac=3
A3:
D=A+C
PRINT D
A=B
B=C
C=D
sayac=sayac+1
IF sayac<n THEN GO TO A3

Problem-1.6. Bir Dizinin Kuralını Belirleme ve İstenilen Sayıda Elemanını Hesaplama


1, 2, 4, 8, 16, 23, 28, 38, 49, , dizisinde boş olan kutulara hangi değerler gelir? Bu dizinin
1000’den küçük elemanlarını bulan algoritmayı geliştirelim. Dizinin her bir elemanı kendisinden önce
gelen sayının basamaklarındaki sayıların sayı değerleri toplamının o sayıya eklenmesi ile elde
edilmektedir. d n , ilgilenilen dizinin n. elemanını göstersin. Buna göre dizinin 10. elemanı
d10  49  (4  9)  62 ve 11. elemanı d11  62  (6  2)  70 olarak bulunur. Sonuç olarak, 1, 2, 4, 8, 16,
23, 28, 38, 49, 62, 70,… elde edilir. Algoritma adımları aşağıdaki gibidir.
A1. SAYI=1 al
A2. YB=INT(SAYI/100)
OB=INT((SAYI-100*YB)/10)
BB=SAYI-100*YB-10*OB al
A3. SAYI=SAYI+YB+OB+BB al, YAZ SAYI
A4. EĞER SAYI<1000 İSE
2. adıma GİT
DEĞİLSE DUR
'1, 2, 4, 8, 16, 23,… dizisi için program
SAYI=1
HESAP:
YB=INT(SAYI/100)
OB=INT((SAYI-100*YB)/10)
BB=SAYI-100*YB-10*OB
SAYI=SAYI+YB+OB+BB
PRINT SAYI
IF SAYI<1000 THEN GO TO HESAP
Problem-1.7. Verilen Bir Sayının Karekökünü Hesaplama

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 
xn1   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.

Teorem (Bolzano Teoremi):

  *
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).

f  x   x2  24 fonksiyonu için, Bolzano teoremine göre f  4 . f 5  0 olduğundan


fonksiyonun bu aralıkta bir kökü mevcuttur ve x0 , 4,5 aralığından herhangi bir değer olarak

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  xn1   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

'Bir sayının karekökünü bulmak için program


INPUT “karekökü alınacak sayıyı giriniz=”,b
INPUT “adım sayısı=”,n
INPUT “başlangıç değeri=”,x0
say=0
A3:
x1=0.5*(x0+b/x0)
say=say+1
PRINT “Adım sayısı=”;say;“Yaklaşık karekök=”,x1
IF say>n THEN END
x0=x1
GO TO A3

 
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.

A1. epsilon,x0 ve b sayılarını OKU/GİR


A2. x1=0.5(x0+b/x0) al
A3. say=say+1 al
A4. YAZ say, x1
A5. Eğer, x 2  b  epsilon ise DUR
A6. x0=x1 al ve A2’ e GİT

INPUT "karekökü alınacak sayıyı giriniz=", b


INPUT "epsilon değeri=", epsilon
INPUT "başlangıç değeri=", x0
A2:
x1 = .5 * (x0 + b / x0)
say=say+1
PRINT “Adım sayısı=”;say;“Yaklaşık karekök=”,x1
IF ABS(x1 ^ 2 - b) < epsilon THEN END
x0 = x1
GOTO A2

c) Durdurma kuralı, verilen bir delta değerine göre xn  xn1   kontrolü olsun. Buna göre
algoritma ve program aşağıdaki gibidir.

A1. delta,x0 ve b sayılarını OKU/GİR


A2. x1=0.5(x0+b/x0) al
A3. say=say+1 al
A4. YAZ say, x1
A5. Eğer, |x1-x0|<delta ise DUR
A6. x0=x1 al ve A2’ e GİT

INPUT "karekökü alınacak sayıyı giriniz=", b


INPUT "delta değeri=", delta
INPUT "başlangıç değeri=", x0
A2:
x1 = .5 * (x0 + b / x0)
say=say+1
PRINT “Adım sayısı=”;say;“Yaklaşık karekök=”,x1
IF ABS(x1 - x0)< delta THEN END
x0 = x1
GOTO A2

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

'Kökü alınacak sayı d


INPUT "a=", a
INPUT "b=", b
INPUT "d=", d
INPUT "n=", n
say = 0
hesap:
fa = a ^ 2 - d
fb = b ^ 2 - d
c = (a + b) / 2
fc = c ^ 2 - d
say = say + 1
IF say > n THEN
PRINT "c=", c
END
END IF
IF fa * fc < 0 THEN
b=c
ELSE
a=c
END IF
GOTO hesap
Problem-1.8. Newton-Raphson Yöntemi
f x, a, b aralığında sürekli ve türevlenebilir bir fonksiyon olsun, x0 -başlangıç değeri olmak
üzere
f xn 
x n 1  xn  , n  0,1, 2, ...
f ' xn 
yineleme bağıntısı f x  fonksiyonunun köküne yakınsar. Bu yönteme Newton-Raphson yöntemi adı
verilir. x0 -başlangıç değeri Bolzano teoremi yardımıyla seçilebilir. Yine benzer biçimde aşağıdaki
durdurma kurallarından biri kullanılabilir.
1. Belirli adım sayısında işlem yapılır.
2. f xn    incelenir.
3. xn  xn1   incelenir.
Bu yöntem kısaca şöyle açıklanabilir,
f ( x) fonksiyonunun x0 , f x0  noktasındaki teğet denklemi

y  f x0   f ' x0 ( x  x0 )


olarak bulunur. x0 , f x0  noktasından f ( x) fonksiyonuna çizilen teğetin x eksenini kestiği nokta
x1 olmak üzere,

y  0 için 0  f x0   f ' x0 ( x1  x0 ) olacağından


 f  x0  f  x0 
 x1  x0 ve x1  x0 
f '  x0  f '  x0 
elde edilir. Benzer biçimde,  x , f  x  noktasından geçen teğet denkleminin x eksenini kestiği nokta
1 1
x2 olmak üzere,
f  x1 
x2  x1 
f '  x1 
dir. Bu şekilde devam edildiğinde,
f  xn 
xn1  xn  x0 , x1,..., xn dizisi elde edilir. Amaç bu dizinin yakınsak olması ve limitinin de
f '  xn 
f  x   0 denkleminin çözümü olmasıdır. Bu yönteme Newton-Raphson Yöntemi denir.

Örneğin, f x   x 2  b alınırsa f ' x  2x olacağından,

f xn 
x n 1  xn 
f ' xn 

bağıntısında gerekli düzenlemeler yapılırsa,


1 b 
xn 1   xn   , n  0,1, 2,...
2 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.

x0  4 olsun. Buna göre,

(4) 2  24
x1  4  5
2.(4)
(5) 2  24
x2  5   4.90
2.(5)
.
.
.

şeklinde hesaplanır. Durdurma kuralı xn  xn1   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 "BASLANGIC DEGERI=", x0


INPUT "DELTA=", DELTA
A3:
x1 = x0 - (x0 ^2 -24) / (2*x0)
PRINT "YAK KOK=", x1
IF ABS(x1 - x0)< DELTA THEN END
x0 = x1
GOTO A3
Problem-1.9. Verilen Bir Pozitif Tamsayının Mükemmel Sayı Olup Olmadığını Bulma
Verilen bir pozitif tamsayının mükemmel sayı olup olmadığını bulan programı yazalım. Kendisi
dışındaki bütün pozitif bölenleri (çarpanları) toplamı kendisine eşit olan sayılara mükemmel sayılar
denir. Örnek olarak, 6 sayısının kendisi hariç pozitif tamsayı bölenleri 1, 2, 3 dir ve 6=1+2+3 olduğu
için 6 bir mükemmel sayıdır.
Mükemmel sayıların başlıca özellikleri aşağıdaki gibidir.
1. Sonsuz sayıda mükemmel sayı vardır.
2. Herhangi bir k>1 için 2k-1 asal ise 2k-1(2k-1) bir mükemmel sayıdır ve mükemmel sayıların
hepsini üreten bir formüldür.
3. Bütün mükemmel sayılar 6 ve 8 ile biterler.
4. Günümüze kadar 44 adet mükemmel sayı bulunmuştur. 44. mükemmel sayının 19 milyondan
fazla basamağı vardır.
5. 8. mükemmel sayıyı bulan Euler, kendinden önceki matematikçilerden farklı olarak, tek
mükemmel sayıların da olabileceğini ileri sürdü. Günümüze kadar bu konuda yapılmış olan
çalışmalar, ne bu iddianın doğruluğunu ne de yanlışlığını ispatlamaya yetmiştir.
Verilen bir tamsayının mükemmel sayı olup olmadığını bulan algoritma adımları ve program
aşağıdaki gibidir.

A1. n tamsayısını GİR/OKU


A2. t=0, s=1 al
A3. s=s+1 al
A4. EĞER n=INT(n/s)*s İSE
a=INT(n/s)
t=t+a al
A5. A3’e GİT
A6. EĞER t=n İSE
n, “mükemmel sayıdır” YAZ
DEĞİLSE
n, “mükemmel sayı değildir” YAZ
DUR

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

Problem-1.10. Verilen Bir Sayının Asal Olup Olmadığını Bulma


Verilen bir tamsayının asal sayı olup olmadığını bulan programı yazalım. Sadece kendisine ve 1
sayısına bölünebilen sayılara asal sayılar denir. Örnek olarak, 11 sayısının kendisi ve 1 sayısı hariç
pozitif tamsayı böleni olmadığından bu sayı bir asal sayıdır. Verilen bir tamsayının asal sayı olup
olmadığını bulan algoritma adımları ve program aşağıdaki gibidir.

A1. n tam sayısını GİR/OKU


A2. t=0, i=1 al
A3. EĞER i> n İSE A6’ya GİT
A4. EĞER INT(n/i)= n/i İSE t=t+1 al
A5. i=i+1 al. A3’e GİT
A6. EĞER t>2 İSE
n, “asal sayı değildir” YAZ
DEĞİLSE
n, “asal sayıdır” YAZ
DUR

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

Problem-1.11. Verilen Bir Sayının Faktöriyelini Hesaplama


Verilen bir sayının faktöriyelini hesaplayacak algoritmayı geliştirelim ve programı yazalım. Verilen
n  tamsayısı için
n! n  n  1 n  2 ...  3  2 1 biçiminde hesaplanır.
A1. Faktöriyeli alınacak sayıyı (n’i)OKU
A2. Eğer sayı=0 ise sonuc=1 YAZ ve DUR
A3. faktoriyel=1
A4. say=1
A5. faktoriyel=faktoriyel*say
A6. say=say+1
A7. EGER say<n İSE A5’ E GİT
A8. faktoriyel YAZ ve DUR

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.

'1, 3, 5, 7, 9, 11,… tek sayılar dizisi için program


INPUT “bulunacak tek sayılar için n ne olacak?=”,n
FOR I=1 TO N STEP 2
PRINT I
NEXT I

'2, 4, 6, 8, 10, 12,… çift sayılar dizisi için program


INPUT “bulunacak çift sayılar için n ne olacak?=”,n
FOR I=2 TO N STEP 2
PRINT I
NEXT I

Problem-1.13. FOR-NEXT Döngüsünü Kullanarak Faktöriyel Hesaplama


n! hesabını yapan program aşağıdaki gibidir.
INPUT “n=”,n
F=1
FOR I=1 TO n
F=F*I
PRINT I,F
NEXT I
PRINT “n!=”,F

Problem-1.14. İç İçe FOR-NEXT Örneği


Çarpım Tablosunu FOR-NEXT döngüsü yardımı ile veren programı geliştirelim. İç-İçe FOR-
NEXT döngülerinde en içte yer alan FOR-NEXT döngüsü devam ettiği sürece bir üstte yer alan
döngünün değeri değişmez. En içte kalan döngü tamamlandıktan sonra dışta kalan döngünün değeri
değişir. Daha sonra içteki FOR-NEXT döngüsü yeniden çalışır.

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

Problem-1.15. Fibonacci Dizisinin Elemanlarını FOR-NEXT Döngüsü Kullanarak


Hesaplama
INPUT "eleman sayısını giriniz=", n
A=1
B=1
FOR i = 3 TO n
C=A+B
A=B
B=C
PRINT i, C
NEXT i

Problem-1.16. Verilen Dizinin Elemanlarını FOR-NEXT Döngüsü Kullanarak Hesaplama


INPUT "eleman sayısını giriniz=", n
A=0
B=1
C=2
FOR i = 4 TO n
D=A+C
A=B
B=C
PRINT i, D
NEXT i

Problem-1.17. Verilen Sayının Karekökünü FOR-NEXT Düngüsü Kullanarak Hesaplama

Üç farklı durdurma kuralına göre program aşağıdaki gibi yazılabilir. İlk olarak durdurma kuralı
belirli bir adım sayısı olsun.

INPUT "b sayısını giriniz=", b


INPUT "başlangıç değeri=", x0
INPUT "adım sayısı=", N
FOR i = 1 TO N
x1= .5 * (x0 + (b / x0))
x0 = x1
PRINT i, x1
NEXT i

Durdurma kuralı bulunan kökler arasındaki farkın delta gibi bir değerden küçük kalması olsun.

INPUT "adım sayısı=", N


INPUT "delta=", delta
INPUT "başlangıç değeri=", x0
INPUT "b=", b
FOR i = 1 TO N
x1 = .5 * (x0 + (b / x0))
IF ABS(x1 - x0) < delta THEN EXIT FOR
x0 = x1
PRINT i, x1
NEXT i

Durdurma kuralı fonksiyonun değerinin epsilon gibi bir değerden küçük kalması olsun.

INPUT "epsilon=", epsilon


INPUT "adim sayısı=", N
INPUT "başlangıç değeri=", x0
INPUT "b=", b
FOR i = 1 TO N
x1 = .5 * (x0 + (b / x0))
IF ABS(x1 ^ 2 - b) < epsilon THEN EXIT FOR
x0 = x1
PRINT i, x1
NEXT i

Problem-1.18. Verilen Bir Fonksiyonun Kökünü Yarılama Yöntemiyle FOR-NEXT Döngüsü


Kullanarak Hesaplama

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

Problem-1.21. Bir Fonksiyonun Taylor ve Maclaurin Serisine Açılımı ve e Sayısının


Hesaplanması

f x  e x fonksiyonunda x  1 için Euler sayısı olarak bilinen e  2.718281828459... değeri


ile ilgilenilir. Euler sayısını elde etmede kullanılan yöntemlerden biri f ( x) fonksiyonunun seriye
açılması yöntemidir. Türevlenebilir bir f (x) fonksiyonunun   0 olmak üzere a   , a   
aralığında Taylor serisi açılımı,

f ' a x  a  f '' a x  a  f ''' a x  a  f ( n 1) a x  a 


1 2 3 n 1
f ( x)  f a      
1! 2! 3! (n  1)!

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

fonksiyonu için Maclaurin serisi açılımı

x2 x3 x 4 x5 x6 x n 1
ex  1 x       
2! 3! 4! 5! 6! (n  1)!

olarak elde edilir. Burada x  1 için Euler sayısı


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.

A1. N tamsayısını GİR/OKU


A2. T  1 al
A3. F  1 al
A4. I  1, ..., N için F  F * I , T  T  1 / F işlemlerini yap
A5. YAZ “e'nin yaklaşık değeri=” T
A6. DUR

Programı aşağıdaki şekilde yazılır.

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,

PRINT USING form, ifade

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.

You might also like