Algoritma ve Algoritma Örnekleri

Programlamanın temelinde yer alan konulardan biri algoritmadır. Nedir algoritma, ne işe yarar? Algoritma, bir sorunu çözmek için kullanılan bir dizi adımdır.

Algoritma ve Algoritma Örnekleri
Muhammed el Harezmi algoritmanın babasıdır.

Programlamanın temelinde yer alan konulardan biri algoritmadır. Nedir algoritma, ne işe yarar? Algoritma, bir sorunu çözmek için kullanılan bir dizi adımdır. Bu adımlar belirli bir çözüm sağlayarak bir sorunu ele almak için benzersiz bir yöntem sunar. Bir algoritmanın matematiksel veya mantıksal kavramları temsil etmesi gerekmez, çünkü insanlar genellikle algoritmaları bu şekilde kullanırlar. İkinci dereceden formül gibi bazı özel formüller de algoritmadır.

Herhangi bir sorunu çözmeden önce onu iyice anlamak gerekir. Mesele sadece sorunu boyutlandırma meselesi değildir. Belirli girdilere sahip olduğumuzu ve belirli çıktılara ihtiyaç duyduğumuzu bilmek sorunu çözme noktasında bir başlangıçtır, ancak bu bir çözüm oluşturmak için yeterli değildir. Çözüm sürecinin bir kısmı,

» Başkalarının nasıl yeni sorun çözümleri oluşturduğunu keşfetmekten,

» Elimizde hangi kaynakların olduğunu bilmekten,

» Geçmişte benzer sorunlar için işe yarayan çözüm türlerini belirlemekten ve

» Ne tür çözümlerin istenen sonucu vermediğini düşünmekten

ibarettir. Bu aşamaları sırayla gerçekleştirmeyeceğinizi ve bazen daha fazla bilgi aldıktan sonra bir aşamayı tekrar ziyaret ettiğinizi fark edin. Bir problem çözümüne başlama süreci yinelemelidir. Elimizdeki sorunu iyice anlayana kadar yukarıdaki adımları tekrar etmeye devam ederiz.

Algoritma sözcüğü, Özbekistan'ın Harezm, bugünkü Türkmenistan'ın Hive kentinde doğmuş olan Ebu Abdullah Muhammed İbn Musa el Harezmi'den gelir.[4][5] Bu alim 9. yüzyılda cebir alanındaki algoritmik çalışmalarını kitaba dökerek matematiğe çok büyük bir katkı sağlamıştır. "Hisab el-cebir ve el-mukabala (حساب الجبر و المقابلة)" kitabı dünyanın ilk cebir kitabı ve aynı zamanda ilk algoritma koleksiyonunu oluşturur. Latince çevirisi Avrupa'da çok ilgi görür. Alimin ismini telaffuz edemeyen Avrupalılar "algorizm" sözcüğünü "Arap sayıları kullanarak aritmetik problemler çözme kuralları" manasında kullanırlar. Bu sözcük daha sonra "algoritma"ya dönüşür ve genel kapsamda kullanılır.

Kaynak: Wikipedia

Bir algoritma hangi özelliklere sahip olmalı?

1. Sonlu Olma Özelliği. Bir algoritma sonlu sayıda işlem yapıldıktan sonra sona ermeli. Burada sonlu sayıda kuraldan oluşmakla, sonlu sayıda işlem yapılmak birbiriyle karıştırılmamalı.

2. Kesin Olma Özelliği. Bir algoritmanın her adımı açık ve kesin bir biçimde tanımlanmış olmalıdır. Bu şekilde algoritmayı izlerken hiçbir yerde yoruma meydan verilmemelidir. Öte yandan açıklık ve kesinliği sağlamak için algoritma mutlaka bilgisayarın anlayacağı bir dille yazılmalıdır. İnsanla bilgisayarın birbirlerini açık ve kesin bir biçimde anlaması sorununun çözümü için adına “programlama dili” ya da “bilgisayar dili” denilen “resmi” diller tasarımlanmış bulunuyor. Her bilgisayarın kendi büyüklüğüne ve yetenek düzeyine göre, anladığı bir ya da birkaç “resmi” dili var. Algoritmaların bu dillerle yazılması gerekiyor.

