Her Yönüyle C
Would you like to react to this message? Create an account in a few clicks or log in to continue.
Her Yönüyle C

Hepsi Burada
 
AnasayfaAnasayfa  PortalliPortalli  GaleriGaleri  AramaArama  Latest imagesLatest images  Kayıt OlKayıt Ol  Giriş yapGiriş yap  

 

 STRUCT YAPILARI

Aşağa gitmek 
YazarMesaj
Admin
Admin
Admin


Erkek
Mesaj Sayısı : 804
Yaş : 35
Location : KoCaElİ
Kayıt tarihi : 29/10/07

Character sheet
Field:
STRUCT YAPILARI Left_bar_bleue100/100STRUCT YAPILARI Empty_bar_bleue  (100/100)

STRUCT YAPILARI Empty
MesajKonu: STRUCT YAPILARI   STRUCT YAPILARI Icon_minitimePtsi Kas. 12, 2007 2:26 am

Giriş C, kullanıcının kendi veri tipini tanımlamasına müsaade eder. Bu kısımda böyle veritiplerinin nasıl oluşturulacağı anlatılacaktır.
enum Deyimi (Enumeration Constants) Bu tip, değişkenin alabileceği değerlerin belli (sabit) olduğu durumlarda programı daha okunabilir hale getirmek için kullanılır. Genel yazım biçimi:
enum tip_adı{değer_1, değer_2, ..., değer_n} değişken_adı;
tip_adı programcı tarafından verilen tip ismidir. değişken_adı ise program içinde kullanılacak olan değişkenin adıdır. Eğer kullanılmazsa program içinde daha sonra enum ile birlikte kullanılır. Örneğin:
enum bolumler{programcilik, donanim, muhasebe, motor};
tanımı ile derleyici programcilik için 0, donanim için 1, muhasebe için 2 ve motor için 3 değerini kabul ederek atamaları buna göre yapar. Değişken adı bildirilirse daha sonra enum kullanmaya gerek kalmaz. Örneğin:
enum renkler{kirmizi,mavi,sari} renk;
enum gunler{pazartesi,sali,carsamba,persembe,cuma,cumartesi,pazar};
gibi yapılan sabit tanımlamaları program içinde kullanılabilir:
enum bolumler bolum;
enum gunler gun;

...

bolum = muhasebe /* bolum = 2 anlamında */
gun = cuma; /* gun = 4 anlamında */
renk = kirmizi; /* renk = 0 anlamında */
Program 14.1 ve 14.2'de, enum anahtar kelimesinin basit kullanımları gösterilmiştir.

Program 14.1: enum kullanımı




[color=gray] 1:
/* 14prg01.c: Üç adet sabit renk için enum kullanımı */
2:
3: #include <stdio>
4:
5: enum renkler{kirmizi,sari,mavi};
6:
7: main()
8: {
9: enum renkler renk;
10:
11: renk = sari;
12: printf("renk = %d\n",renk);
[color:fa45=gray:fa45]13: }

DERLEME ve ÇALIŞTIRMA



Turbo C (MS DOS)
GCC (Linux)

C:\TC> tcc 14prg01.c
C:\TC> 14prg01
$ gcc 14prg01.c -o 14prg01
$ ./14prg01

ÇIKTI




renk = 1

Program 14.2: enum kullanımı




[color=gray] 1:
/* 14prg02.c: Klavyeden girilen bir sayının tek olup olmadığını sınar */
2:
3: #include <stdio>
4:
5: enum BOOLEAN{ FALSE, TRUE }; /* 0,1 */
6:
7: int tek(int);
8:
9: void main(void)
10: {
11: enum BOOLEAN sonuc;
12: int x;
13:
14: printf("Bir sayi girin: ");
15: scanf("%d",&x);
16:
17: sonuc = tek(x); /* tek mi? */
18:
19: if( sonuc==TRUE ) puts("Girilen sayi tek ");
20: else puts("Girilen sayi cift");
21: }
22:
23: int tek(int n){ /* n, tek mi? */
24: return (n % 2);
[color:fa45=gray:fa45]25: }

DERLEME ve ÇALIŞTIRMA



Turbo C (MS DOS)
GCC (Linux)

C:\TC> tcc 14prg02.c
C:\TC> 14prg02
$ gcc 14prg02.c -o 14prg02
$ ./14prg02

ÇIKTI




Bir sayi girin: 5
Girilen sayi tek

