ELN1001 BİLGİSAYAR PROGRAMLAMA I

Benzer belgeler
Eln 1001 Bilgisayar Programlama I

Temel Giriş/Çıkış Fonksiyonları

C Konsol Giriş Çıkış Fonksiyonları

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

ALGORİTMA VE PROGRAMLAMA II

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

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.

Yrd. Doç. Dr. Caner ÖZCAN

Yrd. Doç. Dr. Caner ÖZCAN

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

Ders 4: Temel Giriş/Çıkış Fonksiyonları

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

C Programlama printf() Fonksiyonu

Yrd. Doç. Dr. Caner ÖZCAN

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

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

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

C Programlama Dilininin Basit Yapıları

Yrd. Doç. Dr. Caner ÖZCAN

PROGRAMLAMAYA GİRİŞ DERS 2

şeklinde tanımlanmıştır. O halde, dosyaları daha önceki bilgilerimizi kullanarak FILE *Dosya1, *Dosya2;

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

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

ALGORİTMA VE PROGRAMLAMA II

Algoritma ve Programlama: Karar Yapıları ve Döngüler

pfrintf fonksiyonu: Çıkışın formatlı olması ve bunun bir dosyaya yazdırılması durumlarında kullanılır. fprintf fonksiyonunun genel yazım biçimi,

BÖLÜM 5: TEMEL GİRİŞ/ÇIKIŞ FONKSİYONLARI

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

Eln 1002 Bilgisayar Programlama II

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

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

Hafta 8 C Dilinde Değişken Tipleri ve Temel Giriş/Çıkış İşlemleri

Dr. Fatih AY Tel: fatihay@fatihay.net

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

BÖLÜM 1b: C++ PROGRAMLAMANIN YAPISI. C++, hard diskte TC, BIN, INCLUDE, LIB gibi alt dizinlere yüklenir.

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

BİL1001 Bilgisayar Bilimlerine Giriş 1

Giriş. ENF102 Jeoloji

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

AHMET YESEVİ ÜNİVERSİTESİ BİLİŞİM SİSTEMLERİ VE MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ LİSANS DÖNEM ÖDEVİ

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

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

C PROGRAMLAMA D İ L İ

BMT 101 Algoritma ve Programlama I 6. Hafta. Yük. Müh. Köksal Gündoğdu 1

Diziler (Arrays) Çok Boyutlu Diziler

Yrd. Doç. Dr. Caner ÖZCAN

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

Sınav tarihi : Süre : 60 dak. a) ABCDE b) BCDE c) ABCD d) kod hatalı e) BCD

Hafta 12 Karakter Tutan Diziler

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

C PROGRAMLAMA D İ L İ

Temel Giriş/Çıkış Fonksiyonları (Devam) Örnek :

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

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

Programlama Dilleri 1. Ders 4: Diziler

DOSYA İŞLEMLERİ Programlama dilleri hafta -

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

C PROGRAMLAMA DİLİNE GİRİŞ

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

mod ile açılacak olan dosyanın ne amaçla açılacağı belirlenir. Bunlar:

STRİNG DİZİLER(KATARLAR)

Temel Bilgisayar Programlama

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

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

Program Çözümleme. Aşağıdaki örneklerde printf() ve scanf() fonksiyonlarının işlevleri gösterilmektedir. Liste 1.1. Çözümleme:

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

DİZİLER 5/4/2010. ENF-102 Jeoloji Giriş. Tek Boyutlu Diziler. Tek Boyutlu Diziler. Örnek. Örnek

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

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

PROGRAMLAMAYA GİRİŞ FONKSİYONLAR

C PROGRAMLAMA D İ L İ

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

MATLAB/Değişkene Değer Atamak

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

Programlama Dilleri 1. Ders 5: Göstericiler

// hataları işaret eden referans

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

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

Genel Programlama II

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

ALGORİTMA VE PROGRAMLAMA II

