You are on page 1of 44

T.C.


LLÎ EĞİ
TİM BAKANLIĞI

MEGEP
(MESLEKİEĞİTİ
M VE ÖĞRETİ
M Sİ
STEMİ
NİN
GÜÇLENDİRİ
LMESİPROJESİ)


LİŞİ
M TEKNOLOJİ
LERİ

VERİYAPILARI

ANKARA 2007
ğıtarafı
Milli Eğitim Bakanlı ndan geliş
tirilen modüller;
 Talim ve Terbiye Kurulu Baş kanlığı nı
n 02.06.2006 tarih ve 269 sayı lıKararıile
onaylanan, Mesleki ve Teknik Eğ itim Okul ve Kurumları nda kademeli olarak
yaygınlaştı
rılan 42 alan ve 192 dala ait çerçeve öğretim programları nda
amaçlanan mesleki yeterlikleri kazandı rmaya yönelik geliş tirilmişöğretim
materyalleridir (Ders Notları
dır).

 Modüller, bireylere mesleki yeterlik kazandı rmak ve bireysel öğ renmeye


rehberlik etmek amacıyla öğrenme materyali olarak hazı ş
rlanmı, denenmek ve
geliş
tirilmek üzere Mesleki ve Teknik Eğ itim Okul ve Kurumları nda
uygulanmaya baş ş
lanmıtır.

 Modüller teknolojik geliş melere paralel olarak, amaçlanan yeterliği


kazandı rmak koş ulu ile eğitim öğ retim sı rası
nda geliş tirilebilir ve yapı
lması
önerilen değiş
iklikler Bakanlı kta ilgili birime bildirilir.

 Örgün ve yaygın eğitim kurumları, işletmeler ve kendi kendine mesleki yeterlik


ı
kazanmak isteyen bireyler modüllere internet üzerinden ulaşlabilirler.

 Bası şmodüller, eğitim kurumları


lmı rencilere ücretsiz olarak dağı
nda öğ tı

r.

 Modüller hiçbir ş
ekilde ticari amaçla kullanı ı
lamaz ve ücret karş ğ
lıında
satı
lamaz.
İ
ÇİNDEKİ
LER

AÇIKLAMALAR ....................................................................................................................ii
Gİ Rİ Ş.......................................................................................................................................1
ÖĞRENME FAALİ YETİ- 1 ...................................................................................................3
1. Dİ ZİLER .............................................................................................................................. 3
1.1. Dizi Değiş kenini Tanı mlama ......................................................................................4
1.2. Dizi Değiş keni ile Veri Saklama................................................................................. 5
1.3. Çok Boyutlu Diziler....................................................................................................5
1.4. Dinamik Diziler ..........................................................................................................7
1.5. Yapı lar ........................................................................................................................8
1.6. Yapı larıDizi Olarak Kullanmak................................................................................. 9
UYGULAMA FAALİ YETİ............................................................................................ 10
ÖLÇME VE DEĞERLENDİ RME .................................................................................. 11
ÖĞRENME FAALİ YETİ- 2 ................................................................................................. 12
2. İŞARETÇİ LER .................................................................................................................. 12
2.1. İşaretçi Nedir?........................................................................................................... 12
2.2. Bağ lı Liste Tanı mlama.............................................................................................. 14
2.3. Bağ lı Listeyi Kullanma .............................................................................................15
2.4. Çift Bağ lıListeler ..................................................................................................... 16
2.5. Dairesel BağlıListeler .............................................................................................. 16
2.6. Yı ğ ın .........................................................................................................................17
2.7. Kuyruk ...................................................................................................................... 17
2.8. Ağ aç .......................................................................................................................... 18
2.9. Grafik ........................................................................................................................ 19
UYGULAMA FAALİ YETİ............................................................................................ 21
ÖLÇME VE DEĞERLENDİ RME .................................................................................. 22
ÖĞRENME FAALİ YETİ- 3 ................................................................................................. 23
3. NESNE TABANLI PROGRAMLAMA ............................................................................23
3.1. Kolay Programlama Yöntemi ................................................................................... 23
3.2. Nesne Kullanı mı ....................................................................................................... 25
3.3. Dil Seçimi ................................................................................................................. 27
UYGULAMA FAALİ YETİ............................................................................................ 29
ÖLÇME VE DEĞERLENDİ RME .................................................................................. 30
MODÜL DEĞERLENDİ RME .............................................................................................. 31
CEVAP ANAHTARLARI ..................................................................................................... 32
SÖZLÜK ................................................................................................................................ 33
KOD ÖRNEKLERİ ................................................................................................................34
ÖNERİ LEN KAYNAKLAR.................................................................................................. 39
KAYNAKÇA .........................................................................................................................40

i
AÇIKLAMALAR

AÇIKLAMALAR
KOD 481BB0027
ALAN Biliş
im Teknolojileri
DAL/MESLEK Alan Ortak
MODÜLÜN ADI Veri Yapı ları
Dizi, işaretçiler ve nesneye yönelik program yazma ile
MODÜLÜN TANIMI
ilgili öğ
renme materyalidir.
SÜRE 40/24
ÖN KOŞUL Yapı şolmak.
sal Programlama Temelleri modülünü almı
YETERLİ
K Veri yapı
ları
yla program yazmaya hazı
rlı
k yapmak
Genel Amaç
Gerekli ortam sağlandı ğ ı
nda, dizi ve iş
aretçileri
tanı
yıp nesneye yönelik program yazabileceksiniz.
Amaçlar
MODÜLÜN AMACI
1. Dizi mantı ğı nıanlayacak ve dizi değişkenleri
kullanabileceksiniz
2. İşaretçiler ile program yazabileceksiniz
3. Nesneye yönelik program yazabileceksiniz

Bilgisayar laboratuvarıve bu ortamda bulunan;


EĞİ
TİM ÖĞRETİ M
bilgisayar, yazıcı , bilgisayar masaları ı
, kâğt, kalem, lisanslı
ORTAMLARI VE
işletim sistemi programıve akı şdiyagramısembolleri ile
DONANIMLARI
ilgili panolar.

Her faaliyet sonrasında o faaliyetle ilgili


değerlendirme sorularıile kendi kendinizi
değerlendireceksiniz. Modül içinde ve sonunda verilen
öğretici sorularla edindiğiniz bilgileri pekiş tirecek,
ÖLÇME VE
uygulama örneklerini ve testleri gerekli süre içinde
DEĞERLENDİ
RME
tamamlayarak etkili öğ renmeyi gerçekleş tireceksiniz.
Sırasıyla araştı
rma yaparak, grup çalı şmaları na katılarak ve
en son aş amada alan öğretmenlerine danı ş arak ölçme ve
değerlendirme uygulamaları nıgerçekleş tireceksiniz..

ii

RİŞ


RİŞ
Sevgili Öğ
renci,

Bu modül ile sizlere diziler, iş


aretçiler ve nesne tabanlıprogramlama konularıile ilgili
yeterlik kazandı racaktır. Öncelikle bu modülü daha iyi anlamanı z için, daha önceki
programlama temelleri modüllerinde kavrayamadı ğ ı
nız yerler varsa onlarıpekiş tiriniz.
Değiş kenler, döngüler ve dosyalama konuları nıtekrar gözden geçirmeniz tavsiye edilir.

Önceki modülleri anlayarak buraya gelmişiseniz, daha ileri seviye programlama


