EEM-103 Bilgisayar Programlama Hafta # 1 İnsanoğlundan milyarlarca kez daha hızlı işlem yapabilen ve lojik kararlar verebilen cihazlara bilgisayar diyoruz. Bilgisayar kendisine programlandığı şekilde; verilen bilgileri; daha önce mantıksal ve aritmetiksel işlemler yapan; yaptığı işlemlerin sonucunu saklayabilen; sakladığı bilgilere istenildiğinde ulaşılabilen; donanım (Hardware) ve yazılım (software) dan oluşan, elektronik bir makinedir. 04.10.2022 Mehmet Barış TABAKCIOĞLU 2 Bir bilgisayar 2 ana bileşenden oluşur : Donanım (Hardware) Klavye, fare, ekran, diskler, bellek, CD/DVD-Rom gibi Bilgisayarın her türlü fiziki aksamı. Yazılım (Software) Bir bilgisayar üzerinde çalışan her türlü program. İşlemcinin nasıl davranması gerektiğini belirten, belirli kuralları olan kodlardır. En temel yazılım BIOS ve İşletim Sistemidir. Bilgisayarlar, “bilgisayar programları” adını verdiğimiz birbiri ardına sıralanmış komut setlerinin kontrolu altında bilgi işlerler. 04.10.2022 Mehmet Barış TABAKCIOĞLU 3 Bir bilgisayar 6 ana bileşenden oluşur Giriş Ünitesi (Input Unit): Bilgisayarda işlenecek bilgi çesitli giriş cihazlarından elde edilir. Klavye, fare, mikrofon, tarayıcı, webcam, barkod okuyucu vs. Çıkış Ünitesi (Output Unit ): Bilgisayarda işlenen bilgiler çesitli çıkış cihazlarına aktarılır. Ekran, yazıcı, hoparlör, plotter vs. 04.10.2022 Mehmet Barış TABAKCIOĞLU 4 Bellek Ünitesi (Memory Unit ): Bellek ya da ana bellek olarak da adlandırılır. Bilgiye gerektiğinde (işleme esnasında) hızlı ulaşmayı mümkün kılan bir depo vazifesi görür. ALU (Arithmetic and Logic Unit ) (Aritmetik ve Lojik İşlem Birimi): Toplama, çıkarma, çarpma, bölme gibi temel aritmetik işlemlerin yanında bellekte saklı olan iki sayının birbirine eşitliğini test etmek gibi lojik bir vazifesi de vardır. 04.10.2022 Mehmet Barış TABAKCIOĞLU 5 CPU (Central Processing Unit ) (Merkezi İşlem Birimi): Bilgisayarın patronudur diyebiliriz Giriş ünitesi hangi anda belleğe bilgiyi yazmalıdır veya ALU gercekleştireceği işlemler için gerekli olan bilgiyi bellekten ne zaman almalıdır ya da bellekten çıkış ünitesine bilgi ne zaman yollanmalıdır? İkincil Depolama Ünitesi (Secondary Storage Unit): Hard diskler gibi bellekten daha fazla kapasiteye sahip ama daha yavaş, enerjisi kesildiğinde bile sahip olduğu bilgiyi kaybetmeyen depolama üniteleridir. 04.10.2022 Mehmet Barış TABAKCIOĞLU 6 BİLGİSAYARLA PROBLEM ÇÖZÜMÜNÜN AŞAMALARI 04.10.2022 Mehmet Barış TABAKCIOĞLU 7 ANALİZ: Çözülmesi istenen problemin sağlayacak ön çalışmalardır. tamamen anlaşılmasını Daha çok kağıt kalem kullanılarak bol miktarda zihin jimnastiğinin yapıldığı aşamadır. ALGORİTMA GELİŞTİRME: Problemi çözecek adımların sıralı olarak ifade edilmesidir. AKIŞ ŞEMASI ÇİZİMİ: Geliştirilen algoritmanın şekillerle ifade edilmesidir. 04.10.2022 Mehmet Barış TABAKCIOĞLU 8 PROGRAMLAMA DİLİ SEÇİMİ: Geliştirilen algoritmayı kolay bir şekilde bilgisayar ortamına aktaracak bir bilgisayar programlama dilinin seçilmesidir. Programlama dili bir problemin algoritmik çözümünün bilgisayar ortamına aktarılmasını mümkün kılan kurallar dizisidir. En iyi programlama dili budur diye bir şey söylemeyiz. 04.10.2022 Mehmet Barış TABAKCIOĞLU 9 Çünkü her programlama dilinin bir diğerine göre üstün ve zayıf tarafları vardır. Günümüzde MATLAB,C,C++,C#, Java, Python ve Visual Basic en çok kullanılan programa dilleridir. PROGRAMIN YAZILMASI: Geliştirilen algoritmanın seçilen kuralları kullanılarak bir dönüştürülmesi aşamasıdır. 04.10.2022 Mehmet Barış TABAKCIOĞLU programlama bilgisayar dilinin programına 10 DERLEME/YORUMLAMA: Kullanılan Programlama dilinin uygun komutlardan oluşan ve artık bir bilgisayar yazılımı olarak temsil edilen problem çözümünün, muhtemel yazım hataları içerip içermediğinin test edildiği ve sonrasında bilgisayarın anladığı tek dil olan makine diline dönüştürüldüğü aşamadır. ÇALIŞTIRMA: Derlenmiş programın programın işletim sisteminin yükleyici denen bileşeni tarafından bilgisayarın sabit diskinden alınıp bellekte boş bir alana yerleştirildiği ve sonrasında programın ilk komutunun adresinin (CPU)’ya bildirildiği aşamadır. 04.10.2022 Mehmet Barış TABAKCIOĞLU 11 TEST/HATA AYIKLAMA: Programın muhtemel her giriş için doğru sonuçlar üretip üretmediğinin test edildiği ve programdaki hataların (eğer varsa) ayıklandığı aşamadır. 04.10.2022 Mehmet Barış TABAKCIOĞLU mantıksal 12 BİLGİSAYAR PROGRAMI VE PROGRAMLAMA Bilgisayarla problem çözümünün aşamaları takip edildikten sonra ortaya çıkan ve problemimizi bilgisayar ortamında çözüme kavuşturan ürüne bilgisayar programı denir. Bilgisayarla problem çözebilmek amacıyla takip edilen adımların tümüne birden bilgisayar programlama denir. 04.10.2022 Mehmet Barış TABAKCIOĞLU 13 PROGRAMLAMA DİLLERİ Programlama dilleri derlenen ve yorumlanan olmak üzere 2 kısımdır. Derlenen dillerde yazılan programların çalışabilmesi için, bu programların öncelikle derleyici (compiler) adı verilen özel yazılımlar sayesinde makine koduna çevrilmeleri gerekir. 04.10.2022 Mehmet Barış TABAKCIOĞLU 14 Yorumlanan dillerle yazılmış programlar ise yorumlayıcı (interpreter) adı verilen yazılımlar ile satır satır makine koduna çevrilir ve işletilirler. Genelde yorumlanan diller, derlenenlere göre daha yavaş çalışırlar. Örneğin MATLAB, Python yorumlanan bir dildir. C++ ise derlenen bir dildir. 04.10.2022 Mehmet Barış TABAKCIOĞLU 15 PROGRAMLAMA DİLLERİ • Düşük Seviyeli Diller • Makine Dili • Assembly • Orta Seviyeli Diller • Yüksek Seviyeli Diller • Çok Yüksek Seviyeli Diller • Yapay Zekaya ait Diller 04.10.2022 Mehmet Barış TABAKCIOĞLU 16 Düşük Seviyeli Diller Düşük seviyeli diler kendi içinde Makine dili ve Assembly olmak üzere 2 gruba ayrılır. Makine Dilleri Makine dili, geliştirilen ilk programlama dilidir, öğrenilmeleri çok zordur. Bu dilde yazılan tüm komutlar 0 ve 1’lerden oluşur. Makine dili donanıma bağlıdır. Belirli bir işlemci/makine için yazılan kod, farklı yapıdaki başka bir makinede çalışmaz, tamamen yeniden yazılması gerekir. Örneğin 1011101100010001 farklı yapıdaki işlemcilerde farklı işlemleri yapar. 04.10.2022 Mehmet Barış TABAKCIOĞLU 17 Türk alfabesinde 29 harf vardır. Bu harfler bir araya getirilerek kelimeler, kelimeler bir araya getirilerek cümleler elde edilir. Cümlelerden de metinler elde edilir. Bilgisayarların alfabesi ise 1 ve 0 olmak üzere sadece 2 karakter içerir. 1’leri ve 0’ları bilgisayar mimarilerinin tasarlandığı formata uygun olarak yan yana getirerek komutları, ve komutları birleştirerek bilgisayar programlarını elde ederiz. Hangi seviyede yazılırsa yazılsın, bir bilgisayar programı çalıştırılmadan önce muhakkak bilgisayarın tanıdığı alfabenin karakterlerini içeren 1’ler ve 0’lardan oluşan temsile yani makine koduna çevrilmelidir. 04.10.2022 Mehmet Barış TABAKCIOĞLU 18 A 1000001 a 1100001 , 101100 04.10.2022 Mehmet Barış TABAKCIOĞLU 19 ASCII (İngilizce: American Standard Code for Information Interchange, Türkçe: Bilgi Değişimi İçin Amerikan Standart Kodlama Sistemi) Latin alfabesi üzerine kurulu 7 bitlik bir karakter setidir. İlk kez 1963 yılında ANSI tarafından standart olarak sunulmuştur. ASCII'de 33 tane basılmayan kontrol karakteri ve 95 tane basılan karakter olmak üzere 128 karakter bulunur. Kontrol karakterleri ; metnin akışını kontrol eden, ekranda çıkmayan karakterlerdir. Basılan karakterler; ise ekranda görünen, okuduğumuz metni oluşturan karakterlerdir. 04.10.2022 Karakter A → (ASCII 65 → 0 1 0 0 0 0 0 1 ) Alt + 13 -> Enter (Return) Tuşu Alt + 65 -> A yazar Alt + 64 -> @ yazar Alt + 126 -> ~ yazar Mehmet Barış TABAKCIOĞLU 20 Makine Dilinde yazılan aşağıdaki program ekrana "Hello world" yazısını yazar. 1011101100010001 0000000110111001 0000110100000000101101000000111010001010000001 101000011110011010001000011100010111110011100110 10010000001001000011001010110110001101100011011 11001011000010000001010111011011110111001001101 1000110010000100001 04.10.2022 Mehmet Barış TABAKCIOĞLU 21 Makine dili biraz daha kolay okunabilmesi için 16'lık sayı sistemi ile yazılır. Derlenme sonrası kod ikilik sisteme çevrilir. Çünkü işlemci ikilik tabandaki kodu okur ve uygular. ARM, Intel 80x86, IBM 360, Motorola 680x makine dilleridir. Aşağıda yazılan program ekrana "Hello world" yazısını yazar. BB 11 01 B9 0D 00 B4 0E 8A 07 43 CD 10 E2 F9 CD 20 48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21 04.10.2022 Mehmet Barış TABAKCIOĞLU 22 Assembly İkinci kuşak dillerdir. Bu dillerde komutlar sembollerle ifade edilir. Makine koduna oldukça yakındırlar. Yüksek seviyeli dillerin yaygın kullanımına karşın, halen hızın ve verimin önemli olduğu noktalarda yazılan çoğu programda assembly dili kullanılmaktadır. ASEM-51, Emu8086, BAL, COMPASS başlıca Assembly dilleridir. 04.10.2022 Mehmet Barış TABAKCIOĞLU 23 Assembly dilinde yazılan aşağıdaki kod ekrana "Hello World" yazısını yazar. Dosseg .model small .stack 100h .data hello_message db 'Hello World!',0dh,0ah,'$‘ .code main proc mov ax,@data mov ds,ax mov ah,9 mov dx,offset hello_message int 21h mov ax,4C00h int 21h main endp end main 04.10.2022 Mehmet Barış TABAKCIOĞLU 24 Orta Seviyeli Diller Orta seviye ve üstündeki dillerde yazılan programlar donanımdan bağımsız çalışırlar. Yani yazılan programlar farklı makinelerde de kullanılabilirler. Oldukça esnek olan bu diller hem üst hem alt seviye programlama yapabilirler. Yüksek seviye dillerine göre kullanımı daha zordur fakat programcıya daha özgür bir program geliştirme imkanı sunarlar. Örneğin: C ,C++, C# , Java orta seviye programlama dilleridir. 04.10.2022 Mehmet Barış TABAKCIOĞLU 25 C++ dili C dilinden o da BCPL ve B dilleri üzerinden gelişmiştir. BCPL 1967 yılında Martin Richards tarafından işletim sistemi ve derleyici yazmak amacıyla geliştirilmiştir. Ken Thompson Bell Laboratuvarlarında BCPL’den faydalanarak B dilini geliştirmiştir ve bu dili UNIX işletim sisteminin ilk versiyonlarını yazmak için kullanmıştır. C dili Bell Laboratuvarlarında Dennis Ritchie tarafından 1972 yılında B dili baz alınarak geliştirilmiştir. 04.10.2022 Mehmet Barış TABAKCIOĞLU 26 C dili ilk başlarda UNIX işletim sisteminin programlama dili olarak geniş kabul görmüştür. C++ ise Bjarne Stroustrup tarafından, 1980`li yılların başında, Bell Laboratuvarlarında, C dilinin bir uzantısı olarak birçok ek özelliği bünyesinde barındıran bir programlama dili olarak geliştirilmiştir. Bu özelliklerin en önemlisi bu dilin bir object-oriented programming yani nesne tabanlı programlama dili olmasıdır. 04.10.2022 Mehmet Barış TABAKCIOĞLU 27 Aşağıdaki program C dilinde ekrana "Hello World" yazısını yazar. #include<stdio.h> int main() { printf("Hello World\n"); return 0; } 04.10.2022 Mehmet Barış TABAKCIOĞLU 28 Makine dilinde A ve B sayısını toplayıp C sayısına atayan program 00100010011 01000100010 00011010100 Assembly A ve B sayısını toplayıp C sayısına atayan program load A add B store C Yüksek seviyeli dillerde A ve B sayısını toplayıp C sayısına atayan program C=A+B 04.10.2022 Mehmet Barış TABAKCIOĞLU 29 Yüksek Seviyeli Diller Yüksek seviyeli dilde, Assembly dili veya makine dilindeki birçok satır tek bir komutla gösterilir. Böylece program daha kısa bir sürede yazılır. Bu dillerin komutları İngilizce bir kelimenin tamamından alındığından öğrenmek kolaydır. Pascal, Basic, Fortran yüksek seviyeli dillere örnektir. 04.10.2022 Mehmet Barış TABAKCIOĞLU 30 Aşağıdaki programlar ekrana pascal ve visual basic dillerinde "hello world" yazısını yazar. begin writeln(‘hello world'); end. print "hello world" 04.10.2022 Mehmet Barış TABAKCIOĞLU 31 Çok Yüksek Seviyeli Diller Bu programlama dilleri programlama hâkimiyetini azaltırlar, bunun yanında en hızlı ve en etkili programlama dilleri bu kategoridedir. Çok yüksek seviye programlama dillerini kullanmak ve öğrenmek kolaydır fakat bu tip diller ile yapabilecekleriniz kısıtlıdır. VisualBasic, VB.NET, Acces , Foxpro gibi diller çok yüksek seviyeli dillerdir. 04.10.2022 Mehmet Barış TABAKCIOĞLU 32 Aşağıdaki program ekrana visual basic ve foxpro dillerinde «hello world" yazısını yazar. Private Sub Button1_Clicked() Handles Button1.Click MsgBox("Hello World") End Sub ? "Hello World!" 04.10.2022 Mehmet Barış TABAKCIOĞLU 33 Yapay zekaya yönelik diller Beşinci nesil programlama dilleridir. Yapay zeka programlama dillerinin çalışma mantığı diğer dillere göre farklıdır. Diğer dillerde bir problemin çözülmesi için gerekenler adım adım yazılır ve programa nasıl yapacağı öğretilirdi. Kısacası bir algoritma oluşturulur ve program buna göre yazılırdı. Yapay zekada ise koşulları ve kısıtlamaları programa verdiğinizde, çözümü programın kendisi bulur. Açıkça kodlamanın yerine bildirimsel yöntemle çalışır. Julia, Haskell, JavaScript, Lisp, Python yapay zekaya yönelik dillerdir. 04.10.2022 Mehmet Barış TABAKCIOĞLU 34 SAYI SİSTEMLERİ Elektronik sistemlerde dört farklı sayı sistemi kullanılır. i) İkili(Binary) Sayı Sistemi ii) Onlu(Decimal) Sayı Sistemi iii) Onaltılı(Heksadecimal) Sayı Sistemi iv) Sekizli(Oktal) Sayı Sistemi 04.10.2022 Mehmet Barış TABAKCIOĞLU 35 İkili(Binary) Sayı Sistemi Bu sistemde 0 ve 1 olmak üzere 2 tane sembol vardır ve bu sebeple ikili sayı sistemi denir. Her birine bir “dijit” denir ve bir biti temsil eder. BIT ifadesi de Bİnary digiT’ten gelmektedir. Elektronik sistemlerde 0 volt lojik 0, 5 volt veya 3.3 volt lojik 1 değeri ile ifade edilir. Sayı tabanı 2’dir. 04.10.2022 Mehmet Barış TABAKCIOĞLU Onluk Binary 0 1 2 3 4 5 6 7 8 9 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 36 Binary Decimal Dönüşümü: Her dijit 2’nin basamak kuvveti ile çarpılır ve bunlar toplanarak decimal sayı sistemine çevrilir. (101011)2 = 1 ∗ 25 + 0 ∗ 24 + 1 ∗ 23 + 0 ∗ 22 + 1 ∗ 21 + 1 ∗ 20 =43 Decimal Binary Dönüşümü: Onluk sayı 2’ye bölünerek ikilik sisteme çevrilir. Onluk sayı 2’ye bölünebildiği sürece bölme işlemine devam edilerek kalan değerler tersten yazılarak ikilik karşılığı bulunur. 04.10.2022 Mehmet Barış TABAKCIOĞLU 37 (110)2 = (6)10 (11011)2 = (27)10 (101000)2 = (40)10 (10010)2 04.10.2022 = (18)10 Mehmet Barış TABAKCIOĞLU 38 Onaltılı(Hexadecimal) Sayı Sistemi Bu sayı sistemi 0-9 arası rakamlar ve A-F arası harfler olmak üzere toplam 16 sembolden olur. 04.10.2022 Mehmet Barış TABAKCIOĞLU Onluk Binary Hexadecimal 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 0 1 2 3 4 5 6 7 8 9 A B C D E F 39 Hexadecimal Decimal Dönüşümü: (2AF3)16 = (?)10 (2AF3)16 = 2 ∗ 163 + 10 ∗ 162 + 15 ∗ 161 + 3 ∗ 160 (2AF3)16 = 8192 +2560 +240 +3 (2AF3)16 = (10995)10 Decimal Hexadecimal Dönüşümü: Decimal sayı 16’ya bölünerek Hexadecimal karşılığı bulunur. (10995)10 = (?)16 10995:16=687 Kalan=3 687:16=42 Kalan=15 42:16=2 Kalan=10 2:16=0 Kalan=2 (10995)10 = (2AF3)16 Kalanlar sondan başa doğru yazılır. (10)16 = (16)10 04.10.2022 (2A9)16 = (681)10 Mehmet Barış TABAKCIOĞLU 40 Oktal Decimal Dönüşümü: Sekiz tabanına göre sayı sisteminde 0,1,2,3,4,5,6,7 rakamları olmak üzere sekiz sembol kullanılır. İkilik sistemde sayıların uzun olması yüzünden bilgilerin daha kısa şekilde gösterilmesi ihtiyacından doğmuştur. (427)8 = 4*82 + 2*81 + 7*80 = 256 + 16 + 7 = (279)10 Decimal Oktal Dönüşümü: Decimal sayı sekizli sisteme çevrildiği için bölme 8 metodu kullanılır. (127)10 = (?)8 127 / 8 = 15 + 7 15 / 8 = 1 + 7 1/8=0+1 (127)10 = (177)8 (6)8 = (6)10 04.10.2022 (70)8 = (56)10 (147)8 = (103)10 Mehmet Barış TABAKCIOĞLU (12)8 = (10)10 41 04.10.2022 Mehmet Barış TABAKCIOĞLU 42 04.10.2022 Mehmet Barış TABAKCIOĞLU 43 04.10.2022 Mehmet Barış TABAKCIOĞLU 44 (15)8 (46)8 (732)8 (4567)8 (32632)8 (1A2)16 (12)16 (D34)16 (3C5)16 (79)16 04.10.2022 = (13)10 = (1101)2 = (100110)2 = (111011010)2 = (100101110111)2 = (11010110011010)2 = (110100010)2 = (10010)2 = (110100110100)2 = (1111000101)2 = (1111001)2 Mehmet Barış TABAKCIOĞLU 45