You are on page 1of 13

TD Software

ALGORTMA

MEHMET KURT
kurt.mehmet@gmail.com

Ne yapsak? Nereden Balasak?


Programcla balamay ok istiyorsunuz ama nereden balayacanz bilemiyorsunuz. yleyse buyurun ilk adm beraber atalm.
anal alemin en cra kelerine kadar yaylm olan pek ok forum sitesinde, bilgisayarla veya biliim sektryle yeni tanan gen arkadalarmzn programlama renme heveslerine ska tank oluyoruz. Bu alanda sorulan en mehur soru ise sanrm udur: Ben programlama renmek istiyorum, hangi dili tavsiye edersiniz? Beni ben olmaktan karan, gzlerimin yuvasndan kp baka diyarlara intikaline sebep olan bu soruya, u cevab layk gryorum: Hepsini! Gerekten de nemli olan ve balang olarak nem ihtiva eden konu, herhangi bir programlama dili deildir. nemli olan programlama mantn kavramaktr. Rahatlkla syleyebiliriz ki programlama mantn kavrayan bir yiidin srt, yedi cihan bir araya gelse bile bir daha yere gelmez! Yani bir ey ancak bu kadar mhim olabilir(!) in geri kalan ksm ise tm dillerde benzerlik gsterir, sadece baz yntemlerinde ve komutlarnda farkl kullanmlar vardr. te bu kede, en basit seviyeden balayarak adm adm programlamaya dalp, daha karmak yaplara doru yelken aacaz. Bu yaz dizisi aslnda ok nceleri internette balamt. Fakat bir takm teknik sorunlar nedeniyle bitirilemedi. Hatta ortasna bile gelinemedi! Ksmetse, PC World ile beraber sonunu getireceiz! Yeri gelmiken, bu keye konu tekil eden alanda daima bilgi ve tecrbelerinden faydalandm sayn hocam Do. Dr. Alpay Krlanga ve sayn hocam Prof. Dr. Urfat Nuriyeve teekkr etmeyi bir bor bilirim. Soru: Peki gzel aabeyciim... Bu program-

lama mant da nedir? Cevap: Hmm.. yi dinle evladm. Sk dur, balyoruz. Heyecan Ykl Tepki: Yihhu!

Bilgisayar Dnr m?
Hayr! yle bir ey yok. Fakat bilgisayar anlar! Peki acaba dnmeden, muhakeme etmeden nasl anlar? Demek ki bu anlama, bizim anlamamzla e deer bir anlama deil. Kavramlar karmasn, biz bu anlama biimine bilgisayarms anlay diyelim.

Dnmez Ama Unutmaz!


Bir bilgisayarn hafzas ok keskindir. Verdiiniz verileri, emirleri, bu emir ve verilerin verili srasn asla unutmaz. Bilgisayarms anlayta dikkat edeceimiz en nemli hususlardan biri de bu zeliktir. Karmzda bizi zaman zaman (tamam tamam, ou zaman!) hayrete drecek muazzam bir hafza ve bu hafzadan kaynaklanan bilgisayar akl var ki onunla rekabet etmeyin!

Algoritma Nedir?
Algoritma, hedefe ulamak iin izlenen yoldur. te biz de bu kede, hedefe ulamak iin bilgisayarms anlay kurallar dahilinde bir takm dnceler reterek yolumuzu bulacaz! Bu retime de balamak iin nce bakkala gideceiz! Soru: Hayda... Ne bakkal abi? Cevap: Dur, tela etme. Alttaki soruyu oku! Cevaba Cevap: Olur abi.. ne yapalm, patron sensin. Szde programlama reneceiz sayende... Soru: Evinizde, bir apartman dairesindesiniz. Size

216 PC World OCAK 2006

ALGORTMA

bir ekmek almanz sylendi. Paray alp ekmei eve ulatrana dek yaptklarnz nelerdir? Bunu yeni domu ama syleneni yapmaya muktedir, eylemlerden bi-haber bir bebee retecek tarzda ifade edebilir misiniz? Durun durun! Bir yere gitmeyin. Gayet ciddi bir sorudur. Yalnz bebek burada nemli bir nesne. Bebek hi bir eyi bilmeyen, btnyle aklamaya muhta bir varlk. imdi dnn ve cevap verin. Cevap : 1. Paray alrm. 2. Merdivenlerden inerim. 3. Bakkala giderim. 4. Ekmei alr, paray veririm. 5. Varsa parann stn alrm. 6. Bakkaldan karm. 7. Apartmana gelirim. 8. Merdivenlerden karm. 9. Ekmei evdekilere veririm. 10. Ohh.. bitti.. Televizyonun karsna geerim :P Tamam m abi, oldu mu? Ekmek var artk! Cevaba Cevap: Olmad! Cevaba aknlk nlemi eren Bir Soru: Ana! Niye abi? akn Soruya Mantkl Aklama: Neden olmad? Ne dedik bata? Bunu bir bebein (ki o bebek yeni domu olan, hibir kavram bilmeyen, yap dediklerini yapacak kudrete sahip olan ama yapmas gerekenleri ve yapma esnasnda doacak kavramlar nceden renme zorunluluu olan bir bebektir) anlayabilecei tarzda anlatacaksn. Bu garip bebek, paray nereden bilsin? Merdiven de neyin nesidir? Ya bakkal demek ne demek? Sanki ekmei anneciinin karnnda da m yiyordu? Acaba bu al veri de ne ola ki? Ya apartman? Bu arada 10. maddeyi de grmedim sanma. Rica ederim o maddeyi de tekrar yazma. Sululuun lzumu yok. zr: Peki abi, zr dilerim. Yeniden deneyeyim mi? Af: Tamam tamam, neyse nemli deil. Dene bakalm. Yeni Cevap: PARA bir saydr. ( Say nedir? kr ki baz kavramlar birileri bilgisayara bir kerelie mahsus olarak anlatm! Sayya benzer baka baka kavramlarda bilgisayar tarafndan bilinmektedir. Bunlara deiken tipleri denir. Yeri geldiinde tekrar deineceiz. Aada; ara, temel ihtiya maddesi gibi kavramlarn nceden tip olarak bilindiini

var sayacaz.) DARE kaldmz yerdir, evimizdir. APARTMAN bir ok dairenin bulunduu kalma yeridir. MERDVEN bir aratr. EKMEK temel ihtiya maddesidir. BAKKAL alveri yaplan yerdir. ALIVER Parann veya baka nesnelerin baka para ve nesneler karlnda el deitirmesidir. (Tamam, garip oldu ama idare edin artk) 1. Paray alrm. 2. Merdivenlerden inerim. 3. Bakkala giderim. 4. Ekmei alr, paray veririm. 5. Varsa parann stn alrm. 6. Bakkaldan karm. 7. Apartmana gelirim. 8. Merdivenlerden karm. 9. Ekmei evdekilere veririm. Tamam m abi, bitti mi? Yeni Cevaba Cevap: Tabi ki hayr. Yeni Cevaba aknlk ve Biraz da syan nlemi eren Bir Soru: Ama abi, bu sefer nerede hata yaptm? Tanmlama dedin yaptk... Sakin ve Anlayl Tavr: Seni anlyorum, bir an nce sonuca gelmek istiyorsun ama hl bu admlar kime anlattnn farknda deilsin. Bebek diyorum sana. Anlamyor musun? Syler misin bana paray aldn, merdivenlerden indin! Sizin evde kap yok mu kap? Kapdan kmak yok mu? Sakin Tavra akn Cevap: Abi o zaman n tane ey yazmamz lazm buraya. Sadece dairedeki kap deil, apartman kaps, bakkal kaps... Bunlarn da devreye girmesi lazm. Etraf kapdan geilmiyor ki...nne gelen kap yapyor... kinci Sakin Tavr ve Tevik: Ha unu bileydin! Ben zaten senin bu ii kvracan biliyordum. O halde devam et bakalm... Tekrar dene... Hadi aslanm... Gaza Geli: Tabi ya... Yaparm ben... Bak izle abi... PARA bir saydr. DARE kaldmz yerdir, evimizdir. APARTMAN bir ok dairenin bulunduu kalma yeridir. MERDVEN bir aratr. EKMEK temel ihtiya maddesidir. BAKKAL alveri yaplan yerdir. ALIVER parann veya baka nesnelerin baka para ve nesneler karlnda el deitirmesidir. (Garip olduunu daha nce sylemitik :) ) DARE KAPISI daireye, evimize izinsiz girilmesin diye yaptrlan bir nlemdir.