konularına geçebilirsiniz. “Veri Yapı ları” modülü ile bir program yazı
mı nda gerekli olan
bazıeksikliklerimizi gidereceksiniz. Bilgisayarı
n belleğini ve programı
nızdaki verileri daha
etkin kullanacaksı
nı z.

Programlamada veri yapı larıen önemli unsurlardan birisidir. Program yazarken


kullanılacak veri yapı sı nın en ideal ş ekilde belirlenmesi, programcı lı
kta biraz daha
ustalaşman anlamı na gelmektedir. Program içerisinde iş lenecek veriler diziler ile
tanımlanmı şbir veri bloğ u içerisinden seçilebileceğ i gibi, iş
aretçiler kullanılarak daha etkin
şekilde hafı zada saklanabilir. Veri yapı ları, dizi ve iş aretçiler ile yapı lmasının yanı nda,
nesneler ile de gerçekleştirilebilir.

1
2
ÖĞRENME FAALİ
YETİ
–1

ÖĞRENME FAALİ
YETİ- 1
AMAÇ
Mehmet
ğ
Dizi mantıını
anlayacak, dizi ve yapıdeğiş
kenleri kullanabileceksiniz.

ARAŞ
TIRMA
Bu faaliyet öncesinde hazı
rlı ağı
k amaçlıaş da belirtilen araş

rma
faaliyetlerini yapmalısı
nız.

 Banka ve hastane gibi yerlerde kuyrukta bekleyenlerin iş ini kolaylaş tı


ran
“Sıramatik” isimli programıinceleyiniz. Sizce bu program nası l daha kullanışlı
hâle getirilebilir?
 Kargo firmaları nı
n (Aras, Fedex ve DHL gibi) kargo takip programı nı
inceleyiniz. Paketlerin internet üzerinden nası
l takip edildiğini inceleyiniz.

1. Dİ
ZİLER

Birkaç tane değ işken ile küçük programlarıidare edebilirsiniz. Programlamada uzun
ve benzer bilgilerle dolu değ turulması“dizi - array” ile yapı
er listelerin oluş lmaktadı
r. Veri
yapısı
nıaş ağıdaki gibi ayrıdeğiş ken yapabileceğ iniz gibi:

Ad1 = "Ali"
Ad2 = "Veli"
Ad3 = "Mehmet"

Bunun yerine dizi kullanarak, tek değ


işken ile ş
uşekilde yapabilirsiniz:

Ad(1) = "Ali"
Ad(2) = "Veli"
Ad(3) = "Mehmet"
3
Dikkat ederseniz, önceki örnekte 3 ayrıdeğiş kenimiz varken, sonrakinde ise tek
değişken olan “Ad” kullanılmıştı
r. Dizi sayesinde tek değişken ismi ile birden fazla değ
er
saklanabilmektedir.

3 elemanlıbir dizi; Ad

Ad(1) Ad(2) Ad(3)

Ali Veli Mehmet

1.1. Dizi Değ


işkenini Tanı
mlama
Normalde bir değ
işkenin bir adıve bir değeri olabilir. Dizi değişkenlerinin de bir adı
vardı r, ama içinde aynıtürde çok sayı da veri saklanabilir. Tanı mlarken dizinin boyutunu
belirtmemiz mecburidir. Dizi boyutu tam sayıolarak belirtilmeli, negatif girilmemelidir.

Not: Programlama dillerinde genellikle ilk dizi elemanı nı n indis numarası“0”dı r. QBasic dilinde
“Option Base – Taban Seçeneği” ile varsayılan alt limiti 0 veya 1 olarak değiş
tirebilirsiniz.
Dizi elemanlarınıtanı
mlanmadan önce “Option Base 1” olarak seçilmişise, 0. elemandan değil 1.
elemandan baş lanı
r.

1. Baş la
2. Metin Dizi Ad(3)
3. Ad(1) = “Ali”
4. Ad(2) = “Veli”
5. Ad(3) = “Mehmet”
6. Yaz; Ad(1)
7. Yaz; Ad(2)
8. Yaz; Ad(3)
9. Bitir

Resim 1.1: Dizi örneği ve ekran çı


ktı

4
1.2. Dizi Değ
işkeni ile Veri Saklama
Programdaki dizi değ iş
kenlerinin tanı
mlandıklarısatı ş
rlar çalıtırı
ldığında, ana bellekte
dizi boyutunca yer ayrılı
r. Değiş
ken ile olan iş
lem bitince ayrılan bellek bölgesi silinir. Belli
bir bellek alanıayrı lmasından dolayıdizinin maksimum sı nı
rıdı şındaki diğ er bellek
bölgesine eriş
emeyiz.

Dizilere değer aktarma veya okuma iş lemlerinde döngü komutlarıkullanı lmaktadı r.


Hangi döngüyü kullanı rsanı
z kullanın, başlangıç ve bitişdeğerlerini iyi belirleyiniz, yoksa
programınız hata verip kapanır. Sı
nırı
n altı
nda veya üstünde indis vermemek gerekir.

1. Baş la
2. Metin Dizi Ad(3)
3. Sayı sal i, j
4. Döngü i = 1, 3, 1
5. Yaz; i & “. ismi giriniz”
6. Oku; Ad(i)
7. Döngü Bitti
8. Yaz; “Girilen isim listesi”
9. Döngü i = 1, 3, 1
10. Yaz; Ad(i)
11. Döngü Bitti
12. Bitir

Resim 1.2: Döngü ile dizi kullanı


1.3. Çok Boyutlu Diziler


Şimdiye kadar verdiğ imiz örnekler tek boyutlu dizi örnekleridir. Bu tip diziler aynen
tren vagonlarıgibi bellekte peşpeş e değerlere sahip olan değişkenlerdir.

5
Tablolama programları ndaki gibi satı
r ve sütunlu hücrelerden oluş an dizilere; iki
boyutlu dizi denir. Resim 1.3’te görüldüğü gibi herhangi bir hücrenin değerine satır ve sütun
ilebilmektedir. Matematikteki matrisler de çok boyutlu dizilerdir.
bilgisini kullanarak eriş

1. boyut

2. boyut

Resim 1.3: Excel’de bir sayfa 2 boyutlu diziye benzetilebilir

Bir boyut daha eklendiğ inde küp şekline benzeyen 3 boyutlu dizi elde edilir. Bu
dizilerde satı
r ve sütun bilgisinin yanında derinlik bilgisi de eklenir.

1. boyut 2. boyut

3. boyut

Resim 1.4: 3 boyutlu dizi

TextBox5

TextBox6

Resim 1.5: Çok boyutlu dizi örneği, burada dizi 0 indis numarasıile baş

yor

mlanmasıtek boyutlu diziye benzer ş


Çok boyutlu dizilerin tanı ekilde yapı
lmaktadı
r:

6
Başla
Metin Dizi bilgi(2, 6)
Sayısal i, j, satır, sütun
Döngü i = 1, 2, 1
Döngü j = 1, 6, 1
Oku; bilgi(i, j)
Döngü Bitti
Döngü Bitti
Oku; "Satır ve sütun bilgisini giriniz", satır, sütun
Yaz; "Aranan bilgi: ", bilgi(satır, sütun)
Bitir

Bu örnekte 2 satı r ve 6 sütun olduğ u için, 2 * 6 yani 12 adet metin bilgisi


bulunmaktadı r. İki boyut olduğundan iç içe iki döngü hazı k. İ
rladı lk döngünün “i” değişkeni
satır seçicisi, ikinci iç döngünün “j” değiş ş
keni de sütun seçici olarak çalıı
yor. Bilgi(i, j)
üzerine veri aktarı p, döngü sonunda hangi satı r ve sütun isteniyor ise ekrana değ eri
getiriliyor.

