You are on page 1of 56

stanbul niversitesi Elektrik Elektronik Mhendislii

PROGRAMLAMA VE C

Kaynak: C ve Sistem Programclar Dernei Kurs notu r.Gr. Mahmut YALIN

Yazlm (software) programlama ve programlamayla ilgili konularn geneline verilen isimdir. Yazlmn Snflandrlmas Bilimsel ve mhendislik yazlmlar (scientific & engineering software).

Mesleki yazlmlar (Business software).

Yapay zeka yazlmlar (artificial intelligence software).

Sistem yazlmlar (system software)


Grntsel yazlmlar.
stanbul niversitesi Elektrik Elektronik Mhendislii

Bilimsel ve mhendislik yazlmlar (scientific & engineering software). Bilimsel ve mhendislik konularndaki problemlerin zlmesinde kullanlan programlardr. Bu tr programlarda veri miktar greli olarak dktr ancak matematiksel ve istatistiksel algoritmalar youn olarak kullanlabilir. Tamamen hesaplama arlkl ilemler ierir. Bu tr programlar arlkl olarak bilgisayarn Merkezi lem Birimini (CPU) kullanrlar. Elektronik devrelerin zmn yapan programlar, istatistik analiz paketlerini bu tr programlara rnek olarak verebiliriz. Mesleki yazlmlar (Business software). Veri taban arlkl yazlmlardr. Genel olarak verilerin yaratlmas, ilenmesi ve dosyalarda saklanmas ile ilgilidir. Bu tr programlara rnek olarak stok kontrol programlar, mteri takip programlar, muhasebe programlarn verebiliriz.
stanbul niversitesi Elektrik Elektronik Mhendislii

Yapay zeka yazlmlar (artificial intelligence software). nsan davranlarn taklit etmeyi amalayan yazlmlardr. rnek olarak robot yazlmlar, satran ya da bri oynatan programlar vs. verilebilir. Grntsel yazlmlar. Grntsel ilemlerin ve algoritmalarn ok youn olarak kullanld programlardr. rnek olarak oyun ve animasyon yazlmlarn verebiliriz. Bu yazlmlar arlkl olarak bilgisayarn grafik arabirimini kullanrlar.

Sistem yazlmlar (system software): Bilgisayarn elektronik yapsn yneten yazlmlardr. Derleyiciler, haberleme programlar, iletim sistemi birer sistem yazlmdr. Uygulama programlarna gre daha dk seviyeli ilem yaparlar.

stanbul niversitesi Elektrik Elektronik Mhendislii

Programlama Dillerinin Snflandrlmas

----- Seviyelerine gre snflandrma.


----- Uygulama alanlarna gre snflandrma. Bir programlama dilinin seviyesi deyince o programlama dilinin insan algsna olan yaknlnn derecesini anlyoruz.

Bir programlama dili insan alglasna ne kadar yaknsa o kadar yksek seviyeli demektir (high level).
Yine bir programlama dili bilgisayarn elektronik yapsna ve alma biimine ne kadar yaknsa o kadar dk seviyeli (low level) demektir.
stanbul niversitesi Elektrik Elektronik Mhendislii

Bir bilgisayar yalnzca kendi makina dilini dorudan anlayabilir. Makina dili bilgisayarn doal dilidir ve bilgisayarn donanmsal tasarmna baldr. Bilgisayarlarn gelitirilmesiyle birlikte onlara i yaptrmak iin kullanlan ilk diller de makina dilleri olmutur. Bu yzden makina dillerine 1. kuak diller de diyebiliriz.

Temel problemler
Makina dilinde yazlan kodlar dorudan makinann ilemcisine, donanm paralarna verilen komutlardr. Deiik bir CPU kullanldnda ya da bellek organizasyonu farkl bir ekilde yapldnda artk program almayacak ve programn tekrar yazlmas gerekecektir. nk makina dili yalnzca belirli bir CPU ya da CPU serisine uygulanabilir. Makina dili tanabilir (portable) deildir.

? ? ?

stanbul niversitesi Elektrik Elektronik Mhendislii

Dier nemli bir problem ise, makina dilinde kod yazmann ok zahmetli olmasdr.Yazmann ok zaman alc ve uratrc olmasnn yan sra yazlan program okumak ya da alglamak da o denli zordur. zellikle program boyutu bydnde artk makina dili programlarn gelitirmek, daha bytmek iyice karmak bir hale gelir.

1950 li yllarn hemen balarnda makina dili kullanmn getirdii problemleri ortadan kaldrmaya ynelik almalar younlat. Bu yllarda makina dilleri bilgisayarn ok snrl olan belleine ykleniyor ve programlar byle altrlyordu. lk nce makina dilinin alglanma ve anlalma zorluunu ksmen de olsa ortadan kaldran bir adm atld.

stanbul niversitesi Elektrik Elektronik Mhendislii

Sembolik makina dilleri gelitirildi. Sembolik makina dilleri (Assembly languages) yalnzca 1 ve 0 dan oluan makina dilleri yerine ngilizce baz ksaltma szcklerden oluuyordu. Sembolik makina dillerinin kullanm ksa srede yaygnlat. Ancak sembolik makina dillerinin makina dillerine gre ok nemli bir dezavantaj sz konusuydu. move---- mov addition---- add jump---- jmp Intel 8086