APARTMAN KAPISI apartmana izinsiz girilmesin diye yaptrlan bir nlemdir. BAKKAL KAPISI bakkala izinsiz girilmesin diye yaptrlan nlemdir. 1. Paray alrm. 2. Daire kapsndan karm. 3. Merdivenlerden inerim. 4. Apartman kapsndan karm. 5. Bakkala giderim. 6. Bakkaln kapsndan girerim. 7. Ekmei alr, paray veririm. 8. Varsa parann stn alrm. 9. Bakkaln kapsndan karm. 10. Apartmana gelirim. 11. Apartman kapsndan girerim. 12. Merdivenlerden karm. 13. Daire kapsndan girerim. 14. Ekmei evdekilere veririm. kr.. Herhalde bitti artk. Deil mi? Temkinli Cevap: Bir ey syleyeceim ama hemen alevlenmeyeceksin. Anlama: Peki abi. Anlamaya Gre Cevap: Hani bu daireden karm, merdivenden inerim, bakkala giderim filan diyorsun ya... Merakl Bekleyi: Eee? Merakl Bekleyie Son: O nasl oluyor? Onu nasl yapyorsun? Gereksiz gibi Grnen Cevap ve Akabinde Soru: Bu da soru mu abi? Tabi ki yryerek... Baka yolu mu var bunun? Gereksiz Gibi Grnen Cevaba Mantkl Aklama: Hani biz bu grevi, retilen her eyi yapmaya muktedir ama retilmeyen eyleri de bilmeyen bebee sylyorduk ya... kinci Merakl Bekleyi: Eee? kinci Merakl Bekleyie Son: Bu bebek nasl gidileceini nereden bilsin? Belki de emekleyecek? Burada biz, yrmek fiilini gzden karyoruz. Yani bebek arasnda mesafe olan iki nokta arasnda seyahat etmek iin yrmesi gerektiini ve bu yrme ilemini nasl yapacan bilmiyor. Dolaysyla bebee ne zaman yrmesi gerektiine karar vereceini ve bunu nasl yapacan da retmek gerekiyor. Uzlama: Doru. teleme: stersen, bundan sonraki ksm bir sonraki sayda inceleyelim, ne dersin? kinci Uzlama: Peki abi, nasl istersen. Bakkala hemen gidip geleceiz sandnz deil mi? in aslnn bu kadar da kolay olmadna, karmza kacak yeni karmaalara nmzdeki sayda da tank olmaya devam edeceiz! Cevaplarda grmek zere...

OCAK 2006 PC World 217

ALGORTMA

MEHMET KURT
kurt.mehmet@gmail.com

Algoritmik Yryelim Arkadalar!


Programc olma yolunda salam admlarla yryoruz. Bu iin algoritmasn anlamak iin ilk admlarmzla yrmeyi reneceiz.
rogramcla attmz ilk admda (ki burada getiimiz sayda denilmek isteniyor) dnmeyen bir varla (ki burada bilgisayar kast ediliyor) bir eyler anlatmann olduka zor olduunu ama imkansz olmadn grmtk. Bakkala gidip ekmek dahi alamamtk. Niye? Gidememitik de ondan! Bu ay, artk gitme eylemini gerekletirebileceimizi umuyorum. Yaznn bundan sonraki ksmn daha verimli bir ekilde takip edebilmek iin dizinin ilk episodeunu (ki burada StarWars iin gizli bir reklam sz konusu) http://www.mehmetkurt.com adresinden inceleyebilirsiniz.

Soru: Tam olarak nerede kalmtk abi? Kzgn Cevap: Tabi dersine almazsan nerede kaldn hatrlamazsn. zr: Gerekten ok haklsn abi. zr dilerim. ok pimanm. Acma Hissi ve II. Cevap: Ah canmmm... Neyse bover. unu anlamtk: Bilgisayar, yeni domu, eylemlerden bi-haber ve syleneni yapmaya muktedir bir bebek gibiydi. Ona yapaca her eylemi nceden retmeli ve eylemlerde kullanaca her terimin ieriini nceden aktarmalydk. Hatrlama: Hah... Hatrladm abi, bir sr tanmlar yapmtk aamalardan nce. En son bakkala nasl yryeceimizi grecektik. Kutlama ve Beklenmedik Bir Soru: Tebrik ederim. imdi syle bakalm, acaba biz yrme eylemini nasl gerekletiriyoruz? Yani nasl yrrsn?

Cevap: Abi ite ayaklarmzla... Bir sa bir sol gidiyoruz yle. Destek ve Akabinde Soru: Evet evet... Aferin... peki nereye kadar? Cevap: Nereye kadar... Hmm abi varacamz yere kadar ite. Beklenen Cevaba Ulama Heyacan: Evvet! te bu! Varacamz yere kadar bir sa bir sol adm atarz. imdi bunu algoritmaya dkebilir misin? Cevap: Deneyelim: 1. Adm atarm. 2. Hedefe geldim mi diye kontrol ederim. 3. Hedefe geldiysem dururum, gelmediysem devam ederim. (Bir adm daha atarm.) 4. Hedefe geldim mi diye kontrol ederim. 5. Hedefe geldiysem dururum, gelmediysem devam ederim. (Bir adm daha atarm.) 6. Hedefe geldim mi diye kontrol ederim. 7. Hedefe geldiysem dururum, gelmediysem devam ederim ( Bir adm daha atarm.) Bak Gibi Mdahale: Dur! Korkulu ve Merakl Bir Bekleyiin Ardndan Cesaretli ve ekingen Bir Soru: Ne oldu abi? Neden dur dedin? Esrarengiz Bir Soru: Bir ey fark etmedin mi? Esrarengiz Soruya Garip Cevap: Evet abi... Fark ettim. Esrarengiz Sorunun Devam: Nedir fark ettiin ey? II. Garip Cevap: Ses yani uak abi... Ev havaalanna yakn ya. O bakmdan. Uak geti. Onu mu diyordun? Esrarengiz Soruya Aklama: Hayr be! Yuka-

220 PC World UBAT 2006

ALGORTMA

