17 Ekim 2016 Pazartesi

Mühendislik temelleri üzerinde çalışılmalı!

Kimse yenilik ve buluşların hayati olduğunu reddetmiyor, ama aynı zamanda mühendislik temeller üzerinde çalışmak gerekir:
Temel kuralları, ilkeleri ve yapısı
Değerlendirme kriterleri
Karşılaştırma yoluyla
Teorik sınırlarını ve yeteneklerini belirle
Üretim araçlarını belirle
Matematiksel modeller kullan ama gerçek dünyada örnekler üzerine kullanılacağını unutma.

Sorgulanan yeni yöntemler.

"Örgün yöntemlerde matematik vardır. Doğru matematik yöntemleri süreçleri iyileştirir. Bu nedenle, biçimsel yöntemler yazılım kalitesini arttıracaktır. “
Bunun doğru olduğunu net değil!
Hangi yöntem ile yazılım geliştirilecek?
Uygulayıcıların eğitim?
Siyasi konular? Maliyeti? Ölçek?
Aracı olgunluk ve uygunluğu?
Daha iyi sonuç sistemleri var mı? Güvenli? Daha küçük?
Büyük? Daha anlaşılır?

Analogies

Buhar motorları teknolojisi kazan geliştirilme teknolojisinin gerisinde kaldı.
Yazılım ile olan ilişkisi………………………….....

Ne yapılmalı?
Zaman testleri yapılmalı ve iyi mühendislik ilkeleri kullanılmalı:
Doğrulama testleri, onaylama testleri yapılmalı. İkili ve üçlü kontrol sistemleri kullanılmalı.
Süreçleri durdurmadan süreçler üzerinde kontroller yapılmalı.

Yazılım Mühendisliği Temelleri.
Kazan patlamaların nedenleri; çok az bilimsel anlayış vardı. Benzer şekilde, Yazılım mühendisliği disiplini çok yeni ve biz hala temeller üzerinde çalışıyoruz.
İyi bir tasarım nedir?
Yazılım bileşenlerinin belirleme.
Güvenlik kritik sistemler.
Formüllerle ve resmi yöntemlerin rolü
Doğrulama ve onaylama
Sistem evrim

Sorunlar
Bilginin paylaşılmaması (Şirketlerin bilgi paylaşımlarından korkmaları.) Analitik veri yok yada çok az!!!
Bilgi teknolojisi çok hızlı ilerliyor. Bunun sonucu pek çok farklı alanda yazılımlar kullanılıyor. (İsterler artıyor karmaşıklık artıyor.)
Yazılımları kontrol etmek,değerlendirmek ve geliştirmek için çok kısa bir zamanımız var.

Buhar motorları kısa tarihi

İskenderiye’de Heron, 60 MS buhar gücünü kullanmayı denedi.
Thomas Savery ilk buhar gücü ile çalışan motoru üretti.
16-17 YY. buhar motorlarına olan ilgi arttı.
Newcomen 1700 yılında bu motorların yaygın kullanımını için bir silindir ve piston tasarladı.
1786, James Watt büyük Newcomen diye adlandırılan motoru üretti.

Bu arada İngiltere’nin kuzeyinde sanayi devrimi ile ilgili büyük bir potansiyel vardı. Watt and Matthew Boulton isimli üreticiler yeni motor tasarımlarını bu bölgede geliştirdiler (Ağır sanayi atılımı). 1800 yılında Watt’ın patent süresi sona erdi ve yüksek basınçlı buhar motorlarını isteyen herkes üretebilecek hale geldi. (HPSEs). İki tasarım geliştirildi. UK & USA. Ayrı kondansatörler yerine buharın direk pistonları itebilecek şekilde geliştirilmesi sağlandı.

İlk başarılı kullanım buharlı teknelerde oldu.
Oldukça başarılı idi.
Verimliydi, Ucuzdu.
Tekne yolculukları ucuzlamıştı.
Ekonominin büyümesini sağlamış ve tekne şirketleri bu işlerden büyük paralar kazanmışlardı.
BOOM!!!!
Buharlı teknelerdeki yolcular ve mürettabat havaya uçtu.
Tekne içerisindeki basınç miktarı olması gereken oranı aştı….

Sorun neydi?

Yeterli eğitimi olmayan kişiler tarafından kullanım.
Hızlı ve ucuz malzeme kullanımı ve üretimi.
Kötü eğitimli operatörler.
Kötü kalite kontrolü.

Niye böyle oldu?
Sadece para odaklı olarak üretim yapıldı.

Patlamadan sonra neler oldu?

USA’da akademisyenlerden ve mühendislerden oluşan bir grup. Kallite standartları belirlemeye çalıştı. UK’da Watt and Boulton  şirketi bir erken uyarı sistemi geliştirdi. Ancak geliştirdikleri bu sistemi kendi buhar motorları sistemine adapte edemediler.

Buhar teknolojisi…

Bu teknolojinin zayıf noktası (Aşhil topuğu) kazanların buhar nedeni ile patlaya bilecekleri gerçeği.
Kazan teknolojisi buharlı motor teknolojisinin gerisinde kalmış olması.
Maliyeti uygun olmayan geliştirme çalışmaları yapılmış.

Süreç içerisinde
Yüksek basıncı altında çalışabilen, korozyona ve çürümeye dayanıklı malzeme kullanmaya ne gerek var;Ar-Ge çokta önemli değil.

Sonuç

Boom!!!
Buharlı kazanlar patlamaya devam etti.
Neden?
Mühendisler hala yüksek  basınç altında kazanların ne şekilde çalışması gerektiğini bilmiyorlardı. Ayrıca tasarım mühendisleri, sistemlerinin kullanımının nasıl olacağı anlamadı: - Yükleme ortamı - Operatör eğitimi
   - Açgözlülük, aşırı ve güven.

Peki kim suçlandı?
İşciler (Operatörler)

Peki kim suçlanmadı?
Tasarım Mühendisleri

Hükümetin müdahalesi
İşler çözümlenecek garantisi verildi.
Firmalar denetlenecek denildi.

Sonuç?
BOOM!!!
Sonrasında daha fazla buharlı motor üretildi.
1817 yılında UK’da komisyon kuruldu ve buharlı motorların tehlikeleri araştırıldı.
Komite kazanların daha fazla denetlenmesine karar verdi.

Ağır Kayıp
Sadece Amerika’da 1816 ile 1848 yılları arasında.
233  Kazan patladı
2562 İnsan öldü
2097 İnsan yaralandı
Yaklaşık $3,000,000 maddi kayıp oldu.


Araştırma
Philadelphia, the Franklin Institute 6 yıl patlamalar ile ilgili araştırma yapılır. USA devleti maddi olarak destekledi.

Araştırma Sonucunda
Üretimi düzenleyen bir mevzuat komite tarafından onaylandı.
Tararım için temel bazı kurallar geliştirildi.
Ölenlerin ailelerine tazminatlar verildi.
BOOM!!!
Patlamalar devam etti.
Toplumun hükümet üzerindeki baskısı arttı.
Ve mevzuata son şekli verildi!
Nihayet, 1852 yılında, ABD kongre vapur kazanları ile ilgili ağır şartlar gerektiren bir yasayı onayladı.Bu mevzuat ağır test şartlarını da içermekeydi.
Vapur kazan patlamaları azalmaya başlar! ... ancak güvensiz HPSEs hala lokomotif ve ağır sanayide kullanılıyor.


Daha sert standartları
Daha sonra, İngiltere'de parlamento standartları geliştiren bir tasarıyı onaylar.
1905 yılında, ölümlerin sayısı HPSE azalır. 14 Türkiye 383 Amerika Birleşik Devletleri En sonunda,
USA üretim ile ilgili standartları detaylandırır  ve test işine daha fazla önem veren bir standart oluşturur.

Yazılımlarla olan ilişkisi???
Biz bilgisayar çağındayız artık.
Bunların güvenlik açısından kritik yazılımla ne ilişkisi var. Paralelik nedir? (Yazılımlar patlar mı?)

Yazılım ve Güvenliği Kritik Uygulamalar

Güvenliğin önemli olduğu pek çok yerde(Hataya tahammülün olmadığı yada çok az olduğu yerlerde), “safety-critical” güvenlik açısından kritik yazılımlar kullanmaktayız. Eğer bu yazılımlar doğru olarak çalışmaz ise çok büyük sıkıntılarla karşılaşa biliriz. 

Bu yazılımların kullanıldığı yerlerden bazıları;
Nükleer reaktörler
Uçuş kontrol sistemleri
X-ray makinelerde yazılım kontrolörleri

Güvenlik öncelikli uygulamalarda; kapsamlı testler, kod incelemesi ve yazılım geliştirme yöntemleri daha titizlikle uygulanmalıdır. Şu ana kadar yapılan güvenlik öncelikli yazılımlardaki hata oranları diğer yazılımlara oranla daha düşüktür. Fakat bu yazılımların teknolojik olarak ve ekonomik olarak geliştirilmesi daha zordur. Bu yazılımları oluşturmak yıllar sürebilmektedir.

Yazılım Hataları

Yazılım geliştirme sürecinin herhangi bir aşamasında (temel olarak analiz, tasarım, kodlama, test, bakım) yapılan insani hatalardır. Hiçbir yazılımcı veya programcı isteyerek hata yapmaz. Dolayısı ile programı kendi kendine test ederken yaptığı hatayı da görmemesi normaldir. Sıfır hatalı bir yazılım üretmek pratikte mümkün değildir. Ancak doğru hata yönetimi yaparak hata sayısını azaltabilir ve hata oluştuğunda müdahale için daha hızlı olabilirsiniz. 

Uygulama geliştirme aşamasında hatalar 3 grupta değerlendirilir:

Syntax Error – Sözdizimi Hataları
Yazılan programda programlama dili kurallarına aykırı bir takım ifadelerden dolayı karşılaşılabilecek hatalardır.  Düzeltilmesi basit hatalardır. Hatanın bulunduğu satır derleyici tarafından rapor edilir.
Günümüz IDE’lerinde bu sıkıntılar neredeyse yok denecek kadar azdır. Özelikle kod editörlerinin gelişmiş yazım denetimi sayesinde yazılımcılar söz dizimi hatalarını derlemeye gerek bile kalmadan fark edebiliyorlar. Eğer bir derlemede Syntax Error alındı ise obje kod üretilememiştir demektir.

Run-time Error – Çalışma Zamanı Hataları
Programın çalıştırılması sırasında karşılaşılan hatalardır. Programcının ele almadığı bir takım aykırı durumlar ortaya çıktığında programın işletim sistemi tarafından kesilmesi ile ortaya çıkar. Bu tip hatalarda hata mesajı çoğunlukla çalışan işletim sisteminin dili ile verilir.
Eğer bu tip hataları kullanıcı ele almışsa, program programcının vereceği mesajlarla ve uygun şekilde sonlandırılabilir. Bu tip hataların nerelerde ve hangi şartlarda ortaya çıkabileceğini bazen kestirmek zor olabilir.
Örneğin; olmayan bir dosyayı açmaya çalışmak, var olmayan bir dosyanın üzerine yazmaya çalışmak, olmayan bir bellek kaynağından bellek ayırmaya çalışmak, olmayan bir donanıma ulaşmaya çalışmak vs.

Logic Error (Bug) – Mantıksal Hatalar (Böcek)
Karşılaşabileceğiniz en tehlikeli hatadır. Programlama mantığında bir takım şeylerin yanlış düşünülmesinden kaynaklanır. Hata test aşamasında veya müşteri kullanımı sırasında ortaya çıkar.
Örneğin: Hesaplanması gereken veya bulunması gereken değerlerin eksik veya yanlış hesaplanması mantıksal bir hatadır. Bu sorunun giderilebilmesi için analiz aşamasına kadar geri dönülmesi gerekebilir. Bazen bu hatanın nereden kaynaklandığını bulabilmek çok zor olmaktadır. 
Gerek serbest yazılım gerek ticari yazılımların tümünde bug dediğimiz mantıksal hatalar bulunur.
Günümüzde en etkin yazılım firmaları bile yazılımlarında bug olduğunu kabul eder ve zaman zaman bu bugları giderebilmek için ya yazılımlarına yama yazılımlar (Update, Patch) üretirler ya da o yazılımın yeni bir versiyonunu piyasaya sürerler.

Debug (Bugdan arındırma)
Mantıksal hataları giderebilmek ve yazılımdaki hataları (bug) bulabilmek için yapılan işlemin adıdır. Genellikle yazılan programın adım adım ve denetim altında çalıştırılmasıdır.
Programın her adımında ilgili değişkenlerin hangi değere sahip olduğunu görmeyi sağlayarak anormal bir durumu daha kolay izleyip bulmanızı sağlar.






Bağlayıcı (Linker) ve Çalıştırma (Execute)

Bağlayıcı: Derleyici tarafından object dosyasına çevrilen bir veya birden çok dosyanın birbirleri ile ilişkilendirmesi ve tek bir çalıştırılabilir dosyaya (Örneğin Windows exe) çevrilmesini sağlayan yazılımdır. Çalıştırma: Oluşturulan makine dili programının çalıştırılması adımıdır.



Yorumlayıcı (Interpreter) nedir?

Yorumlayıcı, kaynak kodu kısım kısım ele alarak doğrudan çalıştırır. Yorumlayıcılar standart bir çalıştırılabilir kod üretmezler. Yorumlama işlemi aşama aşama yapılmadığı için genellikle ilk hatanın bulunduğu yerde programın çalışması kesilir. Derleyicilerin tersine kodun işlenmeyen satırları üzerinden hiç geçilmez ve buralardaki hatalar ile ilgilenilmezler. Yorumlayıcılar genelde kaynak koddan, makine diline anlık olarak dönüşüm yaptıkları için, derleyicilere göre daha yavaş çalışırlar. Ayrıca kodu iyileştirme (optimizasyon) imkanı da çoğu zaman yoktur.

Derleyici (Compiler) nedir?

Derleyici, yazılan programın kaynak kodunu okuyup içerisinde mantıksal veya yazınsal hatalar olup olmadığını bulan, bulduğu hataları kullanıcıya göstererek programın düzeltilmesine yardım eden, hata yoksa programın çalıştırılması öncesinde kaynak kodu makine diline çeviren bir yazılımdır.

IDE Nedir? (Integrated Development Environment – Tümleşik Geliştirme Ortamı)

IDE bilgisayar programcılarının hızlı ve rahat bir şekilde program geliştirebilmesini amaçlayan, geliştirme sürecini organize edebilen birçok araç ile birlikte geliştirme sürecinin verimli kullanılmasına katkıda bulunan araçların tamamını içerisinde barındıran bir yazılım türüdür.
Tümleşik geliştirme ortamlarında olması gerekli en temel özellikler aşağıdaki gibidir:
Programlama diline göre sözdizimi renklendirmesi yapabilen kod yazım editörü.
Kod dosyalarının hiyerarşik olarak görülebilmesi amacıyla hazırlanmış gerçek zamanlı bir dizelge.
Tümleşik bir derleyici, yorumlayıcı ve hata ayıklayıcı.
Yazılımın derlenmesi, bağlanması, çalışmaya tümüyle hazır hale gelmesi ve daha birçok ek işi otomatik olarak yapabilmek amacıyla küçük inşa araçları.
En bilinen tümleşik geliştirme ortamları: Eclipse, Microsoft Visual Studio, Code::Blocks, Dev-C++, Anjuta, KDevelop, NetBeans…



