Genel Programlama I

advertisement
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
Download