3. Algoritmanın Girdisi. Bazı algoritmaların bir ya da birkaç girdisi, yani algoritmayı izleyecek bilgisayarın istenileni yapabilmesi için işe başlamadan okuması gereken nicelik ya da nicelikler söz konusu olabilir.

4. Algoritmanın Çıktısı. Bir algoritmanın bir ya da birkaç çıktısı (ürünü) olacaktır. Yukarıdaki bütün bu özelliklere ek olarak bir algoritmanın mümkün olduğu kadar geniş bir problem kümesine uygulanabilir olması istenir.

Algoritma Örnekleri

Akış Şeması (Diyagramı)

Algoritmaya dair bunca şey söyledikten sonra örneklere geçmeden önce algoritmaları ifade ederken kullanacağımız bazı şekiller hakkında da bilgi verelim. Algoritmada adım adım yapacağımız işlemleri akış diyagramı veya şeması denen bazı şekillerle görsel olarak ifade ederiz. Bu şemalar program yazma aşamasında bize yardımcı olur. Akış şemasında kullanılan sembolleri aşağıda görüyorsunuz. Aşağıdaki görsele almadığım ok sembolleri, akış şemasında yer alan şekiller arasındaki ilişkiyi belirtmekte kullanılır.

Algoritma  - akış şemasındaki şekiller ve anlamları

Bunları da belirttikten sonra ilk algoritma örneğimize geçebiliriz. Yazılan algoritmanın çalışıp çalışmadığını kontrol etmek için FLOWGORITHM programını kullanmanızı öneririm. Benim burada sizlerle paylaşacağım algoritma örneklerinin kaynak dosyalarını bilgisayarınıza indirip bu programla çalıştırabilirsiniz. Algoritma kaynak dosyaları örneğin numarasını taşımaktadır ve yazının en sonundadır. Buna dikkat ediniz.

Örnekler

1. Klavyeden girilen iki sayı için dört işlem hesaplayan programın algoritmasını yazıp akış şemasını çizelim.

Klavyeden girilen iki sayı için toplama, çıkarma, çarpma ve bölme yapan bir program yazacağız diyelim. Buna göre önce programın algoritmasını yazalım. Öncelikle işlemler için değişenler belirleyelim. Mesela toplama için T, çarpma için C, çıkarma için M ve bölme için B değişkeni tanımlayalım. Ayrıca girilecek sayılarımız x ve y olsun.

Buna göre yazacağımız program x+y, x-y, x*y ve x/y işlemlerini yapacak.

Algoritmamız şu şekilde olacaktır:

1. Başla
2. x sayısını klavyeden oku
3. y sayısını klavyeden oku
4. İki sayıyı topla
5. İki sayının farkını al
6. İki sayıyı çarp
7. İki sayıyı böl
8. Sonuçları ekrana yazdır
9. Dur

Burada x sayısını gir, y sayısını gir diye fazladan madde eklemeye gerek yok. Zaten 2. ve 3. adımlarda "klavyeden oku" diyerek bu sayıların klavyeden girileceğini ve programın bunları bu şekilde okuyacağını belirtmiş olduk. Önemli bir başka nokta sayıları tanımlarken tamsayı (integer) mı yoksa reel (real) sayı mı kullanacağımız önemli. Hesaplamalar arasında bölme işlemi var. Yani klavyeden sırayla 10 ve 2 sayıları girilse sorun yok ama 3 ve 2 sayıları girilirse ne olacak? Bunun için değişkenlerimizi reel olarak tanımlarsak sorun olmaz. Bir de bölme işleminde 0'a bölme hata verir. Klavyeden 3 ile 0 girilirse ne olacak? Burada iki yolumuz var. Ya en başta, x ve y sayıları girilecekken "0'dan farklı sayılar giriniz" şeklinde bir uyarı yazacağız veya mantıksal bir ifadeyi araya koyup 0'a bölünme durumunu ayrı ayrı değerlendireceğiz. Kolay ve sade olsun diye klavyeden girişte "0'dan farklı x sayısını giriniz" ve "0'dan farklı y sayısını giriniz" diyerek bunu engellemiş olalım. Algoritmanın akış şeması aşağıdaki gibidir.