1.4. Dinamik Diziler


Çoğ u dil sadece statik sı nı
rlıdizi imkânısunar, yani çalı şma zamanı nda dizilerin
eleman sayı sı
nın sı
nırı
nıdeğ iştiremezsiniz. Eğ er dizi büyük gelmişise dizi kı saltı
lamaz, ya
da tam tersi uzatı
lamaz. Statik dizi içi boşbile olsa hafızada yer kaplamaktadır.

Resim 1.6 : C dilinde dinamik dizi yoktur

zayıetkin kullanmak için “dinamik dizi” kullanabilirsiniz. İ


Hafı sterseniz diziyi
boyutlandı
rabilirsiniz, ya da silebilirsiniz.

Not: Basic dilinde dinamik diziler için “Redim - Boyutlandı r” komutu kullanı

r. Bu komut ile eski dizi
bilgileri silinir. Dizinin değiş
ken türünü değiş
tiremezsiniz.

Dizilerde dizi sı
nırı
nıdeğiş
tirebilirsiniz, ama 2 boyutlu bir diziyi 3 boyutlu dizi
yapamazsınız.

TextBox8 TextBox7

Resim 1.7: Dinamik dizi örneği

7
1. Baş la
2. Metin Dizi dinamikDizi()
3. Sayı sal i, sı
nı r, eleman
4. Oku; “Dizi sı nırınıgiriniz”, sınır
5. Boyutlandı r dinamikDizi(sı nır)
6. Döngü i = 1, sı nır, 1
7. Oku; dinamikDizi(i)
8. Döngü Bitti
9. Oku; “Eleman numarası nı giriniz”, eleman
10. Yaz; dinamikDizi(eleman)
11. Bitir

Dizilerde farklıveri türlerini saklama imkânıyoktur. Yani öğ renci listesinde öğrenci


isimleri metin, öğ renci numaralarısayıtüründe olsun diyemezsiniz. Tüm elemanları n türü
aynı dır. Bu eksiklik “yapı ” kullanı mıile giderilmektedir. Bir yapı da istediğ iniz türde
değ işkenleri beraber tanı
mlayarak tek isim altında kullanabilirsiniz.

1.5. Yapı
lar
“Yapı sal Programlama Temelleri” modüldeki dosyalama kı smı nda, yapılar ve kayıtlar
hakkı nda az da olsa girişbilgisi verilmiş
ti. Sayıve metin değiş
kenleri karışı
k olarak bir yapı
(structure) içine kaydedebiliyoruz.

Ad1 = "Ali"
Notu1 = 45
Ad2 = "Veli"
Notu2 = 55
Ad3 = "Mehmet"
Notu3 = 75


Bunun yerine artı uş
ekilde yapabiliriz:

Ogrenci1.Ad = "Ali"
Ogrenci1.Notu = 45
Ogrenci2.Ad = "Veli"
Ogrenci2.Notu = 55
Ogrenci3.Ad = "Mehmet"
Ogrenci3.Notu = 75

Görüldüğ ü gibi farklıtürlerde birbiri ile ilişkili yapıelemanları“Ad ve Notu”


değ
işkenleri beraber, tek bir isim olan “Ogrenci” yapı

nda toplanı
yor.

Yapı Kisi
Metin Ad
Sayısal Yas
Yapı Bitti
birKisi Kisi

Dosyalama konusunda “Kisi” değ iş


ken isminde yapıhazı rlamıştık. Programcı nı
n
ğ
kendi yaptııdeğiş cıtanı
kenlere “kullanı mlıveri türü – user defined variable” de denir.
8
Yapı
nın Genel Kullanı

KayitDegiskeni.Degisken = "Veri"

Degisken = KayitDegiskeni.Degisken

1.6. Yapı
ları
Dizi Olarak Kullanmak
Dizi olarak kullanımda sadece yapıyıkullanacak değiş
kenin yazı
mıdeğ
işmektedir.
Yani yapıkısmıaynış ekilde tanı
mlanı
rken değiş
ken kısmıdeğişir.

Başla
Yapı birÖğrenci
Metin Ad
Sayısal Notu
Yapı Bitti

birÖğrenci Dizi Öğrenci(3)


Sayısal i

Döngü i = 1, 3, 1
Oku; "Öğrenci adını giriniz ", Öğrenci(i).Ad
Oku; "Öğrenci notunu giriniz ", Öğrenci(i).Notu
Döngü Bitti
Döngü i = 1, 3, 1
Yaz; "Öğrenci adı ", Öğrenci(i).Ad
Yaz; "Öğrenci notu ", Öğrenci(i).Notu
Döngü Bitti
Bitir

9
UYGULAMA
UYGULAMAFAALİYETİ
FAALİ
YETİ

İşlem Basamakları Öneriler


1. Bir dizi oluşturunuz. İsimlendirmede değ
iş ken isimlendirme
kuralları na uyunuz.
2. Dizi elemanı
na değer aktarı
nız. Dizilerin ilk indis numarasıgenellikle 0 veya 1
ile baş lar. Değ er aktardıktan sonra ekranda
değ erlerini listeleyiniz.
3. Döngü içinde diziye veri giriniz ve Genellikle “Döngü – For” döngüsü ile veri giriş
gösteriniz. çıkı şıyapı labilir. Döngünün değiş keni dizinin
ilerlemesi için kullanı lı
r.
4. Bir yapı
oluş
turunuz. Çeş itli veri türlerine sahip değ işkenleri yapı
içine tanı mlayı nı z. Program içinde
tanı mladı ğ ınız yapı yıkullanınız.
5. Yapıdeğ
işkeni ile verileri kontrol Yapı dizi olarak tanı mlanıp, döngü içinde veri
ediniz. giriş i ve ekrana listeleme yapı labilir.

10
ÖLÇME
ÖLÇMEVE
VEDEĞ
DEĞERLENDİRME
ERLENDİ
RME
Ad(1)
A- OBJEKTİ
F TESTLER (ÖLÇME SORULARI)

Aş ağıdaki sorulardan; sonunda parantez olanlar doğ ru / yanlışsorularıdır. Verilen


ifadeye göre parantez içine doğ şise “Y” yazı
ru ise “D”, yanlı z. Şı
nı klısorularda uygun şıkkı
işaretleyiniz.

1. ( ) Ayrıayrıdeğiş mlamak, diziden daha az bellek alanıiş


ken tanı gal eder.

2. ( ) Dizi değiş
kenlerinin indis numaralarısadece tam sayıolabilir.

3. ( ) Dizi içinde ondalı


klıdeğ
erler saklayabiliriz.

4. ( ) Dizi içindeki veriler otomatik olarak sı


ralanı
r.

5. ( ) Hangisini dizi olarak tanı


mlayamayı
z?
A) Yapı
B) Metin
C) Karakter
D) Döngü

6. ( ) Genellikle dizi indisi hangi karakterler arası


na yazı

r?
A) ( )
B) [ ]
C) { }
D) { ( ) }

11
ÖĞRENME FAALİ
YETİ
–2

AMAÇ
ÖĞRENME FAALİ
YETİ- 2

Bu öğ
renme faaliyetinde iş
aretçiler ve iş
aretçi yapı
ları
ile program yazabileceksiniz.

ARAŞTIRMA
Bu faaliyet öncesinde hazı
rlı ağı
k amaçlıaş da belirtilen araş