rda yazdn algoritmadan bahsediyorum. Orada bir ey fark ettin mi? Beklenen Cevap: Evet, ok uzayacak bu. Ne zaman duracak bilmiyorum. Yani sanki hi bitmeyecekmi gibi, devaml ilerliyor. Bir yandan da dnyorum, elbet hedefe ulaacaz bir ekilde ve bir yerde de sonlandrmak lazm. Kutlama ve Detayl Aklama: Gerekten tebrik ederim. Buldun. imdi de bunun iin sana Dng kavramndan bahsedeyim. Algoritma esnasnda baz ilemler herhangi bir ana kadar baz koullara bal olmak kaydyla sreklilik arz edebilir. Yani baz ilemleri baz koullar salanana kadar tekrarlamak zorunda kalabilirsin. Bu tr yaplarda da Dng kavramndan bahsetmek gerekir. Burada hangi admlar tekrarlyor, bir grelim: Hedefe geldim mi diye kontrol ederim. Hedefe geldiysem dururum, gelmediysem devam ederim. Hedefe geldiysek mesele yok. Fakat gelmediysek devam edeceiz. Neye devam edeceiz? ... Htt... Huu... Burada msn? Cevap: Buradaym abi, heyecanla dinliyorum. Sitem: Ne diye cevap vermiyorsun o zaman? Neye devam edeceiz? Siteme Cevap: Neye olacak abi, tabi ki adm atmaya. Beklenen Cevaba kinci Kez Ulama Heyecan: Evvet! te bu. Adm atmaya! Peki o nerede balam? Heyecana Sakin Tavr: Nerede olacak, ilk admda. Beklenen Cevaba nc Kez Ulama Heyecan ve Kutlama: Evvet! Aferin sana. Ben zaten biliyordum senin bu ii kvracan. Neyse... Demek ki biz Devam Et derken aslnda ilk adma yeniden dn demek istiyoruz deil mi? Anlama Belirtisi: Haaa... doru. Dng eren Detayl Aklama ve Akabinde Bir Tuzak: Bu durumda biz senin yazdn algoritmay yle yazabiliriz: 1. Adm atarm. 2. Hedefe geldim mi diye kontrol ederim. 3. Hedefe geldiysem dururum, gelmediysem ADIM 1e giderim. Sence oldu mu? Tuzak Soruya Uyank Cevap: Olmamtr. Olsayd zaten sormazdn abi. Nedir olmayan?

Uyank Cevaba Detayl Cevap: Evet, olmad. yle desek: Ya ilk anda, yani algoritmada daha ilk admda varmamz gereken yerde isek? Birinci admda herhangi bir koul olmadndan, o an bulunduum yer hedef olsun veya olmasn adm atacaktk! Yani asla koul sonlanmayacakt. Olduka ok (yani sonsuz!) sayda dngye girmi olacaktk. Bu durumu dzeltmek iin yle bir sralama yapmak zm olabilir: 1. Hedefe geldim mi diye kontrol ederim. 2. Hedefe geldiysem dururum, gelmediysem devam ederim. ( Sonraki adma geerim) 3. Adm atarm. 4. Hedefe geldim mi diye kontrol ederim. 5. Hedefe geldiysem dururum, gelmediysem ADIM 3e giderim. Burada geri dnn 1. adma deil 3. adma olduuna dikkat ediniz. Peki imdi bitti mi yrme ii? ekinik Cevap: Evet diyesim var ama, sorduuna gre olmad gibi de bir his var iimde. ekinik Cevaba Cesaretlendirme: Korkma! Sen bu ii kavradn. Oldu mu? Cesaretli ve Net Cevap: Evet! Net Cevaba Deilleme: Hayr! Deillemeye aknlk: Allah Allah... Niye abi? akn Cevaba Sakinletirici Cevap: Evet, bir bakma oldu ama... Adm nedir? Yani burada adm da tanmlarsak mis gibi olacak. Gereksiz Soru: Mis nasl bir ey abi? Gereksiz Soruyu Duymam Gibi Davranma ve Aklamaya Devam: Yrrken farknda olmadan u ilemleri yaparz: Bir ayamz kaldrr dierinden az teye tarz. Sonra kontrol ederiz... Acaba geldik mi diye. Gelmediysek dier ayamz yere basan ayamzdan daha ileriye gtrr ayn koulu deneriz. Bu ilem bu ekilde dner gider. Dolaysyla yrme ilemini toparlamak gerekirse, yle bir algoritma yazabiliriz: Hedef Yer varlacak olan yerdir. 1. Bulunduum yer hedef yer ise dur, deilse devam et (Sonraki adma ge). 2. Sa ayan kaldr (Sol da olabilirdi, biz sa ile balayalm da ilerimiz ters gitmesin). 3. Sol ayandan daha ileriye uzat. 4. Aa indir. 5. Yere bastnda bulunduun yer hedef yer ise Adm 9a git, deilse de-

vam et (Sonraki adma ge). 6. Sol ayan kaldr ve sa ayandan daha ileriye uzat. 7. Aa indir. 8. Yere bastnda bulunduun yer hedef yer ise Adm 9a git, deilse Adm 2ye git (Yani yrmeye, admlamaya devam et). 9. En son yere basan ayann yanna gerideki dier ayann yanna getir ve dur.

Ne yapyorsun? Niye ayaktasn?


Aklama eren Cevap: Deniyorum abi algoritmay, iletiyorum yani. Bakalm doru mu diye... Sen soracaksn nasl olsa imdi oldu mu diye. Denemeye Dayanma: Bravo, evet, dene bakalm. Ben de szle ileteyim. Eer bulunduun yerde isen hi yrmeye balamaman gerektiinden Adm 1de dururusun. Yani sonsuz dngye girmeyi engelledik burada. Sa ayamz hareket ettirdik ve ilk admmz attk! Aa indirdiimizde hedefe gelip gelmediimizi sorguladk ki bou bouna ileri gitmeyelim! (Bouna dememiler aklsz ban cezasn ayaklar eker diye. yi ki bu ilk adm yazdk yoksa epey yryecektik!) Hedef yere geldi isek 6, 7 ve 8. admlar atladk ve dier ayamz yanmza ekerek durduk. Gelmediysek adm sras dier ayaa geti! Sol ayamzla da gelmediysek hareket sras dier ayakta, yani sada, yani adm 2de! aknlk ve Merak: Nasl yani bitti mi? Hayret! aknlk ve Merak Giderici Cevap: Tabi ki daha detayl olabilirdi. Ama kabaca biz bu ekilde yryoruz. imdi sra geldi ampiyonlua... I ey bu yrmeyi Bakkala Gidi Algoritmasna koymaya... Esrarengiz Soru: Abi bir ey fark ettin mi? ntikam: Neyi, ua m? Nihaaa... Esrarengiz Soruya Kendi Kendine Cevap: Yok abi, yerimiz bitti. Farkna Var: Hmm... Doru. Hay Allah nasl da geti zaman... ey yani nasl da bitti alan... Gereki Soru: Ee nasl koyacaz bunu imdi bu bakkala gidi algoritmasna? Mecburi zm: Artk dier sayya kald. Yapman gereken dier sayy heyecanla beklemek, bak gr neler olacak...

UBAT 2006 PC World 221

ALGORTMA

MEHMET KURT
kurt.mehmet@gmail.com

Biraz Daha Abartsak m?


Artk ekmei, yrmeyi filan braksak da 3 ay sonra bilgisayar dergisinde programlamaya bir girsek diyorum... Ama giremiyorum.
aptmz birok eyi (yrmek vs.), dnerek ve planlayarak yapmaya kalktmzda kendi iimizde inanlmas g bir brokrasi ile karlaacamzn farkna geen yazlarmzda varmtk. (Ki bu yazlar www.mehmetkurt.com adresinden temin edilebilmektedir.) Artk illaki vurgulanmas ve kavranmas gereken bu adm adm ve sfrdan anlayn bu yazmzla tamamlayp hedefe doru salam admlarla yol alacaz. Adm dedim de aklma geldi. (lk defa adm demediimin farkndaym ama bir ekilde de konuya girmem lazm deil mi?) Geen yazmzda, bakkala giderken yrmenin nerede yer alacan ayarlayacamz beyan etmitik. Geri bu bir seim vaadi deildi ama biz yine de szmzde duralm! Sevin Nidalar: Yihhuu! nemli Hatrlatma ve Voltran (Hey gidi gnler hey!) Hissi: Bu noktada ocak ve ubat saylarnn son iki algoritmasn hatrmza getirmek gerekiyor. imdi bu ikisini birletireceiz. Endie Ykl ve Yerinde Bir Soru: Burada kayglandm bir husus var benim abi. Bizim bu yrme olayn her yere yazmamz gerekiyor. Yani uraya giderim buraya giderim... Ve bu ifadeler neredeyse ilk algoritmann her