Klavyeden girilen iki sayı için dört işlem hesaplayan programın algoritması ve akış şeması


2. Klavyeden girilen yarıçap değerine göre dairenin alanını hesaplayan programın algoritmasını yazıp akış şemasını çizelim.

Burada pi sabiti işin içine gireceği için algoritmamızı yazarken bir fonksiyon tanımlamamız gerekecek. Flowgorithm'de fonksiyon nasıl tanımlanır başlığında bu algoritmada kullanacağımız fonksiyonu tanımladığım için burada detaya girmiyorum. Bu yüzden algoritmayı, akış şemasını ve akış şemasının kaynak dosyasını sizlerle paylaşıyorum. Program yazarken programlama dillerinin bize sunduğu kolaylıklardan ötürü, fazladan, pi'yi ve trigonometrik fonksiyonlar gibi fonksiyonları bu şekilde tekrar tekrar yazmaya gerek kalmıyor. Bunları belirttikten sonra algoritmamızı yazalım.

1. Başla
2. Dairenin yarıçapı r'yi tanımla
3. r'yi klavyeden oku
4. Alan(r)=pi*r*r işlemini yap
5. Dur

Akış şeması aşağıdadır.

Dairenin alanını hesaplayan algoritmanın akış şeması

Akış şeması 2 (fonksiyon kullanılmadan yazılan algoritmanın akış şeması) aşağıdadır.

Dairenin alanını hesaplayan algoritmanın akış şeması


3. Klavyeden girilen sayının karekökünü bulan programın algoritmasını yazıp ve akış şemasını çizelim.

Yine oldukça basit bir program algoritması örneği. Hemen algoritmamızın adımlarını yazalım.

1. Başla
2. Sayı ve kok değişkenlerini tanımla
3. "Sayı"yı klavyeden oku
4. "Sayı"nın karekökünü hesapla
5. Dur

Akış şeması aşağıdadır.

Klavyeden girilen sayının karekökünü bulan programın algoritması ve akış şeması


4. Klavyeden katsayıları girilen ikinci derece denklemin köklerini bulan programın algoritmasını yazıp akış şemasını çizelim.

Şimdi biraz daha güzel bir örneğe geldik. İkinci dereceden bir denklemin, a sıfırdan farklıyken, $ax^2+bx+c=0$ formunda olduğunu biliyoruz. Bu denklemin diskriminant denen bir $\Delta$'ya bağlı olduğunu; $\Delta = 0$ ise çift kat kök (iki kökün aynı) olduğunu, $\Delta < 0$ ise denklemin gerçek köklerinin olmadığını (sanal köklerinin olduğunu) ve $\Delta > 0$ ise birbirinden farklı iki kök bulunduğunu lise derslerimizde öğrendik. Ayrıca $\Delta = b^2-4ac$ ile hesaplandığını hatırlıyoruz. Şimdi yazacağımız programda a,b,c katsayılarını kullanıcı girsin. Biz de buna uygun olacak şekilde bir algoritma ve akış şeması düzenleyelim. Önce değişkenlerimizi; a, b, c, ortakkok, delta, x1 ve x2 olarak belirleyelim. Ardından $\Delta$ sayısının durumunu değerlendirmesi için akış şemamıza if ifadesini koyup algoritmanın buna göre akmasını sağlamalıyız. Çünkü $\Delta$'ya bağlı üç farklı durum var. O yüzden iki kere if ifadesi kullanmak durumundayız.

