C/C++ Programlamaya Giriş (Introduction C & C++ Programming)
3.7 (9 ratings)
Course Ratings are calculated from individual students’ ratings and a variety of other signals, like age of rating and reliability, to ensure that they reflect course quality fairly and accurately.
5,482 students enrolled

C/C++ Programlamaya Giriş (Introduction C & C++ Programming)

C & C++ Programlama
New
3.7 (9 ratings)
Course Ratings are calculated from individual students’ ratings and a variety of other signals, like age of rating and reliability, to ensure that they reflect course quality fairly and accurately.
5,482 students enrolled
Last updated 4/2020
Turkish
Current price: $12.99 Original price: $19.99 Discount: 35% off
1 day left at this price!
30-Day Money-Back Guarantee
This course includes
  • 3.5 hours on-demand video
  • 2 downloadable resources
  • Full lifetime access
  • Access on mobile and TV
  • Certificate of Completion
Training 5 or more people?

Get your team access to 4,000+ top Udemy courses anytime, anywhere.

Try Udemy for Business
What you'll learn
  • C programlamaya Giriş
  • C++ Programlamaya Giriş
  • printf, scanf, cin, cout
  • diziler (arrays), vector
  • matrisler (matrix)
  • fonksiyonlar (functions)
  • Özyinelemeli fonksiyonlar (recursive function)
  • Döngüler (Loops), while, do-while, for
  • rastgele sayı üretimi
  • hata yakalama (exception)
  • pointers (işaretçiler)
  • Dosyaya veri yazma
  • Dosyadan veri okuma
  • if, if-else, switch-case
  • Mantıksal ve Bitsel operatörlerin farkı
  • Struct ve Typedef
  • Rastgele (Doğrudan) Erişimli Dosyalar
Requirements
  • Programlama merakı
Description

Bu kursun kaynak kitabı: Kodlab yayınlarından çıkan C/C++ Programlama kitabımdır.

Kurs içeriği bu kitap ile paraleldir.

C/C++ Programlama Kurs İçeriği;

- C ve C++ Program Yapısı

- C/C++ Editörleri

- Veri Çıkış İşlemleri

   (printf komutu , cout<< komutu)

- Veri Girişi (Girdi İşlemi) Komutları

   (Scanf Komutu , cin>> komutu )

- Veri Tİpleri

- Operatörler

- Mantıksal ve Bitsel operatörlerin karşılaştırılması

- SEÇİMLİ YAPILAR (IF, IF-ELSE VE SWITCH CASE)

- Döngüler (while, do-while, for)

- İç içe Döngüler

- Çıktı Desenleri (Patterns)

- Tek Boyutlu Diziler (Vektörler)

- Çift Boyutlu Diziler (Matrisler)

- Karakter Dizileri (Stringler)

- Fonksiyonlar

- Özyinelemeli fonksiyonlar

- return, sizeof, static komutları

- Hata Yakalama (Exceptions)

- İşaretçiler (Pointers)

- Dosyalama (Files)

- Yapı (struct) ve typedef tanımlamaları

Not.

- Bu konular haricinde öğrenmek istediğiniz bir konu olursa  tarafıma bildirirseniz en kısa zamanda o konu ile ilgili de  kurs videosu da platforma eklenebilir.

- Ayrıca programlama üzerine özel ders isteğiniz olursa cobanoglubulent@gmail.com adresine mail atabilirsiniz.

Who this course is for:
  • C ve C++ Programlamaya yeni başlayanlar
  • Programlamaya giriş
Course content
Expand 22 lectures 03:28:22
+ C/C++ Programlamaya Giriş
22 lectures 03:28:22

Kaynak: C/C++ Programlama Kitabı, Yazar: Bülent Çobanoğlu, Yayınevi: Kodlab

İlk programlama dilleri olarak Ada, Fortran gibi diller kabul edilse de günümüz modern dillerinin babası olarak C dili kabul edilir. 1972 yılında ortaya çıkan C ve öz evladı C++ dilleri günümüzde de en yaygın kullanılan programlama dillerindendir. Programlama dillerinin reytingini (kullanım oranlarını) gösteren https://www.tiobe.com/tiobe-index/ web adresine göz attığınızda yıllardır ilk 4’de bu iki dilin (babalı-oğullu) yer aldığı görülecektir.

C/C++ dilleri mühendislik (Elektrik, Elektronik, Makine, Mekatronik, Robotik gibi) alanında okuyan/çalışan öğrenciler/meslektaşlar için öğrenilmesi zorunlu dillerden biridir. Bu yönüyle C/C++ Programlama kitabı kapsamlı bir C/C++ çalışma kitabıdır.