MAK 1005 Bilgisayar Programlamaya Giriş. Fonksiyonlar. Prof. Dr. Necmettin Kaya

STRING (SÖZEL) İŞLEMLER. Yrd. Doç.Dr. Bülent Çobanoğlu

C Dosyalama. Öğr. Gör. M. Ozan AKI. Rev 1.0

Dr. Fatih AY Tel: fatihay@fatihay.net

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

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

Adım Adım C. Dr. Hidayet Takcı

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

Strings(Karakter Dizisi)

ALGORİTMA VE PROGRAMLAMA II

Biçem Belirteçleri (Format Specifiers)

ALGORİTMA VE PROGRAMLAMA I

PROGRAMLAMA TEMELLER. C Program Yap s

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

BĠLGĠSAYAR PROGRAMLAMA II C++ Programlamaya GiriĢ Published by Juan Soulié

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

Transkript:

ELN1001 BİLGİSAYAR PROGRAMLAMA I DİNAMİK BELLEK YÖNETİMİ TEMEL G/Ç FONKSİYONLARI Dinamik Bellek Tahsisi Tanımlanmış olan dizilere eleman sayısı ve elemanlarının tiplerine göre, sistem belleğinde bir yer ayrılacaktır. Diziler, bu şekilde bir yapıya sahip oldukları için, statik veri yapıları olarak adlandırılır. Programın başında kullanılıp daha sonra ihtiyaç duyulmayacak bir dizi için ayrılan bellek alanı, programın sonuna kadar korunacaktır. Dinamik Bellek Tahsisi, bir bellek alanını yalnızca ihtiyaç olduğu anda meşgul etmek, ihtiyaç olmadığı durumda ise diğer parçaların kullanımına bırakmaktır. 1

Dinamik Bellek Tahsisi C programlama dilinin <stdlib> kütüphanesi, bu tür bir dinamik bellek tahsisi için malloc, calloc ve realloc üç ayrı fonksiyona sahiptir. Bu fonksiyonlar, dinamik dizileri oluşturmak ve değiştirmek için kullanılmaktadır. Önceki bölümde gördüğümüz gibi, bir diziye adreslenen bir işaretçi, bir dizi gibi düşünülebilir. Bundan dolayı, malloc veya calloc ile ayırt edilen bellek alanı, bir diziymiş gibi düşünülebilir. Bu durumda, malloc veya calloc fonksiyonu, bir dizi için dinamik olarak bir bellek parçası ayırır. Dinamik Bellek Tahsisi calloc prototipi: void *calloc(size_t nmemb, size_t size) nmemb: dizi elemanlarının sayısı size: dizinin her elemanının boyutu calloc fonksiyonu kullanıldığı anda, dizinin tüm elemanları sıfıra eşitlenir. Fonksiyonun dönüş değeri, bellek tahsisi gerçekleşmişse, o bellek adresini işaret eden işaretçi, bellek tahsisi gerçekleşmemişse, NULL değeridir. calloc ile malloc arasındaki temel fark, calloc un bellek tahsisi yapıldığında belleği temizlemesi(tüm elemanları sıfır yapma) ve ondan sonra tahsis etmesi, malloc un ise belleği temizlemeden bir bellek tahsisi gerçekleştirmesidir. 2