1. Başla
2. a, b, c, ortakkok, delta, x1 ve x2 değişkenlerini tanımla
3. a,b,c sayılarını sırayla klavyeden oku
4. $\Delta = b^2-4ac$ ifadesini hesapla
5. $\Delta > 0$ ise kökleri bul ve ekrana yazdır
6. $\Delta > 0$ değil ise $\Delta = 0$ durumuna git
7. $\Delta = 0$ ise ortakkok değerini ekrana yazdır, değilse sanal köklerin olduğunu ekrana yaz
8. Dur

ikinci derece denklemin köklerini bulan programın algoritması ve akış şeması

İsterseniz kökleri bulmadan, sadece denklemin kökü var mı yok mu kontrol eden programı da yazabilirsiniz. Bunun algoritması ve akış şeması aşağıda.

1. Başla
2. a, b, c, delta değişkenlerini tanımla
3. a,b,c sayılarını sırayla klavyeden oku
4. $\Delta = b^2-4ac$ ifadesini hesapla
5. $\Delta > 0$ ise ekrana "İki farklı kök vardır" yaz
6. $\Delta > 0$ değil ise $\Delta = 0$ durumuna git ve $\Delta = 0$ ise ekrana, "Denklemin ortak kökü vardır" yaz, değilse ekrana "İkinci derece denklemin sanal kökleri vardır" yaz
7. Dur2nciderecekokkontrol.png


5. Klavyeden girilen santigrat (celsius) değerini fahrenheit değerine çeviren programın algoritmasını yazıp akış şemasını çizelim.

Hava sıcaklığı santigrat (celsius) veya fahrenheit kullanılarak ifade edilebiliyor. Batı ülkelerinin bazılarında hava durumunda hava sıcaklığı fahrenheit olarak veriliyor. Bu örnekte santigrat (celsius) değerini fahrenheit değerine çeviren programın algoritmasını yazacağız. Tersini, yani fahrenheit değerini santigrat değerine dönüştüren programın algoritmasını en aşağıda verdim. Bunun akış şemasını siz yazabilirsiniz.

1. Başla
2. Santigrat derecesi olarak c sayısını tanımla
3. c'yi klavyeden oku
4. $f=(c*9/5)+32$ değerini hesapla
5. f'yi ekrana yazdır
6. Dur
Akış şeması aşağıdadır.

santigrat (celsius) değerini fahrenheit değerine çeviren programın algoritması ve akış şeması

Eğer fahrenheit değerini santigrata çevirmek isterseniz, yukarıdaki adımları şöyle yazmalısınız:

1. Başla
2. Fahrenheit derecesi olarak f sayısını tanımla
3. f'yi klavyeden oku
4. $c=(f-32)*5/9$ değerini hesapla
5. c'yi ekrana yazdır
6. Dur.


6. Klavyeden girilen bir sayıyı tersten yazan programın algoritmasını yazıp ve akış şemasını çizelim.

Klavyeden bir sayı girilsin. Mesela 789 sayısı girilmiş olsun. Bunu 987 olarak yazdıran programı yazmak istiyoruz. Yapacağımız şey, döngü kullanarak sayıyı sürekli 10'a bölmek ve her bölünüşte kalanı en sağdan sola doğru yazmak. Yani 789 sayısını ilk defa 10'a böldüğümüzde kalan 9. Bunu yüzler basamağına yazacağız. 789 sayısını yine 10'a böleceğiz ve bu kez 8 sayısını onlar basamağına yazacağız. Sayıyı son kez 10'a böldüğümüzde kalan 7 ve bunu da birler basamağına yazıp, sayıyı ters çevirme işlemini tamamlayacağız. Sayımızın 3 basamaklı olduğuna ve 10'a bölme işlemini üç defa yaptığımıza dikkat edin. Mesela 1234 girilseydi bu kez dört defa 10'a bölme işlemi yaptıracaktık. O halde başlayalım.

1. Başla
2. sayı, k ve sonuc değişkenlerini tanımla
3. k=0, sonuc=0 olarak tanımla
4. Sayı değerini klavyeden oku
5. k, sayının 10'a bölümünden kalan olmak üzere, sonuc değişkenini 10 ile çarp ve k'yı buna ekle
6. Sayı değerini 10'a böl ve 4.adımdan itibaren işlemleri tekrarla
7. Dur
Akış şeması aşağıdadır.

