Bil 102 Bölüm 6 Diziler.

Slides:



Advertisements
Benzer bir sunumlar
Programlama-II (Java ile Bilgisayar Programlama)
Advertisements

Saatte V km hız ile giden bir aracın t zamanda aldığı yolu bulan metodu yazınız. Metodu kullanacak bir program yazınız. ( yol=hız*zaman, x=V*t) — Metot.
Dizi Kullanan Örnekler
Diziler.
Bölüm 8 Diziler Dizi Tanımı Dizi Elemanlarına Değer Atama
SCANNER SINIFI ve KLAVYEDEN VERİ OKUNMASI
Ders İçeriği Bağlantılı Liste İki Yönlü Bağlantılı Liste
void medyan(int cevap[]) { int j; siralama(cevap);
Programlama-II (Java ile Bilgisayar Programlama)
Nesneye Dayalı Programlama
Tanım Birbirleriyle ilişkili ve bitişik iki ya da daha fazla bellek hücresinden oluşan yapı Örnek dizi tanımı: int tamsayiDizi[10]; tamsayiDizi[0] /*ilk.
Diziler.
Bölüm 4 – Kontrol İfadeleri:1.kısım
OOP UYGULAMA 5.
EDUTIME Java Day 4 Serdar TÜRKEL.
Selçuk Üniversitesi’nin Bilişime Gönül Veren Gençleri
BPR152 ALGORİTMA VE PROGRAMLAMA - II
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 4: Diziler
Diziler(Arrays).
Karar ifadeleri ve Döngüler
P AKET E RIŞIMLERI SıNıFLARıN YENIDEN KULLANıMı. P AKET ( P ACKAGE ) Paketler kütüphaneleri oluşturan elemanlardır. import java.io.BufferedReader; BufferedReader.
Nesne Tabanlı Programlama Dersi Edirne Kız Teknik ve Meslek Lisesi Hazırlayan : Nuri AVCI
Nesneye Yönelik Programlama Dr. Pelin GÖRGEL
Diziler.
Soru1: Dışardan "%s" format belirteci kullanılarak girilecek 20 elemanlı bir dizinin elemanlarının kaç tanesinin rakam, kaç tanesinin harf ve kaç tanesinin.
DİZİLER.
DELEGATE OOP-UYG.
Erişim Denetimi, Fonksiyon
C# Metot Overloading (Aşırı yükleme)
Sorular? Öneriler?. Referanslar Referanslar (Tekrar) Eğer aşağıdaki gibi yazarsak ne olur: int x; double y; char c; ???
JAVADA PROGRAM DENET İ M İ VE OPERATÖRLER. int a ; a=4 ; // do ğ ru bir atama 4=a ; // yanlış bir atama!
C#.NET 5.0 C# .NET 5.0 Eğitimleri Volkan KANAT.
C#.NET 5.0 C# .NET 5.0 Eğitimleri Volkan KANAT.
Java Sınıf ve Nesne Kavramı UML Gösterimi
Diziler Adres Kavramı Nesnelerin Adresleri sizeof Operatörü
Diziler Dizi Tanımı Dizi Elemanlarına Değer Atama Diziler ve Göstergeler 2-Boyutlu Diziler.
EDUTIME Java Day 8 Serdar TÜRKEL.
Numaralandırmalar(Enumaration)
Kalıtım , Sınıf Asli Ergün.
Class KahveFincani { public KahveFincani() { System.out.println("KahveFincani..."); } } public class YapilandirciBasitOrnek { public static void main(String[]
Diziler (Arrays).
JAVA’DA DİZİLER Dr.Galip AYDIN.
Dizi ve ArrayList.
Ders İçeriği Liste Soyut veri yapısı (ADT)
Diziler. Dizi Tanımı Dizi Elemanlarına Değer Atama Diziler ve Göstergeler 2-Boyutlu Diziler.
Bölüm 5 Nesneler ve Metotlar
Bil 102 Bölüm 3 Java’da Program Akış Denetimi Bil 1021.
DİZİLER Arrays.
Bilgisayar programlarının en büyük avantajı, kullanıcının işini kolaylaştırmalarıdır. Her bilgisayar programı bunu değişik metotlar kullanarak sağlar.
Outline 4.1 Giriş 4.2 Algoritmalar 4.3 Pseudocode 4.4 Kontrol İfadeleri 4.5 if tek-seçimli ifadeler 4.6 if else seçimli ifadeler 4.7 while döngü ifadeleri.
Ders 2- Veri türleri, Karar ve Döngü Yapıları, Görsel Kontröller
JAVA PROGRAMLAMA ORNEKLER
ODTU-SEM Copyright (c) 2011 Kalıtım(Inheritance) Subclass lar tüm method ve attributes larının superclass ından alırlar. Bu işlem için extends keyword.
SINIFLAR ve NESNELER. İlk sınıfımızı ekleyelim class KrediHesap { public ulong HesapNo; public double Limit; public string KartSahibi; }
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 4: Diziler
BİLGİSAYAR programlama II
BİLGİSAYAR programlama II
BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler Yrd. Doç. Dr. Altan MESUT Trakya Üniversitesi Bilgisayar Mühendisliği.
Bölüm 8 Diziler Dizi Tanımı Dizi Elemanlarına Değer Atama Diziler ve Göstergeler 2-Boyutlu Diziler.
BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler
BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler
C Sharp 9. hafta - dIZILER.
DİZİLER Bellekte sıralı bir şekilde bulunan ve aynı türden bilgilerin saklandığı veri yapısına dizi (array) denir. Örneğin kullanıcıdan 7 kişinin not ortalamasını.
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 4: Diziler
NBP103 Programlama Temelleri Öğr. Gör. Mahmut Kılıçaslan
JAVA’DA DİZİLER. Özet  Dizi: belirli sayıda ve aynı veri türünden de ğ işkenlere aynı adla erişilmesini sa ğ layan bir yapıdır.  Dizilerde döngü işlemleri.
Kurucular(Yapıcılar), Yıkıcılar
Nesneye Dayalı Programlama 1
BLP 4210 PLATFORM BAĞIMSIZ PROGRAMLAMA
Diziler(Arrays).
Sunum transkripti:

Bil 102 Bölüm 6 Diziler

Diziler Örn. 40 tane öğrencinin son not ortalamasını tutmak gerekiyor. double ogrenci1 = 65.5; double ogrenci2 = 45; double ogrenci3 = 83.5; double ogrenci4 = 66; … double [ ] notlar = new double [40]; ? double ogrenci40 = 91;

Dizi Aynı veri türüne veya sınıfa ait birbirleri ile ilişkili veriler topluluğu. Dizinin elemanları basit veri türüne ait veya nesneye ait olabilir. Bu duruma göre hafızada uygun yer ayrılır. veri_türü [ ] dizi_adı = new veri_türü [dizi_uzunluğu] ; int [] a = new int[10];

Dizi Dizilerde indisler 0’dan başlar. String de olduğu gibi, uzunluğu 5 olan bir dizinin ilk elemanının indisi (bulunduğu pozisyon) 0, son elemanının indisi 4 olur. Örn. 7 günlük sıcaklık derecelerini tutmak istersek: int gun1, gun2, gun3, gun4, gun5, gun6, gun7; int [ ] sicaklik = new int [7]; 7 adet int tipinde değişken tanımlamaya eşdeğerdir: sicaklik[0], sicaklik[1], sicaklik[2], sicaklik[3], sicaklik[4], sicaklik[5], sicaklik[6]

Dizi Dizi tanımlandıktan sonra her bir elemanına değer atanabilir: sicaklik[0] = 7; sicaklik[1] =4; sicaklik[2] =-1; sicaklik[3] =-3; sicaklik[4] =0; sicaklik[5] =2; sicaklik[6] =3;

Dizi - Örnekler Kullanıcının bir aylık sıcaklık değerini klavyeden gireceği ve bu değerlerin ortalamasını, en düşük ve en yüksek sıcaklığı bulan bir kod yazın:

import java.util.*; public class ortalamaSicaklik { public static void main(String [] args) { Scanner klavye = new Scanner(System.in); double [] sicaklik = new double [30]; int indis, gun1, gun2; double toplam,ortalama, enDusuk, enYuksek; toplam = 0.0; for (indis=0; indis <= 29; indis++) { System.out.print (“Gun: “ + (indis+1) + “ sicaklik: “); sicaklik[indis] = klavye.nextDouble(); toplam += sicaklik[indis]; } ortalama = toplam / 30.0; System.out.println (“Kasim ayi ortalamasi = “ + ortalama); enDusuk = sicaklik[0]; gun1 = 0; enYuksek = sicaklik[0]; gun2 = 0; for (indis=1; indis <=29; indis++) { if (enDusuk > sicaklik[indis]) { enDusuk = sicaklik[indis]; gun1 = indis; } if (enBuyuk < sicaklik[indis]) { enBuyuk = sicaklik[indis]; gun2 = indis; } } System.out.println (“En dusuk sicaklik = “ + enDusuk + “ Gun = “ + (gun1+1)); System.out.println (“En yuksek sicaklik = “ + enYuksek + “ Gun = “ + (gun2+1)); } }

Dizi tanımlanması double [] sinavNotu = new double [50]; Dizi elemanlarının veri türü Dizinin adı Dizide kaç eleman var double [] sinavNotu; sinavNotu = new double[50]; sinavNotu[3] = 78.3; Dizinin dördüncü elemanı (3 numaralı indis) = 78.3

length Length ile dizinin büyüklüğünü (eleman sayısını) bulabiliriz. sinavNotu.length dizinin büyüklüğünü verir double[] sinavNotu = new double[50]; System.out.println (“Dizinin uzunlugu: “ + sinavNotu.length ); Dizinin uzunluğu atama yoluyla değiştirilemez: sinavNotu.length = 100; // Yazılamaz, hatalı Dizinin boyutlarının dışına çıkmamaya dikkat edilmeli! sınavNotu[50] = 65.1; //Max indis aşıldı Derleyici hatası olmaz ama program çalışması sırasında Array index out of bounds mesajı alınır (çalışma zamanı hatası) Yukarıdaki sınavNotu dizisinin tanımına göre en son elemanın indisi 49 olur. (0 ile 49 arasında olacak. Toplam 50 eleman.)

Diziye İlk Değer Atama Diziler yaratıldığı sırada ilk değerlerini alabilirler: int [] sicaklik = {17,16,14,15,18,17,16}; Dizinin 7 elemanlı bir dizi olduğunu anlıyoruz. Veya dizi tanımlandıktan sonra tek tek değer ataması yapılabilir: int [] sicaklik = new int [7]; sicaklik[0]=17; sicaklik[1]=16; …; sicaklik[6]=16;

Diziye İlk Değer Atama int veri tipindeki diziler eğer ilk değer almazlarsa otomatik olarak 0’a atanırlar. Fakat programın daha anlaşılır olması için, daha sonra değiştirilmek üzere bütün değerler bir döngü kullanarak 0’a da atanabilir. Kod: int [] sicaklik = new int[365]; int i; for (i=0; i < sicaklik.length; i++) sicaklik[i] = 0;

Örnekler Bir dizi yapın ve bu diziyi başka bir diziye kopyalayın: … int dizi1 = { 7, 4, 8, 1, 4, 1, 4}; float dizi2 = new float[dizi1.length]; //diziyi yazdir //dizi1’i dizi2’ye kopyala for(i=0; i< dizi1.length; i++) dizi2[i] = (float) dizi1[i]; //dizi2 yazdir Örnek 2) Math.random() metodunu kullanarak 500 elemanlı int veri türünde bir dizi yapıp bu dizinin ortalaması, min ve max umunu ekrana basacak programı kodlayınız.

Sınıf ve Metotlarda Dizi Kullanımı Bir sınıf içinde bir değişken tanımlanabildiği gibi bir dizi de tanımlanabilir. (gerçekleştirme değişkeni) Dizilerin tamamı metotlara gönderilebilirler – parametre olarak-, bu durumda bir nesne olarak gönderildikleri için referans ile çağırma tekniğiyle gönderilmiş olurlar. Eğer dizinin bir elemanı metoda gönderilirse ve dizi elemanlarının veri tipi basit ise değer ile çağırma tekniği uygulanır, eğer dizi elemanları nesne ise referans ile çağırma tekniği uygulanır.

Elemanları Ogrenci adında bir sınıf tipinde olan kayit adında bir dizi oluşturun: Ogrenci [] kayit; kayit[i] = new Ogrenci(); // kayit dizisinin her bir elemani Ogrenci sinifinin bir nesnesi

Metoda Giren İndisli Dizi Elemanları Dizinin bir elemanı metoda parametre olarak yollanabilir. ortalama = ortalamaBul (birinciDeger, sicaklik[i]); Bu örnekte sicaklik ve birinciDeger parametrelerinin ortalamaları ortalamaBul metoduyla hesaplanmaktadır. Bu durumda sicaklik[i] metot tanımındaki veri tipinde sıradan bir değişken olarak metoda gönderilmiştir. Eğer metoda gönderilen dizinin veri tipi basit veri tipiyse, metot bu indisli dizi elemanın değerini değiştiremez. Eğer, veri tipi bir nesne ise, referans ile çağırma vasıtasıyla bu indisli elemanın değeri değişebilir.

Metoda Giren Diziler Bir diziyi metoda gönderirken köşeli parantezler kullanılmaz. Gönderilen dizi bir nesne olarak gönderilmiş olur. double [] sicaklik = new double[30]; ortalama = ortalamaBul (sicaklik); Bu durumda ortalamaBul metodu bir diziyi argüman olarak almaktadır ve bir double değeri alan ortalama geri vermektedir. ortalamaBul değerinin tanımı ise aşağıdaki şekilde olabilir. public double ortalamaBul (double[] deger) { int i, toplam = 0; for (i = 0; i < deger.length; i++ ) toplam = toplam + deger[i]; return (toplam/deger.length); }

Diziler de birer nesne gibi düşünüldüğü için diziler için atama “=” ve eşitlik “==” kavramları dizilerde de geçerli değildir. İki dizi için “=” ifadesi kullanıldığında bu iki dizinin referansı (bellekteki gösterimleri eşitlenmiş olur, dolayısıyla iki dizi de aynı diziyi gösteriyor olurlar.) Aynı şekilde “==” gösterimi ancak iki dizi aynı referansa sahip olduğunda doğru olmaktadır. Bunun yerine nesnelerde olduğu gibi bir equals metodu tanımlamak gerekmektedir.

int [] a = new int[3]; int [] b = new int[3]; int i; for (i = 0; i < a.length; i++ ) a[i] = i; b[i] = i; if (b==a) System.out.println (“== kullanarak esittirler.”); else System.out.println (“== kullanarak esit degildirler.”); == kullanarak esit degildirler

== ile esit degil Esit metodu ile esit public class TestEsitlik { public static void main(String[] args) int[] a = new int[3]; int[] b = new int[3]; int i; for (i = 0; i < a.length; i++) a[i] = i; for (i = 0; i < b.length; i++) b[i] = i; if (b == a) System.out.println("== ile esit."); else System.out.println("== ile esit degil."); if (esit(b,a)) System.out.println(“Esit metodu ile esit."); System.out.println(" Esit metodu ile esit degil."); } public static boolean esit(int[] a, int[] b) { boolean denkmi; if (a.length != b.length) denkmi = false; denkmi = true; //gecici olarak true degeri ata int i = 0; while (denkmi && (i < a.length)) { if (a[i] != b[i]) i++; } } return denkmi; } } == ile esit degil Esit metodu ile esit Static bir metod icinden (main) static bir baska metodu (esit) cagirdigimiz icin, ve her ikisi de ayni sinif icinde tanimli oldugu icin sadece adini kullanmamiz yeterli. Nesne olusturup onun uzerinden cagirmamiza gerek yok.

Dizi Döndüren Metotlar public int faktoriyel(int sayi) Javada metotlar bir nesne döndürebilirler. Diziler de birer nesne olarak kabul edildikleri için metotlarda dizi döndürmek mümkündür. Bu tip bir metot aşağıdaki gibi tasarlanır. public veri_tipi[] metot_ismi (parametre listesi) Metodun ulaşılabilirliği public ya da private olabilir. Ayrıca metot static olarak da tanımlanabilir.

Dizi Döndüren Metotlar public static char [] sesliHarfler () { char[] yeniDizi = new char[8]; yeniDizi [0] = ‘a’; yeniDizi [1] = ‘e’; yeniDizi [2] = ‘ı’; yeniDizi [3] = ‘i’; yeniDizi [4] = ‘o’; yeniDizi [5] = ‘ö’; yeniDizi [6] = ‘u’; yeniDizi [7] = ‘ü’; return yeniDizi; }

Dizi Değerlerinin Sıralanması Değerleri küçükten büyüğe veya tersi şekilde sıralamak için. Kabarcık sıralama (Bubble Sort) (n sayıyı küçükten büyüğe sıraya dizmek için bir algoritma) Algoritma için iç içe iki döngü ve bir yineleme sayacı kullanılır. Bu yineleme sayacının bir turunda, dizideki kalan en büyük sayı dizinin sonuna gider. Buna göre ilk yinelemede dizinin en büyük sayısı en sona gider. Bundan sonra artık en son sayıyı denetlemeye gerek yoktur. İkinci yinelemede en büyük ikinci sayısı sondan bir önceki yere gider. Bu şekilde n-1 yinelemede n sayı sıraya dizilmiş olur. Her yinelemede ise denetlenmesi gereken sayı adedi 1 azalır.

Kabarcık Sıralama (Bubble Sort) 12 4 15 7 20 13 4 12 15 7 20 13 4 12 7 15 20 13 4 12 7 15 13 20 4 7 12 15 13 20 4 7 12 13 15 20  Tamamlandı

public class kabarcikSiralama { final static int maksEleman = 2000; public static void main(String[]args) { int n; Scanner klavye = new Scanner(System.in); int[] liste = new int[maksEleman]; //listeyi yarat System.out.print("Liste boyunu giriniz:"); n = klavye.nextInt(); for(int i=0; i<n; i++) liste[i] = (int)Math.round(Math.random()*5)+1; liste = kabarcik(liste,n); System.out.println("Sirali Liste:"); System.out.println(liste[i]); } //------------------------------------------ public static int[] kabarcik(int[] x, int boy) int gecici; for(int k=1; k<boy; k++) for(int i=0; i<boy-k; i++) if(x[i]>x[i+1]) gecici = x[i]; x[i] = x[i+1]; x[i+1] = gecici; return x; }} Static bir metod icinden (main) static bir baska metodu (kabarcik) cagirdigimiz icin, ve her ikisi de ayni sinif icinde tanimli oldugu icin sadece adini kullanmamiz yeterli. Nesne olusturup onun uzerinden cagirmamiza gerek yok.

Dizilerde Veri Türü Olarak Nesne Kullanılması Bir dizinin eleman tipi nesne olabilir. public class Kisi { private String isim; private String ePosta; private String dogumYeri; private double gpa; //---------------------------------------------------- public Kisi(String a, String b, String c, double o) isim=a;ePosta=b;dogumYeri=c;gpa=o; } public Kisi() public void setIsim(String adSoyad) isim=adSoyad; … Kisi [] ogrenci = new Kisi [maksMevcut]; ogrenci[i] = new Kisi(); //nesne kurucu ogrenci[i].setIsim(“Ali Veli”);

Çok Boyutlu Diziler Matris veya çok boyutlu veri gösterimi için kullanılırlar. 2 Boyutlu bir dizi: veri_turu [] [] matris = new veri_turu [4] [4]; Bir elemana ulaşmak için yerini 2 indisi de kullanarak tespit etmek lazım. matris[1][1] = 70; matris[0] [0]= 80; matris[1][0]=67; matris[2][3]=36; 80 65 55 70 67 90 45 73 36 25 16 81 96

Çok Boyutlu Diziler Çok boyutlu diziler aslında her boyut içinde yer alan birer boyutlu dizilerin bileşkesidir. Tüm dizinin uzunluğu (büyüklüğü) her boyuttaki dizilerin uzunluğunun çarpımına eşittir. Örnek: int [][] tablo = new int [10][20]; tablo[3][5] = 23; System.out.println (“Tablo cok boyutlu dizisinin uzunlugu: “ + tablo.length);  10

Ayrıca her boyuttaki dizilere de ayrı ayrı erişebiliriz, bunları da birer boyutlu diziler olarak kullanabiliriz. Örnek: int [][] tablo = new int [3][10] yazmak yerine int [][] tablo; tablo = new int [3][]; tablo[0] = new int [10]; tablo[1] = new int [10]; tablo[2] = new int [10]; yazılabilir ve bu iki ifade de birbirine denktir. Bu şekilde çok boyutlu diziyi oluşturan tek boyutlu dizilerin uzunluklarını da ayrı ayrı kullanmak mümkün olabilir. Buna göre tablo[0].length ifadesi 0. indisteki dizinin uzunluğunu gösterir.

int [][] matris = new int [4][4]; for (sira = 0; sira <4; sira++ ) for (sutun = 0; sutun <4; sutun++ ) matris [sira][sutun] = (int) (Math.random()*5) + 1; { System.out.print (matris[sira][sutun] + “ “); System.out.println (); } Çıktı: 7 4 5 3 6 5 4 1 2 4 5 8 9 6 5 3

Referans : kadioğlu