rma
faaliyetlerini yapmalısı
nız.

 Hangi dillerde bağ lıliste veya iş aretçi (pointer) kullanı


mıvardı r? İ
şaretçi
kullanımının avantajlarıve dezavantajlarınıaraştı
rınız.
 Posta görevlisi mektuplarıadresine nası l ulaştı

yor? Bir mektup gönderenden
alı
cıya giderken hangi aşamalardan geçer, araştırı
nız.

2. İ
ŞARETÇİ
LER
ğ
Bir dizi yaptıını zda boyutunu belirtmek zorunda kalı rsını
z. Eğer dizi çok küçük ise,
bilgilerinizi saklamak için yeterli olmaz, ya da diziniz çok büyükse bilgisayarı n değerli ana
belleğ ini boş una meş gul edersiniz. Dizilerde başka bir problem de içeriğ in kolayca tekrar
düzenlenememesidir. Yani dizi içeriğini alfabetik olarak sı ralamak isterseniz, tüm bilgileri
dışarıalı p, düzenleyip, içine tekrar atmak zorunda kalı
rsınız.

İşaretçiler ve bağlı listeler sayesinde dizinizin uzunluğunu esnek olarak


kullanabilirsiniz.

2.1. İ
şaretçi Nedir?
Dizilerdeki bilgiler peşpeş e kutulara benzetilebilir. Bağ lılisteler ise birbirine
bağ lanmı şayrıkutular olarak düş
ünebiliriz. İ
şaretçiler birbiri ile ilgili olan, düğ
üm halindeki
bilgileri birbirine bağlar.

Tupol dilinde iş
aretçi, yapıve dizi örneklerini inceleyiniz.

İşaretçi değiş kenler sadece “bellek adresi” bilgisini saklayan değişkenlerdir. Diğer
değ kenler ise metin veya sayıolabilirler. İ
iş stenilen değ zadan çağı
eri hafı rmak için adresini
bilmeniz yeterlidir.

İ
şaretçiler C ve C++ programlama dillerinin temel bölümüdür. Yanlı şbellek bölgesine
ulaşmak, kötü bir ş ekilde programın çökmesi ile sonuçlanabilir. Bunu beyninize rastgele
batırı
lan sivri bir iğne gibi düş ünebilirsiniz. İ
şaretçileri hatalıkullanmak bilgisayarı n
belleğini rastgele kurcalamak anlamına gelir.

12
C dilinde işaretçi örneği
#include <stdio.h>
main(){
int i; /* "i" tamsayı değişkenlerdir */
int *iptr; /* "*" işaretçi olduğunu belirtir */
iptr = &i;
/* işaretçiye muhakkak bir de ğ
işken adresi atanır, "&" adres simgesidir */
*iptr = 55;
/* aslında işaretçinin işaret etti ğ
i değişkene 55 değeri atandı */

clrscr();
printf("%d\n",i); /* ekrana 55 yazar */
printf("%d\n",*iptr); /* 55 "i" değişkeninin değeri*/
printf("%X\n",iptr); /* FFC8 "i" değişkeninin hafızadaki adresi*/
printf("%X\n",&iptr); /* FFCA işaretçinin adresi*/
printf("%X\n",&i); /* FFC8 "i" değişkeninin hafızadaki adresi*/
getch();
}

Resim 2.1a: İ
şaretçi değiş
keni tanı
mlanan programı
n çalı
şmadan önceki bellek görüntüsü

Resim 2.1b: İ
şaretçi değiş
keni ve normal bir değiş
kenin bellek görüntüsü

13
2.2. Bağ
lıListe Tanı
mlama
Bağ lılistelerde (linked list) Şekil 2.1’de görüldüğü gibi her eleman birbirine iş
aretçiler
ile bağlıdır. İşaretçinin en son gösterdiği ise “nil veya null” adıverilen boşbir değ erdir.
“Nil” liste sonunu belirtir.

Ası
l verileri yer değiştirerek düzenlemek yerine, iş
aretçiler tekrar düzenlenerek yer
değ
iştirme iş
lemi hı zlıbir ş
ekilde yapılı
r.

3 elemanlıbir dizi; Ad

Ad(1) Ad(2) Ad(3)

Ali Veli Mehmet

liste (linked list)


3 elemanlıbağlı

Düğ
üm (node) Düğüm Düğüm

Ali Veli Mehmet


Boş(nil)

İ
şaretçi (pointer) İ
şaretçi İ
şaretçi

Şekil 2.1: Diziler ve bağlılisteler

Pascal dilinde bağlılisteleri aş


ağı
daki ş
ekilde kullanabiliriz.

 Yeni bir iş
aretçi tanı
mlayalı
m:

TYPE
isaretciAdi= ^KayitTuru;

 Hemen tanı
mlamanı
n altı
nda da yapı
mızı“KayitTuru” tanı
mlayalı
m:

KayitTuru= RECORD
Adi: String[15];
Notu: integer;
Sonraki: isaretciAdi;
END;

14
Alt alta yazı
lan bu satı
rlar ile yeni bir yapıve onun adresini saklayacak bir iş
aretçimiz
oldu. “Sonraki” değ işkeni diğer düğ ümün adresini saklayacaktır.

 Son olarak bu kayı


t yapı

nıbelirten bir değiş
ken tanı
mlayalı
m:

VAR
Dugum: isaretciAdi;

 Kodlarıbir araya getirelim:

Pascal dilinde bağlı liste örneği


PROGRAM bagliListeler;

TYPE
isaretciAdi= ^KayitTuru; {"KayitTuru" yapısının işaretcisi}

KayitTuru= RECORD {yapı veya veri kümesi}

Adi: String [15];


Notu: integer;
Sonraki: isaretciAdi; {sonraki kayıt}

END;

VAR
Dugum: isaretciAdi;

Artı
k programı
mızı
n “kurulum” kı ş
smıtamamlanmıtı
r.

 ğ
Yaptıı
mız değ
işkenlerden sonra, ana programı
n kod yazı
mında ise:

 Bir düğüm oluş turalı


m.
 Düğ üme veri aktaralım
 Düğ ümün işaretçisini düzenleyelim (baş
langı
ç, orta, bitişolarak)

BEGIN
New(Dugum); {Yeni düğüm oluşturduk}
Dugum^.Adi := 'Ali Can'; {Veri aktardık}
Dugum^.Notu:= 45;
Dugum^.Sonraki:= nil; {Bağlı Listeyi sonlandırıyoruz}

writeln('Adı: ', Dugum^.Adi);


writeln('Notu: ', Dugum^.Notu);
readln;
Release(Dugum); {düğümü sildik}
END.

2.3. Bağ
lıListeyi Kullanma
Bir dizi içindeki bir elemanısildiğinizde, hala bellekte yer kaplayan bir boşalan
oluş
ur. Ayrı
ca işe yaramayan bir “boş
luk”, programda istenmeyen hatalara neden olabilir.

15
Bağ
lılistelerde ise düğ
üm silmek çok kolaydı
r:

 Düğ
ümlerdeki iş
aretçileri düzenleyin
 Düğ
ümü silin

Ali Veli Mehmet Boş(nil)

Ali Veli Mehmet Boş

Ali Veli Mehmet Boş

Tek bağ lılistelerin dezavantajıilk kaydıbulmanın mümkün olmaması dı


r. Yani siz
geri yönde gidemezsiniz. Hep sonraki kaydı n bağı ğı
nısakladı mı
z için bu mümkün değildir.
“Ali” düğümü, “Veli” düğümünü gösteriyor, ama “Veli” düğümünün önceki düğüm ile ilgili
hiçbir ipucu yoktur.