enum bloğu içinde tanımlanmış değikenlerin sahip sabit olacağı değerler Program 14.3 ve Program 14.4'de olduğu gibi programcı tarafından belirlenebilir.
Program 14.3: enum kullanımı




[color=gray] 1:
/* 14prg03.c: Beş sabit bölüm için enum kullanımı */
2:
3: enum bolumler{
4: programcilik=1, /* 1 */
5: donanim, /* 2 */
6: muhasebe, /* 3 */
7: motor, /* 4 */
8: buro /* 5 */
9: } bolum;
10:
11: void main(void)
12: {
13: bolum = donanim;
14:
15: printf("bolum : %d\n",bolum);
16:
17: bolum +=2; /* bolum=motor */
18:
19: printf("Yeni bolum : %d\n",bolum);
[color:fa45=gray:fa45]20: }

DERLEME ve ÇALIŞTIRMA



Turbo C (MS DOS)
GCC (Linux)

C:\TC> tcc 14prg03.c
C:\TC> 14prg03
$ gcc 14prg03.c -o 14prg03
$ ./14prg03

ÇIKTI




bolum : 2
Yeni bolum : 4

Program 14.4: enum kullanımı




[color=gray] 1:
/* 14prg04.c: enum bloğu içinde farklı değerler */
2:
3: #include <stdio>
4: #include <dos>
5:
6: enum PC
7: {
8: DATA = 0x0378, /* 378h */
9: STATUS, /* 379h */
10: CONTROL, /* 37ah */
11: COM1 = 0x3FD, /* 3fDh */
12: COM2 = 0x2F8 /* 2f8h */
13: } Port;
14:
15: void main(void)
16: {
17: int veri;
18:
19: Port = COM1; /* portu seç */
20: veri = inportb(Port); /* COM1 portundaki veriyi al */
21:
22: Port = DATA; /* portu değiştir */
23: outportb(Port,veri); /* DATA portuna yaz */
24:
25: printf("%xh portuna %d yazildi.",Port,veri);
[color:fa45=gray:fa45]26: }

DERLEME ve ÇALIŞTIRMA



Turbo C (MS DOS)
GCC (Linux)

C:\TC> tcc 14prg04.c
C:\TC> 14prg04
$ gcc 14prg04.c -o 14prg04
$ ./14prg04

ÇIKTI




378h portuna 96 yazildi.
Sayfa başına dön Aşağa gitmek
https://cprogramlama.yetkin-forum.com
Admin
Admin
Admin


Erkek
Mesaj Sayısı : 804
Yaş : 35
Location : KoCaElİ
Kayıt tarihi : 29/10/07

Character sheet
Field:
STRUCT YAPILARI Left_bar_bleue100/100STRUCT YAPILARI Empty_bar_bleue  (100/100)

STRUCT YAPILARI Empty
MesajKonu: Geri: STRUCT YAPILARI   STRUCT YAPILARI Icon_minitimePtsi Kas. 12, 2007 2:27 am

Yapı, struct Deyimi (Structures) Aralarında mantıksal bir ilişki bulunan farklı türden bilgiler "yapılar (structures)" içerisinde mantıksal bir bütün olarak ifade edilebilir. Yapılar diziler gibi bellekte sürekli kalır. Programcı yapı bildirimini tanıttktan sonra, o yapı türünden bir değişken tanımlayabilir. Bu sayede kendi tipinizi üretebilirsiniz. Genel yapı bildirimi:
struct yapı_adı{
tip yapı_değişken_ismi;
tip yapı_değişken_ismi;
...
};






NOT
enum ile sabit bildirimi yapılırken struct ile değişken bildirimi yapılır.
Bir öğrenciye ait bilgileri bir çatı altında toplamak için:
struct kayit{
char ad[10];
long no;
short sinif;
};
Bu tipte bir değişken tanımlama:
struct kayit ogr1,ogr2;
şeklinde olmalıdır. ogr1 değişkeni ile tanımlanan 1. öğrencinin numarasına bir değer atama işlemi:
ogr1.no = 2012597;
şeklinde yapılır. Bu deyimin kullanımı Program 14.5,6,ve 7'de gösterilmiştir. Inceleyiniz.
Program 14.5: struct deyiminin kullanımı




[color=gray] 1:
/* 14prg05.c:
2: Bir öğrenciye ait bilgilerin struct deyimi ile bir çatı altında toplanması */