Bilgisayarınızda yukarıdaki programlar olmadanda farklı dillerde geliştirilen kodları online olarak çalıştırabilirsiniz. Tek yapmanız gereken aşağıdaki online ide sitesine gidip, hangi dilde kod yazacağınıza karar verip kodları yazmak ve arkasından sitede sağ tarafta görülen yeşil Run tuşuna tıklamak. Yazdığınız kodlarda hata yakso kodlarınız direk o site üzerinden derlenerek çalışacaktır.

Online ide:  https://ideone.com/


 

Programlama Nedir?

Bir programı oluşturabilmek için gerekli komutların belirlenmesi ve uygun biçimde kullanılmasına programlama denir.
Programlama, bir programlama dili kullanılarak yapılır.
Bu programlama dili Java ve C# gibi yüksek seviyede bir dil olabileceği gibi C, Assembly ve bazı durumlarda makine dili de olabilir.
Yazılan kaynak kodu genellikle bir derleyici ve bağlayıcı yardımıyla belirli bir sistemde çalıştırılabilir hale getirilir. Ayrıca kaynak kodu, bir yorumlayıcı yardımıyla derlemeye gerek duyulmadan satır satır çalıştırılabilir.

Programlama aktivitesi genelde “Merhaba Dünya” (Hello World!) programı yazılmasıyla başlar.
Bir programlama dilini öğrenmekteki tek zorluk programlamanın ne olduğunu öğrenmektir. Bundan sonraki aşamalar daha basittir.

Program Nedir?

Var olan bir problemi çözmek amacıyla bilgisayar dili kullanılarak oluşturulmuş anlatımlar (komutlar, kelimeler, aritmetik işlemler, mantıksal işlemler vb.) bütününe «program» denir.

14 Ekim 2016 Cuma

Doğrusal Arama (Linear Search)


Dizinin ilk elemanından başlanarak dizinin her elemanı, arama değeriyle karşılaştırılır. Aranan değer bulunduğunda ilgili dizi elemanının indisi değer olarak döndürülür.  Aranan değer bulunamazsa -1 değeri döndürülür, Dizi herhangi bir şekilde sıralanmadığından değer ilk ya da son elemanda bulunabilir.  Dolayısıyla, program ortalama olarak, arama değeriyle dizinin elemanlarının yarısını karşılaştırmalıdır.




Dizilerde Arama ve Sıralama Algoritmaları

Arama ve sıralama algoritmaları (search and sort algorithms) programlama ve yazılım geliştirme dünyasında hem akademik hem de endüstri açısından önemli bir yere sahiptirler. Özellikle büyük veri kaynakları ile çalışırken,  aradığınız veriye en hızlı şekilde ulaşmanız doğru algoritmayı kullanmanıza bağlıdır.

Dizilerde Arama
Bir dizinin, belli bir arama değerine eşit olan bir değer içerip içermediğine karar vermek gerekebilir.
Dizinin belirli bir elemanını bulma sürecine arama denir.

Ders kapsamında iki tane arama tekniği üzerinde durulacaktır:
Doğrusal Arama (Linear / Sequential Search)
İkili Arama (Binary Search)

Dizi Kullanımlarında Dikkat Edilmesi Gereken En Önemli Nokta!

Dizi boyunca döngü kullanırken dizi indisi asla 0’ın altına inmemeli ve her zaman dizideki toplam eleman sayısından az olmalıdır (büyüklük-1).

Döngü devam şartının bu aralığın dışındaki elemanlara ulaşılmasını engellediğinden emin olmamız gereklidir.

Dizi sınırlarının dışındaki elemanları kullanmanın yaratacağı hatalar (genelde ciddi hatalardır) sistemden sisteme farklılık gösterir.

Dizilere Başlangıç Değeri Verme

Bir dizi, doğal olarak bazı veriler içerecektir. Diziye aynı anda birden fazla değer atanabilir. Bunun için söz konusu değerler { } işaretleri arasında virgül ile ayrılarak yazılırlar.

Örnek:
float  kutle[5] = { 8.471, 3.683, 9.107, 4.739, 3.918 };
int    maliyet[3] = { 25, 72, 94 };
double a[4] = { 10.0, 5.2, 7.5, 0.0};

Küme parantezleri sonlandırıcı ; karakteri ile bitmektedir. Bir dizinin uzunluğu belirtilmeden de başlangıç değeri atamak mümkündür.

Örnek:
int   a[] = { 100, 200, 300, 400 };
float v[] = { 9.8, 11.0, 7.5, 0.0, 12.5};
Derleyici bu şekilde bir atama ile karşılaştığında, küme parantezi içindeki eleman sayısını hesaplar ve dizinin o uzunlukta açıldığını varsayar.

Yukarıdaki örnekte, a dizisinin 4, v dizisinin 5 elemanlı olduğu varsayılır. Dizilere başlangıç değeri atarken, tüm elemanlara değer vermeden de atama yapmak mümkündür.

Örnek:
int sayilar[20] = {0};
Tüm dizi elemanlarına 0 değeri atanır…
int sayilar[20] = {1, 2, 3};
Dizinin ilk 3 elemanına 1, 2 ve 3 değerleri atanır. 4’ten itibaren olan dizi elemanlarına 0 değeri atanır…

Sayısal tipteki dizi elemanlarına 0 değeri, metin tipindeki dizi elemanlarına NULL değeri atanır.

Dizilerin Bildirimi

Bir dizi çok sayıda değişken barındırdığından, bunları birbirinden ayırt etmek için indis adı verilen bilgiler kullanılır.
Bir dizi, içerisinde çok fazla sayıda değişken barındırabilir.  Bunları birbirinden ayırt etmek için indis adı verilen bilgiler kullanılır. C Programlama Dili'nde, bir dizi hangi tipte tanımlanmış olursa olsun başlangıç indisi her zaman 0'dır. C Programlama Dili'nde, bir dizi hangi tipte tanımlanmış olursa olsun başlangıç indisi her zaman 0'dır.

Diziler tanımlanırken;
dizinin adı,
dizinin boyutu,
dizi elemanlarının hangi tipte olacağı belirtilmelidir.

Bir dizinin bildirim işleminin genel biçimi aşağıdaki gibidir:

   veriTipi dizi_adı[eleman_sayısı];

Örneğin; double türündeki 8 adet öğrenci notunu bellekte tutmak için aşağıdaki gibi bir dizi tanımlayabiliriz:
        double ogrenci_notu[8];

Şu andaki bilgilerimizle bunu nasıl yapabiliriz?

 double ogrenci_notu1;
 double ogrenci_notu2;
 double ogrenci_notu3;
 double ogrenci_notu4;
 double ogrenci_notu5;
 double ogrenci_notu6;
 double ogrenci_notu7;
 double ogrenci_notu8;


Dizinin ismi ogrenci_notu dur.

Dizinin 8 elemanı
ogrenci_notu[0], ogrenci_notu[1], ......, ogrenci_notu[7] şeklinde gösterilmiştir.

ogrenci_notu[0] içinde tutulan değer 45, ogrenci_notu[1] içinde tutulan değer 56, ogrenci_notu[7] içinde tutulan değer 90 dır.

Bu dizinin ilk iki elemanının içinde tutulan değerlerin toplamını yazdırmak isteseydik;
printf("Sonuc: %f", ogrenci_notu[0] + ogrenci_notu[1]);
Sonuc: 101

Bu dizinin yedinci elemanının değerini ikiye bölüp, oluşan sonucu x değişkenine atasaydık;
x = ogrenci_notu[6] / 2;

Dizinin yedinci elemanı ile yedinci dizi elemanı arasındaki farkı önemlidir. Dizi indisleri 0’dan başladığı için “dizinin yedinci elemanı” 6 indisine sahiptir. ”yedinci dizi elemanı” ise 7 indisine sahiptir ve aslında dizinin sekizinci elemanıdır.

