19 Ocak 2015 Pazartesi

Sayıları küçükten büyüğe sıralamak

  Kullanıcının gireceği n tane sayıyı küçükten büyüğe sıralayacak bir program yazalım. Bunu bir kaç yoldan yapabiliriz ama ben bir tanesini göstereceğim.

  Öncelikle programın çalışma mantığını kavrayalım.
  1. Kullanıcı kaç sayı gireceğini söyler.
  2. Kullanıcının girdiği sayılar bir diziye atanır.
  3. Dizinin 0. ve 1. elemanından kontrole başlanır.
  4. Eğer indisi büyük olan sayı diğerinden küçükse iki sayının yeri değiştirilir.
  5. Bu işlem n elemanlı bir dizi için n kere tekrarlanır.
  Programı yazmaya başlayalım.

#include 

int main() {
 int dizi[100]= { };
 int n;//Kullanıcının gireceği sayı miktarı
 printf("Kac sayi gireceksiniz?");
 scanf("%d", &n);
 return 0;
} 
  (Kullanıcının max. 100 sayi gireceğini varsaydık.)
  Kullanıcıdan kaç sayı gireceğini öğrendik. Şimdi sayıları alıp diziye atayalım.

#include 

int main() {
 int dizi[100]= { };
 int n;//Kullanıcının gireceği sayı miktarı
 printf("Kac sayi gireceksiniz?");
 scanf("%d", &n);
 int i;
 for (i=0;i<n;i++) {
  printf("%d. sayiyi giriniz.",i+1);
  scanf("%d", &dizi[i]);
 }
 return 0;
}

  Artık dizimizde kullanıcının girdiği sayılar var. Bunları sıralamak için yukarıdaki mantığa göre bir fonksiyon yazalım.

void sirala(int d[], int n) {
    int t;//Yer değiştirmek için kullanacağımız değişken.
    int i,j;
    for (i=1;i<n;i++) {
        /*n-1 e kadar geldik çünkü (n+1). elemanı kontrol
         ederken dizi dışına çıkardı.*/
        for (j=0;j<n-1;j++) {
            if (d[j]>d[j+1]) {
                t=d[j];
                d[j]=d[j+1];
                d[j+1]=t;
            }
        }
    }
}

  Sadece diziyi göderdik ve geriye bir şey döndürmedik farkettiyseniz. Çünkü diziyi fonksiyona gönderdiğinizde değişkenlerden farklı olarak dizi içinde yaptığınız değişikler kaybolmaz.

 Prototipi de ekleyerek programın tamamlanmış hali:

#include <stdio.h>
void sirala(int d[], int n);

int main() {
 int dizi[100]= { };
 int n;//Kullanıcının gireceği sayı miktarı
 printf("Kac sayi gireceksiniz?");
 scanf("%d", &n);
 int i;
 for (i=0;i<n;i++) {
  printf("%d. sayiyi giriniz.",i+1);
  scanf("%d", &dizi[i]);
 }
 sirala(dizi,n);
 for (i=0;i<n;i++) {
  printf("%d  ",dizi[i]);
 }
 return 0;
}

void sirala(int d[], int n) {
 int t;//Yer değiştirmek için kullanacağımız değişken.
 int i,j;
 for (i=1;i<n;i++) {
  /*n-1 e kadar geldik çünkü (n+1). elemanı kontrol
   ederken dizi dışına çıkardı.*/
  for (j=0;j<n-1;j++) {
   if (d[j]>d[j+1]) {
    t=d[j];
    d[j]=d[j+1];
    d[j+1]=t;
   }
  }
 }
}


https://drive.google.com/folderview?id=0BxSQqX34gVqJR25MZEJ2TWxLb00&usp=sharing

Hiç yorum yok:

Yorum Gönder