C++, C diline ait tüm özellikleri kapsayan, ona modern kavramların (Nesne yönelimli programlama gibi), metotların eklendiği sürekli güncellenen, yenilenen bir dildir. Her C programı aynı zamanda bir C++ programıdır. Fakat tersi doğru değildir.

Bu udemy dersini beraberinde C/C++ programlama kitabımızla takip ederseniz daha verimli olacaktır. Her türlü soru ve önerileriniz için iletişim adresleri aşağıda verilmiştir.

e-mail: cobanoglubulent@gmail.com

tweeter: @bcobanoglu24

Dr. Bülent Çobanoğlu

Preview 12:28
Konsoldan Veri Giriş -Çıkışı (data input-output)
10:12
Karar Yapıları (if, if-else)
08:57
Döngüler (Loops)
04:44

Ders içeriği:

- Operatörler( Ön artırma(++A), Son artırma(A--), Mod Alma (%), ?: operatörü,...)

- Özel Durumlar { if(0), if(1), while(0), while(1),...}

- static belirteci

Operatörler ve Özel Durumlar
15:01

Mantıksal operatörler (AND, OR, NOT) ile Bitsel Operatörlerin (Bitsel NOT, Bitsel AND, Bitsel OR) farkı anlatılmaktadır.

Preview 11:05
İç içe Döngüler (Nested Loops)
05:33
Diziler (Arrays)
07:43
Matrisler (İki Boyutlu Diziler)
08:03

void tipli fonksiyonlar, fonksiyon prototipi, return, rekürsif fonksiyonlar

Preview 15:01
Fonksiyonlar (Functions)
11:11
Özyinelemeli Fonksiyonlar (Recursion)
03:27
Rastgele Sayı Üretimi
05:33
Hata Yakalama (Exception)
09:11

Kaynak: C/C++ Programlama, Kodlab yayınları, 2020. Yazar: Bülent Çobanoğlu

İşaretçi (Pointer) Kavramı

Bir işaretçi (pointer); bir değişken veya dizinin bellek adresini tutan / saklayan bir değişkendir. Pointer operatörü olarak “*” simgesi kullanılır.

Normal değişkenlerin içerisinde bir değer tutulurken, pointer (işaretçi) değişkenlerin içerisinde değişkenin adresi tutulur. Bir işaretçi değişkeni aşağıdaki gibi tanımlanır;

  • <veriTipi> *pointerDegiskeni;

Buradaki veriTipi; pointer değişkenin tipi değil de değişkenin işaret ettiği adreste yer alan verinin tipidir.

  • pointerDegiskeni’ ne ya NULL (sıfır) ya da bir tamsayı adres sabiti atanabilir.

Şimdi daha iyi anlaşılması için daha önceki örneğimize dönersek;

int A1 = 13;

İfadesindeki A1 değişkeninin içeriğine (“13” sayısına) pointer kullanarak (daha hızlı) bir şekilde aşağıdaki kod satırı ile de erişebiliriz;

int *pA1 = &A1; //*pA1; A1 değişkeninin adresini tutmaktadır.

Buna göre değişken tanımlamasını aşağıdaki gibi çözümleyebiliriz;

Değişkeni işaret eden PointerDeğişkenin Bellek AdresiDeğişkenin AdıDeğişken DeğeriDeğişken Tipi*pA10x28ff2cA113int

Not. * operatörü doğrudan işaretçiyi, dolaylı olarak da adresi gösterir.

Bir işaretçi değişkeninin boyutu sabittir, veri tiplerine göre değişmez. Bir işaretçi değişkenin boyutu; ‘sizeof(pointerAdi)’ ile öğrenilebilir. Eğer 4 byte ise anlamı bu işaretçi değişkeni 0x00000000 – 0xFFFFFFFF arasında bir adres (değer) alabilir.

Örnek 15.2. İşaretçi – Adres ilişkisini anlatan aşağıdaki program parçasını adım adım açıklayalım;

  1. char *pr, sy; //pr -> pointer değişkeni, sy char tipinde bir değişken

  2. sy = ‘a’; //sy değişkenine ‘a’ karakteri atandı

  3. pr = &sy; // sy değişkeninin adresi pr ye atandı

  4. ++pr; //pr pointer adresi bir artırıldı

  5. *pr = ‘b’; //bu yeni adrese ‘b’ değişkeni atandı

  • Bir değişkenin önüne & operatörü gelirse değişkenin adresi, * operatörü gelirse değişkenin değeri elde edilir;

