Algoritma Programlama Blm 6 Veri Tipleri ve Deikenler
Algoritma & Programlama Bölüm 6: Veri Tipleri ve Değişkenler Kitap kaynağı: www. abakuskitap. com DR. BÜLENT ÇOBANOĞLU
En basit bir program; Komutlar ve fonksiyonlar (printf (Yaz), scanf(tara/oku) gibi), Sabitler ve mesajlar (const int pi=3. 14; gibi), Değişkenler ve veri tipleri ( int a, b gibi), Hesaplama ve işlemlerde kullanılan operatörlerden (‘=, *, /, %’ gibi) oluşmaktadır. C/C++ ve Java Dilleriyle ALGORİTMA & PROGRAMLAMA Dr. Bülent Çobanoğlu
C/C++ dili komutları (keywords) Bilgisayarın o an ne yapacağını belirten emirlere komut denir. Bir programlama diline ait komutlar, o programlama dilinde değişken ismi olarak kullanılamaz. Örneğin ‘not’ isimli bir değişken C dilinde kullanılabilirken C++ dilinde kullanılmaz çünkü ‘not’ C++ dilinde bir komuttur. C/C++ ve Java Dilleriyle ALGORİTMA & PROGRAMLAMA Dr. Bülent Çobanoğlu
Değişkenler (Variables) Değişken, verileri saklamak üzere kullandığımız ismini ve tipini bizim belirlediğimiz bellek alanlarına verilen isimdir. Bir değişken kullanılmadan önce tanımlanır. Her değişken belirli bir veri tipine/türüne sahip olmalıdır (int, long, char gibi). Bu veri tipi, değişkenin bellekte kaplayacağı alanı ve sakladığı bilginin büyüklüğünü (değişkenin alacağı değer aralığını) belirtir. Veritipi degisken_adi [= başlangıç değeri]; Burada değişkenlere tanımlama aşamasında başlangıç değeri atanması isteğe bağlı bir durumdur, zorunlu değildir. Örnek değişken tanımlamaları: int a; // şeklindeki tanımlamada a değişkeni sadece tamsayı alabilir. char a; // a değişkeni sadece alfa sayısal (karakter) türünde veri alabilir. Değişkenlere değer atama(=): C/C++ ve Java Dilleriyle ALGORİTMA & PROGRAMLAMA Dr. Bülent Çobanoğlu
Değişkenlere İsim Verme Kuralları 1. 2. 3. 4. 5. Bir değişkenin ilk karakteri mutlaka harf olmalıdır. Değişken isimlerinin içerisinde _ karakteri hariç, boşluk veya özel karakterler bulunmamalıdır. [. , @ ? * : ; !, ( / - + = % & “ $ # ‘ Karakterleri gibi] Değişken isimlerinde Türkçe karakter kullanmamaya özen gösterilmelidir. Değişken isimleri kullanılan programlama diline ait komutları içeremez. O programlama diline ait komutlara ayrılmış sözcükler (reserved words) veya anahtar sözcükler (keywords) de denilmektedir. Değişken isimleri, anlamlı ifadelerden oluşmalıdır (int int. Sayi, enk. Sayi gibi). C ve Java dilleri büyük-küçük harf ayrımı yapan (case sensitive) bir dildir. ( Yani Ad değişkeni ile ad değişkeni farklı değişkenler olarak kabul edilir). Soru. Aşağıdaki değişken isimlerinden hangilerinin C dili için geçerli olabileceğini belirtiniz? Ali 7, 7 Ali, Ali_Veli, Ali Veli, Çömlek, do, _do, asm, Sa%at, 1. sayi C/C++ ve Java Dilleriyle ALGORİTMA & PROGRAMLAMA Dr. Bülent Çobanoğlu
Değişkenlerin Faaliyet Alanları Bir değişken, programın tamamında ya da sadece belli bir alanında faaliyet gösterebilir, hayatta kalabilir. Faaliyet gösterdiği alan, dikkate alınarak değişkenleri genel (global) ve yerel (local) değişkenler olmak üzere ikiye ayırabiliriz. // Bu alanda değişken tanımlanmaz #include <stdio. h> //Burada tanımlanan değişkenler //global değişkenlerdir void fonksiyon() { //Burada tanımlanan değişkenler //yerel/local değişkenlerdir. } //Burada tanımlanan değişkenler //global değişkenlerdir int main() { //Burada tanımlanan değişkenler //local değişkenlerdir. printf (“Merhaba”); } C/C++ ve Java Dilleriyle ALGORİTMA & PROGRAMLAMA Dr. Bülent Çobanoğlu
C Dili Yer ve Tür Belirteçleri auto: auto bir yerel değişkenin/nesnenin faaliyet alanı bittikten sonra kaybolacağını belirtir (auto int a; gibi). Zaten yerel değişkenler varsayılan olarak auto özelliktedir. auto belirteci, global değişkenlerde ve fonksiyon parametre değişkenlerinde kullanılmazlar. register: Değişkenin bellekte değilde CPU kaydedicileri/registers içerisinde tutulacağını belirtir (register int a; gibi). register belirteci sadece yerel ya da parametre değişkenleri ile kullanılabilir, global değişkenler ile kullanılamaz. static: static değişken programın çalışması süresince bellekten kaybolmaz (static int a=0; gibi). static belirteci yerel ya da global değişkenlerle kullanılabilir ama parametre değişkenleri ile kullanılmazlar. static belirteci yerel değişkenlerin ömrünü uzatırken, faaliyet alanı değiştirmezler ama global değişkenlerin faaliyet alanını tanımlandığı modülü/dosyayı kapsayacak şekilde daraltırlar. extern: Genel olarak bir değişkenin/nesnenin başka bir modülde bulunduğunu bildirmek için kullanılır. volatile: Değişkenleri bellekteki adreslerinde tutar. volatile belirteci ile değişkenler geçici de (optimizasyon amacıyla da) olsa registerlarda tutulamaz. C/C++ ve Java Dilleriyle ALGORİTMA & PROGRAMLAMA Dr. Bülent Çobanoğlu
Veri Tipleri char, short, int ve long veri tipleri tamsayıları ifade etmede kullanılırken, float ve double veri tipleri ise kesirli sayıları ifade etmede kullanılırlar. Ayrıca char veri tipi tek bir karakterlik (‘a’, ’b’, gibi) veriyi ifade etmekte kullanılır. Birden fazla karakterlik veri C++ da string, C’ de ise char dizisi şeklinde tanımlanır. C++ dili için geçerli olan bool veri tipini C dilinde kullanmak için #include <stdbool. h> kütüphanesini program başına eklemek gereklidir. C/C++ ve Java Dilleriyle ALGORİTMA & PROGRAMLAMA Dr. Bülent Çobanoğlu
Veri Tipleri Kapasitesi ve Değer Aralığı C/C++ dillerinde de veri tiplerinin maksimum ve minimum değerlerini (değişkenlerin değer aralığını) mevcut veri tiplerine _MIN ve _MAX eklentilerini (CHAR_MIN, INT_MAX gibi) getirerek öğrenebiliriz. Bunun için program başına <limits. h> kütüphanesini eklememiz gerekir. Örneğin; printf("int deger araligi: %d. . . +%dn", INT_MIN, INT_MAX); gibi Bit kapasitelerini ise sizeof() operatörü ile byte cinsinden öğrenebiliriz, sizeof bir değişkenin ya da veri tipinin bellekte byte cinsinden kapladığı alanı verir. C/C++ ve Java Dilleriyle ALGORİTMA & PROGRAMLAMA Dr. Bülent Çobanoğlu
Örnek 6. 3. _MIN, _MAX ve sizeof() Kullanım Örneği Not: Verilen ekran çıktısını 64 bitlik işlemciye sahip bilgisayarımda elde ettiğimi hatırlatmak isterim. Farklı ekran çıktısı alırsanız şaşırmayın. Zira veri tiplerinin değer aralığı her derleyici ve mikroişlemcide farklılık gösterebilir. Peki değişmemesi için bir çözüm varmıdır? C/C++ ve Java Dilleriyle ALGORİTMA & PROGRAMLAMA Dr. Bülent Çobanoğlu
C++11 Tipleri C/C++ da tam sayı (int) veri tipi aralığı bilgisayardan bilgisayara değişiklik arz ettiği için C++11 Tipleri geliştirilmiştir. Tabii bu tipleri kullanmak için program başına <cstdint> kütüphanesini eklemeniz gerekir. C/C++ ve Java Dilleriyle ALGORİTMA & PROGRAMLAMA Dr. Bülent Çobanoğlu
Metinsel (String) veri tipleri Tek bir karakteri ifade etmek için gerek C/C++ gerekse Java dillerinde char veri tipi kullanılır {char harf= ‘g’ gibi}. Fakat birden fazla karakteri ifade etmek için Java’da String, C++ da string veri tipleri kullanılırken C’de char veri tipi kullanılır. Metinsel/String bir veri, ilgili değişkene aktarılırken çift tırnak “…” işareti kullanılırken tek bir karakterin ilgili değişkene aktarımında tek tırnak ‘…’ işareti kullanılır. char tipinde tanımlanan dizinin son karakteri null (‘ ’) dur. Örnek kullanımlar; C için char ad []={‘I’, ‘s’, ‘t’, ‘a’, ‘n’, ‘b’, ‘u’, ‘l’, ‘ ’}; char ad []="Istanbul"; C++ için string ad= "Istanbul"; C/C++ ve Java Dilleriyle ALGORİTMA & PROGRAMLAMA Dr. Bülent Çobanoğlu
Tip Dönüşümleri • Değişkenlere değer aktarımında, veri tipine bağlı olarak alabileceği değerlere ve tip uyumuna dikkat etmek gerekir. Derleyici daha az duyarlıklı veri tipini daha fazla duyarlıklı veri tipine doğrudan dönüştürür ve küçük veri tiplerinin büyük veri tiplerine dönüşümünde bir veri kaybı yaşanmaz. • byte / short --> int --> long --> float - -> double • Tip dönüşümü (donusum tipi) degisken şeklinde float x = (float)3/2; gibi yapılır. • Büyük veri tiplerinin küçük veri tiplerine dönüştürülmesinde (yüksek anlamlı byte değerinde) veri kaybı yaşanabilir. char a; int b; b=0 x 1453; a=b; printf( "%xn", a); Örneğin; bu program parçasının ekran çıktısı (onaltılık tabanda) 53 dür. C/C++ ve Java Dilleriyle ALGORİTMA & PROGRAMLAMA Dr. Bülent Çobanoğlu
Sabitler (Constans) Program içerisinde değeri değişmeyen ifadelere sabit denir(∏ sayısı gibi). Java dilinde değişkenleri sabit olarak tanımlamak için değişken tanımının önüne final sözcüğü getirilirken, C/C++ dilinde #define komutu veya const komutu kullanılır. { const float pi=3. 14; gibi} C/C++ ve Java Dilleriyle ALGORİTMA & PROGRAMLAMA Dr. Bülent Çobanoğlu
C için Adres Sabitleri Bir tamsayı sabitini adres türüne dönüştürmek için tür dönüştürme operatörleri kullanılır. (<veri tipi> *) <tamsayı sabiti> (float *) 0 x 1 AB 4; gibi Sabit örnekleri: "ali" char dizisi (string) türünde bir değişkendir. 'b' , char türünde bir sabittir. char b; char türünde bir değişkendir. 123 int türünde bir sabittir. int b; int türünde bir değişkendir. 15. 6 f float türünde bir sabittir. float b; float türünde bir sabittir. (float *) 0 x 1 ACB adres sabitidir. *p adres barındıran bir değişkendir(pointerdır). C/C++ ve Java Dilleriyle ALGORİTMA & PROGRAMLAMA Dr. Bülent Çobanoğlu
Enum Sabiti (Enumeration constant) Kullanıcının tanımladığı, sıralı semboller kümesi olarak tanımlayabileceğimiz enum sabiti, normalde mevcut olmayan, bize özel verileri sıralamak amacıyla kullanılır. enum sabit_ismi {a, b, c, d, e, …}; Örnek 6. 8. Haftanın günlerinin rakamsal karşılığını aşağıdaki gibi veren programı kodlayınız. #include <stdio. h> #include <stdlib. h> int main() { enum gunler { Pzr, Pzrts, Sl, Crsmb, Prsmb, Cmrts printf("Günler. . : n"); printf("Pazar: %dn", Pzr); printf("Pazartesi: %dn", Pzrts); printf("Salı: %dn", Sl); printf("Çarşamba: %dn", Crsmb); printf("Perşembe: %dn", Prsmb); printf("Cuma: %dn", Cm); printf("Cumartesi: %dn", Cmrts); return (0); } }; C/C++ ve Java Dilleriyle ALGORİTMA & PROGRAMLAMA Dr. Bülent Çobanoğlu
Mesajlar ile kullanıcıyı doğru yönlendirmeyi unutmayınız! Kullanıcı iletişim kurmak için kullanılır. Mesajlar kullanıcıyı yönlendirmek (“Bir sayı giriniz” gibi) amacıyla kullanılırlar. C dili mesajlaşma komutları: printf ("Sayı Gir"); puts ("Toplam="); C/C++ ve Java Dilleriyle ALGORİTMA & PROGRAMLAMA Dr. Bülent Çobanoğlu
Sorularla Soluklanalım!! S 1. char, signed char ve unsigned char ifadeleri arasındaki fark nedir? S 2. char ch='A'; ile char ch=65; arasında bir fark var mıdır? S 3. int sayi = 18; float ort = sayi/ 4; Yukarıdaki program parçası çalıştırıldıktan sonra ‘ort’ değişkeninin içeriği ne olur? C/C++ ve Java Dilleriyle ALGORİTMA & PROGRAMLAMA Dr. Bülent Çobanoğlu
- Slides: 18