Professional Documents
Culture Documents
Programcln temelinde algoritma gelitirme vardr. Program, belirli tasarlanm/gelitirilmi kodlardan oluan bir yazlm parasdr. Veri Yaps (data structure): verilerin saklanma ekli
verilerin etkin olarak saklanmas ve ilenmesi iin kullanlan yap uygun veri yaps yerden kazandrr, algoritmay hzlandrr
Veri Tr: veriyi aklamak zere kurulmutur Veri Modeli (data model): verilerin ilikisel dzeni her problem doas gerei en uygun veri modeline sahiptir veri modeline dayanlarak algoritmik ifadeler ortaya konur
1
temel tanmlamal
topluluk oluturma (struct) ortaklk oluturma (union) bit dzeyinde eriim
Veri Modelleri
balantl liste - aa - graf - durum makinesi veritaban-ilikisel - a balant hash (rp) TODO: ekil eklenecek
devam
devam
Ak izgesi
Internet. Web search, packet routing, distributed le sharing. Biology. Human genome project, protein folding. Computers. Circuit layout, le system, compilers. Computer graphics. Movies, video games, virtual reality. Security. Cell phones, e-commerce, voting machines. Multimedia. CD player, DVD, MP3, JPG, DivX, HDTV. Transportation. Airline crew scheduling, map routing. Physics. N-body simulation, particle collision simulation.
10
Algoritmalar
20.yy bilimi formle dayal 21.yy bilimi algoritmaya dayal algoritma: doann - insann - bilgisayarn ortak dili (Avi Wigderson) Bir ok algoritmaya ihtiya duyulur
Arama - Sralama - Matrissel - Graf- Matematiksel Problem
11
Algoritmann zellikleri
Etkinlik: tekrarlarn olmamas, genel amallk Sonluluk: zyinelilik Kesinlik: kesin sonu/netice, kesin srallk (admlarn sras) sray belirleyen kumanda yaps girdi/kt olmaldr baarm
12
Gndelik yaammzda her zaman hesaplarz: paramz, puanmz, deerlerimizi, yamz vb nitel->nicel: l->hesap bir algoritmann gerekletirilmesi iin programlanmas gerekir -> programlama dili.
13
Soyutlama
Soyutlama: problem ve zm mantksal ve ziksel ynleriyle ayrarak grmeye imkan verir.
Otomobil. Src (kullanc) ve Tamirci arasndaki fark. Mantksal ve ziksel bak kullancya sunulan hizmetler arayz olarak adlanr. tamirci kaputun altndaki ayrntlarla da ilgilenir. bilgisayar kullanclar iin de geerli. Mantksal veya kullanc penceresinden gryorlar. Bilg.Bil., teknoloji destek elemanlar, programclar ve sistem yneticileri, alt-seviye ayrntlar denetlerler. Soyutlamann kullanan= istemci, iler yolunda gittii srece arayz doru yant verdii srece ayrntlar bilmesine gerek yoktur.
14
levsel Soyutlama
Python:Math modl
15
16
Programlama: bir algoritmaya gre bilgisayarn ileyebilecei/yrtebilecei emirlere notasyona (programlama diline) dntrme srecidir.
Bilg.Bil.de programlama nemli bir ara olmann tesi deildir. Programlama, problem zmne temsil retmek Programlama dili, algoritmann temsil edilmesi
17
Veri Tr
bilgisayarda her ey say: 1/0, ikil katar bu katarlara anlam veri trleriyle salanr zmeye altmz probleme ait veri hakknda, ikil veriden yorumlama imkan verir.
18
veri: ikil bit katar --> yorum: tamsay rn. 23, 654, -19 hangi ilemler yrtlebilir: toplama, kartma, arpma vs.
19
problem ve zm ar derecede zor olduunda, bu basit veri trleri ve denetim yaplar problem zme srecinde zorluklara neden olur. Bu karmakl idare etmenin ve zm retmenin kolay bir yolu olmal!
20
problemin ve problem-zmenin karmakln idare etmek: soyutlama gereksinimi byk resme odaklanmak problem dzleminde modeller retmek model: problemin doasna uygun, idaresi kolay, daha verimli
21
Veri Soyutlama
Soyut Veri Tr (ADT): nasl tasarlandna dair ayrntlar gz ard ettirecek veri paralar ve ilemler iin mantksal tanmlama dzlemi.
22
23
1.4.1 Veri
Python= OOP verinin grnn (durum) ve yapabileceklerini (davran) tanmlamak iin snf (class) tanmlarz. OOPda veri eleri== nesneler (objects) bir nesne, bir snfn rneidir (instance)
25
yerleik saysal snf: tamsay, uzun tamsay ve kayar noktal. standart aritmetik ilemler: +, -, * ve ** (st alma) ve parantezle ncelik ayar % modl ileci. bu gibi ilemler yntem (method)
26
devam
>>> 2+3*4 14 >>> (2+3)*4 20 >>> 2**10 1024 >>> 6/3 2 >>> 7/3 2 >>> 7.0/3 2.3333333333333335 >>> 7%3 1 >>> 3/6 0 >>> 3.0/6 0.5 >>> 2**100 1267650600228229401496703205376L
27
Mantk Snf
Doru (True) ve Yanl (False) mantksal ilemler: and, or, not gibi
>>> True True >>> False False >>> False or True True >>> not (False or True) False >>> True and True True >>>
28
devam
Eitlik (==) ve byktr (>) gibi karlatrma ilemlerinin sonular olarakta karmza kar
29
Tanmlayclar
isimler bir harf veya altizgiyle (_) balar byk/kk harf duyarldr herhangi bir uzunlukta olabilir kod okunurluu ve anlalrl yksek isimler tercih edin! deikenler, atama ifadesinin sol yannda yer ald ilk yerde oluturulur deiken, veri parasna bir referanstr, verinin kendine deil!
30
devam
kod
>>> sum = 0 >>> sum 0 >>> sum = sum + 1 >>> sum 1 >>> sum = True >>> sum True
31
devam
sum= 0 ifadesi sum isminde bir deiken ve 0 veri nesnesine bir referans oluturur.
genelde atama ifadesinin sa yan hesaplanr, elde edilen sonuca bir referans deikene atanr
32
devam
verinin tr deitiinde, Python dinamik karakteristie sahiptir
33
34
35
devam
>>> mylist [1, 3, True, 6.5] >>> mylist[2] True >>> mylist + mylist [1, 3, True, 6.5, 1, 3, True, 6.5] >>> False in mylist False >>> mylist * 3 [1, 3, True, 6.5, 1, 3, True, 6.5, 1, 3, True, 6.5] >>> mylist[1:3] [3, True] >>> len(mylist) 4 >>> len(mylist*4) 16 >>>
36
devam
liste indisleri 0 ile balar dilimleme ilemi mylist[1:3], 1den balar, 3 dahil olmamak zere paray alr Tekrarlama ilemi veriden ziyade referansn tekrardr!
37
devam
kod
>>> mylist = [1,2,3,4] >>> A = [mylist]*3 >>> A [[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]] >>> mylist[2]=45 >>> A [[1, 2, 45, 4], [1, 2, 45, 4], [1, 2, 45, 4]] >>>
A deikeni mylist isimlenen deikene referans ierir bu yzden mylistteki bir deiiklik tm referanslarda etki gsterir.
38
range ilevi
39
>>> mylist = [23] * 6 >>> mylist [23, 23, 23, 23, 23, 23] >>>
40
Liste Yntemleri
41
devam
>>> mylist [1024, 3, True, 6.5] >>> mylist.append(False) >>> mylist [1024, 3, True, 6.5, False] >>> mylist.insert(2,4.5) >>> mylist [1024, 3, 4.5, True, 6.5, False] >>> mylist.pop() False >>> mylist [1024, 3, 4.5, True, 6.5] >>> mylist.pop(1) 3 >>> mylist [1024, 4.5, True, 6.5]
42
devam
>>> mylist.pop(2) True >>> mylist [1024, 4.5, 6.5] >>> mylist.sort() >>> mylist [4.5, 6.5, 1024] >>> mylist.reverse() >>> mylist [1024, 6.5, 4.5] >>> mylist.count(6.5) 1 >>> mylist.index(4.5) 2 >>> mylist.remove(6.5) >>> mylist [1024, 4.5] >>> del mylist[0] >>> mylist [4.5]
43
kod
44
>>> "Nurettin" Nurettin >>> myname = "Nurettin" >>> myname[3] e >>> myname*2 NurettinNurettin >>> len(myname) 8 >>>
45
46
devam
>>> myname Nurettin >>> myname.upper() NURETTIN >>> myname.center(20) Nurettin >>> myname.find(e) 3 >>> myname.split(e) [Nur, ttin] >>>
47
Deitirilebilirlik (mutuability)
kod
>>> mylist [1, 3, True, 6.5] >>> mylist[0] = 2**10 >>> mylist [1024, 3, True, 6.5] >>> >>> myname Nurettin >>> myname[0] = X Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: str object does not support item assignment >>>
Tuple
Tuplelar listelere benzerdir, heterojendir string gibi deitirilemezdir eleri virglle (,) ayrlr, parantezle (( )) hapsedilir
mytuple = (2, True, 4.96) mytuple True, 4.96) len(mytuple) mytuple[0] mytuple * 3 True, 4.96, 2, True, 4.96, 2, True, 4.96) mytuple[0:2] True)
>>> >>> (2, >>> 3 >>> 2 >>> (2, >>> (2, >>>
49
Tuple: deitirilebilirlik?
>>> mytuple[1] = False Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: tuple object does not support item assignment >>>
50
Szlkler
key:value iftleri biiminde veri tutulur eleri virglle (,) ayrlr, kvrk parantezle ({ }) hapsedilir
>>> capitals = {Turkiye:Ankara} >>> capitals = {Turkiye:Ankara, Yunanistan:Atina, ... Irak:Bagdat} >>> capitals {Yunanistan: Atina, Turkiye: Ankara, Irak: Bagdat} >>>
51
indis yerine key ile eriim, deitir, ekle, sil. ilk eklenen ilk srada olmayabilir!
>>> capitals[Azerbaycan] = Baku >>> capitals {Azerbaycan: Baku, Yunanistan: Atina, Turkiye: Anka ... Irak: Bagdat} >>> len(capitals) 4 >>>
52
>>> phoneext = {david:1410, brad:1137} >>> phoneext {brad: 1137, david: 1410} >>> phoneext.keys() [brad, david] >>> phoneext.values() [1137, 1410] >>> phoneext.items() [(brad, 1137), (david, 1410)] >>> phoneext.get(brad) 1137 >>> phoneext.get(kent) >>> phoneext.get(kent, NO ENTRY) NO ENTRY >>>
53
>>> counter = 1 >>> while counter <= 5: ... print "Hello, world!" ... counter = counter + 1 ... Hello, world ! Hello, world ! Hello, world ! Hello, world ! Hello, world ! >>>
koul ksmnda bileik yaplar kullanlabilir while counter <= 5 and not done:
54
for
55
for + range
56
kod
>>> wordlist = [cat, dog, rabbit] >>> letterlist = [] >>> for aword in wordlist: ... for aletter in aword: ... letterlist.append(aletter) ... >>> letterlist [c, a, t, d, o, g, r, a, b, b, i, t] >>>
57
if: else
kod
if score >= 90: print A else: if score >= 80: print B else: if score >= 60: print D else: print F
58
if: elif
kod
if score >= 90: print A elif score >= 80: print B elif score >= 60: print D else: print F
59
kod
60
List Comprehension
kod
sqlist = [] for x in range(1,11): sqlist.append(x*x) sqlist 4, 9, 16, 25, 36, 49, 64, 81, 100]
61
List Comprehension - 2
kod
>>> sqlist = [x*x for x in range(1,11)] >>> sqlist [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] >>> >>> >>> sqlist = [x*x for x in range(1,11) if x%2 != 0] >>> sqlist [1, 9, 25, 49, 81] >>> >>> >>> [ch.upper() for ch in comprehension if ch not in aeiou [C, M, P, R, H, N, S, N] >>>
62
kod
>>> def square(n): ... return n**2 ... >>> square(4) 16 >>> square(square(3)) 81 >>>
63
kod
def squareroot(n): root = n/2 for k in range(20): root = (1.0/2)*(root + (n / root)) return root
64
Python OOP bir dildir. Yeni snar retilebilir Veri nesnesinin nasl grndn (durumu) ve ne yapabileceini (yntemler) mantksal olarak tanmlamak iin ADT (soyut veri tr) kullanlr. Soyut veri tr ise snf yardmyla salanr, bu durumda programcya soyutlamann stnlkleri de salanr.
65
Kesir iki paradan oluur: pay ve payda. Kesrin pay ve paydas tamsay.
66
devam
67
devam
e ierir: self, top, bottom. self: nesnenin kendisine referans. lk parametre olmal, arrken verilmez. self.num: pay, self.den: payday. kurucu yntemde ilklendirme yaplmtr. Kesir snfndan bir rnek (instance) oluturmak iin,
myFraction = Fraction(3, 5)
68
devam
devam
>>> myf = Fraction(3, 5) >>> print myf <__main__.Fraction instance at 0xb7d92a8c> >>>
kesir nesnesi myf, print ileviyle arldnda nasl tepki vereceini bilmiyor. bu yzden print myf bildii tek ey olan bellek adresini ekrana dkyor.
70
devam
71
devam
>>> myf = Fraction(3, 5) >>> myf.show() 3 / 5 >>> print myf <__main__.Fraction instance at 0x95c088c> >>>
ikincisi daha geneldir. Tm snara salanan yerleik __str__ ilevinden yararlanlr. ki bu ilev nesneyi stringe evirir.
72
def __str__(self): return str(self.num)+"/"+str(self.den) >>> myf = Fraction(3, 5) >>> print myf 3/5 >>>
73
Aritmetik destek
>>> f1 = Fraction(1,4) >>> f2 = Fraction(1,2) >>> f1+f2 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for +: instance and instance >>>
74
Test
f1 = Fraction(1,4) f2 = Fraction(1,2) f3 = f1.__add__(f2) print f3 f3 = f1 + f2 print f3
75
#Assume that m and n are greater than zero def gcd(m,n): while m%n != 0: oldm = m oldn = n m = oldn n = oldm%oldn return n
76
devam
77
Son durum
78
79
def __cmp__(self,otherfraction): num1 = self.num*otherfraction.den num2 = self.den*otherfraction.num if num1 < num2: return -1 else: if num1 == num2: return 0 else return 1
80
Fraction snf
class Fraction: def __init__(self,top,bottom): self.num = top self.den = bottom def __str__(self): return str(self.num)+"/"+str(self.den) def show(self): print self.num,"/",self.den def __add__(self,otherfraction): newnum = self.num*otherfraction.den + \ self.den*otherfraction.num newden = self.den * otherfraction.den common = gcd(newnum,newden) return Fraction(newnum/common,newden/common) def __cmp__(self,otherfraction): num1 = self.num*otherfraction.den num2 = self.den*otherfraction.num if num1 < num2: return -1 else: if num1 == num2:
81
82
83
devam
liste, ardl koleksiyonu nun ocuudur liste: altsnf, ardl koleksiyonu: spersnf list IS-A sequantial collection.
84
85
Devre
86
87
LogicGate spersnf
class LogicGate: def __init__(self,n): self.label = n self.output = None def getLabel(self): return self.label def getOutput(self): self.output = self.performGateLogic() return self.output
her kapnn performGateLogic() yntemi farkllk gsterir self parametresi: yntemi aran kap nesnesine bir referanstr
88
LogicGate:BinaryGate snf NOT kaps UnaryGate, AND kaps BinaryGate her ikisi de LogicGate in altsnfdr pinler: pinA, pinB
class BinaryGate(LogicGate): def __init__(self,n): LogicGate.__init__(self,n) self.pinA = None self.pinB = None def getPinA(self): return input("Enter Pin A input for gate "+ \ self.getLabel()+"-->") def getPinB(self): return input("Enter Pin B input for gate "+ \ self.getLabel()+"-->")
89
LogicGate:UnaryGate snf
pin: pin
class UnaryGate(LogicGate): def __init__(self,n): LogicGate.__init__(self,n) self.pin = None def getPin(self): return input("Enter Pin input for gate "+ \ self.getLabel()+"-->")
90
LogicGate:BinaryGate:AndGate snf
performGateLogic yntemine dikkat Tasarm
class AndGate(BinaryGate): def __init__(self,n): BinaryGate.__init__(self,n) def performGateLogic(self): a = self.getPinA() b = self.getPinB() if a==1 and b==1: return 1 else: return 0
91
devam
Test
>>> g1 = AndGate("G") >>> g1.getOutput() Enter Pin A input for gate G-->1 Enter Pin B input for gate G-->0 0 >>>
92
Connector snf
93
HAS-A ilikisi
HAS-A: has-a is a relationship where one object (often called the composited object) belongs to (is a part or member of) another object
Connector HAS-A LogicGate: connectors LogicGate in rneklerine sahip, fakat hiyeraride yer almaz. Miras yok.
94
Connector snf
fromGate, toGate, setNextPin
class Connector: def __init__(self, fgate, tgate): self.fromgate = fgate self.togate = tgate tgate.setNextPin(self) def getFrom(self): return self.fromgate def getTo(self): return self.togate
95
setNextPin yntemi
def setNextPin(self,source): if self.pinA == None: self.pinA = source else: if self.pinB == None: self.pinB = source else: print "Cannot Connect: NO EMPTY PINS"
96
def getPinA(self): if self.pinA == None: return input("Enter Pin A input for gate "+ \ self.getName()+"-->") else: return self.pinA.getFrom().getOutput()
97
98
rnek: devre
99
devam (kod)
>>> g1 = AndGate("G1") >>> g2 = AndGate("G2") >>> g3 = OrGate("G3") >>> g4 = NotGate("G4") >>> c1 = Connector(g1, g3) >>> c2 = Connector(g2, g3) >>> c3 = Connector(g3, g4) >>> >>> g4.getOutput() Enter Pin A input for gate Enter Pin B input for gate Enter Pin A input for gate Enter Pin B input for gate 0 >>>
100
1.5 zet Bilg.Bil., problem-zme almasdr Bilg.Bil., hem veriyi hem de veriyi temsil etmek iin soyutlama
aracn kullanr
Soyut Veri Trleri, programcnn problem dzleminin karmakln, veriye dair ayrntlar gizler Python olduka gl, kullanm kolay, OOP dildir Python, altrlabilir szde kod Listeler, tuples ve katarlar Pythonun yerleik ardl koleksiyonlardr Szlkler, ardl olmayan veri koleksiyonudur Snar, soyut veri tr gerekleme Override X yenisini yazmak Snf: hiyerari - miras alma Snf:kurucu, devam etmeden nce ebeveynin kurucusunu arr
101
Anahtar Kelimeler
Soyut Veri Tr, Snf, Veri Yaps, Sarmalama (Encapsulation), Miras, IS-A ilikisi Nesne, Self, Doruluk Tablosu, Soyutlama, Hesaplanabilirlik, Deep Equality, HAS-A ilikisi, Miras Hiyerarisi, Yntem, Yntemsel Soyutlama, Shallow Equality, Algoritma, Veri Tr, Szlk, Bilgi Gizleme, Arayz, Deitirebilirlik (Mutuability), Programlama, Simlasyon
102
Banka hesab iin bir snf hiyerarisi kurun Farkl trdeki bilgisayarlar iin bir snf hiyerarisi kurun Bu blmde verilen snar kullanarak, etkileimli olarak devre kurup, onu test edin.
103
devam
104