printf("%d", *pr); // 24

printf("%p", &pr); // 0x28FF2C sonucunu üretir.


  • *pr’ ifadesi; pr işaretçisinin gösterdiği/işaret ettiği değere dolaylı yoldan (indirection) erişmek istendiği anlamına gelmektedir.

  • printf komutu ile birlikte pointer değişkeninin içeriğini veya adresini elde etmek için ‘%p’ karakterleri kullanılır.

  • Adres ve pointer (&* veya *&) operatörleri birlikte kullanıldığında, aynı çarpma veya bölme işlemlerinin birbirini götürmesi gibi birbirini sıfırlayacaktır (yani pA1 = &*pA1 dir).

Pointer Aritmetiği

Bir işaretçi (pointer) tamsayı değerlerle artırılıp, azaltılabilir (p++; p+=2; p-=5; gibi) fakat daha farklı işlemlere (çarpma, bölme, mod alma,… gibi) tabi tutulamaz.

Bir işaretçi arttırıldığında bellek adresi üzerinde ileri doğru, azaltıldığında ise geri doğru hareket edilmiş olur.

Bir işaretçi ile n tam sayısı toplanmak istendiğinde toplanan; ‘n*sizeof(işaretçi tipi)’ bağlantısı ile elde edilen sayıdır. Dolayısıyla işaretçi bir artırıldığında veri tipinin uzunluğuna bağlı olarak (int ise 4 byte gibi) artar.

Soru: Bir işaretçi ile başka bir işaretçi toplanabilir mi?

Cevap: Hayır, çünkü bu mantıklı değildir. Derleyici hata mesajı (error) verir.

  • İki işaretçi karşılaştırma operatörleri (==,<,>,<=,>=, !=) kullanılarak birbiri ile karşılaştırılabilir. İşaret ettikleri değerlere göre ‘true/false’ sonucunu döndürürler.

Örnek 15.4. İşaretçilerin artırılması işlemini bir dizi üzerinden gösterelim.

// Dizi tanımı

int dz[4] = {10, 20, 30, 40};

int *pr; // Pointer değişkeni

/* dz[0] adresi 'pr', pointer değişkenine atandı */

pr = dz;


Not. İşaretçilere benzer şekilde dizilerde, belli bir bellek adresinden başlayan sıralı değişkenlerdir. Bu nedenle Pointer operatörleri olarak 4 farklı simge farklı amaçlarla kullanılabilir;

  1. & // adres gösterir

  2. * // adresteki nesneyi gösterir

  3. dizi[0] //dizinin başlangıç adresini gösterir

  4. -> //Struct (yapı) göstericisidir. (*pr).a ile pr->a aynı şeydir.

Pointer İşaretçisi (Pointer to Pointer)

Bir işaretçinin işaret ettiği yerde başka bir işaretçi (pointer) olabilir. Bu işaretçilere ‘pointer işaretçisi’ denilmektedir. Aşağıda gösterildiği gibi pointer işaretçisi tanımlanırken ‘**’ çift yıldız kullanılmaktadır. Kullanım şekli;

 <veriTipi> **pointerIsmi;

Örneğin; char **ppr; gibi bir tanımlama da ‘ppr’ değişkeni, bir pointer işaretçisidir.

15.3.3. Fonksiyon İşaretçileri

Geriye değer döndüren bir fonksiyon, değişken değeri yerine değişkenin adresini de döndürebilir. Bir değişken bellekte tutulduğu gibi bir fonksiyon (kod parçası) da bellekte tutulur. Bir dizi isminin o dizinin bellekteki başlangıç adresini göstermesi gibi bir fonksiyon ismi de o fonksiyonun bellekteki başlangıç adresini gösterir.

Aynı değişkenlerde olduğu gibi bir fonksiyona da ismi yerine adresi belirtilerek erişilebilir. Bu durumda fonksiyon işaretçileri kullanılır. Kullanım şekli;

<geri dönüş tipi> (* pointer ismi) ([parametre tipleri])

//Örneğin; int (*pr) (void); veya

// int (* pr) (int, int); gibi.


void fonk(void){

printf("fonksiyon pointeri ile beni çağır!!")

}

int main(){

void (*pr) (void); //fonksiyon işaretçisi

pr=fonk;

pr(); //fonksiyonu çağır. Alternatifi: (*pr)();

}

Fonksiyon işaretçilerinin bildiriminde * operatörünün parantez içerisine alındığına dikkat ediniz. Eğer parantez içerisine alınmaz ise derleyici bu bildirimi, fonksiyon işaretçisi olarak değil de fonksiyon prototipi olarak algılar.

int *f (int, int);

//ifadesi, geri dönüş değeri int türünden bir gösterici,

parametreleri (int, int) olan) f isimli fonksiyonun prototipidir.

int *Search(int x[], int *y); //verilen bir fonksiyon prototipi

//Ana programda aşağıdaki gibi çağrılabilir;

int mynumber, values[100], found, *ptr;

ptr = Search(values, &found);

Fonksiyon Parametrelerinde İşaretçi Kullanımı

Kitabın 10.bölümden hatırlanırsa fonksiyonlara parametre aktarımı iki şekilde yapılıyordu; Verinin doğrudan değerinin aktarılması ki buna değeri ile aktarma (pass by value), diğeri ise verinin adresinin aktarılması ki buna referansı ile aktarma (pass by reference) deniyordu. Doğal olarak verinin adresinin aktarımında işaretçi kullanılmaktadır.

Örnek 15.7. Fonksiyon parametrelerinde işaretçi kullanımını bir örnek uygulama üzerinden inceleyelim. Program iki sayının içeriğini yer değiştirmektedir.

//Yerdeğiştirme fonksiyonu

void swap(int *s1, int *s2) {

int bos;

bos = *s1; // s1, bos değ. aktarıldı

*s1 = *s2; // s2, s1’e aktarıldı

*s2 = bos; // bos, s2’e aktarıldı

}


//Ana program

int main(){

int a = 9, b = 13;

swap (&a, &b);

printf ("a= %d\nb= %d", a,b);

return 0;

}

Çıktı://13 9 olacaktır

const Pointers (Sabit İşaretçiler)

Program içerisinde bir değişkenin değerinin değişmeyeceği (sabit kalacağı) tanımlama yapılırken ‘const’ deyimi ile belirtilir. Benzer şekilde ‘const’ ifadesi işaretçi tanımlamasında da kullanılabilir.

Fakat işaretçiler doğrudan değişkenlerin adreslerini, dolaylı olarak da değişkenlerin işaret ettiği değerleri gösterdiğinden karşımıza ‘const’ deyiminin kullanıldığı yerler dikkate alınarak dört farklı durum çıkmaktadır. Bu durumlar ve örnek kullanım;

  • Değişken işaretçi (non-const pointer) ve değişken değer (non-const data)

    • char *pr = strDizi;

  • Değişken işaretçi (non-const pointer) ve sabit değer (const data)

    • const char *pr = &dgskn;

  • Sabit işaretçi (const pointer) ve değişken değer (non-const data)

    • char * const pr = &dgskn;

  • Sabit işaretçi (const pointer) ve sabit değer (const data)

    • const char * const pr = &dgskn;


İşaretçi Diziler

C/C++ dillerinde dizi ile yapılan işlemler işaretçiler kullanılarak da yapılabilir. Bir dizi ismi, sabit bir işaretçi olarak kabul edilebilir. Özellikle karakter dizileri ve dinamik dizi tanımlamalarında işaretçiler sıklıkla kullanılır.

Esasen bir dizi adı, o dizinin ilk elemanını tutan/saklayan bir tür işaretçidir. Dolayısıyla ‘int a[10];’ ile ‘int *a;’ aynı şeydir. Örneğin; bir a dizisinin 3. elemanına 5 değerini aktarmak için; ‘a[3]=5;‘ veya ‘*(a+3)=5;‘ ifadeleri kullanılabilir.

Pointers (İşaretçiler)
06:32
Pointer Aritmetiği
14:19

Sunu Kaynağı:

  • A'dan Z'ye C Kılavuzu, Kaan Aslan, ISBN: 975-7092-12

  • C/C++ Programlama, Bülent Çobanoğlu, ISBN: 978-605-2118-47-4

Preview 14:36
Dosyaya Veri Yazma
05:56
Dosyadan Veri Okuma
03:24

Rastgele erişimli dosya ile Sıralı Erişimli Dosya arasındaki fark nedir?

fread, fwrite, fseek, rewind() fonksiyonlarının işlevleri nedir?

Rasgele erişimli bir dosyaya veri yazma, veri okuma işlemleri nasıl gerçekleşmektedir?

Doğrudan (Random) Erişimli Dosya İşlemleri
14:22