Genel Programlama I 14.10.2010 Ders 3 1 LİNUX NEDİR? • Microsoft Windows ‘a elternatif bir işletim sistemidir. • Açık kaynaklıdır. • Ücretsizdir. • Daha güvenilirdir. • Laboratuar ve bilimsel çalışma ortamlarında daha sık rastlanır. • Komut temelli bir yapısı vardır. 2 Linux/unix İşletim Sistemleri Linux işletim sistemi açık kaynak kod felsefesine dayanan ve işletim sisteminin kaynak kodları bir çok birbirinden bağımsız geliştirici tarafından geliştirilen işletim sistemidir. Kaynak Kod (Source Code):Bir programın, herhangi bir programlama dili ile yazılmış, insana yakın orijinal formudur. Programlar, kaynak kodların çeşitli derleyicilerden geçirilerek bilgisayarın anlayabileceği bir forma dönüştürülmüş halleridir. Örneğin mp3 çalıcı programınızı bilgisayarınızda çalıştırabilirsiniz fakat onun nasıl çalıştığını anlayabilmeniz için kaynak koduna bakmanız gerekir. En ilkel hali ile kaynak kod için, ait olduğu programın bilgisayara ne yaptırdığını ve nasıl çalıştığını tam olarak anlayabilmemizi sağlayan yazılı halidir diyebiliriz. 3 Açık kaynak kodlu özgür yazılımlar şu avantajları da beraberinde getirmektedir: Güvenilirlik: Açık kaynak kodlu yazılımların belki de en büyük artısı olan güvenilir oluşları, kimi çevreler tarafından doğru olmayan bir mantıkla bir dezavantaj gibi gösterilmeye çalışılmakta ve topluma 'Açık kaynak kodlu bir yazılımın tam olarak nasıl çalıştığı kaynak koduna bakılarak bilinebildiği için yazılımın barındırdığı güvenlik problemleri saldırganlar tarafından kolaylıkla tespit edilip kullanılabilmektedir' gibi bir düşünce yerleştirilmeye çalışılmaktadır. Fakat açık kaynak kodlu bir yazılım, doğası gereği geliştirilmesi sürecinden kullanımı zamanına değin onbinlerce göz tarafından denetlenmektedir. Ortaya çıkması muhtemel bir güvenlik problemi veya kötü niyetli bir programcı tarafından bilinçli olarak yerleştirilebilecek bir kod parçası yazılım (trojan veya benzeri) kullanıcının eline ulaşmadan tespit edilmekte ve hızla düzeltilmekte veya size ulaşması engellenmektedir. Ayrıca kimse, binlerce insanın kolektif bir şekilde geliştirdiği bir yazılımın güvenilmez olduğunu iddia ederken, sınırlı sayıda kişinin geliştirdiği ve kaynak kodunu kapattığı bir yazılımın güvenilirliğini kimin ve nasıl garanti edeceği sorusuna yanıt veremez. 4 Sağlamlık: Yine açık kaynak kodlu yazılımların doğal geliştirme süreci içerisinde çok sayıda insan tarafından denenmeleri ve kaynak kodlarının gözden geçirilmesi sonucunca ortaya yüksek kalitede, durağan ve kuvvetli yazılımlar çıkmaktadır. Test edilmesi sadece bir tek donanım veya benzer donanım grupları ile değil tüm dünyadaki kullanılan donanımlar ile test edildiğinden donanım uyumsuzlukları ortadan kalkmaktadır. Esneklik: Kaynak kodu açık bir yazılım hızla ve kolaylıkla yeni bir sistem üzerinde çalışacak şekilde yeniden yapılandırılabilmekte, bir kısmı çıkarılarak kapsamı daraltılabilmekte veya eklenen yeni fonksiyonlarla kapsamı genişletilebilmektedir. Kullanıcı kendi işine yaramayan programları bilgisayarına yüklememekte ve gereksiz disk alanının işgal edilmesini ortadan kaldırmaktadır. 5 Uygulama Desteği: Çok geniş bir yelpazede ve çeşitlilikteki bir çok açık kaynak kodlu özgür yazılım her gün duyurulmaktadır. Herhangi bir konudaki ihtiyaç açık kaynak kodlu yazılımlarla hızlı ve kaliteli bir şekilde çözüme kavuşturulabilmektedir. Açık kaynak kodlu yazılımlar kullanıcıları ihtiyacı doğrultusunda yeni geliştirilecek programlara da hazır test görevini de üstlenmektedir. Linux, Linus Torvalds adında Finlandiya'lı bir bilgisayar mühendisinin 1991 yılında Helsinki Üniversitesi'nde bir öğrenci iken kişisel bilgisayarında kullanmak üzere geliştirmeye başladığı bir işletim sistemi çekirdeğidir (işletim sisteminin çekirdeği, işletim sisteminin beyni diye tabir edebileceğimiz kısmıdır). İnternet'te yaptığı duyuru sonucunda tüm dünyadan bir çok programcının da desteği ile hızla gelişmiş ve halen aynı destek ile gelişmekte olan açık kaynak kodlu, özgür bir yazılımdır. 6 E-posta listelerinde özgür yazılım ve linux konusunda yardım almak isteyen kişilere yardım edilmekte, düzenli ve gezici seminerler ile kitleler ücretsiz bilgilendirilmektedir. Türkçeleştirme, yeni özgür yazılımların geliştirilmesi gibi çalışmalara destek verilmektedir. Şu anda nerede ise tüm üniversite bilgi işlem merkezlerinin yanı sıra, NASA, IBM, HP, Boeing, HSBC, CityBank, SonyEricsson, Nokia, Siemens, Samsung, General Motors, Hyundai, Oracle, EToys gibi çok büyük kuruluşlar Linux kullanmakta ve bir şekilde özgür yazılımlara destek olmaktadırlar. İşletim sistemi bilgisayar ve çevresindeki tüm birimleri yöneten bir yönetici konumundadır. Aygıtları yönetmek ve yönlendirmenin yanısıra sistemin güvenliğinden, kullanıcıların tanımlanmasından, dosya güvenliğinden ve işlemlerin birbirlerine karışmadan sağlıklı bir şekilde çalışmasından da sorumludur. 7 Bilgisayar laboratuarında Laboratuara geldiniz ne yapacaksınız: Öncelikle kullanıcı adı ve şifrenizle giriş yapacaksınız. Windowstakine benzer bir masaüstü göreceksiniz. Programlarınızı yazmak için bir text editor açmanız gerekiyor. Bunun için: Launch -> Applications -> Accessories -> Gedit e tıklayıp, linuxte kullanılan text editor uygulamasını başlatıyorsunuz. Windowstaki Notepad e benzer bir programdır ve kullanımı oldukça kolaydır. Programı yazdıktan sonra derlememiz gerekiyor, bu işlemi terminal aracılığıyla yapıyoruz. Masaüstünde terminal için kısayol olması gerekiyor. 8 9 TEMEL KOMUTLAR Öncelikle terminalde kullanmanız gereken temel komutları öğrenelim. Sonrada program nasıl derlenir onu gösterelim. • pwd -> o anda bulunduğunuz dizinin adresini gösterir. • mkdir -> yeni bir dosya oluşturur. bash-3.00# mkdir yenidosya • cd -> change directory anlamına gelir ve bulunduğunuz dizindeki dosyaların içine girmenizi sağlar. bash-3.00# cd yenidosya • cd .. -> bulunduğunuz dizin içerisinden çıkıp bir üst dizine geçmenizi sağlar. bash-3.00# cd .. • ls -> bulunduğunuz dizin içerisindeki dosyaları listeler. 10 • cp -> bir dosyayı kopyalamaya yarar. bash-3.00# ls file1.txt file2.txt file3.jpg bash-3.00# cp file1.txt file4.txt bash-3.00# ls file1.txt file2.txt file3.jpg file4.txt • mv -> dosyanın ismini değiştirmekte kullanılır. bash-3.00# ls file1.txt file2.txt file3.jpg bash-3.00# mv file1.txt newfile1.txt bash-3.00# ls file2.txt file3.jpg newfile1.txt • rm -> dosya silmek için kullanılır bash-3.00# ls file1.txt file2.txt file3.jpg bash-3.00# rm file1.txt bash-3.00# ls file2.txt file3.jpg • rmdir -> içi boş olan dosyayı silmekte kullanılır. 11 Programların Derlenmesi Ekrana Hello World ve Merhaba Dunya yazdıran bir program yazalım ve bunu hem Linux’da hem Windows’da nasıl derleriz onu gösterelim. Program bir tam sayı sonucu beklediği için bunu yazdık. Yazdığınız programları kaydederken onlara isim vermelisiniz. Verdiğiniz isimlerin Türkçe’ye özgü karakterler içermemesine(ş, ç, ö, ü, ğ, İ, ı gibi ) ve uzantısının .c şeklinde olmasına dikkat etmelisiniz. 12 Yukarıda yazdığımız programı deneme.c şeklinde kaydetmiş olalım. bash-3.00# ls deneme.c deneme.c programını derlemek için girmemiz gereken komutlar. bash-3.00# gcc –o deneme deneme.c bash-3.00# ls deneme deneme.c Bu şekilde deneme.c programını deneme olarak derledik. Derlenmiş programı çalıştırmak için: bash-3.00# ./deneme Hello World Merhaba Dünya Programı çalıştırırken deneme yazmadan önce içinde bulunduğumuz dizini göstermek için ./ kullandık bunu unutmayın. 13 Windows için Derleyici Program Bloodshed Dev-C++ Windows’ta yazdığınız bir programı derlemeniz için bir derleyiciye ihtiyacınız var. Bunun için Bloodshed Dev-C++ derleyicisini kullanabilirsiniz. Bu programın nasıl kullanıldığına bir göz atalım . Program menülerinden, File -> New-> Source File yaparak yeni bir kaynak dosyası açın 14 Aşağıdaki kodu deneme amacıyla, açtığınız dosyaya yazın: File -> Save As sekmesiyle, yazdığınız dosyayı kaydedin. Dosyanın adını verdikten sonra sonuna .c yazın. Örneğin deneme.c gibi... Execute -> Compile sekmesine tıklayın. Artık programınız derlendi ve çalışmaya hazır. Execute -> Run ile programınızı çalıştırın. Ekrana "Hello World" yazacaktır. 15 Tekrar 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 verilmeli. 2. Çıktı: En azından bir değer üretilmeli. 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 ve kağıt ile yürütebileceği kadar basit olmalıdır. Bir program için 4. özellik geçerli değilse işletim sistemleri gibi program sonsuza dek çalışır. 16 Program : Belirli bir problemi çözmek için bir bilgisayar dili kullanılarak yazılmış deyimler dizisi. Önceki bölümde bir problemin çözümü ile ilgili teknikler sunmuştuk. Bir problemi bilgisayar ile çözmek için geliştireceğimiz programın yazımında izleyeceğimiz adımlar: i) Problemin ne olduğunu kavra. Çözüm için gereksinimleri belirle. ii) Problemin girdilerini, çıktılarını ve diğer kısıtlama ve gereksinimleri belirle (bilgilerin giriş ve çıkış biçimlerinin nasıl olacağına kadar). iii) Problemin çözümünü veren algoritmayı yaz. iv) Algoritmayı bir programla dili ile yaz. v) Programın doğru çalışıp çalışmadığını test et. Bu testi değişik veriler (girdiler) için tekrarla. 17 C deTemel Veri Tipleri 18 Değişken bildirimleri bu veri tiplerine göre yapılır. Örnek: 19 Temel Değer Ataması Değişkenlere bir değer atanabilir, atanmazsa değişkenin değeri 0 veya türüne göre bir hafıza kalıntısı bırakacaktır. Değişkenlere yeni değer atanmadığı sürece aynı kalacaktır. 20 C deki integer data tipleri o C farklı tipteki integer sayıları desteklemektedir. o Maksimum ve minimumlar “limits.h” dosyasında tanımlanmıştır. 21 C dilindeki gerçek sayılar o C farklı gerçek sayıları desteklemektedir. o Bu sayıların alabileceği maximum ve minimumlar “float.h” dosyasında belirtilmistir 22 C Dilinde Bildirim İşleminin Genel Biçimi C programlama Dili'nde bildirim işlemi aşağıdaki şekilde yapılmaktadır : <tip> <nesne ismi> <;> Burada noktalı virgül karakterine sonlandırıcı karakter diyoruz. Noktalı virgül ayıraç türünden bir işarettir ve C'de bütün ifadeler noktalı virgül ile birbirlerinden ayrılırlar. a = x + 1; b = x + 2; ifadelerinde bulunan noktalı virgüller bunların ayrı birer ifade olduklarını gösterirler. Eğer bir tek noktalı virgül olsaydı derleyici iki ifadeyi tek bir ifade gibi yorumlayacaktı. a = x + 1 b = x + 2; Yukarıdaki ifade tek bir ifade gibi yorumlanır ve derleyici buna bir anlam veremez. 23 Bildirim Örnekleri int x; unsigned long int var; double MFCS; unsigned _result; signed short total; Tip belirten anahtar sözcüklerin yazılmasından sonra aynı tipe ilişkin birden fazla nesnenin bildirimi, isimleri arasına virgül koyularak yapılabilir. Bildirim deyimi yine noktalı virgül ile sonlandırılmalıdır. unsigned char ch1, ch2, ch3, ch4; float FL1, Fl2; unsigned total, subtotal; int _vergi_katsayisi, vergi_matrahi; 24 printf işlevi Program içinde istenen değerleri çıktı birimlerine göndermek için kullanılır. Normal kullanımında çıktı birimi olarak ekran kabul edilir. Kullanım biçimi: prinf( kontrol, <parametreler>) <kontrol> ile belirtilen bilgiye göre parametreleri yazar. Kontrol metini iki kısımdan oluşur. o sıradan karakterler: doğrudan yazılırlar. o dönüşüm/biçim belirleyici karakterler: Değerlerin nasıl yazılacağı bildirilir. printf(" sonuç = %d", k); 25 scanf İşlevi Klavyeden veri okumak için kullanılır. Yapı olarak printf işlevi ile hemen hemen aynıdır. Kullanım biçimi: scanf( kontrol, <değişkenler>) Girilen karakterler <kontrol> metininde belirtilen biçimlere göre değişkenlere aktarılır. Değişkenler işaretçi tipinde olmalıdır. Yani parametre olarak değişkenin adresi gönderilmelidir. Ayırıcılar boşluk, tab, enter scanf("%f %f %f ", &a, &b, &c); 26 27 Mantıksal ifadeler Sonucu Doğru veya Yanlış olan ifadelerdir. Sonuç sıfır ise yanlış aksi halde doğru kabul edilir. İlişkisel işleçler(operatör) : iki değer arasındaki ilişkiyi test etmek için kullanılır. işaret anlamı > büyük >= büyük - eşit == eşit < küçük <= küçük - eşit != eşit değil x=8, y=5 için x>y Doğru x<y Yanlış x !=y Doğru 28 Aritmetik operatörler ve ifadeleri ( + ) : Artı ( - ) : Eksi ( / ) : Bölme ( * ) : Çarpma ( % ) : Modül Modül kalanları bulmaya yarar. Yani diyelim ki 15'in 6'ya olan bölümünden kalanını bulmak istiyorsunuz. O halde 15%6 = 3 demektir. Veya, 7'nin 3'e bölümünden kalanı bulacaksanız, o zamanda 7%3 = 1 elde edilir. 29 UYGULAMA Örnek Problem Klavyeden girilen iki sayının toplamını, farklarını, çarpımlarını ve bölümlerini bulmak için algoritmayı ve programı yazınız. 30 Algoritma Girişler float x, y; Çıkışlar float toplam; float fark; float carpim; float bolum; /* iki değişken */ /* x ve y nin toplamı */ /* x ve y nin farkı */ /* x ve y nin çarpımı */ /* x in y ye bölünmesi */ Programda sırasıyla yapılması gerekenler: x ve y değişkenlerini tanımla, x ve y nin kullanıcı tarafından girilmesini sağla, x+y yi yaz, x-y yi yaz, x*y yi yaz, x/y de eğer y sıfır değilse sonucu yaz; 31 Program 32 Örnek Problem Klavyeden girilen bir sayının 3’e bölümünden kalanı bulan algoritmayı ve programı yazın. 33 Algoritma Girişler int x; Çıkışlar int kalan; /* girilen değişken */ /* girilen sayının 3 e bölümünden kalan */ Programda sırasıyla yapılması gerekenler: x değişkenini tanımla, x in kullanıcı tarafından girilmesini sağla, Kalan = x % 3 yaz, Kalan ı ekrana yazdır 34 35