Programlama Dilleri 1. Ders 13: Struct (Yapılar)

Benzer belgeler
Struct VE GÖSTERİCİLER FONKSİYONLARDA STRUCT KULLANIMI Programlama dilleri hafta -

Programlama Dilleri. C Dili. Programlama Dilleri-ders08/ 1

YAPILAR BİRLİKLER SAYMA SABİTLERİ/KÜMELERİ. 3. Hafta

enum bolumler{elektronik, insaat, bilgisayar, makine, gida};

Diziler (Arrays) Çok Boyutlu Diziler

Veri Yapıları. Amaçlar: Temel Veri Yapılarını Tanımlamalı Veri Yapılarını Veri Modeli ve Türlerini Öğreneceksiniz. İçindekiler:

BLM 111 ALGORİTMA VE PROGRAMLAMA I

BLM 112- Programlama Dilleri II. Hafta 4 İşaretçiler (Pointers)

Sınav tarihi : Süre : 60 dak. a) strstr b) strchr c) strcat d) strcpy e) strlen. a) b) d) e) 0

8. İŞARETCİLER (POINTERS)

Pointer Kavramı. Veri Yapıları

BÖLÜM 11: YAPISAL VERİ TİPLERİ

İstanbul Teknik Üniversitesi IEEE Öğrenci Kolu DİZİLER

Kocaeli Üniversitesi Bilgisayar Mühendisliği Programlama 2 Dersi Final Sınavı. A Grubu

Yrd. Doç. Dr. Caner ÖZCAN

Programlama Dilleri 1. Ders 5: Göstericiler

PROGRAMLAMAYA GİRİŞ DERS 2

C PROGRAMLAMA D İ L İ

Dr. Fatih AY Tel: fatihay@fatihay.net

Temel Bilgisayar Bilimleri Ders Notu #4-2. kısım

DİZİLER-KATARLAR ALGORİTMA VE PROGRAMLAMA II

ALGORİTMA VE PROGRAMLAMA II

KOCAELİ ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ. BİLGİSAYAR LABORATUVARI II FİNAL SINAVI SORU ve CEVAPLARI(I. ogr)

Sınav tarihi : Süre : 60 dak.

ÇOK BOYUTLU DİZİLER VE DİNAMİK BELLEK YÖNETİMİ İLE İLGİLİ ÖRNEKLER

Programlama Dilleri 1. Ders 4: Diziler

Yrd. Doç. Dr. Caner ÖZCAN

YAPILAR (STRUCTURES)

Hafta 12 Karakter Tutan Diziler

Yrd. Doç. Dr. Caner ÖZCAN

Genel Programlama II

Dizgiler. C dilinde karakter m şeklinde tek tırnak içerisinde yazılan ifadelerdir. Bu karakterlerin her biri aslında bir tamsayı ile ifade edilir.

BİLG Dr. Mustafa T. Babagil 1

Fonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) {

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-3 İşaretçiler (Pointer) (Kısım-2)

ELN1001 BİLGİSAYAR PROGRAMLAMA I

enum, struct, union ve typedef Yapıları

Yrd. Doç. Dr. Caner ÖZCAN

/ C Bilgisayar Programlama Final Sınavı Test Soruları. Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : , 60 dak.

Bölüm 2 - C ile Programlamaya Giriş

Temel Giriş/Çıkış Fonksiyonları

int printf (const char *format [, argument,...]);

BLM 111 ALGORİTMA VE PROGRAMLAMA I

Örnek: İki fonksiyondan oluşan bir program. Fonksiyon Tanımı

Yrd. Doç. Dr. Caner ÖZCAN

STRİNG DİZİLER(KATARLAR)

BÖLÜM 9: POINTERLER (İŞARETÇİLER)

Eln 1001 Bilgisayar Programlama I

Bil101 Bilgisayar Yazılımı I. M. Erdem ÇORAPÇIOĞLU Bilgisayar Yüksek Mühendisi

Deney 7: Fonksiyon Tanımlama ve Parametre Aktarım Yöntemleri

GENEL GĐRĐŞ-ÇIKIŞ FONKSĐYONLARI. ENF102 Jeoloji 1. #include <stdio.h> printf Fonksiyonu ÖRNEK. printf

Konular. Hafta 5 Veri Tipleri (Devam) BLG339 PROGRAMLAMA DİLLERİ KAVRAMI

Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : dak.

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-8 Değişken Tipleri ve Temel Giriş/Çıkış İşlemleri

Temel Bilgisayar Programlama Final Sınavı Çalışma Notları

NESNEYE YÖNELİK PROGRAMLAMA C++ a Giriş

C Programlama Dilinde Değişkenler

BLM111 Programlama Dilleri I. Hafta 10 Diziler. Yrd. Doç. Dr. Caner ÖZCAN

ALGORİTMA VE PROGRAMLAMA I DERS NOTU#8

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-10 Diziler. Yrd. Doç. Dr. Ümit ATİLA

3/7/2011. ENF-102 Jeoloji 1. Tekrar -- Değişken Tanımlamaları (Definition) ve Veri Türleri (Data Type) Veri Tanımları ve Mantıksal Đşlemler

Değişkenler tanımlanırken onlara ne tür veriler atanabileceği de belirtilir. Temel veri türleri oldukça azdır:

BASİT C PROGRAMLARI Öğr.Gör.Dr. Mahmut YALÇIN

Diziler. Dizi Tanımı Dizi Elemanlarına Değer Atama Diziler ve Göstergeler 2-Boyutlu Diziler

#include<stdio.h> #include<conio.h> #define doktorsayisi 3. typedef struct dr{ int ay1, ay2, ay3, ay4; } doktor; float hesapla(doktor dktr){

ALGORİTMA VE PROGRAMLAMA I

Özyineleme (Recursion)

BLM 112- Programlama Dilleri II. Hafta 5 İşaretçiler (Pointers)

10. DOSYA GİRİŞ ÇIKIŞ FONKSİYONLARI

C de Detaylı Üs Alma Programı. C# Dilinde Metot Tanımlama ve Yazdırma

Big Endian & Little Endian K.Atilla Toker İzmir Üniversitesi Meslek Yüksek Okulu Bilgisayar Programcılığı Ver:01

Temel Dosya İşlemleri. Kütük Organizasyonu 1

Programlamaya Giriş. Program : Belirli bir problemi çözmek için bir bilgisayar dili kullanılarak yazılmış deyimler dizisi.

Adı Soyadı Öğrenci No. Toplam (100p) 2 (10p) +10p. 5 (25p) +10p. 3 (20p) 4 (25p) 1 (20p)

Jval tipi. Genel veri yapılarını kullanacağımız zaman Jval den faydalanırız.önemli olanlar aşağıda mevcuttur:

C++ Dersi: Nesne Tabanlı Programlama

C++ Giriş Ders 1 MSGSU Fizik Bölümü Ferhat ÖZOK Kullanılacak kaynak: Published by Juan Soulié

C Konsol Giriş Çıkış Fonksiyonları

Telefon Rehberi Uygulaması

C++ Dersi: Nesne Tabanlı Programlama 2. Baskı

ALGORİTMA VE PROGRAMLAMA II

Final Sınavı Soruları Güz, Süre: 90 Dakika

Diziler. Yrd.Doç.Dr.Bülent ÇOBANOĞLU

MAK 1005 Bilgisayar Programlamaya Giriş C DİLİNE GİRİŞ. Prof. Dr. Necmettin Kaya

Programlama Dilleri Laboratuvarı

B02.6 Karar Verme, Eşitlik ve Bağıntı Operatörleri

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-11 Karakter Diziler. Yrd. Doç. Dr. Ümit ATİLA

Bölüm 8, Yrd. Doç. Dr. A. Kadir YALDIR PAÜ Bilgisayar Mühendisliği Bölümü BÖLÜM 8: DİZİLER

Giris {\} /\ Suhap SAHIN Onur GÖK

C Programlama Dilininin Basit Yapıları

Göstericiler (Pointers)

NESNE TABANLI PROGRAMLAMA Final Sınavı Cevapları

BİL1001 Bilgisayar Bilimlerine Giriş 1

NESNEYE YÖNELİK PROGRAMLAMA

Biçem Belirteçleri (Format Specifiers)

Dizi nin Önemi. Telefon rehberindeki numaralar, haftanın günleri gibi v.b.

C PROGRAMLAMA D İ L İ

Giriş. ENF102 Jeoloji

Yrd. Doç. Dr. Caner ÖZCAN

/ C Bilgisayar Programlama Yıliçi Sınavı Test Soruları. Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : , 60 dak.

Transkript:

Programlama Dilleri 1 Ders 13: Struct (Yapılar)

Genel Bakış Giriş Veri Yapısı Türleri Struct Struct Bellek Tahsisi Typedef Struct Dinamik Bellek Tahsisi Struct Örnekler Programlama Dilleri 1 2

Giriş Bir konuyla ilgili, mantıksal ilişki içindeki verilerin bellekte saklanmasına yönelik düzenlemelere veri yapısı denir. Veri yapıları bellekte belirli bir düzen içinde tutulmuş verilere erişilmesine, bu veriler üzerinde bazı işlemlerin etkin bir biçimde yapılmasına olanak sağlar. Programlama Dilleri 1 3

Veri Yapısı Türleri Diziler, aynı türden bellekte bitişik olarak yer alan bir veri yapısı türüdür. Struct veri yapısı ise farklı türlerden nesneleri/verileri tutabilen ve C tarafından doğrudan desteklenen bir veri yapısı türüdür. Örneğin bir iş yerinde çalışan kişinin isim, yaş, cinsiyet, bölüm, ücret, öğrenim durumu gibi bilgileri farklı türden nesneler içinde saklanabilir. Programlama Dilleri 1 4

Yapı (Struct) Bildirimi Bir dizi tek tip elemanlardan oluşmaktadır. Struct veri yapısı, farklı tipte birbirleriyle ilişkili değişkenleri gruplamak için kullanılır. struct isim { //struct öğeleri yer alacak }; Programlama Dilleri 1 5

Yapı (Struct) Bildirimi struct malstok{ int kodno; char malın_adı[30]; int mal_mevcudu; float alış_fiyatı; }; struct malstok mal1,mal2; Yapıyı temsil eden mal1 ve mal2 değişkenleri tanımlanmıştır. Programlama Dilleri 1 6

Yapı (Struct) Bildirimi (2. yol) struct malstok{ int kodno; char malın_adı[30]; int mal_mevcudu; float alış_fiyatı; } mal1,mal2; Yapıyı temsil eden mal1 ve mal2 değişkenleri tanımlanmıştır. Programlama Dilleri 1 7

Örnek Uçuş planı yapmak için kullanılabilecek bir yapı aşağıdaki gibi tanımlanabilir. struct UcusTipi{ char ucusno[7]; int yukseklik; int ustseviye; int altseviye; int pozisyon; double hiz; }; Programlama Dilleri 1 8

Örnek Bu veri yapısında derleyici yapının ne kadar büyük olduğunu ve farklı tip değişkenlerin bellekte nasıl yerleştiğini gösterir. Sıradan bir bellek tahsisi yapılmaz. Programlama Dilleri 1 9

Struct Tanımlama ve Kullanma Bir struct veri yapısına bellek tahsis etmek için, yeni veri tipini kullanarak değişken tanımlamalıyız. struct UcusTipi ucak; Bellek tahsis edilir ve bu değişkenin bireysel üyelerine erişim sağlanabilir: ucak.hiz = 800.0; // erişim. ile yapılır. ucak.yukseklik = 10000; Programlama Dilleri 1 10

Bellek Tahsisi struct UcusTipi{ char ucusno[7]; int yukseklik; int ustseviye; int altseviye; int pozisyon; double hiz; }ucak; ucak.hiz = 800; ucak.yukseklik = 10000; ucak.ucusno[0] ucak.ucusno [6] ucak.yukseklik ucak.ustseviye ucak.altseviye ucak.pozisyon ucak.hiz Programlama Dilleri 1 11

Bellek Tahsisi Bir struct veri yapısının üyeleri tanım gereği belirtilen sırayla belleğe yerleştirilir. ucak yapısında; ucusno[ ] yukseklik ustseviye altseviye pozisyon hiz şeklinde sırayla bellekte yerleştirilir. Programlama Dilleri 1 12

Struct Tanımlama ve Kullanma Bir struct veri yapısında hem tanımlama hem de bildirme aynı anda yapılabilir. struct UcusTipi{ Tanımlama char ucusno[7]; int yukseklik; int ustseviye; int altseviye; int pozisyon; double hiz; Bildirme }abc, def; Programlama Dilleri 1 13

Struct Tanımlama ve Kullanma Başka bir yapı oluşturmak için UcusTipi adı kullanılabilir. struct UcusTipi abc,def; Bu şekilde bir bildirim ile önceki bildirim arasında bir fark yoktur. Programlama Dilleri 1 14

typedef belirleyicisi C önceden tanımlanmış bir tipe yeni bir ad vererek veri türü tanımlamak için bir yol sağlar. Kullanımı: typedef <isim1> <isim2>; // isim1 yerine isim2 kullanılabilir Programlama Dilleri 1 15

typedef belirleyicisi Örnek kullanımlar: typedef unsigned short int usi; typedef struct UcusTipi UcusTip; typedef struct ab_type{ int a; double b; }ABCGrup; Programlama Dilleri 1 16

typedef belirleyicisi Bu belirleyici, isimlere uygulamaya özgü farklı isimler vererek kodu daha okunaklı hale getirmek için bir yol sağlar. typedef unsigned short int usi; usi pixels; /*pixels değişkeni unsigned short int tipinde olur*/ typedef struct UcusTipi UcusTip; UcusTip plane1, plane2; ABCGrup abc1, abc2, abc3; Yukarıdaki ifadelerde unsigned short int kısaltılarak usi şeklinde tanımlanabilir hale gelmiştir. UcusTip ise struct tipinde bir yapıdır. typedef sayesinde başına struct yazmadan tanımlama yapılabilir. Programlama Dilleri 1 17

typedef belirleyicisi Programlama Dilleri 1 18

typedef belirleyicisi Programlama Dilleri 1 19

Struct Dizileri Bir struct dizisi aşağıdaki gibi tanımlanabilir: struct UcusTipi ucaklar[100]; Burada her bir dizi elemanı bir struct veri yapısıdır. Belli bir elemanın üyesine erişmek için: ucaklar[34].yukseklik = 10000; Burada [ ] ve. operatörleri aynı önceliğe sahiptir. Programlama Dilleri 1 20

Struct Gösterici Bildirimi yapılan struct veri yapısı için gösterici de tanımlanabilir. Örneğin, UcusTipi *ucakptr; ucakptr = &ucaklar[34]; Adresteki veriye erişmek için; (*ucaklar).yukseklik = 10000;. operatörü * operatöründen yüksek önceliğe sahiptir. Yukarıdaki kullanım ile aşağıdaki kullanım birbirinden farklıdır. *ucaklar.yukseklik = 10000; //??? Programlama Dilleri 1 21

Struct Gösterici C bir struct veri elemanına gösterici ile erişmek için özel bir sözdizimi sağlar. ucakptr->ucusno[3] = a ; ucakptr->yukseklik = 10000; ucakptr->pozisyon = 2500; ucakptr->hiz = 757.50; Programlama Dilleri 1 22

Fonksiyon Parametresi struct int Carpisma(Ucak *planea, Ucak *planeb) { if (planea->yukseklik == planeb->yukseklik) { /****/ return ; } else return 0; } Programlama Dilleri 1 23

Dinamik Bellek Tahsisi UcusTipi programımızda uçakları kullanıcının istediği sayıda işlemek istediğimizi varsayalım. Gerekli uçak sayısını bilmediğimizden bu durumda bir dizi tahsis etmemiz doğru olmaz. Maksimum uçak sayısını bilsek bile, dizi tahsis ettiğimizde fazla bellek alanı kullanmış oluruz. Programlama Dilleri 1 24

Dinamik Bellek Tahsisi (malloc) Struct veri yapısı için bellek tahsisi, değişkenler için bellek tahsisi ile aynıdır. ucaklar = malloc(n*sizeof(ucustipi)); Ayrıca dönüş değerinin türünün, uygun gösterici için değiştirilmesi gerekir. ucaklar = (UcusTipi*)malloc(n*sizeof(UcusTipi)); Programlama Dilleri 1 25

Dinamik Bellek Tahsisi (malloc) int havadakiucaklar; UcusTipi *ucaklar; printf( Kaç uçak şu an havada? ); scanf( %d, &havadakiucaklar); ucaklar = (UcusTipi*)malloc(sizeof(UcusTipi) * havadakiucaklar); if (ucaklar == NULL) { printf( Error in allocating the data array.\n );... } ucaklar[0].yukseklik = 500; Eğer bellek tahsisi başarısız olursa, malloc geriye NULL döndürür. Pointer tanımlandıktan sonra, dizi notasyonu veya pointer notasyonu kullanılabilir. Programlama Dilleri 1 26

Örnek 13.1 struct database { int id_number; int age; float salary; }; int main( ) { struct database employee; employee.age = 22; employee.id_number = 1; employee.salary = 12000.21; } Programlama Dilleri 1 27

Örnek 13.2 #include <stdio.h> struct example { int x; }; int main( ) { struct example abc; struct example *ptr; abc.x = 12; ptr = &abc; printf( "%d\n", ptr->x ); } Output: 12 Programlama Dilleri 1 28

Örnek 13.3 #include <stdio.h> #include <string.h> struct student { int id; char name[20]; float percentage; }; Output: Id is: 1 Name is: Recep Percentage is: 86.50 int main( ) { struct student record = {0}; record.id=1; strcpy(record.name, Recep"); record.percentage = 86.5; printf(" Id is: %d \n", record.id); printf(" Name is: %s \n", record.name); printf(" Percentage is: %2.2f \n", record.percentage); return 0; } Programlama Dilleri 1 29

Örnek 13.4 struct personel { char soyad[20]; char ad[20]; int sicilno; int derece; }; struct birim { char ad[20]; struct personel sef; }; struct daire { char ad[20]; struct personel baskan; struct birim altbirim[15]; }; struct daire m; main( ) { m.altbirim[7].sef.sicilno = 2547; printf("%d", m.altbirim[7].sef.sicilno); } Programlama Dilleri 1 30

Örnek 13.4 #include <stdio.h> #include <string.h> struct student { int id; char name[30]; float percentage; }; Programlama Dilleri 1 31

Örnek 13.4 int main() { int i; struct student record[3]; record[0].id=1; strcpy(record[0].name, "Raju"); record[0].percentage = 86.5; record[1].id=2; strcpy(record[1].name, "Surendren"); record[1].percentage = 90.5; record[2].id=3; strcpy(record[2].name, "Thiyagu"); record[2].percentage = 81.5; for(i=0; i<3; i++) { printf(" Records of STUDENT : %d \n", i+1); printf(" Id is: %d \n", record[i].id); Output: Records of STUDENT : 1 Id is: 1 Name is: Raju Percentage is: 86.500000 Records of STUDENT : 2 Id is: 2 Name is: Surendren Percentage is: 90.500000 Records of STUDENT : 3 Id is: 3 Name is: Thiyagu Percentage is: 81.500000 printf(" Name is: %s \n", record[i].name); printf(" Percentage is: %f\n\n",record[i].percentage); } return 0; } Programlama Dilleri 1 32

Örnek 13.5 Fonksiyonlarda parametre olarak struct kullanımı Programlama Dilleri 1 33