Bu dillerde yazlan programlar makina dilinde yazlan programlar gibi bilgisayarn belleine ykleniyor ancak programn altrlma aamasnda yorumlayc (interpreter) bir program yardmyla sembolik dilin komutlar, bilgisayar tarafndan komut komut makina diline evriliyor ve oluan makina kodu altrlyordu.

stanbul niversitesi Elektrik Elektronik Mhendislii

Bu dnemde zellikle iki yorumlayc program ne kmt: John Mauchly nin UNIVAC 1 iin yazd yorumlayc (1950) John Backus tarafndan 1953 ylnda IBM 701 iin yazlan "Speedcoding" yorumlama sistemi.

Bu tr yorumlayclar makina koduna gre ok yava alsalar da programclarn verimlerini artryorlard.

Ama zellikle eski makina dili programclar yorumlayclarn ok yava olduklarn, yalnzca makina dilinde yazlanlarn gerek program deneceini sylyorlard.

stanbul niversitesi Elektrik Elektronik Mhendislii

Description of the UNIVAC I: The machine was 25 feet by 50 feet in length, contained 5,600 tubes, 18,000 crystal diodes, and 300 relays. It utilized serial circuitry, 2.25 MHz bit rate, and had an internal storage capacity 1,000 words or 12,000 characters.

The IBM 701 Defense Calculator (1952) was IBM's first production computer. It rented for about $16,000 per month.

Bu sorunun da stesinden gelindi. O zamanlar iin ok parlak kabul edilebilecek fikir uydu: Her defasnda yazlan kod, kodun altrlmas srasnda makina diline evireceine, gelitirilecek bir baka program sembolik dilinde yazlan kodu bir kez makina diline evirsin ve artk program ne zaman altrlmak istense, bilgisayar yorumlama olmakszn yalnzca makina kodunu altrsn. Bu fikiri gelitiren Grace Hopper isimli bir bayand. Grace Hopper'n buluuna "compiler" derleyici ismi verildi.

Artk programclar sembolik szcklerden oluan Assembly programlarn kullanyor. Yazdklar programlar derleyici tarafndan makina koduna dntrlyor ve makina kodu eski hzndan birey kaybetmeksizin tam hzla alyordu. Assembly diller 2. kuak diller olarak tarihte yerini ald.
stanbul niversitesi Elektrik Elektronik Mhendislii

Assembly dillerinin kullanlmaya balamasyla bilgisayar kullanm hzla artt. Ancak en basit ilemlerin bile bilgisayara yaptrlmas iin bir ok komut gerekmesi, programlama prosesini daha hzl bir hale getirmek iin araylar balatm, bunun sonucunda da daha yksek seviyeli programlama dilleri gelitirilmeye balanmtr.

Assembly dillerinden daha sonra gelitirilmi ve daha yksek seviyeli diller 3. kuak diller saylmaktadr. Bu dillerin hepsi algoritmik dillerdir.

stanbul niversitesi Elektrik Elektronik Mhendislii

FORTRAN dili (FORmula TRANslator) kompleks matematiksel hesaplamalar gerektiren mhendislik ve bilimsel uygulamalarda kullanlmak zere 1954 - 1957 yllar arasnda IBM firmas iin John Backus tarafndan gelitirilmitir. FORTRAN dili, youn matematik hesaplamalarn gerektii bilimsel uygulamalarda halen yaygn olarak kullanlmaktadr.

stanbul niversitesi Elektrik Elektronik Mhendislii

COBOL (COmmon Business Oriented Language) 1959 ylnda, Amerika'daki bilgisayar reticileri, zel sektr ve devlet sektrndeki bilgisayar kullanclarndan oluan bir grup tarafndan gelitirilmitir. COBOL'un gelitirilme amac veri ynetimi ve ilemenin gerektii ticari uygulamalarda kullanlacak tanabilir bir programlama dili kullanmaktr.

ALGOL (The ALGOritmick Language) 1958 ylnda Avrupa'da bir konsorsiyum tarafndan gelitirilmeye balanmtr. IBM Firmas FORTRAN dilini kendi donanmlarnda kullanlacak ortak programlama dili olarak benimsediinden, Avrupa'llar da alternatif bir dil gelitirmek istemilerdi. ALGOL dilinde gelitirilen bir ok prensip modern programlama dillerinin hepsinde kullanlmaktadr.

PASCAL dili 1971 ylnda akademik evrelere yapsal programlama kavramn tantmak iin Profesr Niclaus Wirth tarafndan gelitirilmi (Dilin yaratcs, dile matematiki ve filozof Blaise Pascal'n ismini vermitir.) ve bu dil ksa zaman iinde niversitelerde kullanlan programlama dili haline gelmitir.

stanbul niversitesi Elektrik Elektronik Mhendislii

BASIC dili 1960'l yllarn ortalarnda John Kemeney ve Thomas Kurtz tarafndan gelitirilmitir. Yksek seviyeli dillerin en eski ve en basit olanlarndan biridir.Tm basitliine karn, bir ok ticari uygulamada kullanlmtr. BASIC dili de ANSI tarafndan standartlatrlmtr. Ancak BASIC dilinin ilave zellikler ieren bir sr versiyonu sz konusudur. rnein Microsoft firmasnn kartt Visual Basic diline Nesne Ynelimli Programlamaya ilikin birok zellik eklenmitir. Ayrca BASIC dilinin baz versiyonlar uygulama programlarnda (rnein MS Excel ve MS Word'de) kullancnn zelletirme ve otomatikletirme amacyla yazaca makrolarn yazlmasnda kullanlan programlama dili olarak da genel kabul grmtr.

