Türkçe   English   Site Haritası.  


Ders Notları
BYS
CPG
• Doküman
• Programlamaya Giriş
• C ile Bilgisayar Programcılığına Giriş
• Sorular

Site İçi Arama

Programlamaya Giriş

1. Giriş

Amaçlar:

Bilgisayar ve bilgisayar yazılımlarının tanımlanması
Programlama dilleri ve program geliştirme tekniklerinin tanıtılması
Temel problem çözme tekniklerinden olan olan yukarıdan aşağı tasarım (top-down design) tekniğinin tanıtılması ve bu teknikle algoritmaların yazılması
Kullanacağımız C derleyici ortamında, C pogramlarının nasıl hazırlanacağının gösterilmesi

2. Programlamaya Giriş

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

3. 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, Windows XP, Vista ya da Windows NT birer işletim sistemidir. Diğer bazı işletim sistemleri şunlardır : UNIX, LINUX,  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, bizim yazacağımız C programları birer uygulama programıdır.

4. 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 merkezi işlem birimi (MİB) tarafından anlaşılabilir. Diğer bazı dillerde yazılan programlar ise o dilin derleyicisi tarafından merkezi işlem biriminin 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, bir 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. Bu derste öğreneceğimiz C, bir yüksek seviyeli programlama dilidir.
    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. Her programlama dili için ayrı bir derleyici vardır. C’de yazacağınız programlar C derleyicisi ile makina diline çevirilecek ve bu makina dilindeki program çalıştırılacaktır.
    C gibi diğer bazı yüksek seviyeli programlama dilleri arasında Pascal, Fortran, Basic, Java, 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 ve Java)
    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. Örneğin Java derleyicisi Java programlarını böyle ara bir dile çevirir ve bu dildeki programlar bir Java yorumlayıcısı tarafından çalıştırılır.

5. 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. Bu derste, biz, komutlarımızı C dilini kullanarak yazacağız.

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:

  • 1.4.1. 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.
  • 1.4.2. Tasarım :

  • Tasarım aşaması programı oluşturmadaki en önemli adımlardan biridir ve çok kolay değildir. Tasarım için ne kadar çok vakit harcarsak, programı yazma ve çalıştırma aşamalarında o kadar az sorun yaşarız ve programı o kadar çabuk çalıştırırız. Bu aşamada, problemi çözmek için kullanılacak çözüm adımlarını iyice düşünmemiz ve bu çö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 tasarlamak için geliştirilmiş pek çok yöntem vardır. Bunlardan biri de yukarıdan-aşağı tasarım tekniğidir. Bu teknikle ö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 verilen büyük problem daha küçük ve çözümü daha kolay küçük problemlere bölünmüş olur. Bu çözümlerin ardarda sıralanmasıyla problem için bir algoritma geliştirmiş oluruz.
    Oluşturulan algoritma pseudocode denilen, Türkçe ve İngilizce gibi doğal ama sınırlı yapısı olan bir dilde yazılabilir. 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.
  • 1.4.3. Kodlama :

  • Bu aşamada, kağıt üzerinde geliştirdiğimiz algoritmayı bir programlama diline çeviririz ve programı bilgisayara gireriz. Biz C dilini bu aşamada kullanacağız. Bu yüzden, C programlama dilinin yapısını bilmemiz gerekecektir. Algoritmamızın her adımı, ona karşılık gelen C program parçasına çevrilecektir. Oluşturulan program büyük ihtimalle ilk denemede çalışmayacak, çeşitli hatalar verecektir. Kodlama aşamasında bu hataları bulmak ve düzeltmek gerekir.
  • 1.4.4. 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. Bu bazen tasarımda düzeltmeler yapmayı bile gerektirebilir.

6. Basit bir problem