bir sayıyı tersten yazan programın algoritması ve akış şeması


7. Klavyeden girilen iki sayı arasındaki sayıların karelerini ve bu kareleri toplayan programın algoritmasını yazıp akış şemasını çizelim.

Bir ara can sıkıntısından böyle bir şeyle uğraşmıştım. Aklıma şu geldi: 1'den 10'a kadar olan sayıların toplamını bulmak kolay. Peki 1'den 10'a kadar olan (1 ve 10 dahil) sayıların karelerini ve bu karelerin toplamını nasıl buluruz? Gayet kolay.

1. Başla
2. sayı, n, m, kare, toplam değişkenlerini tanımla
3. toplam=0 olarak tanımla
4. m ve n değerini klavyeden sırasıyla oku
5. for döngüsünde sayı değerini m'den n'ye kadar olacak şekilde tanımla
6. Döngünün her adımındaki sayıların karesini hesapla ve sayıların karesini ekrana yaz
7. n değerine gelene kadar 6. adımı tekrarla ve tüm kare sayıları topla
8. Dur
Akış şeması aşağıdadır.

karevetoplam.png


8. Çıkarma işlemini (-) kullanmadan çıkarma işlemi yapan programın algoritmasını yazıp akış şemasını çizelim.

Yine can sıkıntısından ötürü yaptığım şeylerden biri bu. Bu algoritmayı ilk yazdığımda şöyle bir itiraz geldi: E eksi işareti kullanma diyorsun ama -1'i kullanmışsın. -1 negatif sayıdır. Oradaki -'yi çıkarma işlemi olarak göremezsiniz. Yani negatif sayıları da esasında böyle tanımlarız. Örneğin -23 dediğimde aslında bu (-1)*23 demektir. Soyut matematiğin hayatıma kattığı güzelliklerden sadece biri bu. Bu detayı da verdiğime göre algoritmaya ve akış şemasına geçebiliriz.

1. Başla
2. fark, a, b değişkenlerini tanımla
3. a ve b sırayla klavyeden oku
4. $a < b$ karşılaştırmasının her durumu için fark=a+(-1)*b'yi hesapla ve farkı ekrana yaz
5. Dur
Akış şeması aşağıdadır. Burada niye her durumda fark=a+(-1)*b'yi yazdık derseniz, ufak bir hata yapmışım derim. Program yazarken bu hatayı düzeltirsiniz. Bu haliyle algoritma çalışıyor.

Çıkarma işlemini (-) kullanmadan çıkarma işlemi yapan programın algoritması ve akış şeması


9. Klavyeden girilen 2 sayı arasındaki tek sayıları ve bunların toplamını hesaplayan programın algoritmasını yazıp akış şemasını çizelim.

Bu örnekte for döngüsünü kullanacağız. Kullanıcı klavyeden iki sayı girecek. Mesela 7 ve 25 girdi diyelim. Bu 7 ve 25 dahil olmak üzere, o aralıkta ne kadar tek sayı varsa hepsi ekrana yazılacak ve sonra bunların toplamı ekrana yazılacak.

1. Başla
2. sayı, toplam, m, n değişkenlerini tanımla
3. toplam=0'ı tanımla
4. m ve n sayılarını sırasıyla klavyeden oku
5. for döngüsü içindeki if koşuluyla sayının 2'ye bölümünden kalanı kontrol et ve sayıyı ekrana yaz
6. n'ye gelene kadar 5.adımı tekrarla
7. Ekrana yazılan sayıları topla ve toplamı ekrana yazdır
8. Dur
Akış şeması aşağıdadır.

İki sayı arasındaki tek sayıları ve bunların toplamını ekrana yazan programın algoritması ve akış şeması


10. Klavyeden girilen sayının faktöriyelini bulan programın algoritmasını yazıp akış şemasını çizelim.