stanbul niversitesi Elektrik Elektronik Mhendislii

ADA dili ise Amerikan Savunma Departman (Department of Defence -DoD) destei ile 70 li yllar ve 80'li yllarn balarnda gelitirilmitir. Dod dnyadaki en byk bilgisayar kullanclarndan biridir. Bu kurum farkl yazlmsal gereksinimleri karlamak iin ok sayda farkl programlama dili kullanyordu ve tm gereksinmelerini karlayacak bir dil arayna girdi. Dilin tasarlanmas amacyla uluslararas bir yarma dzenledi. Yarmay kazanan irket (CIIHoneywell Bull of France) Pascal dilini baz olarak alan almalar sonucunda Ada dilini gelitirdi.

Ada dili genel amal bir dildir, ticari uygulamalardan roketlerin ynlendirilmesine kadar birok farkl alanda kullanlmaktdr. Dilin nemli zelliklerinden bir tanesi gerek zaman uygulamalarna (real-time applications / embedded systems) destek vermesidir.

stanbul niversitesi Elektrik Elektronik Mhendislii

ok yksek seviyeli ve genellikle algoritmik yap iermeyen programlarn grsel bir ortamda yazld diller ise 4. kuak diller olarak isimlendirilirler. Genellikle 4GL olarak ksaltlrlar. (fourth generation language). nsan algsna en yakn dillerdir.

RPG dili 4. kuak dillerin ilki olarak kabul edilebilir. zellikle kk IBM makinalarnn kullanclar olan irketlerin, rapor retimi iin basit bir dil istemeleri zerine IBM firmas tarafndan gelitirilmitir.

stanbul niversitesi Elektrik Elektronik Mhendislii

Programlama dillerini seviyelerine gre 5 ana gruba ayrabiliriz:

ok yksek seviyeli diller ya da grsel diller (visual languages): Access, Foxpro, Paradox, Xbase, Visual Basic, Oracle Forms.
Yksek seviyeli diller (Bunlara algoritmik diller de denir): Fortran, Pascal, Basic, Cobol. Orta seviyeli programlama dilleri: Ada, C. Orta seviyeli diller daha az kaypla makina diline evrilebildiinden daha hzl alr. Alak seviyeli programlama dilleri: Sembolik makina dili (Assembly language). Makina dili: En aa seviyeli programlama dili. (Saf makina dili tamamen 1 ve 0 lardan oluuyor.)

stanbul niversitesi Elektrik Elektronik Mhendislii

Uygulama Alanlarna Gre Snflandrma Bilimsel ve mhendislik uygulama dilleri: Pascal, C (C programlama dili niversitelerdeki akademik almalarda da youn olarak kullanlyor.), FORTRAN Veri taban dilleri: XBASE, (Foxpro, Dbase, CA-Clipper), Oracle Forms, Visual Foxpro. Genel amal programlama dilleri: Pascal, C, Basic. Yapay zeka dilleri: Prolog, Lisp.

Simulasyon dilleri GPSS, Simula 67


Makro Dilleri (Scripting languages) awk, Perl, Python, Tcl, JavaScript.

Sistem programlama dilleri: Sembolik makina dilleri, BCPL, C, C++, occam.

stanbul niversitesi Elektrik Elektronik Mhendislii

Gnmzde sistem yazlmlarn neredeyse tamamnn C dili ile yazldn syleyebiliriz. rnek vermek gerekirse UNIX iletim sisteminin % 80'i C dili ile geri kalan ise sembolik makina dili ile yazlmtr. Bu iletim sistemi ilk olarak BELL labaratuarlarnda oluturulmutur. Kaynak kodlar gizli tutulmam, bylece eitli kollardan gelitirilmesi mmkn olmutur. Daha sonra gelitirilen UNIX bazl iletim sistemi uygulamalarna deiik isimler verilmitir.

Kaynaklar u an halen kullanmda olan yaklak 1000 - 1500 programlama dilinin varlndan sz ediyor.

stanbul niversitesi Elektrik Elektronik Mhendislii

Neden bu kadar fazla programlama dili var?


Bu kadar fazla programlama dili olmasna karn neden halen yeni programlama dilleri tasarlanyor? Bir programlama dilini dierine ya da dierlerine gre daha farkl klan zellikler neler olabilir?

Bir programlama dilini tanmlamak istesek hangi sfatlar kullanabiliriz?

stanbul niversitesi Elektrik Elektronik Mhendislii

Verimlilik (efficiency)

Bu zellie programn hzl alma zellii diyebiliriz. Algoritma almann yapld bilgisayarn da doal olarak hz zerinde etkisi vardr. Verimlilii bir programlama dilinde yazlm bir programn hzl almas ile ilgili bir kavram olarak dnebiliriz.

stanbul niversitesi Elektrik Elektronik Mhendislii