3:
4: #include <stdio>
5:
6: struct kayit{ /* kayit yapısı */
7: char ad[10];
8: long no;
9: int sinif;
10: };
11:
12: void main(void)
13: {
14: struct kayit ogr; /* ogr değişkeni kayit tipinde */
15:
16: printf("Ogrenci Nosu : "); scanf("%ld",&ogr.no);
17: printf("Ogrenci Adi : "); scanf("%s" , ogr.ad);
18: printf("Ogrenci Sinifi: "); scanf("%d" ,&ogr.sinif);
19:
20: printf("\n*** Girilen bilgiler ***");
21: printf("\nNo : %ld",ogr.no);
22: printf("\nAdi : %s ",ogr.ad);
23: printf("\nSinifi: %d ",ogr.sinif);
[color:f6b3=gray:f6b3]24: }

DERLEME ve ÇALIŞTIRMA



Turbo C (MS DOS)
GCC (Linux)

C:\TC> tcc 14prg05.c
C:\TC> 14prg05
$ gcc 14prg05.c -o 14prg05
$ ./14prg05

ÇIKTI




Ogrenci Nosu : 948589
Ogrenci Adi : Ahmet
Ogrenci Sinifi: 2

*** Girilen bilgiler ***
No : 948589
Adi : Ahmet
Sinifi: 2

Program 14.6: struct deyiminin kullanımı




[color=gray] 1:
/* 14prg06.c:
2: Yapıların bir fonksiyona parametere olarak aktarılabilmesi */

3:
4: #include <stdio>
5:
6: struct TARIH{
7: int gun,ay,yil;
8: };
9:
10: void goster(struct TARIH x){
11: printf("Tarih: %02d-%02d-%4d\n",x.gun,x.ay,x.yil);
12: }
13:
14: void main(void)
15: {
16: struct TARIH n; /* n değişkeni TARIH tipinde */
17:
18: n.gun = 1;
19: n.ay = 8;
20: n.yil = 2003;
21:
22: goster(n);
[color:f6b3=gray:f6b3]23: }

DERLEME ve ÇALIŞTIRMA



Turbo C (MS DOS)
GCC (Linux)

C:\TC> tcc 14prg06.c
C:\TC> 14prg06
$ gcc 14prg06.c -o 14prg06
$ ./14prg06

ÇIKTI




Tarih: 01-08-2003

Program 14.7: struct deyiminin kullanımı




[color=gray] 1:
/* 14prg07.c:
[color=gray] 2:
İlk hızı ve atis acisi verilen bir topun eğik atış
[color:f6b3=gray:f6b3] 3: hareketi simulasyonu. */
4:
5: #include <stdio>
6: #include <math>
7:
8: #define PI 3.141593 /* pi sayısı */
9: #define g 9.81 /* yerçekim ivmesi */
10:
11: struct NOKTA{
12: float x,y;
13: } top;
14:
15: void main(void)
16: {
17: float v0,aci,t;
18:
19: printf("Ilk hiz (m/s): "); scanf("%f",&v0);
20: printf("Aci (derece): "); scanf("%f",&aci);
21:
22: t = 0.0;
23: aci *= PI/180.0; /* radyana çevir */
24:
25: do{
26: top.x = v0*cos(aci)*t; /* hareket denklemleri */
27: top.y = v0*sin(aci)*t-0.5*g*t*t;
28:
29: printf("%5.1f %7.3f %7.3f\n",t,top.x,top.y);
30:
31: t += 0.1; /* zamanı 0.1 saniye arttır */
32:
33: }while(top.y>=0.0); /* top havada kaldığı sürece! */
34:
[color:f6b3=gray:f6b3]35: }

DERLEME ve ÇALIŞTIRMA



Turbo C (MS DOS)
GCC (Linux)

C:\TC> tcc 14prg07.c
C:\TC> 14prg07
$ gcc 14prg07.c -o 14prg07
$ ./14prg07

ÇIKTI




Ilk hiz (m/s): 8
Aci (derece): 60
0.0 0.000 0.000
0.1 0.400 0.644
0.2 0.800 1.189
0.3 1.200 1.637
0.4 1.600 1.986
0.5 2.000 2.238
0.6 2.400 2.391
0.7 2.800 2.446
0.8 3.200 2.403
0.9 3.600 2.262
1.0 4.000 2.023
1.1 4.400 1.686
1.2 4.800 1.251
1.3 5.200 0.717
1.4 5.600 0.086
1.5 6.000 -0.644
typedef Deyimi struct ile oluşturulan yapıda typedef deyimi kullanılırsa, bu yapıdan değişken tanımlamak için tekrar struct deyiminin kullanılmasına gerek kalmaz.
typedef struct kayit{
char ad[10];
long no;
short sinif;
} ogr1,ogr2;