Dizi Nedir?

Diziler, veri yapısı türlerinden bir tanesidir.(Array, Struct, Pointer, Class …) İçerisinde birden fazla, aynı tip ve isimdeki veriyi bellekte depolayabilen değişkenlere dizi denir.


İçerisinde birden fazla,
aynı tip ve
aynı isimdeki
veriyi bellekte depolayabilen değişkenlere dizi denir.

Örneğin; bir sınıftaki öğrencilerin notlarını saklamak için dizileri kullanmak mümkündür.

Sonsuz Döngüler

Bir döngü işlemini sonsuz kere tekrarlarsa bu döngü sonsuz döngü olarak adlandırılır.
Örnekler:
    while(1) {
         printf("Sonsuz döngü...\n");
    }

     while(7>3) {
         printf("Sonsuz döngü...\n");
      }

    for(;;)
         printf("Sonsuz döngü...\n");



İç İçe Geçmiş Döngüler

Bir program içinde birbiri içine geçmiş birden çok döngü kullanılabilir. Bu durumda (bütün programlama dillerinde olduğu gibi) önce içteki döngü, daha sonra dıştaki döngü tamamlanır.
   
    for (i=1; i<n; i++){
            //1.dış döngü
        for (j=1; j<m; j++) {
            //2.iç döngü
        }
    }

Continue Deyimi

Bir döngüyü terk etmeden bir adımın atlanması söz konusu olduğunda kullanılan deyimdir.

Kullanım biçimi aşağıdaki gibidir:

    continue;

Break Deyimi

Döngü işlemi devam ederken döngünün koşuluna bağlı olmaksızın döngüden çıkılmasını sağlayan deyimdir.

Döngü içinde bu deyime sıra geldiğinde, break ardından döngü sonuna kadar olan tüm deyimler atlanır ve döngüye bir sonraki adımdan itibaren devam edilir.

Tüm döngü türlerinde kullanılabilir.

Kullanım biçimi aşağıdaki gibidir:

    break;
    

Do…while Döngüsü

while döngüsü ile aynı mantıkta çalışır.

Farkı, koşulun döngü sonunda sınanmasıdır.
Yani koşul sınanmadan döngüye girilir ve döngü en az bir kez yürütülür. Koşul olumsuz ise döngüden sonraki satıra geçilir.

Genel yazım biçimi aşağıdaki gibidir:   
    do
    {
          ...
          döngüdeki deyimler;
          ...
        } while (koşul);

Örnek 2

do {
    İşlem A;
         İşlem B;
         ..........

} while (koşul);

While Döngüsü

Bir koşulun gerçekleşmesi durumunda belirli işlemlerin tekrarlanması söz konusu ise while döngülerinden yararlanılır.
while döngüsünün çalışabilmesi için koşulun başlangıçta mutlaka doğru olması gerekir.
Genel yazım biçimi aşağıdaki gibidir:

while (koşul)
      {
       ...
        döngüdeki deyimler;
       ...
      }

Örnek 2

while (koşul ){
     İşlem A;
         İşlem B;
         ..........
}
İşlem C;
...........

For Döngüsü

Belirli sayıda tekrarı çalıştırmak için kullanılır. for döngüsü bir sayaçlı döngüdür. Yani çalışma sayısı bellidir. Döngü sayısını denetlemek için bir başlangıç ve bir bitiş değeri belirtilmektedir.
Normal durumda sayaç birer birer artmaktadır. 

Genel yazım biçimi aşağıdaki gibidir:

 for (başlangıç; koşul; artım){
       ...
        döngüdeki deyimler;
       ...
      }

Örnek 2

for (int i = başla; koşul; i=i+artış miktarı)
{   
    işlem A;
    işlem B;
    .......
}
    işlem C;

Diğer Örnekler





1’den 100’e kadar birer birer arttırma:
    for ( i = 1; i <= 100; i++)

100’den 1’e kadar birer birer azaltma:
    for ( i = 100; i >= 1; i--)

7’den 77’ye kadar yedişer yedişer arttırma:
    for ( i = 7; i <= 77 ; i += 7)

2, 5, 8, 11, 14, 17, 20 değerlerini alacak biçimde değiştirme:
    for ( j = 2; j <=20; j += 3)

Döngü

Programlamada en çok kullanılan özelliklerden biri de döngülerdir. Döngüler aracılığı ile belli şartlar gerçekleşinceye kadar veya gerçekleştikçe bir komut parçasını çalıştırmak mümkündür. Bir programda bir komut parçasının belli koşullar gerçekleştikçe veya gerçekleşinceye kadar defalarca icra etmesi gerekebilir. Bu defalarca çalışmayı sağlayan komutlara döngü (çevrim) yapıları denir. Döngü (loop) deyimleri, bir kümenin belli bir koşul altında tekrar edilmesi için kullanılır.

Döngü (loop) deyimleri, bir işlemi yerine getiren kod kümesinin belli bir koşul altında tekrar edilmesi için kullanılır.

Bir değişken belirli bir değerden başlayıp, son değeri alıncaya kadar belirtilen işlemler tekrarlanır.
Örn: n! değerinin hesaplanması (faktöriyel)

Genellikle bir programlama dilinde birden fazla döngü çeşidi bulunmaktadır. Döngü çeşitleri kullanım yerlerine göre kolaylıklar sağlamaktadır.Döngü yapıları genelde karşımıza iki tür olarak çıkar. Çalışma sayısının belli olduğu durumlarda sayaçlı döngüler, döngü sayısının değişken olduğu durumlarda ise koşullu döngüler kullanılır. C programlama dilinde sayaçlı döngü yapısına for döngüsü, koşullu döngü yapısına while ve do-while döngüleri örnek olarak verilebilir.

C programlama dilinde:
for,
while,
do...while
olmak üzere üç tip döngü deyimi vardır.

Diğer programlama dillerinde olduğu gibi, bu deyimlerle istenildiği kadar iç-içe döngü yapısı kullanılabilir.

10 Ekim 2016 Pazartesi

? Karşılaştırma Operatörü

Bu operatör, if-else karşılaştırma deyiminin yaptığı işi sınırlı olarak yapan bir operatördür.
Genel yazım biçimi:
   
    (koşul) ? deyim1 : deyim2;

İlk önce koşul sınanır. Eğer koşul olumluysa deyim1, olumsuzsa deyim2 değerlendirilir.
deyim1 ve deyim2 de atama işlemi yapılamaz. Ancak koşul deyiminde atama işlemi yapılabilir.
deyim1 ve deyim2 yerine fonksiyon da kullanılabilir.

Örnek:
    x = ( a > b ) ? a : b;

Yukarıdaki ifadede koşul a'nın b'den büyük olmasıdır. Eğer olumluysa x adlı değişkene a değeri atanır, Olumsuzsa x adlı değişkene b değeri atanır.
Örneğin if-else bloğu ile gösterimi:

if (a > b)
    x = a;
else
    x = b;


Örnek:
    int sayi = 15;
    x = ( sayi < 10 ) ? printf("yazi1") : printf("yazi2");

if-else ve switch-case Kullanımlarının Karşılaştırması

1. İşlevsellik: C programlama dilinde switch-case deyimi sadece char ve int veri türlerini destekler. Bu durum if-else deyimine göre dezavantajdır. switch-case deyimlerinde aralık kontrolü (x > 1000) yapılamaması yine bir dezavantajdır.

2. Performans: Her iki karşılaştırma deyiminin kullanımı farklı derleyicilerde ve farklı programlama dillerinde farklı performans sonuçları üretebilir. Genelde switch-case kullanımı daha performanslı çalışır.

3. Okunabilirlik: switch-case deyimlerinin kod okunabilirliği her zaman daha yüksektir.

