INF101 Bilgisayar Mühendisliğine Giriş 09/12/2013 - Programlama Dilleri



Benzer belgeler
Bilgisayarda Programlama. Temel Kavramlar

Bilgi ve İletişim Teknolojileri (JFM 102) Ders 10. LINUX OS (Programlama) BİLGİ & İLETİŞİM TEKNOLOJİLERİ GENEL BAKIŞ

Dr. Fatih AY Tel: fatihay@fatihay.net

Yazılım Mühendisliğine Giriş 4. Hafta 2016 GÜZ

BÖLÜM 1: PROGRAMLAMAYA GİRİŞ

Program Nedir?(1) Programlamaya Giriş

BİLGİSAYAR ORGANİZASYONU

PROGRAMLAMAYA GİRİŞ. Öğr. Gör. Ayhan KOÇ. Kaynak: Algoritma Geliştirme ve Programlamaya Giriş, Dr. Fahri VATANSEVER, Seçkin Yay.

BİLGİSAYAR PROGRAMLAMAYA GİRİŞ

5. PROGRAMLA DİLLERİ. 5.1 Giriş

Bilgisayar Programlama. 1.Hafta

Algoritma ve Programlamaya Giriş. Mustafa Kemal Üniversitesi Kırıkhan Meslek Yüksekokulu Bilgisayar Teknolojileri Bölümü

Bilgisayar Programlama Dilleri

Günümüz bilgi toplumunda bilgisayar, her alanda kendine yer edinmiş ve insana, bir çok işlemde yardımcı olarak büyük kolaylık sağlamaktadır.

Algoritma ve Programlamaya Giriş. Mustafa Kemal Üniversitesi Kırıkhan Meslek Yüksekokulu Bilgisayar Teknolojileri Bölümü

TEMEL BİLGİSAYAR BİLİMLERİ. Programcılık, problem çözme ve algoritma oluşturma

Bilgisayar Temelleri ve Programlamaya Giriş Yard.Doç.Dr. Metin HASDEMİR İstanbul-2008 PROGRAMLAMAYA GİRİŞ

Yazılım Çeşitleri. Uygulama Yazılımları. İşletim Sistemleri. Donanım

Bahar. BM 211 Programlama Dilleri 3 1

Bölüm1. İlk Bilgiler ISBN

Okut. Yüksel YURTAY. İletişim : (264) Sayısal Analiz. Algoritma & Matlab.

Java Temel Özellikleri

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

1.1. Yazılım Geliştirme Süreci

Yazılım Mühendisliği 1

GÖRSEL PROGRAMLAMA - I

EĞİTİM ÖĞRETİM MÜNEVVER ÖZTÜRK ORTAOKULU II. DÖNEM BİLİŞİM TEKNOLOJİLERİ VE YAZILIM DERSİ DERS NOTLARI

PROGRAMLAMA TEMELLERİ

Bölüm 1. Ön Hazırlıklar ISBN

BLG 1306 Temel Bilgisayar Programlama

Algoritma ve Akış Diyagramları

PHP'ye Giriş Türkiye PHP Grubu - Linux Şenlikleri PHP Eğitim / Tanıtım Seminerleri Ankara, 11 Mayıs 2006 Hidayet Doğan <hdogan@hido.

C++ Dersi: Nesne Tabanlı Programlama

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

BBS515 Nesneye Yönelik Programlama. Ders 1 Zümra Kavafoğlu

ALGORİTMA VE PROGRAMLAMA I

BIL1202 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ

Windows Programlama Güz Dönemi

Yazılım Mühendisliğine Giriş 2018 GÜZ

MATLAB A GİRİŞ. EE-346 Hafta-1 Dr. Ayşe DEMİRHAN

Algoritma ve Akış Diyagramları

Tarih Saat Modül Adı Öğretim Üyesi. 01/05/2018 Salı 3 Bilgisayar Bilimlerine Giriş Doç. Dr. Hacer Karacan

1) Programlama dillerinin temel kavramlarını öğrenir. 1,2,4 1

Bilgisayar Mühendisliğine Giriş. Yrd.Doç.Dr.Hacer KARACAN

Fen ve Mühendislik Uygulamalarında MATLAB

MAK 1005 Bilgisayar Programlamaya Giriş. BİLGİSAYARA GİRİŞ ve ALGORİTMA KAVRAMI