Veri trleri ve yaplar (data types and structures) eitli veri trlerini (tamsay, gerek say, karakter...) ve veri yaplarn (diziler, yaplar vs.) destekleme yeteneidir. Veri yaplar, veri trlerinin oluturduu mantksal birliklerdir.

rnein C ve Pascal dilleri veri yaplar bakmndan zengin dillerdir.

Alt programlama yetenei (Modularity) Bir btn olarak zlmesi zor olan problemlerin paralara ayrlmas ve bu paralarn ayr ayr zmlenmesinden sonra paralar arasndaki koordinasyonun salanmas programada sk bavurulan bir yntemdir. Bir programlama dili buna olanak salayacak aralara sahipse alt programlama yetenei vardr diyebilirriz. Alt programlama yetenei bir programlama dilinin, program paralar halinde yazmay desteklemesi anlamna gelir. (C modlaritesi ok yksek bir dildir)
stanbul niversitesi Elektrik Elektronik Mhendislii

Alt programlama Yapsal Programlama teknii'nin de ayrlmaz bir parasdr. Alt programlamann getirdii baz nemli avantajlar vardr.

Alt programlar kodu kltr. ok tekrarlanan ilemlerin alt programlar kullanlarak yazlmas alabilir programn kodunu kltr. nk alt programlar yalnzca bir kere alabilir kod iine yazlrlar. Ama program kodu alt programn olduu yere atlatlarak bu blgenin defalarca altrlmas salanabilir. Alt programlama alglamay kolaylatrr, okunabilirlii artrr. Alt programlama kaynak kodun test edilebilirliini artrr. Kaynak kodun daha kolay gncelletirilmesi ve yeniden kullanlabilme olanan artrr. Alt programlamann en nemli avantajlarndan biri de genel amal kodlar yazarak bu yazlan kodlar birden fazla projede kullanabilmektir. (reusability)
C alt programlama yetenei yksek bir dildir. C'de alt programlara fonksiyon denir. Fonksiyonlar C Dili'nin yaptalardr.
stanbul niversitesi Elektrik Elektronik Mhendislii

Yapsallk (structural programming support) Yapsallk bir programlama tekniidir. Bugn artk hemen hemen btn programlama dilleri yapsal programlamay az ok destekleyecek bir ekilde gelitirilmitir. Yapsal Programlama fikri 1960'l yllarda gelitirilmitir. Yapsal programlama teknii drt ana ilke zerine kurulmutur :

Bl ve stesinden gel (divide and conquer) Yapsal programlama tekniinde, tek bir btn olarak zm getirmek zor olan programlar, daha kk ve stesinden daha kolay gelinebilecek paralara blnrler. Bu paralar fonksiyon, prosedr, subroutine, alt program vs. olarak isimlendiriler. Alt program yapsnn getirdii avantajlar modularite konusunda yukarda aklanmtr.

stanbul niversitesi Elektrik Elektronik Mhendislii

Veri gizleme (Data hiding) Yapsal programlama tekniinde, programn dier paralarndan ulalamayan, yalnzca belli bir faaliyet alan olan, yani kodun yalnzca belli bir ksmnda faaliyet gsterecek deikenler tanmlanabilir. Bu tr deikenler genel olarak "yerel deikenler" (local variables) olarak isimlendirilirler. Deikenlerin faaliyet alanlarnn kstlanabilmesi hata yapma riskini azaltt gibi, programlarn daha kolay deitirilebilmesini ve program paralarnn baka programlarda tekrar kullanabilmesini de salar. Alt programlarn, ve daha geni ekliyle modllerin, bir ii nasl yapt bilgisi, o alt programn ya da modln kullancsndan gizlenir. Kullanc iin (client) alt programn ya da modln ii nasl yapt deil, ne i yapt nemlidir.

stanbul niversitesi Elektrik Elektronik Mhendislii

Tek giri ve Tek k (single entry single exit) Yapsal programlama tekniini destekleyen dillerde her bir altprogram parasna girmek iin tek bir giri ve tek bir k mekanizmas vardr. Bu mekanizma programn yukardan aa olarak ak ile uyum halindedir. Program paralarna ancak tek bir noktadan girilebilir.

Dngler ve dier kontrol yaplar. Artk hemen hemen kullanmda olan btn programlama dilleri az ya da ok Yapsal Programlama tekniini desteklemektedir. Zira bu teknik 60'l yllar iin devrim niteliindeydi.

stanbul niversitesi Elektrik Elektronik Mhendislii

Esneklik (flexibility) Esneklik programlama dilinin programcy kstlamamas anlamna gelir.Esnek dillerde birok ilem, hata yapma riski artmasna karn ramen kullanc iin serbest braklmtr. Programc bu serbestlikten ancak yetkin bir programcysa bir fayda salayabilir. Fakat programc deneyimsiz ise bu esneklikten zarar grebilir.

renme ve retme kolayl (pedagogy) Her programlama dilini renmenin ve renilen programlama dilinde uygulama gelitirebilmenin zorluu ayn deildir. Genel olarak programlama dillerinin seviyesi ykseldike, renme ve bu programlama dilini bakalarna retme kolaylar, renme iin harcanacak aba ve zaman azalr. Bugn yaygn olarak kullanlan yksek seviyeli programl dillerinin bu derece popler olmasnn nemli bir nedeni de bu dillerin ok kolay renilebilmesidir. Ne yazk ki C renimi zor ve zahmetli bir dildir.