satrnda var! Her birine ayr ayr yrmeyi yerletirirsek bizim halimiz acep nicedir? Endie Ykl ve Yerinde Soruya Hak Verme ve Endieyi Giderme: ok doru, tam da ben soracaktm, laf azmdan aldn, benden ok yaayacaksn. Tam bu noktada Fonksiyon veya Procedure olarak adlandrabileceimiz yaplarla ilgilenmeliyiz. Programlama esnasnda yaps temelde ayn olan baz ileri farkl baz deerleri iin tekrarlayabiliriz. Mesela yrme ilemi (fonksiyonu, procedure) temelde ayn ekilde cereyan eder ama farkllk arz eden deer nereye yrdndr. Bunu ifade etmek iin yle bir yap kullanalm: Yr (Kap): Burada esas fonksiyon YRdr. Parantez iinde belirttiimiz ise onun deeri yani parametresidir. Elbette yrme ileminde baka farkllklar da vardr. Mesela hz! 1 ok yava, 2 daha hzl ve saylarn artarak yrme hzn belirttiini dnelim. Yr (Kap, 3): Bu da bize 3 iddetinde kapya doru bir yrme ilemi yaplacan belirtiyor. Yani birden fazla farkl deer olabilir! Doal olarak bunlar yrme algoritmasna koymak gerekir. imdi son kez yrme algoritmasn yazalm ve bahsettiimiz deerleri nasl kullanacamza dikkat edelim. Maziye Dair Bir Merak: Abi... Hi espri yap-

206 PC World MART 2006

ALGORTMA

myorsun? Ciddi Aklama: Buralar ok nemli ya, konu dalmasn diye yapmyorum. Geen saydaki son algoritma u ekilde dzenlensin:

EYLEM YR (HEDEF YER, HIZ)


HEDEF YER varlacak olan yerdir. HIZ ileri gidiin derecesidir. 1. Bulunduum HEDEF YER ise dur, deilse devam et. (Sonraki adma ge) 2. Sa ayan kaldr. 3. Sol ayandan HIZ iddetinde daha ileriye uzat. 4. Aa indir. 5. Yere bastnda bulunduun yer HEDEF YER ise Adm 9a git, deilse devam et. (Sonraki adma ge) 6. Sol ayan kaldr ve sa ayandan HIZ iddetinde daha ileriye uzat. 7. Aa indir. 8. Yere bastnda bulunduun yer HEDEF YER ise Adm 9a git, deilse Adm 2ye git. 9. En son yere basan ayann yanna gerideki dier ayann yanna HIZ iddetinde getir ve dur. Yr (Kap) dediimizde, HEDEF YER yazlan yerlere KAPI gelmi gibi olacak. Artk bu tanmlamay yaptktan sonra, her hangi bir yere yryecek iken merammz tek satrla ifade edebileceiz. Erken Rahatlama: Ohh bea! Bir Soru: Rahatladn ama bamza ne belalar atnn farknda deilsin! Korku, Endie ve Daha Neler Neler: Estafurullah abi, ben ne yaptm! Hay Allahm sen bizi koru! Korku Artrc Aklamalar: lk saymzdaki son algoritmada, kapdan karm diye bir ifade vard. Ya kap kapalysa? Demek ki kmadan nce onu kontrol etmek ve kapalysa kapy amak gerekiyor. Kapdan yryerek ktk diyelim (Nasl olsa nasl yryeceimizi biliyoruz ya!). Merdivenlerden ineceimizi beyan ettik. Nasl ineceiz? Merdivenden nasl ineceimizi tanmlamadk ki? Onun iin BASAMAK N gibi bir fonksiyon gerekiyor elbette. Dehet inde leri Grl Bir Kavrama Belirtisi: Aman Allahm! Abi onun k da var! Kavrama Belirtisine Destek ve Korku Artrc Soru ve Aklamalara Devam: Doru! Demek ki ilerisi iin BASAMAK IK gibi bir fonksiyon da tanmlamak gerekiyor. Yanl hatrlamyorsam ilgili algoritmada bakkala giderim diye bir

ifade de vard. Maksat spor olsun diye soruyorum, nerede bu bakkal? Ancak Dehete Kaplm ve Ne Dediinin Farknda Olmayan Bir nsann Verebilecei Bir Cevap: Niye sordun ki imdi abi, aaya iniyorsun, sada dorudan git, ilk sadan sonraki ikinci sol sokakta. Anlayl Tavr: Onu biliyorum. Sana onu sormuyorum! Bu bilgisayar bebek gibi. Nereden bilecek bunu? Nerede olduunu sylemedik ki? En azndan bu blgenin corafi yapsn retmek lazm demek istiyorum! aresizlik: Yaa.. Alayacam imdi ya! Ben programlama renemeyeceim galiba! Umut Dolu Yarnlar Hatrlatma: Hayr, reneceksin. Bunlar sana ocuk oyunca gibi gelecek, kendi web programn, kendi adres defterini, kendi hesap makineni yapacaksn, nice sertifikalar seni bekliyor! Mutluluk Gzyalar: Saolasn abi, asla midimi kesmeyeceim. Devam edelim hadi! Tekrar Korku Artrc Sylemler: Bakkaln nerede olduunun corafi bilgisi bir ekilde ifade edilse bile oraya nasl gideceimize dair bir takm retiler de gerekli. Neyse ki biz o kadar derin sularda gezmeyeceiz bu blmde. Sevin Nidalar: Yihhuu! Zaten suda gezilmez abi, yzlr. Korku Artrc Baka Sylemler: te yandan, bakkala gittiimizde al veri iin dahi bir fonksiyon oluturulabilir. Bunun iin de baz deerler (parametreler) vereceimiz para, alacamz mal, para st vs. olabilir. Kabaca yazalm: EYLEM ALI-VER YAP(Verilen Para, Alnan Mal, Miktar, Para st) 1. Selam ver (Eheh.. hayrl iler dilemek lazm di mi ama?) 2. ALINAN MAL istiyorum, MKTAR kadar. 3. VERLEN PARAy uzat. 4. ALINAN MAL MKTAR kadar al. 5. PARA ST al. 6. Tekrar hayrl iler dile ve k! Hatta ktktan sonra, geldiimiz yerden geri dnmeye ynelik bir baka fonksiyon daha dnebiliriz. Buna Geri Dn() diyelim. Kesme ve Serzeni: Ama abi, programlamaya geeceiz diyorsun ama daha bir sr korkutucu eyler sylyorsun.

Ekmek bile alamadk yahu! Hak Verme: Aslnda ben daha hi bir ey sylemedim. Dnsene, bakkala giderken sakz ineyebilirsin, bakalar ile konuabilirsin, yamur varsa emsiye tutarsn, gne varsa gzln takarsn, kardan araba geliyorsa kenara ekilirsin (gelmiyorsa yolun ortasndan gidecek halin yok tabi), uzun zamandr grmediin birini aniden grebilirsin ve yanna koarsn, grmek istemediin birini grrsen yolunu deitirirsin... Aklmza gelen ve gelmeyen bir sr istem d hareketin olabilmesini hesap etmek gerekiyor. Programclkta da byle. Programn ileyii esnasnda karmza neler kabileceini iyi dnmek ve aklara yer vermemek gerekiyor. Felsefe: Hakikatten de farknda olmadan ne kadar ok kontrol yapyoruz kendimizde! Merakla Beklenen Algoritma: Bak o kadar yazdk, izdik ama neticede yine oook eksik bir bakkala gidi algoritmas yazyoruz: TANIMLAMALAR YAPILIR (Eh ne kadar yerimiz kald ki hepsini yazalm! Buradaki tanmlamalara aada kullandmz tm fonksiyonlar dahildir.) 1. Paray al. 2. Yr (DaireKaps,2) 3. k(Kap) - Daireden kyoruz. 4. Basamak n(ApartmanKaps, 2) 5. k(Kap) - Apartmandan kyoruz. 6. Yr(Sadaki lk Sokak Girii, 3) 7. Dn(Sa Ke) 8. Yr(Soldaki kinci Sokak Girii, 3) 9. Dn(Sol Ke) 9. Yr(Bakkal, 3) 10. Alveri Yap(1 YTL, Ekmek, 2, 40 Ykr) 11. GeriDn(Apartman) 12. A(Kap) 13. Basamak k (Daire) 14. A(Kap) 15. Ekmei evdekilere ver. Heyecanl Soru: Bitti mi abi, ha, bitti mi? Temkinli Cevap: Bitti desem de yeridir... Bitmedi desem de yeridir. Temkinli Cevaba Daha Heyecanl Cevap: Nasl yani? Esrarengiz Bir Hava: Bilmem, sence baka ne syleyebiliriz? Dayanlmaz Heyecan ve steleme: Syle, ne olur syle, ltfen! Son Dakika Gol: Gelecek sayda grrz.