switch-case Kullanım Hataları

break deyiminin kullanılmasının unutulması.
switch-case bloğundaki { } sembollerinin kullanımlarının unutulması.
default deyiminin ve içeriğinin kullanımının unutulması.
Kontrol edilen değişken ile verilen sabitlerin farklı tipte olması.
int ve char veri türleri dışında değişken tanımlamaya çalışmak (double, string)



switch…case Bloğu

Switch-case yapısı, bir değişkenin aldığı değerlere bağlı olarak program akışındaki belirli işlemlerin yerine getirilmesini sağlar. Aslında bu tür işlemleri if deyimi yardımıyla yerine getirebiliriz. Ancak bazı uygulamalarda if deyiminin kullanılması programın karmaşıklığını artırabilir ve okunabilirliğini azaltabilir.

Eğer bir değişkenin aldığı değer belirli sabitlerle karşılaştırılacak ve bunun sonucunda farklı işlemler yapılacak ise if deyimi yerine switch deyimi kullanmamız daha sağlıklı olacaktır. Önemli bir nokta, switch-case yapısı sadece char ve int veri türleri için kullanılabilir.


Bir değişkenin aldığı değerlere bağlı olarak, program akışındaki belirli işlemlerin yaptırılmasını sağlar.
Aslında bu tür işlemleri if deyimi yardımıyla yerine getirebiliriz.
Ancak bazı uygulamalarda if deyiminin kullanılması programın karmaşıklığını artırabilir ve okunabilirliğini azaltabilir.
Eğer bir değişkenin değeri belirli sabitlerle karşılaştırılacak ve bunun sonucunda farklı işlemler yapılacak ise if deyimi yerine switch deyimi kullanmamız daha sağlıklı olacaktır.
Sadece char ve int veri türleri için kullanılabilir.

Yazım Şekli
switch (değişken) {
    case sabit1:  
        deyim1
        break;
    case sabit2:
        deyim2
        break;
        …
    case sabitn:
        deyimn
        break;
    default:
         deyimd;
    }

değişken değeri sabit1 değerine eşitse  deyim1 çalıştırılır ve break kullanılarak bloktan çıkış yapılır.
değişken değeri herhangi bir sabite eşit değilse default  sabitinin deyimi deyimd çalışır.

if-else Kullanım Hataları

Hata-1
if sayi==10         //Söz dizimi hatası   
   printf ("Girilen sayi 10\n");

Koşul ifadesinde ( ) sembolleri kullanılmadığı için “syntax error” hatası alınır (Söz dizimi hatası).

Hata-2
if (sayi==10);            //Boş ifade
   printf ("Girilen sayi 10\n");

Koşul ifadesinden sonra ; sembolü kullanılmıştır. C derleyicisi için boş bir ifadedir. Sonraki satır bu satırdan bağımsızdır.

Hata-3
if (10<=sayi<=50)          //Mantıksal Hata   
Sonucu her zaman doğru olan mantıksal bir hatadır.

Koşul ifadesi soldan sağa doğru değerlendirilir. sayi değişkenin değeri 10 ile karşılaştırılır.
10’dan küçükse false yani 0 sonucu döner,
10’dan büyükse true yani 1 sonucu döner,
Her iki durum da (0 veya 1 sonucu) dönen değer 50’den küçük olacağı için bu ifade her zaman doğru sonuç verir.
Bunun yerine  ((sayi>=10) && (sayi<=50)) koşul ifadesi kullanılmalıdır.


Hata 4
if (sayi=10)             //Mantıksal Hata
Sonucu her zaman doğru olan mantıksal bir hatadır.
Koşul ifadesinde karşılaştırma operatörü == yerine, atama operatörü = kullanılmıştır.
 Atama sonucunda 10 değeri oluşur.
10 değeri 0’dan büyük olduğu için sonuç “true” dönecektir ve bu da yanlış bir sonuç üretecektir.

Atama operatörü yerine, == karşılaştırma operatörü kullanılmalıdır.

Koşullarda Hızlı Değerlendirme

C programlamada, koşulların mantıksal değerlendirmelerinde, beklenilen değere ulaşıldığında koşulun tamamı değerlendirilmeden koşuldan çıkılır.

VEYA kullanımında koşulun ilk kısmı DOĞRU (true) ise koşulun tamamı DOĞRU olacağı için koşulun ikinci kısmı değerlendirilmez.

VE kullanımında koşulun ilk kısmı YANLIŞ (false) ise koşulun tamamı YANLIŞ olacağı için koşulun ikinci kısmı değerlendirilmez.

Örnek: if ((a>b) && (a<c)) eğer (a>b) YANLIŞ ise (a<c) değerlendirilmez.

Örnek: if ((a>b) || (a<c)) eğer (a>b) DOĞRU ise (a<c) değerlendirilmez.

Yazdığınız programın performansı açısından koşulların nasıl değerlendirildiğini iyi bilip, ona göre koşul sırası koymamız gerekmektedir.

Örnek: if ((ögrenci_no==12345) && (ögrenci_isim="Veli"))

Bu örnekte en hızlı şekilde YANLIŞ (false) sonucu almak istiyorsak, en çok seçilebilir olan koşulu en sola yani başlangıca koymamız gerekmektedir.

İç içe if…else Blokları (Nested If)

if-else yapıları içerisine başka if-else yapıları yerleştirerek birden fazla koşul aynı anda test edilebilir.

if (sayi < 0)
   printf("Negatif sayı girdiniz\n");
else
     if (sayi > 0)
          printf("Pozitif bir sayı  girdiniz\n");
     else
         printf("Sıfır sayısını girdiniz\n");

Diğer bir kullanım şekli aşağıdaki gibidir:

     if(koşul_1) {
        deyimler; //(küme_1)          
      }
      else if(koşul_2) {
        deyimler; //(küme_2)
      }
      ….
      ….
      else if(koşul_n-1) {
        deyimler; //(küme_n-1)
      }
      else {
        deyimler; //(küme_n)
       }


Örnek: Girilen notun harf karşılığını bulma
Girilen not;
60 ile 65 arasındaysa DD
65 ile 70 arasındaysa DC
70 ile 75 arasındaysa CC
75 ile 80 arasındaysa CB
80 ile 85 arasındaysa BB
85 ile 90 arasındaysa BA
90 ile 100 arasındaysa AA
yazdıran bir program yazalım. Bunların dışındaysa «Uygun değer girmediniz!» şeklinde uyarı verip, programdan çıkacak.

Cevap:
Standart C kütüphanesinde bulunan printf() fonksiyonu, değişkenlerin tuttuğu değerleri, onların adreslerini veya bir mesajı ekrana belli bir formatta yazdırmak için kullanılan fonksiyondur.

scanf() fonksiyonu klavyeden veri okumak için kullanılan fonksiyondur.








if…else Bloğu

if ve else tek bir karşılaştırma deyimi olup else kullanımı isteğe bağlıdır.
Eğer bu koşul olumlu ise if den sonraki bölüm yürütülür ve else den sonraki bölüm atlanır.
 Koşul olumsuz ise if den sonraki küme atlanır ve eğer varsa, else den sonraki kümedeki işlemler gerçekleştirilir.


if (koşul)
   { Doğru ise İşlem1}
else
   { Yanlış ise İşlem2}

Aşağıdaki her iki örnek aynı işlemi gerçekleştirmektedir. Tek fark birinci örnekte { } sembollerinin kullanılmasıdır. Tek satır deyim içeren bloklarda, { } sembollerinin kullanılmasına gerek yoktur.


if (sayi < 0) {
   printf("Negatif sayı girdiniz\n");
}
else {
  printf("Sıfır veya pozitif bir sayı  girdiniz\n");
}


if (sayi < 0)
   printf("Negatif sayı girdiniz\n");
