SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

Slides:



Advertisements
Benzer bir sunumlar
STRİNG FONKSİYONLARI.
Advertisements

Bölüm 12 ÜST DÜZEY KONULAR Dinamik Bellek Ayırma Önişlemci
Göstericiler (Pointers)
Nesneye Dayalı Programlama
Bölüm 2 C Dilinin Temelleri
String Diziler(Katarlar)
C Programlama Diline Giriş
Değişken Bildirimleri
OOP4 LAB.
Elektrik-Elektronik Mühendisliği Bölümü DİZİLER C Programlama Dili Yaz Stajı Cengiz TEPE SAMSUN 2007.
String Kütüphanesindeki Arama Fonksiyonları
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 4: Diziler
Bölüm 2 C Dilinin Temelleri Genel Kavramlar
Nesneye Dayalı Programlama
Fonksiyonlar.
Veri Yapıları Ve Algoritmalar
C++ Temelleri C++ genel amaçlı, nesne tabanlı, yüksek seviye programlama dilidir.
C ile Programlamaya Giriş
DEĞİŞKENLER, VERİ TÜRLERİ VE OPERATÖRLER
Temel Veri Türleri ve Operatörler
FONKSİYONLAR.
Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi
Diziler Adres Kavramı Nesnelerin Adresleri sizeof Operatörü
Bölüm 1: C Programlama Diline Giriş
Fonksiyonlar Fonksiyon Tanımı Değer Döndürmeyen Fonksiyonlar
Nesneye Dayalı Programlama
Temel Giriş/Çıkış Fonksiyonları
Bölüm 3: Diziler BTEP 102 – Veri Yapıları ve Programlama
C# Veri Tipleri ve Değişkenler
C PROGRAMLAMA FONKSİYONLAR Adres ile Fonksiyon Çağırma Pointer (İşaretçiler) ile Fonksiyon Çağırma Rekürsif Fonksiyonlar.
VERİ TİPLERİ VE DEĞİŞKENLER
DİZİLER Arrays.
STRING‘LER Karakter Kütüphanesi Fonksiyonları
Değerler ve Değişkenler
Bölüm 2 C Diline Genel Bir Bakış. 1/29 /* Örnek1- toplama.c Klavyeden girilen iki tamsayının toplamını bulup ekrana yazar. Erkan Yasan */ #include.
Bugünkü konular Programlama dilleri ve Syntax Generic C Program yapısı
SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
Algoritmalar ve Programlama I Ders 10: ALTPROGRAM KAVRAMI ve FONKSİYON
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
Algoritmalar ve Programlama I Ders 5: Operatörler
Bölüm 3 Atama ve Girdi/Çıktı Komutları Bölüm 3 Atama ve Girdi/Çıktı Komutları Atama Komutu Operatörler İsim Sabitleri Veri Tipi Dönüşümü Çıktı Fonksiyonu.
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
Fonksiyonlar.
1 Değişken alanları Geçici değişkenler Birleşik ifadeler(bloklar) ve değişkenler Değişken Depolama Süresi ve Alanı –Local ve global değişkenler –Static.
BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler Yrd. Doç. Dr. Altan MESUT Trakya Üniversitesi Bilgisayar Mühendisliği.
VERİ ve BELLEK & DEĞİŞKENLERİN SAKLANMASI Asst.Prof.Dr.Misket YEKTAY Gizem AYIK.
Bölüm 2 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.
İbrahim Olgaç PROGRAMLAMA DİLLERİ SUNUMU C#
Programlamaya Giriş-I Bölüm-1. Algoritma Algoritma günlük yaşamımızda yaptığımız işler sırasında sıklıkla kullandığımız bir yöntemdir. Algoritma, bir.
Bölüm 3 Atama ve Girdi/Çıktı Komutları
Fonksiyonlar ve Diziler
BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler
C Programlama Dili Bilgisayar Mühendisliği.
BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler
C Programlama Diline Giriş
Bölüm 2 C Dilinin Temelleri
Bölüm 1: C Programlama Diline Giriş
YAPISAL PROGRAMLAMA Hafta-6
ARDUİNO Arduino Eğitimleri Bölüm 3 Programlama Dili Temelleri
Veri Tipleri 12/4/2018.
C++ Programming:. Program Design Including
Bilgisayar Bilimi Problem Çözme Süreci-2.
Bölüm 3 Atama ve Girdi/Çıktı Komutları
NİŞANTAŞI ÜNİVERSİTESİ
NİŞANTAŞI ÜNİVERSİTESİ
Bölüm 2 C Dilinin Temelleri
C ile Programlamaya Giriş
Sunum transkripti:

SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz Doç. Dr. Cemil Öz Algoritmalar ve Programlama I Ders 4: C programlama dilinde Sabit,değişken ve değişken bildirimleri   SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

ANSI C’ de var olan ön işlemci komutları; C/C++’ da önişlemci komutları   Bir C programında simgesel sabitler, makro fonksiyonlar veya programın koşullu derlenmesi istenirse, önişlemci komutları olarak adlandırılan komutlar kullanılır. C dili önişlemcisi, derleme işlemine geçmeden önce bu komutları yorumlayarak istenilenleri yerine getirir, ardından derleme işlemine başlanır. ANSI C’ de var olan ön işlemci komutları; #define #error #include #pragma #undef #endif #elif #if #else # inline #ifndef #ifdef #line

#include önişlemci komutu;   Başlık dosyalarında (*.h) bildirilmiş olan makro fonksiyonlar ve simgesel sabitler kullanılacak ise ilgili dosya #include önişlemci komutu kullanılarak program içine eklenmelidir. Örneğin;  #include <stdio.h> /* C de kullanılan standart giriş çıkış fonksiyonların birçoğu */ /* stdio.h adlı başlık dosyasında bildirilmiş olan bir kısım */ /* veri tiplerini ve makro fonksiyon tanımlarını kullanır */ /* Bu yüzden standart giriş fonksiyonları kullanılırken */ /* stdio.h dosyası #include <stdio.h> komutu ile dahil edilir.*/ Başlık dosyalarının önceden derlenmiş olması nedeni ile derleyici sadece program içinde yazılan kodları derler ve böylece derleme zamanından tasarruf sağlar.

Sabit ve değişken kavramı sabit ve değişken tipleri ve bildirimler.   Değişken, verilerin tutulduğu bellek hücrelerine verilen simgesel adlardır. Dolayısı ile program içerisinde kullanılacak veriler değişkenler üzerinde tutulur. Programların yürütülmesi süresince içerikleri değiştirilebilir. Her değişkenin bir adı ve veri tipi vardır. Veri tipi değişkende ne tip veri tutulacağını belirler. C dilinde değişken adları, ilki harf olmak üzere diğerleri harf, sayı veya alt eksi ( _ ) den oluşan bir veya birden çok karakterden oluşur. Değişken adları, dilin anahtar sözcükleri, kütüphanede var olan fonksiyon adları olmamalıdır.

Sabit ve değişken kavramı sabit ve değişken tipleri ve bildirimler.   Her değişkenin tuttuğu değerin nasıl bir veri olduğunu gösteren bir tipi vardır. Sabitler de bellekte verinin saklandığı hücrelere verilen sembolik adlardır. Değişkenlere benzerler, fakat bildirilirken verilen değerler programın yürütülmesi süresince değiştirilemez. Sabitler program boyunca değerleri değiştirilmeyen yani sabit kalan değişkenler olarak ta düşünülebilir. .

