ALGORİTMA VE PROGRAMLAMA II

Benzer belgeler
ALGORİTMA VE PROGRAMLAMA II

ALGORİTMA VE PROGRAMLAMA II

ALGORİTMA VE PROGRAMLAMA II

ALGORİTMA VE PROGRAMLAMA I

ALGORİTMA VE PROGRAMLAMA I

ALGORİTMA VE PROGRAMLAMA II

ALGORİTMA VE PROGRAMLAMA I

ALGORİTMA VE PROGRAMLAMA II

ALGORİTMA VE PROGRAMLAMA I

Yrd. Doç. Dr. Caner ÖZCAN

ALGORİTMA VE PROGRAMLAMA II

ALGORİTMA VE PROGRAMLAMA I

ALGORİTMA VE PROGRAMLAMA I DERS NOTU#8

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

ELN1001 BİLGİSAYAR PROGRAMLAMA I

Yrd. Doç. Dr. Caner ÖZCAN

Yrd. Doç. Dr. Caner ÖZCAN

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

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

ALGORİTMA VE PROGRAMLAMA I

YZM 2105 Nesneye Yönelik Programlama

Pointer Kavramı. Veri Yapıları

ALGORİTMA VE PROGRAMLAMA I

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

ALGORİTMA VE PROGRAMLAMA I DERS NOTU#10

ALGORİTMA VE PROGRAMLAMA I DERS#1

Özyineleme (Recursion)

YZM 2116 Veri Yapıları

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

Yrd. Doç. Dr. Caner ÖZCAN

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

BMÜ-111 Algoritma ve Programlama. Bölüm 5. Tek Boyutlu Diziler

ALGORİTMA VE PROGRAMLAMA II

Pointers (İşaretçiler)

YZM 2105 Nesneye Yönelik Programlama

ALGORİTMA VE PROGRAMLAMA I

ALGORİTMA VE PROGRAMLAMA I

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

Yrd. Doç. Dr. Caner ÖZCAN

elemanlarının gezilmesine yönelik bir örnek sunulmuştur, inceleyiniz.

Göstericiler (Pointers)

YZM 2116 Veri Yapıları

Genel Programlama II

Programlama Dilleri 1. Ders 4: Diziler

EBG101 PROGRAMLAMA TEMELLERİ VE ALGORİTMA

Değişkenler, içerisinde tek bir değer tutabilen yapılardır. Örneğin haftanın günlerini değişkenlerde tutmak istersek, her bir gün adı için bir

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

Genel Programlama II

C#(Sharp) Programlama Dili

BLM 111 ALGORİTMA VE PROGRAMLAMA I

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

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

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

ALFASAYISAL BİLGİLER KARAKTER DİZİLERİ (STRING)

C PROGRAMLAMA D İ L İ

Çoktan Seçmeli Değerlendirme Soruları Akış Şemaları İle Algoritma Geliştirme Örnekleri Giriş 39 1.Gündelik Hayattan Algoritma Örnekleri 39 2.Say

Yrd. Doç. Dr. Caner ÖZCAN

Bölüm 6. Veri Türleri ISBN

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

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

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-8 Dosya İşlemleri-1. Yrd. Doç. Dr. Ümit ATİLA

HSancak Nesne Tabanlı Programlama I Ders Notları

YZM 2105 Nesneye Yönelik Programlama

Diziler (Arrays) Çok Boyutlu Diziler

ALGORİTMA VE PROGRAMLAMA I

Aynı tipten çok sayıda değişken topluluğudur. X Y Score1 Score2 (0) (1) (2)...

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

Eastern Mediterranean University Faculty of Arts & Sciences -- Department Of Mathematics BİLG213 BİLGİSAYAR PROGRAMLAMAYA GİRİŞ

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

YZM 3215 İleri Web Programlama

SAKARYA ÜNİVERSİTESİ BİLGİSAYAR VE BİLİŞİM BİLİMLERİ FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ GÜZ DÖNEMİ PROGRAMLAMAYA GİRİŞ DERSİ

BİL1001 Bilgisayar Bilimlerine Giriş 1

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

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

C Programlama Dilininin Basit Yapıları

Yrd.Doç.Dr. Celal Murat KANDEMİR. Kodlama (Coding) : Bir nesneler kümesinin bir dizgi (bit dizisi) kümesi ile temsil edilmesidir.

Bilgisayarların Gelişimi

Giriş. ENF102 Jeoloji

PROGRAMLAMAYA GİRİŞ VE ALGORİTMA «YTÜROK» EĞİTMEN:REHA ÖZGÜR ŞİMŞEK

SAYI SİSTEMLERİ. Sayı Sistemleri için Genel Tanım

PROGRAMLAMAYA GİRİŞ FONKSİYONLAR

String ve Karakter Dizileri. Yrd. Doç. Dr. Fehim KÖYLÜ Erciyes Üniversitesi Bilgisayar Mühendisliği Bölümü

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

Mühendislik Fakültesi Elektrik-Elektronik Mühendisliği C Programlama 3. Bölüm Veri Tipleri ve Değişkenler

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-4 Döngü Yapıları. Yrd. Doç. Dr. Ümit ATİLA

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

Algoritma Geliştirme ve Veri Yapıları 3 Veri Yapıları. Mustafa Kemal Üniversitesi

BİLİŞİM TEKNOLOJİLERİ 6. SINIF DERS NOTLARI 2

YZM 2116 Veri Yapıları

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

8. İŞARETCİLER (POINTERS)

PROGRAMLAMAYA GİRİŞ DERS 2

Bilgisayar Sistemlerine Genel Bakış

Algoritma Geliştirme ve Veri Yapıları 9 Ağaç Veri Modeli ve Uygulaması. Mustafa Kemal Üniversitesi

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.

C# Örnek Uygulamalar I

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

Algoritma Geliştirme ve Veri Yapıları 7 Liste ve Bağlantılı Liste. Mustafa Kemal Üniversitesi

Genel Programlama II

Transkript:

ALGORİTMA VE PROGRAMLAMA II Yrd. Doç. Dr. Deniz KILINÇ deniz.kilinc@cbu.edu.tr YZM 1102 Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi

Genel Bakış 2 Bellek ve Adresleme Dinamik Bellek Yönetimine Giriş Dinamik ve Statik Dizi Dinamik Dizi Fonksiyonları Malloc Calloc Realloc Free

7. BÖLÜM 3 Dinamik Bellek Yönetimi

Bellek ve Adresleme 4 Bilgisayarın ana belleği (RAM) sıralı kaydetme gözlerinden oluşmuştur. Her göze bir adres atanmıştır. Bu adreslerin değerleri 0 ila belleğin sahip olduğu üst değere bağlı olarak değişebilir. Örneğin 1GB bir bellek, 1024*1024*1024 = 1,073,741,824 adet gözden oluşur.

Bellek ve Adresleme (devam ) 5 Değişken türlerinin bellekte kapladığı alanlar:

Bellek ve Adresleme (devam ) 6 Bir programlama dillinde, belli bir tipte değişken tanımlanıp ve bir değer atandığında, o değişkene dört temel özellik eşlik eder: 1. değişkenin adı 2. değişkenin tipi 3. değişkenin sahip olduğu değer (içerik) 4. değişkenin bellekteki adresi

Bellek ve Adresleme (devam ) 7 Örnek: int tam = 33; Bu değişken için, int tipinde bellekte (genellikle herbiri 1 bayt olan 4 bayt büyüklüğünde) bir hücre ayrılır ve o hücreye 33 sayısı ikilik (binary) sayı sitemindeki karşılığı olan 4 baytlık (32 bitlik) karşılığı aşağıdaki gibi yazılır. 00000000 00000000 00000000 00100001

Bellek ve Adresleme (devam ) 8 Örnek: int tam = 33; Bellek adresleri genellikle onaltılık (hexadecimal) sayı sisteminde ifade edilir. 0x3fffd14 sayısı onluk (decimal) sayı sisteminde 67108116 sayına karşılık gelir. Bunun anlamı, tam değişkeni, program çalıştığı sürece, bellekte 67108116. - 67108120. numaralı gözler arasındaki 4 baytlık hücreyi işgal edecek olmasıdır.

