1. Bu site çerezler kullanır. Bu siteyi kullanmaya devam ederek çerez kullanımımızı kabul etmiş olursunuz. Daha Fazla Bilgi.

Programlamaya Giriş

'Bilgisayar Programlama ve Kodlama' forumunda Powers tarafından 15 Ocak 2013 tarihinde açılan konu

  1. Powers

    Powers Administrator Site Yetkilisi

    Bilgisayar Nedir?

    Bilgisayar, mantıksal ve aritmetiksel işlemleri çok hızlı biçimde yapan bir araçtır. Günümüzün bilgisayarları, saniyede milyonlarca aritmetiksel işlemi yapabilecek kapasitededir.

    İlk üretilen bilgisayarlar, oldukça büyük ve yavaştı. Ama gün geçtikçe küçüldüler ve güçleri de hızla arttı. Örneğin, yirmi-otuz yıl önceki ancak bir odaya sığabilecek bir bilgisayarın yaptığı işlerden çok daha fazlasını, bugünkü kişisel bilgisayarlar, daha hızlı bir şekilde yapabilmektedir. Bu yüzden, bilgisayarlar günümüzde çok değişik alanlarda ve ortamlarda kullanılmaktadır. Hemen-hemen her evde ve işyerinde artık bir bilgisayar görmek mümkün olasıdır.

    Bir bilgisayar sisteminin fiziksel yapısını oluşturan, klavye, ekran, işlemci, disk, bellek gibi parçaların hepsi birden bilgisayar donanımı olarak adlandırılmaktadır. Bilgisayarın çalışmasını denetleyen birer komutlar kümesi olan programları da bilgisayar yazılımı olarak adlandırılır. Bir bilgisayar sisteminin, bu iki parçaya da ihtiyacı vardır. Her biri, diğeri olmadan hiçbir işe yaramaz. Günümüzde, donanım fiyatları hızla düşmekte, ama yazılım maliyetleri tam tersine artmaktadır. Bu dersteki amacımız bilgisayar yazılımı geliştirmek olduğundan, biz yalnızca bilgisayar yazılımı ile ilgileneceğiz. Ancak kısaca bilgisayar donanımından da söz etmek yararlı olacaktır.

    Bilgisayar Donanımı

    Gördüğümüz ve dokunabildiğimiz bütün parçalar bilgisayar donanımını oluşturur. Modern bir bilgisayar donanımı, aşağıdaki beş ana parçadan oluşur :

    CPU (Central Processing Unit-Merkezi İşlem Birimi):

    Bu, bilgisayarın çalışmasını düzenleyen ve programlardaki komutları tek tek işleyen birimdir. İşlem hızına göre çeşitli modelleri vardır. Örneğin, Pentium işlemci, 486 işlemci ya da Sparc işlemci dediğimizde, bilgisayarın Merkezi İşlem Birimini (MİB) anlaşılmalıdır.

    Ana Bellek :

    Ana bellek, programların ve verilerin, kullanıldıkları zaman depolandıkları yerdir. MİB işlemlerini, ana bellekte saklanan bu verilere ulaşarak yapar. Ana bellekteki bilgiler sistemin elektrik gücü kesildiğinde kaybolur. Bir belleğin tutabileceği bilgi kapasitesi megabyte (MB - milyon byte) biçiminde ifade edilir. Yaklaşık olarak bir MB, bir milyon harfi depolayabilecek bir alandır. Tipik bir kişisel bilgisayarın ana belleği, 16-32 MB’dır.

    Dış Bellek Birimleri (Secondary Memory Devices) :

    Ana bellekteki bilgiler (elektrik gücüne bağlı olarak), geçici süre saklanabildiği için, uzun süre kalıcı olarak saklamak istediğimiz bilgileri dış bellek birimlerinde depolarız. Bu araçlardan bazıları, disketler, sabit diskler ve teyplerdir. Burada saklanan bilgiler, elektrik kesilmesinden etkilenmez. Tipik bir kişisel bilgisayarın sabit diski, gigabyte (GB) cinsinden ölçülen milyarlarca harfe denk gelen verileri saklayabilir.

    Girdi Birimleri (Input Devices) :

    Kullanıcı, bu birimler aracılığıyla, bilgisayara verileri girer. Girdi birimlerinden bazıları, klavye, fare ve joysticktir.

    Çıktı Birimleri (Output Devices) :

    Bilgisayarın kullanıcıya ileteceği sonuçları göstermek için kullandığı birimlerdir. Bunlardan bazıları ekran ve yazıcıdır.

    Bilgisayar Yazılımı

    Bilgisayar yazılımı (program), bilgisayara bir işi yaptırmak için verdiğimiz komutlar kümesidir. Yazılımları genel olarak iki kategoride sınıflandırabiliriz :

    İşletim sistemleri :

    Kullanıcı ile bilgisayar arasındaki iletişimi sağlayan programlardır. Bilgisayar sisteminin bütün hareketlerini denetler ve sistemdeki MİB ve ana bellek gibi kaynakların yönetimi ile ilgilenirler. Örneğin, sizin kullandığınız Windows’95 ya da Windows NT birer işletim sistemidir. Diğer bazı işletim sistemleri şunlardır : UNIX, DOS, Solaris, MacOS.

    Uygulama Programları :

    İşletim sistemi dışında kalan diğer programlara verilen genel bir addır. Örneğin, MSWord, havayolları rezervasyon sistemi, bilgisayar oyunları, programlama dillerinin derleyicileri, birer uygulama programıdır.

    Programlama Dilleri

    Bir problemi çözmek için gerekli olan komutlar çok değişik programlama dilleri kullanılarak yazılabilir. Bazı programlama dillerinde yazılan programlar, doğrudan bilgisayarın MİB’i tarafından anlaşılabilir. Diğer bazı dillerde yazılan programlar ise o dilin derleyicisi tarafından MİB’in anlayacağı dile çevrilir.

    Programlama dillerini üç genel kategoriye ayırabiliriz :

    Makina dilleri

    Assembly dilleri

    Yüksek seviyeli programlama dilleri (high-level languages)

    Makina dili :

    Her bilgisayar MİB’inin anlayacağı kendi makina dili vardır. Örneğin, Pentium işlemcinin makina dili, Sparc işlemciden farklıdır. Makina dilindeki bir komut, bit (0 ya da 1) gruplarından oluşur. Örneğin, makina dilinin bir komutu iki değerin toplanması ya da bir değerin ana belleğin bir bölgesinde saklanması gibi basit işlemleri içerir. İnsanların makina dilinde program yazması hemen hemen olanaksızdır. Örneğin, makina dilinde iki sayının toplanması,

    01000110011101000111101010000010010101101000010

    biçiminde ifade edilir.

    Assembly dili :

    Bir assembly dili, makina dilindeki komutları İngilizce benzeri bir dille ifade eder. Genelde assembly dilindeki her komut makina dilindeki bir komuta denk düşer. Assembly dilindeki bir program assembler diye bilinen bir yazılım tarafından makina diline çevrilir. Assembly dilinde program yazmak da makina dilinde olduğu gibi zor ve zaman alıcıdır. Assembly dilinde iki sayının toplanması,

    LOAD A

    ADD B

    STORE C

    biçiminde ifade edilir.

    Yüksek Seviyeli Programlama Dilleri ( YSPD ) :

    Makina dilinde çok sayıda komutla yapılabilecek bir iş, yüksek seviyeli programlama dilinin bir komutu ile yapılabilir. Bu yüksek seviyeli diller, İngilizce ya da Türkçe gibi doğal bir dil değil, kendi yapısı ve dilbilgisi kuralları olan, insanlar için anlaşılması kolay olan dillerdir.

    Yüksek seviyeli programlama dilinde yazılan bir program, derleyici (compiler) dediğimiz yazılımlar tarafından, makina dilindeki denk bir programa dönüştürülür. Bilgisayar tarafından çalıştırılacak olan program, makina dilindeki programdır. Bazı yüksek seviyeli programlama dilleri arasında Pascal, Fortran, Basic, C, C++, Cobol, Lisp ve Prolog sayılabilir. Bu dillerin birkaçında, iki sayının toplanması şöyle ifade edilir:

    C:=A+B; (Pascal)

    C=A+B; (C)

    C=A+B (Fortran)

    Bazen yüksek seviyeli programlama dilinde yazılmış bir program, makina diline çevrilmek yerine başka bir ara dile çevrilebilir. Bu ara dildeki komutlar, hiçbir makinaya bağımlı değildir. Bu ara dildeki programlar, o dilin yorumlayıcısı (interpreter) olarak bilinen yazılımlar tarafından çalıştırılır. Bunun amacı, ara dildeki programların değişik bilgisayarlarda hiçbir değişikliğe uğramadan kullanılabilmesidir.

    Yazılım Geliştirme

    Bir program, bir problemi çözmek için yazılan komutlar kümesidir. Bu komutlar, İngilizce ya da Türkçe gibi dillerde değil, bilgisayar sisteminin anlayacağı bir dildedir.

    Bir program yazmadan önce, ilk yapacağımız iş, o problemi nasıl çözeceğimize karar vermek ve çözümün adımlarını belirlemek olmalıdır. Bu işte bize yardımcı olabilecek çeşitli problem çözme teknikleri vardır. Bu tekniklerden yararlandığımızda, yarattığımız çözümü bir programa dönüştürmek kolay olacaktır. En temel problem çözme tekniği, yukarıdan-aşağı tasarım yöntemidir. Bu yöntemde ilk verilen problem, küçük alt problemlere bölünür. Bu alt problemler, gerekirse, daha küçük (basit) alt problemlere bölünürler. En sonunda elde edilen alt problemler, ayrı ayrı çözülürler ve bu çözümler ana problemin çözümünü elde etmek için birleştirilirler. Bu yöntem, algoritma yazımından söz ederken örneklerle açıklanacaktır.

    Bir problemi çözmek için yazacağımız programı oluştururken, genelde, aşağıdaki yazılım geliştirme aşamalarından geçmek zorundayız:

    Problemin Anlaşılması ve Çözümlenmesi :
    İlk yapacağımız iş, problemin tam olarak ne olduğunu anlamaktır. Bu nedenle, problemin çözümünden neler beklediğimizi ve yaratacağımız çözümün girdi ve çıktılarının neler olacağını kesin olarak belirlemeliyiz.

    2. Tasarım :

    Bu aşamada, problemi çözmek için kullanılacak çözüm adımlarını gösteren bir liste yapmamız gerekir. Bir problemin çözüm adımlarını gösteren bu listeye algoritma denir. Böyle bir liste tasarlarken, yukarıdan-aşağı tasarım tekniğini kullanırız: Önce problemin ana adımları çıkarılır; daha sonra, her adım için, gerekiyorsa, daha detaylı biz çözüm tasarlanır. Böylece bir problem için bir algoritma geliştirmiş oluruz.

    Bir programlama diline çevirmeden önce, bu algoritmanın doğru bir çözüm olduğu kanısında olmalıyız. Bu aşamayı atlayarak doğrudan programlamaya geçmek, büyük programlar yazarken işimizi çok zorlaştıracaktır.

    Kodlama :
    Bu safhada kağıt üzerinde geliştirdiğimiz algoritmayı bir programlama diline çeviririz. Bizim durumumuzda bu dil xxx olacaktır. Bu yüzden, xxx programlama dilinin yapısını bilmemiz gerekecektir. Algoritmamızın her adımı, ona karşılık gelen xxx program parçasına çevrilecektir.

    Sınama ve Kanıtlama (Testing and Verifying) :

    Geliştirdiğimiz programın doğruluğunu sınayarak istediğimiz gibi çalışıp çalışmadığını görmek zorundayız. Bu amaçla, program üzerinde çeşitli testler yaparak, programın o testlere nasıl karşılık verdiğine bakarız: Bunu sağlamak için program değişik girdilerle çalıştırılır ve ürettiği sonuçlara bakılır. Sonuçlar beklendiği gibiyse, programın doğru çalıştığı kanıtlanmış olur; değilse doğru çalışmayan parçaları bularak düzeltmemiz gerekir.

    4. Algoritmalar

    Algoritma, bir problemin çözümünün adımlarını gösteren formal bir dilde yazılmış tasarımdır. Kullanılan dil Türkçe ve İngilizce gibi doğal bir dildir ama sınırlı bir yapısı vardır. Bir algoritmada bulunması gereken temel öğeler şunlardır: sıra, karar verme yapıları ve yineleme.

    Sıra:

    Çözüm adımları bir sıraya dizilmiş olarak verilmelidir. Bu sıra çözüm adımlarının hangi sırayla uygulanacağını gösterir. Bir adımın içerdiği alt adımlar numaralama düzeniyle açıkça belirlenir.

    Karar Verme Yapıları:

    Bazı çözüm adımları seçeneğe bağlı olarak uygulanır. Her adımın hangi koşulla uygulanacağı açıkça belli olmalıdır.

    Adım numaralarından seçeneğe bağlı olarak uygulanacak adımın konulan koşulun sağlanması ya da sağlanmaması durumunda mı uygulanacağı belli olmalıdır.

    Yineleme:

    Bazı adımların birkaç kez yinelenmesi gerekebilir. Bu amaçla yinelenecek adımlar yineleme adımının alt adımları olmak zorundadır. Yineleme adımı alt adımların hangi koşullarda yineleneceğini gösteren bir mantıksal ifade kullanmalıdır. Yineleme adımının yapısından yinelenecek adımların hangi koşullarda yineleneceği ve yineleme işleminin ne zaman duracağı belli olmalıdır.

    Algoritmaların Numaralanması

    Yukarıdaki temel öğeler aşağıdaki gibi algoritma adımlarını numaralama yöntemi ile başarılabilir:

    Sıra:

    Sırayla çözülecek adımlara, birbirini izleyen sıra numaraları verilebilir. Örneğin, a, b ve c adımlarının sırayla uygulanacağını gösterir. Eğer bir adım, alt adımları kapsayacaksa, alt adımlar, o adımın numarasını da kapsayacak şekilde numaralanır. Örneğin, a, b, b1,b2 ve c adımlarının sırayla uygulanacağını gösterir.

    Karar Verme Yapıları:

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

    Yineleme:

    Yineleme adımı için aşağıdaki gibi bir yapı kullanabiliriz. Bu yapıda mantıksal-ifade doğru olduğu sürece N.1, N.2, ..., N.m adımları sırayla yinelenir. Her yinelemeden sonra mantıksal-ifade kontrol edilir ve eğer doğru ise yineleme işlemi devam eder; doğru değilse bir sonraki (N+1) adıma gidilir.

    Şimdi, açıkladığımız yazılım geliştirme aşamalarının en önemlileri olan ilk üç adımı birkaç örnekle göstereceğiz. Verilen bir problemi nasıl çözümlediğimizi, tasarım aşamasını ve en sonunda algoritma yazılımını anlatacağız.

    Örnek 1:

    Problem: Verilen üç sayının ortalamasının bulunması.

    Problemin Anlaşılması ve Çözümlenmesi:

    Bu problemde bize üç doğal sayı verilecek ve biz üç sayının ortalamasını bulacağız. Bulduğumuz sayıyı kullanıcıya bildireceğiz.

    Girdiler: üç doğal sayı S1, S2 ve S3

    Çıktılar: bu üç doğal sayının ortalaması

    Tasarım: Bu problemi yukarıdan-aşağı tasarım yöntemini kullanarak çözeceğiz. Çözüm adımlarını bir algoritma gibi göstereceğiz. İlk önce problemimizi aşağıdaki üç ana adıma ayıracağız.

    1. doğal sayıları oku

    2. ortalamayı bul

    3. ortalamayı kullanıcıya bildir

    Birinci adımı biraz daha ayrıntılı vermemiz gerekir. Yani bu durumda alt problemimiz üç doğal sayının okunması olmuştur. Bu adımdaki problemi aşağıdaki gibi çözebiliriz :



    1. doğal sayıları oku

    1.1. ilk doğal sayı S1’i oku

    1.2. ikinci doğal sayı S2’ yi oku

    1.3. üçüncü doğal sayı S3’ ü oku



    İkinci adımda ortalamayı nasıl bulacağımızı belirterek aşağıdaki gibi ayrıntılandırabiliriz :

    2. ortalamayı bul

    2.1. ortalamayı ortalama = (S1 + S2 + S3) / 3 formülü ile hesapla

    Eğer üçüncü adımının yeterince basit olduğunu kabul edersek, sonuç algoritmamız aşağıdaki gibi olacaktır :

    1. doğal sayıları oku

    1.1. ilk doğal sayı S1’i oku

    1.2. ikinci doğal sayı S2’yi oku

    1.3. üçüncü doğal sayı S3’ü oku

    2. ortalamayı bul

    2.1. ortalamayı ortalama = (S1 + S2 + S3) / 3 formülü ile hesapla

    3. ortalamayı kullanıcıya bildir



    Örnek 2:

    Problem: Verilen üç sayının en büyüğünün bulunması

    Problemin Anlaşılması ve Çözümlenmesi:

    Bu problemde üç doğal sayı okuyacağız ve bu üç sayının en büyüğünü bulacağız. Bulduğumuz en büyük değeri kullanıcıya bildireceğiz.



    Girdiler: üç doğal sayı S1, S2 ve S3

    Çıktılar: bu üç doğal sayının en büyüğü



    Tasarım: İlk önce aşağıdaki algoritmanın üç ana adımını yazar ve sonra birinci adımı ve ikinci adımı onların alt adımlarındaki gibi çözeriz. Çözüm olarak aşağıdaki algoritmayı elde ederiz.

    1. doğal sayıları oku

    2. en büyük sayıyı bul

    3. en büyük sayıyı kullanıcıya bildir



    1. doğal sayıları oku

    1.1. ilk doğal sayı S1’i oku

    1.2. ikinci doğal sayı S2’yi oku

    1.3. üçüncü doğal sayı S3’ü oku

    2. en büyük sayıyı bul

    2.1. eğer S1 < S2

    2.1.T. eğer S2 < S3

    2.1.T.T. en büyük sayı S3’tür

    2.1.T.F. en büyük sayı S2’dir

    2.1.F. eğer S1 < S3

    2.1.F.T. en büyük sayı S3’tür

    2.1.F.F. en büyük sayı S1’dir

    3. en büyük sayıyı kullanıcıya bildir



    Örnek 3:

    Problem: Verilen bir pozitif doğal sayının faktöriyelinin bulunması

    Problemin Anlaşılması ve Çözümlenmesi:

    Bu problemde bir pozitif doğal sayı okuyacağız ve bu sayının faktöriyelini kullanıcıya bildireceğiz.



    Girdiler: bir pozitif doğal sayı S

    Çıktılar: S!



    Tasarım:

    Bir sayının faktöriyeli (S!), birden o sayıya kadar olan bütün doğal sayıların çarpımına eşittir. Yani,

    S! = 1 x 2 x .... x (S-1) x S



    Bu kısa anımsatmadan sonra algoritmamızı tasarlamaya başlayalım. İlk ana adımlar :



    1. Sayıyı oku, S

    2. S! hesapla

    3. S! kullanıcıya bildir



    Birinci ve üçüncü adımlar yeterince basit, ancak ikinci adımın ayrıntılandırılması gerekiyor. Yukarıdaki formülü, yineleme yapısını kullanarak hesaplayabiliriz. Buna göre, ikinci adım aşağıdaki alt adımlara bölünebilir (Bu çözüm için, iki değişken kullanıyoruz. İlki S! değerini tutacak (SFakt), diğeri ise (Sayaç), 1’den S’ye kadar sayıların değerini tek tek alacak).



    2. S! hesapla

    2.1. SFakt’i 1’e eşitle

    2.2. Sayacı 2’ye eşitle

    2.3. Sayaç <= S olduğu sürece

    2.3.1. SFakt’ı Sayaç ile çarp ve sonucu SFakt’ın yeni değeri yap

    2.3.2. Sayacı bir arttır

    Burada, 2.3.1 ve 2.3.2 adımları, 2’den S’e kadar tekrarlanacaktır. Sonunda, sayaç S’den bir büyük olacağı için tekrarı kontrol eden mantıksal ifade yanlış olacaktır ve bu adımlar bir daha yinelenmeyecektir.
     
    Tags:

Bu Sayfayı Paylaş

  1. Bu site çerezler kullanır. Bu siteyi kullanmaya devam ederek çerez kullanımımızı kabul etmiş olursunuz. Daha Fazla Bilgi.
  1. Bu site çerezler kullanır. Bu siteyi kullanmaya devam ederek çerez kullanımımızı kabul etmiş olursunuz. Daha Fazla Bilgi.
Yükleniyor...