enum struct union - typedef - nesibe yalÇin2 enum – typedef – struct – union ―var olan veri...

Post on 05-Mar-2021

47 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

13. Hafta – Enum – Struct –Union -

Typedef

Dr. Öğr. Üyesi Nesibe YALÇIN

https://nesibeyalcin.wordpress.com/bsm104/

BARTIN ÜNİVERSİTESİ

MÜHENDİSLİK, MİMARLIK VE TASARIM FAKÜLTESİ

BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ

2

Enum – Typedef – Struct – Union

― Var olan veri tiplerini kullanarak yeni veri tipleri tanımlayıp kullanabiliriz. ― Oluşturduğumuz veri tiplerine bizim için daha anlamlı yeni isimler verebiliriz. ― Tanımladığımız veri tiplerinin alacağı değerleri kısıtlayabiliriz. ― Aynı ya da farklı tipteki birçok değişken bir araya getirerek bunların topluluğuna bir değişken tipi oluşturulmuş olur. ― Birden fazla değişkenin aynı bellek alanını paylaşmalarını sağlayabiliriz. ― Programı daha okunabilir hale getirebiliriz.

3

Enum ― enum; numaralandırılmış veri tipidir (Enumerated Data Type).

― Kullanıcı tanımlı veri tipidir.

― Değişkenin alabileceği değerlerin belli (sabit) olduğu durumlarda kullanılabilir.

enum TipAdı {değer1,değer2,...,değerN} DeğişkenAdı;

ya da

enum TipAdı {değer1,değer2,...,değerN}; // veri tipi tanımlandı

enum TipAdı DeğişkenAdı; //yeni veri tipinde değişken oluşturuldu

4

Enum

― enum mevsimler {ilkbahar, yaz, sonbahar, kis};

― enum mevsimler x_m = yaz;

Kullanıcı tarafından tanımlanmış veri tipi

"mevsimler" için tahsis edilmiş değerler

“mevsimler” veri tipinde değişken

5

Enum

enum yalova {merkez, altinova, armutlu, cinarcik, ciftlikkoy, termal};

― Enum elemanlarının sayısal değerleri 0‘ dan başlayarak otomatik olarak verilir.

― merkez=0, altinova=1, armutlu=2, cinarcik=3, ciftlikkoy=4, termal=5

― Genelde programdaki sayısal karşılaştırmaların programcılar açısından daha kolay okunabilir ve anlaşılabilir olması için kullanılır.

6

Enum

enum yalova {merkez, altinova, armutlu, cinarcik, ciftlikkoy, termal}; ― merkez=0, altinova=1, armutlu=2, cinarcik=3, ciftlikkoy=4, termal=5 ― #define merkez 0

#define altinova 1 #define armutlu 2 #define cinarcik 3 #define ciftlikkoy 4 #define termal 5

şeklinde de tanımlanabilirdi !!!

7

Enum

― Enum içerisinde değer atanabilir. Atanan ilk değerden itibaren diğerlerine atama yapılmasa bile diğerlerine otomatik ardışık değerler atanacaktır.

enum araba {Audi=9, BMW, Cadillac, Ford};

― BMW=10, Cadillac=11, Ford=12 olur. enum button {enter=1, tab=4, caps_lock=10, backspace=6};

8

Enum – Örnek

#include <stdio.h> #include <conio.h> int main() { enum fakulte {bm,cm,eem,im,mm,mmm}; enum fakulte muhendislik=bm; switch( muhendislik){

case bm: printf( "Bilgisayar Muhendisligi\n" ); break; case cm: printf( "Cevre Muhendisligi\n" ); break; case eem: printf( "Elektrik-Elektronik Muhendisligi\n" ); break; case im: printf( "Insaat Muhendisligi\n" ); break; case mm: printf( "Makine Muhendisligi\n" ); break; case mmm: printf( "Malzeme ve Metalurji Muhendisligi\n" ); break; default: printf("Fakultede boyle bir bolum yok!"); }

getch(); }

enum tip tanımlama

Değişken tanımlama

9

Enum – Örnek

#include <stdio.h> #include <conio.h> int main() { enum uzanti {edu=1,com,org,mil,gov,net,ac}; enum uzanti google=com; switch(google){

case 1: puts( "Egitim kurumlari"); break; case 2: puts( "Ticari kuruluslar"); break; case 3: puts( "Ticari olmayan kuruluslar"); break; case 4: puts( "Askeri kurumlar"); break; case 5: puts( "Hukumet kurumlari" ); break; case 6: puts( "Servis sunuculari" ); break; case 7: puts( "Akademik kuruluslar" ); break; default: puts("Yeni kullanima acilmis alan adi olabilir");

} getch(); }

enum deger atama

Değişken tanımlama

10

Enum – Örnek

#include <stdio.h> #include <conio.h> int main() {

enum yaz {haziran=6,temmuz,agustos}; for(int i=haziran;i<=agustos;i++)

printf("%d ",i); printf("\n %d byte", sizeof(yaz)); enum yaz a=temmuz; // enum yaz a=7 olmaz printf("%d",a); getch();

}

11

Typedef ― Typedef deyimini kullanarak mevcut veri tiplerine yeni isimler verebiliriz. ― typedef int tamsayi; tamsayi a, b; ― Typedef deyimi kullanılarak oluşturulmuş herhangi bir veri tipinde değişken tanımlamak için tekrar veri tipinin yazılmasına gerek duyulmaz. ― enum yonler{ kuzey, guney, dogu, bati}; enum yonler yon; ― typedef enum yonler{ kuzey, guney, dogu, bati}; yonler yon;