else
  printf("Sıfır veya pozitif bir sayı  girdiniz\n");

Koşul

Akış kontrollerinin ve koşul ifadelerinin hem programlama dillerinde ve hem de uygulama altyapısında her zaman önemli bir yeri vardır. İyi bir yazılım geliştiricinin koşul ifadelerini iyi bilmesi gerekir. Yazdığımız uygulamanın hangi koşulda nasıl davranacağını bilip buna göre bir akış kontrolü oluşturmamız gerekir.

Tüm programlama dillerinde olduğu gibi en temel koşul ifadesi «if-else» bloklarıdır.

Koşul ifadelerinin ve akış kontrollerinin programlama dillerinde ve uygulama altyapısında her zaman önemli bir yeri vardır.
Yazdığımız uygulamanın hangi koşulda nasıl davranacağını belirterek bir akış kontrolü oluşturabilmek için koşul ifadelerinin iyi bilinmesi gereklidir.

Tüm programlama dillerinde olduğu gibi en temel koşul ifadesi «if-else» bloklarıdır.

Sonucu DOĞRU veya YANLIŞ olan herhangi bir ifadeye “koşul” denir.
DOĞRU -> «1» ile gösterilir.
YANLIŞ -> «0» ile gösterilir.

Örnek:
if (kisi_boy > 170)
    printf("Uzun boylusunuz\n");

(kisi_boy > 170) ifadesi bir koşuldur.

Koşullar, karşılaştırma operatörleri ve mantıksal operatörler kullanılarak oluşturulurlar.


8 Ekim 2016 Cumartesi

Hanoi Kuleleri Oyunu C#.Net (WPF)

Uygulama C#.Net (WPF) ile geliştirilmiştir.

 
Hanoi Kuleleri Oyunu Nedir?
Hanoi kuleleri oyunu, basit ve matematik temelli bir bulmacadır. Oyun 3 sopa ve bu sopalar içerisinde bulunan halkalardan oluşur. Oyunun amacı bu halkaları sıralı bir şekilde en sağdaki sopaya sıralamaktır. Oyunda her seferinde sadece bir halka taşınabilir. Her hamlede sadece en üstte bulunan halka diğer bir sopaya taşınabilir. Diğer sopada daha önceden halkalar bulunabilir ancak hiçbir halka kendisinden küçük bir halkanın üzerine koyulamaz. 
En az hamde oyunu tamamlamakta diğer bir önemli konudur. 
En az hamle sayıları 
3 halka = 7 hamle 
4 halka = 15 hamle 
5 halka = 31 hamle 
6 halka = 63 hamle 
7 halka = 127 hamle 
8 halka = 255 hamle

Uygulamanın Bütün Kodları: http://www.fauset.hol.es/codes/HanoiTowers_Wpf.rar

7 Ekim 2016 Cuma

Printf ve Scanf

printf () - Tip belirleyici (conversion specifier)

% işareti ile başlar ve bir veya iki karakterden oluşur (%d gibi). Ekrana yazdırılmak istenen değişkenin tipi, % işaretinden sonra belirtilir. Ayrıca biçim ifadesinin içine, sola - sağa yaslama, noktadan sonra x basamak yaz vb gibi isteklerimizi belirten karakterler de ekleyebiliriz.
Gerçek sayıların yazdırılmasında, noktadan sonra yazılacak basamak sayısı durumların ifade edilmesi için ve tamsayıların aynı hizada yazdırılması için nokta operatörü veya rakamlar kullanılır. Aynı şekilde karakter katarlarının sağa ya da sola dayalı yazdırılması için veya bir karakter katarındaki karakterlerin kaç tanesinin yazdırılacağını belirtmek için de yine nokta, eksi gibi operatörlerin ve rakamların çeşitli kombinasyonları kullanılır.


scanf() Fonksiyonu

Birçok programda ekrana verilerin bastırılmasının yanı sıra klavyeden veri okunması gerekebilir. scanf() fonksiyonu klavyeden veri okumak için kullanılan fonksiyondur. Tip belirleyicileri printf fonksiyonu ile aynı mantıkta kullanılır ve % sembolü ile ifade edilir.
Örneğin klaveden bir x tamsayısı okumak için aşağıdaki ifade kullanılır:
    scanf("%d", &x);

C Programlama Dili Elemanları


1.C Tanımlayıcıları

Programcı tarafından oluşturulurlar.
Programdaki değişkenleri, sabitleri, kayıt alanlarını, özel bilgi tiplerini vb. adlandırmak için kullanılan kelimelerdir.
Tanımlayıcılar, yerini tuttukları ifadelere çağrışım yapacak şekilde seçilmelidir.
İngiliz alfabesindeki A-Z veya a-z arasındaki 26 harf ile 0-9 arası rakamlar kullanılabilir.
Sembollerden sadece alt çizgi _ kullanılabilir.
Tanımlayıcı isimleri harfle veya alt çizgiyle başlayabilir.
Tanımlayıcı ismi, rakamla başlayamaz veya sadece rakamlardan oluşamaz.
Tanımlayıcılar boşluk karakterini içeremezler.

2.C Anahtar Sözcükleri
C dilinde 32 adet anahtar sözcük vardır ve hepsi küçük harfle yazılır. Anahtar sözcükler tanımlayıcı olarak kullanılamazlar.

3.C Veri Türleri
Veri tipi (data type) program içinde kullanılacak değişken, sabit, fonksiyon isimleri gibi tanımlayıcıların tipini, yani bellekte ayrılacak bölgenin büyüklüğünü, belirlemek için kullanılır.
Bir programcı, bir programlama dilinde ilk olarak öğrenmesi gereken, o dile ait veri tipleridir. Çünkü bu, programcının kullanacağı değişkenlerin ve sabitlerin sınırlarını belirler.
C programlama dilinde 5 tane temel veri tipi bulunmaktadır.
char: karakter veriler
int: tamsayı veriler
float: tek duyarlıklı kayan noktalı sayılar
double: Çift duyarlıklı kayan noktalı sayılar
void: Değer içermeyen verilerdir.

Bazı özel niteleyiciler temel tiplerin önüne gelerek onların türevlerini oluşturur:
short
long
unsigned
Niteleyiciler değişkenin bellekte kaplayacağı alanı değiştirilebilirler.
Kısa (short), uzun (long), ve normal (int) tamsayı arasında yalnızca uzunluk farkı vardır. Eğer normal tamsayı 32 bit (4 bayt) ise uzun tamsayı 64 bit (8 bayt) uzunluğunda ve kısa tamsayı 16 biti (2 bayt) geçmeyecek uzunluktadır.

İşaretsiz (unsigned) ön eki kullanıldığı taktirde, veri tipi ile saklanacak değerin sıfır ve sıfırdan büyük olması sağlanır. İşaretli ve işaretsiz verilerin bellekteki uzunlukları aynıdır. Fakat, işaretsiz tipindeki verilerin üst limiti, işaretlinin iki katıdır.

Kısa ve uzun tamsayı tutacak tanımlayıcılar için int anahtar kelimesinin yazılmasına gerek yoktur.
short s;  /* short int s; anlamında */
long k;   /* long int k;  anlamında */

Bir C programı içerisinde, veri tiplerinin bellekte kapladığı alan sizeof operatörü ile öğrenilebilir. İlgi çekici olan, bu alanların derleyiciye??? ve işletim sistemine??? bağlı olarak değişiklik göstermesidir.


4.C Değişkenleri
Değişken, program içinde kullanılan değerlere bellek üzerinde açılan alanlardır. Bu alanlar bir değişken ismi ile anılır.
Değişken isimlendirilmeleri, tanımlayıcı kurallarına uygun biçimde yapılmalıdır.
C’de tüm değişkenler kullanılmadan önce programa bildirilmelidir.
Bu bildirim esnasında, değişkenin veri türü belirlenir.
Örnek:
veri_türü değişken_adı;
int sayac;

