25 15 40 2. Ara sınav Ödev/Uygulama Dönem sonu sınavı Türü Klasik Klasik Klasik Klasik Serbest Serbest Serbest Serbest Ders Notu Kullanımı* Neden Programlama? *Sınavlara ders notlarınızı ve/veya istediğiniz kadar kitap getirebilir ve sınav esnasında başkalarını rahatsız etmeden bunlardan yararlanabilirsiniz. Uyarı Ödevlerde, öğrencilerin birbirlerine danışması veya beraber çalışması, genelde olağan sürecin bir parçasıdır ve teşvik edilmelidir. Ancak, ortak çalışmalardan sonra, her öğrenci kendi ödevini kendi başına yazmalıdır. Bir öğrencinin ödevinin başka bir öğrencide bulunması, otomatik olarak kopya sayılır. Ödevlerde kopya yaptığı belirlenen öğrencilere uygulanacak işlemler Yükseköğretim Kurumları Öğrenci Disiplin Yönetmeliğinde açıkça belirtilmiştir. 20 Yüzdesi 1. Ara sınav Sınav Başarı Değerlendirilmesi Bu nedenle her ders için yoklama alınacak ve hemen sisteme girilecektir. Ancak değişim programlarıyla, özel öğrenci statüsüyle ve çift diploma programıyla diğer yükseköğretim kurumlarına giden öğrenciler ile çift anadal öğrencileri bu koşula tabi değildir. görevlendirilen bir öğrenci, Rektörlük onayından sonra bu süreler içinde izinli sayılır. Bu tarihlerde devam edemediği derslerden devamlı sayılır. Uygulamalara devam esasları, ilgili birim yönetim kurulu tarafından belirlenir. Ancak birim yönetim kurulu tarafından Üniversiteyi veya Türkiye’yi temsilen Anadolu Üniversitesi Önlisans ve Lisans Eğitim-Öğretim ve Sınav Yönetmeliği MADDE 12 – (1) Teorik ve uygulamalı derslere devam zorunluluğu en az %70’tir. Bir dersten devam koşulunu yerine getirmeyen ve/veya uygulamalardan başarılı olamayan öğrenci, o dersin dönem sonu ve bütünleme sınavına giremez. MADDE 19 – (7) Öğrenci herhangi bir dersi, Anadolu Üniversitesinden en az 1 kez alıp devam koşulunu sağlamadıkça başka bir yükseköğretim kurumundan alamaz. Devam Zorunluluğu Anadolu Üniversitesi Fen Fakültesi Matematik Bölümü Emrah Akyar Sunum #1 MAT213 Bilgisayar Programlama I Neden Java? • • • • • • • Yaygın kullanım Platform bağımsız Nesne yönelimli (Object oriented) Multithread Güvenli ve sağlam Dokümantasyon } Kevin Wayne Introduction to Programming in Java: An Interdisciplinary Approach (1st Edition) Robert Sedgewick & Kevin Wayne Pearson New International Edition Kitabın internet sitesi: http://introcs.cs.princeton.edu/java/home/ kitap içerisindeki tüm örnek programlar vb. bu siteden indirilebilir. Ders Kitabı Hangi Programlama Dili? • Programı oluştur (Create): Bir Java programı karakterler oluşan bir metin dosyasıdır. Bu dosyanın uzantısı .java olmalıdır. Dolayısıyla “not defteri” gibi herhangi bir metin editör kullanılarak oluşturulabilir. • Derle (Compile): Derleyici (compiler) adı verilen programlar ile Java kodları bilgisayar tarafından çalıştırmaya daha uygun şekle dönüştürülür. Derleyici .java uzantılı dosyaları yine aynı isimli fakat .class uzantılı dosyalara dönüştürür. Java derleyicisini kullanmak için komut satırında javac komutu dosya ismi ile birlikte kullanılmalıdır. • Çalıştır (Run/Execute): Programınız derlendiğinde Java Virtual Machine (JVM) yardımıyla programınız Bilgisayar üzerinde çalıştırılabilir. Programınızı çalıştırmak için komut satırında java komutuyla beraber programınızın ismini yazmanız yeterlidir. İlk Programımız • JRE (Java Runtime Environment – Java Çalışma Ortamı) Java ile yazılmış programları çalıştırmak için JRE kurulu olmalıdır. Java kodları derlendikten sonra doğrudan alıştırılamaz, byte kodlara dönüştürülmesi gerekir. Bunu yapan mekanizma JRE’dir. JRE’nin içinde Java kütüphaneleri ve JVM bulunur. • JDK (Java Development Kit – Java Geliştirme Aracı) Java uygulamaları geliştirmek için gerekli tüm araçları içerir. İçerisinde Java kütüphaneleri, Java derleyici, JVM ve JRE bulundurur. • JVM (Java Virtual Machine – Java Sanal Makinası) Java programları derlendikten sonar, byte kod adı verilen bilgisayarın anlayacağı dile dönüştürülür. Byte kod ile Java programlarının platformdan bağımsız olarak çalışması sağlanır. İşte bunu sağlayan yapı JVM’dir. • J2EE (Enterprise Edition), J2ME (Micro Edition), J2SE (Standart Edition) Bazı kısaltmalar Java’nın mucidi James Gosling Java’nın logosu Java’nın maskotu Duke Java’yı kurduktan sonra bilgisayarınızda PATH ayarının yapılması gereklidir. Bunun için 1) Bilgisayarım sağ tıklayın 2) Özellikler I tıklayın 3) Gelişmiş 4) Ortam değişkenleri 5) Sistem değişkenleri 6) Path değişkeninin sonuna Java’yı kurduğunuz bin dizinini “;” işareti koyarak ekleyiniz. Örneğin, “C:\Program Files\Java\jdk1.8.0_51\bin” gibi. http://www.oracle.com/technetwork/java/javase/downloads/index.html Internet adresinden JDK’yı indirip bilgisayarınıza kurabilirsiniz. Java Kurulumu • 1991, James Gosling, Mike Sheridan ve Patrick Naughton Java projesini başlattılar. • Java’nın ilk adı Oak (meşe) idi. • 1995, Sun Microsystems Java 1.0 • 2009-2010 Oracle, Sun Microsystems i satın aldı. Java’nın Kısa Tarihçesi Windows komut satırında dizin (klasör) değiştirmek için CD dizin_adı komutu kullanılmalıdır. Bir üst dizine geçmek için CD .. komutu kullanılmalıdır. Bir dizin içerisindeki dosyaları listelemek için ise DIR komutu kullanılmalıdır. Sürücü değiştirmek için ise sürünün ismi : işaretiyle birlikte kullanılmalıdır D: gibi. public class HelloWorld { public static void main(String[] args) { System.out.print(“Hello, World”); System.out.println(); } } İlk Programımız Programın çıktısı (output) Programın gövde kısmı (body) Komut satırları public class HelloWorld { public static void main(String[] args) { System.out.print(“Hello, World"); System.out.println(); } } main() metodu Programınızı çalıştırmak için komut satırında java HelloWorld yazmalısınız. Java programının derlenmiş hali (bilgisayarın anladığı dil) Programınızı derlemek için komut satırında javac HelloWorld.java yazmalısınız. Oluşturulan program (metin dosyası) Herhangi bir metin editör (text editör) yardımıyla programınızı oluşturun. Ya da bir başkasının oluşturduğu programı kopyalayın. Metin dosyası: HelloWorld.java “Hello, World” JVM HelloWorld.class Derleyici (Compiler) HelloWorld.java Editör public static void args • Biz derslerimizde IDE olarak, Eclipse programını kullanacağız. Eclipse, https://eclipse.org/downloads/ Internet adresinde “Eclipse IDE for Java Developers” bölümünden indirilebilir. • Eclipse programı sıkıştırılmış bir dosya olduğundan bu sıkıştırılmış dosya bilgisayarımızın uygun bir dizinine açıldıktan sonra (mesela C:\Program Files\eclipse) eclipse.exe programı çift tıklanarak çalıştırılabilir. • Java için sıkça kullanılan diğer IDE’ler: • Netbeans • InteliJ Idea • BlueJ • Jedit • DrJava • … IDE (Integrated Development Environment) • Yukarıda sıralanan ifadeleri hatalı yazdığınızda (örneğin ikinci harflerini yazmayı unutursanız) ne olur? • • • • • Ekrana önce alt alta, sonra da yan yana 10 kez Hello, World yazdıran programı yazınız. • HelloWorld.java programında aşağıdaki ifadeler yazılmadığında programı derleme/çalıştırma aşamasında ne ile karşılaşırsınız? Alıştırmalar java java java java UseArgument java UseArgument @!&^% UseArgument.java Bob UseArgument Alice Bob • UseArgument.java programını değiştirerek girilen üç ismi ters sırada anlamlı bir cümle içinde kullanarak ekrana yazan bir program yazınız. Örneğin: java UseArgument Ayşe Fatma Hayriye Merhaba Hayriye, Ayşe ve Fatma naber? • • • • • UseArgument.java programını komut satırında aşağıdaki argümanlarla kullanırsanız hangi çıktıları elde edersiniz? Alıştırmalar public class UseArgument { public static void main(String[] args) { System.out.print("Hi, "); System.out.print(args[0]); System.out.println(". How are you?"); } } Komut satırından argüman alma a, b; 1234; 99; c = a + b; Değişken isimleri int a = b = int Değerler (literals) String veri tipini tamsayı (int) ve ondalıklı (double) veri tiplerine dönüştürmek için Integer.parseInt() ve Double.parseDouble() metotları kullanılır. Örnekler: Integer.parseInt("123"); Double.parseDouble("3.5"); Dolayısıyla komut satırından girilen argümanları tamsayı veri tipine dönüştürmek için Integer.parseInt(args[0]); komutunu kullanmak yeterlidir. String ifadeleri nümerik ifadelere dönüştürme UYARILAR: • Değişken isimleri harfler, rakamlar, _ ve $ karakterlerinden oluşan bir karakterler dizisidir (Unicode). • Değişken isminin ilk karakteri rakam olamaz. • Değişken isimleri büyük/küçük harf duyarlıdır (case-sensitive). • Java’ya ait özel kelimeler (public, static, int, void, vb.) değişken ismi olarak kullanılamaz. • Değişkenlere yukarıdaki koşullarda isim verirken herhangi bir kural olmamasına karşın, genelde tek kelimeden oluşan değişken isimleri tümü küçük harf kullanılarak, birden fazla kelimeden oluşan değişken isimleri ise ilk kelime hariç her kelimenin ilk harfi büyük olarak yazılır. Örnekler: basKatsayi, polinomunBirinciKoku, … Tanımlama ve atamanın birlikte olduğu komut satırı Atama komut satırları Tanımlama komut satırı Karakter dizileri Karakterler Mantıksal değerler Ondalıklı sayılar Tamsayılar Alabileceği Değerler + && || ! + - * / + - * / % Operatörler ‘ABC’, ‘Merhaba’ ‘123’ ‘A’, ‘1’, ‘%’, ‘?’, ‘/n’ true, false 3.14, -2.5, 6.022e23 99, -12, 2147483647 Örnek Değerler public class DegerDegistir { public static void main(String[] args) { int a, b; a = 1234; b = 99; // Burada hangi satır(lar) olmalı? System.out.println("a=" + a + " b=" + b); } } 99 1234 int t = a; b = t; 1234 b = 99; 99 1234 a = 1234; a = b; tanımsız int a, b; a b 1234 99 99 99 tanımsız tanımsız İki değişkenin başlangıçta atanan değerlerini karşılıklı olarak değiştirip ekrana yazan programı yazınız. İki değişkenin değerlerini karşılıklı olarak değiştirmek Bazı temel veri tipleri String char boolean double int Değişken Tipi Değişkenler ve Veri Tipleri 1234 1234 1234 t operatör o erand lass uler publ stat o tr ng ruler1 tr ng ruler2 tr ng ruler3 tr ng ruler ste .out.pr ste .out.pr ste .out.pr ste .out.pr a n( tr ng[] args) "1"; ruler1 "2" ruler1; ruler2 "3" ruler2; ruler3 " " ruler3; ntln(ruler1); ntln(ruler2); ntln(ruler3); ntln(ruler ); • String de işken tipi ir karakterler di isi olarak düşünüle ilir • ar de işken tipinden arklı olarak tek tırnak yerine çift tırnak kullanılır • operatörü iki trin de işkeni irleştirmek on atenation için kullanılır “ , ” + “ ob” “ ob” “1” + “ 2 “ + “1” “1 2 1” “1234” + “ + “ + “99” “1234 + 99” “1234” + “99” “123499” a b); ); publ " " Char ve String veri tipleri publ lass rlest r publ stat o a n( tr ng[] args) nt a b ; a 123 ; b ; a b; ste .out.pr ntln(a " " b " ste .out.pr ntln(a " " b " operatörü o erandlardan iri i trin oldu undan otomatik olarak di er operandı da tring e dönüştürüp iki i adeyi irleştirerek sonu u trin olarak erir. tr ng a "123 "; nt b ; "123 " tr ng a b; o erand b Bir String Birleştirme Programı • char de işken tipi de işkene ir tek ar rakam ya da sem ol atamak için kullanılır • it u unlu undadır Dolayısıyla arklı de er ala ilir • Tek tırnak kullanılarak karakterler gösterilir rne in a gi i • a ter la tek tırnak çi t tırnak ve yeni satır ne line karakterleri için sırasıyla ‘ t’ ‘ ’ ‘ ’’ ‘ ”’ e ‘ n’ ö el de erleri kullanılır • arakterlerin er iri it tamsayı ile kodlanır u kodlama şeması ni ode olarak adlandırılır Char ve String veri tipleri a 3 3 3 3 0 5 5 5 5 5 1 3 3 2 2 Değer işlemi ön eliklidir şlemi ön eliklidir ata ölme işleminin kalanı onu un tam kısmı Açıklama 5 Değer onu un tam kısmı Açıklama 1; e 1; • float de işken tipi it u unlu undadır ve ondalıklı sayılar için kullanılır it . • double dekişken tipi ise it u unlu undadır ve yine ondalıklı sayılar için kullanılır it . • ndalıklı sayılar için nokta işareti kullanılır virgül işareti kullanılma • em loat em de dou le için ilimsel nota yon ienti i notation olarak adlandırılan gösterimler de kullanıla ilir rne in ouble 1.23 e2; i i. • ndalıklı sayılar için de temel aritmetik operatörler e operatörleridir. Ondalıklı sayılar (float, double) rne in nary operatörler ade e ir o erand erekir ve de eri ya ir arttırır ya ir a altır ya da işareti elirlerler. 5 5 5 İfade ritmetik operatörler ve atama operatörü ile aynı anda da kullanıla ilir komutlarının ikisi de de işkeninin de erini arttırır 3 5 5 İfade dir. ın po iti publ publ a nt r " " " " ste .out.pr ntln(a ste .out.pr ntln(a ste .out.pr ntln(a ste .out.pr ntln(a b; b; " " " b b b a " a nt b; Integer.parseInt(args[1]); nt p a n( tr ng[] args) nt b o Integer.parseInt(args[0]); nt a stat lass Int ps Tamsayılarla aritmetik işlemler " " " " " " " " b r); ); p); " " r); long) Meraklı öğrenciler işaretli tamsayıların gösterimi için kullanılan iki yöntemi inceleyerek (Ones' complement, Two's complement) nt değişken tipinin neden bu maksimum ve minimum sınırlara sahip olduğunu öğrenebilirler. • int de işken tipi ile arasındaki tamsayılar için kullanılır • it u unlu undadır ve arklı de er ala ilir tamsayılara da il edildi ine dikkat edini e int • amsayılar için temel aritmetik operatörler • amsayılar için unary operatörler dir. s ort Tamsayılar (b te Aritmetik (binary) ve Unary Operatörler lass ua rat publ stat o a n( tr ng[] args) ouble b Double.parseDouble(args[0]); ouble Double.parseDouble(args[1]); ouble s r nant b b .0 ; ouble at .s rt( s r nant); ste .out.pr ntln( ( b ) 2.0); ste .out.pr ntln( ( b ) 2.0); Büyük (veya) eşit >= 3>=2 3>2 2>=5 2>5 3<=2 2 < 2 (month >=1) && (month<=12) Büyük > 2<=2 (year % 100) == 0 Küçük (veya) eşit <= 2 != 2 2 < 3 3 != 2 Girilen ay geçerli mi? Küçük < 2 == 3 2 == 2 Girilen yıl yüzyılın başlangıcı mı? Eşit değil != False (b*b – 4.0*a*c)>0 Eşit == True Diskriminant pozitif mi? Anlamı Operatör Karşılaştırma operatörleri publ x2+bx+c=0 ikinci derece polinomunun köklerini hesaplayan program . e a işken tipi sade e iki de er alır e alse (yanlış) işkenler için en çok kullanılan operatörler eya e not operatörleridir at kütüp anesindeki tüm onksiyonlar tt do .ora le. om a a e do a i a a lan internet adre inde uluna ilir. at . tml a i ade i i e a alse iken true true iken alse olur. Not: Soyut matematik derslerinden doğruluk çizelgeleri ile ilgili bilgilere sahip olduğunuz varsayılacaktır. a b i ade i ade e em a em de b alse iken alse di er durumlarda true olur. a b i ade i ade e em a em de b true iken true di er durumlarda alse olur. • boolean de true do ru • boolean de e boolean veri tipi . n inity . . at .s rt( 1.0) 0.0 3.1 1 3.0 . . Değeri at .s rt(2.0) 1.0 10.0 5.0 2.0 .03 3.1 1 .02e23 .03 3.1 1 İfade emel aritmetik operatörlerin yanında ava nın at kütüp anesi karekök trigonometrik onksiyonlar logaritma ve üstel onksiyon gi i irçok onksiyonu da kullanmamamı a olanak sa lar Java at Kütüphanesi p • ath kütü ane inde ߨ ݁ ayıları için azır abitler de mevc tt r ath. ath. rneğin ath. n( ath. 2) ath. o ( ath. ) i adelerinin değerleri 1.0 lacaktır • ath.ran om() met d i e ıkça k llanacağımız argüman almayan ve ) aralığından o ti te değer d ndüren bir m tott r ath Kütüphanesi… yg lamalar için azır r tinler o an D s ription o a t rns t a so t a of a o a o a t rns t ar osin of a a t r t rn an is in t ran t ro pi o a t rns t ar sin of a a t r t rn an is in t ran pi t ro pi o a t rns t ar tan nt of a a t r t rn an is in t ran pi t ro pi o o t rns t an theta from t on rsion of r tan ar oor inat s to po ar oor inat s r theta o a t rns t root of a o a el o a t rns t sma st os st to n ati infinit o a t at is r at r t an or a to t ar m nt an is a to a mat mati a int r s o a t rns t tri onom tri osin of an an s o t rns t p r o i osin of a o a e o a t rns r s n m r e rais to t po r of a o a l o a t rns t ar st os st to positi infinit o a t at is ss t an or a to t ar m nt an is a to a mat mati a int r e e o t rns t n ias pon nt s in t r pr s ntation of a o l o a t rns t nat ra o arit m as e of a o a l o a t rns t as o arit m of a o a a o a o t rns t r at r of t o o a s o a o t rns t sma r of t o o a s o a o t rns t a of t first ar m nt rais to t po r of t s on ar m nt a t rns a o a it a positi si n r at r t an or a to an ss t an o a t rns t o a t at is os st in a to t ar m nt an is a to a mat mati a int r f oat a t rns t os st int to t ar m nt it ti s ro n in p s o t rns t si n m f n tion of t ar m nt z ro if t ar m nt is z ro if t ar m nt is r at r t an z ro if t ar m nt is ss t an z ro s o a t rns t tri onom tri sin of an an s o t rns t p r o i sin of a o a s o a t rns t orr t ro n positi s ar root of a o a a o a t rns t tri onom tri tan nt of an an a o t rns t p r o i tan nt of a o a e ees o an ra on rts an an m as r in ra ians to an appro imat i a nt an m as r in r s a a s o an on rts an an m as r in r s to an appro imat i a nt an m as r in ra ians t a s a s as aa aa karıdakine benzer tabl lara ( licati n pro rammin int rfa ) adı verilir ani nk iy nlar ve r edürler t l l ğ d r o ifi r an stati o stati o stati o stati o stati o stati o stati o stati o stati o stati o stati o stati int stati o stati o stati o stati o stati o stati o stati o stati int stati o stati o stati o stati o stati o stati o stati o stati o Java Math Kütüphanesinden Bazı Metotlar c c a rt b c tat c o ma n( tr n ar ) nt y = nte er. ar e nt(ar 0 ) boo ean art art art = art && (y % 100 != 0 art = art (y % 400 == 0 y tem.o t. r nt n(art ) Geri d nen değerin ti i anenin adı Bir kütü o b e Kütü = anenin adı G nderilen argüman rt ( b*b – 4.0 * a * c) et d n adı anedeki met d n k llanımı ath. Geri d nen değerin ti i G nderilen argümanın ti i rt( o b e a) ath Kütü anedeki met d n anat mi i c c a } o b e } b Bir kütü Çeşitli Kütüphanelerdeki Metotlar b Artık Yıl ün katı lan yıllar artık yıllardır ncak ün katı lan yıllardan adece e kalan ız larak b lünebilenler artık yıldır na g re yılları artık yıldır ancak artık yıl değildir Girilen yılın artık yıl olup olmadığını belirleyen program int Long int int (int) 2.71828 Math.round(2.71828) (int) Math.round(2.71828) (int) Math.round(3.14159) 3 3 3 2 Değeri public class RandomInt { public static void main(String[] args) { int N = Integer.parseInt(args[0]); double r = Math.random(); int n = (int) (r*N); System.out.println(n); } } Rastgele tamsayı üreten program 0 ile N (argüman) arasında (N dahil değil) rastgele bir tamsayı üreten programı yazınız. Sonucun tipi İfade • Explicit cast: Java’da bir değişken tipinden bir diğer değişken tipine dönüşüm için değişken tipinin ismi parantez içerisine yazılarak dönüşüm gerçekleştiren ve cast adı verilen hazır bir aracı vardır. • Uyarı: Bir değişkeni kendinden kendinden daha büyük tipteki değişkenlere dönüştürdüğümüzde (cast ettiğimizde) veri kaybı olabilir! Tip Dönüşümleri Integer Math Math Math Integer.parseInt(“123”) Math.sqrt(5.0 * 5.0 – 4.0 * 4.0) Math.random() Math.round(3.14159) double double long int Sonucun tipi 3.0 [0,1) 3 123 Değeri Örneğin, b ve c değişkenleri int tipinde iken b*b – 4.0 * c ifadesinde önce c değişkeni 4.0 ile çarpmadan dolayı double değişken tipine terfi eder (promotion). Sonra, int değişken tipinde olan b*b ifadesi yine double değişken tipine dönüştürülür. • Automatic promotion for numbers: Java primitif sayısal değişkenlerle işlem yaparken bazen değişkenleri otomatik olarak daha geniş bir değişken tipine dönüştürür. Tip Dönüşümleri Kütüphane Adı İfade • Açık (explicit) tip dönüşümü: Bir metot yardımıyla (verilen argümanı) bir başka tipe dönüştürmek. Örneğin, Tip Dönüşümleri