12

Struct

― char, int, float gibi standart veri tipleri kullanarak kendi veri tipimizi üretmemizi sağlar.

― enum ile sabit bildirimi yapılırken struct ile değişken bildirimi yapılır.

struct TipAdı{ tip deg_ismi; tip deg_ismi; ... };

― Tip tanımı yapıldığında bellekte yer ayrılmaz !!!

13

Struct

struct karmasik_sayi {

float gercek; int sanal;

};

struct kitap { char ad[50]; char yazar[50]; char tur[10]; int id; };

struct adres {

int cadde; int sokak; int no; char *ilce; char *sehir;

};

14

Struct

struct ogrenci{ int no, sinif; char sube; char ad[20],soyad[30]; };

― Değişken tanımlandığı zaman bellekte yer ayrılır… struct ogrenci ogr1, ogr2; ― Değer atama;

ogr1.no=136; strcpy(ogr.ad,"melisa"); ogr1.sinif=1; strcpy(ogr.soyad,"etik"); ogr1.sube=‘A’;

15

Struct

― struct tarih {

int gun; int ay; int yil; };

struct tarih dogum_tarihi;

― typedef struct tarih { int gun; int ay; int yil; };

tarih dogum_tarihi;

16

Struct

― struct tarih {

int gun; int ay; int yil; } dogum_tarihi={4,3,1996};

― dogum_tarihi.gun=4;

dogum_tarihi.ay=3; dogum_tarihi.yil=1996;

17

Struct – Örnek

#include <stdio.h> #include <conio.h> #include <math.h> int main() { struct nokta {

float x; float y; };

struct nokta A,B; float uzaklik; puts("A noktasinin koordinatlarini giriniz:"); scanf("%f %f",&A.x,&A.y); puts("B noktasinin koordinatlarini giriniz:"); scanf("%f %f",&B.x,&B.y); uzaklik=sqrt(((A.x-B.x)*(A.x-B.x))+((A.y-B.y)*(A.y-B.y))); printf("Noktalar arasi uzaklik: %.2f",uzaklik); getch(); }

18

Struct – Örnek

#include <stdio.h> #include <conio.h> int main() { struct tarih {

int gun; int ay; int yil; };

struct tarih dt,mt; puts("Dogum tarihinizi (gun ay yil) giriniz:"); scanf("%d %d %d",&dt.gun,&dt.ay,&dt.yil); puts("Mezuniyet tarihinizi (gun ay yil) giriniz:"); scanf("%d %d %d",&mt.gun,&mt.ay,&mt.yil); FILE *yaz=fopen("tarihler.txt","w"); fprintf(yaz,"%d %d %d\n",dt.gun,dt.ay,dt.yil); fprintf(yaz,"%d %d %d\n",mt.gun,mt.ay,mt.yil); getch(); }

19

Struct – Örnek

#include <stdio.h> #include <conio.h> #include <string.h> int main() { typedef struct isci{

char adi_soyadi[50]; int yas; double maas; };

isci x1,x2; strcpy(x1.adi_soyadi, "Ali Akin"); x1.yas=25; x1.maas=2000; strcpy(x2.adi_soyadi, "Sedef Gunay"); x2.yas=36; x2.maas=3200; printf("%s\t yas: %d\t maas:%.2f\n", x1.adi_soyadi,x1.yas,x1.maas); printf("%s\t yas: %d\t maas:%.2f\n", x2.adi_soyadi,x2.yas,x2.maas); getch(); }

20

Union

― Struct yapısına benzemektedir. Tipte bildirim yapılırken struct yerine union yazılır.

union TipAdı{

tip1 deg_ismi1; tip2 deg_ismi2; ... };

― Union bildirimini kullanarak birden fazla değişkenin (farklı tipte olsalar da) aynı bellek alanını paylaşmalarını sağlayabiliriz.

21

Union

union paylas{

double a; int i; char kr;

};

― Union yapısı, belleğin daha verimli kullanılmasına imkan verir.

― Değişkenler aynı bellek alanını paylaştıkları için herhangi birine yapılacak atama işlemi diğer değişkenleri de etkiler.

Byte Byte Byte Byte Byte Byte Byte Byte

a

i

kr

22

Union

― Struct olarak tanımlanan veri tipinin boyutu içerisinde yer alan değişkenlerin boyutlarının toplamı kadardır. Ancak union olarak tanımlanan veri tipinin boyutu içerisinde yer alan değişkenlerden boyutu en yüksek olanın boyutu kadardır.

struct ogrenci{

int no, sinif; char sube; char ad[20], soyad[30];

}; 4+4+1+20+30=59 byte 4, 4, 1, 20, 30 30 byte

union ogrenci{ int no, sinif; char sube; char ad[20], soyad[30];

};

23

Union – Örnek

#include <stdio.h> #include <conio.h> void main() { union ortak{ int x; int y; }a; a.x = 12; printf("x=%d' nin adresi: %p \n",a.x,&a.x); a.y = 7; printf("y=%d' nin adresi: %p \n",a.y,&a.y); printf("boyutu:%d byte",sizeof(a)); getch(); }

24

Uygulamalar

― En ve boy bilgilerini tutan bir oda union yapısı oluşturunuz.

― Marka, model, tekerlek sayısı, motor hacmi gibi bilgileri tutan bir araba yapısı oluşturunuz.

― Kullanıcıdan alınan hasta bilgilerini (ad, soyad, yas, boy, kilo, cinsiyet) «hasta_verileri.txt» dosyasına yazan programı yazınız. NOT: cinsiyet enum tipinde olmalıdır.

top related