ALGORİTMA VE PROGRAMLAMA I DERS#3 YZM 1105 Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi 1. BÖLÜM 2 PROGRAMLAMAYA GİRİŞ YZM 1105 – Algoritma ve Programlama I Programlama Terimleri ve Programlama Ortamı 3 • • • • • • • • • Program Programlama IDE (Integrated Development Environment – Tümleşik Geliştirme Ortamı) Derleyici (Compiler) Yorumlayıcı (Interpreter) Bağlayıcı (Linker) Çalıştırma (Execution) Hata Türleri Debug YZM 1105 – Algoritma ve Programlama I Program 4 • 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. YZM 1105 – Algoritma ve Programlama I Programlama 5 • 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. YZM 1105 – Algoritma ve Programlama I Programlama (devam…) 6 • 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. YZM 1105 – Algoritma ve Programlama I IDE (Integrated Development Environment – Tümleşik Geliştirme Ortamı) 7 • IDE yazılımcı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. YZM 1105 – Algoritma ve Programlama I IDE (Integrated Development Environment – Tümleşik Geliştirme Ortamı) (devam…) 8 • 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ı. YZM 1105 – Algoritma ve Programlama I IDE (Integrated Development Environment – Tümleşik Geliştirme Ortamı) (devam…) 9 • En bilinen tümleşik geliştirme ortamları: Eclipse, Microsoft Visual Studio, Code::Blocks, Dev-C++, Anjuta, KDevelop, NetBeans… YZM 1105 – Algoritma ve Programlama I Derleyici (Compiler) 10 • 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 çeviren diline bir yazılımdır. YZM 1105 – Algoritma ve Programlama I Yorumlayıcı (Interpreter) 11 • 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 ilgilenilmez. • 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. YZM 1105 – Algoritma ve Programlama I Bağlayıcı (Linker) ve Çalıştırma (Execute) 12 • 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. Program Kaynak Kod Derleyici Obje Kod – Makine Dili Bağlayıcı Çalıştırılabilir Program YZM 1105 – Algoritma ve Programlama I Yazılım Hataları 13 • 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. YZM 1105 – Algoritma ve Programlama I Yazılım Hataları (devam…) 14 • 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: 1. Syntax Error – Sözdizimi Hataları 2. Run-time Error – Çalışma Zamanı Hataları 3. Logic Error (Bug) – Mantıksal Hatalar (Böcek) YZM 1105 – Algoritma ve Programlama I 1. Syntax Error – Söz dizimi Hataları 15 • 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. YZM 1105 – Algoritma ve Programlama I 2. Run-time Error – Çalışma Zamanı Hataları 16 • 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 dosya açmaya çalışmak, var olan bir dosyanın üzerine yazmaya çalışmak, olmayan bir bellek kaynağından bellek ayırtmaya çalışmak, olmayan bir donanıma ulaşmaya çalışmak vs. YZM 1105 – Algoritma ve Programlama I 3. Logic Error (Bug) – Mantıksal Hatalar (Böcek) 17 • 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ımı (Update, Patch) üretirler ya da o yazılımın yeni bir versiyonunu piyasaya sürerler. YZM 1105 – Algoritma ve Programlama I Debug (Bugdan arındırma) 18 • 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. YZM 1105 – Algoritma ve Programlama I 2. BÖLÜM 19 C PROGRAMLAMA DİLİNE GİRİŞ YZM 1105 – Algoritma ve Programlama I C Programlama Dilinin Tarihçesi 20 • 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. YZM 1105 – Algoritma ve Programlama I C Programlama Dilinin Tarihçesi (devam…) 21 • 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 YZM 1105 – Algoritma ve Programlama I C Programlama Dili Tercih Nedeni 22 • 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. YZM 1105 – Algoritma ve Programlama I C Dili Taşınabilirdir (Portable) !!! 23 • C dili, donanımdan ve işletim sisteminde 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. YZM 1105 – Algoritma ve Programlama I C Sistemleri ve Kütüphaneleri 24 • C sistemleri üç kısımda oluşur: 1. Programlama ortamı 2. C programlama dili 3. 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. YZM 1105 – Algoritma ve Programlama I C Yazılımı İçeriği 25 Ön işlemci Direktifleri (Preprocessor Directives) Genel Tanımlamalar (Global Declarations) int main (void) { Yerel Tanımlamalar (Local Declarations) Deyimler ve İfadeler (Statements) } YZM 1105 – Algoritma ve Programlama I İlk C Programı 26 • Program çalıştırılması sonucunda ekrana «Hello World!» yazmaktadır. YZM 1105 – Algoritma ve Programlama I 1.Satır: Yorumlar /* …. */ Comments 27 • 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. YZM 1105 – Algoritma ve Programlama I 1.Satır: Yorumlar /* …. */ Comments (devam...) 28 • 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. YZM 1105 – Algoritma ve Programlama I Yorum Satırı Örnekleri 29 /* 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 YZM 1105 – Algoritma ve Programlama I 2. ve 3. Satır: Ön işlemci Direktifleri (#include) 30 • # 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-InputOutput) derlerken kullanabileceği bilgi ve bildirimleri içerir. • Başlık dosyalarının uzantısı .h dir. YZM 1105 – Algoritma ve Programlama I 2. ve 3. Satır: Ön işlemci Direktifleri (#include) (devam…) 31 • 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 YZM 1105 – Algoritma ve Programlama I 2. ve 3. Satır: Ön işlemci Direktifleri (#include) (devam…) 32 • «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. YZM 1105 – Algoritma ve Programlama I 5. Satır: main( ) fonksiyonu 33 • 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 çağrılmasıyla gerçekleşir. ilk olarak bu fonksiyonun • C programları bir veya birden fazla fonksiyon içerebilir ancak bunlardan biri mutlaka main() olmalıdır. YZM 1105 – Algoritma ve Programlama I 5. Satır: main( ) fonksiyonu (devam…) 34 • 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. YZM 1105 – Algoritma ve Programlama I 7. Satır: printf("Hello World!\n"); fonksiyonu 35 • 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. YZM 1105 – Algoritma ve Programlama I 7. Satır: printf("Hello World!\n"); fonksiyonu (devam…) 36 • 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. YZM 1105 – Algoritma ve Programlama I 7. Satır: printf("Hello World!\n"); fonksiyonu (devam…) 37 • Çıkış karakterleri (escape sequence) aşağıdaki gibidir: Çıkış \0 \n \r \t \v \f \b \a \" \\ Anlamı null karakteri temsil eder (sonlandırıcı karakter) Yeni satır Satırbaşı Yatay sekme Düşey sekme İleri besleme Geri boşluk (space) Alarm karakteri Çift tırnak Ters bölü YZM 1105 – Algoritma ve Programlama I 7. Satır: printf("Hello World!\n"); fonksiyonu (devam…) 38 Ekran Çıktısı Ne Olacak YZM 1105 – Algoritma ve Programlama I C Kodlarının Temel Özellikleri - Özet 39 • 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. YZM 1105 – Algoritma ve Programlama I C Kodlarının Temel Özellikleri – Özet (devam…) 40 • 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. YZM 1105 – Algoritma ve Programlama I