Dinamik Bellek Tahsisi malloc prototipi: void *malloc(size_t size); size: tahsis edilecek bölgenin byte cinsinden uzunluğu Fonksiyonun dönüş değeri, bellek tahsisi gerçekleşmişse, o bellek adresini işaret eden işaretçi, bellek tahsisi gerçekleşmemişse, NULL değeridir. int *ptr; ptr = (int*) malloc (100); (Bellek alanı ayrılıyor) free ptr; (Bellek alanı serbest bırakılıyor) Dinamik Bellek Tahsisi realloc fonksiyonu ise, malloc, calloc veya realloc a yapılan bir önceki çağrıda oluşturulmuş olan alanın boyutunu değiştirmek için kullanılmaktadır. Orijinal alanın içinde bulunan eleman değerlerinde bir değişiklik gerçekleştirilmez, bununla birlikte, dizinin sonuna ilave boyut kadar bellek parçası eklenir. realloc prototipi: void *realloc(void *ptr, size_t, size); ptr: boyutu değiştirilecek orijinal bellek alanının adresi, size: dizinin yeni boyutu Eğer ptr işaretçisi NULL ise, realloc malloc ile aynı işlevi görecektir. Eğer boyut 0 ise ve ptr NULL değilse, ptr nin işaret ettiği bellek alanı serbest bırakılır. 3

Dinamik Bellek Tahsisi Eğer ptr NULL değil ve boyutta sıfır değilse, realloc, dizi için bellekte yeni uzunluğa sahip bir yer tahsis etmeye çalışır. Eğer yer tahsisi başarılı olursa, realloc fonksiyonu, ayrılan belleğin adresini gösteren bir işaretçi döndürür. Eğer yer tahsisi bir sebepten başarılı olmazsa, realloc fonksiyonu, yer tahsisinin başarılı olmadığını göstermek için bir NULL işaretçisi döndürür. free() fonksiyonu, yer tahsisini iptal eder, böylece ilgili alan, başka programların kullanabilmesi için boşaltılmış olur. Dinamik Bellek Tahsisi #include <stdio.h> #include <stdlib.h> int main() { int *ptr; ptr = (int *) malloc(sizeof (int) * 5); /* yer ayrılıyor */ if (ptr == NULL) { printf("bellek yetersiz!..\n"); return 0; } for (i = 0; i < 5; ++i) /* 2 */ ptr[i] = i; ptr = realloc(ptr, sizeof(int) * 10); /* ayrılan yer genisletiliyor */ if (ptr == NULL) { printf("bellek yetersiz!..\n"); return 0; } return 0; } 4

TEMEL G/Ç FONKSİYONLARI Temel Giriş/Çıkış Fonksiyonları C Programlama dilinde yazılmış pek çok program kullanıcıdan giriş alma ve kullanıcıya bir çıkış üretme ihtiyacını duyar. Belirli C fonksiyonları, girişleri dış birimlerden doğrudan stdin (standard input stream) aracılığıyla alır. stdin, normalde bilgisayar klavyesidir, fakat daha farklı giriş elemanlarından da giriş alınabilir. Veri, çoğunlukla stdout (standart output stream) aracılığı ile dış birimlere gönderilir. stdout, çoğunlukla bilgisayar ekranı olarak düşünülür, fakat daha farklı dış birimlere de çıkış gönderilebilir. Flash disk veya yazıcılara gönderilen çıkış da stdout kanalları üzerinden gerçekleştirilir. Ayrıca stderr olarak isimlendirilmiş bir standart hata kanalı(standard error stream) mevcuttur. stderr kanalı, hata mesajlarını ekrana bastırmak için kullanılan bir kanaldır. 5

Temel G/Ç Fonksiyonları GİRİŞ scanf getchar getch getche gets ÇIKIŞ printf putchar putch puts Giriş Fonksiyonları - scanf scanf fonksiyonu kullanıcıdan giriş almak için kullanılır. stdin kanalı üzerinden, genellikle klavye olan dış birimden okuma gerçekleştirir. scanf prototipi: scanf( D.B., &Degisken); D.B. Dönüşüm Belirteci, kullanıcı tarafından girilen verinin tipi burada belirtilir. &: Değişkenin adresini gösteren operatör Degisken: Okunan değerin içine yazılacağı değişken Girişleri okumak için kullanıcının ENTER tuşuna basmasını bekler. Geri dönüş değeri olarak, okuyup ilgili değişkene yazdığı değer sayısını döndürür. Dosya sonuna ulaşmış ise EOF karakterini döndürür. 6

