- Puan
- 28
- Yaş
- 118
╔════════════════════════════════════════════════════════════════════╗
║ C PROGRAMLAMA DİLİ EĞİTİM SERİSİ #7 ║
║ DİZİLER (ARRAYS) ║
║ (Mala Anlatır Gibi) ║
╚════════════════════════════════════════════════════════════════════╝
Önceki bölümde fonksiyonları öğrendik.
Artık:
✓ Kodlarımızı parçalara ayırabiliyoruz
✓ Tekrar eden kodlardan kurtulabiliyoruz
✓ Daha profesyonel programlar yazabiliyoruz
Fakat yeni bir problem ortaya çıktı.
Bir öğrencinin notunu saklamak istiyoruz.
Kolay.
int not1 = 80;
Peki iki öğrenci?
int not1 = 80;
int not2 = 90;
Peki on öğrenci?
int not1;
int not2;
int not3;
int not4;
int not5;
int not6;
int not7;
int not8;
int not9;
int not10;
Şimdiden görüntü kötüleşmeye başladı.
Peki bin öğrenci?
İşte burada DİZİLER ortaya çıkar.
════════════════════════════════════════════════════════════════════
▓▓▓ DİZİ (ARRAY) NEDİR?
Dizi, aynı veri türündeki birden fazla veriyi tek isim altında saklayan yapıdır.
Gerçek hayat örneği:
Bir apartman düşün.
Apartmanın adı:
Ogrenciler
Daireler:
0
1
2
3
4
Her dairede farklı biri yaşıyor.
Ama hepsi aynı apartmanın içinde.
Diziler de tam olarak böyle çalışır.
════════════════════════════════════════════════════════════════════
▓▓▓ İLK DİZİMİZ
int notlar[5];
Bu satırın anlamı:
Bellekte 5 tane int için yer ayır.
Şöyle görünür:
notlar[0]
notlar[1]
notlar[2]
notlar[3]
notlar[4]
Toplam:
5 adet eleman
════════════════════════════════════════════════════════════════════
▓▓▓ EN ÖNEMLİ KURAL
C dili saymaya 0'dan başlar.
Yeni başlayanların yarısı burada hata yapar.
Şu diziye bakalım:
int sayilar[5];
Birçok kişi şöyle düşünür:
sayilar[1]
sayilar[2]
sayilar[3]
sayilar[4]
sayilar[5]
YANLIŞ.
Doğrusu:
sayilar[0]
sayilar[1]
sayilar[2]
sayilar[3]
sayilar[4]
Yani:
════════════════════════════════════════════════════════════════════
▓▓▓ DİZİYE DEĞER ATAMA
int notlar[5];
notlar[0] = 70;
notlar[1] = 80;
notlar[2] = 90;
notlar[3] = 60;
notlar[4] = 100;
Belleğin görünümü:
[70]
[80]
[90]
[60]
[100]
════════════════════════════════════════════════════════════════════
▓▓▓ DİZİDEKİ DEĞERİ OKUMA
#include <stdio.h>
int main()
{
int notlar[3];
notlar[0] = 50;
notlar[1] = 75;
notlar[2] = 100;
printf("%d\n", notlar[0]);
printf("%d\n", notlar[1]);
printf("%d\n", notlar[2]);
return 0;
}
ÇIKTI
50
75
100
════════════════════════════════════════════════════════════════════
▓▓▓ KISA YOLDAN DİZİ TANIMLAMA
Şunu yapmak yerine:
int sayilar[5];
sayilar[0] = 10;
sayilar[1] = 20;
sayilar[2] = 30;
sayilar[3] = 40;
sayilar[4] = 50;
Şunu yazabiliriz:
int sayilar[5] = {10,20,30,40,50};
Aynı sonucu verir.
════════════════════════════════════════════════════════════════════
▓▓▓ FOR İLE DİZİ GEZME
Dizilerin gerçek gücü burada ortaya çıkar.
Örnek:
#include <stdio.h>
int main()
{
int sayilar[5] = {10,20,30,40,50};
for(int i=0; i<5; i++)
{
printf("%d\n", sayilar);
}
return 0;
}
ÇIKTI
10
20
30
40
50
Tek tek yazmak yerine döngü kullandık.
Profesyonel kod budur.
════════════════════════════════════════════════════════════════════
▓▓▓ i DEĞİŞKENİ NEYİ TEMSİL EDİYOR?
for(int i=0; i<5; i++)
İlk tur:
i = 0
sayilar[0]
İkinci tur:
i = 1
sayilar[1]
Üçüncü tur:
i = 2
sayilar[2]
Şeklinde ilerler.
════════════════════════════════════════════════════════════════════
▓▓▓ KULLANICIDAN DİZİYE VERİ ALMA
#include <stdio.h>
int main()
{
int sayilar[5];
for(int i=0; i<5; i++)
{
printf("%d. sayiyi gir: ", i+1);
scanf("%d", &sayilar);
}
return 0;
}
Kullanıcıdan alınan değerler doğrudan diziye kaydedilir.
════════════════════════════════════════════════════════════════════
▓▓▓ DİZİYİ GERİ YAZDIRMA
#include <stdio.h>
int main()
{
int sayilar[5];
for(int i=0; i<5; i++)
{
scanf("%d", &sayilar);
}
printf("\nGirilen Sayilar:\n");
for(int i=0; i<5; i++)
{
printf("%d\n", sayilar);
}
return 0;
}
════════════════════════════════════════════════════════════════════
▓▓▓ DİZİ ELEMANLARINI TOPLAMA
Örnek:
10
20
30
40
50
Toplam:
150
Kod:
#include <stdio.h>
int main()
{
int sayilar[5] = {10,20,30,40,50};
int toplam = 0;
for(int i=0; i<5; i++)
{
toplam += sayilar;
}
printf("%d", toplam);
return 0;
}
ÇIKTI
150
════════════════════════════════════════════════════════════════════
▓▓▓ ORTALAMA HESAPLAMA
#include <stdio.h>
int main()
{
int notlar[5] = {50,60,70,80,90};
int toplam = 0;
for(int i=0; i<5; i++)
{
toplam += notlar;
}
printf("Ortalama = %d", toplam/5);
return 0;
}
ÇIKTI
Ortalama = 70
════════════════════════════════════════════════════════════════════
▓▓▓ EN BÜYÜK SAYIYI BULMA
Dizilerde çok kullanılan işlemlerden biridir.
Örnek:
5
17
92
14
33
En büyük:
92
Kod:
int sayilar[5] = {5,17,92,14,33};
int enBuyuk = sayilar[0];
for(int i=1; i<5; i++)
{
if(sayilar > enBuyuk)
{
enBuyuk = sayilar;
}
}
printf("%d", enBuyuk);
════════════════════════════════════════════════════════════════════
▓▓▓ EN KÜÇÜK SAYIYI BULMA
Mantık tamamen aynı.
int sayilar[5] = {5,17,92,14,33};
int enKucuk = sayilar[0];
for(int i=1; i<5; i++)
{
if(sayilar < enKucuk)
{
enKucuk = sayilar;
}
}
printf("%d", enKucuk);
ÇIKTI
5
════════════════════════════════════════════════════════════════════
▓▓▓ EN SIK YAPILAN HATA
int sayilar[5];
sayilar[5] = 100;
Bu hata çok tehlikelidir.
Çünkü:
sayilar[0]
sayilar[1]
sayilar[2]
sayilar[3]
sayilar[4]
vardır.
sayilar[5] yoktur.
Belleğin dışına çıkmış olursun.
Buna:
Array Out Of Bounds
denir.
Gerçek projelerde ciddi hatalara neden olabilir.
════════════════════════════════════════════════════════════════════
▓▓▓ DİZİLER NEREDE KULLANILIR?
• Öğrenci notları
• Kullanıcı listeleri
• Oyun skorları
• Sensör verileri
• Ağ paketleri
• Dosya verileri
• Resimler
• Ses dosyaları
Aslında bilgisayardaki birçok veri diziler halinde tutulur.
════════════════════════════════════════════════════════════════════
▓▓▓ MİNİ PROJE #1
1'DEN 10'A KADAR SAYILARI DİZİYE AKTARMA
#include <stdio.h>
int main()
{
int sayilar[10];
for(int i=0; i<10; i++)
{
sayilar = i+1;
}
for(int i=0; i<10; i++)
{
printf("%d\n", sayilar);
}
return 0;
}
════════════════════════════════════════════════════════════════════
▓▓▓ MİNİ PROJE #2
DİZİDEKİ ÇİFT SAYILARI BULMA
int sayilar[5] = {10,15,20,25,30};
for(int i=0; i<5; i++)
{
if(sayilar % 2 == 0)
{
printf("%d\n", sayilar);
}
}
ÇIKTI
10
20
30
════════════════════════════════════════════════════════════════════
▓▓▓ MİNİ PROJE #3
DİZİDE KAÇ TANE 50 VAR?
int sayilar[10] =
{
50,10,50,30,40,
50,60,50,80,90
};
int adet = 0;
for(int i=0; i<10; i++)
{
if(sayilar == 50)
{
adet++;
}
}
printf("%d", adet);
ÇIKTI
4
════════════════════════════════════════════════════════════════════
✓ BÖLÜM ÖZETİ
Bu bölümde:
✓ Dizi nedir
✓ Dizi oluşturma
✓ Diziye veri atama
✓ Dizi elemanlarını okuma
✓ For ile dizi kullanımı
✓ Kullanıcıdan veri alma
✓ Toplam hesaplama
✓ Ortalama hesaplama
✓ En büyük sayı bulma
✓ En küçük sayı bulma
✓ Array Out Of Bounds hatası
✓ Gerçek hayat kullanım alanları
konularını öğrendik.
Bir sonraki bölümde STRINGLER (Karakter Dizileri), strlen(), strcpy(), strcmp() ve metin işlemlerine geçeceğiz.
║ C PROGRAMLAMA DİLİ EĞİTİM SERİSİ #7 ║
║ DİZİLER (ARRAYS) ║
║ (Mala Anlatır Gibi) ║
╚════════════════════════════════════════════════════════════════════╝
Önceki bölümde fonksiyonları öğrendik.
Artık:
✓ Kodlarımızı parçalara ayırabiliyoruz
✓ Tekrar eden kodlardan kurtulabiliyoruz
✓ Daha profesyonel programlar yazabiliyoruz
Fakat yeni bir problem ortaya çıktı.
Bir öğrencinin notunu saklamak istiyoruz.
Kolay.
int not1 = 80;
Peki iki öğrenci?
int not1 = 80;
int not2 = 90;
Peki on öğrenci?
int not1;
int not2;
int not3;
int not4;
int not5;
int not6;
int not7;
int not8;
int not9;
int not10;
Şimdiden görüntü kötüleşmeye başladı.
Peki bin öğrenci?
İşte burada DİZİLER ortaya çıkar.
════════════════════════════════════════════════════════════════════
▓▓▓ DİZİ (ARRAY) NEDİR?
Dizi, aynı veri türündeki birden fazla veriyi tek isim altında saklayan yapıdır.
Gerçek hayat örneği:
Bir apartman düşün.
Apartmanın adı:
Ogrenciler
Daireler:
0
1
2
3
4
Her dairede farklı biri yaşıyor.
Ama hepsi aynı apartmanın içinde.
Diziler de tam olarak böyle çalışır.
════════════════════════════════════════════════════════════════════
▓▓▓ İLK DİZİMİZ
int notlar[5];
Bu satırın anlamı:
Bellekte 5 tane int için yer ayır.
Şöyle görünür:
notlar[0]
notlar[1]
notlar[2]
notlar[3]
notlar[4]
Toplam:
5 adet eleman
════════════════════════════════════════════════════════════════════
▓▓▓ EN ÖNEMLİ KURAL
C dili saymaya 0'dan başlar.
Yeni başlayanların yarısı burada hata yapar.
Şu diziye bakalım:
int sayilar[5];
Birçok kişi şöyle düşünür:
sayilar[1]
sayilar[2]
sayilar[3]
sayilar[4]
sayilar[5]
YANLIŞ.
Doğrusu:
sayilar[0]
sayilar[1]
sayilar[2]
sayilar[3]
sayilar[4]
Yani:
- eleman = sayilar[0]
- eleman = sayilar[1]
- eleman = sayilar[2]
════════════════════════════════════════════════════════════════════
▓▓▓ DİZİYE DEĞER ATAMA
int notlar[5];
notlar[0] = 70;
notlar[1] = 80;
notlar[2] = 90;
notlar[3] = 60;
notlar[4] = 100;
Belleğin görünümü:
[70]
[80]
[90]
[60]
[100]
════════════════════════════════════════════════════════════════════
▓▓▓ DİZİDEKİ DEĞERİ OKUMA
#include <stdio.h>
int main()
{
int notlar[3];
notlar[0] = 50;
notlar[1] = 75;
notlar[2] = 100;
printf("%d\n", notlar[0]);
printf("%d\n", notlar[1]);
printf("%d\n", notlar[2]);
return 0;
}
ÇIKTI
50
75
100
════════════════════════════════════════════════════════════════════
▓▓▓ KISA YOLDAN DİZİ TANIMLAMA
Şunu yapmak yerine:
int sayilar[5];
sayilar[0] = 10;
sayilar[1] = 20;
sayilar[2] = 30;
sayilar[3] = 40;
sayilar[4] = 50;
Şunu yazabiliriz:
int sayilar[5] = {10,20,30,40,50};
Aynı sonucu verir.
════════════════════════════════════════════════════════════════════
▓▓▓ FOR İLE DİZİ GEZME
Dizilerin gerçek gücü burada ortaya çıkar.
Örnek:
#include <stdio.h>
int main()
{
int sayilar[5] = {10,20,30,40,50};
for(int i=0; i<5; i++)
{
printf("%d\n", sayilar);
}
return 0;
}
ÇIKTI
10
20
30
40
50
Tek tek yazmak yerine döngü kullandık.
Profesyonel kod budur.
════════════════════════════════════════════════════════════════════
▓▓▓ i DEĞİŞKENİ NEYİ TEMSİL EDİYOR?
for(int i=0; i<5; i++)
İlk tur:
i = 0
sayilar[0]
İkinci tur:
i = 1
sayilar[1]
Üçüncü tur:
i = 2
sayilar[2]
Şeklinde ilerler.
════════════════════════════════════════════════════════════════════
▓▓▓ KULLANICIDAN DİZİYE VERİ ALMA
#include <stdio.h>
int main()
{
int sayilar[5];
for(int i=0; i<5; i++)
{
printf("%d. sayiyi gir: ", i+1);
scanf("%d", &sayilar);
}
return 0;
}
Kullanıcıdan alınan değerler doğrudan diziye kaydedilir.
════════════════════════════════════════════════════════════════════
▓▓▓ DİZİYİ GERİ YAZDIRMA
#include <stdio.h>
int main()
{
int sayilar[5];
for(int i=0; i<5; i++)
{
scanf("%d", &sayilar);
}
printf("\nGirilen Sayilar:\n");
for(int i=0; i<5; i++)
{
printf("%d\n", sayilar);
}
return 0;
}
════════════════════════════════════════════════════════════════════
▓▓▓ DİZİ ELEMANLARINI TOPLAMA
Örnek:
10
20
30
40
50
Toplam:
150
Kod:
#include <stdio.h>
int main()
{
int sayilar[5] = {10,20,30,40,50};
int toplam = 0;
for(int i=0; i<5; i++)
{
toplam += sayilar;
}
printf("%d", toplam);
return 0;
}
ÇIKTI
150
════════════════════════════════════════════════════════════════════
▓▓▓ ORTALAMA HESAPLAMA
#include <stdio.h>
int main()
{
int notlar[5] = {50,60,70,80,90};
int toplam = 0;
for(int i=0; i<5; i++)
{
toplam += notlar;
}
printf("Ortalama = %d", toplam/5);
return 0;
}
ÇIKTI
Ortalama = 70
════════════════════════════════════════════════════════════════════
▓▓▓ EN BÜYÜK SAYIYI BULMA
Dizilerde çok kullanılan işlemlerden biridir.
Örnek:
5
17
92
14
33
En büyük:
92
Kod:
int sayilar[5] = {5,17,92,14,33};
int enBuyuk = sayilar[0];
for(int i=1; i<5; i++)
{
if(sayilar > enBuyuk)
{
enBuyuk = sayilar;
}
}
printf("%d", enBuyuk);
════════════════════════════════════════════════════════════════════
▓▓▓ EN KÜÇÜK SAYIYI BULMA
Mantık tamamen aynı.
int sayilar[5] = {5,17,92,14,33};
int enKucuk = sayilar[0];
for(int i=1; i<5; i++)
{
if(sayilar < enKucuk)
{
enKucuk = sayilar;
}
}
printf("%d", enKucuk);
ÇIKTI
5
════════════════════════════════════════════════════════════════════
▓▓▓ EN SIK YAPILAN HATA
int sayilar[5];
sayilar[5] = 100;
Bu hata çok tehlikelidir.
Çünkü:
sayilar[0]
sayilar[1]
sayilar[2]
sayilar[3]
sayilar[4]
vardır.
sayilar[5] yoktur.
Belleğin dışına çıkmış olursun.
Buna:
Array Out Of Bounds
denir.
Gerçek projelerde ciddi hatalara neden olabilir.
════════════════════════════════════════════════════════════════════
▓▓▓ DİZİLER NEREDE KULLANILIR?
• Öğrenci notları
• Kullanıcı listeleri
• Oyun skorları
• Sensör verileri
• Ağ paketleri
• Dosya verileri
• Resimler
• Ses dosyaları
Aslında bilgisayardaki birçok veri diziler halinde tutulur.
════════════════════════════════════════════════════════════════════
▓▓▓ MİNİ PROJE #1
1'DEN 10'A KADAR SAYILARI DİZİYE AKTARMA
#include <stdio.h>
int main()
{
int sayilar[10];
for(int i=0; i<10; i++)
{
sayilar = i+1;
}
for(int i=0; i<10; i++)
{
printf("%d\n", sayilar);
}
return 0;
}
════════════════════════════════════════════════════════════════════
▓▓▓ MİNİ PROJE #2
DİZİDEKİ ÇİFT SAYILARI BULMA
int sayilar[5] = {10,15,20,25,30};
for(int i=0; i<5; i++)
{
if(sayilar % 2 == 0)
{
printf("%d\n", sayilar);
}
}
ÇIKTI
10
20
30
════════════════════════════════════════════════════════════════════
▓▓▓ MİNİ PROJE #3
DİZİDE KAÇ TANE 50 VAR?
int sayilar[10] =
{
50,10,50,30,40,
50,60,50,80,90
};
int adet = 0;
for(int i=0; i<10; i++)
{
if(sayilar == 50)
{
adet++;
}
}
printf("%d", adet);
ÇIKTI
4
════════════════════════════════════════════════════════════════════
✓ BÖLÜM ÖZETİ
Bu bölümde:
✓ Dizi nedir
✓ Dizi oluşturma
✓ Diziye veri atama
✓ Dizi elemanlarını okuma
✓ For ile dizi kullanımı
✓ Kullanıcıdan veri alma
✓ Toplam hesaplama
✓ Ortalama hesaplama
✓ En büyük sayı bulma
✓ En küçük sayı bulma
✓ Array Out Of Bounds hatası
✓ Gerçek hayat kullanım alanları
konularını öğrendik.
Bir sonraki bölümde STRINGLER (Karakter Dizileri), strlen(), strcpy(), strcmp() ve metin işlemlerine geçeceğiz.