25-06-2006, 06:22
:: Programlamaya Giriş
Programlamaya Giriş
Yazı Hakkında
Merhaba arkadaşlar... Bu yazıda "programlama nedir, ne değildir" sorularına yanıt arayacak, başarılı bir programcı olmak için gereken şartlar ve bu şartları yerine getirebilmek için neler yapılabileceği üzerinde biraz tartışacağız... Tabi önce bir konuyu açıklığa kavuşturalım; 'Programlamaya Giriş' yazısında sizle paylaştığım bilgiler çoğunlukla yorum niteliğinde olacağı için, fikir ve önerileri kabul edip faydalanmak ya da bu fikirlere katılmamak tamamen size kalmış durumda.
Bu başlık altında yazılanlar, programlama konusundaki bilgi birikimim ve deneyimlerim ışığında ele aldığım yaratıcılık, teknik beceri, araştırma, inceleme ve irdeleme, teori ve uygulama aşamaları gibi çok önemli konuların programcılığı ilgilendiren yönleri hakkındadır.
Bir programlama dili öğrenirken ve program geliştirirken yararlanacağınıza inandığım tüm bu görüş, öneri ve değerlendirmeleri umarım keyifle okursunuz. Hepimize kolay gelsin...
Programcılık Üzerine
Programlama konusunda deneyim kazanmadan önce "iyi bir programcı olmak için hangi özelliklere sahip olmalıyım?" sorusunu kendinize sormanızı istiyorum. İyi programcı, düşünen, uğraştığı problemleri en küçük ayrıntısına kadar irdelerken bu problemlerin temeline inebilen ve yaratıcı çözümler geliştiren kişidir. Ayrıca bu özelliklerinin yanısıra bilgisayar teknolojileri alanında yeterli bilgiye sahip ve sorunların çözümü konusunda deneyimli olmalıdır. Tabi bütün bu saydıklarımı tamamlayan en önemli özelliklerinden biri de sabrıdır.
Düşünmeyi bilen insan herzaman yaratıcı olamayabiliyor ama yaratıcılık bilinçli bir eğitim ve çalışmayla da kazanılabilir. Aynı şekilde bilgisayar teknolojileri hakkında bilgi ve deneyim sahibi olmak için de yine çok çalışmak gerekmektedir. Bulabildiğiniz bütün kaynaklardan(bilgisayar kitapları, dergiler, internet, vs.) yararlanıp bol bol uygulama yaparak bir programlama dili öğrenmek için gerekli olan alt yapıyı kazanabilirsiniz. Bu alt yapıyı sağlamlaştırdıktan sonra da yaşayacağınız deneyimler sonucu problemleri soyutlama ve irdeleme yeteneğine kavuşmanız, tamamen doğal bir sürecin ileri aşamalarıdır. Bu süreç hız kazanırken sabırlı olmayı da öğreneceğinizi söylemek kehanet olmaz sanırım!..
Eğer bir programlama dili öğrenmeye karar vermişseniz neden programcı olmak istediğinizi de biliyor olmalısınız. Bilgisayar programları sadece işletmelerde ve resmi kurumların bilgisayarlarında karşımıza çıkmıyor. Bugün hemen hemen aklınıza gelebilecek her konuda bir ya da birden fazla program mevcut. Ama ister ticari ister genel amaçlı olsun bütün programların hazırlanış amacı ortak : Bilgisayarda yürüttüğümüz işleri kolaylaştırıp hızlandırmak ve bir düzene oturtmak. Tabi eğlence ve hobi amaçlı hazırlanan program(cık)ların sayısı da azımsanmayacak kadar çok. Programcı olmak istemekteki amacınız sadece parasal kazanç sağlamak ve her geçen gün dünya ekonomilerindeki pazar payını arttıran bilişim sektöründe adınızı duyurmaksa, hiçbir zaman gerçek bir kod yazarı olamayacağınızı üzülerek söylerim.
İyi bir programcı, profesyonel olmak için konusunda uzmanlaşırken amatör kalmayı başarabilir. Bu noktada amatörlüğü, profesyonelliği ve acemiliği birbirinden doğru bir şekilde ayırmanın önemi üzerinde biraz durmak gerekiyor; yaygın kanının aksine amatörlük, 'bir konuda yeterli bilgi ve deneyime sahip olmama' anlamına gelmez. Örneğin, eğer bir program yazarken herhangi bir disk dosyasını açmaya çalışırken zorluk yaşıyor ve hata mesajları alıyorsanız, ve de bu mesajlara anlam veremiyorsanız sizin için 'acemi' uygun bir sıfat olacaktır. Eğer dosyayı açarken hata sizden değil de işletim sisteminden kaynaklanıyor ve bunu programı derler derlemez anlayabiliyorsanız... Veee yazdığınız programı, sadece kendi işlerinizde kullanmak için hazırlıyorsanız siz bir amatörsünüz. Bu program, başka bilgisayarlarda çalışmaya başlarken sizin cebinize para giriyorsa ve bir zamanlar hobi amaçlı, kendinizi geliştirmek için ilgilendiğiniz bir alanda edindiğiniz bilgileri değerlendirerek maddi kazanç elde etmek size keyif veriyorsa, amatör bir profesyonel olduğunuz için de sevinmelisiniz!
Bu açıklamaların ışığında özet olarak diyebiliriz ki, iyi bir programcı düşünen, araştıran, öğrenen, problem irdeleyen ve çözen, geliştiren ve paylaşan kişi olmanın yanında eğer hazırladığı programlardan para kazanan bir profesyonelse, teknik bilgi ve yeteneğini artıracak denemeler yapmaktan kaçınmayıp kendini yeniliklere açık tutan ve bu sayede amatör yönünü koruyabilen programcıdır...
--------------------------------------------------------------------
:: Yapay Zeka Programlama Üzerine Teoriler...
Yaklaşık 50 yıldır üzerinde aktif çalışmalar yapılan bir ütopya; Yapay Zeka!
Aslında adındaki çelişki bile ne kadar zor bir kavram olduğunun kanıtıdır. Bu konu üzerinde zaman zaman belgesellerden izlediğim ve ortaya çıkan fikirlerimin hala belli bir kalıba oturmadığını söylemem gerekiyor. Bu yüzden bu makalede anlatacaklarım bilgim ve hayal gücüm sınırında olacaktır. Ama sizi temin etmem gerekirki çok ilginç bir iki noktada buluşacağız.
Yapay - Yapaylık
Burada bahsi geçen yapaylık hangi düzeyde bir yapaylıktır? Karmaşık bir soru gibi görülebilir ama bu soruyu şu şekilde sorarsak herkes anlıyacaktır. Plastikten yapılan bir elma mı? yoksa Bilimsel bir Labaratuarda üretilen bir elma mı? Sizce burada gerçekten yapay olan hangisi?
Plastikten yapılan elmanın gerçek elmaya şekil, görüntü ve hacim olarak %95 oranında benzeyeceğini öngörelim. Oysaki Lab. üretilen Elma gerçeğine bu kadar yakın olmıyacaktır. İşte bu noktada yapaylığı belirleyen koşul o nesneye yönelik temel özelliklerdir. Lab. üretilen yapay elmanın gerçeğinde olduğu gibi tat, çürüme vs. gibi özellikleri olacaktır. Bu özellikler şekil, görüntü ve hacim olarak benzemese bile nesne nin temel özelliklerini barındırdığı için daha yapay bir gerçek olacaktır.
Demekki yapay ile gerçek arasındaki yakınlık bir nevi yapaylığın gerçekliğini gösteriyor. Dahada doğrusu yapayı yapılan nesnenin ne kadar fazla temel özelliği kullanılırsa yapaylığın gerçekliğide okadar artıyor.
Yapay Zeka Programlama ( Cevap verme, düşünebilme, bağlantı kurma vs. )
Yapay Zeka az önce yapaylığı ele alırken kullandığımız fikirlerden yola çıkılarak düşünüldüğünde, düşünebilen, karar verebilen, kendi başına öğrenebilen ve kendini geliştirebilen temel zeka özelliklerini içermek zorundadır.
Gerçek Zeka yaptığı ve yapacağı her şeyde belirli adreslere gider ve bu adresler arasında bir bağlantı kurar. İşte bu adreslerin en temelinde, nesne isimleri yer almaktadır. Bunları kelimeler olarak adlandıralım. Gerçek Zeka gerekli olan bilgiye her zaman o nesneye ait kelime adı ile ulaşır.
"Sanırım Zeka konusunda bilimsel veya teknik bir bilgi verecek kadar bilgili ve öğretimli biri değilim, ancak bu zeka hakkında mantık yürütmeyeceğim anlamına gelmez."
Tırnak içerisinde yazdığım cümlenin doğruluğundan öte bir özelliği daha var. " Sanırım " kelimesi ile başlayan bir cümle " Değilim " ile devam eden sonra " ancak " ile bitirilen bir cümle. İşte bu Zeka 'nın bize verdiği özelliktir. Bu tür bir cümleyi bir bilgisayar programı ile gerçekleştirmeyi düşünmek bile çok yorucudur.
" Sanırım " kelimesinde daha bilinmeyen ( yani ne doğru ne yanlış, ne evet ne hayır ) derken cümle sonunda " değilim " kelimesinde kesin bir karar veriliyor. Daha sonra " ancak " kelimesi ile tüm işler değişiyor. Yukarıdaki cümleyi " Zeka hakkında mantık yürütebilirim " diyede söyleyebilirdim. Bunun bir bilgisayar tarafından işlenmesi çok daha kolay olabilirdi.
Bilgisayara " merhaba " dediğinde , bilgisayarın sana yanıt vermesi bir koşul olayıdır. Bunu basit olarak bir programlama dili ile göstermemiz gerekseydi ;
eğer (alınan = merhaba) ise {
...cevap : sanada merhaba
}
Şeklinde yazılabilir. Ama Az önce tırnak içine alarak yazdığım gibi bir cümlenin bilgisayar tarafından koşullandırılarak anlaşılması çok güç olacaktır. Bunun en büyük nedeni bilgisayarda mantığın çok katı işlemesidir.
Ama yinede geliştirilmiş koşullama sistemleri ile bu sorunlar belli düzeylerde aşılabiliyor. Bence burada asıl sorun Dil den kaynaklanıyor...
Benim düşünceme göre ana dili İngilizce olan bir kişi yada gruplar asla gerçeğe yakın, öğrenebilen, kararsız olabilen, şüphe edebilen yada karşısındakinden alacağı basit bir metinin bir fıkra gibi gülünecek bir şeymi yoksa normal bir metinmi olacağını anlayan bir yapay zeka yapamıyacaktır.
Tabi bu düşünceme çok iddalı yada ütopik olarak bakan kişilerde olacaktır. Bunun nedenlerini ve çözümlerini kendimce anlatmaya çalışcam.
Az önceki koşullu " merhaba " örneğini , ingilizce başka bir kelime ile yapalım. ( Bu aklıma gelen ve en basit örnektir. ) Kelimelerimiz :
How : Anlamları : Nasıl , Ne kadar, Hangi Yolla
Much : Anlamları : Çok, hemen hemen, pek
How much ( is it ): Anlamı : Kaç para
eğer (alınan = how much) ise {
.......
}
Gibi bir koşulda bilgisayar sizce nasıl bir cevap verecektir? Eğer bilgisayarın bu soruya doğru yanıt vermesi isteniyorsa " How Much " kelimesinin bir kalıp olarak girilmesi gerekmektedir. Eğer kelime anlamı olarak işlenseydi bilgisayar " how " ve " much " kelimelerinin hangi anlamlarını kullanacağını bilemezdi. Bu örnek gibi binlerce kalıp olacağı düşünüldüğünde ve uygulandığında bu yapay zeka nın ötesinde bir tür hesap makinasına olacaktır.
Burada asıl sorun ingilizce ve çoğu dillerde olan kelimelerin bir den çok anlamının olmasından kaynaklanmasıdır. Mükemmele yakın bilgisayar destekli bir zekanın oluşması için her kelimenin ayrı alanlara işaret etmesi gerekmektedir. Ve dahada önemlisi bu kelimeler arasındaki bağlantıdır. Buradan yola çıkarak her kelimenin 1 e 1 anlamı olduğu düşünüldüğünde Yapay Zeka açısından şuankinden çok daha önemli gelişmeler olacaktır.
Diğer bir olayda kelimeler arasındaki bağlantıdır. İki veya daha fazla kelimenin bir araya gelerek oluşturacağı bir cümleden 1 den fazla değişik anlamlar çıkacaktır. İşte bu anlamların çözülebilmesi için Yapay Zeka da o anki ortam yada önceki konuşmalardan o cümle ile önceki cümleler arasında bir bağlantı kurulması gerekirki bu yapılabilmesini bırakın düşünülebilmesi bile çok zor bir olaydır.
Elbetteki Yapay Zeka sadece kelimelerle oluşan ve işleyen bir kavram değildir. Ama en temelde düşünmeye yarayan ve tepkilerimizi belirleyen adres ve bu adresler arası bağlantılar vardır.
Normal bir insana ( arkadaşımıza ) yumruk atar gibi yaptığımızda refleksleri sonucu gardını alacak ve şaka olduğunu anladığında gülümseyecektir. Gerçek bir yumruk attığımızda ise yine refleksleri sonucu gardını alacak sonrasında kızacak gerekirse karşılık verecektir. Aynı işlemi sensorleri olan bir robota yaptığımızda ise sadece programlandığı gibi hareket edecektir.
Sonuç olarak gelecekte bir gün Yapay Zeka üzerine büyük bir ilerleme yapıldığında bunu yapacak kişi yada grupların dil olarak her kelimeye daha doğrusu zekanın alacağı her nesneye değişik adres ve bağlantılar yapacak bir kişi yada grup olacağına inanıyorum.
Örnek vermek gerekirse, oldukça zengin bir dilleri olan Japonların yarattığı akıllı köpekler ilk aklıma gelen örnektir. Unutmamak gerekirki Türkçe de oldukça zengin bir dildir. Kim bilir belki günün birinde bir Türk yapay zeka üzerine çok büyük bir gelişme yapar...
---------------------------------------------------------------
:: Kod Tasarımı
Kod tasarımı temel olarak beş aşamalı bir süreçtir.
İlk aşama doğal olarak yazılacak programın ne yapacağının kararlaştırılmasıdır, program spesifikasyonları gibi…Bunlar veri girişleri nasıl yapılacak çıktılar nasıl alınacak gibi sorulara cevap vererek programın ne yapacağını açıkça ortaya koyar.
Bunlar o kadar açık olmalıdır ki, programcının karar vereceği nokta sadece hangi metodun bu iş için uygun olacağına karar vermek kalmalıdır, böylece iki ayrı programcıya bu aşama kayıtları verildiğinde benzer programlar ortaya çıksın.
İkinci adım program spesifikasyonlarında belirtilen probleme yönelik çözümlerin ortaya konmasıdır.Bu kod değildir. Çözüm, görevleri yapmakta verilen ve verilen değerleri işlemede programcının kullanacağı bir takım tekniklerdir. Bazen (gerçekte genellikle) bu teknikler standarttır ve sadece aşırı özel gereklilikler için uyarlamalardır. Diğer türlü olduğunda, programcı yeni teknikler tasarlamalıdır. Öte yandan programcının bir algoritma geliştirirken çözümün ne olacağını bilmesi gerekliliğinde dolayı bu aşama çok önemlidir.
Üçüncü aşama algoritma aşamasıdır. Bu gene kod değildir. Bu adım adım düzenli bir liste halinde, ikinci aşamada probleme getirilen çözümü uygulatan yönergelerin tamamıdır. Algoritma herhangi bir programlama dilinde yazılmaz, dilin gereklilikleri ve grameri önemli değildir. Algoritma geliştirilmesi esnasında önemli olan programcının belirtilen çözüm yolu üzerinde düşünmesidir. Programcı aynı anda bir dile özgü şeyleri de düşünürse süreç daha zorlaşır ve hata yapılma olasılığı artar. Algoritma çok serbest bir stille yazılır.Programcı bu sırada uygulanacak çözüm aşamaları üzerine yoğunlaşabilir.
4. Aşama gerçek program kodu aşamasıdır. Burada programcı geliştirdiği algoritmayı gerçek programlama diline tercüme eder. Burada dilin zorunlulukları ve grameri önemlidir. Algoritma yeterli detayda açıklanmışsa programcı için kolay bir aşamadır. Gereken sadece adım adım algoritmanın tercümesidir.
Sonunda, 5. aşama test aşamasıdır. Şu bilinmelidir, hiçbir zaman hatasız ve sorunsuz program olmaz. Bir programın hatasızlığı bütün olası girişler bütün olası kombinasyonlar denenmediği sürece kanıtlanamaz-imkansız bir süreç gibi :-). Programcı bu aşamada yapabildiği kadar giriş ve bunların kombinasyonlarını dener denenmesini sağlar. Oluşan hata ve sorunlara çözümler üretir, bunları uygular. Bir de şu vardır: Bütün kullanıcılar hata bulma açısından pek zeki sayılmazlar ve genelde hata bulamazlar özellikle müşterileriniz istedikleri işi yapan bir program aldıklarını hissettiklerinde bu program onlar için dünyadaki en iyi programdır.İnanın başka bir program bu işi sizinki kadar güzel yapamaz, ancak günün birinde mutlaka biri gelip bu hatayı bulur ve bu olayın meydana gelmesi ile programı yazma tarihiniz arasındaki aralığın kısa olması müşterinizdeki kredibilite oranınızı düşürür. Bu yüzden olabildiğince çok sayıda olasılığı denemekte fayda vardır.
En son olarak bu beş aşama her zaman harfiyen uygulanmaz ya da çok eki moda bir tasarım süreci olarak görülür(çoğu zaman).Tekrar düzenleme, spesifikasyonları değiştirme ve tekrar kodlama yapılabilir. Fakat bu açık ve düzenli bir süreç olmaz. Ayıca bir aşamayı tekrar başlayarak yenilemekten çekinmeyin fazladan harcadığınız zaman size daha sonra her şeye başlamadan daha az zamana mal olacaktır. Bu arada yine unutmayın “Vakit Nakittir”.
------------------------------------------------------------------------
:: Programlamanın Temelleri (1. Kısım)
(1. Kısım)
Merhaba dostlar,
Programlamaya yeni başlayan arkadaşlara yol gösterme açısından bu makalemde programlamanın oturduğu iki temel ve bu iki temeli sağlamlaştıracak yardımcı yapılara değineceğim. Faydalı olması dileğiyle.
1. Karar Yapıları
2. Döngüler
İşte bu iki madde programlamanın olmazsa olmazlarından ilk ikisidir. Üçüncüsü ise Algoritmalar olup bu iki esas iyice kavrandıktan sonra Algoritmaya da temel teşkil edeceklerdir.
1. Karar Yapıları:
Şimdi kafanızda canlandırın. Tatil yapmak istiyorsunuz. Broşürlere baktınız. Elinizde 4 seçenek var. Bodrum, Fethiye, Ayvalık, Uludağ ve cebinizde 40 lira var. Fiyatlara baktınız Ayvalık ve Uludağ seçeneklerinin fiyatları 90 lira. Bodrum 30, Fethiye 35. Kafadan bi kere 90 lıkları elediniz. Eee bütün parayı oraya verirsek ne yicez ne içicez deyip acaba tüm masraflar dahilmi onada baktınız. Fethiyede herşey dahil. Güzel Bodruma göre 5 lira fazla olmasına rağmen daha kârlı. Evet Kararınızı verdiniz Fethiye ye gidiceksiniz.
İşte karar yapıları böyle kurulur. Tabi ki burada ki yapı çok kompleks bir yapıdır. Yüzeyseldir. Programlamada her türlü olasılık bu yapılar içinde belirtilmek zorundadır. Meselâ tatilden dönünce işe gidicek parayı nerden bulacağınız gibi. Burası çok önemli bir noktadır gerçek hayatta bu hayati bir mesele olmamasına rağmen programlamada bu yapı çöker.
Şimdi gelin birlikte karar yapısını kuralım.
Cümle cümle kuruyoruz:
1. Adım: Şimdi kafanızda canlandırın.
Cümleyi açalım;
Bir kere kafanızda canlandırabilmeniz için bir kafamızın ve de canlandırma kabiliyetimizin olması lazım. Bu durumda biz kafamız ve canlandırma kabiliyetimizi bilgisayara anlatabilmemiz lazım.
Anlatalım;
1. Kural : biz bilgisayara bişey anlatmak için Değişkenleri kullanıyoruz.
Soru : Değişken Nedir?
Değişken size ilk duyduğunuzda neyi ifade ediyorsa odur. Değişken, dönektir, bi bakarsın öyle bi bakarsın böyle. Yalnız öyle bir değişkendir ki sizin koyacağınız kurallar çerçevesinde değişir ve biz bilgisayara anlatmak istediğimiz şeyleri değişkenlerin içine koyarız.
2. Kural: biz anlatmak istediğimiz bilgiyi değişkenin içine koymadan önce bu değişkenin içine ne tür bir bilgi koyacağımızı da belirtmeliyiz.
Açıklayalım;
Siz 250 Gr. Peynir koymak için küçük bir kab, 2.5 litrelik kola koymak için biraz büyük poşet, çeşmeden su taşımak için sağlamcana bir sapı olan güğüm kullanırsınız. Yani tutupta bunların üçü içinde aynı kabı kullanmak ne kadar abesse kafayı ve canlandırma kabiliyetini aynı değişkene koymak o kadar abestir hatta ta kendisidir.
Sanırım bu meselede anlaşıldı.
O zaman artık kafayı k değişkenine koyup değişkene de sen bu kafayı kaldırabilecek kapasitede bir kapsın, canlandırmayı da c değişkenine koyup sen canlandırma olayını kaldırabilcek kapasitede bir kapsın diyebiliriz.
İyide bizim olayımız bukadar küçük bi olay değiki kafamızda canlandırıcaz ama neyi?
Nerde? Bu yapacağımız canlandırma eyleminin tamamını bir bütün arz edecek şekide yapmanız lazım çünkü biz canlandırma olayını bir kere yapmıcaz ki biz bu kararı belki bir günde milyon kere yapıyoruz o zaman. Biz bunu öyle bir tasarlamamız lazım ki tekrar tekrar kullanabilelim. Yoksa her yapacağımız canlandırma eylemi için benzer şeyleri tekrar yazmak zorunda kalırız ve öyle bir batağa saplanırız ki birdaha çıkamayız.
Şimdi biz bu olayı bir ana başlık altında toplayalım ve buna kafanda_Canlandır olayı diyelim. Böylece biz kafamızda bir şeyler canlandırmamız gerektiğinde kafanda_Canlandır deyip neyi canlardırması gerektiğini de parametre olarak bu olaya gönderip bu eylemi gerçekleştirebileceğiz.
Soru : Parametre Nedir?
kafanda_Canlandır tarzında bir olaya sen kafanda neyi canladıracaksın? Diye sorulduğu zaman bilmem, neyi? Dememesi için gönderilmesi gereken değişkenler topluluğudur.
Peki bu kafanda_Canlandır olayının programlamadaki karşılığı nedir?
Kulanılacağı yere göre Main (Ana Yordam), Sub (Alt Yordam) veya Function (Fonksiyon) dur. Bu üç meselenin bir birinden farkları ileriki konularda detaylı bir şekilde anlatılacaktır.
Evet, Parametrelerimizi tespit edelim artık.
2.Adım : Tatil yapmak istiyorsunuz.
Cümle zaten kedini açıklıyor veeeee 1. Parametre dadadam ne yapmak istiyorsunuz?
Yani bir değişen tanımlıcaz evet değişken adı=ne_Yapmak, türü=yapılacak işi tutabilecek kapasitede bir kap, değeri = Tatil oleeeey.
3.Adım: Broşürlere baktınız. Elinizde 4 seçenek var. Bodrum, Fethiye, Ayvalık, Uludağ
Yaniiiiii ikinci parametre geliyor=Secenek, türü=kısmını artık yazmıyorum biliyorsunuz, değerleri={Bodrum,Fethiye,Ayvalık,Uludağ} hımmmm bu biraz değişik bir değişken. İçinde bir değer yok ki 4 tane değer aldı bu değişken haydaaaa nerden çıktı bu şimdi.
Yani aynı sepete armut,elma,karpuz,kestane koyabiliriz pekala niye aynı değişkene bi kaç değer birden koyamayalım. Koyabiliyoruz bu değişkenin değişik bir cinsi öyle bir kabiliyeti var. Bunlara dizi değişkenleri deniyor. Bunlarda farklı olarak bu dizinin alabileceği maksimum eleman sayısını da belirtiyorsunuz.
Sonuç olarak ;
Secenek[3]={Bodrum,Fethiye,Ayvalık,Uludağ} dersek eğer 4 dü birden aynı sepete girer.
Soru : Neden 3 yazdık,4 değişkenimiz var baskı hatası falan mı?
Matbaada mı basıyoruz baskı hatası olsun diyorum kendi kendime, sorduğum sorunun bir kısmına cevap olarak. [] içine yazdığımız rakama index diyoruz. Birkaç programlama dilinin dışında %95 bu değer 0 dan başlar. 0,1,2,3 adresleri toplam 4 değer tutabilir böylece. Yani 4 değer yazacaksak oraya bu yüzden 3 yazıyoruz.
4.Adım: ve cebinizde 40 lira var
Tanıştırayım buda üçüncü parametremiz cepteki_Para
Değişken adı=cepteki_Para, türü=para, değeri=40
Dostlar saat epey geç oldu ayrıca buradan itibaren programlamanın ikinci büyük temelini (yani DÖNGÜLER) atıcaz örnek bunu gerektiriyor. Dolayısıyla bunu bu makalemin ikinci yarısına bırakıyorum. Görüşmek üzere.
--------------------------
: Programlamanın Temelleri (2. Kısım)
5. Adım: Fiyatlara baktınız Ayvalık ve Uludağ seçeneklerinin fiyatları 90 lira. Bodrum 30, Fethiye 35.
siz fiyatlara baktınız ama nerden? nerde bu fiyatlar tabiki borşürde, broşür nerde? yok. hemen yapalım bitane. dostum öyle yok deyip bırakmak yok. burası sihirli bir dünya. yoksa yapacaksın.
işte tam bu noktada ikinci temel atılyor.
2. Döngüler:
ona seçeneklerimizin fiyatlarını söyleyelim.
birde 1. Kısımda tanımladığımız Secenek dizi değişkenimizi içine fiyatları ve herşey dahil/hariç bilgisinide koyabileceğimiz şekilde düzeltelim
bu aşamada dizi değişkeninin farklı bir kullanımını da görmüş olucaz. bu kulanım şekliyle dizi değişkenimiz çok boyutlu diziler sınıfına girmiş oluyor.
direkt söylüyorum
oldumu sence. biraz anlayacağı şekilde yazmaya nedersin.
Secenek[0,0]=90
Secenek[0,1]=false
Secenek[1,0]=90
Secenek[1,1]=false
Secenek[2,0]=30
Secenek[2,1]=false
Secenek[3,0]=35
Secenek[3,1]=true
şimdi burda 4 tane seçenek var tek tek anlattık oldumu? oldu.
peki 35000 tane seçenek olsaydı ne yapacaktık. oturup
Secenek[0,0]=90
Secenek[0,1]=false
Secenek[1,0]=90
Secenek[1,1]=false
Secenek[2,0]=30
Secenek[2,1]=false
Secenek[3,0]=35
Secenek[3,1]=true
.
.
.
.
Secenek[35000,0]=23
Secenek[35000,1]=false
diye yazacakmıydık?
onun yerine şöyle yapıyoruz.
0 dan 35000 e kadar say diyoruz bilgisayara.
peki nasıl say diyoruz 1 er 1 er.
biz bu sayma eyleminide bilgisayara anlatmak için yine bir değişken kullanmamız lazım ki elle tutulur, göreceli olarak başvurabileceğimiz bir muhattabımız olsun. değişken adı=Sayac, türü=sayı tutabilen bir kap, değeri=0 (şimdilik)
toparlayalım.
Say 0 dan başlayarak Secenek sayısı kadar
sayarkende benden Secenek[Sayac,0]=? değerini fiyat için iste,
Secenek[Sayac,1]=? değerinide herşey dahil/hariç için iste.
Not: burada broşürün fiyat, dahil/hariç vs. kriterleri daha fazla olsaydı burdaki değerleri de tek tek yazmamak için iç içe döngü kullanacaktık. İç içe döngü konusunu Algoritma konusunda iç içe karar yapılarıyla birlikte detaylı bir şekilde inceliyeceğiz.
dedik veeeee baktığımız broşüre bilgisayarıda baktırmış olduk böylece. artık değerleri oda biliyor. ayrıca 35000 kere de olsa 1000000000 kere de olsa biz olayımızı 3 satırda bitirdik. nasıl yaptık. çünkü artık ikinci temeli(DÖNGÜLER) de sapasağlam attık.
Soru : peki hocam biz kafamızda sadece tatili mi canladırabiliyoruz? yooo nerden bu kanıya vardın? biz boşuna mı ne_Yapmak parametresini istedik senden. biz bu döngüyü ve bundan sonraki işlemlerimizi ne_Yapmak değişkeninin değeri Tatilse çalıştırıcaz aksi durumdalarda örn: ne_Yapmak parametresiyle ProgramYaz değerini gönderseydik kafanda_Canlandır olayımız ProgramYaz koşulu doğrultusunda bir eylem gerçekleştirecekti Tatil koşulunun olasılıklarını anlattıktan sonra bir de ProgramYaz koşulunun olasılıklarını yazsaydık eğer.
böylece; kafanda_Canlandır olayına ProgramYaz kabiliyetini de kazandırmış olacaktık.
yukarıdaki döngüyü Tatil koşulu gerçekleşmesi durumunda çalıştırabilmek için Tatil koşuluna bağlı olarak yazalım o zaman,
eğer ne_Yapmak=Tatil ise
{
(Say 0 dan başlayarak Secenek sayısı kadar)
{
sayarkende benden Secenek[Sayac,0]=? değerini fiyat için iste,
Secenek[Sayac,1]=? değerinide herşey dahil/hariç için iste.
}
}
eğer ne_Yapmak=ProgramYaz ise
{
;
}
gibi.
yukarıya koyduğum parantezleri falan kafana takma (şimdilik)
6. Adım: Kafadan bi kere 90 lıkları elediniz. Eee bütün parayı oraya verirsek ne yicez ne içicez deyip acaba tüm masraflar dahilmi onada baktınız. Fethiyede herşey dahil. Güzel Bodruma göre 5 lira fazla olmasına rağmen daha kârlı. Evet Kararınızı verdiniz Fethiye ye gidiceksiniz.
geldik karar verme aşamasına.
bir döngü daha kuralım ki tek tek yazmayalım yine dimi
Hatırlatma: Kullanılmış değişkenleri çöpe atmıyoruz hemen. Tekrar kullanıla biliyor. ikinciye aynı değişkeni kullanacaksak boşaltmadan kullanmayalım ortalık karışmasın.
(Say 0 dan başlayarak Secenek sayısı kadar)
{
eğer Secenek[Sayac,0] küçük tür cepteki_Para'dan ve Secenek[Sayac,1]=true ise Secenek[Sayac,0] -= Secenek[Sayac,0] in %40'ı (karlılık payı olarak)
Not: Tam burda sıralama algoritması gerektiğinden bu noktanın Algoritma konusunda detaylandırılması daha uygun olur. Sıralama meselesi ise detaylı bir konudur.dolayısıyla burada bir sıralama (en iyi metod seçilerek) yapılacak va Fethiye sonucu elde edilecektir.
}
Böylece döngüleride iyice anladığmıza göre Algoritma konusuna bir sonraki makalede geçmek için hiç bir engel kalmadı.
bidakkaaaa. cebinizde işe gidecek para kaldı mı............
alıntıdır....
Programlamaya Giriş
Yazı Hakkında
Merhaba arkadaşlar... Bu yazıda "programlama nedir, ne değildir" sorularına yanıt arayacak, başarılı bir programcı olmak için gereken şartlar ve bu şartları yerine getirebilmek için neler yapılabileceği üzerinde biraz tartışacağız... Tabi önce bir konuyu açıklığa kavuşturalım; 'Programlamaya Giriş' yazısında sizle paylaştığım bilgiler çoğunlukla yorum niteliğinde olacağı için, fikir ve önerileri kabul edip faydalanmak ya da bu fikirlere katılmamak tamamen size kalmış durumda.
Bu başlık altında yazılanlar, programlama konusundaki bilgi birikimim ve deneyimlerim ışığında ele aldığım yaratıcılık, teknik beceri, araştırma, inceleme ve irdeleme, teori ve uygulama aşamaları gibi çok önemli konuların programcılığı ilgilendiren yönleri hakkındadır.
Bir programlama dili öğrenirken ve program geliştirirken yararlanacağınıza inandığım tüm bu görüş, öneri ve değerlendirmeleri umarım keyifle okursunuz. Hepimize kolay gelsin...
Programcılık Üzerine
Programlama konusunda deneyim kazanmadan önce "iyi bir programcı olmak için hangi özelliklere sahip olmalıyım?" sorusunu kendinize sormanızı istiyorum. İyi programcı, düşünen, uğraştığı problemleri en küçük ayrıntısına kadar irdelerken bu problemlerin temeline inebilen ve yaratıcı çözümler geliştiren kişidir. Ayrıca bu özelliklerinin yanısıra bilgisayar teknolojileri alanında yeterli bilgiye sahip ve sorunların çözümü konusunda deneyimli olmalıdır. Tabi bütün bu saydıklarımı tamamlayan en önemli özelliklerinden biri de sabrıdır.
Düşünmeyi bilen insan herzaman yaratıcı olamayabiliyor ama yaratıcılık bilinçli bir eğitim ve çalışmayla da kazanılabilir. Aynı şekilde bilgisayar teknolojileri hakkında bilgi ve deneyim sahibi olmak için de yine çok çalışmak gerekmektedir. Bulabildiğiniz bütün kaynaklardan(bilgisayar kitapları, dergiler, internet, vs.) yararlanıp bol bol uygulama yaparak bir programlama dili öğrenmek için gerekli olan alt yapıyı kazanabilirsiniz. Bu alt yapıyı sağlamlaştırdıktan sonra da yaşayacağınız deneyimler sonucu problemleri soyutlama ve irdeleme yeteneğine kavuşmanız, tamamen doğal bir sürecin ileri aşamalarıdır. Bu süreç hız kazanırken sabırlı olmayı da öğreneceğinizi söylemek kehanet olmaz sanırım!..
Eğer bir programlama dili öğrenmeye karar vermişseniz neden programcı olmak istediğinizi de biliyor olmalısınız. Bilgisayar programları sadece işletmelerde ve resmi kurumların bilgisayarlarında karşımıza çıkmıyor. Bugün hemen hemen aklınıza gelebilecek her konuda bir ya da birden fazla program mevcut. Ama ister ticari ister genel amaçlı olsun bütün programların hazırlanış amacı ortak : Bilgisayarda yürüttüğümüz işleri kolaylaştırıp hızlandırmak ve bir düzene oturtmak. Tabi eğlence ve hobi amaçlı hazırlanan program(cık)ların sayısı da azımsanmayacak kadar çok. Programcı olmak istemekteki amacınız sadece parasal kazanç sağlamak ve her geçen gün dünya ekonomilerindeki pazar payını arttıran bilişim sektöründe adınızı duyurmaksa, hiçbir zaman gerçek bir kod yazarı olamayacağınızı üzülerek söylerim.
İyi bir programcı, profesyonel olmak için konusunda uzmanlaşırken amatör kalmayı başarabilir. Bu noktada amatörlüğü, profesyonelliği ve acemiliği birbirinden doğru bir şekilde ayırmanın önemi üzerinde biraz durmak gerekiyor; yaygın kanının aksine amatörlük, 'bir konuda yeterli bilgi ve deneyime sahip olmama' anlamına gelmez. Örneğin, eğer bir program yazarken herhangi bir disk dosyasını açmaya çalışırken zorluk yaşıyor ve hata mesajları alıyorsanız, ve de bu mesajlara anlam veremiyorsanız sizin için 'acemi' uygun bir sıfat olacaktır. Eğer dosyayı açarken hata sizden değil de işletim sisteminden kaynaklanıyor ve bunu programı derler derlemez anlayabiliyorsanız... Veee yazdığınız programı, sadece kendi işlerinizde kullanmak için hazırlıyorsanız siz bir amatörsünüz. Bu program, başka bilgisayarlarda çalışmaya başlarken sizin cebinize para giriyorsa ve bir zamanlar hobi amaçlı, kendinizi geliştirmek için ilgilendiğiniz bir alanda edindiğiniz bilgileri değerlendirerek maddi kazanç elde etmek size keyif veriyorsa, amatör bir profesyonel olduğunuz için de sevinmelisiniz!
Bu açıklamaların ışığında özet olarak diyebiliriz ki, iyi bir programcı düşünen, araştıran, öğrenen, problem irdeleyen ve çözen, geliştiren ve paylaşan kişi olmanın yanında eğer hazırladığı programlardan para kazanan bir profesyonelse, teknik bilgi ve yeteneğini artıracak denemeler yapmaktan kaçınmayıp kendini yeniliklere açık tutan ve bu sayede amatör yönünü koruyabilen programcıdır...
--------------------------------------------------------------------
:: Yapay Zeka Programlama Üzerine Teoriler...
Yaklaşık 50 yıldır üzerinde aktif çalışmalar yapılan bir ütopya; Yapay Zeka!
Aslında adındaki çelişki bile ne kadar zor bir kavram olduğunun kanıtıdır. Bu konu üzerinde zaman zaman belgesellerden izlediğim ve ortaya çıkan fikirlerimin hala belli bir kalıba oturmadığını söylemem gerekiyor. Bu yüzden bu makalede anlatacaklarım bilgim ve hayal gücüm sınırında olacaktır. Ama sizi temin etmem gerekirki çok ilginç bir iki noktada buluşacağız.
Yapay - Yapaylık
Burada bahsi geçen yapaylık hangi düzeyde bir yapaylıktır? Karmaşık bir soru gibi görülebilir ama bu soruyu şu şekilde sorarsak herkes anlıyacaktır. Plastikten yapılan bir elma mı? yoksa Bilimsel bir Labaratuarda üretilen bir elma mı? Sizce burada gerçekten yapay olan hangisi?
Plastikten yapılan elmanın gerçek elmaya şekil, görüntü ve hacim olarak %95 oranında benzeyeceğini öngörelim. Oysaki Lab. üretilen Elma gerçeğine bu kadar yakın olmıyacaktır. İşte bu noktada yapaylığı belirleyen koşul o nesneye yönelik temel özelliklerdir. Lab. üretilen yapay elmanın gerçeğinde olduğu gibi tat, çürüme vs. gibi özellikleri olacaktır. Bu özellikler şekil, görüntü ve hacim olarak benzemese bile nesne nin temel özelliklerini barındırdığı için daha yapay bir gerçek olacaktır.
Demekki yapay ile gerçek arasındaki yakınlık bir nevi yapaylığın gerçekliğini gösteriyor. Dahada doğrusu yapayı yapılan nesnenin ne kadar fazla temel özelliği kullanılırsa yapaylığın gerçekliğide okadar artıyor.
Yapay Zeka Programlama ( Cevap verme, düşünebilme, bağlantı kurma vs. )
Yapay Zeka az önce yapaylığı ele alırken kullandığımız fikirlerden yola çıkılarak düşünüldüğünde, düşünebilen, karar verebilen, kendi başına öğrenebilen ve kendini geliştirebilen temel zeka özelliklerini içermek zorundadır.
Gerçek Zeka yaptığı ve yapacağı her şeyde belirli adreslere gider ve bu adresler arasında bir bağlantı kurar. İşte bu adreslerin en temelinde, nesne isimleri yer almaktadır. Bunları kelimeler olarak adlandıralım. Gerçek Zeka gerekli olan bilgiye her zaman o nesneye ait kelime adı ile ulaşır.
"Sanırım Zeka konusunda bilimsel veya teknik bir bilgi verecek kadar bilgili ve öğretimli biri değilim, ancak bu zeka hakkında mantık yürütmeyeceğim anlamına gelmez."
Tırnak içerisinde yazdığım cümlenin doğruluğundan öte bir özelliği daha var. " Sanırım " kelimesi ile başlayan bir cümle " Değilim " ile devam eden sonra " ancak " ile bitirilen bir cümle. İşte bu Zeka 'nın bize verdiği özelliktir. Bu tür bir cümleyi bir bilgisayar programı ile gerçekleştirmeyi düşünmek bile çok yorucudur.
" Sanırım " kelimesinde daha bilinmeyen ( yani ne doğru ne yanlış, ne evet ne hayır ) derken cümle sonunda " değilim " kelimesinde kesin bir karar veriliyor. Daha sonra " ancak " kelimesi ile tüm işler değişiyor. Yukarıdaki cümleyi " Zeka hakkında mantık yürütebilirim " diyede söyleyebilirdim. Bunun bir bilgisayar tarafından işlenmesi çok daha kolay olabilirdi.
Bilgisayara " merhaba " dediğinde , bilgisayarın sana yanıt vermesi bir koşul olayıdır. Bunu basit olarak bir programlama dili ile göstermemiz gerekseydi ;
eğer (alınan = merhaba) ise {
...cevap : sanada merhaba
}
Şeklinde yazılabilir. Ama Az önce tırnak içine alarak yazdığım gibi bir cümlenin bilgisayar tarafından koşullandırılarak anlaşılması çok güç olacaktır. Bunun en büyük nedeni bilgisayarda mantığın çok katı işlemesidir.
Ama yinede geliştirilmiş koşullama sistemleri ile bu sorunlar belli düzeylerde aşılabiliyor. Bence burada asıl sorun Dil den kaynaklanıyor...
Benim düşünceme göre ana dili İngilizce olan bir kişi yada gruplar asla gerçeğe yakın, öğrenebilen, kararsız olabilen, şüphe edebilen yada karşısındakinden alacağı basit bir metinin bir fıkra gibi gülünecek bir şeymi yoksa normal bir metinmi olacağını anlayan bir yapay zeka yapamıyacaktır.
Tabi bu düşünceme çok iddalı yada ütopik olarak bakan kişilerde olacaktır. Bunun nedenlerini ve çözümlerini kendimce anlatmaya çalışcam.
Az önceki koşullu " merhaba " örneğini , ingilizce başka bir kelime ile yapalım. ( Bu aklıma gelen ve en basit örnektir. ) Kelimelerimiz :
How : Anlamları : Nasıl , Ne kadar, Hangi Yolla
Much : Anlamları : Çok, hemen hemen, pek
How much ( is it ): Anlamı : Kaç para
eğer (alınan = how much) ise {
.......
}
Gibi bir koşulda bilgisayar sizce nasıl bir cevap verecektir? Eğer bilgisayarın bu soruya doğru yanıt vermesi isteniyorsa " How Much " kelimesinin bir kalıp olarak girilmesi gerekmektedir. Eğer kelime anlamı olarak işlenseydi bilgisayar " how " ve " much " kelimelerinin hangi anlamlarını kullanacağını bilemezdi. Bu örnek gibi binlerce kalıp olacağı düşünüldüğünde ve uygulandığında bu yapay zeka nın ötesinde bir tür hesap makinasına olacaktır.
Burada asıl sorun ingilizce ve çoğu dillerde olan kelimelerin bir den çok anlamının olmasından kaynaklanmasıdır. Mükemmele yakın bilgisayar destekli bir zekanın oluşması için her kelimenin ayrı alanlara işaret etmesi gerekmektedir. Ve dahada önemlisi bu kelimeler arasındaki bağlantıdır. Buradan yola çıkarak her kelimenin 1 e 1 anlamı olduğu düşünüldüğünde Yapay Zeka açısından şuankinden çok daha önemli gelişmeler olacaktır.
Diğer bir olayda kelimeler arasındaki bağlantıdır. İki veya daha fazla kelimenin bir araya gelerek oluşturacağı bir cümleden 1 den fazla değişik anlamlar çıkacaktır. İşte bu anlamların çözülebilmesi için Yapay Zeka da o anki ortam yada önceki konuşmalardan o cümle ile önceki cümleler arasında bir bağlantı kurulması gerekirki bu yapılabilmesini bırakın düşünülebilmesi bile çok zor bir olaydır.
Elbetteki Yapay Zeka sadece kelimelerle oluşan ve işleyen bir kavram değildir. Ama en temelde düşünmeye yarayan ve tepkilerimizi belirleyen adres ve bu adresler arası bağlantılar vardır.
Normal bir insana ( arkadaşımıza ) yumruk atar gibi yaptığımızda refleksleri sonucu gardını alacak ve şaka olduğunu anladığında gülümseyecektir. Gerçek bir yumruk attığımızda ise yine refleksleri sonucu gardını alacak sonrasında kızacak gerekirse karşılık verecektir. Aynı işlemi sensorleri olan bir robota yaptığımızda ise sadece programlandığı gibi hareket edecektir.
Sonuç olarak gelecekte bir gün Yapay Zeka üzerine büyük bir ilerleme yapıldığında bunu yapacak kişi yada grupların dil olarak her kelimeye daha doğrusu zekanın alacağı her nesneye değişik adres ve bağlantılar yapacak bir kişi yada grup olacağına inanıyorum.
Örnek vermek gerekirse, oldukça zengin bir dilleri olan Japonların yarattığı akıllı köpekler ilk aklıma gelen örnektir. Unutmamak gerekirki Türkçe de oldukça zengin bir dildir. Kim bilir belki günün birinde bir Türk yapay zeka üzerine çok büyük bir gelişme yapar...
---------------------------------------------------------------
:: Kod Tasarımı
Kod tasarımı temel olarak beş aşamalı bir süreçtir.
İlk aşama doğal olarak yazılacak programın ne yapacağının kararlaştırılmasıdır, program spesifikasyonları gibi…Bunlar veri girişleri nasıl yapılacak çıktılar nasıl alınacak gibi sorulara cevap vererek programın ne yapacağını açıkça ortaya koyar.
Bunlar o kadar açık olmalıdır ki, programcının karar vereceği nokta sadece hangi metodun bu iş için uygun olacağına karar vermek kalmalıdır, böylece iki ayrı programcıya bu aşama kayıtları verildiğinde benzer programlar ortaya çıksın.
İkinci adım program spesifikasyonlarında belirtilen probleme yönelik çözümlerin ortaya konmasıdır.Bu kod değildir. Çözüm, görevleri yapmakta verilen ve verilen değerleri işlemede programcının kullanacağı bir takım tekniklerdir. Bazen (gerçekte genellikle) bu teknikler standarttır ve sadece aşırı özel gereklilikler için uyarlamalardır. Diğer türlü olduğunda, programcı yeni teknikler tasarlamalıdır. Öte yandan programcının bir algoritma geliştirirken çözümün ne olacağını bilmesi gerekliliğinde dolayı bu aşama çok önemlidir.
Üçüncü aşama algoritma aşamasıdır. Bu gene kod değildir. Bu adım adım düzenli bir liste halinde, ikinci aşamada probleme getirilen çözümü uygulatan yönergelerin tamamıdır. Algoritma herhangi bir programlama dilinde yazılmaz, dilin gereklilikleri ve grameri önemli değildir. Algoritma geliştirilmesi esnasında önemli olan programcının belirtilen çözüm yolu üzerinde düşünmesidir. Programcı aynı anda bir dile özgü şeyleri de düşünürse süreç daha zorlaşır ve hata yapılma olasılığı artar. Algoritma çok serbest bir stille yazılır.Programcı bu sırada uygulanacak çözüm aşamaları üzerine yoğunlaşabilir.
4. Aşama gerçek program kodu aşamasıdır. Burada programcı geliştirdiği algoritmayı gerçek programlama diline tercüme eder. Burada dilin zorunlulukları ve grameri önemlidir. Algoritma yeterli detayda açıklanmışsa programcı için kolay bir aşamadır. Gereken sadece adım adım algoritmanın tercümesidir.
Sonunda, 5. aşama test aşamasıdır. Şu bilinmelidir, hiçbir zaman hatasız ve sorunsuz program olmaz. Bir programın hatasızlığı bütün olası girişler bütün olası kombinasyonlar denenmediği sürece kanıtlanamaz-imkansız bir süreç gibi :-). Programcı bu aşamada yapabildiği kadar giriş ve bunların kombinasyonlarını dener denenmesini sağlar. Oluşan hata ve sorunlara çözümler üretir, bunları uygular. Bir de şu vardır: Bütün kullanıcılar hata bulma açısından pek zeki sayılmazlar ve genelde hata bulamazlar özellikle müşterileriniz istedikleri işi yapan bir program aldıklarını hissettiklerinde bu program onlar için dünyadaki en iyi programdır.İnanın başka bir program bu işi sizinki kadar güzel yapamaz, ancak günün birinde mutlaka biri gelip bu hatayı bulur ve bu olayın meydana gelmesi ile programı yazma tarihiniz arasındaki aralığın kısa olması müşterinizdeki kredibilite oranınızı düşürür. Bu yüzden olabildiğince çok sayıda olasılığı denemekte fayda vardır.
En son olarak bu beş aşama her zaman harfiyen uygulanmaz ya da çok eki moda bir tasarım süreci olarak görülür(çoğu zaman).Tekrar düzenleme, spesifikasyonları değiştirme ve tekrar kodlama yapılabilir. Fakat bu açık ve düzenli bir süreç olmaz. Ayıca bir aşamayı tekrar başlayarak yenilemekten çekinmeyin fazladan harcadığınız zaman size daha sonra her şeye başlamadan daha az zamana mal olacaktır. Bu arada yine unutmayın “Vakit Nakittir”.
------------------------------------------------------------------------
:: Programlamanın Temelleri (1. Kısım)
(1. Kısım)
Merhaba dostlar,
Programlamaya yeni başlayan arkadaşlara yol gösterme açısından bu makalemde programlamanın oturduğu iki temel ve bu iki temeli sağlamlaştıracak yardımcı yapılara değineceğim. Faydalı olması dileğiyle.
1. Karar Yapıları
2. Döngüler
İşte bu iki madde programlamanın olmazsa olmazlarından ilk ikisidir. Üçüncüsü ise Algoritmalar olup bu iki esas iyice kavrandıktan sonra Algoritmaya da temel teşkil edeceklerdir.
1. Karar Yapıları:
Şimdi kafanızda canlandırın. Tatil yapmak istiyorsunuz. Broşürlere baktınız. Elinizde 4 seçenek var. Bodrum, Fethiye, Ayvalık, Uludağ ve cebinizde 40 lira var. Fiyatlara baktınız Ayvalık ve Uludağ seçeneklerinin fiyatları 90 lira. Bodrum 30, Fethiye 35. Kafadan bi kere 90 lıkları elediniz. Eee bütün parayı oraya verirsek ne yicez ne içicez deyip acaba tüm masraflar dahilmi onada baktınız. Fethiyede herşey dahil. Güzel Bodruma göre 5 lira fazla olmasına rağmen daha kârlı. Evet Kararınızı verdiniz Fethiye ye gidiceksiniz.
İşte karar yapıları böyle kurulur. Tabi ki burada ki yapı çok kompleks bir yapıdır. Yüzeyseldir. Programlamada her türlü olasılık bu yapılar içinde belirtilmek zorundadır. Meselâ tatilden dönünce işe gidicek parayı nerden bulacağınız gibi. Burası çok önemli bir noktadır gerçek hayatta bu hayati bir mesele olmamasına rağmen programlamada bu yapı çöker.
Şimdi gelin birlikte karar yapısını kuralım.
Cümle cümle kuruyoruz:
1. Adım: Şimdi kafanızda canlandırın.
Cümleyi açalım;
Bir kere kafanızda canlandırabilmeniz için bir kafamızın ve de canlandırma kabiliyetimizin olması lazım. Bu durumda biz kafamız ve canlandırma kabiliyetimizi bilgisayara anlatabilmemiz lazım.
Anlatalım;
1. Kural : biz bilgisayara bişey anlatmak için Değişkenleri kullanıyoruz.
Soru : Değişken Nedir?
Değişken size ilk duyduğunuzda neyi ifade ediyorsa odur. Değişken, dönektir, bi bakarsın öyle bi bakarsın böyle. Yalnız öyle bir değişkendir ki sizin koyacağınız kurallar çerçevesinde değişir ve biz bilgisayara anlatmak istediğimiz şeyleri değişkenlerin içine koyarız.
2. Kural: biz anlatmak istediğimiz bilgiyi değişkenin içine koymadan önce bu değişkenin içine ne tür bir bilgi koyacağımızı da belirtmeliyiz.
Açıklayalım;
Siz 250 Gr. Peynir koymak için küçük bir kab, 2.5 litrelik kola koymak için biraz büyük poşet, çeşmeden su taşımak için sağlamcana bir sapı olan güğüm kullanırsınız. Yani tutupta bunların üçü içinde aynı kabı kullanmak ne kadar abesse kafayı ve canlandırma kabiliyetini aynı değişkene koymak o kadar abestir hatta ta kendisidir.
Sanırım bu meselede anlaşıldı.
O zaman artık kafayı k değişkenine koyup değişkene de sen bu kafayı kaldırabilecek kapasitede bir kapsın, canlandırmayı da c değişkenine koyup sen canlandırma olayını kaldırabilcek kapasitede bir kapsın diyebiliriz.
İyide bizim olayımız bukadar küçük bi olay değiki kafamızda canlandırıcaz ama neyi?
Nerde? Bu yapacağımız canlandırma eyleminin tamamını bir bütün arz edecek şekide yapmanız lazım çünkü biz canlandırma olayını bir kere yapmıcaz ki biz bu kararı belki bir günde milyon kere yapıyoruz o zaman. Biz bunu öyle bir tasarlamamız lazım ki tekrar tekrar kullanabilelim. Yoksa her yapacağımız canlandırma eylemi için benzer şeyleri tekrar yazmak zorunda kalırız ve öyle bir batağa saplanırız ki birdaha çıkamayız.
Şimdi biz bu olayı bir ana başlık altında toplayalım ve buna kafanda_Canlandır olayı diyelim. Böylece biz kafamızda bir şeyler canlandırmamız gerektiğinde kafanda_Canlandır deyip neyi canlardırması gerektiğini de parametre olarak bu olaya gönderip bu eylemi gerçekleştirebileceğiz.
Soru : Parametre Nedir?
kafanda_Canlandır tarzında bir olaya sen kafanda neyi canladıracaksın? Diye sorulduğu zaman bilmem, neyi? Dememesi için gönderilmesi gereken değişkenler topluluğudur.
Peki bu kafanda_Canlandır olayının programlamadaki karşılığı nedir?
Kulanılacağı yere göre Main (Ana Yordam), Sub (Alt Yordam) veya Function (Fonksiyon) dur. Bu üç meselenin bir birinden farkları ileriki konularda detaylı bir şekilde anlatılacaktır.
Evet, Parametrelerimizi tespit edelim artık.
2.Adım : Tatil yapmak istiyorsunuz.
Cümle zaten kedini açıklıyor veeeee 1. Parametre dadadam ne yapmak istiyorsunuz?
Yani bir değişen tanımlıcaz evet değişken adı=ne_Yapmak, türü=yapılacak işi tutabilecek kapasitede bir kap, değeri = Tatil oleeeey.
3.Adım: Broşürlere baktınız. Elinizde 4 seçenek var. Bodrum, Fethiye, Ayvalık, Uludağ
Yaniiiiii ikinci parametre geliyor=Secenek, türü=kısmını artık yazmıyorum biliyorsunuz, değerleri={Bodrum,Fethiye,Ayvalık,Uludağ} hımmmm bu biraz değişik bir değişken. İçinde bir değer yok ki 4 tane değer aldı bu değişken haydaaaa nerden çıktı bu şimdi.
Yani aynı sepete armut,elma,karpuz,kestane koyabiliriz pekala niye aynı değişkene bi kaç değer birden koyamayalım. Koyabiliyoruz bu değişkenin değişik bir cinsi öyle bir kabiliyeti var. Bunlara dizi değişkenleri deniyor. Bunlarda farklı olarak bu dizinin alabileceği maksimum eleman sayısını da belirtiyorsunuz.
Sonuç olarak ;
Secenek[3]={Bodrum,Fethiye,Ayvalık,Uludağ} dersek eğer 4 dü birden aynı sepete girer.
Soru : Neden 3 yazdık,4 değişkenimiz var baskı hatası falan mı?
Matbaada mı basıyoruz baskı hatası olsun diyorum kendi kendime, sorduğum sorunun bir kısmına cevap olarak. [] içine yazdığımız rakama index diyoruz. Birkaç programlama dilinin dışında %95 bu değer 0 dan başlar. 0,1,2,3 adresleri toplam 4 değer tutabilir böylece. Yani 4 değer yazacaksak oraya bu yüzden 3 yazıyoruz.
4.Adım: ve cebinizde 40 lira var
Tanıştırayım buda üçüncü parametremiz cepteki_Para
Değişken adı=cepteki_Para, türü=para, değeri=40
Dostlar saat epey geç oldu ayrıca buradan itibaren programlamanın ikinci büyük temelini (yani DÖNGÜLER) atıcaz örnek bunu gerektiriyor. Dolayısıyla bunu bu makalemin ikinci yarısına bırakıyorum. Görüşmek üzere.
--------------------------
: Programlamanın Temelleri (2. Kısım)
5. Adım: Fiyatlara baktınız Ayvalık ve Uludağ seçeneklerinin fiyatları 90 lira. Bodrum 30, Fethiye 35.
siz fiyatlara baktınız ama nerden? nerde bu fiyatlar tabiki borşürde, broşür nerde? yok. hemen yapalım bitane. dostum öyle yok deyip bırakmak yok. burası sihirli bir dünya. yoksa yapacaksın.
işte tam bu noktada ikinci temel atılyor.
2. Döngüler:
ona seçeneklerimizin fiyatlarını söyleyelim.
birde 1. Kısımda tanımladığımız Secenek dizi değişkenimizi içine fiyatları ve herşey dahil/hariç bilgisinide koyabileceğimiz şekilde düzeltelim
bu aşamada dizi değişkeninin farklı bir kullanımını da görmüş olucaz. bu kulanım şekliyle dizi değişkenimiz çok boyutlu diziler sınıfına girmiş oluyor.
direkt söylüyorum
oldumu sence. biraz anlayacağı şekilde yazmaya nedersin.
Secenek[0,0]=90
Secenek[0,1]=false
Secenek[1,0]=90
Secenek[1,1]=false
Secenek[2,0]=30
Secenek[2,1]=false
Secenek[3,0]=35
Secenek[3,1]=true
şimdi burda 4 tane seçenek var tek tek anlattık oldumu? oldu.
peki 35000 tane seçenek olsaydı ne yapacaktık. oturup
Secenek[0,0]=90
Secenek[0,1]=false
Secenek[1,0]=90
Secenek[1,1]=false
Secenek[2,0]=30
Secenek[2,1]=false
Secenek[3,0]=35
Secenek[3,1]=true
.
.
.
.
Secenek[35000,0]=23
Secenek[35000,1]=false
diye yazacakmıydık?
onun yerine şöyle yapıyoruz.
0 dan 35000 e kadar say diyoruz bilgisayara.
peki nasıl say diyoruz 1 er 1 er.
biz bu sayma eyleminide bilgisayara anlatmak için yine bir değişken kullanmamız lazım ki elle tutulur, göreceli olarak başvurabileceğimiz bir muhattabımız olsun. değişken adı=Sayac, türü=sayı tutabilen bir kap, değeri=0 (şimdilik)
toparlayalım.
Say 0 dan başlayarak Secenek sayısı kadar
sayarkende benden Secenek[Sayac,0]=? değerini fiyat için iste,
Secenek[Sayac,1]=? değerinide herşey dahil/hariç için iste.
Not: burada broşürün fiyat, dahil/hariç vs. kriterleri daha fazla olsaydı burdaki değerleri de tek tek yazmamak için iç içe döngü kullanacaktık. İç içe döngü konusunu Algoritma konusunda iç içe karar yapılarıyla birlikte detaylı bir şekilde inceliyeceğiz.
dedik veeeee baktığımız broşüre bilgisayarıda baktırmış olduk böylece. artık değerleri oda biliyor. ayrıca 35000 kere de olsa 1000000000 kere de olsa biz olayımızı 3 satırda bitirdik. nasıl yaptık. çünkü artık ikinci temeli(DÖNGÜLER) de sapasağlam attık.
Soru : peki hocam biz kafamızda sadece tatili mi canladırabiliyoruz? yooo nerden bu kanıya vardın? biz boşuna mı ne_Yapmak parametresini istedik senden. biz bu döngüyü ve bundan sonraki işlemlerimizi ne_Yapmak değişkeninin değeri Tatilse çalıştırıcaz aksi durumdalarda örn: ne_Yapmak parametresiyle ProgramYaz değerini gönderseydik kafanda_Canlandır olayımız ProgramYaz koşulu doğrultusunda bir eylem gerçekleştirecekti Tatil koşulunun olasılıklarını anlattıktan sonra bir de ProgramYaz koşulunun olasılıklarını yazsaydık eğer.
böylece; kafanda_Canlandır olayına ProgramYaz kabiliyetini de kazandırmış olacaktık.
yukarıdaki döngüyü Tatil koşulu gerçekleşmesi durumunda çalıştırabilmek için Tatil koşuluna bağlı olarak yazalım o zaman,
eğer ne_Yapmak=Tatil ise
{
(Say 0 dan başlayarak Secenek sayısı kadar)
{
sayarkende benden Secenek[Sayac,0]=? değerini fiyat için iste,
Secenek[Sayac,1]=? değerinide herşey dahil/hariç için iste.
}
}
eğer ne_Yapmak=ProgramYaz ise
{
;
}
gibi.
yukarıya koyduğum parantezleri falan kafana takma (şimdilik)
6. Adım: Kafadan bi kere 90 lıkları elediniz. Eee bütün parayı oraya verirsek ne yicez ne içicez deyip acaba tüm masraflar dahilmi onada baktınız. Fethiyede herşey dahil. Güzel Bodruma göre 5 lira fazla olmasına rağmen daha kârlı. Evet Kararınızı verdiniz Fethiye ye gidiceksiniz.
geldik karar verme aşamasına.
bir döngü daha kuralım ki tek tek yazmayalım yine dimi
Hatırlatma: Kullanılmış değişkenleri çöpe atmıyoruz hemen. Tekrar kullanıla biliyor. ikinciye aynı değişkeni kullanacaksak boşaltmadan kullanmayalım ortalık karışmasın.
(Say 0 dan başlayarak Secenek sayısı kadar)
{
eğer Secenek[Sayac,0] küçük tür cepteki_Para'dan ve Secenek[Sayac,1]=true ise Secenek[Sayac,0] -= Secenek[Sayac,0] in %40'ı (karlılık payı olarak)
Not: Tam burda sıralama algoritması gerektiğinden bu noktanın Algoritma konusunda detaylandırılması daha uygun olur. Sıralama meselesi ise detaylı bir konudur.dolayısıyla burada bir sıralama (en iyi metod seçilerek) yapılacak va Fethiye sonucu elde edilecektir.
}
Böylece döngüleride iyice anladığmıza göre Algoritma konusuna bir sonraki makalede geçmek için hiç bir engel kalmadı.
bidakkaaaa. cebinizde işe gidecek para kaldı mı............
alıntıdır....