2.4. Çift Bağ


lıListeler
İ
ki iş
aretçi kullanarak önceki ve sonraki düğ
ümlerin adres bilgilerini tutabilirsiniz.

Ali Veli Mehmet

Boş(nil) Boş(nil)

2.5. Dairesel Bağ


lıListeler
İ
lk ve son düğ
ümün iş
aretçileri birbirini gösterebilir.

Ali Veli Mehmet

16
2.6. Yı
ğın
Yığ ı
nı(stack), özel tek yönlü bağ lılistelere benzetebiliriz. Ekleme ve silme iş
lemlerini
sadece listenin en baş ı
ndakiler üzerinde yapabilirsiniz. Üst üste tabaklar gibi
düşünebilirsiniz. Alttaki tabaklara ulaş mak için mecburen üstteki tabaklarıkaldı rmak
zorundasınızdı r. Yeni bir tabak gelince de yığı nı
n üstüne koyarsı nız.

mı– Reverse Polish Notation RPN” yöntemi bunu kullanı


“Ters PolonyalıYazı r:

Formül:
(1 + 2) * 4

Aynı
formülün RPN hali:
1 2 + 4 *

Normalde 1 ve 2 toplar, sonucu 4 ile çarparı


z. Sonuç 12 olur. RPN yönteminde ise
m olarak ş
adı öyle yapı

r:

 1 rakamıyı ğını
n en üstüne konur.
 2 rakamıyı ğını
n üstüne konur, 1 alta iner.
 2 ve 1 rakamıyığından çekilerek toplama iş lemi yapılı ğı
r, sonuç olan 3 yı nı
n en
üstüne konur.
 4 rakamıyı ğını
n en üstüne konur, 3 alta iner.
 4 ve 3 rakamıyığından çekilerek çarpma iş lemi yapılı ğ
r, sonuç olan 12 yıını
n en
üstüne konur.

Resim 2.2: RPN yöntemi

ğ
Yıı
nlar genellikle LIFO (Last in First out – Son giren İ
lk çı
kar) yöntemini temel alı
r.

2.7. Kuyruk
Kuyruk (queue) listelerinin iki kuralıvardı r. Birincisi yeni eklenen bilgiler sadece
sona eklenebilir, ikincisi de silinecek bilgi sadece baş tan silinebilir. FIFO (First in First out
–İlk giren ilk çı
kar), yöntemi de denilmektedir.

Sinema kuyruğundaki insanlarıdüş ünün, ilk giren ilk kuyruktan çı kar. Son gelen ise
son çıkar. Kuyruğa girmek isterseniz en sona gitmeniz gerekir, biletini alan müş teri ise en
başta olduğundan kuyruktan ayrılı
r.

17
Resim 2.3: Kuyruk yöntemi
2.8. Ağ

“Ağ aç – Tree” listeleri doğrusal veya dairesel ş
ekilde gitmezler. Kök düğ
üm üzerinde
dalları
n bulunduğ u bir listedir.

Bazıprogramcı lar bu yönteme “ikilik ağaç – binary tree” demektedir. Bir düğ
üm;
boş
luğa, baş
ka bir düğüme veya iki düğ
üme iş aret edebilir.

Genellikle yapay zekâ programlarında kullanır. Mesela bir satranç oyunu olabilir. İ
lı lk
hamle en üstteki köktür. Yapı labilecek her hamlenin ihtimalleri dallara ayrı lır. Karş ı
oyuncunun hareketine göre de ihtimaller değişerek dallar oluş
ur. En son dal “şah – mat” ile
biter.

18
Resim 2.4: Ağaç listesi ve satranç oyunundaki dallanma*
2.9. Grafik
Belli bir ş
ekli olmayan bağlılistelerdir. Bir düğüm bir veya daha fazla düğ
üme iş
aret
edebilir.

Resim 2.5: Grafik yöntemi

ları– neural network” kurulumunda kullanı


Genellikle “sinir ağ lı
r. Beyin de bu
yöntemle iş lem yapmaktadır. Her düğ
üm (neuron), siniri (synapses) temsil eder. Programı
nız
karmaş ıklaştıkça bu geliş miş yöntemleri keş federek algoritmaları nızı yeniden
şekillendireceksiniz.

*
Toplam 10 ^ 120 ihtimal vardı r. Evrendeki tahmini atom sayı
sı10 ^ 75 olduğuna göre bu rakam ile
ı
satranç ihtimallerini karşlaş


nı z.
19
20
UYGULAMA
UYGULAMAFAALİYETİ
FAALİ
YETİ

İşlem Basamakları Öneriler


1. Yapı sal veri tanımlanabilen bir dilde Her dil iş aretçi imkânısağlamaz. Uygun dili
“işaretçi” oluş turunuz. bulmanı z gereklidir.
2. İ
ş aretçiyi bir değiş
kene bağ layı nı
z. Bir değ iş ken tanı mlayı p, ona ait iş aretçi
değ işken tanı mlayı nız.
İşaretçiyi değiş kenin adresine bağlayı nız.
Doğ rudan iş aretçiyi kullanarak değ er atamaları
yapı nı z.
3. Kayıt yapısı
nda bir değ
işken Bir yapıtanı mlayı p, işaretçi ile yapı nın adresini
tanımlayı nı
z. saklayı nı z.
Değ er atayı p, ekrana değ eri listeleyiniz.

21
ÖLÇME
ÖLÇMEVE
VEDEĞ
DEĞERLENDİRME
ERLENDİ
RME
2. boyut
OBJEKTİ
F TESTLER (ÖLÇME SORULARI)

Aş ağıdaki sorulardan; sonunda parantez olanlar doğ ru / yanlışsorularıdır. Verilen


ifadeye göre parantez içine doğ şise “Y” yazı
ru ise “D”, yanlı z. Şı
nı klısorularda uygun şıkkı
işaretleyiniz.

1. İ
şaretçi tanı ğ
mlandıında muhakkak bir değiş
kene bağ
lanmalı
dır. ( )

2. Düğüm (record) içinde sadece sayıbilgisi saklayabiliriz. ( )

3. Kayı
t ve yapıaynıkavramlardı
r. ( )

4. Listeler doğrusal bir ş


ekilde birbirine bağ
lıolarak yapı

rlar. ( )

5. Her listenin sonu “nil - null” ile belirtilmelidir. ( )

6. Hangisi bir veri listesi değ


ildir?
A) Bağlı
B) Çift bağlı
C) Grafiksel
D) Yığı n

22
ÖĞRENME FAALİ
YETİ
–3

AMAÇ
ÖĞRENME FAALİ
YETİ- 3
Nesneye yönelik programlama yapabileceksiniz.

ARAŞTIRMA

Bu faaliyet öncesinde hazı


rlı ağı
k amaçlıaş da belirtilen araş

rma
faaliyetlerini yapmalısı
nız.

 Klasik programlama dilleri ile nesne tabanlıprogramlama dillerinin farkları


nelerdir?
 Yapay zekâ ile ilgili programlarıinceleyiniz. Mesela bilgisayar ile sohbet
programlarıve oyunlar gibi.

3. NESNE TABANLI PROGRAMLAMA

Yapı lan programlarırahat anlaş ılı


r, hı
zlıve görsel nitelikleri zenginleş
tirilmişduruma
getirmek için nesne tabanlıprogramlama dilleri kullanı labilir. Nesne tabalıprogramlama
dilleri ile güvenilir ve hatadan uzak programlama yapı labilir. Yine de OOP (Object Oriented
Programming – nesne tabanlıprogramlama) tek baş ına bir programıdaha okunaklıhale
getiremez.

