C'de Diziler #C5

Bu yazıda, programlama dillerinin en önemli veri yapıları olan arrays(diziler) inceleyeceğiz. C programlama dilinde dizi veri yapısının nasıl oluşturulduğunu ve nasıl kullanıldığına değineceğiz.

Adres Kavramı

Adres hem donanıma hem de yazılıma ilişkin bir kavramdır. Donanımsal olarak bellekte yer gösteren bir sayıdan ibarettir. Mikroişlemci bellekte bir bölgeye ancak o bölgenin adres bilgisiyle erişebilir. Oysa yazılımsal olarak adres, yalnızca bellek bölgesinin yerini gösteren bir sayıdan ibaret değildir; aynı zamanda o bellek bölgesinde bulunan bilginin nasıl ele alınacağını belirten bir tür bilgisini de içermektedir.

Bellekteki her byte diÄŸerinden farklı bir adresle temsil edilir. Sıfırdan baÅŸlayarak her byte’a artan sırada bir sayı karşılık getirerek elde edilen adresleme sistemine doÄŸrusal adresleme sistemi, bu sistem kullanılarak elde edilen adreslere de doÄŸrusal adresler (linear address) denilmektedir.

Diziler (Arrays)

Dizi, birden çok değer depolayabilen bir değişkendir. Örneğin 100 tane tamsayı saklamak istiyorsanız bunu dizilerle yapabilirsiniz. Yani bellekte sürekli bir biçimde bulunan aynı türden nesnelerin oluşturduğu kümeye dizi diyoruz. Tanımdan da anlaşılacağı gibi diziyi dizi yapan iki temel özellik vardır:

  •        Elemanlarının bellekte sürekli bir biçimde bulunması
  •        Elemanların aynı türden nesneler olması

Dizi bildirim işleminin genel biçimi aşağıdaki gibidir:

<Tür> <Dizi_İsmi>[<Eleman_Sayısı>]

Örnek dizi bildirimleri:

char s[30];
float real[10];
double max[100];

Dizilere değer eklemek için küme parantezleri içinde virgülle ayrılmış bir liste kullanılır:

int myNumbers[] = {25, 50, 75, 100};

Şimdi dört tamsayıdan oluşan bir dizi tanımladık.


Dizi Elemanlarına Erişim


Dizi elemanlarına erişebilmek için indeks operatörü kullanılır. İndeks operatörü aslında bir gösterici(pointer) operatörüdür.
Dizi indeksleri 0 ile başlar: [0] ilk elemandır, [1] ikinci elemandır vb.

Örnek:

#include <stdio.h>
int main() {
  int myNumbers[] = {25, 50, 75, 100};
  printf("%d", myNumbers[0]);
}

Çıktı:

25

Dizi Elemanının Değiştirilmesi

Belirli bir elemanın değerini değiştirmek için indeks numarasının bilmesi gerekiyor:

myNumbers[0] = 33;

bu şekilde 0. İndeksteki elemanın değeri 33 ile değiştirilir.

Örnek:

#include <stdio.h>
int main() {
  int myNumbers[] = {25, 50, 75, 100};
  myNumbers[0] = 33;
  printf("%d", myNumbers[0]);
}

Çıktı:

33

For döngüsü kullanılarak dizi elemanlarına ulaşılabilir.

#include <stdio.h>
int main() {
  int myNumbers[] = {25, 50, 75, 100};
  int i;
  for (i = 0; i < 4; i++) {
    printf("%d\n", myNumbers[i]);
  }
}

Çıktı:

25
50
75
100

Örnek:

#include <stdio.h>
int main() {
  int myNumbers[4];
  myNumbers[0] = 25;
  myNumbers[1] = 50;
  myNumbers[2] = 75;
  myNumbers[3] = 100;
  printf("%d\n", myNumbers[0]);
}

Çıktı:

25


Çok Boyutlu Diziler

C’de çok boyutlu diziler içsel olarak tek boyutlu dizi biçiminde saklanır. Çok boyutlu dizi bildirimlerinin genel biçimi aÅŸağıdaki gibidir:

<tür> [n1 ],[n2],[n3],…

Boyut uzunluklarını belirten n1,n2,n3,… sabit ifadeler olmak zorundadır. ÖrneÄŸin:

int x[10][20];

Burada x iki boyutlu int türünden bir dizidir. Boyut uzunlukları sırasıyla 10 ve 20’dir.

double n[5] [10] [15];

n üç boyutlu double türünde bir dizidir. Boyut uzunlukları sırasıyla 5,10,15’dir.
Burada x, iki boyutlu bir dizidir. Dizi 12 eleman tutabilir. Diziyi 3 satırlı ve her satırda
4 sütunlu bir tablo olarak düşünebilirsiniz.

float x [3][4];



Çok Boyutlu Bir Diziyi Başlatma

İki boyutlu ve üç boyutlu dizileri şu şekilde başlatabilirsiniz:

int c[2][3] = {{1, 3, 0}, {-1, 5, 9}};
        
int c[][3] = {{1, 3, 0}, {-1, 5, 9}};
               
int c[2][3] = {1, 3, 0, -1, 5, 9};
 
int test[2][3][4] = {
    {{3, 4, 2, 3}, {0, -3, 9, 11}, {23, 12, 23, 2}},
    {{13, 4, 56, 3}, {5, 9, 3, 5}, {3, 1, 4, 9}}};
 