stanbul niversitesi Elektrik Elektronik Mhendislii

Genellik (generality) Programlama dillerinin ok eitli uygulamalarda etkin olarak kullanlabilmesidir. rnein COBOL mhendislik uygulamalarnda tercih edilmez zaten ticari uygulamalar iin tasarlanmtr, FOXPRO veri taban dilleridir. Oysa PASCAL, BASIC daha genel amal dillerdir. C dili de bir sistem programlama dili olarak domasna karn, gl yapsndan dolay, ksa bir sre iinde, genel amal bir dil haline gelmitir.

Giri / k (input / output, I / O facility) kolayl Sral, indeksli ve rasgele dosyalara erime, veritaban kaytlarn geri alma, gncelletirme ve sorgulama yeteneidir. Veritaban programlama dillerinin (DBASE, PARADOX vs.) bu yetenekleri dierlerinden daha stndr ve bu dillerin en tipik zelliklerini oluturur. Fakat C giri k kolayl kuvvetli olmayan bir dildir. C'de veri tabanlarnn ynetimi iin zel ktphanelerin kullanlmas gerekir.
stanbul niversitesi Elektrik Elektronik Mhendislii

Okunabilirlik (readability) Okunabilirlik, kaynak kodun abuk ve iyi bir biimde alglanabilmesi anlamna gelen bir terimdir. Kaynak kodun okunabilirliinde sorumluluk byk lde program yazan kiidedir. Fakat yine verimlilik de olduu gibi dillerin bir ksmnda okunabilirlii glendiren yap ve mekanizmalar bulunduu iin bu zellik bir lde dilin tasarmna da baldr. En iyi program kodu, sanld gibi "en zekice yazlm fakat kimsenin anlayamayaca" kod deildir.

Birok durumda iyi programclar okunabilirlii hibireye feda etmek istemezler. nk okunabilir bir program kolay alglanabilme zelliinden dolay seneler sonra bile gncelletirmeye olanak salar. Birok kiinin ortak kodlar zerinde alt geni kapsaml projelerde okunabilirlik daha da nem kazanmaktadr.

stanbul niversitesi Elektrik Elektronik Mhendislii

Tanabilirlik (portability) Bir sistem iin yazlm olan kaynak kodun baka bir sisteme gtrldnde, hatasz bir biimde derlenerek, doru bir ekilde altrlabilmesi demektir. Tanabilirlik standardizasyon anlamna da gelir. Programlama dilleri (ISO International Standard Organization) ve ANSI (American National Standard Institute) tarafndan standardize edilirler. 1989 ylnda standartlatrma almalar biten C Dili, dier programlama dillerinden daha tanabilir bir programlama dilidir.

stanbul niversitesi Elektrik Elektronik Mhendislii

Nesne Ynelimlilik (object orientation) Nesne ynelimlilik de bir programlama tekniidir. Yapsal programlama Teknii 1960 ylarnda gndeme gelmiken, Nesne Ynelimli Programlama Teknii 1980'li yllarda popler olmutur. Bu teknik kaynak kodlarn ok bymesi sonucunda ortaya kan gereksinim yznden gelitirilmitir. C dilinin gelitirildii yllarda, akla gelebilecek en byk programlar ancak onbin satrlar mertebesindeydi, ancak kullanclarn bilgisayar programlarndan beklentilerinin artmas ve grafik arayznn artk etkin olarak kullanlmasyla, bilgisayar programlarnn boyutu ok bym, yzbin satrlarla hatta milyon satrlarla llebilir hale gelmitir.

Nesne ynelimli programlama Teknii, hereyden nce byk programlarn yazlmas iin tasarlanm bir tekniktir. C dilinin yaratld yllarda byle bir tekniin ortaya kmas sz konusu deildi, nk zaten programlar bugnk llere gre ok kkt.
stanbul niversitesi Elektrik Elektronik Mhendislii

Nesne ynelimli programlama Tekniinin yaygn olarak kullanlmaya balanmasyla birlikte bir ok programlama dilinin bnyesine bu tekniin uygulanmasn kolaylatrc aralar eklenek, yeni versiyonlar oluturulmutur. rnein C'nin nesne ynelimli programlama tekniini uygulayabilmek iin Bjarne Stroustrup tarafndan gelitirilmi haline C++ denmektedir. C++ dili C dili baz olarak alnp, gelitirilmi yeni bir programlama dilidir. C++ dilini iyi renebilmek iin ncelikle C dilini ok iyi renmek gerekir.

Pascal diline eklemeler yaplarak Delphi dili, Cobol dilinden yenilemesiyle OOCobol, Ada dilinin yenilenmesiyle ise ADA 95 dilleri gelitirilmitir.

Baz programlama dilleri ise dorudan N.Y.P.T'ni destekleyecek ekilde tasarlanarak gelitirilmitir. rnein JAVA dili C++ dilinin basitletirilmi biimi olup daha ok Internet uygulamalarnda kullanlmaktadr.
stanbul niversitesi Elektrik Elektronik Mhendislii

C Nasl bir Programlama Dilidir?


C orta seviyeli bir programlama dilidir. Yapsal dier programlama dillerine gre C dilinin seviyesi daha dktr.

C dili hem yksek seviyeli dillerin, kontrol deyimleri, veri yaplar gibi avantajlarn bnyesinde barndryor, ayn zamanda bitsel operatrler gibi makina kodu deyimlerini yanstan operatrlerlere sahip.

Yani hem makinaya yakn hem de insan alglamasna. Zaten ok tercih edilmesinin en nemli nedenlerinden biri de bu.

stanbul niversitesi Elektrik Elektronik Mhendislii

C bir sistem programlama dilidir.


Sistem Programlama ne anlama geliyor? Donanmn ynetilmesi, kontrolu ve denetimi iin yazlan, dorudan donanmla ilikiye giren programlara sistem program diyoruz.

rnein, iletim sistemleri, derleyiciler, yorumlayclar, aygt srcleri (device drivers), bilgisayarlarn iletiimine ilikin programlar, otomasyon programlar, sistem programlardr. Dier uygulama programlarna destek veren yazlmlar da ounlukla sistem programlar olarak ele alnrlar.

stanbul niversitesi Elektrik Elektronik Mhendislii

C'den nce sistem programlar assembly dillerle yazlyordu.Sistem programlarnn yazlmasnda hemen hemen alternatifsiz olduunu syleyebiliriz. Bugn cep telefonlarndan, uaklara kadar her yerde C kodlar almaktadr. rnein Boeing uaklarnda 100.000 satrdan fazla C kodu alt bilinmektedir.

C algoritmik bir dildir. C'de program yazmak iin yalnzca dilin sentaks ve sementik yapsn bilmek yetmez genel bir algoritma bilgisi de gerekir. C dier dillerle kyaslandnda tanabilirlii ok yksek olan bir dildir. nk 1989 ylndan bu yana genel kabul grm standartlara sahiptir. fade gc yksek , okunabilirlik zellii gl bir dildir.

C ok esnektir. Dier dillerde olduu gibi programcya kstlamalar getirmez.

stanbul niversitesi Elektrik Elektronik Mhendislii

C verimli bir dildir. Seviyesinden dolay hzl alr. Verimlilik konusunda assembly diller ile rekabet edebilir

C kk bir dildir. Yeni sistemler iin derleyici yazmak zor deildir.

C'nin eitimi dier bilgisayar dillerine gre daha zordur.

stanbul niversitesi Elektrik Elektronik Mhendislii

C Tarihi
UNIX iletim sisteminin orjinal ilk versiyonunu Bell Labaratuarlar'nda alan Ken Thompson tek bana yazmt ve UNIX'in bu ilk versiyonu DEC PDP-7 isimli bilgisayarda alyordu. DEC PDP-7 ilk mini bilgisayarlardan biriydi ve ana bellei yalnzca 16 K (16 MB deil!). Yllardan 1969'du.

Zamannn dier iletim sistemleri gibi UNIX de assembly dilinde yazlmt. Assembly dilinde yazlan programlar gelitirmek ok zor ve zahmetli olduundan, Thompson UNIX iletim sistemini daha gelitirebilmek iin, makina dilinden daha yksek seviyeli bir dile gereksinim duydu. Bu amala kk bir programlama dili tasarlad. Kendi dilini tasarlarken Thompson, 1960 yllarnn ortalarnda Martin Richards tarafndan gelitirilmi BCPL dilinden yola kt.

stanbul niversitesi Elektrik Elektronik Mhendislii