Giriş Fonksiyonları - scanf scanf '%d' : Giriş tamsayısını işaretli ondalık (decimal) bir sayı olarak kabul eder. '%i' : Girişi işaretli bir tamsayı olarak alır. '%d' ye benzerdir, fakat "0x" ile başlarsa sayıyı onaltılık (hexadecimal) ve 0 ile başladığı zaman sayıyı sekizlik (octal) olarak alır. Örneğin, "031" girişi '%d' kullanılırsa 31, '%i' kullanılırsa 25 olarak okunur. '%u' : İşaretsiz (unsigned) int, short veya char olarak okunur. '%f' : Normal (sabit noktalı) notasyonla kayar noktalı (floating-point) sayıları okur. '%g', '%G' : Kayar noktalı tamsayıyı hem normal hem de exponensiyel şekliyle okur. '%g' küçük harfleri and '%G' büyük harfleri kullanır. '%x', '%X' : Bir tamsayıyı onaltılık(hexadecimal ) sayı olarak okur. '%o' : Bir tamsayıyı sekizlik (octal) sayı olarak okur. '%s' : Karakter dizisini(character string) okur. Scan işlemi boşluk karakteri ile(whitespace) sonlandırılır. Karakter dizisinin sonunda bir (null character ) mevcuttur, bu da ayrılan bellek alanının girilenden asgari bir fazla olmasını gerektirir. '%c' : Giriş olarak tek karakter (char) alır. null karakter ilave edilmez. '(space)': Boşluk (whitespace ) karakterler için kullanılır. '%lf' : double tipinde kayar noktalı sayıları alır. 7

Giriş Fonksiyonları - getchar() Enter tuşuna ihtiyaç duyar. Tek karakter okumak için kullanılır. Prototipi : int getchar(void); Dönüş değeri : Geri dönüş değeri klavyeden alınan karakterin ASCII tablosundaki sıra numarasını gösteren int türünden bir sayıdır. Klavyeden basılan karakterin echo su ekranda görülür. stdio.h, programa dahil edilmelidir. Giriş Fonksiyonları - getch() Tek karakter okumak için kullanılır. Enter tuşuna ihtiyaç duymaz. Kullanımı : int getch(void); Dönüş değeri : Geri dönüş değeri klavyeden alınan karakterin ASCII tablosundaki sıra numarasını gösteren int türünden bir sayıdır. Klavyeden basılan karakterin echo su ekranda görülmez. conio.h, programa dahil edilmelidir. 8

Giriş Fonksiyonları - getche() Tek karakter okumak için kullanılır. Enter tuşuna ihtiyaç duymaz. Kullanımı : int getche(void); Dönüş değeri : Geri dönüş değeri klavyeden alınan karakterin ASCII tablosundaki sıra numarasını gösteren int türünden bir sayıdır. Klavyeden basılan karakterin echo su ekranda görülür. conio.h, programa dahil edilmelidir. Giriş Fonksiyonları gets() stdin kanalından karakter dizisi okumak için kullanılır. Fonksiyon prototipi: char *gets(char *s); s: okunan bilginin yerleştirildiği işaretçi gets() fonksiyonu, yeni satır karakteriyle karşılaşıncaya kadar olan tüm karakterleri okuyarak değişkenin işaret ettiği adrese atar. Fonksiyon başarıyla çalıştırıldığı zaman, fonksiyonun geri dönüş değeri okunan karakter dizisinin kendisi olur. Fonksiyon başarısız olursa, NULL değerini döndürür. 9

