Yapılar (Structures)

sharp tarafından 16 Eylül 2010 tarihinde yazılmıştır.
Yorum Yok

Yapılar (Structures)

Yapılar sayesinde sayıikarakter vb. veri türlerini gruplayarak kolayca kullanmamızı sağlar.
Özellikle nesneye dayalı C# Java gibi dillerde çok önemli yere sahiptir.Biz C yimize bakalım :)

Hemen ufak bir örnekle kullanımı görelim.

#include<stdio.h>
int main()
{
struct//Struct tanımlamak için başlangıcımız
{
int yil;//kullanıclacak değişkenler
int ay;
int gun;
}dogum_gunu;//Structımızın ismi
/*Değişkenleri çağırmak için struct_ismi.değişken ismi şeklinde kullanırız.Programın geriside bildiğiniz şeyler*/
printf( “Doğum gününüzü ” );
printf( “GG-AA-YYYY olarak giriniz>( – aralara tire koyarak) “);
scanf (“%d-%d-%d”,&dogum_gunu.gun,&dogum_gunu.ay,&dogum_gunu.yil);
printf( “Doğum gününüz: ” );
printf( “%d/%d/%d\n”,dogum_gunu.gun,dogum_gunu.ay,dogum_gunu.yil );

return 0;
}

Aslında bu kodları normal bildiğimiz yollarla da yapabilirdik.Ancak gruplandırma herzaman işimizi kolaylıaştırır.İleride karmaşık kodlar yazmaya başladığımızda structların önemini göreceksiniz.Mesela
3 kişinin doğuum günü bilgilerini almak isteseydik 9 değişken kullanırdık ancak 3 tane struct tanımlayarak
sadece 3 değişken kullanıp daha kolayca kullanabiliriz.

İç İçe Yapılar

Gruplandırma içinde başka bir gruplandırmada yapmak isteyebilirsiniz.En genel örnek olan kişisel bilgiler örneğini yapalım.İsim boy ve doğum tarihini alalım doğum tarihini de iç bir struct olarak kullanalım.Örneğimize geçelim :)

#include<stdio.h>
int main ()
{
struct//normal structımızı tanımladık
{
char isim[30];
int boy;
struct//ilk structımızın süslü parantezleri(kapsama alanıda diyebiliriz ) içeriinde diğerinide tanımladık
{
int yil;
int ay;
int gun;
}dogum_bilgileri;
}kisi;
//İçiçe olan structları kullanırken . kullanarak en genel structtan kullanmak istediğimize göre kullanırız :)
printf(“Adınız : “);
scanf(“%s”,kisi.isim);//Bu satır yüzünden 20 dk uğraştım :) Katarlara değer girilirken & kullanılmaz :)
printf (“Boyunuz : “);
scanf(“%d”,&kisi.boy);
printf(“Doğum tarihinizi GG-AA-YYYY şeklinde aralara tire koyarak giriniz : “);
scanf (“%d-%d-%d”,&kisi.dogum_bilgileri.gun,&kisi.dogum_bilgileri.ay,&kisi.dogum_bilgileri.yil);
printf (“Girilen Bilgiler : \\n”);
printf (“Ad : %s \n”,kisi.isim);
printf (“Boy : %d \n”,kisi.boy);
printf (“Doğum Günü : %d/%d/%d \\n”,kisi.dogum_bilgileri.gun,kisi.dogum_bilgileri.ay,kisi.dogum_bilgileri.yil);

return 0 ;

}

Yapılara İlk Değer Atama

#include<stdio.h>
int main()
{
struct
{
char isim[10];
int boy;
} kisi = { “Ali”, 150 };//Sıralama ile değer girdik.İsim = Ali oldu boy = 150 oldu

return 0;
}

Örneğin bir sınıf kayıt programını yapıları kullanarak yapalım ;

#include<stdio.h>

struct OgrenciYapi//Global olarak tanımlamamız sayesinde istediğimiz blogta rahatça kullanabiliyoruz.
{
char isim[25];
char soyisim[25];
int yas;
int numara;
};
int main()
{
int i = 0,j;
int secim;
struct OgrenciYapi ogrenci[40];
printf(“*-*-*-Sinif Kayit Programi-*-*-* \n\n\n”);
printf(“Ogrenci eklemek [1]\n”);
printf(“Eklenen ogrencileri gormek icin [2]\n”);
printf(“Cikis icin [3] giriniz:\n”);
scanf(“%d”,&secim);

while (secim>3||secim<1)//Başka sayıo girebilecek kişiler için ufak bir while döngüsü yazıyoruz
{
printf (“Hatali Giris,Düzgün değer gir lan \n”);
scanf(“%d”,&secim);
}
while(1)
{
switch(secim)//switch ile sıra ile işlemleri yapıyoruz.
{
case 1:
printf(“\n%d. kaydedilen ogrencinin adini giriniz:”,i+1);
scanf(“%s”,ogrenci.isim);
printf(“\n%d. kaydedilen ogrencinin soyadini giriniz:”,i+1);
scanf(“%s”,ogrenci.soyisim);
printf(“\n%d. kaydedilen ogrencinin yasini giriniz:”,i+1);
scanf(“%d”, &ogrenci.yas);
printf(“\n%d. kaydedilen ogrencinin numarasini giriniz:”,i+1);
scanf(“%d”, &ogrenci.numara);
i++;
printf(“\n\n[1]ekleme,[2] listeleme,[3]cikis? :”);
scanf(“%d”,&secim);
while(secim>3||secim<1)
{
printf(“Hatali giris! [1],[2]veya [3] giriniz:\n”);
scanf(“%d”,&secim);
}
break;
case 2:
for (j=0;j<i;j++)
{
printf(“\n%d.Ogrenci”,j+1);
printf(“\n Ad, Soyad : %s %s”, ogrenci[j].isim,ogrenci[j].soyisim);
printf(“\n Yas : %d\\n No : %d\n”,ogrenci[j].yas ,ogrenci[j].numara);
}
printf(“\n\n[1]ekleme,[2] listeleme,[3]cikis? :”);
scanf(“%d”,&secim);
while(secim>3||secim<1)
{
printf(“Hatali giris! [1],[2]veya [3] giriniz:\n”);
scanf(“%d”,&secim);
}
break;
case 3:
return 0;

}
}
}

  • FriendFeed'de Paylaş
  • Facebook'ta Paylaş
  • Twitter'da Paylaş
  • Yorum yapın

    Tema: Popho Wordpress Teması (Anarşik Çocuk) | Altyapı-Kanalizasyon: Wordpress