(BCPL = Business Common Programming Language. Bu dil de CPL = Cambridge Programming Language'den tretilmitir.

Thompson gelitirdii bu dilin ismini B koydu. Dennis Ritchie UNIX projesine katlnca B dilinde programlamaya balad. B dili daha da gelitirilmiti ve artk daha yeni teknoloji olan PDP-11 bilgisayarlarda alyordu. Thompson UNIX iletim sisteminin bir ksmn B dilinde tekrar yazd.

Artk 1971 ylna gelindiinde B dilinin PDP-11 bilgisayarlar ve UNIX iletim sisteminin gelitirilmesi iin ok uygun olmad iyice ortaya kt. Bu yzden Ritchie B programlama dilinin daha ileri bir versiyonunu gelitirmeye balad. Oluturduu dili ilk nce NB (new B) olarak isimlendirdi. Ama gelitirdii dil B dilinden iyice kopmaya ve ayr bir karakter gstermeye balaynca dilin ismini de C olarak deitirdi. 1973 ylnda UNIX iletim sisteminin byk bir ksm C dili ile tekrar yazld.
stanbul niversitesi Elektrik Elektronik Mhendislii

Ken Thompson ve Dennis Ritchie Unix letim Sistemi zerinde alrken (Yl: 1972)

stanbul niversitesi Elektrik Elektronik Mhendislii

C'nin evrimi ve gelimesi 70'li yllarda da devam etti. Geni kitleler tarafndan tannmas ve kullanlmaya balamas 1978 ylnda Dennis Ritchie ve Brian Kernighan tarafndan yazlan "The C Programming Language" kitab ile olmutur.

1970'li yllarda C programclarnn says azd ve bunlardan ou UNIX kullanclaryd. Ama artk 80'li yllar gelince C nin kullanm UNIX snrlarn at, ve farkl iletim sistemlerinde alan derleyiciler piyasaya kt, C dili de IBM PC'lerde youn olarak kullanlmaya balad.

C'nin standardizasyon almalar 1983 ylnda ANSI (American National Standards Institute ) gzetiminde ve desteinde balad. Yaplan birok deiiklikten sonra standart almalar 1988 ylnda sona erdi ve 1989 ylnn Aralk aynda ANSI C standard Jim Brodie bakanlnda X3.159 - 1989 numarasyla resmi olarak onayland.
stanbul niversitesi Elektrik Elektronik Mhendislii

1990 ylnda ise ISO/IEC 9899 - 1990 numarasyla ISO (International Standards Organization) tarafndan standardizasyonu kabul edildi. Standardizasyonu tamamlandktan sonra C yksek oranda tanabilir bir sistem programlama dili haline gelmitir. Gnmzde de sistem programlarnn (derleyiciler, editrler, iletim sistemleri) ou C dili ile yazlmaktadr.

Dennis M. Ritchie

stanbul niversitesi Elektrik Elektronik Mhendislii

Dennis Ritche ve Ken Thompson A.B.D Bakan Bill Clinton'dan Amerikan Teknoloji dln alrken.

stanbul niversitesi Elektrik Elektronik Mhendislii

Say Sistemleri
Gnlk hayatta onluk say sistemi kullanlr. Onluk say sisteminde bir saynn deeri aslnda her bir basamak deerinin 10 saysnn sleriyle arpmlarndan elde edilen toplam deeridir. rnein: 1273 = (3 * 1) + (7 * 10 ) + (2 * 100) + (1 * 1000)

Ancak bilgisayar sistemlerinde btn bilgiler ikilik say sisteminde (binary system) ifade edilir. Genel olarak say sistemi kalksa o say sisteminde o kadar simge bulunur. rnein onluk say sisteminde 10 adet simge vardr: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 Ayn ekilde ikilik say sisteminde yalnzca iki adet simge bulunur. Yani yalnzca 0 ve 1.

stanbul niversitesi Elektrik Elektronik Mhendislii

Birimler kilik sistemde her bir basamaa (digit) 1 bit denir. Bit kelimesi binary digit szcklerinden tretilmitir. rnein 1011 says 4 bittir yani 4 bit uzunluundadr. 11011001 says 8 bittir. 8 bitlik bir byklk bir byte olarak isimlendirilir. Aada kk birimlere verilen isimler gsterilmitir. 4 bit 1 Nibble 8 bit 1 byte 16 bit 1 word 32 bit 1 double word 64 bit 1 quadro word kili Say sistemi iki farkl ekilde olabilir: aretsiz aretli

stanbul niversitesi Elektrik Elektronik Mhendislii

MSD ve LSD kilik say sisteminde yazlan bir saynn en solundaki bit, en yksek saysal deeri katar. Bu bite en yksek anlaml bit (most significant digit) denir. Bu bit iin ounlukla "MSD" ksaltmas kullanlr. kilik say sisteminde yazlan bir saynn en sandaki bit, en dk saysal deeri katar. Bu bite en dk anlaml bit (least significant digit) denir. Bu bit iin ounlukla LSD ksaltmas kullanlr.
rnek: 0101 1101 says iin MSD = 0 LSD = 1 kilik say sisteminde yazlan bir saynn belirli bir bitinden sz edildiinde, hangi bitten sz edildiinin doru bir ekilde anlalmas iin basamaklar numaralandrlr. 8 bitlik bir say iin, saynn en sandaki bit yani (LSD) saynn 0. bitidir. Saynn en solundaki bit (yani MSD) saynn 7. bitidir.
stanbul niversitesi Elektrik Elektronik Mhendislii

TMLEYEN KAVRAMI
Bire Tmleyen Bire tmleyen (one's complement) saynn tm bitlerinin tersinin alnmasyla elde edilen saydr. Yani bire tmleyen, saydaki 1 bitlerinin 0, 0 bitlerinin 1 yaplmasyla elde edilir. Bir saynn bire tmleyeninin bire tmleyeni saynn yine kendisidir. rnek: 1011 0010 saysnn bire tmleyeni 0100 1101 olur. kiye Tmleyen Bir saynn bire tmleyeninin 1 fazlas saynn ikiye tmleyenidir (two's complement). Yukardaki rnek iin ikiye tmleyen 0100 1110 olur. kiye tmleyeni bulmak iin daha ksa bir yol daha vardr: Saynn en sandan balayarak ilk kez 1 biti grene kadar -ilk grlen 1 biti dahil saynn ayns yazlr, daha sonraki tm basamaklar iin basaman tersi (Yani 1 iin 0, 0 iin 1) yazlr. rnein: 1110 0100 saysnn ikiye tmleyeni 0001 1100 dr. 0101 1000 saysnn ikiye tmleyeni 1010 1000 dr. Bir saynn ikiye tmleyeninin ikiye tmleyeni saynn kendisidir.
stanbul niversitesi Elektrik Elektronik Mhendislii

Negatif Saylarn Gsterimi Negatif tamsaylarn da ifade edildii ikilik say sistemine "iaretli ikilik say sistemi (signed binary system) denir. aretli ikilik say sisteminde negatif deerleri gstermek iin aadaki yntem uygulanr: Saynn en soldaki biti iaret biti (sign bit) olarak kabul edilir. aret biti 1 ise say negatif, 0 ise say pozitif olarak deerlendirilir. kilik sistemde bir negatif say, ayn deerdeki pozitif saynn ikiye tmleyenidir. rnek olarak, ikilik sistemde yazlan 27 says yine ikilik sistemde yazlan 27 saysnn ikiye tmleyenidir. Pozitif olan saylarn deeri, tpk iaretsiz say sisteminde olduu gibi elde edilir: rnein, 0001 1110 iaretli ikilik say sisteminde pozitif bir saydr. Onluk say sisteminde 30 saysna eittir. Negatif tamsaylarn deeri ancak bir dnmle elde edilebilir. Saynn deerini hesaplamak iin ilk nce saynn ikiye tmleyeni bulunur. Bu saynn hangi pozitif deer olduu bulunur. Elde edilmek istenen say, bulunan pozitif say ile ayn deerdeki negatif saydr.

stanbul niversitesi Elektrik Elektronik Mhendislii

rnein, 1001 1101 saysnn onluk say sisteminde hangi sayya karlk geldiini bulalm: aret biti 1 olduuna gre say negatiftir.
1001 1101 saysnn ikiye tmleyeni 0110 0011, yani 99 deeridir. O zaman 1001 1101 says -99'dur. Onluk say sisteminde ifade edilen negatif saylarn iaretli ikilik say sisteminde yazlmas iin aadaki yol izlenebilir: nce saynn ayn deerli fakat pozitif olan ikilik sistemde ifade edilir. Daha sonra yazlan saynn ikiye tmleyeni alnarak, yazmak istenilen say elde edilir. rnein, ikilik sisteminde 17 deerini yazalm: 17 = 0001 0001 Bu saynn ikiye tmleyeni alnrsa 1110 1111 olur. 1 byte alana yazlabilecek en byk pozitif say 0111 1111 = 127 En kk negatif say ise 1000 0000= -128 olur.
stanbul niversitesi Elektrik Elektronik Mhendislii

Onaltlk (Hexadecimal) Say Sistemi


Onaltlk say sisteminde (hexadecimal system) saylar daha youn olarak kodlanp kullanabilir.Onaltlk say sisteminde 16 simge bulunur. lk 10 simge onluk sistemde kullanlanlarla ayndr: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 Daha sonraki simgeler iin alfabenin ilk 6 harfi kullanlr: A = 10, B = 11, C = 12, D = 13, E = 14, F = 15 Onaltlk say sisteminde yazlm bir sayy onluk sistemde ifade etmek iin, en sadan balanarak basamak deerleri onaltnn artan sleriyle arplr: 01AF = (15 * 1) + (10 * 16) + (1 * 256) + (0 * 4096) = 431 Onaltlk say sistemindeki her bir basamak ikilik say sisteminde 4 bitlik (1 Nibble) alanda ifade edilebilir: rnek olarak, 2ADF saysn ikilik say sisteminde ifade edilmek istensin: 2 = 0010 A = 1010 D = 1101 F = 1111 2ADF = 0010 1010 1101 1111
stanbul niversitesi Elektrik Elektronik Mhendislii

Sekizlik(Octal) Say Sistemi


Daha az kullanlan bir say sistemidir. Sekizlik say sisteminde 8 adet simge vardr: 01234567 Sekizlik say sisteminin her bir basama, ikilik say sisteminde 3 bit ile ifade edilir. 001 1 010 2 011 3 100 4 101 5 110 6 111 7 Sekizlik say sisteminin kullanlma nedeni de, ikilik say sistemine gre daha youn bir ifade biimine olanak vermesi, ikilik say sistemiyle sekizlik say sistemi arasnda dnmlerin ok kolay bir biimde yaplabilmesidir.

stanbul niversitesi Elektrik Elektronik Mhendislii

Say Sistemleri Arasndaki Dnmler


Onluk say sisteminden baka bir say sistemine geilirken, say o sisteme blnr. Blnebilecek say kalmayana kadar blm blmeye devam ederiz. En son blm ksmndan itibaren kalanlar baa doru yazar, yeni sistemde ifade ederiz. Herhangi bir sistemdeki sayy onluk say sistemine evirirken ise her digitin bulunduu basaman ssel deeri ile o basamaktaki sayy arpar ve btn bu arpmlar toplarz.

Say sistemleri arasnda geilerde hatasz ilem yapma adna nce say onluk tabana evrilir, daha sonra da evrilmek istenen tabana evrilir.
rnekler:

stanbul niversitesi Elektrik Elektronik Mhendislii

Gerek Saylarn Bellekte Tutulmas Bir gerek say aadaki gibi ifade edilebilir:

Yukardaki genel denklemde x ifade edilecek gerek say b Kullanlan say sisteminin taban deeri (Tipik olarak 2, 8, 10 ya da 16) e stel deer. Bu deer format tarafndan belirlenen emin ve emax arasndaki bir deer p Ondalk ksm belirleyen basamak says fk Say sistemindeki basamak deerleri. 0 fk b Gerek saylarn ifadesinde, gerek say kabul edilmeyen baz gsterimler sz konusudur. Bunlar: sonsuz (infinity) NaN (not a number) deerleridir.
stanbul niversitesi Elektrik Elektronik Mhendislii

TO BE CONTINUED...

You might also like