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.
�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;