Bellek ve Adresleme (devam ) 9 tam adlı değişkenin bellekteki gerçek konumu ve ikilik düzendeki içeriği aşağıdaki gibidir:

Dinamik Bellek Yönetimi 10 Yazılım geliştiricinin dikkat etmesi gereken en önemli noktalardan birisi ürettiği yazılımın sistemin kaynaklarını en verimli şekilde kullanması gerekliliğidir. Nasıl sınırsız kullanıcı talebi olamazsa sınırsız sistem kaynağı da olamaz. En önemli sistem kaynaklarından birisi de istemci / sunucu tarafında kullanılan BELLEK tir CPU Türü ve Gücü, Disk Türü, Disk Alanı Boyutu, Toplam Sunucu Sayısı, network bandwidth vb.

Dinamik Bellek Yönetimi (devam ) 11 Eğer yazılımcı bellek yönetimini iyi yapamıyorsa doğal olarak daha fazla belleğe ihtiyaç duyar. Daha fazla belleğe ihtiyaç duymak belli başlı birkaç sorunu beraberinde getirir. Fazla maliyet, Programın yavaş çalışması bunların en önemlileridir.

Statik ve Dinamik Dizi 12 Statik Dizi Bir C programı içerisinde, dizilerin boyutu ve kaç elemanlı olduğu program başında belirtilirse, derleyici o dizi için gereken bellek alanını (bölgesini) program sonlanıncaya kadar saklı tutar ve bu alan başka bir amaç için kullanılamaz. Bu türdeki diziler statik dizi olarak adlandırılırlar. Statik dizinin boyutu programın çalışması esnasında (run time) değiştirilemez.

Statik ve Dinamik Dizi (devam ) 13 Dinamik Dizi Programın çalışırken bir dizinin boyutu ve eleman sayısı bazı yöntemler kullanılarak değiştirilebilir. Bu tür dizilere dinamik dizi denir. Dinamik diziler için gereken bellek bölgesi, derleyici tarafından işletim sisteminden istenir, kullanılır ve daha sonra istenirse bu bölge boşaltılır.

Statik ve Dinamik Dizi (devam ) 14 Örneğin: char ad[20]; İfadesinde derleyici, bellekten 20 byte boyutunda sürekli bir alan tahsis edecektir. Bu yer tahsisi, program başlatılmadan önce yapılmaktadır. Yani program çalışırken bu dizinin boyutunu değiştirmeniz mümkün değildir. Fakat bazı durumlarda (genelde ) bellekten boyutu sabit olmayan ve sürekli değişebilen yerler tahsis etmemiz gerekecektir.

Statik ve Dinamik Dizi (devam ) 15 Örneğin: Telefon rehberi yazılımı geliştirmek için bellekten tahsis edeceğiniz bölgenin boyutunu önceden tahmin edebilir misiniz? Her yeni telefon eklendiğinde bellekte ayırdığınız yeri büyüterek belleği en verimli şekilde kullanmak durumundasınız. Yani dinamik bellek yönetimi ile programın çalışma zamanı sırasında (Run-Time)-işletim sistemine danışarak- sürekli bellek bölgeleri tahsis ederiz.

Dinamik Dizi Fonksiyonları 16 Dinamik Bellek Fonksiyonu void *malloc(size_t eleman_sayısı); void *calloc(size_t eleman_sayısı, size_t nbayt); void *realloc(void *ptr, size_t nbayt); void free(void *ptr); Açıklama Bellekte her biri size_t tipinde olan eleman_sayısı kadar yer (bellek bloğu) ayırır. Bu yer verilmezse NULL gönderir. Bellekte her biri nbayt kadar yer işgal edecek eleman_sayısı kadar boş yer ayırır ve bütün bitleri sıfırlar. Bu yer ayrılamazsa geriye NULL gönderir. ptr işaretçisi ile gösterilen bellek bloğunu, nbayt kadar büyüterek veya küçülterek değiştirir. Bu iş gerçekleşmezse geriye NULL gönderir. Daha önce ayrılan adresi ptr'de saklanan bellek alanının boşaltır.