Basit bir problemle program tasarlama işlemini anlatmaya çalışalım. Bir grup öğrenciye anket yapacağımızı ve onlara ülkenin kuzeyinden mi, güneyinden mi, doğusundan mı yoksa batısından mı geldiklerini soracağımızı varsayalım. Anketin sonuçlarına göre her yönden gelen öğrencilerin sayılarını ayrı ayrı bulalım.

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

Kuzey, güney, doğu, batı olmak üzere dört yön var. Her yön için ayrı sayaç tutarsak, her öğrencinin cevabına göre doğru sayacın değerini bir arttırırız. Öğrenciler bitince bu dört sayacın değerini bastırırız.
Girdiler: öğrencilerin cevapları
Çıktılar: 4 tane sayılan değer

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ıralım.

  1. Anket için hazırlık yap.
  2. Anketi başlat: Öğrencileri sıraya diz ve nereden geldiklerini tek tek sor.
  3. Sonuçları bastır.
Bu üç adımı biraz daha ayrıntılı vermemiz gerekir. Bunu da aşağıdaki şekilde yapabiliriz.
  1. Anket için hazırlık yap.

  2.    1.1. Bir kağıda dört kutu çiz ve bunları K, G, D, ve B olarak adlandır.
       1.2. Her kutunun içine ilk değer olarak sıfır yaz.
  3. Anketi başlat:

  4.    2.1. Öğrencilere sıraya girmelerini söyle.
       2.2. Sırada öğrenci olduğu sürece aşağıdaki işlemleri yap.
          2.2.1. Sıradaki öğrenciye nereden geldiğini sor.
          2.2.2. Doğru kutudaki değere bir ekle.
  5. Her kutu içindeki değeri bastır.

Kodlama ve Sınama ve kanıtlama:

Bu son iki aşamayı C’yi öğrendikten sonra siz yapabilirsiniz.

7. Örnekler

Açıkladığımız yazılım geliştirme aşamalarının ilk iki adımı birkaç örnekle daha inceleyelim:

Örnek1: Verilen üç sayının ortalamasının bulunması
Örnek2: Verilen üç sayının en büyüğünün bulunması
Örnek3: Faktoriyel Hesabı
Örnek4: Bir çok sayının işlenmesi
Örnek5: Fibonacci Sayıları


Ö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:
 İlk önce problemimizi aşağıdaki üç ana adıma ayırabiliriz: 

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’den küçükse
             eğer S2 de S3’ten küçükse 
                 en büyük sayı S3�tür 
             değilse                                   ( yani S2 > S3 ise)
                 en büyük sayı S2�dir 
          değilse                                     (yani S1 > S2 ise)
             eğer S1  S3’ten küçükse 
                  en büyük sayı S3�tür 
             değilse                                   (yani S1 > S3 ise)
                  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. 
 

Örnek 4: 

Problem:
Klavyeden bir dizi pozitif veya negatif tam sayı okunacaktır. Kaç sayı okunacağı belli değildir ama dizinin sonu pozitif veya negatif sayı olarak saymadığımız 0 ile işaretlenmiştir.  Problemimiz bu okunacak olan sayıların kaç tanesinin pozitif, kaç tanesinin negatif olduğunu ve bu okunan sayıların ortalamasını bulmaktır.

Problemin Anlaşılması ve Çözümlenmesi: 
İlk yapmamız gereken problemi tam olarak anlamaktır. Programımızın girdisi bir dizi pozitif veya negatif tamsayıdan oluşacak, ve dizinin en son sayısı 0 olacaktır. Diğer bir deyişle sayıları birer birer okuyacağız ve hesaplamalar yapacağız. 0 sayısı okunduğunda hesaplamaları bitirip sonucu kullanıcıya bildireceğiz.
Örneğin bu programın girdisi  6  �3  �8  9  4  �1  5  3  0 olabilir. Bu dizide 5 tane pozitif ve 3 tane de negatif sayı vardır. Kullanıcıya dizide kaç tane pozitif sayı, kaç tane negatif sayı olduğunu ve okunan sayıların (son 0 hariç) ortalamasını bildireceğiz. Girilecek dizide hiç pozitif sayı ve/veya hiç negatif sayı olmayabilir. Bu dizinin ilk sayısı 0 da olabilir demektir. Okuma işlemini sadece ilk 0 değerini görene kadar yapacağız (İlk sıfırdan sonraki sayılar dizimizin bir parçası olarak görülmeyecektir).
     Girdiler: En son sayısı sıfır olan pozitif ve negatif sayılar dizisi.
     Çıktılar: Pozitif sayıların sayısı, negatif sayıların sayısı ve sayıların ortalaması. 