MART 2006 PC World 207

ALGORTMA

MEHMET KURT
kurt.mehmet@gmail.com

Say Sayabilirsen...
Elin adam itleri boyatarak veya arabalar cilalatarak karate retir de, biz ekmek aldrrken algoritma retemez miyiz?
arateci ocuk bir gn boyadan ve ciladan usannca isyan etmi ve hocasna Yeter! Hadi Karateye balayalm demiti. Sonra, hocasndan beklenmedik ve ard sra gelen darbeleri yine beklemedii bir biimde savuturan karateci ocuk, sanrm ortalkta ne kadar it varsa hepsini boyam, tm arabalar da cilalamtr. Ben ise u ana kadar kemizi hakkyla takip eden okuyucularn bakkal seyahatimiz neticesinde programlama mantna yaklatklarn, u soruya verdikleri cevaptan anlayabilirim:

tr. (1i, 1 arttr) Adm 5: Artrlm sayy syle: 2 Adm 6: Son sylediin say 3 ise dur, deilse devam et. (Son sylediim 2 olduundan devam edecek) Adm 7: Son sylediin sayy 1 arttr. (2yi 1 arttr) Adm 8: Arttrlm sayy syle: 3 Adm 9: Son sylediin say 3 ise dur, deilse devam et. (Son sylediim 3 olduundan, bitti) Uyandrma Servisi: Fark ettin mi? Maziden Bir Alnt: Neyi, ua m? Nihaaa Kzgnlk Balangc Belirtisi: Tabii Fark etseydin zaten hemen kendin sylerdin. Hatta birazck eski saylara gz gezdirseydin (ki bu saylar www.mehmetkurt.com adresinde var) byle demezdin. Syle bakalm, 50ye kadar saymak isteseydin, her bir say iin 3 adm harcadna gre 150 adm m yazacaktn! Yazk gnah deil mi bu kadar emee! imdi, belli bir koula bal olarak srekli ayn ilemlerin yapld durumlarda ne yapyorduk, hatrla ve doru cevab ver! Kendine Geli ve Kendini Affettirme almalar: zr dilerim, af edersin. Haklsn. Burada EER ile oluturduumuz koulu kullanarak DNG kurmam gerekirdi. nk her bir sayma ileminde EER istediimiz sayya ulamadysak, son sylenen sayy 1 adet artryoruz. (Zaten sayma ilemi de bu deil midir?) yle yapacaz: SAYMA (ULAMAK STEDN SAYI) Adm 1: Balang olarak 1 al.

Giri Sorusu: Verilen 5 saynn ortalamasn bulan bir algoritma yaznz. Cevap Gibi Grnen Esas Soru: !? 5 say m? 5 sayya nasl ulaacaz? Evet, giri sorusuna verilmesi gereken refleks budur. 5 adet sayya nasl ulaacaz? lk nce 5 adet sayya nasl ulaacamz hesaplayabilmek iin saymay renmeliyiz, deil mi? Bu konuda olabilecek en basit algoritmalardan biri u olsa gerek: 3e kadar say! Cevap: Bundan kolay ne var! Adm 1: Balang olarak 1 al. Adm 2: 1 diye syle. Adm 3: Son sylediin say 3 ise dur, deilse devam et. (Son sylediim 1 olduundan devam edecek) Adm 4: Son kaldn sayy 1 art-

216 PC World NSAN 2006

ALGORTMA

Adm 2: 1 diye syle. Adm 3: Sylediin sayy 1 arttr. Adm 4: Arttrdn says syle. Adm 5: EER sylediin say, ulamak istediin say ise dur, deilse Adm 3e git. Anlamamazlktan Gelme: Akla bana, ne yaptn? Endienin Giderilmesi in Aklama: Varsayalm ki ulamak istediimiz say 3 olsun. lk olarak sayma ilemini 1den balattk ve bunu cmle aleme 1 diye syleyerek beyan ettik. Sonra sayy 1 arttrdk. 1+1=2 oldu. Adm 5te arttrlm say, ulamak istediimiz say m diye kontrol ediyoruz. 2=3 olmadndan ilem devam edecek ve Adm 3e ynleneceiz. 2+1=3 olacak ve bunu Adm 4te syleyeceiz. Adm 5e tekrar geldiimizde sylediimiz say ile ulamak istediimiz saynn ayn say olduunu greceiz ve ilem duracak. Bu yntem, ulamak istediimiz say ka olursa olsun alacaktr. Denetleme Sorular: O zaman syle bakalm, neden balang olarak 1 aldn? Ayrca, Adm 5teki EER karlatrmas Adm 3ten nce olsayd nasl olurdu? Cevaplar: Balang olarak 0da alabilirdik. O zaman Adm 2de de 0 syle demeliydik. Fakat saymaya balarken illaki bir balang olmal. Son sylediimize 1 eklediimize gre, 1 ekleyeceimiz say en banda belli olmal. yle ya, balang olmazsa neyi 1 arttracam? EER koulunu Adm 3ten nce, yani sayy arttrmadan nce yapmak istersek ilk bataki kyaslama bouna olurdu. nk daha hi 1 arttrmadan istediimiz sayya geldik mi diye kontrol edecektik. Kutlama ve lk Soruya Geme stei: Tebrik ederim. Gerekten de iyi bir yolda ilerliyorsun. O halde ilk soruya Kesme ve Ekleme: Ayrca ynlendirmede de problem doacakt. kinci Kutlama ve Yanltc Soru: Bravo! ok doru. O halde 5 saynn ortalamasn hesaplamak iin artk ileme balayabiliriz, deil mi? Teekkr ve Tuzaa D: Teekkr ederim, sayenizde. Evet, balayabiliriz! Yanltc Sorunun Esas Cevab: Hayr balayamayz :) arma Belirtisi ve Alay: Hayda Ne o, ekmek mi alcaz? armaya Aklama: Ortalama hesaplamasna gemeden nce bu yazdmz szl algoritmalar daha ksa ve kod-