Basit örneklerden biri daha karşınızda. Bu örnekte while döngüsünü kullanacağız. Faktöriyel hesaplanırken, örneğin kullanıcı klavyeden 5 girdiyse 5!=5.4.3.2.1 şeklinde hesaplama yaptırtacağız. Bu yüzden sayı değişkenini azaltacağız. Döngü sayesinde, girilen sayıdan 1'e gelene kadar program çalışmaya devam edecek ve nihayetinde sayı değeri 1 olunca program çalışmayı durduracak.

1. Başla
2. sayı, fakt, i değişkenlerini ve fakt=1, i=1 değerini tanımla
3. sayı değişkenini klavyeden oku
4. fakt=fakt*sayı değerini hesapla ve sayı değerini 1 azalt
5. i değeri sayıdan küçük eşit olduğu sürece 4.adımı tekrarla, değilse 6.adıma geç
6. fakt değerini ekrana yazdır
7. Dur
Akış şeması aşağıdadır.

Klavyeden girilen sayının faktöriyelini bulan programın algoritması ve akış şeması


11. Klavyeden girilen iki sayının çarpımını sadece toplama işlemini kullanarak yapan programın algoritmasını yazıp akış şemasını çizelim.

Güzel bir örnek. Bu örnekte for döngüsünü kullanacağız. Hangi döngüyü nerede kullanacağız derseniz buna karar vermek tamamen sizin becerinize kalıyor derim. Burada, mesela 2 ve 3 sayıları girildiğinde, 2*3 işleminin sonucu 2'nin 3 defa kendisiyle toplanmasıyla bulunacak. Bu durumda 3 sayısını her adımda 1 azaltacağız. Nihayetinde 1'e ulaşınca program çalışmayı durduracak ve sonucu ekrana yazacak.

1. Başla
2. m, n, sayac değişkenlerini ve sayac=0 değerini tanımla
3. m ve n değerlerini sırasıyla klavyeden oku
4. sayac=sayac+m işlemini yap
5. n değeri 1 değilse n'yi azalt ve 4.adıma git, n=1 ise 6.adıma geç
6. Sayacı ekrana yazdır
7. Dur
Akış şeması aşağıdadır.

çarpma operatörü kullanmadan çarpma işlemi yapan programın algoritması ve akış şeması


12. Klavyeden girilen iki sayıyı, bölme işlemi kullanmadan çıkarma işlemi kullanarak birbirine bölen programın algoritmasını yazıp akış şemasını çizelim.

Bu da yukarıdakinin bir benzeri. Bu sefer bölme işlemini çıkarma işlemiyle yapacağız. While döngüsünü kullanacağız. Burada dikkat edilmesi gereken nokta, bölünen sayının daima bölenden büyük olması ve işlemin sadece pozitif tamsayılarda kullanılabilmesi. Yaptıracağımız işlem şu şekilde olacak: Bölünenden böleni çıkartacağız ve bölünen bölene eşit veya ondan büyük olduğu sürece bu işlem sürecek. Ne zaman bölünen bölenden küçük olacak, program sonucu ekrana yazılacak. Yalnız burada dikkat edilmesi gereken iki husus var. Bunlardan biri bölen olarak 0 değerinin girilmemesi. Çünkü 0'a bölme, programda hataya sebep olacaktır. İkincisi ise birbirine tam bölünmeyen sayılarda tam sonuç vermeyeceği. Örneğin klavyeden sırasıyla 5 ve 2 girildiğinde sonuç 2 olarak görünecek. Ayrıca bölünen sayının bölenden mutlaka büyük olması gerekecek. Mesela sırasıyla 6 ve 9 girilirse sonuç 0 olur. Bunları garanti etmek ve algoritmanın sadece olmasını sağlamak için kullanıcıya verdiğimiz mesajları uygun şekilde düzenlemekle yetineceğiz. Mod fonksiyonu kullanmadan mod hesaplamak için de buna benzer bir algoritma yazılabilir.

