YAPILAR (STRUCT)

Yap� Tan�m�    Veri Tiplerine Yeni �sim Verme

Farkl� tipte birden fazla verinin olu�turdu�u b�t�nd�r. Veri tipi olarak daha �nce diziyi tan�mlam��t�k. Dizide birbirinin ayn� tipi olan veriler pe� pe�e saklan�yordu. Yap�lar da ayn� dizi gibi birbirleriyle ilgili olan verileri i�erir. Fakat diziden fark�, tek bir yap� eleman� birbirinden farkl� tipte birden fazla veriyi i�erir. Bu sayede bilgiler daha d�zenli �ekilde g�sterilir. Yap� yeni bir tip olmay�p var olan standart tiplerden olu�ur.

1. Yap� Tan�m�

�rne�in bir ��rencinin numaras�, ad� ve s�navdan ald��� notu i�eren bir yap� tan�mlamas� a�a��daki gibidir.

struct ogryapi {

char numarasi[10];

char adi[20];

int notu ;

}

struct ogryapi ogr;

Art�k ogryapi isimli bir veri tipi vard�r ve �� �yeden (alandan) olu�maktad�r

( member =�ye : kay�d� olu�turan farkl� veri tiplerinin her biri).

Tan�mlama genel olarak

struct Yap�_Ad� {

Alan1;

Alan2;

. . .

Alan_n;

};

Bu tipte bir de�i�ken ise

struct Yap�_Ad� De�i_Ad�;

�eklinde yap�l�r.

Tan�mlanan tipte bir de�i�ken tan�mland���nda, de�i�ken i�in bellekte t�m alanlar� i�erecek �ekilde yer ayr�l�r. �lgili de�i�kendeki herhangi bir alan �zerinde i�lem yapmak i�in aralar�nda nokta karakteri olmak ko�uluyla s�ras�yla de�i�kenin ad� ve ilgili alan�n ad� verilir. Yukar�daki ��renci �rne�inde ��rencinin numaras�na ogr.numarasi �eklinde eri�ilir.

�rnek: Karma��k say�larda toplama i�lemi ger�ekle�tirme.

main()

{

struct complex {

float real, imag;

};

struct complex z1, z2, z3;

clrscr();

printf("1. say�n�n reel ve imajiner k�s�mlar� gir ");

scanf("%f %f", &z1.real, &z1.imag);

printf("2. say�n�n reel ve imajiner k�s�mlar� gir ");

scanf("%f %f", &z2.real, &z2.imag);

z3.real = z1.real + z2.real;

z3.imag = z1.imag + z2.imag;

printf("%2.0f + %2.0fj\n",z3.real, z3.imag);

}

�rnek: Yap� i�erisinde ba�ka bir yap� kullan�m�.

struct tarih {

int gun;

int ay;

int yil;

};

struct kisiler {

char adi[21];

struct tarih dogum;

};

main()

{

struct kisiler a;

strcpy(a.adi,"veli");

a.dogum.gun = 15;

a.dogum.ay = 8;

a.dogum.yil = 1905;

printf("%s %d\n",a.adi,a.dogum.yil);

getch();

}

Di�er bir tan�mlama �ekli

struct {

Alan1;

Alan2;

. . .

Alan_n;

} de�i�kenler;

struct {

float real, imag;

}z1, z2, z3;

�rnek: ��rencinin numara ve s�nav notunu okuyan ve s�nav ortalamas� ve ortalamay� ge�en ��rencileri listeleyen program

#define OGRSAY 3

main(){

struct ogrenci{

char no[10];

int notu;

};

struct ogrenci ogr[OGRSAY];

int i, j;

float t, ort;

clrscr();

for (i=0; i<OGRSAY; i++) {

printf("%d. ��rencinin numaras� ve notu : ", i+1);

scanf("%s%d",ogr[i].no, &ogr[i].notu);

}

t = 0;

for (i=0; i<OGRSAY; i++)

t = t + ogr[i].notu;

ort = t / OGRSAY;

printf("--------------------------------------------\n");

printf("Ortalama = %f\n", ort);

printf("--------------------------------------------\n");

printf("Ortalamay� ge�en ��renciler\n");

for (i=0; i<OGRSAY; i++)

if (ogr[i].notu > ort)

printf("%s\t\t%d\n", ogr[i].no, ogr[i].notu);

getch();

}

2. Veri Tiplerine Yeni �sim Verme

C dilinde var olan veri tiplerini yeni bir isim vermek m�mk�nd�r. Tan�mlama bi�imi:

typedef tan�ml�_tip yeni_ismi;

typedef int tamsayi;

Art�k tamsay� isminde bir veri tipi vard�r. De�i�ken tan�mlamada kullan�labilir.

tamsayi i, j;

typedef unsigned char byte;

byte x;

Yap�lar ile kullan�m�

struct complexyapi {

float re, im;

};

tydef struct complexyapi complex;

complex z1, z2;

veya

typedef struct { float re, im } complex;

complex z;