lamaya daha yakn bir biimde yazmay kavrayalm, nk tam sras. Uzlama: Peki, patron sensin. Aklamaya Devam: Sayma algoritmasnda biz hep bir say syledik ve bu sylediimiz sayy 1 arttrdk. fade ederken hep say olarak bahsettik ama bunun deeri hep deiti. Ad stnde, algoritmann ilemesi esnasnda ad hep ayn kalan ama deeri deien bu yaplara DEKEN denir. Buradaki deer bazen bir say olabilecei gibi bazen bir tarih, bazen bir metin, bazen de bir para birimidir. Yerinde Bir Soru: Peki bu deikenin deerini nasl deitireceiz? Bunu nasl gstereceiz? Yerinde Soruyu Tebrik ve Aklamaya Devam: Bu soruyu sorduun iin tebrik ederim. Bir deikenin deerini deitirme ilemine ATAMA denir. Bunu yle gstereceiz: rnek: SylenenSay=1 Garipseme: Bu da nesi? Tela Giderici Aklama: Telaa gerek yok, gayet normal bir ilem. Ad SylenenSay olan deikene 1 deerini ATADIK. Bu u demektir: Bundan sonra algoritmann herhangi bir yerinde SylenenSay deikenini grdmde, aslnda ben orada, onun yerinde 1 says var demek istiyorumdur. Anlama Belirtisi eren leri Grl Bir Soru: Eer algoritma ilerken daha sonra SylenenSay=3 diye bir ifade ile karlarsam ne olur? ki tane mi deiken deeri olur? leri Grl Soruya Ustaca Bir Cevap: Hayr! Bu demektir ki, artk ad SylenenSay olan deikenin deeri 3tr, 1 tarih olmutur, unut o 1 saysn! Eer ilk 1 deeri bizim iin nemli ise ve kaybetmek istemiyorsak, baka bir deiken tanmlamalydk. Mesela o deikenin ad BakaSay olurdu ve yle diyebilirdik: BakaSay=3 nlem: Hmm Aklamalara Devam: Burada dikkat edilmesi gereken konu eitliin sol taraf ve sa taraf ayrmdr. Eitliin sol taraf deikenin ADI ile ilgili iken sa taraf DEER ile ilgilidir. kinci ok Bilmilik: Yahu onu anladk her halde, zaten sa tarafta say filan oluyor. Tua Getirecek Bir Soru Balangc: yle mi efendim? Peki.. u soruyu cevapla o zaman: Diyelim ki u atamalar olsun SylenenSay=5 BakaSay=10

Tamam m? Uzlama: Tamam. Tua Getirme leminin Tamamlanmas: Algoritmada u atamay grrsen ne olacak? SylenenSay=BakaSay Tua Gelme: Pes yani! Bu da nesi? Gereksiz Grlen Aklamadan Devam: Ne dedik az nce? Eitliin (yani atama ileminin) sol taraf deikenin adyla, sa taraf deeriyle ilgilidir. SylenenSay=BakaSay ifadesiyle u denilmek isteniyor: u ana kadar SylenenSaynn deeri 5 idi, BakaSaynn deeri 10 idi. Ama artk BakaSaynn deerini SylenenSayya aktar ki SylenenSaynn deeri 5 deil 10 olsun. Yani, eer bir deiken ismini eitliin sa tarafnda grrsen, ADINI deil DEERN dikkate al! Anlama ve Holanma Belirtisi: Hmm Vay be. Ne gzel. Konu Dalmadan Bir Soru: Peki SylenenSay=10+3 deseydim? Ani Cevap: O zaman SylenenSaynn deeri 13 olacak demektir! Tebrik ve Ani Soru: Aferin, peki BakaSayi=10 ve SylenenSay=BakaSay+7 deseydim? kinci Ani Cevap: BakaSaynn deeri 10 olduuna gre ve toplam ileminde eitliin sa tarafnda yer aldna gre, sa tarafta BakaSaynn deerini dnrsek SylenenSay=10+7 yani SylenenSay=17 yine yani SylenenSaynn deeri 17 olacak, demektir. Tebrik Tekrar ve Ani Soru: Yine aferin, peki BakaSay= 5 ve BakaSay=BakaSay+1 deseydim? nc Ani Cevap: Sol taraftaki deiken ismi, sadaki deeri olduuna gre, sadaki BakaSay yerine 5 koymalyz. Soldaki ise isim olarak kalmal. Yani BakaSay=5+1 yine yani BakaSayi=6 olur. Yani BakaSaynn deeri kendisi araclyla deiir, 1 artar. Tebrik ve Ortalamaya Gei Mjdesi: Bravo! Tam da beklenen cevaplar! Artk bu sitemle az nceki sayma ilemini nasl yazacamz grp ortalama alma ilemine geebiliriz. Sevin Nidalar: kr be! Yaasn! Merakl Bekleyie Sevk: Fakat bunu gelecek sayya brakmalyz nk yine yerimiz bitti. Cahilce Bir Soru: Ama abi, balktan nce yukarda bo yer oluyor, bal yukarya eksek ne olur ki? Tasarm Sevgisi: Hit! Sen bilmezsin, bu derginin tasarmn kural o!

NSAN 2006 PC World 217

ALGORTMA

MEHMET KURT
kurt.mehmet@gmail.com

Topla ve Ortala
Temeli salam olmayan bir bina iin iki ihtimal vardr: Ya ker ya da ker. Bu yzden aceleye gerek yok...
een ay (Ahh ahh, gnler ne abuk geiyor.) verilen 5 saynn ortalamasn bulmaya balam fakat yine tamamlayamamtk. (Ne garip deil mi?) lk nce verileri nasl sayacamz anladk. Saymay anlarken deiken kavramna da yle bir gz attk ve nihayet artk bu sayda ortalama hesaplayabileceiz! nanmama Belirtisi: Tabi tabi eminim. Yetitirme Tela: Hemen ie balayalm. Hadi hemen geen saydaki sayma kavramn da kullanarak 5 saynn ortalamasn bul bakalm! Mesela bizim elimizde 3, 8, 21, 9, 11 gibi 5 adet say var. Biz bu saylar nasl toplarz? 3+8+21+9+11=52 mi deriz? Yani hepsini birden mi toplarz? Telala Cevap: Evet! Matematik Dersi: Hayr! Asla! Toplama ilemi bir ikili ilemdir. Saylarn 5ini birden toplamadn! lk nce 3+8=11 diye hesapladn. Sonra o bulduun toplam sonucuna daha sonraki sayy ekledin! 11+21=32 diye hesapladn. Daha sonra bu toplam sonucuna 9u (32+9=41) ve sonra da 11i (41+11=52) ekledin! Deil mi? Farkna Var: Hakikatten yahu, yle yaptm vallahi. Abi beni benden iyi biliyorsun be! Mtevaz Tavr ve Algoritma renimi in Birka t: Ne alakas var! Herkes toplama ilemini yle yapar ama sen bunun farknda deildin. Bir eylemin algoritmasn kurarken u soruyu aklmzdan karmamalyz: Bu eylem aslnda nasl yaplyor? imdi bu manta uygun hareket ederek 5 saynn ortalamasn bul bakalm! Deneme: Adm 1: SayAdedini 1 olarak al.

Adm 2: SayAdedinci sayy ren. (SayAdedinin deeri 1 olduuna gre demek ki burada birinci sayy ren demi olduk). Adm 3: SayAdedi=SayAdedi+1 Adm 4: SayAdedinci sayy ren. Adm 5: Birinci say ile ikinci sayy topla. Adm 6: SayAdedi=SayAdedi+1 Adm 7: nceki toplama yeni rendiini ilave et. Adm 8: ?!?! Ya... Abi ne yaptm ben, toparlayamadm bir trl. Ka say olduunu tutacam deikenin adna SayAdedi dedim. Sonra onu rendim. lk say ile sonraki sayy topladm. Fakat sonrasnda ne bileyim. Bir garip i oldu. Afal vaziyetine intikal ettim bir anda. Denemeyi Dzeltme Eilimi: nallah okurlarmz u yaptn denemeyi kaale almamtr. Zaten bu tr bir ey yaparsan saylarn saymasn renmemiz de mantksz olurdu. Zira 5 tane say oldu mu olmad m asla bilemeyeceksin nk hibir yerinde kontrol etmedin. Dahas, ilk sayy rendin de deerini bir deikene atadn m? Neticede hakikatten garip bir ey oldu. Aslnda bu aamada TOPLAMA ilemini nasl yapacamz da gstermek gerekir. Yani yeni toplam nceki toplamlarn zerine nasl bina edeceimizi grmeliyiz. imdi u sorumu cevapla: Toplam=30+10 ifadesi ne demektir? Dzeltme Eilimine Destek: Toplam adndaki deikenin deeri 40 olsun demek. Destee Tebrik ve Dzeltme Eilimine Devam: Bravo. Peki Toplam=Toplam+10 ifadesi ne demek? Eilime Destee Devam: Eitliin sol taraf de-