Statik ve Dinamik Dizi (devam ) 17 int *dizi; /* dinamik dizi bildirimi */ scanf("%d",&n); /* eleman saysını belirle */ /* n tane bellek bloğu isteniyor */ dizi = (int *) malloc( sizeof(int)*n ); /* Boş yer varmı sorgulanıyor */ if( dizi == NULL ) printf("yetersiz bellek alanı\n"), exit(1);... /* dizi burada kullanılıyor */ /* bellek bloğu boşaltılıyor */ free(dizi);

Örnek 1: Dinamik Dizi Ortalama Hesabı 18 Sayısal türde boyutu dinamik olarak dışarıdan girilecek bir dizi tanımlanacaktır (int *dizi). Dizinin boyutu (n değişkeni) klavyeden kullanıcıya girdirilmeli ve dinamik dizi malloc fonksiyonu kullanılarak oluşturulmalıdır. Dizi boyutu girildikten sonra dizinin her bir için değerler klavyeden girilmelidir. Son olarak dizi elemanlarının toplamı ve ağırlıklı ortalamaları yazdırılacaktır. YZM 410 - Yazılım Kalite Güvencesi

Örnek 1: Dinamik Dizi Ortalama Hesabı 19 YZM 410 - Yazılım Kalite Güvencesi

Örnek 1: Dinamik Dizi Ortalama Hesabı 20 EKLENTİ Uygulamanın bir döngü içerisinde çalışması sağlanacaktır. Dizi boyutu olan n değeri 0 girilmediği sürece uygulama çalışmaya devam etmelidir.

malloc() ve calloc() Farkı 21 malloc() fonksiyonu tahsis ettiği bellekteki bölgelere herhangi bir ilk değer atama işlemi uygulamaz. Yani bellekteki değerleri ile beraber size tahsis eder, ilk değer atama işlemi yazılımcıya kalmıştır. calloc() fonksiyonu bellek tahsisatı yaparken malloc() fonksiyonunu kullanır. Farklı olarak ayırdığı bellek bölgesini sıfırlamaktadır.

Örnek 2: malloc() ve calloc() Farkı 22

Örnek 3: realloc() 23 malloc() fonksiyonunu kullanarak 10 karakter kapasiteli bir işaretçi tanımlayınız. Bu işaretçiye strcpy() fonksiyonunu kullanarak Algoritma değerini atayınız. Bu işaretçinin kapasitesini realloc() fonksiyonunu kullanarak 25 karaktere çıkartın. İşaretçinin sonuna strcat() fonksyionunu kullanarak veprogramlama ekleyin ve ekrana yazdırın.

Örnek 3: realloc() 24

25 Örnek 4: Karakter Dizisinin Alt Parçalarını Bulma (substring) Girilen bir karakter dizisinin istenilen pozisyondan itibaren istenilen karakter sayısı kadar kopyalanmasını sağlayan C programını yazınız. 1. 100 elemanlı dizi isimli bir karakter dizisi tanımlanacaktır. 2. İlk olarak klavyeden bir karakter dizisi girilecektir. Burada gets() fonksiyonu kullanılarak dizi doldurulacaktır. 3. Daha sonra dizinin hangi karakterden itibaren kopyalanacağı bilgisi okunarak, sayısal pozisyon değişkenine atanacaktır. 4. Daha sonra kopyalanacak karakter sayısı girilecek ve sayısal uzunluk değişkenine atanacaktır.

26 Örnek 4: Karakter Dizisinin Alt Parçalarını Bulma (substring) 5. Prototipi aşağıdaki gibi olan bir fonksiyon yazılarak kopyalanan değer ekranda gösterilecektir. char *SubString(char *dizikopya, int pozisyon, int uzunluk)

KAYNAKLAR 27 N. Ercil Çağıltay ve ark., C DERSİ PROGRAMLAMAYA GİRİŞ, Ada Matbaacılık, ANKARA; 2009. Milli Eğitim Bakanlığı "Programlamaya Giriş ve Algoritmalar Ders Notları", 2007 C Programlama Dili, Şerafettin ARIKAN Problem Solving and Program Design in C, Hanly, Koffman http://www.algoritmaveprogramlama.com

28 İYİ ÇALIŞMALAR Yrd. Doç. Dr. Deniz KILINÇ deniz.kilinc@cbu.edu.tr