Tasarım:
Bu problemi nasıl çözebiliriz? Yapmamız gereken üç işi (pozitif sayıların sayısının bulunması, negatif sayıların sayısının bulunması, ve sayıların ortalamasının bulunması) birlikte yapmalız.Çünkü dizideki sayıları bir kere okuyacağız ve hesaplamalarımızı bu okuma zamanında yapmalıyız. Ortalamayı bulabilmek için sayıların toplamını bulup toplam sayı miktarına bölmeliyiz. Kabaca çözümümüz şöyle olacaktır. Sayıları teker teker okuyacağız. Her sayıyı okuduktan sonra toplama ekleyeceğiz. Aynı zamanda sayının pozitif veya negatif olmasına göre pozitif sayıların veya negatif sayıların miktarı bir artıracağız.  0 okununca ortalamayı bulunan toplamı sayıların miktarına (pozitif sayıların miktarı + negatif sayıların miktarı) bölünür. Algoritmamızı aşağıdaki şekilde yazabiliriz:

1. PozitifSayaç’ı 0’a eşitle.
2. NegatifSayaç’ı 0’a eşitle.
3. Toplam’ı 0’a eşitle.
4. İlk sayıyı Sayı’nın içine oku.
5. Sayı 0’dan farklı olduğu sürece
    5.1. Sayı’yı Toplama ekle.
    5.2. eğer Sayı 0’dan küçükse
               NegatifSayaç’ı bir artır.
           değilse 
                PozitifSayaç’ı bir artır.
    5.3. Bir sonraki sayıyı Sayı’nın içine oku.
6. Ortalamayı  Ortalama =Toplam / (PozitifSayaç+NegatifSayaç) formülü ile hesapla.
7. Sonuçları (PozitifSayaç, NegatifSayaç ve Ortalama) kullanıcıya bildir.
 

Örnek 5: 

Problem: 
Fibonacci sayıları 0 ve 1 ile başlar ve sonraki her sayı önceki iki Fibonacci sayısının toplamına eşittir. Fibonacci sayıları şunlardır:  0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, .... Bu demek oluyor ki sıfırıncı Fibonacci sayısı 0, birinci Fibonacci sayısı 1, ikinci Fibonacci sayısı 1 olarak devam etmektedir. Problemimiz N. Fibonacci sayısının bulunmasıdır.

Problemin Anlaşılması ve Çözümlenmesi: 
Bu problemde bir pozitif doğal sayı (N) okuyacağız ve N. Fibonacci sayısını kullanıcıya bildireceğiz. 
     Girdiler: bir pozitif doğal sayı N 
     Çıktılar: N. Fibonacci sayısı 

Tasarım: 
Bu problemi çözmek için yapacağımız işler (algoritmamız) aşağıdaki adımlardan oluşmalıdır. 

1. Bir pozitif doğal sayı olan N değerini oku. 
2. N. Fibonacci sayısını (NFibonacci) bul 
3. N. Fibonacci sayısını (NFibonacci) kullanıcıya bildir.

Birinci ve üçüncü adımlar yeterince basit olduğundan daha fazla ayrıntı vermemize gerek yok. Ama ikinci adım hala basit bir problem değil. Bu adımın çözümünü daha ayrıntılı vermeliyiz. Bu yüzden ikinci adımı detaylandıracağız. 