Program 14.6 küçük bir değişiklike Program 14.8'de yeniden yazılmıştır. Inceleyiniz.
Program 14.8: typedef - struct deyiminin kullanımı




[color=gray] 1:
/* 14prg08.c:
[color=gray] 2:
Yapıların bir fonksiyona parametere olarak aktarılabilmesi
[color:f6b3=gray:f6b3] 3: typedef deyimi kullanıldığında struct deyimine gerek yoktur */
4:
5: #include <stdio>
6:
7: typedef struct{
8: int gun,ay,yil;
9: }TARIH;
10:
11: void goster(TARIH x){
12: printf("Tarih: %02d-%02d-%4d\n",x.gun,x.ay,x.yil);
13: }
14:
15: void main(void)
16: {
17: TARIH n;
18:
19: n.gun = 1;
20: n.ay = 8;
21: n.yil = 2003;
22:
23: goster(n);
[color:f6b3=gray:f6b3]24: }

DERLEME ve ÇALIŞTIRMA



Turbo C (MS DOS)
GCC (Linux)

C:\TC> tcc 14prg08.c
C:\TC> 14prg08
$ gcc 14prg08.c -o 14prg08
$ ./14prg08

ÇIKTI




Tarih: 01-08-2003
typedef başka kullanımı da vardır. C dilinde program kodları bu deyimle tamamen türkçeleştirilebilir. Örneğin bu deyim:
typedef int tamsayi;
şeklinde kullanılırsa programda daha sonra int tipinde bir değişken tanımlarken şu biçimde kullanılmasına izin verilir.
tamsayi x,y; /* int x,y anlaminda */
Birlik, union Deyimi Birlikler de yapılar gibi sürekli belleğe yerleşen nesnelerdir. Birlikler yapılara göre seyrek kullanılır. Bir programda veya fonksiyonda değişkenlerin aynı bellek alanını paylaşması için ortaklık bildirimi union deyimi ile yapılır. Bu da belleğin daha verimli kullanılmasına imkan verir. Bu tipte bildirim yapılırken struct yerine union yazılır. Genel yazım biçimi:
union birlik_adı{
tip birlik_değişken_ismi;
tip birlik_değişken_ismi;
...
};
union paylas{
float f;
int i;
char kr;
};
Yukarıdaki bildirim yapıldığında, değişkenler için bellekte bir yer ayrılmaz. Değişken bildirimi:
union paylas bir,iki;
şeklinde yapılır. Üyelere erişmek aşağıdaki gibi olur: bir.kr= 'A';
iki.f = 3.14;
bir.i = 2000;

Program 14.9: union deyiminin kullanımı




[color=gray] 1:
/* 14prg09.c: union x ve y nin aynı bellek alanını işgal ettiğinin kanıtı */
2:
3: #include <stdio>
4:
5: union paylas{
6: int x;
7: int y;
8: }z;
9:
10: void main(void)
11: {
12: int *X,*Y;
13:
14: z.x = 10;
15: X = &z.x;
16: printf("\nTamsayi(x) = %d - bellek adresi %X",z.x,X);
17:
18: z.y = 20;
19: Y = &z.y;
20: printf("\nTamsayi(y) = %d - bellek adresi %X",z.y,Y);
[color:f6b3=gray:f6b3]21: }

DERLEME ve ÇALIŞTIRMA



Turbo C (MS DOS)
GCC (Linux)

C:\TC> tcc 14prg09.c
C:\TC> 14prg09
$ gcc 14prg09.c -o 14prg09
$ ./14prg09

ÇIKTI




Tamsayi(x) = 10 - bellek adresi DF23
Tamsayi(y) = 20 - bellek adresi DF23
Sayfa başına dön Aşağa gitmek
https://cprogramlama.yetkin-forum.com
 
STRUCT YAPILARI
Sayfa başına dön 
1 sayfadaki 1 sayfası

Bu forumun müsaadesi var:Bu forumdaki mesajlara cevap veremezsiniz
Her Yönüyle C :: C Programlama :: C Konu Anlatımları-
Buraya geçin: