BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler

Slides:



Advertisements
Benzer bir sunumlar
DİZİLER – I. Kısım YRD.DOÇ.DR. CİHAD DEMİRLİ
Advertisements

STRİNG FONKSİYONLARI.
Diziler.
Bilgisayar Programlama Güz 2011
switch - case Yapısı Döngü Yapıları
String Diziler(Katarlar)
Diziler.
MATLAB’İN SAYI YUVARLAMA FONKSİYONLARI
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
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 3: Döngüler
Diziler.
Bilgisayar Programlama (Yrd. Doç. Dr. İbrahim ASRİ)
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.
Nesneye Yönelik Programlama
C ile Programlamaya Giriş
Diziler Adres Kavramı Nesnelerin Adresleri sizeof Operatörü
BM-103 Programlamaya Giriş Güz 2014 (8. Sunu)
Diziler Dizi Tanımı Dizi Elemanlarına Değer Atama Diziler ve Göstergeler 2-Boyutlu Diziler.
NESNEYE YÖNELİK PROGRAMLAMA
Diziler (Arrays).
JAVA’DA DİZİLER Dr.Galip AYDIN.
Bölüm 3: Diziler BTEP 102 – Veri Yapıları ve Programlama
BM-103 Programlamaya Giriş Güz 2014 (4. Sunu)
Diziler. Dizi Tanımı Dizi Elemanlarına Değer Atama Diziler ve Göstergeler 2-Boyutlu Diziler.
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.
Bil 102 Bölüm 6 Diziler.
BM-103 Programlamaya Giriş Güz 2014 (9. Sunu)
DİZİLER Arrays.
Dizgiler Dizgi Tanımı Dizgi Girdi İşlemleri Dizgi Çıktı İşlemleri Dizgi Fonksiyonları Karakter Fonksiyonları Gösterge Dizgileri.
MATLAB’ de Programlama
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 4: Diziler
Bugünkü Konular Döngüler ve Akış Diyagramları C de Döngü Tanımlama
2. HAFTA 2. Hafta.
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
Döngü Komutları. for deyimi bir alt limitten, bir üst limite kadar programın belirli bir parçasını tekrar eder. for deyiminde sayaç artış oranı da verilmelidir.
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
Fonksiyonlar.
Adım Adım Algoritma.
SAYISAL ANALİZ Doç.Dr. Cüneyt BAYILMIŞ.
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
BİLGİSAYAR programlama II
BİLGİSAYAR PROGRAMLAMA Ders 4: Koşula Göre İşlem Yapma Yrd. Doç. Dr. Altan MESUT Trakya Üniversitesi Bilgisayar Mühendisliği.
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.
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. DERS NOTU Konu: Matlab’ de Diziler ve Matrisler.
Bilgisayar Programlama BIL 107
Fonksiyonlar ve Diziler
BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler
BİLGİSAYAR PROGRAMLAMA Ders 8: Fonksiyonlar
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İLGİSAYAR PROGRAMLAMA Ders 5: Döngüler
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 4: Diziler
Bölüm 8 Diziler Dizi Tanımı Dizi Elemanlarına Değer Atama
tanımları yapabilmeniz gerekmektedir .
Bölüm 9 Dizgiler Dizgi Tanımı Dizgi Girdi İşlemleri
Bölüm 8 Diziler Dizi Tanımı Dizi Elemanlarına Değer Atama
İleri Algoritma Analizi
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.
YAPISAL PROGRAMLAMA Hafta-7
7. DİZİLER Bir dizi, aynı tipteki elemanların yan yana sıralanışı ile elde edilen bir bilgi kümesidir. Matematikte kullanılan doğal sayılar (1,2,3,..),
NİŞANTAŞI ÜNİVERSİTESİ
Diziler(Arrays).
Sunum transkripti:

BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler Yrd. Doç. Dr. Altan MESUT Trakya Üniversitesi Bilgisayar Mühendisliği

Dizi (Array) Birbiri ile ilişkili verilerin bir sıra halinde kaydedilmesi ve işlenmesi gerektiği durumlarda diziler kullanılır. Dizi içindeki elemanların hepsi aynı veri tipindedir ve bellekte artarda saklanırlar. Diziye eleman ekleme ve dizideki elamanları okuma işlemleri genellikle döngüler kullanılarak yapılır.

Dizi Tanımlamaları C dilinde dizi tanımlamak için değişken isminden sonra [ ile ] karakterleri arasında dizinin boyutu verilir: int sayilar[10]; // Tamsayı dizisi char isim[10]; // Karakter dizisi C dilinde dizinin boyutu tanımlama anında belirlenir ve sonradan değiştirilemez (C# dilinde değiştirilebilir). Karakter dizisi string olarak ta bilinir (C#'ta ayrıca string veri tipi de vardır, C'de yoktur).

Dizilerde İndis Kullanımı Dizilerin ilk elemanının indisi sıfırdır: Önceki slaytta tanımladığımız sayılar dizisinin son elemanı sayilar[9] olacağı için, eğer sayilar[10]’a değer atanırsa derleme sırasında hata vermez, fakat program çalışırken hatalı bir sonuç üretebilir (çünkü 11. eleman için işletim sistemi tarafından bir yer ayrılmamıştır). Dizinin hangi elemanına değer atanacak ise köşeli parantez içinde o elemanın indis değeri yazılmalıdır: sayilar[5] = 1500; isim[3] = 'K'; sayilar dizisinin 6. elemanına 1500, isim dizisinin 4. elemanına da ‘K’ değerleri atanıyor.

1-10 arasındaki sayıların karesini bir diziye kopyalayan ve ekranda gösteren program #include <stdio.h> main(){ int i, a[10]; for (i = 0; i < 10; i++) { a[i] = (i+1)*(i+1); printf("%d\n", a[i]); } i değişkeni ile a dizisi aynı veri tipinde oldukları için aynı satırda tanımlanabilir. a dizisi daha küçük boyutta tanımlansa bile program hatasız derlenir ama doğru çalışmayabilir. Bu program dizi kullanmadan yapılabilir miydi? EVET

Girilen 10 tane tamsayıdan en büyüğünü bularak ekranda gösteren program main() { int i, enBuyuk, sayilar[10]; for (i = 0; i < 10; i++) { printf("%d. sayiyi giriniz : ", i+1); scanf("%d", &sayilar[i]); } enBuyuk = sayilar[0]; for (i = 1; i < 10; i++) if (sayilar[i] > enBuyuk) enBuyuk = sayilar[i]; printf("En buyuk sayi = %d", enBuyuk); Tek döngü ile yapılabilir miydi? EVET Dizi kullanmadan yapılabilir miydi? EVET (geçen hafta yaptık) 1 <= i-1 i NOT: Eğer i değişkeni üstteki for döngüsünde tanımlanırsa (for (int i=0; i<10; i++)), bu değişken sadece o blok içinde geçerli olacağından, alttaki için ayrıca tanımlanmalıdır.

Girilen 10 tane tamsayıyı girilme sırasının tersinde ekranda gösteren program main() { int i, sayilar[10]; for (i = 0; i < 10; i++) { printf("%d. sayiyi giriniz : ", i+1); scanf("%d", &sayilar[i]); } for (i = 9; i >= 0; i--) printf("%d\n", sayilar[i]); Tek döngü ile yapılabilir miydi? HAYIR Dizi kullanmadan yapılabilir miydi?

toplam=toplam+dizi(i) 2. Hafta: Örnek 16 (15 elemanlı bir sayı dizisine bilgi girişi yapılarak elemanların toplamını bulma) Başla main() { int i, toplam, dizi[15]; for (i = 0; i <= 14; i++) { printf("%d. eleman : ", i+1); scanf("%d", &dizi[i]); toplam += dizi[i]; } printf("%d", toplam); i,1,15,1 dizi(i) toplam=toplam+dizi(i) i toplam Dur

10 elemanlı iki dizinin eş indisli elemanlarının toplamını gösteren program main() { int dizi1[10], dizi2[10]; for (int i = 0; i < 10; i++) { printf("ilk dizinin %d. elemani : ", i+1); scanf("%d", &dizi1[i]); } printf("ikinci dizinin %d. elemani : ", i+1); scanf("%d", &dizi2[i]); printf("iki dizinin elemanlarinin toplami : \n"); for (int i = 0; i < 10; i++) printf("%d\n", dizi1[i] + dizi2[i]);

Dizilere ilk değer atama Dizi tanımlandığı anda ilk değerler atanabilir: int a[] = { 10, 25, 15, 40, 30 }; char b[] = { 'A', 'l', 't', 'a', 'n' }; Bu şekilde bir tanımlama yapıldığında dizinin boyutu verilen eleman sayısına eşit olacak şekilde belirlenir (iki dizi de 5 elemanlı olur). Önce dizi tanımlanıp sonra elemanlar tek tek girilseydi (a[0] = 10; a[1] = 25; ... ), hem diziye tanımlama anında boyut vermek gerekir, hem de değer atama uzun sürerdi. NOT: Karakter dizileri (string) için char b[] = "Altan"; şeklinde çift tırnak ile atama da bir çok derleyici tarafından geçerli kabul edilir.

10 elemanlı iki dizinin eş indisli elemanlarının toplamını gösteren program Daha önce yazdığımız programda kullanıcının 20 tane değer girmesi gerekiyordu. Bu programda ise değerler programcı tarafından veriliyor: main() { int dizi1[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int dizi2[] = { 2, 7, 9, 2, 3, -1, 5, 7, 4, 1 }; printf("iki dizinin elemanlarinin toplami : \n"); for (int i = 0; i < 10; i++) printf("%d\n", dizi1[i] + dizi2[i]); }

Çok Boyutlu Diziler [][] ile 2 boyutlu dizi, [][][] ile 3 boyutlu dizi, ... tanımlanabilir: int matris[3][3]; char isimler[2][5]; char isimler2[2][2][5]; 7 2 1 4 0 -1 5 9 -4 { {7, 2, 1}, {4, 0, -1}, {5, 9, -4} } { {'A', 'l', 't', 'a', 'n'}, {'A', 'l', 'i', ' ', ' '} } {{{'A', 'l', 't', 'a', 'n'}, {'A', 'l', 'i', ' ', ' '}}, {{'A', 'h', 'm', 'e', 't'}, {'V', 'e', 'l', 'i', ' '}}}

3x3 Kare Matris Toplama Programı Bu for döngüsü için blok başı yapmadık. Bu durumda sadece altındaki for döngüsünü içeren bir dış döngüdür. main(){ int i, j, A[3][3], B[3][3]; for (i = 0; i < 3; i++) for (j = 0; j < 3; j++){ printf("ilk matrisin %d-%d elemani : ", i+1, j+1); scanf("%d", &A[i][j]); } printf("ikinci matrisin %d-%d elemani : ", i+1, j+1); scanf("%d", &B[i][j]); printf("iki matrisin toplami :"); for (i = 0; i < 3; i++){ printf("\n"); for (j = 0; j < 3; j++) printf("%8d", A[i][j] + B[i][j]); Bu programdaki iç içe for döngülerinde dıştaki for döngüsü içteki for döngüsünü 3 kere çalıştırır. İçteki for döngüsü de kendi bloğunu 3 kere çalıştırdığına göre o blok içindeki işlemler 9 kere yapılır.

3x3 Kare Matris Toplama (2) main(){ int i, j, A[3][3], B[3][3]; printf("ilk matrisi giriniz :\n"); for (i = 0; i < 3; i++) scanf("%d %d %d", &A[i][0], &A[i][1], &A[i][2]); printf("ikinci matrisi giriniz :\n"); scanf("%d %d %d", &B[i][0], &B[i][1], &B[i][2]); printf("iki matrisin toplami :"); for (i = 0; i < 3; i++){ printf("\n"); for (j = 0; j < 3; j++) printf("%8d", A[i][j] + B[i][j]); } Bu programda veri girişi için iç içe for döngülerini kullanmadık. Dizinin ikinci boyutu için j değişkeni kullanmak yerine 0, 1, 2 sabit sayılarını yazdık. Bu programda veri girişi de toplam çıktısı gibi 3x3 matris şeklinde görünür.

Programın Çıktısı İlk matris girilirken elemanlar arasında SPACE, ikinci matris girilirken ise TAB tuşları kullanıldı. Son printf içinde %8d yerine %-8d kullanıldığında toplam çıktısı da matris girişleri gibi sola hizalı olarak görünür.

Ödevler 10 elemanlı bir dizinin elemanlarının aritmetik ortalamasını hesaplayan programı yazınız. 10 elemanlı bir dizinin varyansını ve standart sapmasını hesaplayan programı yazınız. Varyans dizideki tüm elemanların ortalamadan uzaklıklarının karelerinin ortalamasıdır. Standart sapma varyansın kare köküdür. Kullanıcının ENTER tuşuna basana kadar klavyeden girdiği her şeyi tersten (sondan başa doğru) gösteren programı yazınız.

Ödevler 4. 100 Adam ve 100 kapımız var. 1. adam 1’in katları olan kapılardan, 2. adam 2’nin katları olan kapılardan, ...., N. Adam N’in katları olan kapılardan, ... , 100. Adam 100’ün katları olan kapılardan geçerek kapıların konumlarını değiştiriyor. (Kapı açıksa kapatıyor, kapalıysa açıyor). En başta bütün kapıların kapalı olduğunu kabul edersek, 100. adam da geçtikten sonra hangi kapıların açık olduğunu bulan programı yazınız.

Ödevler 5. Romalı problemi: Roma’da Kral 21 kişinin öldürülmesine karar veriyor. Cellat fazla yorulmamak için öldürülecek olanları çember biçiminde diziyor. Herkesin eline bir balta veriyor. Öldürme kuralı olarak da 2. Kişi 3. Kişiyi öldürüyor. 5. Kişi 6. Kişiyi öldürüyor. Yani 2 kişi atlayıp 3. kişi öldürülüyor. Bu son iki kişi kalana kadar sürüyor. Son kalan iki kişi serbest bırakılacaktır. Serbest bırakılan kişilerin hangi numaralar olduğunu bulan programı yazınız.

Ödevler Matris Çarpımı programı yazınız. Matrislerin boyutlarını kullanıcı belirleyecek ve sonrasında değerleri girecektir. Matrislerin boyutları çarpma işlemine göre uygun olması için ilk matrisin sütun değeri ile ikinci matrisin satır değeri eşit girilmesi sağlanacaktır. NOT: Sizi en çok zorlayacak ödev budur. Matris çarpımı toplamaya göre daha kompleks bir işlem olduğu için iç içe 3 for döngüsü kullanılması gerekecektir.