Bilgisayar Programlamaya Giriş Yrd. Doç.Dr. Nilgün GÜLER BAYAZIT e-mail:guler@yildiz.edu.tr
Dersin Amacı Karşılaştıkları problemleri bilgisayar ortamında çözebilme becerisi Algoritma analiz etme becerisi
Ders Konuları Programlamaya giriş: C Dili Veri tipleri Ekran Giriş/Çıkış komutları Program kontrol ifadeleri Döngüler Fonksiyonlar Pointer lar Stringler
Kaynaklar Ders Notları C How TO Program, Deitel & Deitel, 4 th edition.
Puanlama 1. Vize (%20) 2.Vize (%25) Ödevler (%15) Final (%40)
Genel Kavramlar TOC Bilgisayarın Temel Birimleri Bilgi Saklama Bilgisayara İstediğimiz İşleri Nasıl Yaptırırız C Programlama Dili Nedir? C Programının Derlenmesi
Bilgisayar Bilgisayar Donanım (Hardware) Yazılım (Software)
Bilgisayarın Temel Birimleri
Bilgisayarda Bilgilerin Kodlanması Bilgisayarda bilgiler, iki farklı durumun belirlenmesi ile kodlanır. Bu iki farklı durum: Bir telden akım geçip geçmemesi, Bir kartın delinip delinmemesi Manyetik şerit üzerinde bir bölgenin N veya S kutup Matematiksel olarak bu iki farklı durum 0(sıfır) ve 1 (bir) ile gösterilir.
Bilgi Saklama Bir Bit Bilgi Saklama Bir Bayt Bilgi Saklama Bir bayt alanı içinde 256 (2 8 ) farklı bilginin saklanması mümkündür.
Bilgi Saklama (101) 2 = (1 x 2 2 ) + (0 x2 1 ) + (1 x 2 0 ) (101) 2 = (1 x 4) + (0 x 2) + (1 x 1) = (5) 10
Bilgi Saklama del ~ } { z y x 12 w v u t s r q p o n 11 m l k j i h g f e d 10 c b a ` _ ^ ] \ [ Z 9 Y X W V U T S R Q P 8 O N M L K J I H G F 7 E D C B A @? > = < 6 ; : 9 8 7 6 5 4 3 2 5 1 0 /. -, + * ) ( 4 & % $ # "! b us rs 3 gs fs esc sub em can etb syn nak dc4 2 dc3 dc2 dcl dle si so cr ff vt nl 1 ht bs bel ack enq eot etx stx soh nul 0 9 8 7 6 5 4 3 2 1 0 ASCII ASCII Karakter Karakter Seti Seti
Problem çözme Problem çözmede, soruna hemen girişmek yerine, dikkatli ve sistematik yaklaşım ilke olmalıdır. Problem iyice anlaşılmalı ve mümkün olduğu kadar küçük parçalara ayrılmalıdır.
Discourse on Methods Descartes Doğruluğu kesin olarak kanıtlanmadıkça, hiç birşeyi doğru olarak kabul etmeyin; tahmin ve önyargılardan kaçının Karşılaştığınız her güçlüğü mümkün olduğu kadar küçük parçalara bölün Düzenli bir şekilde düşünün; anlaşılması en kolay olan şeylerle başlayıp yavaş yavaş daha zor ve karmaşık olanlara doğru ilerleyiniz Olaya bakışınız çok genel, hazırladığınız ayrıntılı liste ise hiçbir şeyi dışarıda bırakmayacak kadar kusursuz ve eksiksiz olsun
Bilgisayara İstediğimiz İşlemleri Nasıl Yaptırırız? Algoritmalar: Belirli bir görevi yerine getiren sonlu sayıdaki işlemler dizisidir.
Her algoritma aşağıdaki kriterleri sağlamalıdır. 1.Girdi: sıfır veya daha fazla değer dışarıdan verilmelidir. 2. Çıktı: En azından bir değer üretmeli 3. Açıklık: Her işlem(komut) açık olmalı ve farklı anlamlar içermemeli 4. Sonluluk: Her türlü olasılık için algoritma sonlu adımda bitmeli 5. Etkinlik : Her komut kişinin kalem veya kağıt ile yürütebileceği kadar basit olmalı
Bilgisayara İstediğimiz İşlemleri Nasıl Yaptırırız? Algoritma Örnek: Telefon Etmek 1. Başla 2. Ahizeyi kaldır 3. Sinyali kontrol et, sinyal yoksa arızaya haber ver ve 9. adım a git 4. Eğer telefon numarası yurt dışında ise iki kere sıfır tuşuna bas ve ülke ve alan kodunu tuşla, 6. adıma git 5. Eğer telefon numarası şehir dışında ise bir kere sıfır tuşuna bas ve alan kodunu tuşla 6. Telefon numarasını tuşla 7. Eğer hat meşgul ise ya da cevap vermiyorsa 9. adıma git 8. Telefon konuşmasını gerçekleştir 9. Telefonu kapat 10. Bitiş
Bilgisayara İstediğimiz İşlemleri Nasıl Yaptırırız? Akış Şeması Komut İşlem (Process): Yapılması istenen işlemle ilgili tanımlamalar Koşul Karar (Decision): Bir karara bağlı olarak farklı yolların izlenmesi Veri Veri (Data): Her farklı veri grubu için farklı isim verilmelidir. Doküman A Başla/Bitir Doküman: Çıktı olarak gösterilmek istenen veriler ve işlemler Bağlantı: Büyük yazılımlarda bir sonraki sayfadaki işlemlerin hangi noktadan devam edeceğini göstermesi Başla/Bitir: Akış şemasının başlangıç ve bitiş noktaları
Bilgisayara İstediğimiz İşlemleri Nasıl Yaptırırız? Örnek: Telefon Etmek Başla Ahizeyi kaldır Sinyal var mı? Hayır Arızaya haber ver Evet Bir kere sıfıra bas ve şehir kodunu tuşla Evet Şehir dışı mı? Hayır Yurt dışı mı? Evet İki kere sıfıra bas ve ülke, alan kodunu tuşla Hayır Telefon numarasını tuşla Telefon konuşmasını gerçekleştir Hayır Meşgul/ cevap yok? Evet Telefonu kapat Bitir
Yazılım(Software) İşletim Sistemi (MS Windows xx, Unix, IBM OS, etc) Database Programları (Oracle, Sybase, MS SQL Server, etc.) Office programları (Word, Excel, Powepoint) Programlama dilleri (QBasic, Fotran, Pascal, C, C++,.Net etc.)
Programlama Dilleri Tarihçesi (Sembolik kodlar) Assembly (makina kodu) FORTRAN (FORmula TRANslation 1954) (matematiksel işlem ağırlıklı, bilgisayara bağımlılık göstermeyen bilimsel çalışmalarda kullanılmak üzere) COBOL (Common Business-Oriented Language) (Bilgi depolamak ve işlemek) Yüksek seviyeli diller (PL/I, Algol, Pascal, Basic,...)
Dillerin Karşılaştırması Düşük seviyeli Diller Hızlıdır Yüksek Seviyeli Diller Kolay anlaşılır Kolay yazılabilir Her bilgisayarda uygulanabilir Çok hızlı programlar yazmak mümkün olmamıştır
Programlama Dilleri Türleri Sırasal diller (Q basic) Yapısal Diller (pascal, C) Nesne Yönelimli Diller (C++, Java, EIFELL,.Net)
C nin Kısa Öyküsü 1970 AT&T Bell Lab. Dennis M.Ritchie B dili üzerine kurulu bir yapı Unix işletim sisteminin yazımı için yaratıldı Bell Lab., Akademik çevre, askeri proje 1975 yılından itibaren her yerde...
C nin avantajları C de yazılan programlar Assembler a göre daha kısa zamanda yazılabilir, daha anlaşılabilir ve daha hızlıdır C derleyicileri sahip oldukları geniş fonksiyon kütüphaneleri ve zengin işlemci grubu sayesinde esnek bir yapıya sahiptir. İfadelerden tasarruf sağlar:normal matematiksel ifadeler, C nin zengin operatörleri vasıtasıyla çok daha kısa ve basit bir biçime getirilebilir. Diğer sistemlere adapte edilebilen büyük programlar hızlı bir şekilde kolayca yazılabildiği için özellikle sistem programlamalarında tercih edilir.
C Programlama Dili Nedir? Makine diliyle iki sayıyı toplamak: 01000011100011010000111000... Assembly diliyle iki sayıyı toplamak: LOAD X ADD Y STORE Z C derleyicisi bir çok farklı donanım üzerinde çalışabilir. C ile sistem üzerinde en alt düzeydeki fonksiyonlara erişilebilir C ile yazılmış olan programlar oldukça hızlı çalışabilmektedir.
C Programının Derlenmesi 1. Programın yazılması 2. Yazım kuralları kontrolü 3. Ön işlemcinin çalışması ve programın derlenmesi 4. Programın kütüphaneden kullanılan fonksiyonlar ile bağlanması (Birleştirme) 5. Çalışabilen program kodunun elde edilmesi 6. Programın çalıştırılması
C Programın fazları: 1. Edit Editor Preprocessor Disk Disk Program editör yazılır ve harddiskte saklanır Önişlemci kodu işler program 2. Preprocess 3. Compile 4. Link 5. Load 6. Execute Compiler Linker Loader Disk CPU Disk Disk Primary Memory... Primary Memory Compiler object code yaratır ve hardiskte saklar Linker object code libraries e linkler Loader programı memori ye yükler. CPU her bir Instruction ı alır ve execute eder...
C Programının Derlenmesi
C nin Program Yapısı Preprocessor Direktifleri Global değişken bildirileri Fonksiyon Prototipleri Fonksiyon tanımlamaları main() { İfade_1; İfade_2; İfade_3; } :. İfade_N; Programın başlangıcı İfade Bloğu (Programın ana gövdesi) Programın sonu
C Dilinin Temelleri Genel Kavramlar Yazım ve Noktalama Kuralları C Kütüphaneleri C Dilindeki Sözcükler Değer Sabitleri Veri Tipleri Değişkenler
Genel Kavramlar Ana Fonksiyon: main( ) int main(void) { program_komutları return(0); }
Genel Kavramlar return( ): Fonksiyonun çağrıldığı yere geri dönmesini sağlar. main( ) fonksiyonu içinde kullanılan return() komutu programın sonlandırılarak işletim sistemine geri dönülmesini sağlar.
Genel Kavramlar Örnek Program #include <stdio.h> int main (void) { printf("merhaba Dunya"); return(0); } Çıktı: Çıktı:
Genel Kavramlar printf(): çıktı fonksiyonu ekrana çeşitli çıktıların yazılması printf( format_dizgisi ); Bu fonksiyonun programımız tarafından kullanılması için <stdio.h> kütüphanesinin program başında tanımlanması gerekir. #include <stdio.h>
Genel Kavramlar Örnek Program Ekranda Bu benim ilk programim. cümlesini görüntüleyecek programı yazınız. #include <stdio.h> int main(void) { printf( Bu benim ilk programim. ); return(0); } Çıktı: Bu benim ilk programim.
Yazım ve Noktalama Kuralları Noktalı Virgül: Her komutun bittiğiyer ; işareti ile belirtilir. Ayraç İşaretleri: C dili bloklardan oluşur. Bloklar { ve } ayraç işaretleri içinde belirtilen komutların bir araya gelmesi ile oluşur. Açıklama Satırları: Program içindeki açıklamanın başlangıç ve bitiş noktaları /* ve */ işaretleri ile belirlenmelidir. #include <stdio.h> int main(void) { printf( Ilk program ); return(0); }
Yazım ve Noktalama Kuralları include <stdio.h> int main (void) { /*Bu program bilgisayarinizin ekranina Merhaba Dunya kelimelerini yazar.*/ printf( Merhaba Dunya ); return(0); /*Burasi programin sonudur*/ }
Yazım ve Noktalama Kuralları Bir bloğu oluşturan tüm komutlar ve açıklama satırları ayraç işaretlerine göre daha içeride yazılır. Böylece blokların birbirinden ayrılması ve yazılan program kodunun daha anlaşılır bir hale gelmesi sağlanır. include <stdio.h> int main (void) { /*Bu program ekrana Merhaba kelimesini yazar.*/ printf( Merhaba ); return(0); /*Burasi programin sonudur*/ }
C Kütüphaneleri Yapılan işin özelliğine göre programa dahil edilir. Kodu daha önce yazılmış, programcının kullanımına hazır fonksiyonları içerir. Bu fonksiyonların her defasında tekrar tekrar yazılması engellenmiş olur ve daha standart bir yapıda yaygın olarak kullanımı sağlanır. Standart girdi/çıktı: Matematiksel işlemler: Dizgiler: <stdio.h> <math.h> <string.h>
C Dilindeki Sözcükler Özel amaçlı sözcükler Tanıtıcı isimleri (değişken) Tanıtıcı isimleri (fonksiyon)
C Dilindeki Sözcükler Özel Amaçlı Sözcükler
C Dilindeki Sözcükler Tanıtıcılar: Özel amaçlı sözcüklerin dışında yapılan tanımlamalardır. Tanıtıcı isimleri içinde harf (a..z, A.. Z), sayı (0..9) veya alt çizgi (underscore _ ) bulunabilir. bir harf ya da alt çizgi _ işareti ile başlamalıdır. içinde özel karakterler ( #, $, &, ö, ş v.b. ) bulunamaz. C dilindeki özel amaçlı sözcüklerden biri olamaz. büyük-küçük harfler farklı (case-sensitive) algılanır. Örnek: ogrenci_yasi _06_yili_ucreti ucret Short
Değer Sabitleri Tamsayılar: 0-9 rakamlarından oluşan, ondalık değerleri olmayan sayılardır. Örnek: 3 5 Reel Sayılar: tam ve ondalık kısımları olan sabitlerdir. Örnek: 5.7 4.2 Karakterler: tek tırnak işareti arasında bulunur. Örnek: A k Dizgiler: Çift tırnak işareti ile tanımlanırlar ve birden fazla karakterin bir araya gelmesinden oluşurlar. Örnek: Merhaba 2 aa12aa
Veri Tipleri
Değişkenler Program içinde kullanılan temel nesnelerdir. Farklı tipteki verilerin (int, double, char) bellekte tutulması için kullanılır. Bu isimler ile bellek hücrelerine veri aktarabilir ve bu hücrelerde saklanan veriler program içinde kullanılabilir. toplam Bellek görüntüsü Örnek: char cinsiyet; double maas; int x,y;
Başka bir basit program: İki tamsayının toplanması #include <stdio.h> main() { int sayi1, sayi2, topla; printf("ilk tamsayıyı giriniz\n"); scanf("%d",&sayi1); printf("ikinci tamsayıyı giriniz\n"); scanf("%d",&sayi2); topla=sayi1+sayi2; printf("toplam = %d\n",topla); return 0; }
Değişken Kavramı Bilginin bellekte belli bir adresten başlıyarak belli bir uzunluğu işgal etmesi, bilginin varlığını gösterir ve bu bilginin isimlendirilmesine değişken denir
Değişken tanımlama veri_tipi <değişken_adı>; örneğin: int x; char ch, ch1; float y;
printf ÇIKIŞ Fonksiyonu Printf (Format Stringi, Değer Listesi); Çıkış Format Stringi: Açıklama kısımları Çıkış formatının belirtildiği kısımlar: % Escape düzeninin verildiği kısımlar: \
Çıkış format karakterleri Nümerik Değerler için Tip karakterleri Çıkış biçimi Karakterler için Tip karakterleri Çıkış biçimi d İşaretli tamsayı c Tek karakter i İşaretli tamsayı s string u İşaretsiz tamsayı % % karakteri f Gerçel sayı e Üssel gerçel sayı ld Long tamsayı lf Double gerçel sayı
ESCAPE Düzeni Karakterleri \n \r \b \a \t \v \f \0 \\ \ Kursoru bir alt satırın başına getirir (yeni satır-new line) Kursoru satırın başına getirir (carriage return) Kursoru bir kolon geri çeker Zil sesi verir Yatay tab Printer için yeni satır başı Printer için yeni sayfa başı NULL karakteri Sadece \ karakteri Sadece karakteri
scanf Giriş Fonksiyonu Scanf (Format Stringi, Adres stringi) scanf ( %d, &a); scanf( %d %d, &x,&y); scanf( %s %s, ad, soyad);
Giriş Format Karakterleri Tip karakterleri d D u U e f lf c s Çıkış biçimi İşaretli tamsayı Long işaretli tamsayı İşaretsiz tamsayı Long işaretsiz tamsayı Üssel gerçel sayı Gerçel sayı Double gerçel sayı Karakter String
Operatörler Operatörler belli bir amaca yönelik olarak bir bilgiyi daha değişik bir forma sokan veya iki bilgiden yeni bir bilgi edinilmesini sağlayan sembolik araçlardır. Atama Operatörü (=) Aritmatik operatörler (*, /, +,-,%,++,--) Karşılaştırma operatörlerin (>,<,>=,<=,==,!=) Mantık Operatörleri (&&,,!) Adres operatörü (&) Boyut operatörü (sizeof) Üçlü koşul operatörü (?:) Ve diğer operatörler
Atama Operatörü Bir değeri bellekteki bir değişkene atamak için eşit (=) karakteri kullanılır. Bu sembol sağındaki değeri solundaki değişkene atar. int x; int y=8; /*ilk değer ataması*/ main() {x=10; y=x; t=5; /*yanlış: t değişkeni tanımlanmadı */ }
Aritmatik işlem operatörleri C de tamsayılar ve gerçel sayıların işlenmesi için gerekli tüm operatörler mevcuttur. İkili Operatörler Toplama operatörü (+) Çıkartma operatörü (-) Çarpma operatörü (*) Bölme operatörü (/) Mod operatörü (%) Tekli (Unary) Operatörler Arttırma operatörü (++) Eksiltme operatörü (--) Birleşik Atama operatörleri Basit hali Kısatılmış hali x=x+y x+=y x=x-y x-=y x=x*y x*=y x=x/y x/=y x=x%y x%=y
Karşılaştırma operatörleri Karşılaştırma sonucunun doğru veya yanlış olmasına dayanan bir sonuç üretir. Yanlış ise 0 (sıfır) Doğru ise 1 (Bir) Örnek a=2, b=10 ve c=5 a>b 0 (Yanlış) a>=2 1(Doğru) b!=c 1(Doğru) 10==b 1(Doğru) c<=4 0(Yanlış) a > b 0(yanlış)
Mantıksal Operatörler AND operatörü (&&) OR operatörü ( ) Not operatörü (!)
sizeof Boyut Operatörü Verilen bir tipin veya değerin hafızada işgal ettiği bölgenin bayt olarak sayısını verir. Kullanımı: sizeof(tip) cevap sizeof(char) 1 sizeof(int) 2 sizeof(float) 4 sizeof(double) 8 int x; sizeof(x) 2
Üçlü Koşul(Ternary) Operatörü(?:) Üçlü koşul operatörü(?:), bir ifadenin doğru veya yanlış olmasına göre farklı ifadelerin yerine getirilmesini sağlar. ifade1?ifade2 : ifade3 Örnek: z=max(x,y) z=(x>y)? x : y;
Operatörlerde işlem önceliği ve işlem yönü
Soru1: 5x 2 +2 fonksiyonun x=4.8 noktasındaki değerini hesaplayınız. #include <stdio.h> main() {float x, y; x=4.8; y=5*x*x+2; printf( y=%f,y); }
Soru 2: Yarıçapı 7 olan olan bir dairenin alanını ve çevresini hesaplayınız #include <stdio.h> main() {float PI=3.14; float cevre, alan; int r=7; cevre=2*pi*r; printf( cevre=%f\n,cevre); alan=pi*r*r; printf( alan=%f\n,alan); }
Soru 3: Vize ve Final notlarından geçme notunu hesaplayınız #include <stdio.h> main() {float vize, final, ortalama; vize=60; final=70; ortalama=vize*0.60+final*0.40; printf( ogrenci %f ile gecti\n,ortalama); }