216 PC World MAYIS 2006

ALGORTMA

ikenin ad ile, sa taraf da deeri ile ilgili olduuna gre u demek oluyor : Toplam deikeninin deerini, u andaki deerinin 10 fazlas yap demek. Kutlama, Bir Algoritma nerisi ve Akabinde ki Soru: te bu! Hell olsun. Gerekten de yle. imdi ben sana bir yntem nereyim: Adm 1: SayAdedi=1 al. Adm 2: SayAdedinci sayy ren ve onu Say deikenine ata. Adm 3: Toplam=Toplam+Say Adm 4: SayAdedi=SayAdedi+1 Adm 5: SayAdedinci sayy ren ve onu Say deikenine ata. Adm 6: Toplam=Toplam+Say ... imdi bu algoritmada ne oluyor? Ne olmuyor? Bir ilet bakalm batan itibaren. neriye Cevap: Balangta saynn adedini tutan deer 1dir. Sonra birinci sayy reniyoruz ve onu Say adnda bir deikene atyoruz. Daha nceki Toplam adl deikene, toplam deikeninin bir nceki deerine bu yeni rendiimiz sayy ekleyerek yeni bir toplam deeri atyoruz. (Ne dedim ben?!) Bunu da Toplam=Toplam+Say ifadesi ile gerekletiriyoruz. Ani Kesme ve Garip Bir Soru: Dur! lk toplam deeri ne? Garip Soruya Aikar Cevap: Yok! Aikar Cevaba Baka Garip Bir Soru: Madem yle canm kardeim olmayan bir eyin zerine toplama yaplyor? Bu mantksz olmad m? Yani tpk SayAdedi gibi onun da bir balang deeri olsa da olmayan bir eye toplama yapmak yerine, o balang saysna toplama yapsak olmaz m? Garip Soruya Sorulmas Gereken Baka Garip Soru: Olur mu ki yle bir ey. E diyelim ki biz ilk deer olarak 10 verdik. O zaman ilk toplam gerektiinden 10 fazla olmaz myd? Yanl toplam olmaz myd? Mesela rendiimiz say 5 olsa ve ilk toplam da 10 olarak atansa Toplam=Toplam+Say diyince Toplam=10+5 ki o da Toplam=15 olur. Halbuki tek saymz var ve o da 5?! Havada Uuan Garip Sorulara Bir Yenisi Daha: Ee? O zaman nasl bir zm bulmalyz? Arimed Hissi ve kmazdan k: Buldum! Eer Toplam deikeninin ilk deerini sfr olarak alrsak o zaman Toplam=Toplam+Say dediimizde hem olmayan bir eyle toplama yapm olmayacaz hem de sfr etkisiz eleman olduundan ilk toplamada bir hata yapm olmayacaz. Toplam=0+5 olacak ve ilem rayna girmi olacak! Tebrik ve neri Algoritmaya Cevaba Devam stei: Tebrik ederim. Demek ki bu algoritmann balangcna Toplam=0 ifadesini eklemek

gerekir. Baka? neriye Cevaba Devam: lk toplamay yaptktan sonra SayAdedini artryoruz. kinci sayya geiyoruz. Onu renerek Say deikenine atyoruz. Cevaba Katk: Yani ilk sayy kaybediyoruz. Artk Say deikeninde rendiimiz ikinci say var. Deil mi? Katkya Taklan Dnceler: Evet, doru. Peki abi, ya sonradan lazm olursa? Taklmaya Cevap: Ohoo. O kadar ileri gitme. Daha o soruya cevap vermek iin bu hzla daha belki 2-3 ay gemeli. Ama bu rneimizde bu saylar sonradan lazm deil ki... Rahatlama ve Analize Devam: kinci sayy rendikten sonra da daha nceki toplama bu sayy ekleyeceiz. Ohh... ok gzel oldu. yle devam edecek ite. Garip Sorulardan Bir Yenisi Daha: Yok canm... Demek devam edecek. Peki nereye kadar? akn Cevap: 5 say deil miydi aabeyciim? te oraya kadar. 5 say olunca bitiricez. akn Cevaba Alayc Tepki: Hmm... Demek 5e kadar. Peki bu 5e var bilgisayara malum mu olacak? Bir yerden vahiy mi gelecek? Nereden bilecek 5e geldiimizi? kinci akn ve Biraz Da ekinik Cevap: Ne bileyim, bana niye kzyorsun? Ben mi yazdm algoritmay. Tabi ki algoritmada bir yerlere EER SayAdedi=5 olduysa dur gibi bir eyler demek lazm galiba. Sonu: Anlald... stersen son noktay koyaym, sonra sen bir analiz et.: Adm 1: SayAdedi=0 ve Toplam=0 al. Adm 2: SayAdedi=SayAdedi+1 Adm 2: SayAdedinci sayy Say deikenine ata. Adm 3: Toplam=Toplam+Say Adm 4: Eer SayAdedi=5 ise Devam et, deilse Adm 2ye git. Adm 5: Ortalama=Toplam/5 Analiz: SayAdedi ve Toplam deikenlerinin balang deerleri sfr oldu. Sonra SayAdedini 1 artrdk. SayAdedinci sayy (ki o u anda 1dir) rendik ve toplama ekledik. Henz daha yeni baladmzdan, ilk deer sfr olduuna gre ilk saynn kendisi ilk toplammz oldu. Sonrasnda, SayAdedi=5 olmadndan yeni saylar renmeye Adm 2ye gidiyoruz. SayAdedinci (yani 2nci) sayy rendik. Sonra yeni sayy eski toplama ekliyoruz. Byle byle devam ediyor ve en sonunda 5 adet sayya ulatmzda Adm5e geebiliyoruz ve ortalamay buluyoruz. Tebrik ve Gelecee Ynelik Soru: Gzel. Buraya kadar iyi anladk. Tebrikler. Peki ben yle desem: Ya ortalamas hesaplanacak saynn ka tane olduunu bilmeseydik, nasl yapardk?

MAYIS 2006 PC World 217

ALGORTMA

MEHMET KURT
kurt.mehmet@gmail.com

Belirsiz Ama Yine de Ortala!


Belirsizlikler sorunlar doursa da hemencecik stesinden gelecek bir yol bulmak mmkndr.
een sayda tam da toplama ve ortalama almann mutluluunu yaarken pat diye bir soru sormu ve yine zihinleri bulandrmtk: Ya ortalamasn alacamz say belli deilse? Bunu biraz daha genelletirirsek sorunu yle dillendirebiliriz: Ya algoritmada herhangi bir amala kullanacamz verilerin adedi belli deilse? Korkulu Dakikalarn Balangc M? Dncesindeki ahs Tepkisi: Amann! Ne yapacaz imdi? Yattrma abalar: Kar karya kaldmz bu sorun karsnda hi telaa mahal yoktur. Sorunu anlamak, zmenin yarsdr derler. Bir ksm ulema da nanmak baarmann yarsdr beyann zikreder. Bu durumda sorunlar zmek iin hi aba sarf etmesek, sadece anlasak ve inansak mesele bitmi demektir. Deil mi? lanma: Tabii ya, doru sylyorsun Umutl aabey! Tokat Gibi Cevap: Hemen de gaza geliyorsun! Yazklar olsun! aba sarf etmeden olur mu hi? Neymi, inanmak ve anlamak yeterliymi Yok yle ey alacaksn. Serzeni: yi de bana ne kzyorsun imdi? Sen kendin demedin mi muhterem aabeycim? Alemsin yahu. Serzenie Cevap ve Konuya Giri Konumalar: Olsun. Senin Olur mu abi, evet meseleyi anlamam lazm ama yine de almalym demen lazmd. Neyse Algoritmada (programda) kullanacamz veriler her zaman belirli sayda olmayabilir. Mesela byk bir markette alveri yaptk ve kasaya yneldik. Kasiyer aldn rnleri sayp ka tane ise ona