Name1, name2, name, Name, Personnel_name, Personnel_Surname Date_of_Bird, Sum, sum, count1, Control10, x , y, s, XYZ, xyz, Xsum, X_sum C programlama dilinde değişken isimleri kullanımında büyük küçük harf farklı muamele görür. Sales sales SALES sALES Bir değişken ismi C programlama dilinin ve fonksiyonlarının isimleri olamaz printf , sin, cos, int Değişken isimleri sayılarla başlamaz 2001_sales Boşluk ve diğer alfa-nümerik olmayan karakterler kullanılmaz( _ alt çizgi hariç-underscore Aug2005+sales, my age , name+surname

C/C++ da değişken ve sabit tipleri Bilgisayar bir makinedir ve insan gibi yorum yapamaz. Bu yüzden programda işlem gören değişken ve sabitlerin veri tipleri, bilgisayarın bu değerler ile işlem yapabilmesi için verilmelidir. Veri tipi bir değişken veya sabitin sayısal, karakter veya başka tipteki niteliğini belirler.   Herhangi bir değişken veya sabitin programda yer alabilmesi için ona bir ad verilmesi ve bu adın program içinde uygun bir yerde bildirilmesi (declaration) gerekmektedir. Bir değişken veya sabit elemanın sayı veya karakter şeklinde genel olarak tiplerinin belirlenmesi tek başına yeterli değildir.

Bu nedenle veri tipinin bildirilmesi bellekte ayrılacağı yerin büyüklüğünü de içermelidir. Buna göre veri tipleri temel tipler ve türetilmiş tipler olarak iki guruba ayrılır.   C dilinde kullanılan temel veri tipleri bool ve void hariç aşağıda verildiği gibidir; char: karakter {A,b,@,<, vb.} int, short, long: tamsayı {1, 1245, vb.} float, double, long double: gerçel sayı {3.14, 104, vb.} char []: söz dizisi (string) {“Sakarya”, vb.} []: dizi, matris {[12 13 1], vb.}

Type Bit width Range Char or signed_char 8 -128 to 127 character unsigned_char 0 to 255 Unsigned character Int 16 -32768 to 32767 integer Unsigned_int 0 to 65535 Unsigned integer Short int Short integer Unsigned int Long int 32 -4294967296 to 4294967295 Long integer Fload Approximately 6 digit of precision Floating point Double Approximately 12 digit of precision Double floating point

Bazı örnekler { int i, j; // Bu üç satır 4 adet değişken tanımlar char c; float x; // Programın geri kalanı Burada ilk satır(int i, j; ) c derleyicisine şunu söyler: Program da bir yerde iki tamsayı kullanacağım bunlar için hazır ol. Bu değişkenleri i ve j olarak isimlen diriyorum. Bu değişkenlerin içeriğinin tamsayı olmasından emin olmak istiyorum.

Diğer programlama dillerinde de kendine özgü gösterimleri ile benzer temel veri tipleri kullanılır.   C dilinde kullanılan türetilmiş veri tipleri aşağıda verildiği gibidir; enum: sıralamalar {pzt, sa, çar, per, …} struct: topluluk işaretçiler (pointers) class: sınıf vb.

C/C++ da temel veri tipleri    Karakter C programlama dilinde “char” ile temsil edilen bu veri tipi tek bir karakterin ifade edilmesini sağlar ve bellekte 1 byte (8 bit) büyüklüğünde yer işgal eder. ‘a’,’B’,’3’, vb. şeklindeki karakterleri ifade eder. En yaygın kullanılan karakter tablosu ASCII tablosudur. Standart ASCII’ de her bir karakter 7 bittir ve 128 farklı karakter vardır. Extended (genişletilmiş) ASCII’ de her bir karakter 8 bittir ve 256 farklı karakter vardır. Uygulamada daha çok genişletilmiş ASCII tablosu kullanılmaktadır. Ayrıca unikod kodlama da yaygınlaşmaktadır ve evrensel bir kodlama şeklidir. Bu kodlamada her karakter 16 bit yer işgal eder ve 65536 (216) tane farklı karakter kodlanabilir. Örnek bildirimler; char first, middle, last; char cevap; char kr;

Tamsayı  C programlama dilinde “int” ile temsil edilen veri tipi normal tam sayıların ifade edilmesini sağlar ve bellekte derleyiciye bağlı olarak 2 yada 4 byte büyüklüğünde yer işgal eder.   Bazı özel niteleyiciler kullanılarak (short, unsigned, long) bu temel veri tipinin türevleri elde edilir. “short int” ile temsil edilen veri tipi kısa tam sayıların ifade edilmesini sağlar ve bellekte derleyiciye bağlı olarak 2 byte‘ ı (16 bit) geçmeyecek uzunlukta ve genelde normal veri tipinin yarısı büyüklüğünde yer işgal eder. “long int” ile temsil edilen veri tipi uzun tam sayıların ifade edilmesini sağlar ve bellekte derleyiciye bağlı olarak genelde normal veri tipinin iki katı büyüklüğünde yer işgal eder. “unsigned int” ile temsil edilen veri tipi işaretsiz (pozitif) tam sayıların ifade edilmesini sağlar. Tamsayı için 16 bit kullanan bir derleyicide, tamsayı -32768 ile +32767 arasında olmalıdır (1 bit işaret biti, 215=32768). Eğer tamsayı işaretsiz bildirilir ise atanacak sayı 0 ile 65535 arasında olmalıdır (216=65536). {(1111111111111111)2 =(65536)10}

Derleyicinin kullandığı veri tipi uzunluğunu byte olarak sizeof operatörü ile öğrenebiliriz.   Örneğin;  #include <stdio.h> int n; void main(void) /* Ana fonksiyon */ { n=sizeof(int); printf("Tamsayi uzunlugu: %d",n); } Örnek bildirimler; long int sonuc; short int yas, boy; unsigned int agirlik;

Gerçel sayı   C programlama dilinde “float” ile temsil edilen veri tipi tek duyarlı gerçel sayıların ifade edilmesini sağlar. Gerçel sayı kayan noktalı (floating point) gösterimle bellekte saklanır. Aynı zamanda standart C’ de “double” ile temsil edilen çift duyarlı ve “long double” ile temsil edilen uzun çift duyarlı kayan nokta gösterimli gerçel sayılar da mevcuttur. Program satırlarında gerçel sayılar 1234.5 veya 0.12345E+4 (=0.1234510+4) biçiminde yazılabilirler. Duyarlılık hesaplanırken sayıdaki nokta solunda sıfır kalacak şekilde kaydırılır ve noktadan sonraki belirli sayıdaki nokta duyarlılık olarak belirtilir. Tek duyarlı bir gerçel sayının duyarlılığı 6 hane ise 123.456789 sayı için duyarlılık aşağıdaki şekilde belirlenir; 123.456789  0.123456E+3 {duyarlılık rakamları .123456 dır.}

Gerçel sayılar da bellekte derleyiciye bağlı bir büyükte yer işgal eder. Genelde tek duyarlılık için 4 byte ve çift duyarlılık için 8 byte büyüklük kullanılmaktadır.   C derleyicilerinde genelde tek duyarlılık için duyarlılık 6 hane ve üs E-38 ile E+38 arasında ve çift duyarlılık için duyarlılık 15 hane ve üs E-308 ile E+308 arasındadır. Gerçel sayılar için de derleyicinin kullandığı veri tipi uzunluğunu byte olarak sizeof operatörü ile öğrenebiliriz. Örnek bildirimler; float x, y; double oran;

Söz dizisi (string)   Bir metinin tamamını, herhangi bir cümlesini, bir sözcüğünü veya hecesini bellekte tutmak için söz dizisi (string) veri tipi kullanılır. C/C++ dilinde söz dizisi (string) karakter dizisi bildirilerek yapılır. Bir söz dizisi ilk karakterden başlar ve sonlandırma karakterine (NULL: ASCII kodu 0) kadar devam eder. Örnek bildirimler; char Ad[10]; /*en fazla 9 karakterli söz dizisi*/ char Soyad[15]; /*en fazla 14 karakterli söz dizisi*/

Dizi (Array)/Matris   Dizi aynı tipten verilerin tek bir isim altında bellekte tutulması için kullanılan bir veri tipi yöntemidir. Bu veri tipi ileriki konularda uygulama örnekleri ile detaylı olarak ele alınacaktır. Örnek bildirimler; int N[10]; int index[100]; int xyz[10][10][20]; float graf[20][10];

C/C++ da değişken bildirim yerleri ve Faaliyet alaları Faaliyet alanı, bir değişkenin ömrünü sürdürdüğü ve tanınabildiği program aralığıdır. Değişkenlerin faaliyet alanları, onların program içerisindeki tanımlama yerleri ile ilişkilidir. Bir C/C++ programında kullanılacak değişkenler önceden bildirilmelidir. Değişkenlerin nerede bildirildiği oldukça önemlidir. Daha öncede belirtildiği gibi bir C/C++ programı, bir yada daha çok fonksiyonun bir araya gelmesi ile oluşur.   Faaliyet alanları üç grupta toplanır. Blok Faaliyet Alanı(Block scope): Yalnızca bir blok içerisinde tanınma aralığıdır.(Küme parantezlerinin arasındaki bölge blok’dur.) Fonksiyon Faaliyet Alanı(Function scope): Yalnızca bir fonksiyonun her yerinde tanınma aralığıdır. Dosya Faaliyet Alanı(File scope): Tüm dosya içinde, yani fonksiyonların hepsi içerisinde tanınma aralığıdır.

C/C++ da değişken bildirim yerleri ve Faaliyet alaları   Değişkenleri de faaliyet alanlarına göre üç bölüme ayırabiliriz. Yerel Değişkenler(Local variables) Global Değişkenler(Global variables) Parametre Değişkenler(Formal parameters) Eğer bir değişken, programdaki fonksiyonların çoğunda kullanılacaksa genel (global) olarak, yalnızca tek bir fonksiyon içinde kullanılacaksa o fonksiyon içinde yerel (local) olarak bildirilmesi uygundur.

Yerel(local) bildirim   Yerel (local) değişkenler kullanıldığı fonksiyon içerisinde bildirilir ve yalnızca bildirildiği fonksiyon içerisinde tanınır ve kullanılırlar. Bildirildiği fonksiyon dışında tanınmazlar. Yerel değişkenler bildirildiği fonksiyon programın işlemesi sırasında yürütüldüğü anda bellekteki veri alanında yer kaplarlar. Burada a ve b’nin her ikiside yerel değişkendir. Çünkü blok başlarında tanımlanmışlardır. Örnekte a değişkeninin faaliyet alanının b değişkeninin faaliyet alanından daha büyük olduğu görülmektedir.

Yerel bildirim için örnek C/C++ programı;  #include <stdio.h> /* Önişlemci komutları */ void main(void) /* Ana fonksiyon */ { int m,n; /* Yerel bildirim */ m=7; n=kare(m); printf("%d nin karesi=%d dir.",m,n); }   int kare (k) /* Fonksiyon */ int k; /* Formal bildirim */ int gecici; /* Yerel bildirim */ gecici=k*k; return gecici; main() fonksiyonunun yerel değişkenleri olan m ve n, kare fonksiyonunun içinde tanınamayacağından kullanılamazlar. Görüldüğü gibi m kare() fonksiyonuna gönderilmekte ve kare() fonksiyonunda ise gönderilen m’ in değeri k adlı değişkende tutulmaktadır. kare() fonksiyonunun yerel değişkeni ise geçici’ dir.

Genel(global) bildirim   Genel (global) değişken bütün fonksiyonların dışında bildirilir. Bir değişken bütün program boyunca sürekli kullanılıyor ise genel olarak bildirilmelidir. Böyle bir değişken yerel olarak bildirilirse, kullanılacağı her fonksiyona gönderilmesi gerekir. Bu da gereksiz parametre aktarımına sebep olur. # include <stdio.h> int x ; /* x global bir değişkendir */ void fonk( ) { x=200; } void main( ) x=100; printf (“x=%d\n”,x); /* x=100 */ fonk( ); printf(“x=%d\n”,x); /* x=200 */

Örnekte x tüm blokların dışında tanımlandığı için global bir değişkendir. X değişkeninin faaliyet alanı dosya faaliyet alanıdır; Yani x tüm fonksiyonlarda tanınır. Global değişkenler de ilk değer verilebilir.   Örneğin: İnt a=500; f1 ( ) { . } Burada a değişkenine tanımlama sırasında ilk değer olarak 500 verilmiştir.

Bir önceki örneği genel (global) değişken kullanarak tekrar yazar isek;   #include <stdio.h> /* Önişlemci komutları */ int m,n; /* Genel bildirim */ void kare(void); /* Fonksiyon bildirimi */  void main(void) /* Ana fonksiyon */ { m=7; kare(); printf("%d nin karesi=%d dir.",m,n); }  void kare(void) /* Fonksiyon */ n=m*m; Her iki program da aynı işi yapmaktadır. Fakat ikinci yazımda değişkenler genel bildirilmiştir. Bu sebeple kare() fonksiyonuna ne parametre gelmekte ne de sonuç gönderilmektedir. Çünkü genel değişkenler bütün fonksiyonlar içinde kullanılabilirler. kare() fonksiyonunun tipi return ile bir şey gönderilmediği için main() fonksiyonu gibi hiçbir şey anlamında void’ dir.

Formal bildirim    C/C++ programlarında bir fonksiyonun argümanı olabilir. Bunlara formal parametreler denilmektedir. Bu argümanlar da uygun bir şekilde bildirilmelidir. Bunlar yerel değişkenlere benzerler ve sadece fonksiyon içerisinde tanınırlar. Bildirimi fonksiyon adının hemen altında veya fonksiyon parantezi içindeki argümanın önünde yapılabilir. Örneğin; … int fonk(m,n) /* Fonksiyon */ int m,n; { …. } Veya;  … int fonk(int m, int n) /* Fonksiyon */ Formal parametreler fonksiyona değer aktarımı yapılacağı zaman kullanılır. 

Diğer bildirimler   Dışsal (Extern) Bildirim: Büyük programlar uygun olarak parçalara bölünüp ayrı ayrı yazılıp derlendikten sonra birbirleri ile bağlantıları (link) kurulabilir. Ortak genel (global) değişkenler bu program parçaların birisinde normal olarak bildirilirken, diğer program parçalarında dışsal (extern) olarak bildirilir. {int x;  extern int x; /*genel*/} Statik (Static) Bildirim: Yerel değişkenler bildirildiği fonksiyon yürütüldüğü anda bellekte yer kaplar. Fonksiyon sonlandığında boş bellek alanı gibi düşünülür ve yerel değişkenin tutuğu değer kaybolur. Yerel değişkenin tutuğu eski değer korunsun istenir ise yerel değişken bildiriminin önüne static anahtar sözcüğü yazılmalıdır. {int k;  static int k; /*yerel*/} Saklayıcı tipi (Register) Bildirim: Bir değişken için bellek hücresi yerine işlemci saklayıcısı (register) kullanılmak isteniliyor ise bu değişken saklayıcı tipte bildirilmelidir. Bunun için değişken bildiriminin önüne register anahtar sözcüğü yazılmalıdır. Saklayıcı tipi değişkenlere -işlemci registerleri kullanıldığı için- erişim daha hızlı olur. Fakat kullanılabilecek saklayıcı tipi değişken sayısı sınırlıdır. {int a;  register int a;} vb..

. Değişkenlere başlangıç değeri atanması   Herhangi bir biçimde bildirilen bir değişkenin değeri o anda bellek hücresinde bulunan kullanılması uygun olmayan rasgele bir değerdir. Değişkenler bildirilirken istenilen bir başlangıç değeri atanabilir. Örneğin; … char kr=’B’, y=41; /*41  ASCII tabloda A karakteri*/ int m=1, n=10, p; float f=10.115, x;

C/C++ da sabit bildirimi   Sabitler de değişkenler gibi bellekte verinin saklandığı hücrelere verilen sembolik adlardır. Değişkenden farklı olarak bildirilirken verilen değerler programın yürütülmesi süresince değiştirilemez. C dilinde sabit bildirimi, başlangıç değeri verilen değişken bildirimi gibi yapılır. Fakat veri tipinin önüne const anahtar sözcüğü koyulmalıdır. Örneğin; const float pi = 3.142857; const int c = 5; const double e = 2.71828182845905;