230 likes | 417 Views
7.HAFTA. Dersin Adı :ALGORİTMA GELİŞTİME TEKNİKLERİ Dersin Kodu :YBS506. Konu:Diziler. Diziler. Dizi, belirli sayıda verinin bellekte saklandığı değişken listeleridir. Tanımlanması: int dizi[10]; şeklinde tanımlanan bir dizi için şunları söyleyebiliriz:
E N D
7.HAFTA Dersin Adı :ALGORİTMA GELİŞTİME TEKNİKLERİDersin Kodu :YBS506 Konu:Diziler E-mail:speldek@bartin.edu.tr
Diziler • Dizi, belirli sayıda verinin bellekte saklandığı değişken listeleridir. Tanımlanması: int dizi[10]; şeklinde tanımlanan bir dizi için şunları söyleyebiliriz: • int tipinde bir değişkenlere sahiptir. • 10 tane elamanı vardır. • Tek boyutlu bir dizidir.
Diziler Değer Atanması İnt dizi[10]={1,2,3,4,5,6,7,8,9,10}; Diziye başlangıç değerleri atayabiliriz. Hafızadaki görünümü: Dizilerin indis numaraları 0(sıfır) dan başlar Dizinin 1. elemanına ulaşmak istiyorsam dizi[0] yazmalıyım.
Diziler Değer Atanması İnt dizi[10]={1,2,3,4,5}; Dizinin ilk beş elamanına değer atanacak. Geriye kalan elamanlara 0 atanacaktır Hafızadaki görünümü:
Diziler Değer Atanması İnt dizi[10]={0}; Dizinin tüm elemanlarına 0 atanacaktır. Hafızadaki görünümü:
Diziler İnt dizi[]={1,2,4,5} Dizinin elaman sayısı atadığımız değer kadar olacaktır. Yukarıdaki dizi boyutunun eleman sayısı dörtür.
Dizilerde Değişken Tipleri Dizileri istediğimiz değişken tipinde tanımlayabiliriz; int, float, char, double … Dizinin tüm elamanları aynı değişken tipinde olmalıdır.
Dizilerin C++ da Kullanımı Değişken tipi • #include"stdafx.h" • #include<iostream> • usingnamespace std; • int _tmain(int argc, _TCHAR* argv[]) • { • int ybs[10]={1,2,3,4,5,6,7}; • cout<<"Dizinin Birinci Elamani :"<<ybs[0]<<endl; • cout<<"Dizinin Sonuncu Elamani :"<<ybs[9]<<endl; • getchar(); • return 0; • } Dizi adı Atanan değişkenler
Örnekler int a[10]={12,2,45,56,89,12,2,10,33,33}; Şeklinde tanımlanan dizinin En büyük elamanını En küçük elamanını Dizi elemanların toplamını Dizi elemanlarının ortalaması üçe bölünebilen dizi elamanları ekranda gösteriniz
Karakter Diziler char karakter[]=“birinci”; Karakter dizileri yukarıdaki gibi tanımlayabiliriz. karakter adlı dizinin yedi elemanı vardır. karakter[4] sahip olduğu değer n dir. charkarakter[]={‘b','i','r',‘i',‘n',’c’,’i’,'\0'}; Şeklindeki tanımlama yukarıdaki ile ayanı şeyi ifade etmektedir. Ekrana yazdırmak için. cout<<karakter;
Dizilerin C++ da Kullanımı Değişken tipi • #include"stdafx.h" • #include<iostream> • usingnamespace std; • int _tmain(int argc, _TCHAR* argv[]) • { • char karakter1[]="birinci"; • char karakter2[] = { 'b', 'i', 'r', 'i', 'n','c','i', '\0' }; • cout<<"karakter1[4] :"<<karakter1[4]<<endl; • cout<<"karakter1 :"<<karakter1<<endl; • cout<<"karakter2[4] :"<<karakter2[4]<<endl; • cout<<"karakter2 :"<<karakter2<<endl; • getchar(); getchar(); • return 0; • } Dizi adı Atanan değişkenler ‘\0’ karakter dizinin bitiğini gösterir. İkinci şekilde tanımla kullanımı için zorunludur.
Dizilerde Boyut Şimdiye kadar sadece bir boyutlu diziler gördük. Diziler çok boyutlu olabilirler a[3] tek boyutlu bir dizi. 3 elemanı var a[3][4] iki boyutlu bir dizi. 12 elamanı var a[3][4][5] üç boyutlu bir dizi 60 elemanı var
Çok Boyutlu Dizilerin Değer ataması int a1[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; Dizinin yedinci elemanına ulaşmak için a1[1][2] yazmalıyız.
C++ Örneği Dizinin kaç elemanlı olduğunu belirtmiyoruz. • #include"stdafx.h" • #include<iostream> • usingnamespace std; • int _tmain(int argc, _TCHAR* argv[]) • { • int a1[3][4]={{1,2,3,4}, • {5,6,7,8}, • {9,10,11,12} • }; • char a2[][7]={"ahmet", "mehmet" ,"ali", "veli" ,"mahmut", "emine", "fadime", "hatice","serkan","erkan","hakan","coskun"}; • cout<<"a1 7. eleman :"<<a1[1][2]<<endl; • cout<<"a2 7. eleman :"<<a2[6]<<endl; • getchar(); getchar(); • return 0; • } Dizimizdeki elamanların en fazla kaç karakterli olacağını belirtiyoruz. Eğer husamettin ismini girseydik hata verecekti. Çünkü isim 7 karakterden fazla.
Dizilerin Fonksiyona Gönderilmesi Dizileri fonksiyonlara göndermek için iki parametre göndermemiz lazım. 1. Dizinin adı 2. Dizinin eleman sayısı int ybs[23]; fonksiyon(ybs , 23);
Dizilere Fonksiyona Gönderilmesi Diziler referanslı çağırma yöntemiyle çağrılırlar Dizinin adı dizinin ilk elemanının adresidir Dizinin bellekteki orijinal değerlerini değiştirebilir. Fonksiyonun prototipi: void dizifonksiyon(int [] ,int); Fonksiyon başlığı: void dizifonksiyon(int a[] ,int b );
C++ Örneği Fonksiyon prototipinde [ ] köşeli parantezleri açıyoruz • #include"stdafx.h" • #include<iostream> • usingnamespace std; • void diziFonksiyon(int [],int); • int _tmain(int argc, _TCHAR* argv[]) • { • int ybs[]={1,2,3,4,5,6,7,8,9,10,11,12,13};//dizini • cout<<"ybs[0] :"<<ybs[0]<<endl; • diziFonksiyon(ybs,13); • cout<<"ybs[0] :"<<ybs[0]<<endl; • getchar(); getchar(); • return 0; • } • void diziFonksiyon(int a[],int b) • { • a[0]=a[1]+a[2]; • cout<<"a[0] :"<<a[0]<<endl; • } Fonksiyonun eleman sayısını gönderiyoruz Fonksiyon çağırılmadan ve çağırıldıktan sonra ki değerlere dikkat edelim. Diziler fonksiyonlara referans yöntemiyle gönderilir
C++ Örneği Fonksiyonların prototipleri • #include"stdafx.h" • #include<iostream> • usingnamespace std; • void diziEkle(int [],int); • void diziYaz(int [],int); • int _tmain(int argc, _TCHAR* argv[]) • { • int a[10]={12,2,45,56,89,12,2,10,33,33}; • diziYaz(a ,10); • diziEkle(a,10); • diziYaz(a ,10); • getchar();getchar(); • } • void diziEkle(int x[],int b) • { • for(int i=0;i<b;i++) • x[i]=x[i]+2; • } • void diziYaz(int x[],int b ) • { for(int i=0;i<b;i++) • cout<<" "<<x[i]; • cout<<"\n\n"; • } Birinci satır diziEkle fonksiyonu çağrılmdan önceki değerler İkinci satır diziEkle fonksiyonu çağrıldıktan sonraki değerler
C++ Örneği: Dizinin elemanlarını ekrana yazdıran ve bir sağa kaydıran fonksiyonlar • void diziKaydir(int y[],int b) • { • int tut=y[b-1]; • for(int i=9;i>0;i--) • y[i]=y[i-1]; • y[0]=tut; • diziYaz(y ,10); • } • #include"stdafx.h" • #include<iostream> • usingnamespace std; • void diziYaz(int [],int); • void diziKaydir(int [],int); • int _tmain(int argc, _TCHAR* argv[]) • { • int a[10]={12,2,45,56,89,12,2,10,33,33}; • int b[10]={1,2,4,5,8,1,2,1,3,5}; • diziYaz(a ,10); • diziKaydir(a,10); • getchar();getchar(); • } • void diziYaz(int x[],int b ) • { for(int i=0;i<b;i++) • cout<<" "<<x[i]; • cout<<"\n\n"; • } Fonksiyonlarımı her yerden çağırabilirim. Birinci diziYaz fonksiyonumu main() nin içinden. İkinci diziYaz fonksiyonumu diziKaydır’ın içinden çağırıyorum
C++ Örneği: İki diziyi toplayan fonksiyon Fonksiyonuma iki tane dizi gönderiyorum • void diziYaz(int x[],int b ) • { • for(int i=0;i<b;i++) • cout<<x[i]<<"\t"; • } • voiddizileriTopla(int x[],int y[],int z,int t) • { • int d[10]; • for(int i=0;i<10;i++) • d[i]=x[i]+y[i]; • diziYaz(d,10); • } • #include"stdafx.h" • #include<iostream> • usingnamespace std; • void diziYaz(int [],int); • voiddizileriTopla(int [],int [],int,int); • int _tmain(int argc, _TCHAR* argv[]) • { • int a[10]={12,2,45,56,89,12,2,10,33,33}; • int b[10]={1,2,4,5,8,1,2,1,3,5}; • cout<<"\na :"; • diziYaz(a ,10); • cout<<"\nb :"; • diziYaz(b ,10); • cout<<"\na+b :"; • dizileriTopla(a,b,10,10); • getchar();getchar(); • } diziYaz fonksiyonumu 3 defa çağırıyorum. İkisi mainde biride dizileriTopla fonksiyonunun içinde
C++ Örneği: İki boyutlu diziyi ekrana yazdıran fonksiyon İki boyutlu dizileri fonksiyonlara gönderirken birinci parametrede [][] iki tane köşeli parantez kullanıyorum sütün sayısını yazıyorum. İkinci parametrede satır sayısını gönderiyorum • #include"stdafx.h" • #include<iostream> • usingnamespace std; • voidikiBoyutluDiziYaz(int [][3],int); • int main() • { • int a[2][3]={{2,3,5},{10,11,12}}; • ikiBoyutluDiziYaz(a,2); • getchar();getchar(); • } • voidikiBoyutluDiziYaz(int x[][3],int b) • { • for(int i=0;i<b;i++) • { • cout<<"\n"; • for(int j=0;j<3;j++) • cout<<"\t"<<x[i][j]; • } • } İki boyutlu dizilerin elemanlarına ulaşmak için iki tane for döngüsü kullanıyorum. Birinci döngüde satırlara ikinci döngüde sütunlara ulaşıyorum
C++ Örneği: İki boyutlu diziye 1 ile 9 arasında rastgele değerler atayan ve ekrana yazdıran fonksiyonlar • voidikiBoyutluDiziYaz(int x[][10],int b) • { • for(int i=0;i<b;i++) • { • cout<<"\n"; • for(int j=0;j<10;j++) • cout<<" "<<x[i][j]; • } • } • voidikiBoyutluDiziDegerAta(int y[][10],int b) • { • for(int i=0;i<b;i++) • { • for(int j=0;j<10;j++) • y[i][j]=rand()%9+1; • } • } • #include"stdafx.h" • #include<iostream> • #include<cstdlib> • #include<ctime> • usingnamespace std; • voidikiBoyutluDiziYaz(int [][10],int); • voidikiBoyutluDiziDegerAta(int [][10],int); • int main() • { • rand(); • srand(time(0)); • int a[10][10]; • ikiBoyutluDiziDegerAta(a,10); • ikiBoyutluDiziYaz(a,10); • getchar();getchar(); • }
C++ Örneği: iki boyutlu dizilere değer atayan, toplayan ve ekran yazdıran fonkisyonlar • voidikiBoyutluDiziYaz(int x[][10],int b) • { • for(int i=0;i<b;i++) • { • cout<<"\n"; • for(int j=0;j<10;j++) • cout<<" "<<x[i][j]; • } • } • voidikiBoyutluDiziDegerAta(int y[][10],int b) • { • for(int i=0;i<b;i++) • { • for(int j=0;j<10;j++) • y[i][j]=rand()%4+1; • } • } • voidikiBoyutluDiziTopla(int x[][10],int y[][10],int b,int c) • { • int d[10][10]; • for(int i=0;i<b;i++) • { • for(int j=0;j<10;j++) • d[i][j]=x[i][j]+y[i][j]; • } • cout<<"\n\n"; • ikiBoyutluDiziYaz(d,10); • } • #include"stdafx.h" • #include<iostream> • #include<cstdlib> • #include<ctime> • usingnamespace std; • voidikiBoyutluDiziYaz(int [][10],int); • voidikiBoyutluDiziDegerAta(int [][10],int); • voidikiBoyutluDiziTopla(int[][10],int[][10],int,int); • int main() • { rand(); • srand(time(0)); • int a[10][10]; • int b[10][10]; • ikiBoyutluDiziDegerAta(a,10); • cout<<"Dizi a:"; • ikiBoyutluDiziYaz(a,10); • cout<<"\n\n"; • ikiBoyutluDiziDegerAta(b,10); • cout<<"Dizi a:" ; • ikiBoyutluDiziYaz(b,10); • cout<<"\nDizi a + Dizi b:"; • ikiBoyutluDiziTopla(a,b,10,10); • getchar();getchar(); • }