Örnekler
int x;
int x1, y1, z1;
long d, d1;
char c;
char c1, c2, c3;
float a;
float a1, a2, a3;
int u[3];
float k[10*20];

Örnekler
int x = 1;
int x1 = 10, y1 = 20, z1 = 30;
char c = ‘a’;
float a = 123.45;


5. C Sabitleri

Sabit bildirimi, başlangıç değeri verilen değişken bildirimi gibi yapılır.
Ancak, veri tipinin önüne const anahtar sözcüğü konmalıdır.
Sabit içerikleri program boyunca değiştirilemez. Yalnızca kullanılabilir.
Genellikle, sabit olarak bildirilen değişken isimleri büyük harflerle, diğer değişken isimlerinin ise küçük harflerle yazılması (gösterilmesi) C programcıları tarafından geleneksel hale gelmiştir.
Örnekler:
const float PI = 3.142857;
const double NOT= 12345.8596235489;
const int EOF= -1;
const char[] = "devam etmek için bir tuşa basın...";


6.C Operatörleri
Operatörler, değişkenler veya sabitler üzerinde matematiksel ve karşılaştırma işlemlerini yapan simgelerdir. Yani bir operatör bir veya daha fazla değişken üzerinde işlem yapan semboldür.

C programlama dilinde 4 tip operatör bulunmaktadır.
Aritmetik Operatörler
Atama Operatörleri
Karşılaştırma Operatörleri
Mantıksal Operatörler

C Operatörleri – Aritmetik Operatörler
Örnekler:
a = b + 10;
c = d + c * e –f /g + h % j;
z = u[1] * u[2];
x = 10;
a = b = c = 0;

C Operatörleri – Atama Operatörleri
Bu operatörler bir değişkene, bir sabit veya bir aritmetik ifade atamak (eşitlemek) için kullanılır.
Birleşik atama: Bazı ifadelerde işlem operatörü ile atama operatörü birlikte kullanılarak, ifadeler daha kısa yazılabilir.
Eğer ifade
     değişken = değişken [operatör] aritmetik ifade;
şeklinde ise, daha kısa bir biçimde
    değişken [operatör]= aritmetik ifade;
olarak yazılabilir.

Örnek: Aşağıdaki işlemlerden sonra a, b ve c’nin son değerleri ne olur?
a = 5;   
b = a++; 
c = ++a; 

Atama Sonrasında
a=7
b=5
c=7

Örnek: Aşağıdaki işlemlerden sonra i’nin son değerleri ne olur?
int i = 1;
i++;
++i;
i += 1 + i++;
i = i + 1;

Atama Sonrasında
i=9

Code::Blocks ile İlk C Programı


Ana menüden “File > New > Project” seçilir ve proje oluşturma sihirbazı başlatılır.
1-)Karşımıza çıkan şablon seçim ekranında “Console application” şablonu seçilir “Go” düğmesine basılır.
2-)Karşımıza çıkan Programlama Dili Seçim ekranında “C” programlama dili seçilir ve “Next” düğmesine basılır.
3-)Karşımıza çıkan yeni ekranda “Project Title” alanına Proje İsmi girilir. “Folder to create project in” kısmında ise Proje klasörünün oluşturulacağı ve proje dosyalarının yaratılacağı dosya yolu seçilir.
4-)Karşımıza çıkan Derleyici (Compiler) seçim ekranı varsayılan değerleriyle bırakılır. Böylece “Debug” ve “Release” modlarının ayarları da tamamlanmış olur. Son olarak “Finish” düğmesine basılır.
5-)Proje oluşturma sihirbazının son adımının tamamlanması ile birlikte aşağıda görüldüğü gibi Proje sekmesinde HelloWorld isimli projemiz ve editörde de “main.c” isimli dosyada ilk C programımız otomatik olarak yerleştirilir.
6-)Son olarak derleme ve çalıştırma işlemi için “F9” kısa yolu veya “Build  Build and run” menü adımı seçilir.

Code::Blocks Nedir?

Code:Blocks özellikle C ve C++ gibi programlama dillerinde kodlama geliştirme yapmamıza imkan veren, açık kaynak kodlu ve cross-platform bir IDE’dir (Integrated Development Environment).
Code:Blocks IDE ortamının kendisi de C++ ile geliştirilmiştir.

Code::Blocks Derleyici Özellikleri
Çoklu derleyici desteği:
GNU GCC, MS Visual C++, Dijital Mars, Borland C++ 5,5, OpenWatcom, LLC, Intel C++, SDDC, Tiny C, GDC D, GNU ARM, GNU ARV