QBasic ve Visual Basic 6 nesne tabanlıprogramlama dilleri değ


ildir. C#, C++ ve Java
nesne tabanlıdillere örnektir. Hangi dilin OOP olduğ ş
u tartıı
ladursun, biz ş imdilik C++ ile
ilk denemelerimizi yapacağ ız.

3.1. Kolay Programlama Yöntemi


Bilgisayarı
nızın ne kadar güçlü olduğu önemli değ ildir, onun sı

rları
nıyazılı
m
kontrol eder. Yazı
lımların en büyük problemi “güvenilirlik” konusudur. Program sı
k sık
göçmemeli, hata vermemeli ve garip davranmamalı dı r. Daha önceki derslerde bunun
öneminden yaş anmı şörnekler ile bahsetmiş
tik.
23
Güvenilir bir program planlanan zamanda bitmelidir. Tam test etmeden piyasaya
sürmek kötü sonuçlar verebilir.

Eski zamanlarda programlar küçük olduğ u için pek plan ve organizasyon yapmaya
gerek duyulmazdı . Çalışmayan programıprogramcıtekrar yazı yordu. Küçük programlarda
“dene ve hata bul” iş lemi pek zor değ ildir. Büyük programlarda böceklerin daha fazla
saklanacak yerleri vardır. Milyonlarca satır programda “dene ve hata bul” pek işe yaramaz.
Bu nedenle örneğ in bir mimar gökdeleni plansı z olarak inş
a edemez.

Önceki derslerde de anlatı ğ


ldııgibi, büyük programlarıalt programlara bölerek kolay
programlanır hâle getirmiş tik. Ana program yayı mlanmadan önce alt program kodları
kopyala yapıştı
r ile birleştirilir ve derlenir. Burada siz de bir ş üphe duyuyor musunuz?
ş
Mesela çalıma zamanı nda alt programlar diğ er alt programlardan etkileniyor olabilir mi?

OOP’de temel olan konu da alt modüllerin diğ er modüllere müdahale etmemesidir.
Yani araları
nda yalı
tı r. Modüllere “object – nesne” de denir.
m vardı

Bir nesnenin iki temel özelliği vardı


r:
 Veri: Özellikler de denir.
 Komutlar: Metod da denir. Veriyi kontrol eden kodlardı
r.

Nesne diğer kodlara müdahale etmeyeceği için kazancı mı zşunlar olur:


 Güvenilirlik: Program çalı şmadı ğı
nda, böcekli nesne alınır ve düzeltilir, tüm
programı n elden geçirilmesine gerek kalmaz.
 Tekrar kullanı labilme: Teorik olarak nesneleri alı p baş ka program içinde
rahatlıkla kullanabilirsiniz. Böylece yeni program yazarken daha hı zlıiş lerinizi
bitirebilirsiniz.

Bu kazançları“inheritance – miras alma, kalı t alma, devralma” sayesinde elde


ederiz. Var olan kodu tekrar kullanabilmek, programcı
nın daha fazla ilerlemesini sağ
lar.

Resim 3.1: Klasik programlama ve nesne tabalıprogramlama

24
Klasik programlamada alt program diğer alt programı n verisine ulaş
abilir. Nesne
tabanlıprogramlamada ise nesneler verilerini korurlar. Bu korumaya “encapsulation –
kuş atma” denir.
3.2. Nesne Kullanı

Programlamada en büyük sorun, var olan kodu güncellemektir. Programcıbuna
yılları ş
nıverir. Zaten çalıan bir programıgüncellemek
yepyeni program yazmaktan kolaydı r. Nesne tabanlı
programlamada, sadece güncellenmesi gerekli nesne
üzerine ş
çalııldığından programcının işi
kolaylaşı
r.Nesne tabanlıprogramlama bu sebeple çok
tutulmuştur.

Uzaylı larıvurduğuz bir oyunda, ekrana gelen


uzaylıları
n görünümünü değiş tirmek için yapmanı z
gereken; uzaylınesnesini alıp, değiş r. Sadece ş
tirip, yeniden eski yerine koymaktı ekil değil,
hareketlerini de bu ş
ekilde güncelleyebilirsiniz.

Nesnedeki Veriyi Saklama veya Gösterme


Nesneler de birbirleri ile veri alışverişinde bulunabilir. “private, public ve protected”
bu iş
lem için yapılmı ştır.
 Private (özel): Nesne verisini ve kodunu paylaş ıma açmaz.
 Public (paylaş ıma açı k): Herkes nesnenin verisini ve kodunu kullanabilir.
 Protected (korumalı ): Eğer varolan bir nesne miras alma yöntemiyle
kopyalanı p yeni bir nesne oluş turulursa, yeni nesne sadece paylaş ıma açı k
(public), korumalı(protected) veri ve komutlarımiras alı r. Özel (Private) veri
ve komutlar eski nesnede kalı r, yeni nesneye aktarılmaz.

Yeni bir nesne oluşturmanı mı“class – sı


n ilk adı nıf” oluş
turmaktı
r. Sı

f daha önceki
derste gördüğ ümüz yapı ya benzer. Bir sı nı f, veriyi kullanmak için veri ve kod
tanımlamalarınıtanı mlar. Bir sı
nıf nesne değildir. Nesneyi bir değiş
ken gibi tanı
mlayıp,
sını
ftan oluş
turursunuz.

 Bir sı
nıftan nesneler türetebilirsiniz:

class canavar
{
public:
int x_koordinati;
int y_koordinati;
void hareketEt(int, int);
void ilklendirme(int, int);
};

İşte ilk sı
nıfı
mızıyazdı
k. Gördüğünüz gibi sı nı
fımı zın “x_koordinati ve y_koordinati”
olarak tam sayıtüründe 2 özelliğ
i var. “hareketEt ve ilklendirme” olarak da 2 metodumuz
var.

25
 Bu hazı
rlı
ktan sonra, yapmamı
z gereken metotları
n kodları
nıhazı
rlamaktı
r:

void canavar::hareketEt(int yeni_x, int yeni_y)


{
x_koordinati = x_koordinati + yeni_x;
y_koordinati = y_koordinati + yeni_y;
}
void canavar::ilklendirme(int ilk_x, int ilk_y)
{
x_koordinati = ilk_x;
y_koordinati = ilk_y;
}

 Son olarak da ana programı


mızıyazı
yoruz:

int main(int argc, char *argv[])


{
canavar zombi; //‘canavar’ sınıfından ‘zombi’ nesnesi üretiyoruz
zombi.ilklendirme(12, 15);

printf("Ilk C++ Programimiz\n");


cout << "Zombimizin X olarak yeri " << zombi.x_koordinati << "\n";
cout << "Zombimizin Y olarak yeri " << zombi.y_koordinati << "\n";

zombi.hareketEt (34, 9);

cout << "X olarak zombinin yeni yeri " << zombi.x_koordinati << "\n";
cout << "Y olarak zombinin yeni yeri " << zombi.y_koordinati << "\n";

system("PAUSE");
return 0;
}

Resim 3.2: C++ örneğimizin çı


ktı

Genel Olarak OOP Deyimleri