Eğer verilen N değeri 0 veya 1 ise yanıt hemen bulunabilir. Ama N değeri 1 den büyük ise bir döngü içinde N. Fibonacci sayısını hesaplamalıyız. Böylece algoritmamızın ikinci adımı aşağıdaki gibi olacaktır.

2. N. Fibonacci sayısını (NFibonacci) bul
2.1. eğer N=0 ise
            Nfibonacci’nin değerini 0’a eşitle
      değilse
           eğer N=1 ise
                  Nfibonacci’nin değerini 1’ e eşitle
           değilse N nin değeri 1’den büyük bir değer demek, NFibonacci değerini bu durum için bul

Görüldüğü gibi şimdi detaylandırılması gereken sadece bu son adım kalmıştır.  Bu adımı da aşağıdaki gibi detaylandırabiliriz.

N nin değeri 1 den büyük bir değer demek, NFibonacci değerini bu durum için bul:
       2.1.1. Sayaç değişkenini 2’ye eşitle.
       2.1.2. NFibonacci değişkenini  0+1’e eşitle.
       2.1.3. BirÖncekiSayı değişkenini 1’e eşitle
       2.1.4. Sayaç N’den farklı olduğu sürece 
                 2.1.4.1. NFibonacci değişkeni içindeki değeri Temp değişkeni içinde sakla
                 2.1.4.2. NFibonacci ve BirÖncekiSayı içindeki değerleri toplayarak NFibonacci içinde sakla.
                 2.1.4.3. BirÖncekiSayı değişkenini Temp’in içindeki değere eşitle.
                 2.1.4.4. Sayaç değerini bir artır.

Böylece 2.1. adımı bittiğinde NFibonacci değişkeni N. Fibonacci sayısını tutmuş olacaktır. Sonuç olarak algoritmamız aşağıdaki duruma gelmiş olacaktır.

1. Bir pozitif doğal sayı olan N değerini oku. 
2. N. Fibonacci sayısını (NFibonacci) bul
2.1. eğer N=0 ise
            Nfibonacci’nin değerini 0’a eşitle
       değilse
           eğer N=1 ise
                  Nfibonacci’nin değerini 1’ e eşitle
           değilse       ( N nin değeri 1’den büyük bir değer demek)
                 2.1.1. Sayaç değişkenini 2’ye eşitle.
                 2.1.2. NFibonacci değişkenini  0+1’e eşitle.
                 2.1.3. BirÖncekiSayı değişkenini 1’e eşitle
                 2.1.4. Sayaç N’den farklı olduğu sürece 
                      2.1.4.1. NFibonacci değişkeni içindeki değeri Temp değişkeni içinde sakla
                      2.1.4.2. NFibonacci ve BirÖncekiSayı içindeki değerleri toplayarak NFibonacci içinde sakla.
                      2.1.4.3. BirÖncekiSayı değişkenini Temp’in içindeki değere eşitle.
                      2.1.4.4. Sayaç değerini bir artır.
3. N. Fibonacci sayısını (NFibonacci) kullanıcıya bildir.

8. C Programlarının Hazırlanması

Algoritmayı tasarladıktan sonra onu bir programlama dili kullanarak bir program haline getirmek (kodlamak) gerekir. Biz bu amaçla C öğreneceğiz. C programı yazabilmek için önce onun ’gramer’ini öğrenmek gerekir. Bir programlama dilinin gramerine sözdizim (syntax) denir. Bunu ileriki derslerimizde detaylı olarak göreceğiz. Şimdi burada bir C programını yazarken ve çalıştırırken neler yapmamız gerektiğini özetleyeceğiz.

Herhangi bir C programını hazırlamak ve çalıştırmak için aşağıdaki aşamalardan geçmemiz gerekecektir:

  • Kurgulama (Editing)
  • Derleme (Compiling)
  • Çalıştırma (Executing)