Çok hızlı özelleştirilmiş derleme ve bağlama (makefiles gerekli değildir). Eş zamanlı derleme ve bağlama desteği (var ise CPU'nun diğer çekirdeklerini kullanarak).Çoklu hedef proje desteği.
Workspace kullanarak birden fazla proje ile çalışma.

Code::Blocks Debugger (Hata Ayıklayıcısı) Özellikleri
GNU GDB (Tüm özellikleriyle GNU’nun hata ayıklayıcısını desteklemektedir.).
MS CDB destekler (Tüm özellikleriyle birlikte değil).
Tam breakpoint desteği.
Görünen yerel fonksiyonlar, semboller ve argümanlar.
Disassembly desteği.
Özel bellek dökümü.
CPU görünümü.

Code::Blocks Ara Yüz (IDE, Editör) Özellikleri
Özelleştirilebilir ve genişletilebilir, söz dizimi renklendirilmesi (syntax highlighting)
C++ ve XML için yazım editöründe kod katlama desteği.
Ara yüzde sekme desteği.
Kod tamamlama (Code Completion).
Sınıf tarayıcı (Class Browser).
Akıllı satır içe alma (Smart Indent).
Birçok özelleştirilebilir araç.
Farklı kullanıcılar için TO-DO liste yönetimi.


C Kodlarının Temel Özellikleri - Özet

Yazılımda kullanılacak olan her fonksiyon için ilgili başlık dosyası programın başına ilave edilmelidir. Her C programı main() fonksiyonunu içermelidir.
Program içinde kullanılacak olan değişkenler ve sabitler mutlaka tanımlanmalıdır.

Her ifade satırının sonuna ; işareti konmalıdır.
Her bloğun ve fonksiyonun başlangıcı ve bitişi sırasıyla { ve } sembolleridir.
C dilinde yazılan kodlarda küçük-büyük harf ayrımı vardır (case sensitive).
Örneğin; “A” ile “a” derleyici tarafından farklı değerlendirilir.

Yorum satırı operatörü /* */ veya // sembolleridir.

C Programlama 2.Örnek


İlk C Programı

Program çalıştırılması sonucunda ekrana «Hello World!» yazmaktadır.

1.Satır: Yorumlar /* …. */ Comments:  1.satır /* ile başlayıp */ ile bitmektedir. Bu işaretler arasına yorum satırları yazılır. Yorumlar, okunabilirliği artırmak amacıyla kullandığımız bir özelliktir. Programcı notları olarak da düşünülebilirler. Yorum satırlarında bilgisayar hiçbir işlem yapmaz çünkü C derleyicileri bu satırları atlar. Dolayısıyla, yorum satırları için makine diline çevrilmiş kodlar oluşturulmaz. Yorumlar, diğer yazılımcıların programınızı anlamasında yardımcı olur ancak çok fazla yorum satırı programın ve kodun okunabilirliğini azaltır. Tek satır olan yorumlar için // karakteri de kullanılabilir. Yorumlar programın herhangi bir yerinde olabilirler.
İç içe açıklamalara izin verilmez.
/* yorum deneme /* …. */ …..*/
Program başlangıcının; programın yazılma amacı, yazarı, yazılma tarihi vb. yorumlarla olması programlama sürecine adaptasyon noktasında yararlı olabilir.

Yorum Satırı Örnekleri
/* Tek satır yorum */

// Tek satır yorum

/* İki satır yorum
                     örneği */

/* Birden fazla
       satır yorum
              örneği */

Toplam = X + Y; // X ve Y toplanarak Toplam değişkenine atanır.

2. ve 3. Satır: Ön işlemci Direktifleri (#include):  Yazılan program derlenmeye başlamadan önce ön işlemci komutları çalıştırılır ve çalışan sisteme özgü olan görevleri yerine getirir.# işaretiyle başlayan satırlar, program derlenmeden önce C ön işlemcisi tarafından işlenirler. Bu satır, ön işlemciye standart giriş/çıkış başlık dosyasının yani «stdio.h» dosya içeriğinin programa eklemesini söyler. Bu başlık dosyası, derleyicinin «printf» gibi standart giriş/çıkış kütüphane fonksiyonlarının (STandarD-Input-Output) derlerken kullanabileceği bilgi ve bildirimleri içerir. Başlık dosyalarının  uzantısı .h dir.Başlık dosyaları, derleyicinin kütüphane fonksiyonu çağrılarının doğru yapılıp yapılmadığını anlamasında yardımcı olan bilgiler içerir.  ANSI C'deki standart başlık dosyaları şunlardır:
assert.h,ctype.h,errno.h,float.h,limits.h,locale.h,math.h,setjmp.h,signal.h,stdarg.h, stddef.h, stdio.h, stdlib.h,string.h,time.h 

«stdio.h» başlık dosyasının eklenmesi tercihe bağlıdır fakat standart giriş/çıkış fonksiyonlarının kullanıldığı programlara eklenmelidir. Bu sayede, derleyici, hataları derleme anında bulabilecektir.
Aksi takdirde, hatalar programın çalıştırıldığı anda ortaya çıkar. Bu tür hataların düzeltilmesi oldukça güç olur.

5. Satır: main( ) fonksiyonu: C programlarının ana fonksiyonu olarak tabir edilir. main kelimesinden sonraki parantezler ( ) main'in  fonksiyon adı verilen program oluşturma bloklarından biri olduğunu gösterir. Programın yürütülmesi ilk olarak bu fonksiyonun çağrılmasıyla gerçekleşir. C programları bir veya birden fazla fonksiyon içerebilir ancak bunlardan biri mutlaka main olmalıdır. Küme parantezi, { , her fonksiyonun gövdesinin başına yazılır. Diğer küme parantezi , } , ise her fonksiyonun sonuna yazılmalıdır. Bu iki parantez arasında kalan program parçacığına «blok» denir. Bloklar C'de önemli program birimleridir.

7. Satır: printf("Hello World!\n"); fonksiyonu: printf standart kütüphanede bulunan ekrana formatlı bilgi yazdırma fonksiyondur. Çift tırnak işareti arasındaki karakterleri ekrana yazdırır.
Yazdırılacak karakterlerin tümüne karakter dizesi «string», mesaj ya da hazır bilgi «literal» denir.
printf, parantezler içindeki bağımsız değişkenler (argument) ve noktalı virgülden oluşan bu satıra «ifade» denir. Her ifade ; (noktalı virgül) ile bitmelidir. Noktalı virgüle ifade sonlandırıcı da denir.
printf ifadesindeki tırnak işaretleri arasındaki karakterler aynen ekrana yazdırılır. Ancak \n karakterlerinin yazdırılmamaktadır. Ters eğik çizgi ( \ ), çıkış karakteri olarak adlandırılır ve printf'in farklı bir iş yapması gerektiğini belirtir. printf, ters çizgi işaretiyle karşılaştığında, bu işaretten sonraki karaktere bakar ve bu karaktere göre bazı özel işler yapar.Ters çizgi  işareti ( \ ) ve bu işaretten sonra gelen karaktere çıkış sırası denir. \n çıkış sırası, yeni satır anlamına gelir ve imlecin yeni satıra geçmesine sebep olur. Çıkış karakterleri (escape sequence) aşağıdaki gibidir:

C Programlama Dili Kod Katman Yapısı


C Sistemleri ve Kütüphaneleri


C sistemleri üç kısımdan oluşur:
Programlama ortamı
C programlama dili
C standart kütüphaneleri
C programları «fonksiyon» adı verilen parçalardan ya da modüllerden oluşur.
Fonksiyonlar C «bloklarından» oluşur.
Her fonksiyon/blok bir veya daha fazla «deyimi» içerir.
Her bir deyim program çalıştırıldığında belirli bir eylemi yerine getirir. Deyimler işlemleri yerine getiren komutlardır.

C Dili Taşınabilirdir (Portable) !!!


C dili, donanımdan bağımsızdır.
C dili ile dikkatli bir biçimde yazılmış bir program, her bilgisayara taşınabilir.
Yani herhangi bir C programı hiçbir değişikliğe uğramadan, veya çok az bir değişimle, başka bir derleyicide ve/veya işletim sisteminde derlenebilir.
Sonuç olarak Windows işletim sistemlerinde yazılan bir C kodu, Linux, UNIX veya VAX gibi işletim sistemlerinde de derlenebilir.

C Programlama Dili Tercih Nedeni

C, en popüler dillerdin birisidir.
C, güçlü ve esnek bir dildir. C ile işletim sistemi veya derleyici yazabilir, kelime işlemciler oluşturabilir veya grafikler çizebilirsiniz.
C, yazılım geliştirme ortamları oldukça fazladır.
C, özel komut ve veri tipi tanımlamasına izin verir.
C, taşınabilir bir dildir.
C, gelişimini tamamlamış ve standardı oluşmuş bir dildir.
C, yapısal bir dildir. C kodları fonksiyon olarak adlandırılan alt programlardan oluşmuştur.
C++, Java, JavaScript, JavaApplet, PHP, C# gibi diller C dilinden esinlenmiştir.

C Programlama Dilinin Tarihçesi


C programlama dili, geniş amaçlı, orta seviyeli, yapısal bir programlama dilidir.
C, temelde iki eski dile dayanır : BCPL ve B.
BCPL, 1967 yılında Martin Richards tarafından işletim sistemleri ve derleyiciler yazmak için geliştirilmiştir.
C programlama dili 1972 yılında Bell Laboratuvarlarında Dennis Ritchie tarafından geliştirilmiştir.
C programlama dili, UNIX işletim sisteminin kodlama ve geliştirilmesinde kullanılarak popülerliğini arttırmıştır.
1970'lerin sonunda C, şu anda geleneksel C olarak bilinen haline geldi. 1978 yılında Kernighan ve Ritchie tarafından yazılan, «The C Programming Language» adlı kitabın yayınlanmasından sonra, C'ye olan ilgi artmıştır.
ANSI C, C programlama dilinin, 1989 yılında Amerika'da «American National Standards Institute (ANSI)» ve tüm dünyada «Internationals Standards Organization (ISO)» tarafından standart hale getirilmiş sürümüdür.
ANSI C standardı, 1989 yılında onaylanmış, 1999 yılında gözden geçirilmiş ve Mart 2000'de C99: ISO/IEC 9899:1999 standardı Standart C olarak kabul edilmiştir

4 Ekim 2016 Salı

Yazılımı kullanacak müşterinin ihtiyaçları nasıl belirlenir?

  • Planlama oyunu toplantıları.
  • Anket ile bilgi toplama.
  • Yazılımının bir önceki sürüme bakılır.
  • Benzer yazılımları inceleme.
  • Prototip çıkarma
  • Başka?
  • Sanırım böyle olmalı (tahmin)? (Tahminlerden uzak durulmalıdır.)


Müşteriden elde edilen bilgiler bizim için bir harita niteliği taşıyacaktır!