Bu özet sizi profesyonel OOP’ci yapmasa da, bu temel kelimeleri anlamaya çalı ş alı
m:
 Encapsulation (kuş atma): İlgili veri ve kodlarıtek bir yerde toplamak
 Inheritance (miras alma): Bir nesneden diğerine veri ve kod geçirmek
 Method (olay, komut): Nesnenin verilerini manipüle eder
 Object (nesne): Bir ünitede gruplanmı şveri ve komut koleksiyonudur
Nesnenin genellikle “initialize – ilkleme” olayıolmalı dı
r. Varsayı lan olarak ilk kez
nası
l oluş
turulacağ ı
nıbelirtiriz.

26
Aslı
nda bu yapılanlar klasik programlamadaki alt programlara benziyor. Ama ş
imdiye
kadar hiç bir yapıya olay eklememiş tik ve bu kadar geliş mişdeğ işken tanı
mlaması
gerekmemişti.

Resim 3.3: Sı
nıf (class) ve nesne (object)

Resim 3.4: Nesnelerin mesajlaş


ması
3.3. Dil Seçimi
Nesne tabanlıprogramlama dilleri ana olarak ş
uşekilde gruplandı


rlar:

 Karma (hybrid) nesne tabanlıprogramlama dili: Eski bir dil üzerine OOP
özellikleri eklenmişise dil karma olur. Mesela Pascal üzerine yapı
lmışDelphi,
C üzerinde C++ gibi…
 Saf (pure) nesne tabanlı programlama dili: SmallTalk, Eiffel, C# ve Java gibi
doğrudan OOP özelliklerine sahip olarak yazılmı şdiller.

Karma bir dil eski dili bilen birinin, nesne tabanlıdile geçiş ini kolaylaştı
rmak için
yapılmı ş
tır. En az eğ itim ve deneyim ile OOP’ye geçiş i sağlar. Programı n küçük bir kı
smını
nesne tabanlı , kalan büyük kı smınıeski klasik programlama yöntemleri ile yazabilirsiniz.
27
Aslı
nda en iyisi doğrudan saf bir OOP dili ile programlamaya baş lamaktır. Böylece
programları mız karmaş ık ve düzensiz olmaz. Tabii tek baş ına OOP ile düzenli ve kolay
okunur program yazamazsı nı
z. Yazı lı
m tekniğ inizi, problem çözüm yöntemlerinizi
geliş
tirmelisiniz.

Yazılı
mıkullanacak olanlar, sizin gece geç saatlere kadar çalı ş
tığınızı, hangi
programlama dilini kullandı ğ ınızıumursamaz. Zamanı ş
nda biten, çalıır halde olan program
satı
lır, rağ
bet görür. Ondan sonra da artık siz patron olursunuz, kravatınızıtakar, rakibinizi
geçmek için politikalar geliş
tirirsiniz.

Resim 3.6: Öğrenme grafiği

Resim 3.5: Program yapı


m aş
amaları

28
UYGULAMA
UYGULAMAFAALİYETİ
FAALİ
YETİ

İşlem Basamakları Öneriler


1. Sınıf tanı mlamak için uygun bir dil Karma veya saf nesne tabanlıprogramlama
seçiniz dillerini karşılaştırını z.
2. Bir sınıf tanımlayı nız “canavar” örneğ indeki gibi siz de sı nıf
3. Sınıfa ait olaylar oluş turunuz oluş turabilirsiniz. Mesela taşıtlar için “tasit”
4. Sınıftan nesne oluş turunuz sınıfıgibi.
“canavar” örneğ indeki gibi sınıfa “hareketEt”
gibi metod ekleyiniz.
“tasit” nesnesinden de örneğin araba, kamyon
nesneleri yapı labilir.
5. Nesnenin ilklenme (initialize) ve Program içinde nesnenin olayları
nıkontrol
diğer olayları
nıyazınız ediniz.

29
ÖLÇME
ÖLÇMEVE
VEDEĞ
DEĞERLENDİRME
ERLENDİ
RME
1. boyut
A- OBJEKTİ
F TESTLER (ÖLÇME SORULARI)

Aş ağıdaki sorulardan; sonunda parantez olanlar doğ ru / yanlışsorularıdır. Verilen


ifadeye göre parantez içine doğ şise “Y” yazı
ru ise “D”, yanlı z. Şı
nı klısorularda uygun şıkkı
işaretleyiniz.

1. Nesne tabanlıprogramlamada, klasik programlamadaki döngü ve dallanma gibi


komutlar yoktur. ( )

2. Her nesne oluş


turulur oluş
turulmaz, hemen ilklendirilmelidir. ( )

3. Programı
mızınesnelere böldüğümüzde, dünyadaki tüm programcı
lar bizim
programı
mızıanlayabilirler. ( )

4. “Encapsulation –kuş
atma” nesnenin diğer nesnelerin komutları
na eriş
ememesidir.( )

5. Aşağ ıdakilerden hangisi ile nesnenin değiş


ken değ
erlerini korumayı
z?
A) private - özel
B) void - boş
C) protected - korumalı
D) public – paylaşıma açı k

6. Nesne tabanlıprogramlamada hangisi nesne ile ilgili değildir?


A) Miras alma
B) Kuş atma
C) Alt program
D) Metod

30
MODÜL DEĞERLENDİ
RME

MODÜL DEĞERLENDİ
RME
PERFORMANS TESTİ(YETERLİ
K ÖLÇME)

Modül ile kazandığını


z yeterliği, öğretmeniniz iş
lem basamakları
na göre 0 ile 10 puan
nda olacak ş
arası eklinde değ
erlendirecektir.

DEĞERLENDİ
RME KRİ
TERLERİ Puan
Tek isim vererek, birçok veriye dizi kullarak ulaş
ma
Bir dizi elemanı
na değer aktarma
Döngü içinde diziye veri girme ve gösterme
Çeş
itli veri türlerine sahip değ
işkenleri yapı
ile kontrol etme
Yapı
sal veri tanı
mlanabilen bir dilde iş
aretçi oluş
turma
Kayı
t yapı

nda bir değiş
ken tanı
mlama
İ
şaretçiyi bir değ
işkene bağ
lama

nıf tanı
mlamak için uygun bir dil seçme
Bir sı
nıfıtanı
mlayan nesne yazma
Nesnenin ilklenme olayı
nıyazma
Toplam (en fazla 100 puan olabilir)

DEĞERLENDİ
RME

ğı
Yaptı nı
z değ
erlendirme sonucunda eksikleriniz varsa öğ
renme faaliyetlerini
tekrarlayı
nız.

Modülü tamamladı nız, tebrik ederiz. Öğ retmeniniz size çeş


itli ölçme araçları
uygulayacaktı
r. Öğretmeninizle iletiş
ime geçiniz.

31
CEVAP ANAHTARLARI

CEVAP ANAHTARLARI
ÖĞRENME FAALİ
YETİ1 CEVAP ANAHTARI

1 D
2 D
3 D
4 Y
5 D
6 A

ÖĞRENME FAALİ
YETİ
-2 CEVAP ANAHTARI

1 D
2 Y
3 D
4 Y
5 Y
6 C

ÖĞRENME FAALİ
YETİ
-3 CEVAP ANAHTARI

1 Y
2 D
3 Y
4 D
5 D
6 C

Cevapları
nı ı
zıcevap anahtarlarıile karşlaş

rarak kendinizi değ
erlendiriniz.

32
SÖZLÜK
SÖZLÜK
İ sim Okunuş Anlam
priority prayoriti iş
lemciye yaptı