Bu aşamaları bir işletim sistemi ortamında (DOS ya da UNIX gibi) ya da kullandığımız dilin sağladığı tümleşik geliştirme ortamında (integrated development environment-IDE) yapabiliriz. Biz bu derste EPI geliştirme ortamı tabanlı bir arayüz kullanacağız. EPI veya aynı özellikleri içeren veya daha görsel birini seçerek kullanabilirsiniz. Bilgisayarınızda başka C derleyicisi olsa bile dersimizi takip ederken EPI derleme ortamlarını kullanmanızı tavsiye ediyoruz. Çünkü ödevlerinizi incelerken biz EPI editorunu kullanarak derleyeceğiz. Siz farklı ortamları kullanabilirsiniz ama özellikle sizden istenilen ödevleri bizlere göndermeden bir kezde EPI editöründe derlemenizi isteyeceğiz.

Şimdi bu program hazırlama aşamalarını kısaca açıklayalım.

Kurgulama:

Yazacağımız C programını bir editör yardımı ile bir kütüğün içine koymalıyız. Kullanacağımız editör vi, emacs, MS editör ya da notepad gibi bir kütüğü ASCII text olarak yaratabilecek olan bir editör olabilir (MS-Word, WordPerfect gibi yazılımlar kullanılmamalıdır). Ya da editörü ile beraber gelen bir paket derleyici ortamında yaratılabilir. Örneğin bizim kullanacağımız EPI ortamındaki editör yardımıyla yaratılan kütüğün adı .c eki ile biter (bu isimlendirme sisteme bağlıdır; bazı sistemler .cpp eki koyabilir). Bu ek o kütüğün bir C programı sakladığını gösterir. Örneğin, Test1.c ve Test2.cpp birer C programı saklayan kütüklerin adları olabilir.

Derleme:

Bir editör yardımı ile bir C programını saklayan Test1.c kütüğünü yaratmış olduğumuzu varsayalım. İkinci adım, bu kütüğü C derleyicisiyle derlemektir. Bir başka deyişle, yüksek seviyeli dille yazılan programımızı, makina diline çevirmemiz gerekmektedir. Eğer yazdığımız programda hiçbir yazım hatası yoksa, C derleyicisi makina dilinde bir program üretecektir. Bu programı saklayan kütüğün adı Test1.obj olabilir (bu isimlendirme de sisteme bağlı). Bu kütüğün içindekileri ekranda göremez, bastıramaz ve bir editörde değiştiremezsiniz. Çünkü bu kütüğün formatı farklıdır. Eğer programımızda yazım ya da gramer hataları varsa, Test1.obj kütüğü üretilmeyecek ve C derleyicisi programımızdaki hataları, hata mesajları ile bize bildirecektir. Bu durumda programımızdaki hataları bulup hataya neden olan yerleri yine editör yardımıyla düzeltmeliyiz. Düzeltmeleri yaptıktan sonra, programımızı yeniden derlemeliyiz. Bu işe programımızdaki bütün yazım hataları temizlenene kadar devam etmeliyiz. Hatasız programlar için yaratılan Test1.obj kütüğü yazdığımız C programının makina dili türünden gösterimidir. Bu dilin komutları makinaya bağlıdır ve yalnızca çalıştığınızın aynısı olan ortamlarda ve makinalarda çalıştırılabilir.

C ve benzeri yüksek seviyeli programlama dilleri programcıların işine yarayacak birçok hazır program parçacıkları sunarlar. Bunlar program yazarken bazı işlemleri yapmada büyük kolaylık sağlarlar. Bağlayıcı (linker) dediğimiz bir program derleyicinin yarattığı makina dilindeki programı bu hazır program parçacıklarından gerekli olanları ile birleştirir ve çalıştırılmaya hazır bir bütün program oluşturur.

Çalıştırma:

