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

24
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Ü

Upload: others

Post on 05-Mar-2021

47 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Enum Struct Union - Typedef - Nesibe YALÇIN2 Enum – Typedef – Struct – Union ―Var olan veri tiplerini kullanarak yeni veri tipleri tanımlayıp kullanabiliriz. ―Oluşturduğumuz

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Ü

Page 2: Enum Struct Union - Typedef - Nesibe YALÇIN2 Enum – Typedef – Struct – Union ―Var olan veri tiplerini kullanarak yeni veri tipleri tanımlayıp kullanabiliriz. ―Oluşturduğumuz

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.

Page 3: Enum Struct Union - Typedef - Nesibe YALÇIN2 Enum – Typedef – Struct – Union ―Var olan veri tiplerini kullanarak yeni veri tipleri tanımlayıp kullanabiliriz. ―Oluşturduğumuz

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

Page 4: Enum Struct Union - Typedef - Nesibe YALÇIN2 Enum – Typedef – Struct – Union ―Var olan veri tiplerini kullanarak yeni veri tipleri tanımlayıp kullanabiliriz. ―Oluşturduğumuz

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

Page 5: Enum Struct Union - Typedef - Nesibe YALÇIN2 Enum – Typedef – Struct – Union ―Var olan veri tiplerini kullanarak yeni veri tipleri tanımlayıp kullanabiliriz. ―Oluşturduğumuz

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.

Page 6: Enum Struct Union - Typedef - Nesibe YALÇIN2 Enum – Typedef – Struct – Union ―Var olan veri tiplerini kullanarak yeni veri tipleri tanımlayıp kullanabiliriz. ―Oluşturduğumuz

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 !!!

Page 7: Enum Struct Union - Typedef - Nesibe YALÇIN2 Enum – Typedef – Struct – Union ―Var olan veri tiplerini kullanarak yeni veri tipleri tanımlayıp kullanabiliriz. ―Oluşturduğumuz

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};

Page 8: Enum Struct Union - Typedef - Nesibe YALÇIN2 Enum – Typedef – Struct – Union ―Var olan veri tiplerini kullanarak yeni veri tipleri tanımlayıp kullanabiliriz. ―Oluşturduğumuz

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

Page 9: Enum Struct Union - Typedef - Nesibe YALÇIN2 Enum – Typedef – Struct – Union ―Var olan veri tiplerini kullanarak yeni veri tipleri tanımlayıp kullanabiliriz. ―Oluşturduğumuz

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

Page 10: Enum Struct Union - Typedef - Nesibe YALÇIN2 Enum – Typedef – Struct – Union ―Var olan veri tiplerini kullanarak yeni veri tipleri tanımlayıp kullanabiliriz. ―Oluşturduğumuz

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();

}

Page 11: Enum Struct Union - Typedef - Nesibe YALÇIN2 Enum – Typedef – Struct – Union ―Var olan veri tiplerini kullanarak yeni veri tipleri tanımlayıp kullanabiliriz. ―Oluşturduğumuz

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;

Page 12: Enum Struct Union - Typedef - Nesibe YALÇIN2 Enum – Typedef – Struct – Union ―Var olan veri tiplerini kullanarak yeni veri tipleri tanımlayıp kullanabiliriz. ―Oluşturduğumuz

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 !!!

Page 13: Enum Struct Union - Typedef - Nesibe YALÇIN2 Enum – Typedef – Struct – Union ―Var olan veri tiplerini kullanarak yeni veri tipleri tanımlayıp kullanabiliriz. ―Oluşturduğumuz

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;

};

Page 14: Enum Struct Union - Typedef - Nesibe YALÇIN2 Enum – Typedef – Struct – Union ―Var olan veri tiplerini kullanarak yeni veri tipleri tanımlayıp kullanabiliriz. ―Oluşturduğumuz

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’;

Page 15: Enum Struct Union - Typedef - Nesibe YALÇIN2 Enum – Typedef – Struct – Union ―Var olan veri tiplerini kullanarak yeni veri tipleri tanımlayıp kullanabiliriz. ―Oluşturduğumuz

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;

Page 16: Enum Struct Union - Typedef - Nesibe YALÇIN2 Enum – Typedef – Struct – Union ―Var olan veri tiplerini kullanarak yeni veri tipleri tanımlayıp kullanabiliriz. ―Oluşturduğumuz

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;

Page 17: Enum Struct Union - Typedef - Nesibe YALÇIN2 Enum – Typedef – Struct – Union ―Var olan veri tiplerini kullanarak yeni veri tipleri tanımlayıp kullanabiliriz. ―Oluşturduğumuz

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(); }

Page 18: Enum Struct Union - Typedef - Nesibe YALÇIN2 Enum – Typedef – Struct – Union ―Var olan veri tiplerini kullanarak yeni veri tipleri tanımlayıp kullanabiliriz. ―Oluşturduğumuz

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(); }

Page 19: Enum Struct Union - Typedef - Nesibe YALÇIN2 Enum – Typedef – Struct – Union ―Var olan veri tiplerini kullanarak yeni veri tipleri tanımlayıp kullanabiliriz. ―Oluşturduğumuz

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(); }

Page 20: Enum Struct Union - Typedef - Nesibe YALÇIN2 Enum – Typedef – Struct – Union ―Var olan veri tiplerini kullanarak yeni veri tipleri tanımlayıp kullanabiliriz. ―Oluşturduğumuz

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.

Page 21: Enum Struct Union - Typedef - Nesibe YALÇIN2 Enum – Typedef – Struct – Union ―Var olan veri tiplerini kullanarak yeni veri tipleri tanımlayıp kullanabiliriz. ―Oluşturduğumuz

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

Page 22: Enum Struct Union - Typedef - Nesibe YALÇIN2 Enum – Typedef – Struct – Union ―Var olan veri tiplerini kullanarak yeni veri tipleri tanımlayıp kullanabiliriz. ―Oluşturduğumuz

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];

};

Page 23: Enum Struct Union - Typedef - Nesibe YALÇIN2 Enum – Typedef – Struct – Union ―Var olan veri tiplerini kullanarak yeni veri tipleri tanımlayıp kullanabiliriz. ―Oluşturduğumuz

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(); }

Page 24: Enum Struct Union - Typedef - Nesibe YALÇIN2 Enum – Typedef – Struct – Union ―Var olan veri tiplerini kullanarak yeni veri tipleri tanımlayıp kullanabiliriz. ―Oluşturduğumuz

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.