lan iş
lemlerin öncelik değ
erleri
procedure pir ı
siicı
r yordam, prosedür
project pricekt proje, tasarı
prompt prompt uyarı
, MS-DOS sistem hazı
r simgesi c:\> gibi
protect prı
tekt korumak, protection – koruma
queue kyu kuyruk
real riı
l ondalı
klı
sayı
lar
recognize rikı
gnayz tanı
mak
record rikı
rd rekor, kayı
t
recover rikavı
r bilgileri kurtarmak
recursive rikörsiv kendini çağı
ran fonksiyon
register recı
stı
r yazmaç, kayı
tlı
kullanı
cıolmak
registry recı
stri Windows kayı
t bilgileri
reserve rizörv ayı
rmak, rezervasyon
revert rivört geri dönüş
türmek, kurtarmak
root ruut kök, ana dizin
scene sin sahne
script sı
kript yardı
mcı
programlama dili, el yazı

scroll skrol kaydı
rmak
sector sektı
r bölge, disk iz parçası
sequence sikuins sı
ra
server sörvı
r ana bilgisayar, sunucu
set set küme, takı
m, ayarlamak (setting)

33
KOD ÖRNEKLERİ

KOD ÖRNEKLERİ

Her iki örnekte de 3 isim bilgisi saklanı


r. Ekran görüntüleri aynı
dır. Acaba neden
değiş
kenlerin tanı
mlandığıyer olan DIM kı smında birinci örnekte 3, ikinci örnekte 2
yazmaktadır?

34
TextBox1 TextBox4

TextBox2

TextBox3

Dizinin sı
nırlarıdı
şı
nda bir değer çağrı
lmasıhatası
; “Index Out Of Range”

Visual Basic çok boyutlu dizi örneğinde eğer “DataGridView1”de yeterli veri
girilmemişise nası
l bir hata meydana gelebilir? Nası
l bir önlem alı
rsı
nız?

35
Visual Basic dilinde çok boyutlu dizi örneği
Private Sub Button4_Click
Dim bilgi(1, 5) As String 'İki boyutlu dizi tanımlama kısmı
Dim i, j As Integer
For i = 0 To 1
For j = 0 To 5
bilgi(i, j) = DataGridView1.Item(i, j).Value
Next
Next
MsgBox("Arama sonucu " & bilgi(TextBox5.Text, _
TextBox6.Text))
End Sub

Dinamik dizi örnek programı nda, dizi hazı


rlanmadan arama yapı

rsa nası
l bir hata
meydana gelebilir? Nası
l bir önlem alı
rsı
nız?

Visual Basic dilinde dinamik dizi örneği


Dim DinamikDizi() As String 'dizi boyutu belli değil

Private Sub Button6_Click


ReDim DinamikDizi(TextBox8.Text) 'kullanıcı boyutu girdi
Dim i As Integer
For i = 0 To TextBox8.Text 'kullanıcı değerleri giriyor
DinamikDizi(i) = InputBox("Eleman değeri")
Next
End Sub

Private Sub Button5_Click 'aranan eleman ekrana gelir


MsgBox(DinamikDizi(TextBox7.Text))
End Sub
C dilinde yapı örneği
struct birOgrenci{
char *Ad;
int Notu;
}Ogrenciler;

main()
{
Ogrenciler.Ad = "Ali Can";
Ogrenciler.Notu = 34;
printf("Bir öğrencinin adı ve notu: %s %d",
Ogrenciler.Ad, Ogrenciler.Notu);
}

36
Yapıdizisi kullanı

C dilinde yapı dizisi örneği


#include <stdio.h>

struct birOgrenci{
char *Ad[15];
int Notu;
}Ogrenciler[2]; //Dizi olarak yapı tanımlanması

main()
{
int i;
clrscr(); //Yapı içine veri aktarma
for (i=0; i<3; i++) {
fflush(stdin);
gets(Ogrenciler[i].Ad);
scanf("%d",&Ogrenciler[i].Notu);
printf("\n");
}
for (i=0; i<3; i++){//Veri çıktısı alma
printf("\n%d öğrencinin adı ve notu: %s %d", i,
Ogrenciler[i].Ad, Ogrenciler[i].Notu);
}
}

Aşağı
daki iş
aretçiler ile ilgili C dilinde olan satı
rları
nıinceleyiniz.

char *hata = "Dosya yok!" //metin işaretçilere ilk değer atanabilir

int *iptr;
iptr = (int *) 0x1b64;
//Belli bir adres işaretçiye atanabilir, ama tehlikelidir, neden?
*iptr = 2001; //işaretçiye değer aktarımı
printf ("\n%p", iptr); //ekrana 1B64 yazar
printf ("\n%d", *iptr); //ekrana 2001 yazar
printf ("\n%X", &iptr); //ekrana FFF2 benzeri işaretçinin adresini yazar

char far *cptr; //1 MB (0-FFFFF) içinde tanımlanabilen işaretçi


p = (char far *) 0x124532bc //1245 segment, 32bc offset adresidir

char far *ekran = (char far *) 0xb8000000;


//B800 DOS’un ekran bilgilerinin tutulduğu yerdir
*(ekran+20) = '#';
*(ekran+21) = 10;
//metin ekranın ilk satırının 11. sütununa # karakterini basar
//Neden 20 deyince 11. sütun oldu?
//Not: Çift adresler veri, tek adresler renk bilgisi olarak kullanılır

int a[3] = {12, 55, 88}; //üç elemanlı dizi ve ilk değer atamaları
int *iptr; //int *iptr = a; da olabilirdi
iptr = a;

37
//dizi başlangıç adresi & ile gösterilemez
printf ("\n%d",*(iptr+1));
//ekrana 55 yazar
printf ("\n%d", iptr[2]);
//ekrana 88 yazar; *(iptr+2) ile iptr[2] aynı anlamdadır

void deneme (int *iptr) //fonksiyona bir değişkenin adresi gelecek


{
*iptr=100; //işaretçinin gösterdiği yere değer aktarılır
}
void main(void) //void ne anlama gelir?
{
int x;
deneme (&x); //x değişkeninin adresi fonksiyona yollanır
printf ("%d", x); //ekrana 100 yazar
}

char *ad_oku (void) //değer döndüren fonksiyon


{
char s[50];
printf ("Adınız=");
gets(s);
return s; //okunan metnin değeri gönderilir
}
main()
{
char *cptr;
cptr= ad_oku();
//dönecek değer ancak bir char tipi işaretçiye aktarılabilir
printf("%s", cptr);
}

Üstte ekran belleğine ulaş ma ile ilgili bir örnek vardır. Sizce belleğin istediğiniz
ı
yerine ulaşlmasıprogramcı ya özgürlük mü sağlı yor, yoksa tam tersine, hazı r ekrana yazı
yazma komutlarıdururken böyle işlem yapmak, daha da kı sı
tlıbir ortam mısağlı yor?

38
ÖNERİ
LEN KAYNAKLAR

ÖNERİ
LEN KAYNAKLAR
 computer.howstuffworks.com

 en.wikipedia.org/wiki/Pointer

 java.sun.com/docs/books/tutorial/java

 www.bloodshed.net/devcpp.html

 www.robsite.de/programme.php?prog=ccompiler

 www.seslisozluk.com

 www.yunus.projesi.com

39
KAYNAKÇA

KAYNAKÇA
 BAĞRIYANIK Tarı k, Programlama Ders Notlarıve UygulamalıGenel
Programlama Kitabı(www.yunus.projesi.com)

 WALLACE Wang, Beginning Programming for Dummies, Wiley Bası


mevi,
Indianapolis, 2004

40

You might also like