Çalıştıracağımız program, yaratılan Test1.obj kütüğündeki program olacaktır. Bunu çalıştımak için yükleyici (loader) dediğimiz yazılım programı belleğe yükler ve MİB’den programı başlatmasını ister. Bazı sistemler bu işlemin işletim sistemi ortamında bir komutla yapılmasına izin verirler. Tümleşik geliştirme ortamında ise editör, derleyici, bağlayıcı ve yükleyici hep birlikte bir paket olarak sunulur. Bu tip ortamlarda programcı programını editörde yazdıktan sonra menüler yardımı ile derleyip çalıştırabilir.

Biz bu derste kullanacağımız EPI (EPIde problem yaşayanlar Dev C++ kursun lütfen) tümleşik geliştirme ortamınında da kurgulama, derleme ve çalıştırma aşamalarını menüler yardımıyla yapacağız. Gelecek haftadan itibaren C programlarının yapısını incelemeye ve basit programlar yazmaya başlayacağız. Ders notlarını anlamanız için bu hafta bu editörü veya istediğiniz diğer editörlerden birini mutlaka bilgisayarınıza yüklemiş ve sitede verilen örnek programları çalıştırmış olmanız gerekiyor.

EPI editörüyle ilgili açıklamak için tıklayın.

Bu derste EPI editörünün yanında aynı özelliklere barındıran diğer editörlerden birinide kullanabilirsiniz. Hatta özelliklerini görmek açısından diğer editörleride bilgisayarınıza indirebilirsiniz. Fakat EPI editörü bu dersimiz için sizin için yeterli olacaktır. Eğer EPI editörünün kurulumunda problem yaşıyor iseniz diğer editörleri tercih edebilirsiniz. EPI editörü ve diğer editörlerle ilgili linkleri dersimizin sol menüsündeki "Kaynaklar" linkine tıklayarak öğrenebilirsiniz.


  Yorumlar

1 adsız 2013-07-05
12 Kasım 2010Evet doÄŸrudur. Bu class yapısının kullanılması kiseyme bir fayda saÄŸlamaz ve kullanılsa bile hız ae7ısından problem doÄŸurur. Dersin anlatılma amacı insanlara kullanabilecekleri yeni bir template classı sunmak deÄŸil .BaÅŸlangıe7 seviyesinde olanlara , OOP’un ne iÅŸe yaradığını kavratmaya e7alışmak ve daha f6nce anlatılan metod, f6zellik kavramlarının kafalarında bir yerlere oturtmaya e7alışmaktır. Benim amacım burada kiseyme fcstadlık falan taslamak deÄŸil , f6ÄŸrendiklerimi insanlarla paylaÅŸmaya e7alışmaktır. Zaten kendimden bahsederken anlattığım gibi web programcılıkla olan gee7miÅŸim e7ok uzun yıllara dayanmıyor.Ayrıca bu iÅŸle profesyonelce ilgilenen veya bu iÅŸten kazandığımla hayatımı idame ettiren biri de deÄŸilim?Ama sizin gibi dcstad-ı Azamları’da gf6rfcntfclfc bir ders e7ekerek bu mevzuyu anlatmaya e7alıştığını da gf6rmedim.Dışardan fetva vererek ahkam kesmek kolay.Hadi bakalım sizde template ile ilgili bir gf6rfcntfclfc bir ders e7ekip , benim yanlışlarımı ortaya koyun ve buradan paylaşın da milleti doÄŸru bilgilendirmiÅŸ olun.Sf6z veriyorum bende bloÄŸumda yeni bir konu ae7arak iÅŸte Murat dcstadın OOP ile ilgili dersi budur bizimkisi tırışkadandır diyeceÄŸim.

  Yorum Ekle

Ad Soyad :
E-Posta :
Mesaj :
Güvenlik Kodu :


Bu sitenin tüm hakları saklıdır. Emine SELÇUK 2007-2012© Emine Sel�uk    0
emineWEBTR