Örnek: 

Değerleri saklamak ve yazdırmak için iki boyutlu dizi:

// C program to store temperature of two cities of a week and display it.
#include <stdio.h>
const int CITY = 2;
const int WEEK = 7;
int main()
{
  int temperature[CITY][WEEK];
 
  // Using nested loop to store values in a 2d array
  for (int i = 0; i < CITY; ++i)
  {
    for (int j = 0; j < WEEK; ++j)
    {
      printf("City %d, Day %d: ", i + 1, j + 1);
      scanf("%d", &temperature[i][j]);
    }
  }
  printf("\nDisplaying values: \n\n");
 
  // Using nested loop to display vlues of a 2d array
  for (int i = 0; i < CITY; ++i)
  {
    for (int j = 0; j < WEEK; ++j)
    {
      printf("City %d, Day %d = %d\n", i + 1, j + 1, temperature[i][j]);
    }
  }
  return 0;
}

Çıktı:

City 1, Day 1: 33
City 1, Day 2: 34
City 1, Day 3: 35
City 1, Day 4: 33
City 1, Day 5: 32
City 1, Day 6: 31
City 1, Day 7: 30
City 2, Day 1: 23
City 2, Day 2: 22
City 2, Day 3: 21
City 2, Day 4: 24
City 2, Day 5: 22
City 2, Day 6: 25
City 2, Day 7: 26

 
Displaying values:
 
City 1, Day 1 = 33
City 1, Day 2 = 34
City 1, Day 3 = 35
City 1, Day 4 = 33
City 1, Day 5 = 32
City 1, Day 6 = 31
City 1, Day 7 = 30
City 2, Day 1 = 23
City 2, Day 2 = 22
City 2, Day 3 = 21
City 2, Day 4 = 24
City 2, Day 5 = 22
City 2, Day 6 = 25
City 2, Day 7 = 26

 


Örnek: 

iki matrisin toplamı:


// C program to find the sum of two matrices of order 2*2
 
#include <stdio.h>
int main()
{
  float a[2][2], b[2][2], result[2][2];
 
  // Taking input using nested for loop
  printf("Enter elements of 1st matrix\n");
  for (int i = 0; i < 2; ++i)
    for (int j = 0; j < 2; ++j)
    {
      printf("Enter a%d%d: ", i + 1, j + 1);
      scanf("%f", &a[i][j]);
    }
 
  // Taking input using nested for loop
  printf("Enter elements of 2nd matrix\n");
  for (int i = 0; i < 2; ++i)
    for (int j = 0; j < 2; ++j)
    {
      printf("Enter b%d%d: ", i + 1, j + 1);
      scanf("%f", &b[i][j]);
    }
 
  // adding corresponding elements of two arrays
  for (int i = 0; i < 2; ++i)
    for (int j = 0; j < 2; ++j)
    {
      result[i][j] = a[i][j] + b[i][j];
    }
 
  // Displaying the sum
  printf("\nSum Of Matrix:");
 
  for (int i = 0; i < 2; ++i)
    for (int j = 0; j < 2; ++j)
    {
      printf("%.1f\t", result[i][j]);
 
      if (j == 1)
        printf("\n");
    }
  return 0;
}

Çıktı:

Enter elements of 1st matrix
Enter a11: 2;
Enter a12: 0.5;
Enter a21: -1.1;
Enter a22: 2;
Enter elements of 2nd matrix
Enter b11: 0.2;
Enter b12: 0;
Enter b21: 0.23;
Enter b22: 23;
 
Sum Of Matrix:
2.2     0.5
-0.9    25.0
 

Örnek:

Üç boyutlu dizi:


// C Program to store and print 12 values entered by the user
 
#include <stdio.h>
int main()
{
  int test[2][3][2];
 
  printf("Enter 12 values: \n");
 
  for (int i = 0; i < 2; ++i)
  {
    for (int j = 0; j < 3; ++j)
    {
      for (int k = 0; k < 2; ++k)
      {
        scanf("%d", &test[i][j][k]);
      }
    }
  }
 
  // Printing values with the proper index.
 
  printf("\nDisplaying values:\n");
  for (int i = 0; i < 2; ++i)
  {
    for (int j = 0; j < 3; ++j)
    {
      for (int k = 0; k < 2; ++k)
      {
        printf("test[%d][%d][%d] = %d\n", i, j, k, test[i][j][k]);
      }
    }
  }
 
  return 0;
}

Çıktı:

Enter 12 values:
1
2
3
4
5
6
7
8
9
10
11
12
 
Displaying Values:
test[0][0][0] = 1
test[0][0][1] = 2
test[0][1][0] = 3
test[0][1][1] = 4
test[0][2][0] = 5
test[0][2][1] = 6
test[1][0][0] = 7
test[1][0][1] = 8
test[1][1][0] = 9
test[1][1][1] = 10
test[1][2][0] = 11
test[1][2][1] = 12
 

C programlama ile ilgili olan diğer konulara aşağıdaki linkten ulaşabilirsiniz:

Kaynaklar:
https://www.programiz.com/c-programming/c-arrays
A'dan Z'ye C Kılavuzu 
https://www.w3schools.com/c/c_arrays.php
https://www.programiz.com/c-programming/c-multi-dimensional-arrays