Çıkış Fonksiyonları - Printf printf fonksiyonu kullanıcıdan giriş almak için kullanılır. stdout kanalı üzerinden, genellikle ekran olan dış birime çıkış üretir. printf prototipi: printf(f.k.d,degisken); F.K.D: Format Kontrol Dizisi, dönüşüm belirtecini, bayrakları, alan genişliklerini, yaslamayı, kesinlik derecesini ve değişmez karakterleri içerir. Değişken: Çıkış olarak gönderilecek değeri turan değişken F.K.D: Noktalı sayıların yuvarlanması veya kısaltılması Çıkışların sağa veya sola yaslanması Sütun yapılarının oluşturulması Belirli noktalara değişmez karakterlerin yerleştirilmesi Kayan noktalı sayıların ondalık olarak gösterimi İşaretsiz tamsayıların sekizlik veya onaltılık şekline dönüştürülmesi Tüm veri tiplerinin tablo şeklinde yazdırılması Geri dönüş değeri olarak, yazdığı karakter sayısını döndürür.hata oluştuğunda negatif değer döndürür. printf, Dönüşüm Belirteçleri 'd': İşaretli tamsayı(decimal) 'i': İşaretli Tamsayı(integer) 'o': İşaretsiz sekizlik(octal) sayı 'u': İşaretsiz(unsigned) tamsayı 'x' veya 'X': İşaretsiz onaltılık (hexadecimal) tamsayı 'h' ve 'l': (short) veya (long) tamsayı 'e' veya 'E ' : Kayar noktalı sayının exponensiyel gösterimi. 'f': Kayar noktalı sayıların sabit noktalı (fixed-point) gösterimi. 'g' veya 'G': Kayar noktalı sayının değerine göre sabit-noktalı veya exponensiyel gösterimi. 'L': (Long) double tipinde gösterim. 'c' : Karakter gösterimi 's' : Karakter dizisinin gösterimi 10

printf, Gösterim Bilgisi Verinin yazdırılacağı alanın kesin boyutları alan genişliği ile belirlenir. Eğer alan genişliği yazdırılacak sayının genişliğinden büyük ise veri alan içinde otomatik sağa dayanır. %[alan_genişliği][.duyarlılık]dönüşüm_belirteci Tamsayılarda duyarlılık : Eğer yazdırılan değer belirtilen duyarlılıktan daha az basamağa sahip ise sayının önüne fark kadar sıfır konur. Tamsayılar için varsayılan duyarlılık değeri 1 dir. Ondalık sayılarda duyarlılık : Ondalık kısımda yazdırılacak basamak sayısıdır (e, E, f için). Yazdırılacak önemli basamakların sayısıdır (g ve G için). Duyarlılık orijinal değerdeki ondalık, basamak sayısından küçük ise yuvarlama olur. Karakter dizilerinde duyarlılık yazdırılacak karakter sayısıdır. Çıkış Fonksiyonları putchar() stdout çıkış kanalının geçerli pozisyonuna tek karakter yazmak için kullanılır. Fonksiyon prototipi: int putchar(int c); c: girilen karakterin ASCII değeri Geri dönüş değeri olarak yazılan karakteri geri döndürür. Hata oluştuğunda veya dosya sonuna ulaşıldığında EOF karakteri döndürülür. stdio.h dosyası programa ilave edilmelidir. 11

Çıkış Fonksiyonları puts() stdout çıkış kanalına bir karakter dizisi yazdırmak için kullanılır. Fonksiyon prototipi: int puts(const char *s) s ile gösterilen karakter dizisinin stdout a gönderir. En sona da yeni satır karakteri ilave eder. Karakter dizisinin en sonundaki NULL karakteri yazdırılmaz. Eğer fonksiyon başarılı olursa, pozitif bir değer döndürür. Eğer bir hata oluşursa, EOF gönderir ve errno değişkeninin içine hatanın kodunu yazar. stdio.h dosyası programa ilave edilmelidir. ÖDEV ctype.h kütüphanesinde bulunan tüm fonksiyonlar araştırılacak, ne işe yaradıkları öğrenilecek, ve her biri için basit bir uygulama örneği gerçekleştirilecektir. Laboratuarda, bu fonksiyonlarla ilgili çalışmalar gerçekleştirilecektir. 12