PROGRAMLAMA DİLLERİ. Programlama Dilleri Programlama Dillerinin Önemi Dilleri Sınıflandırılması Anlambilim BNF Notasyonu Kontrol Deyimleri

10.DERS Yazılım Gerçekleştirme

Programlama Dilinin Özellikleri

BİL1002 Bilgisayar Programlama PROF.DR.TOLGA ELBİR

BİLGİSAYAR PROGRAMLAMA (C#) DERS NOTU 1

Temel Bilgisayar Programlama

Öğr. Gör. Serkan AKSU 1

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-1 Temel Kavramlar ve Algoritma

BLM1011 Bilgisayar Bilimlerine Giriş I

Genel Programlama I

PROGRAMLAMAYA GİRİŞ FONKSİYONLAR

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

Bilgisayar Programı Nedir?

BİLGİSAYAR PROGRAMLAMA MATLAB

ALGORİTMA VE PROGRAMLAMAYA GİRİŞ

Programlama dili Nedir?

VERİ YAPILARI VE PROGRAMLAMA (BTP104)

Üst düzey dillerden biri ile yazılmış olan bir programı, makine diline çeviren programa derleyici denir. C++ da böyle bir derleyicidir.

Java, Python ve Ruby Dillerinin Performans Karşılaştırması

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

PROGRAMLAMAYA GİRİŞ DERS 2

Yrd. Doç. Dr. İlhan AYDIN Güz Dönemi Fırat Üniversitesi Bilgisayar Mühendisliği Bölümü

ELN1001 BİLGİSAYAR PROGRAMLAMA I

2 ALGORİTMA VE AKIŞ DİYAGRAMLARI

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

Bilgisayar Mühendisliği ve Yeni Teknolojiler. İbrahim SARAÇOĞLU

EM205 26/9/2014. Programlamaya giriş Algoritmalar. Amaçlar

Dr. Musa KILIÇ Öğretim Görevlisi

Programlama dilleri. Programlama dili: İnsan-makina ve makina- makina arasındaki iletişimi sağlar.

TBP101 (4. Hafta) Alıştırma Soruları ve Cevapları

C PROGRAMLAMA DİLİ. Hedefler

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

Bilgisayarların Gelişimi

Yazılım Mühendisliği Bölüm - 3 Planlama

4. Bölüm Programlamaya Giriş

ALP OĞUZ ANADOLU LİSESİ EĞİTİM ÖĞRETİM YILI BİLGİSAYAR BİLİMİ DERSİ 2.DÖNEM 2.SINAV ÖNCESİ ÇALIŞMA SORULARI VE YANITLARI

FBEB-512 C++ ile Nesne Tabanlı Programlama Güz 2009 (1. Hafta) (Yrd. Doç. Dr. Deniz Dal)

İfadeler bir programlama dilinde hesaplamaları belirtmede temel araçtır. İfadelerin değerlendirmesini anlamak için,

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

Hafta 1 Programlamaya Giriş

C #

1.BÖLÜM PROGRAMLAMA ve TEMEL KAVRAMLAR

Ünite-3 Bilgisayar Yazılımı.

Program Nedir? Program, bir problemin çözümü için herhangi bir programlama dilinin kuralları ile oluşturulmuş komut kümesidir.

1. PROGRAMLAMAYA GİRİŞ

1.PROGRAMLAMAYA GİRİŞ

Ruby Nedir? 1.1 Amaçlar. 1.2 Ruby nin Yapısal Sıradüzeni

Bölüm 1 PROGRAMLAMAYA GİRİŞ. Bölüm 2 ALGORİTMA

EBG101 PROGRAMLAMA TEMELLERİ VE ALGORİTMA

ALGORİTMALAR. Turbo C Bilgisayarda Problem Çözme Adımları. Bilgisayarda Problem Çözme Adımları.

Algoritma Hazırlama. Programlama. nereden başlamalı? ALGORİTMA VE PROGRAMLAMA Öğr.Gör.Günay TEMUR

Ana Bellek (RAM) İşlemci (CPU) Depolama

Transkript:

Galatasaray Üniversitesi Bilgisayar Mühendisliği Bölümü INF101 Bilgisayar Mühendisliğine Giriş 09/12/2013 - Programlama Dilleri Ozan Çağlayan ocaglayan@gsu.edu.tr ozancaglayan.com

Başlarken İlk bilgisayarlar bir fabrika kadar enerji tüketen, birkaç oda büyüklüğünde ve milyon dolarlara mâl olan (1940) cihazlardı. Tüm bu devasalığın getirdiği hesaplama gücü, günümüzün hesap makinelerinden daha fazla değildi.

Başlarken UNIVAC 1232

Başlarken Delikli Kart

Makine Dili 1 st Generation Languages (1GL) O zamanın programcıları bu bilgisayarları doğrudan makine diliyle programlıyorlardı, Makine dili, bir işlemciyi doğrudan kontrol ederek işlemcinin toplama, çıkarma, karşılaştırma gibi temel işlemleri yapmasını sağlayan bit serileridir, Programları bu seviyede tasarlamak inanılmaz güç ve karmaşıktır.

Makine Dili 1 st Generation Languages (1GL) 2 tamsayının ortak bölenlerinin en büyüğünü (OBEB) Öklid yöntemiyle hesaplayan program: MIPS mimarisinin makine dilinde yazılan program, 16'lık rakamlarla ifade edilmiştir.

Assembly 2 nd Generation Languages (2GL) İnsanlar daha büyük programlar yazmaya başlayınca, hataya daha az açık bir gösterimin gerekliliği ortaya çıktı. Assembly dilleri, işlemlerin daha anlaşılabilir şekilde ifade edilmesini sağlamak için geliştirildiler.

Assembly 2 nd Generation Languages (2GL) Makine dilinde yazılan OBEB programının MIPS Assembly dilindeki karşılığı:

Assembly 2 nd Generation Languages (2GL) Makine dilinde yazılan OBEB programının MIPS Assembly dilindeki karşılığı: Mnemonik (Anımsatıcı)

Assembly 2 nd Generation Languages (2GL) Assembly dilleri daha okunabilir olsalar da, mimariye özel olarak geliştirilmişlerdir, Her işlemci mimarisinin kendine özel komutları ve dolayısıyla kendine özel bir Assembly dili vardır, Assembly dilindeki kaynak kod, Assembler adlı yazılımla makine koduna dönüştürüldükten sonra çalıştırılabilir hâle gelir.

Assembly 2 nd Generation Languages (2GL) İşlemci ailesi/mimari odaklı programlama pratiği programcıların, Her farklı makine için programı tekrar kodlamalarına, Tasarım esnasında makinenin yeteneklerine göre düşünmelerine, yol açıyordu.

Arayış Makine/Mimari bağımsız Daha okunabilir Matematiksel hesaplamaların kolayca ifade edilebileceği Genel amaçlı bir programlama dili arayışı!

Arayış Makine/Mimari bağımsız Daha okunabilir Matematiksel hesaplamaların kolayca ifade edilebileceği Genel amaçlı bir programlama dili arayışı! 1950'lerin ortası FORTRAN Daha sonra ALGOL, COBOL,...

Yüksek Seviyeli Diller 3 rd Generation Languages (3GL) 2GL diller yazılıma mantıksal bir yapı getirdi 3GL diller ise bu yapıyı ileriye götürüp daha programcı dostu olmayı hedefledi: Yazılımı bilgisayara göre değil, insana göre ifade etmek, Programcı açısından önemsiz detaylarla ilgilenme görevini programcıdan bilgisayara devretmek.

Yüksek Seviyeli Diller 3 rd Generation Languages (3GL) İlk olarak FORTRAN (FORmula TRANslation) ALGOL, COBOL, C, C++, Java, BASIC, Pascal,... Günümüzde kullanılan genel amaçlı dillerin büyük çoğunluğu 3GL dillerdir. Yüksek seviyeli İnsana yakın Düşük seviyeli Makineye yakın

Yüksek Seviyeli Diller 3 rd Generation Languages (3GL) Yüksek seviyeli dillerde yazılmış kodları assembly veya makine diline çeviren yazılımlara derleyici (compiler) adı verilir. Derleyici tasarımı önemli çünkü yüksek seviyeli dillerde yazılan programların performansına doğrudan etkiyor.

Yüksek Seviyeli Diller 3 rd Generation Languages (3GL) C ve Python dillerinde OBEB örneği: C int gcd(int a, int b) { if (b == 0) return a; else return gcd(b, a % b); }

Yüksek Seviyeli Diller 3 rd Generation Languages (3GL) C ve Python dillerinde OBEB örneği: C Python int gcd(int a, int b) { if (b == 0) return a; else return gcd(b, a % b); } def gcd(a, b): if b == 0: return a else: return gcd(b, a % b)

Alana Özel Diller Domain Specific Languages (DSL) Genel amaçlı olmayan, özel bir uygulama alanı için tasarlanmış programlama dilleri HTML, XML, SGML, vb.. (İşaretleme dilleri) Verilog & VHDL (Donanım betimleme dilleri) MATLAB, GNU Octave (Bilimsel programlama) Mathematica, Maxima (Sembolik Matematik)...

Alana Özel Diller Domain Specific Languages (DSL) MATLAB'da OBEB örneği: x = gcd(12,24) MATLAB, matematiksel ve bilimsel programlama alanına özel bir dil olduğu için, OBEB işini yapan gcd() fonksiyonu içinde mevcut!

Çalışma Modelleri Execution Models Yorumlamalı (Interpreted) Compiled (Derlemeli) Çevrimli (Translated)

Yorumlamalı Diller Interpreted Languages Yorumlamalı dillerde yazılan programlar, makine koduna derlenmeden, satır satır çalıştırılırlar, Programın kaynak kodunu dinamik olarak makine koduna dönüştürerek çalıştıran araca yorumlayıcı (interpreter) adı verilir. Makine koduna dönüştürülmüş bir programı ilk işleyen işlemci iken, yorumlamalı dilde yazılan kodu ilk işleyen başka bir yazılımdır.

Yorumlamalı Diller Interpreted Languages Platform-bağımsız Kaynak kodu dağıtmak, çalıştırmak için yeterli Hızlı geliştirme ve prototipleme süreci Kod tekrar derlenmeden hemen değiştirilip tekrar çalıştırılabilir Kodun yorumlanarak çalıştırılması, derlenmiş programa göre genellikle yavaş

Çalışma Modelleri Execution Models Yorumlamalı (Interpreted) Compiled (Derlemeli) Çevrimli (Translated)

Çalışma Modelleri Execution Models Yorumlamalı (Interpreted) ASP, PHP ActionScript JavaScript Octave MATLAB Perl, Python Lua, R Awk, Shell Java,.NET Compiled (Derlemeli) Çevrimli (Translated)

Derlemeli Diller Compiled Languages Derleyici tarafından makine diline dönüştürülen dillerdir, Doğrudan makine dilinde veya assembly'de yazılmış programlara çok yakın ~ aynı performansta sonuç alınmasını sağlarlar, Yazılım geliştirme sürecinde kaynak kodlar her değişiklikten sonra tekrar derlenmelidir.

Çalışma Modelleri Execution Models Yorumlamalı (Interpreted) ASP, PHP ActionScript JavaScript Octave MATLAB Perl, Python Lua, R Awk, Shell Java,.NET Compiled (Derlemeli) Çevrimli (Translated)

Çalışma Modelleri Execution Models Yorumlamalı (Interpreted) ASP, PHP ActionScript JavaScript Octave MATLAB Perl, Python Lua, R Awk, Shell Java,.NET Compiled (Derlemeli) FORTRAN Ada, ALGOL Cobol, BASIC Pascal, Delphi C, C++ Objective-C Go LISP Çevrimli (Translated)

Arakod Intermediate Representation Melez yaklaşım Amaç: Yorumlamalı ve derlemeli dillerin avantajlarını en az performans kaybı olacak şekilde birleştirmek,

Arakod Intermediate Representation Melez yaklaşım Amaç: Yorumlamalı ve derlemeli dillerin avantajlarını en az performans kaybı olacak şekilde birleştirmek, Kaynak kod önce arakoda derlenir, sanal makine adı verilen yorumlayıcı bu arakodu dinamik olarak çalıştırır. Bu arakod genelde bytecode olarak adlandırılır.

Çalışma Modelleri Execution Models Yorumlamalı (Interpreted) ASP, PHP ActionScript JavaScript Octave MATLAB Perl, Python Lua, R Awk, Shell Java,.NET Compiled (Derlemeli) FORTRAN Ada, ALGOL Cobol, BASIC Pascal, Delphi C, C++ Objective-C Go LISP Çevrimli (Translated)

Çalışma Modelleri Execution Models bytecode Yorumlamalı (Interpreted) ASP, PHP ActionScript JavaScript Octave MATLAB Perl, Python Lua, R Awk, Shell Java,.NET Compiled (Derlemeli) FORTRAN Ada, ALGOL Cobol, BASIC Pascal, Delphi C, C++ Objective-C Go LISP Çevrimli (Translated)

Çalışma Modelleri Execution Models bytecode Yorumlamalı (Interpreted) ASP, PHP ActionScript JavaScript Octave MATLAB Perl, Python Lua, R Awk, Shell Java,.NET Compiled (Derlemeli) FORTRAN Ada, ALGOL Cobol, BASIC Pascal, Delphi C, C++ Objective-C Go LISP Çevrimli (Translated) Dönüştürücü bir program tarafından derleyicisi olan hedef bir dile çevrildikten sonra o dilin derleyicisiyle derlenen diller. (Pek yaygın değil)

Nesneye Yönelik Programlama Object Oriented Programming (OOP) Klasik programlama modelinde, programlar yapılacak işlerin bir listesi olarak görülürler, Okunabilirlik, modülerlik ve tekrar kullanılabilirlik açısından sıkça kullanılan işler bir fonksiyon olarak tanımlanabilirler: Bir sayı kümesinin ortalamasını alan fonksiyon Bir sayı kümesinin en küçük elemanını bulan fonksiyon...

Nesneye Yönelik Programlama Object Oriented Programming (OOP) OOP modelindeyse birbirleriyle etkileşime giren nesneler vardır: Sınıflar bir kavramın soyut tanımlarıdır, Nesneler sınıflardan yaratılan somut görüntülerdir, Nesnelerin özellikleri ve bu özellikler üzerinde işlem yapabilen metodları vardır. C++, Java, Smalltalk, Perl, Objective-C, Python, Ruby, C#, vb.

Nesneye Yönelik Programlama Object Oriented Programming (OOP) Grafik arayüz tasarımında, web programlamada oldukça sık kullanılır, Sıkı fanatikleri ve sıkı karşıtları vardır, OOP klasik modelden daha iyidir veya tersi gibi kesin bir yargı yoktur ve olamaz: Her dil ve yaklaşım belirli kullanım alanları için daha idealdir.

Nesneye Yönelik Programlama Object Oriented Programming (OOP) Telefon Sınıf Nokia 3310 Galaxy S3 Iphone 5 Alt-sınıf Nesne

Nesneye Yönelik Programlama Object Oriented Programming (OOP) benim_telefonum = new Nokia3310() benim_telefonum.ara( 4440333 ) benim_telefonum.sms_gonder( 05353453434, naber? ) nesne metod çağrısı benim_telefonum nesnesi Nokia3310 sınıfından üretiliyor

Esin kaynağı diller Esin kaynağı diller

Programlama Dilleri Programlama dilleri, bilgisayar bilimlerinin merkezi bir elemanıdır, Öğrenciler, 1-2 programlama diliyle yoğunca vakit geçirdikten sonra genelde başka dilleri merak etmeye başlarlar, Dil öğrenmek ilginçtir ve sizi geliştirir.

Peki programlama nedir? Programming is the art of telling another human what one wants the computer to do. Programlama, bilgisayara ne yaptırmak istediğini, başka bir insana anlatma sanatıdır. Donald Knuth

Problemler Problemler geneldir, Örnek: Bir tamsayı kümesindeki en küçük değeri bulun. Belli bir veri kümesi için problemin somut görünümü: {17, 6, 42, 24} kümesindeki en küçük değeri bulun.

Problem Tanımı Kötü örnek: En küçük elemanın sırasını bulun. {4, 2, 5, 2, 42} kümesi için 2 yanıt var = {2, 4} İyi örnek: L en küçük değerlerin sıralarından oluşan küme olsun. L 'nin en küçük elemanını bulun.

Problem Tanımı İyi örnek: L en küçük değerlerin sıralarından oluşan küme olsun. L 'nin en küçük elemanını bulun. {4, 2, 5, 2, 42} L = {2, 4} min(l) = 2

Algoritma Düzgünce ortaya konmuş bir problemin çözüm sürecinin detaylı tanımı Problem verisi üzerinde çalışarak amaçlanan sonuca varan işlem serisi

Algoritma Programlamadan önce problemin nasıl çözüleceğini tanımlayın (Soyutlama)

Algoritma İnsan tarafından anlaşılabilir olmalıdır, Bir programlama diline, derleyiciye veya makineye bağımlı değildir, Çok büyük olmayan problemler için akış diyagramıyla ifade edilebilir, pseudo-code adı verilen ve anlatımı öne çıkaran basit dillerde ifade edilebilir.

Akış Diyagramları

Pseudocode (Sözdekod) Bir algoritmanın işleyişinin yüksek seviyeli bir tanımı, Programlama dillerini andıran bir yapısı olsa da aslında bazı basit kuralları olan, konuşma diline yakın bir anlatım tarzıdır.

Algoritmalar size yabancı mı? IKEA masa parçaları Yumurta, süt, un Masa Kek Toplama 2 tane 6 haneli sayı Toplam Öğrenci listesi Labirent haritası Kurulum Kılavuzu Kek Tarifi Sıralama Algoritması Çıkış Algoritması Sıralı liste Çıkış

Basit bir örnek Klavyeden bir sayı bekle Sayıyı A değişkenine kaydet Klavyeden bir sayı bekle Sayıyı B değişkenine kaydet A+B'yi T değişkenine kaydet T'yi ekrana yazdır A = input( Bir sayı girin: ) B = input( Bir sayı girin: ) T = A + B print Toplam:, T Pseudocode int A, B, T; Python printf( Bir sayı girin: ); scanf( %d, &A); printf( Bir sayı girin: ); scanf( %d, &B); T = A + B; printf( Toplam: %d\n, T); C

OBEB'e geri dönersek... OBEB Hem a'yı hem b'yi kalansız bölen en büyük tamsayı. OBEB(8, 12) = 4 Nasıl hesaplarız?

OBEB brute-force yöntem 1 a ve b'den küçük olanı t değişkenine kaydet 2 a'nın t'ye bölümünden kalan 0 değilse VEYA b'nin t'ye bölümünden kalan 0 değilse; t'y 1 azalt ve 2. adıma geri dön. 3 Cevap t'dir. Pseudocode def obeb(a,b): t = min(a,b) while a % t!= 0 or b % t!= 0: t = t 1 return t Python

OBEB brute-force yöntem In [12]: %timeit obeb(100, 24) 100000 loops, best of 3: 4.24 us per loop In [13]: %timeit obeb(461952, 116298) 10 loops, best of 3: 19.1 ms per loop 100 ve 24 sayılarının OBEB'i kaba kuvvet algoritmayla ortalama 4.24 mikrosaniyede hesaplanıyor. 461952 ve 116298 sayılarının OBEB'i kaba kuvvet algoritmayla ortalama 19.1 milisaniyede hesaplanıyor. Daha iyi bir algoritma olamaz mı?

OBEB Öklid Algoritması Kaba kuvvet yöntemden çok daha hızlı çalışan bir algoritma yaklaşık 2000 yıl önce Euclid tarafından keşfedilmiş, a ve b'nin OBEB'i, b ve a'nın b'ye bölümünden kalan sayının OBEB'iyle aynıdır.

OBEB Öklid Algoritması a ve b ile başla b=0 mı? HAYIR b = a % b a = b EVET OBEB(a,b) = b

OBEB Öklid Algoritması 1 a = 54 b = 36 b=0 mı? HAYIR b = 54 % 36 a = 36 EVET OBEB(a,b) = b

OBEB Öklid Algoritması 2 a = 36 b = 18 b=0 mı? HAYIR b = 36 % 18 a = 18 EVET OBEB(a,b) = b

OBEB Öklid Algoritması 3 a = 18 b = 0 b=0 mı? HAYIR b = 36 % 18 a = 18 EVET OBEB(a,b) = b 18

OBEB Öklid Algoritması def obeb_euclid(a,b): if b == 0: return a return obeb_euclid(b, a % b)

OBEB Öklid Algoritması def obeb_euclid(a,b): if b == 0: return a return obeb_euclid(b, a % b) In [12]: %timeit obeb_euclid(100, 24) 100000 loops, best of 3: 768ns per loop In [13]: %timeit obeb_euclid(461952, 116298) 10 loops, best of 3: 2.11us per loop ~4 mikrosaniye -> 0.8 mikrosaniye ~20 milisaniye -> 0.002 milisaniye

OBEB Öklid Algoritması def obeb_euclid(a,b): if b == 0: return a return obeb_euclid(b, a % b) In [12]: %timeit obeb_euclid(100, 24) 100000 loops, best of 3: 768ns per loop In [13]: %timeit obeb_euclid(461952, 116298) 10 loops, best of 3: 2.11us per loop ~4 mikrosaniye -> 0.8 mikrosaniye ~20 milisaniye -> 0.002 milisaniye ~116298 adım ~8 adım

OBEB Öklid Algoritması def obeb_euclid(a,b): if b == 0: return a return obeb_euclid(b, a % b) In [12]: %timeit obeb_euclid(100, 24) 100000 loops, best of 3: 768ns per loop In [13]: %timeit obeb_euclid(461952, 116298) 10 loops, best of 3: 2.11us per loop ~8 adım (461952, 116298) (116298, 113058) (113058, 3240) (3240, 2898) (2898, 342) (342, 162) (162, 18) (18, 0)

Bilgisayar bilimleri, bir problemi doğru şekilde modelleyerek problemi çözmek için uygun tekniği ortaya çıkaran bir soyutlama bilimidir. Alfred Aho & Jeffrey Ullman

Yukarıdaki koddaki hatalara dair temkinli olun; ben sadece doğru olduğunu kanıtladım, denemedim. Donald Knuth

Kütüphanede mevcut! Yukarıdaki koddaki hatalara dair temkinli olun; ben sadece doğru olduğunu kanıtladım, denemedim. Donald Knuth

Dijkstra en kısa yol (Shortest path) algoritması Astronomi ne kadar teleskoplarla ilgiliyse, bilgisayar bilimleri de en fazla o kadar bilgisayarlarla ilgilidir. Edsger W. Dijkstra

Katedral ve Pazar (ücretsiz e-kitap) http://www.emo.org.tr/ekler/d362d95ed1876eb_ek.pdf Nasıl ki fırça ve boyaları derinlemesine bilmek kişiyi usta bir ressam yapmaz ise, bilgisayar bilimleri eğitimi almak da kişiyi usta bir programcı yapmaz. Eric S. Raymond

Bilgisayar Bilimlerinin Temel İlgi Alanları Hesaplanabilirlik Bir problem verildiğinde, o problemi çözen bir algoritma olup olmadığını gösterebilir miyiz? Hangi problemler için hiç algoritma mevcut değildir? Nasıl sınıflandırabiliriz?

Bilgisayar Bilimlerinin Temel İlgi Alanları Karmaşıklık Algoritmam ne kadar sürede sonuca ulaşıyor? Algoritmam ne kadar bellek kullanıyor? Algoritmam iyi mi yoksa daha iyisi mevcut mu?

Bilgisayar Bilimlerinin Temel İlgi Alanları Doğruluk Bir algoritmanın daima sonuca ulaştığından emin olabilir miyiz? Bir algoritmanın daima doğru sonuca ulaştığından emin olabilir miyiz?

Bazı kriterler Sadelik: KISS! (Keep it simple and stupid) Verimlilik: Hızlı, az bellek kullanımı. Kararlılık: Girdideki ufak bir değişiklik çıktıyı etkilememeli.

Verimlilik Gözleme dayalı (Ampirik) Gerçeklenen algoritmanın ne kadar sürede çözüme ulaştığını, düz çalışma zamanından çıkartırsak, bu karşılaştırılabilir bir ölçü olmaz çünkü: Makineye, dile, programcıya, derleyiciye, derleyici seçeneklerine, işletim sistemine,... göre değişebilir. Örnek: OBEB örneğinde yaptığımız süre bazlı karşılaştırma.

Verimlilik Matematiksel Toplam (temel) işlem sayısını, girdinin uzunluğu cinsinden ifade etmek daha basit, genel geçer ve yeterli bir ölçü yöntemidir. big Oh gösterimi: O() O(1), O(n), O(n 2 ), O(lg(n)),... sınıfı algoritmalar

Faydalı Linkler https://developers.google.com/edu/python/?csw=1 http://learnpythonthehardway.org/book/ https://cs.uwaterloo.ca/~shallit/courses/134/history.html http://en.wikipedia.org/wiki/history_of_computer_science http://scratch.mit.edu/ http://www.repl.it http://www.youtube.com/watch?v=kpra0w1kecg http://www.youtube.com/user/algorythmics/videos

Galatasaray Üniversitesi Bilgisayar Mühendisliği Bölümü Sorusu olan? Ozan Çağlayan ocaglayan@gsu.edu.tr ozancaglayan.com