gre mi kasadan geiriyor? Yoksa srayla m? : E tabi ki srayla. Hibir saym yapAni Cevap: madan. rnee Kald Yerden Devam: Kasadaki bilgisayar, rnleri teker teker geirirken, aldmz rnlerin bir ekilde sona erdiini anlyor, sence nasl? kinci ani Cevap: Kasiyer enter tuuna dokunuyor, deil mi? rnee kinci Kez Kald Yerden Devam: Evet! Bunu bir ekilde bilgisayara aktarmalyz! Yani ilemlerin artk sona erdiini, daha fazla veri gereksinimi olmadn belirten bir ipucu, iaret, sinyal lazm. Demek ki, kasiyerin kasasndaki bilgisayara yle denmi: Enter tuuna tklandnda son toplam ver, ktsn al ve sonraki alveri iin hazrlan! yecanlanma ve Kavrama Belirtisi: Aaa.. ne Hey kadar kolaym. Hem de zevkli. Onaylama ve Devam: Bence de kolay ve zevkli. imdi dnelim bakalm, verilerin bittiini anlamak iin ne yapalm? Kendimize nasl bir ipucu-sinyal-iaret verelim? Konuya Katk: Hmm.. Yani biz sayy reneceiz, Baka say yoksa yle yap, varsa baka trl yap m diyeceiz? Konuya Katkya Devam stei: Evet, yle olsun. Hadi algoritmasn bir dene bakalm. Deneme ncesi: ncelikle geen saydan rendiimiz gibi saylar toplamak iin Toplam deikeni tutmal ve balang olarak sfr deerini atamalym. Benzer ekilde ka say olduunu tespit etmek iin SayAdedi deikeni tutmalym. Geen saydan farkl olarak SayAdedi deikenine de balang olarak bir deer vermeliyim. nk

184 PC World HAZRAN 2006

ALGORTMA

onu da bilmiyorum ve ortalamay hesap edebilmek iin ka saynn toplandn bilmem gerekir. Tebrik ve aknlk fadeleri: Aferin be. Hayret, hemen nereden fark ettin bu kadar eyi? Tebrikleri Kabul Etme ve Algoritma Denemesi: Teekkr ederim. Bu yaz dizisinin tm serisini zenle takip edip adm adm alyorum. Adm 1: Toplam=0 ve SayAdedi=1 Adm 2: SayAdedinci Sayy ren. Adm 3: SayAdedi=SayAdedi+1 Adm 4: Toplam=Toplam+Say Adm 5: Baka Say varsa Adm 2ye, yoksa Adm 6ya git. Adm 6: Ortalama=Toplam/SayAdedi Oldu her halde deil mi? Vay canna, yava yava oluyor galiba! zc Haber: Bu tr bir haberi vermek istemezdim ama Olmad! Hznl Anlar: Ama neden aabey ya.. Halbuki ok da zenli yazmtm. Hatasz gibi dnmtm sanki. Neresi yanl oldu? Hata Buldurucu Garip Soru: Sen ka saynn ortalamasn aldn? Ve aslnda ka say var? Biliyorum, say belli deildi. Ama sen 3 defa giri yapacan dn mesel. Fark edi: Aaaa Algoritmay ilettiimde gryorum ki Adm 3te, hemencik SayAdedi=2 oluyor. Yani ben ilk sayy rendiimde SayAdedinde sanki 2 say varm gibi grnyor. Yani SayAdedindeki deer, esas deerin 1 fazlas oluyor. Fark Edie Sevini ve zme Ulama Gayretleri: Aferin be. Helal olsun. Pat diye buldun. Bu ne hz Aman nazar demesin. Doru. Peki bu sorunu zmek iine yapacaz? Azmin Zaferi: Buldum! Ben ne diye balang deerini SayAdedi=1 dedim ki? Halbuki SayAdedi=0 olarak deitirsem, hibir sorun kalmayacak! Yaasn! Tebrik ve Alternatif Araylar: Tebrik ederim gzel kardeim. Hakikatten iyi bir i kardn Peki baka ne gibi zm bulabiliriz? Suya Sabuna Dokunmamak steyi: Aman abi, yeter imdilik bana bir yol. Sen syle ne olur. Hazr moralim de yerinde iken. Acma Hissi ve Cevap: Adm 3n yerini deitirmeye alsan Ani Bir Gaza Gelme ve Cevab Azdan Alma Giriimi: Evet evet! Adm 6dan nce, Baka say var m kontrolnden hemen sonraya alrsak olabilir. Kontrol Etmeye ar: Acaba? ci Alternatifi Tekrar nceleme: Dnelim, kinc sayy reneceiz, toplama ekleyeceiz. Diyelim ki baka say var ve algoritmada nceki

admlara gitsek Aaa! Tebessm: Ne oldu? Alternatif Teklifini Geriye ekme: Olmad yahu. Eer sadece 1 tane say varsa yine SayAdedini bo yere artracaz. Daha fazla say varsa, bu sefer SayAdedi artrma ilemi baka say varsa admndan sonra olduundan algoritma geriye gidince SayAdedini hi artramayacaz. Bu yzden bu teklifimi geri alyorum. ald Yerden Devam: kr ve Cevaba Ka kr doru yolu buldun. Szm kesmesen ben de bunu syleyecektim. Adm 3n yerini deitirmenin bir anlam yok diyecektim. Daha basit bir eyler dnelim. Merak ve Acele Ettirme: Allah Allah Daha basit ne olabilir ki abi? Merak ettim. Beklenen Cevap: SayAdedi, benim istediimden 1 fazla olmuyor muydu? Lafn Gelii Bir Cevap: Evet. Beklenen Cevaba Devam: En sonunda Ortalama=Toplam/SayAdedi yerine Ortalama=Toplam/(SayAdedi-1) deyiverirsin, olur biter. aknlk: Hakikatten yahu, nasl da dnemedim ben bu kadar basit bir eyi. Ta Yerinde Ar Cinsinden Bir t: Evet, bazen kendimizi karmak yaplara kaptrp basit zmleri gremeyebiliyoruz. Uzlama: Haklsn, ayn fikirdeyim. kin Birka Sz Daha: GeBelirsiz Verilere li nel olarak veri adedi belirsizlii bu tr bir yolla zlr. Baka var m ya da yok mu diyerek. Bunu programlama dilleri kendi gramerlerince eitli ekillerde hal yoluna koyabilirler. Mesela bir dng olutururlar ve u tua baslncaya kadar, (u say girilinceye kadar) dng iindekini gerekletir biiminde problemi zerler. Yerinde ve Endieli Bir Soru: Tamam abi, burada bunlar anladk da Bunlar bilgisayarda nasl oluyor? Yani hi deneme yapmayacak myz? Kod yazmayacak myz? Endie Giderici Cevap: Doru sylyorsun. Aldmz birka mektupta da bu vurgulanyor. Biraz da bilgisayarda bir eyler yapabilelim ve sonra yolumuza devam edelim, karmzda somut sonular grmek bizim de hakkmz cihetinden mesajlar geliyor. Bu yzden ileriki saylarda programlama aralar hakknda bilgilere yer verip, basit dzeyde rnek uygulamalar sunmay dnyorum. Merakl Soru: Ne zaman? Hangi sayda? kl Soruyu Grmezden Gelme ve dev: Merak yle bir ey hesaplamak istesek, algoritmasn yazmak istesek: 1den 100e kadar olan saylarn toplam? Ya da yle bir soru: 1den 100e kadar 5 ile tam blnen saylarn ortalamas?

HAZRAN 2006 PC World 185

You might also like