1. Başla
2. m, n, sayac değişkenlerini ve sayac=0 değerini tanımla
3. m ve n değerlerini sırasıyla klavyeden oku
4. m=m-n değerini hesapla ve her defasında sayac değerini 1 attır
5. m, n'den büyük eşitse 4.adımı tekrarla, değilse 6.adıma geç
6. Sayacı ekrana yazdır
7. Dur
Akış şeması aşağıdadır.

bölme işlemi kullanmadan çıkarma işlemi kullanarak birbirine bölen programın algoritması ve akış şeması


13. Klavyeden girilen sayının kaç basamaklı olduğunu belirten programın algoritmasını yazıp akış şemasını çizelim.

Yine güzel örneklerimizden biri. Klavyeden girdiğimiz sayının kaç basamaklı olduğunu bulan bir program yazacağız diyelim. Bunun algoritmasını yazarken sayının 10'a bölümünü dikkate alacağız ve do döngüsünü kullanacağız.

1. Başla
2. sayı, basamaks ve kalan değişkenleri ile basamaks=1 değerini tanımla
3. Sayı değerini klavyeden oku
4. Do döngüsü içinde sayıyı 10'a böl ve basamaks değerini 1 arttır
5. Sayı 10'dan büyük ve eşit olduğu sürece 4.adımı tekrarla, değilse 6.adıma geç
6. basamaks değerini ekrana yazdır
7. Dur
Akış şeması aşağıdadır.sayının kaç basamaklı olduğunu belirten programın algoritması ve akış şeması


14. Klavyeden girilen sayının Armstrong sayısı olup olmadığını tespit eden programın algoritmasını yazıp akış şemasını çizelim.

Armstrong sayısı tanım olarak, sayının basamaklarında yer alan sayıların kuvvetleri toplamının sayının kendisine eşit olması şeklinde ifade ediliyor. Biraz karmaşık olan bu tanımı şöyle anlatayım. Mesela 407 sayısı bir Armstrong sayısıdır. Çünkü $4^3+0^3+7^3=407$ olmaktadır. 1 hariç tek basamaklı hiçbir sayı Armstrong sayısı değildir. Ayrıca 2 basamaklı Armstrong sayısı da yoktur. 4 basamaklı sayılarda 1634 bir Armstrong sayıdır. Çünkü $1^4+6^4+3^4+4^4=1634$'tür. Bu örnekte sadece 3 basamaklı sayıların Armstrong sayısı olup olmadığını kontrol eden algoritmaya yer vereceğiz. Bununla beraber sayının kaç basamaklı olduğunu tespit eden fonksiyonu da bu algoritmaya dahil edip kontrolü tüm sayılar için yapacak bir algoritma da yazabiliriz. Fakat şu an zamanım olmadığı için bu tarz bir algoritma yazmıyorum. Aşağıdaki ikinci dosyada sayı basamağını da kullanıcının girmesi şartıyla, bir basamaklı sayılar hariç tüm sayılar için Armstrong sayısı kontrolü yapan ikinci bir algoritmaya yer veriyorum. Bu ikinci algoritma, 1 için çalışmayacak. Zaten girilen sayının en az iki basamaklı olmasını istiyoruz. Vaktim olduğunda bu örneği daha güzel şekilde güncellemeyi düşünüyorum.

1. Başla
2. n,r toplam ve sayı değişkenleri ile toplam=0 değerini tanımla
3. Sayı değerini klavyeden oku
4. r=n%10, toplam=toplam+(r*r*r) ve n=n/10 işlemlerini yap
5. n>0 ise 4.adımı tekrarla, değilse 6.adıma geç
6. sayı=toplam olup olmadığına bak
7. sayı=toplam ise ekrana "Sayı Armstrong sayısıdır", değilse "Sayı Armstrong sayısı değildir" ifadesini yaz
8. Dur
Akış şemaları aşağıdadır.

girilen sayının Armstrong sayısı olup olmadığını tespit eden programın algoritması ve akış şeması girilen sayının Armstrong sayısı olup olmadığını tespit eden programın algoritması ve akış şeması

Dosyalar