Algoritmalar ve Programlama I Ders 8:DİZİ (VEKTÖR) KAVRAMI

Slides:



Advertisements
Benzer bir sunumlar
FIRAT ÜNİVERSİTESİ TEKNOLOJİ FAKÜLTESİ
Advertisements

DİZİLER – I. Kısım YRD.DOÇ.DR. CİHAD DEMİRLİ
Dizi Kullanan Örnekler
STRİNG FONKSİYONLARI.
BPR151 ALGORİTMA VE PROGRAMLAMA - I
Bölüm 8 Diziler Dizi Tanımı Dizi Elemanlarına Değer Atama
void medyan(int cevap[]) { int j; siralama(cevap);
switch - case Yapısı Döngü Yapıları
String Diziler(Katarlar)
Diziler.
Selçuk Üniversitesi’nin Bilişime Gönül Veren Gençleri
Elektrik-Elektronik Mühendisliği Bölümü DİZİLER C Programlama Dili Yaz Stajı Cengiz TEPE SAMSUN 2007.
BPR152 ALGORİTMA VE PROGRAMLAMA - II
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 4: Diziler
Diziler(Arrays).
Bölüm 10 Yapılar ve Birleşimler
While Döngüsü Tekrarlama deyimidir. Bir küme ya da deyim while kullanılarak bir çok kez yinelenebilir. Yinelenmesi için koşul sınaması döngüye girilmeden.
İNTERNET PROGRAMCILIĞI I BTP 207 Ders 9. Tek değişkende birden fazla bilgi tutulmak istendiğinde kullanılır. Kullanım şekli: var dizi_adı= new Array(eleman1,
Görsel C# ile Windows Programlama
Bilgisayar Programlama
Nesneye Yönelik Programlama
Temel tanımlar ve işleyiş
Programlamaya Giriş ve Algoritmalar
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.
C PROGRAMLAMA DİZİLER (ARRAYS).
Diziler (Arrays).
Bölüm 3: Diziler BTEP 102 – Veri Yapıları ve Programlama
C PROGRAMLAMA FONKSİYONLAR Adres ile Fonksiyon Çağırma Pointer (İşaretçiler) ile Fonksiyon Çağırma Rekürsif Fonksiyonlar.
Bilgisayar Programlama. Tek bir değişken tanımlamak için aşağıdaki gibi bir yazım yeterlidir. int i; Hatırlanacağı gibi bu tarz bir tanımlamada.
PROGRAM DENETİM DEYİMLERİ
DİZİLER Arrays.
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 4: Diziler
Algoritmalar ve Programlama I Ders 2: Akış Diyagramları
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
Algoritmalar ve Programlama I Ders 10: ALTPROGRAM KAVRAMI ve FONKSİYON
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
Bölüm 3 Atama ve Girdi/Çıktı Komutları Bölüm 3 Atama ve Girdi/Çıktı Komutları Atama Komutu Operatörler İsim Sabitleri Veri Tipi Dönüşümü Çıktı Fonksiyonu.
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
BİLGİSAYAR programlama II
BİLGİSAYAR programlama II
Sıralama. Sıralama, bir dizideki sayısal elemanların küçükten büyüğe veya büyükten küçüğe, sayısal olmayan bir dizideki elemanların ise A’ dan Z’ ye.
BİLGİSAYAR PROGRAMLAMA Ders 5: Döngüler
BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler Yrd. Doç. Dr. Altan MESUT Trakya Üniversitesi Bilgisayar Mühendisliği.
Akış Diyagramları - 1. Akış Diyagramı  Algoritmalar doğal dille yazıldıklarında herkes tarafından aynı biçimde anlaşılmayabilir.  Ancak, akış diyagramlarında.
BİLGİSAYAR PROGRAMLAMA Araş. Gör. Ahmet ARDAHANLI Kafkas Üniversitesi Mühendislik Fakültesi.
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
O R T L G İ M A A Ve Akış şemaları.
Bölüm 8 Diziler Dizi Tanımı Dizi Elemanlarına Değer Atama Diziler ve Göstergeler 2-Boyutlu Diziler.
Bölüm 3 Atama ve Girdi/Çıktı Komutları
Fonksiyonlar ve Diziler
BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler
C Programlama Dili Bilgisayar Mühendisliği.
BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler
Algoritmalar II Ders 1: Alan zaman takası yöntemi.
Insertion Sort Fikir: Oyun kartlarını sıralamaya benzer.
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ı.
BİLGİSAYAR PROGRAMLAMA Ders 5: Döngüler
Bölüm 8 Diziler Dizi Tanımı Dizi Elemanlarına Değer Atama
İleri Algoritma Analizi
tanımları yapabilmeniz gerekmektedir .
Bölüm 8 Diziler Dizi Tanımı Dizi Elemanlarına Değer Atama
Algoritma Nedir? Algoritmayı, herhangi bir problemin çözümü için izlenecek yolun adımlar halinde yazılması olarak tanımlayabiliriz. Algoritma, bir problemin.
YAPISAL PROGRAMLAMA Hafta-7
Bölüm 3 Atama ve Girdi/Çıktı Komutları
Diziler(Arrays).
Sunum transkripti:

Algoritmalar ve Programlama I Ders 8:DİZİ (VEKTÖR) KAVRAMI Doç. Dr. Cemil Öz Algoritmalar ve Programlama I Ders 8:DİZİ (VEKTÖR) KAVRAMI   SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

Değişkenler isimlendirilirken her bir değişken için bir ad kullanmak zorunludur. Bu ise değişken sayısının çok olması durumunda uygun bir yöntem değildir. Bu durumda benzer özelliklere sahip elemanları bir küme gibi düşünerek bu doğrultuda işlem yapmak daha uygun olacaktır.   Belli özelliklere sahip bu elemanların oluşturdukları kümeler dizi (array) olarak adlandırabilir. Diziler, indisli değişkenler kullanılarak adlandırılırlar. Örneğin n elemanlı bir A dizisi için A1, dizinin birinci elemanını ve An , dizinin son elemanını ifade etmektedir. C programlamada, dizi adı herhangi bir geçerli değişken adı olabilir, fakat indis kare parantez( [ .. ] ) içine alınmalıdır.

Örneğin 10 elemanlı bir A dizisinin elemanları sırasıyla A[1], A[2], A[3],…, A[10] şeklinde ifade edilir.   Dizi, art arda gelen aynı tip verileri saklayan bellek elemanları veya bellek hücreleri olarak tanımlanabilir. Dizi tanımlanırken diziye bir isim verilir. Dizi tanımlandıktan sonra programda bu isimle çağrılır. C/C++ programlama dillerinde dizi bildirimi genel olarak aşağıdaki şekilde yapılır; DiziTipi DiziAdı[Büyüklük]

Örnek olarak 10 adet tam sayıyı tutacak bir A dizisi C/C++’ da aşağıdaki şekilde bildirilebilir;   int A[10]; Bir dizi bellekte sabit büyüklükte bir yere yerleşir. Dizi tanımlandıktan sonra program içerisinde dizinin bellekte kapladığı alan miktarında artma veya azalma yapmak mümkün değildir. Örmeğin, 100 elemanlı bir dizi tanımlanırsa, program içerisinde dizinin sadece 10 elemanı kullanılsa bile geri kalan 90 elemanı bellekte yer işgal etmeye devam eder. Bu nedenle diziler tanımlanırken, dizilerde saklanılacak veri miktarı iyi analiz edilmelidir.

Örnek 1: n elemanlı bir sayı dizisinin girişini yapan bir C/C++ programı yazalım ve akış diyagramını çizelim;  

 #include <stdio.h> #include <conio.h> int i,n; int A[100]; void main(void) {clrscr(); printf("dizi eleman sayisini giriniz: "); scanf("%d",&n); for(i=1;i<=n;i++) {printf("dizi elemanı giriniz: "); scanf("%d",&A[i]); printf(" \n"); } getch();  

 Örnek 2: Girilen n elemanlı bir sayı dizisinin en büyük elemanını bulan bir C/C++ programı yazalım ve akış diyagramını çizelim;  

#include <stdio.h> #include <conio.h> int i,eb,n; int A[100]; void main(void) {clrscr(); printf("dizi eleman sayisini giriniz: "); scanf("%d",&n); for(i=0;i<n;i++) {printf("dizi elemani giriniz: "); scanf("%d",&A[i]); printf(" \n"); } eb=A[0]; for(i=1;i<n;i++) { if(eb<A[i]) eb=A[i]; printf("en buyuk sayi= %d\n",eb); getch();  

 Örnek 3:   Klavyeden okunan bir dizi harfin alfabetik sıraya konulmasını sağlayan ve sonucu ekrana yazan bir bir C/C++ programı ve akış diyagramını Örnek alg.4’ te oluşturduğumuz algoritma mantığına göre oluşturalım. Daha önce oluşturduğumuz algoritmadan bir fark olarak, C’ de döngü yapılarını öğrendiğimiz için yapısal programlama kavramında istenmeyen “goto” deyimini kullanmadan akış diyagramını ve programı oluşturalım. Gireceğimiz harfleri söz dizisi tipine sahip olan bir dizi değişkeninde tutabiliriz. Fakat burada söz dizisinin son elemanı olan “NULL” karakterini sıralamaya sokmadığımıza ve ayrıca söz dizisinin ilk elemanı 0 nolu indis ile gösterildiğine dikkat edelim.  

/* Karakter Siralama Programı*/ #include <stdio.h> #include <conio.h> char h[100]; char b; int i,j,k,n; void main(void) {clrscr(); printf("karakter dizisi eleman sayisini giriniz: "); scanf("%d",&n); printf("karakter dizisini bosluksuz giriniz: "); scanf("%s",h); printf(" \n"); k=n; for(i=0;i<n;i++) /* dizinin ilk elemani 0 indisinde dizinin son elemani NULL*/ { k--;   for(j=0;j<k;j++) { if(h[j+1]<h[j]) { b=h[j]; h[j]=h[j+1]; h[j+1]=b; } printf("siralanmis dizi: = %s\n",h); getch();

Örnek 5:   Girilen n elemanlı bir sayı dizisinde hem 4’e hem 5’e bölünebilen sayıları bulan ve başka bir diziye yükleyen bir C/C++ programı yazalım ve akış diyagramını çizelim. Bir değer hem 4’ e hem de 5’ e bölünebiliyor ise en küçük ortak katları olan 20’ ye de kalansız bölünebilmelidir. Yani bu sayının mod 20’ ye göre değeri 0 olmalıdır.

#include <stdio.h> #include <conio.h> int i,k,say,n; int A[100], C[100]; void main(void) {clrscr(); printf("dizi eleman sayisini giriniz: "); scanf("%d",&n); for(i=0;i<n;i++) {printf("dizi elemani giriniz: "); scanf("%d",&A[i]); printf(" \n"); } k=0; say=0; for(i=0;i<n;i++) { if(A[i]%20==0) {k++; C[k]=A[i]; say++; } for(k=1;k<=say;k++) { printf("%d ",C[k]); printf(" \n"); getch();

Seçme sıralama (selection sort) algoritması   Seçme sıralama (selection sort) en basit sıralama algoritmalarındandır. Dizideki ilk elemandan başlanır. Seçilen dizi elemanı ile bu elemandan sonra gelen dizi elemanları sırası ile karşılaştırılır. Eğer küçüklük/büyüklük (sıralama isteğine bağlı olarak) durumu var ise yerleri değiştirilir. İkinci etapta dizinin ikinci elemanı ile bu elemandan sonra gelen dizi elemanları sırası ile karşılaştırılır ve aynı şekilde eğer küçüklük/büyüklük durumu var ise yerleri değiştirilir. Bu karşılaştırma işlemi sondan bir önceki eleman ile son elemanın karşılaştırılmasına kadar devam eder ve aynı şekilde eğer küçüklük/büyüklük durumu var ise yerleri değiştirilir.

Küçükten büyüğe doğru sıralama yapan seçme sıralama (selection sort) algoritması için akış diyagramını çizelim;  

sıralama algoritmasının C/C++ Programı;   /* Secme Siralama Algoritmasi*/ #include <stdio.h> #include <conio.h> int i,j,n,b; int A[100]; void main(void) {clrscr(); printf("dizi eleman sayisini giriniz: "); scanf("%d",&n); for(i=1;i<=n;i++) {printf("A[%d]: ",i); scanf("%d",&A[i]); printf(" \n"); } for(i=1;i<n;i++) {for(j=i+1;j<=n;j++) {if(A[j]<A[i]) {b=A[i]; A[i]=A[j]; A[j]=b;} } for(i=1;i<=n;i++) { printf("%d ",A[i]); printf(" \n"); getch();

Kabarcık sıralama (bubble sort) algoritması   Bu algoritma başlangıçta yer değiştirme sıralaması olarak adlandırılmıştır. Günümüzde kabarcık sıralaması olarak adlandırılmasının nedeni dizi içindeki büyük elemanların algoritmanın her adımında dizi sonuna doğru lineer olarak ilerlemesidir. Bu algoritmada baştan sona doğru yapılan taramalar ile arka arkaya gelen (ardışık) elemanlar kıyaslanır. Eğer küçüklük/büyüklük durumu var ise yerleri değiştirilir. Küçükten büyüğe doğru sıralama yapan kabarcık sıralama (bubble sort) algoritması için akış diyagramını çizelim;

Küçükten büyüğe doğru sıralama yapan kabarcık sıralama (bubble sort) algoritması için akış diyagramını çizelim;  

/* Kabarcik Siralama Algoritmasi*/ #include <stdio.h> #include <conio.h> int i,j,n,b; int A[100]; void main(void) {clrscr(); printf("dizi eleman sayisini giriniz: "); scanf("%d",&n); for(i=1;i<=n;i++) {printf("A[%d]: ",i); scanf("%d",&A[i]); printf(" \n"); } for(i=1;i<=n;i++) {for(j=1;j<n;j++) {if(A[j+1]<A[j]) {b=A[j]; A[j]=A[j+1]; A[j+1]=b;} } { printf("%d ",A[i]); printf(" \n"); getch();

Yerleştirmeli sıralama (insertion sort) algoritması   Bu yöntem sıralama problemlerine getirilen basit ve temel yaklaşımlardan biridir. Algoritmada dizinin ikinci elemanından başlanarak elemanlar sırayla kontrol edilir. Bu algoritmada her eleman, kendinden önceki alt dizideki elemanlar ile karşılaştırılmakta ve daha küçük ise ilgili yerdeki araya yerleştirilmektedir. Bu şekilde dizide geriye doğru ilerlenir. Bu işlem seçilen dizi elemanından küçük değer kalmayıncaya kadar devam eder. İlk dizi elemanı doğru yere yerleştirildikten sonra bir sonraki eleman seçilerek yukarıdaki işlemler tekrarlanır. İşlem dizinin son elemanının seçimi ile tamamlanmış olur.

Yerleştirmeli sıralama (insertion sort) algoritması   Oyun kartlarının sıralanmasında ve yerleştirilmesinde de buna benzer bir yöntem kullanılır. Önce desteden bir kart seçilip kartın geleceği doğru yer bulunur ve bu yerden sonraki kartlar kaydırılarak ilgili kart araya yerine yerleştirilir. Tüm kartlar sıralanana kadar bu işleme devam edilir. Bu yaklaşımdan yola çıkarak dizi elemanının doğru yere yerleştirme işlemi, dizi elemanının geçici değişkende tutularak kendisinden önce gelen, kendisinden büyük elemanların sağa doğru kaydırılması ve boşalan yere bu elemanın yerleştirilmesi ile gerçekleştirilir.

Küçükten büyüğe doğru sıralama yapan yerleştirmeli sıralama (insertion sort) algoritması için akış diyagramı

/* Yerlestirmeli Siralama Algoritmasi*/ #include <stdio.h> #include <conio.h> int i,j,n,b; int A[100]; void main(void) {clrscr(); printf("dizi eleman sayisini giriniz: "); scanf("%d",&n); for(i=1;i<=n;i++) {printf("A[%d]: ",i); scanf("%d",&A[i]); printf(" \n"); }   for(i=2;i<=n;i++) {b=A[i]; j=i; while((b<A[j-1])&&(j>1)) {A[j]=A[j-1]; j--;} A[j]=b; } for(i=1;i<=n;i++) { printf("%d ",A[i]); printf(" \n"); getch();

Dizilerde arama algoritmaları   Çoklu veriler içerisinde istenilen veriyi aramak amacı ile kullanılan algoritmalar arasında en yaygın olarak kullanılanları, sıralı arama ve ikili (binary) arama algoritmalarıdır. Sıralı arama algoritması Yavaş olmasına rağmen basit olan bu algoritmada dizideki tüm elemanlar sıra ile aranan değer ile karşılaştırılır. Bu işlem değer bulunana kadar devam eder.

#include <stdio.h> #include <conio.h> int i,ara,n; int A[100]; void main(void) {clrscr(); printf("dizi eleman sayisini giriniz: "); scanf("%d",&n); for(i=0;i<n;i++) {printf("dizi elemani giriniz: "); scanf("%d",&A[i]); printf(" \n"); } printf("aranan deger: "); scanf("%d",&ara); for(i=0;i<n;i++) {if(ara==A[i]) {printf("deger: %d, sirasi: %d", A[i], i+1); goto son;} } printf("aranan deger yok"); son: getch();

İkili (binary) arama algoritması   İkili arama algoritmasının kullanılabilmesi için dizideki tüm elemanların sıralı olması (küçükten büyüğe doğru olduğunu varsayalım) gerekir. Karşılaştırma işlemine dizinin ortasında bulunan elemandan başlanır. Eğer aranan eleman dizinin orta elemanından küçük ise dizinin ortadan sonraki üst kısmı atılır. Eğer aranan eleman dizinin orta elemanından büyük ise dizinin ortadan önceki alt kısmı atılır. Bu şekilde dizi yarılanmış olur. Bir sonraki aşamada karşılaştırma dizinin kalan parçasının orta elemanı ile yapılır. Aranılan eleman bulununcaya kadar bu şekilde dizi yarılanarak karşılaştırma işlemi devam eder.

Algoritmalar ve Programlama I Sunu Tamamlandı Doç. Dr. Cemil Öz Algoritmalar ve Programlama I SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz